1#!/bin/sh 2# 3# qemu configure script (c) 2003 Fabrice Bellard 4# 5 6# Unset some variables known to interfere with behavior of common tools, 7# just as autoconf does. 8CLICOLOR_FORCE= GREP_OPTIONS= 9unset CLICOLOR_FORCE GREP_OPTIONS 10 11# Don't allow CCACHE, if present, to use cached results of compile tests! 12export CCACHE_RECACHE=yes 13 14# make source path absolute 15source_path=$(cd "$(dirname -- "$0")"; pwd) 16 17if test "$PWD" = "$source_path" 18then 19 echo "Using './build' as the directory for build output" 20 21 MARKER=build/auto-created-by-configure 22 23 if test -e build 24 then 25 if test -f $MARKER 26 then 27 rm -rf build 28 else 29 echo "ERROR: ./build dir already exists and was not previously created by configure" 30 exit 1 31 fi 32 fi 33 34 mkdir build 35 touch $MARKER 36 37 cat > GNUmakefile <<'EOF' 38# This file is auto-generated by configure to support in-source tree 39# 'make' command invocation 40 41ifeq ($(MAKECMDGOALS),) 42recurse: all 43endif 44 45.NOTPARALLEL: % 46%: force 47 @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...' 48 @$(MAKE) -C build -f Makefile $(MAKECMDGOALS) 49 @if test "$(MAKECMDGOALS)" = "distclean" && \ 50 test -e build/auto-created-by-configure ; \ 51 then \ 52 rm -rf build GNUmakefile ; \ 53 fi 54force: ; 55.PHONY: force 56GNUmakefile: ; 57 58EOF 59 cd build 60 exec $source_path/configure "$@" 61fi 62 63# Temporary directory used for files created while 64# configure runs. Since it is in the build directory 65# we can safely blow away any previous version of it 66# (and we need not jump through hoops to try to delete 67# it when configure exits.) 68TMPDIR1="config-temp" 69rm -rf "${TMPDIR1}" 70mkdir -p "${TMPDIR1}" 71if [ $? -ne 0 ]; then 72 echo "ERROR: failed to create temporary directory" 73 exit 1 74fi 75 76TMPB="qemu-conf" 77TMPC="${TMPDIR1}/${TMPB}.c" 78TMPO="${TMPDIR1}/${TMPB}.o" 79TMPCXX="${TMPDIR1}/${TMPB}.cxx" 80TMPE="${TMPDIR1}/${TMPB}.exe" 81TMPTXT="${TMPDIR1}/${TMPB}.txt" 82 83rm -f config.log 84 85# Print a helpful header at the top of config.log 86echo "# QEMU configure log $(date)" >> config.log 87printf "# Configured with:" >> config.log 88printf " '%s'" "$0" "$@" >> config.log 89echo >> config.log 90echo "#" >> config.log 91 92print_error() { 93 (echo 94 echo "ERROR: $1" 95 while test -n "$2"; do 96 echo " $2" 97 shift 98 done 99 echo) >&2 100} 101 102error_exit() { 103 print_error "$@" 104 exit 1 105} 106 107do_compiler() { 108 # Run the compiler, capturing its output to the log. First argument 109 # is compiler binary to execute. 110 local compiler="$1" 111 shift 112 if test -n "$BASH_VERSION"; then eval ' 113 echo >>config.log " 114funcs: ${FUNCNAME[*]} 115lines: ${BASH_LINENO[*]}" 116 '; fi 117 echo $compiler "$@" >> config.log 118 $compiler "$@" >> config.log 2>&1 || return $? 119 # Test passed. If this is an --enable-werror build, rerun 120 # the test with -Werror and bail out if it fails. This 121 # makes warning-generating-errors in configure test code 122 # obvious to developers. 123 if test "$werror" != "yes"; then 124 return 0 125 fi 126 # Don't bother rerunning the compile if we were already using -Werror 127 case "$*" in 128 *-Werror*) 129 return 0 130 ;; 131 esac 132 echo $compiler -Werror "$@" >> config.log 133 $compiler -Werror "$@" >> config.log 2>&1 && return $? 134 error_exit "configure test passed without -Werror but failed with -Werror." \ 135 "This is probably a bug in the configure script. The failing command" \ 136 "will be at the bottom of config.log." \ 137 "You can run configure with --disable-werror to bypass this check." 138} 139 140do_cc() { 141 do_compiler "$cc" "$@" 142} 143 144do_cxx() { 145 do_compiler "$cxx" "$@" 146} 147 148# Append $2 to the variable named $1, with space separation 149add_to() { 150 eval $1=\${$1:+\"\$$1 \"}\$2 151} 152 153update_cxxflags() { 154 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those 155 # options which some versions of GCC's C++ compiler complain about 156 # because they only make sense for C programs. 157 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS" 158 CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu99/-std=gnu++11/) 159 for arg in $QEMU_CFLAGS; do 160 case $arg in 161 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\ 162 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls) 163 ;; 164 *) 165 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg 166 ;; 167 esac 168 done 169} 170 171compile_object() { 172 local_cflags="$1" 173 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC 174} 175 176compile_prog() { 177 local_cflags="$1" 178 local_ldflags="$2" 179 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \ 180 $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags 181} 182 183# symbolically link $1 to $2. Portable version of "ln -sf". 184symlink() { 185 rm -rf "$2" 186 mkdir -p "$(dirname "$2")" 187 ln -s "$1" "$2" 188} 189 190# check whether a command is available to this shell (may be either an 191# executable or a builtin) 192has() { 193 type "$1" >/dev/null 2>&1 194} 195 196version_ge () { 197 local_ver1=`echo $1 | tr . ' '` 198 local_ver2=`echo $2 | tr . ' '` 199 while true; do 200 set x $local_ver1 201 local_first=${2-0} 202 # 'shift 2' if $2 is set, or 'shift' if $2 is not set 203 shift ${2:+2} 204 local_ver1=$* 205 set x $local_ver2 206 # the second argument finished, the first must be greater or equal 207 test $# = 1 && return 0 208 test $local_first -lt $2 && return 1 209 test $local_first -gt $2 && return 0 210 shift ${2:+2} 211 local_ver2=$* 212 done 213} 214 215have_backend () { 216 echo "$trace_backends" | grep "$1" >/dev/null 217} 218 219glob() { 220 eval test -z '"${1#'"$2"'}"' 221} 222 223ld_has() { 224 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1 225} 226 227if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]"; 228then 229 error_exit "main directory cannot contain spaces nor colons" 230fi 231 232# default parameters 233cpu="" 234iasl="iasl" 235interp_prefix="/usr/gnemul/qemu-%M" 236static="no" 237cross_prefix="" 238audio_drv_list="" 239block_drv_rw_whitelist="" 240block_drv_ro_whitelist="" 241host_cc="cc" 242audio_win_int="" 243libs_qga="" 244debug_info="yes" 245stack_protector="" 246safe_stack="" 247use_containers="yes" 248gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb") 249 250if test -e "$source_path/.git" 251then 252 git_update=yes 253 git_submodules="ui/keycodemapdb" 254 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3" 255 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3" 256else 257 git_update=no 258 git_submodules="" 259 260 if ! test -f "$source_path/ui/keycodemapdb/README" 261 then 262 echo 263 echo "ERROR: missing file $source_path/ui/keycodemapdb/README" 264 echo 265 echo "This is not a GIT checkout but module content appears to" 266 echo "be missing. Do not use 'git archive' or GitHub download links" 267 echo "to acquire QEMU source archives. Non-GIT builds are only" 268 echo "supported with source archives linked from:" 269 echo 270 echo " https://www.qemu.org/download/#source" 271 echo 272 echo "Developers working with GIT can use scripts/archive-source.sh" 273 echo "if they need to create valid source archives." 274 echo 275 exit 1 276 fi 277fi 278git="git" 279 280# Don't accept a target_list environment variable. 281unset target_list 282unset target_list_exclude 283 284# Default value for a variable defining feature "foo". 285# * foo="no" feature will only be used if --enable-foo arg is given 286# * foo="" feature will be searched for, and if found, will be used 287# unless --disable-foo is given 288# * foo="yes" this value will only be set by --enable-foo flag. 289# feature will searched for, 290# if not found, configure exits with error 291# 292# Always add --enable-foo and --disable-foo command line args. 293# Distributions want to ensure that several features are compiled in, and it 294# is impossible without a --enable-foo that exits if a feature is not found. 295 296brlapi="" 297curl="" 298iconv="auto" 299curses="auto" 300docs="auto" 301fdt="auto" 302netmap="no" 303sdl="auto" 304sdl_image="auto" 305virtiofsd="auto" 306virtfs="" 307libudev="auto" 308mpath="auto" 309vnc="enabled" 310sparse="auto" 311vde="" 312vnc_sasl="auto" 313vnc_jpeg="auto" 314vnc_png="auto" 315xkbcommon="auto" 316xen="" 317xen_ctrl_version="" 318xen_pci_passthrough="auto" 319linux_aio="" 320linux_io_uring="" 321cap_ng="" 322attr="" 323libattr="" 324xfs="" 325tcg="enabled" 326membarrier="" 327vhost_net="" 328vhost_crypto="" 329vhost_scsi="" 330vhost_vsock="" 331vhost_user="" 332vhost_user_fs="" 333kvm="auto" 334hax="auto" 335hvf="auto" 336whpx="auto" 337rdma="" 338pvrdma="" 339gprof="no" 340debug_tcg="no" 341debug="no" 342sanitizers="no" 343tsan="no" 344fortify_source="" 345strip_opt="yes" 346tcg_interpreter="no" 347bigendian="no" 348mingw32="no" 349gcov="no" 350EXESUF="" 351HOST_DSOSUF=".so" 352modules="no" 353module_upgrades="no" 354prefix="/usr/local" 355qemu_suffix="qemu" 356slirp="auto" 357oss_lib="" 358bsd="no" 359linux="no" 360solaris="no" 361profiler="no" 362cocoa="auto" 363softmmu="yes" 364linux_user="no" 365bsd_user="no" 366blobs="true" 367pkgversion="" 368pie="" 369qom_cast_debug="yes" 370trace_backends="log" 371trace_file="trace" 372spice="" 373rbd="" 374smartcard="" 375u2f="auto" 376libusb="" 377usb_redir="" 378opengl="" 379opengl_dmabuf="no" 380cpuid_h="no" 381avx2_opt="" 382capstone="auto" 383lzo="" 384snappy="" 385bzip2="" 386lzfse="" 387zstd="" 388guest_agent="" 389guest_agent_with_vss="no" 390guest_agent_ntddscsi="no" 391guest_agent_msi="" 392vss_win32_sdk="" 393win_sdk="no" 394want_tools="" 395libiscsi="" 396libnfs="" 397coroutine="" 398coroutine_pool="" 399debug_stack_usage="no" 400crypto_afalg="no" 401seccomp="" 402glusterfs="" 403glusterfs_xlator_opt="no" 404glusterfs_discard="no" 405glusterfs_fallocate="no" 406glusterfs_zerofill="no" 407glusterfs_ftruncate_has_stat="no" 408glusterfs_iocb_has_stat="no" 409gtk="" 410gtk_gl="no" 411tls_priority="NORMAL" 412gnutls="" 413nettle="" 414nettle_xts="no" 415gcrypt="" 416gcrypt_hmac="no" 417gcrypt_xts="no" 418qemu_private_xts="yes" 419auth_pam="" 420vte="" 421virglrenderer="" 422tpm="" 423libssh="" 424live_block_migration="yes" 425numa="" 426tcmalloc="no" 427jemalloc="no" 428replication="yes" 429bochs="yes" 430cloop="yes" 431dmg="yes" 432qcow1="yes" 433vdi="yes" 434vvfat="yes" 435qed="yes" 436parallels="yes" 437sheepdog="no" 438libxml2="" 439debug_mutex="no" 440libpmem="" 441default_devices="yes" 442plugins="no" 443fuzzing="no" 444rng_none="no" 445secret_keyring="" 446libdaxctl="" 447meson="" 448ninja="" 449skip_meson=no 450gettext="" 451 452bogus_os="no" 453malloc_trim="auto" 454 455# parse CC options first 456for opt do 457 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 458 case "$opt" in 459 --cross-prefix=*) cross_prefix="$optarg" 460 ;; 461 --cc=*) CC="$optarg" 462 ;; 463 --cxx=*) CXX="$optarg" 464 ;; 465 --cpu=*) cpu="$optarg" 466 ;; 467 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg" 468 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" 469 ;; 470 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg" 471 ;; 472 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" 473 EXTRA_LDFLAGS="$optarg" 474 ;; 475 --enable-debug-info) debug_info="yes" 476 ;; 477 --disable-debug-info) debug_info="no" 478 ;; 479 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" 480 ;; 481 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*} 482 eval "cross_cc_cflags_${cc_arch}=\$optarg" 483 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}" 484 ;; 485 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} 486 cc_archs="$cc_archs $cc_arch" 487 eval "cross_cc_${cc_arch}=\$optarg" 488 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}" 489 ;; 490 esac 491done 492# OS specific 493# Using uname is really, really broken. Once we have the right set of checks 494# we can eliminate its usage altogether. 495 496# Preferred compiler: 497# ${CC} (if set) 498# ${cross_prefix}gcc (if cross-prefix specified) 499# system compiler 500if test -z "${CC}${cross_prefix}"; then 501 cc="$host_cc" 502else 503 cc="${CC-${cross_prefix}gcc}" 504fi 505 506if test -z "${CXX}${cross_prefix}"; then 507 cxx="c++" 508else 509 cxx="${CXX-${cross_prefix}g++}" 510fi 511 512ar="${AR-${cross_prefix}ar}" 513as="${AS-${cross_prefix}as}" 514ccas="${CCAS-$cc}" 515cpp="${CPP-$cc -E}" 516objcopy="${OBJCOPY-${cross_prefix}objcopy}" 517ld="${LD-${cross_prefix}ld}" 518ranlib="${RANLIB-${cross_prefix}ranlib}" 519nm="${NM-${cross_prefix}nm}" 520strip="${STRIP-${cross_prefix}strip}" 521windres="${WINDRES-${cross_prefix}windres}" 522pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}" 523query_pkg_config() { 524 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@" 525} 526pkg_config=query_pkg_config 527sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}" 528 529# If the user hasn't specified ARFLAGS, default to 'rv', just as make does. 530ARFLAGS="${ARFLAGS-rv}" 531 532# default flags for all hosts 533# We use -fwrapv to tell the compiler that we require a C dialect where 534# left shift of signed integers is well defined and has the expected 535# 2s-complement style results. (Both clang and gcc agree that it 536# provides these semantics.) 537QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS" 538QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS" 539QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS" 540QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS" 541 542# Flags that are needed during configure but later taken care of by Meson 543CONFIGURE_CFLAGS="-std=gnu99 -Wall" 544CONFIGURE_LDFLAGS= 545 546 547check_define() { 548cat > $TMPC <<EOF 549#if !defined($1) 550#error $1 not defined 551#endif 552int main(void) { return 0; } 553EOF 554 compile_object 555} 556 557check_include() { 558cat > $TMPC <<EOF 559#include <$1> 560int main(void) { return 0; } 561EOF 562 compile_object 563} 564 565write_c_skeleton() { 566 cat > $TMPC <<EOF 567int main(void) { return 0; } 568EOF 569} 570 571write_c_fuzzer_skeleton() { 572 cat > $TMPC <<EOF 573#include <stdint.h> 574#include <sys/types.h> 575int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size); 576int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; } 577EOF 578} 579 580if check_define __linux__ ; then 581 targetos="Linux" 582elif check_define _WIN32 ; then 583 targetos='MINGW32' 584elif check_define __OpenBSD__ ; then 585 targetos='OpenBSD' 586elif check_define __sun__ ; then 587 targetos='SunOS' 588elif check_define __HAIKU__ ; then 589 targetos='Haiku' 590elif check_define __FreeBSD__ ; then 591 targetos='FreeBSD' 592elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then 593 targetos='GNU/kFreeBSD' 594elif check_define __DragonFly__ ; then 595 targetos='DragonFly' 596elif check_define __NetBSD__; then 597 targetos='NetBSD' 598elif check_define __APPLE__; then 599 targetos='Darwin' 600else 601 # This is a fatal error, but don't report it yet, because we 602 # might be going to just print the --help text, or it might 603 # be the result of a missing compiler. 604 targetos='bogus' 605 bogus_os='yes' 606fi 607 608# Some host OSes need non-standard checks for which CPU to use. 609# Note that these checks are broken for cross-compilation: if you're 610# cross-compiling to one of these OSes then you'll need to specify 611# the correct CPU with the --cpu option. 612case $targetos in 613Darwin) 614 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can 615 # run 64-bit userspace code. 616 # If the user didn't specify a CPU explicitly and the kernel says this is 617 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code. 618 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then 619 cpu="x86_64" 620 fi 621 HOST_DSOSUF=".dylib" 622 ;; 623SunOS) 624 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo 625 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then 626 cpu="x86_64" 627 fi 628esac 629 630if test ! -z "$cpu" ; then 631 # command line argument 632 : 633elif check_define __i386__ ; then 634 cpu="i386" 635elif check_define __x86_64__ ; then 636 if check_define __ILP32__ ; then 637 cpu="x32" 638 else 639 cpu="x86_64" 640 fi 641elif check_define __sparc__ ; then 642 if check_define __arch64__ ; then 643 cpu="sparc64" 644 else 645 cpu="sparc" 646 fi 647elif check_define _ARCH_PPC ; then 648 if check_define _ARCH_PPC64 ; then 649 if check_define _LITTLE_ENDIAN ; then 650 cpu="ppc64le" 651 else 652 cpu="ppc64" 653 fi 654 else 655 cpu="ppc" 656 fi 657elif check_define __mips__ ; then 658 cpu="mips" 659elif check_define __s390__ ; then 660 if check_define __s390x__ ; then 661 cpu="s390x" 662 else 663 cpu="s390" 664 fi 665elif check_define __riscv ; then 666 if check_define _LP64 ; then 667 cpu="riscv64" 668 else 669 cpu="riscv32" 670 fi 671elif check_define __arm__ ; then 672 cpu="arm" 673elif check_define __aarch64__ ; then 674 cpu="aarch64" 675else 676 cpu=$(uname -m) 677fi 678 679ARCH= 680# Normalise host CPU name and set ARCH. 681# Note that this case should only have supported host CPUs, not guests. 682case "$cpu" in 683 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64) 684 ;; 685 ppc64le) 686 ARCH="ppc64" 687 ;; 688 i386|i486|i586|i686|i86pc|BePC) 689 cpu="i386" 690 ;; 691 x86_64|amd64) 692 cpu="x86_64" 693 ;; 694 armv*b|armv*l|arm) 695 cpu="arm" 696 ;; 697 aarch64) 698 cpu="aarch64" 699 ;; 700 mips*) 701 cpu="mips" 702 ;; 703 sparc|sun4[cdmuv]) 704 cpu="sparc" 705 ;; 706 *) 707 # This will result in either an error or falling back to TCI later 708 ARCH=unknown 709 ;; 710esac 711if test -z "$ARCH"; then 712 ARCH="$cpu" 713fi 714 715# OS specific 716 717case $targetos in 718MINGW32*) 719 mingw32="yes" 720 vhost_user="no" 721 audio_possible_drivers="dsound sdl" 722 if check_include dsound.h; then 723 audio_drv_list="dsound" 724 else 725 audio_drv_list="" 726 fi 727 supported_os="yes" 728 pie="no" 729;; 730GNU/kFreeBSD) 731 bsd="yes" 732 audio_drv_list="oss try-sdl" 733 audio_possible_drivers="oss sdl pa" 734;; 735FreeBSD) 736 bsd="yes" 737 make="${MAKE-gmake}" 738 audio_drv_list="oss try-sdl" 739 audio_possible_drivers="oss sdl pa" 740 # needed for kinfo_getvmmap(3) in libutil.h 741 netmap="" # enable netmap autodetect 742;; 743DragonFly) 744 bsd="yes" 745 make="${MAKE-gmake}" 746 audio_drv_list="oss try-sdl" 747 audio_possible_drivers="oss sdl pa" 748;; 749NetBSD) 750 bsd="yes" 751 make="${MAKE-gmake}" 752 audio_drv_list="oss try-sdl" 753 audio_possible_drivers="oss sdl" 754 oss_lib="-lossaudio" 755;; 756OpenBSD) 757 bsd="yes" 758 make="${MAKE-gmake}" 759 audio_drv_list="try-sdl" 760 audio_possible_drivers="sdl" 761;; 762Darwin) 763 bsd="yes" 764 darwin="yes" 765 if [ "$cpu" = "x86_64" ] ; then 766 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS" 767 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS" 768 fi 769 cocoa="enabled" 770 audio_drv_list="coreaudio try-sdl" 771 audio_possible_drivers="coreaudio sdl" 772 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS" 773 # Disable attempts to use ObjectiveC features in os/object.h since they 774 # won't work when we're compiling with gcc as a C compiler. 775 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS" 776;; 777SunOS) 778 solaris="yes" 779 make="${MAKE-gmake}" 780 smbd="${SMBD-/usr/sfw/sbin/smbd}" 781 if test -f /usr/include/sys/soundcard.h ; then 782 audio_drv_list="oss try-sdl" 783 fi 784 audio_possible_drivers="oss sdl" 785# needed for CMSG_ macros in sys/socket.h 786 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS" 787# needed for TIOCWIN* defines in termios.h 788 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS" 789;; 790Haiku) 791 haiku="yes" 792 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS" 793;; 794Linux) 795 audio_drv_list="try-pa oss" 796 audio_possible_drivers="oss alsa sdl pa" 797 linux="yes" 798 linux_user="yes" 799;; 800esac 801 802if [ "$bsd" = "yes" ] ; then 803 if [ "$darwin" != "yes" ] ; then 804 bsd_user="yes" 805 fi 806fi 807 808: ${make=${MAKE-make}} 809 810# We prefer python 3.x. A bare 'python' is traditionally 811# python 2.x, but some distros have it as python 3.x, so 812# we check that too 813python= 814explicit_python=no 815for binary in "${PYTHON-python3}" python 816do 817 if has "$binary" 818 then 819 python=$(command -v "$binary") 820 break 821 fi 822done 823 824 825# Check for ancillary tools used in testing 826genisoimage= 827for binary in genisoimage mkisofs 828do 829 if has $binary 830 then 831 genisoimage=$(command -v "$binary") 832 break 833 fi 834done 835 836: ${smbd=${SMBD-/usr/sbin/smbd}} 837 838# Default objcc to clang if available, otherwise use CC 839if has clang; then 840 objcc=clang 841else 842 objcc="$cc" 843fi 844 845if test "$mingw32" = "yes" ; then 846 EXESUF=".exe" 847 HOST_DSOSUF=".dll" 848 # MinGW needs -mthreads for TLS and macro _MT. 849 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS" 850 write_c_skeleton; 851 prefix="/qemu" 852 qemu_suffix="" 853 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga" 854fi 855 856werror="" 857 858for opt do 859 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 860 case "$opt" in 861 --help|-h) show_help=yes 862 ;; 863 --version|-V) exec cat $source_path/VERSION 864 ;; 865 --prefix=*) prefix="$optarg" 866 ;; 867 --interp-prefix=*) interp_prefix="$optarg" 868 ;; 869 --cross-prefix=*) 870 ;; 871 --cc=*) 872 ;; 873 --host-cc=*) host_cc="$optarg" 874 ;; 875 --cxx=*) 876 ;; 877 --iasl=*) iasl="$optarg" 878 ;; 879 --objcc=*) objcc="$optarg" 880 ;; 881 --make=*) make="$optarg" 882 ;; 883 --install=*) 884 ;; 885 --python=*) python="$optarg" ; explicit_python=yes 886 ;; 887 --sphinx-build=*) sphinx_build="$optarg" 888 ;; 889 --skip-meson) skip_meson=yes 890 ;; 891 --meson=*) meson="$optarg" 892 ;; 893 --ninja=*) ninja="$optarg" 894 ;; 895 --smbd=*) smbd="$optarg" 896 ;; 897 --extra-cflags=*) 898 ;; 899 --extra-cxxflags=*) 900 ;; 901 --extra-ldflags=*) 902 ;; 903 --enable-debug-info) 904 ;; 905 --disable-debug-info) 906 ;; 907 --cross-cc-*) 908 ;; 909 --enable-modules) 910 modules="yes" 911 ;; 912 --disable-modules) 913 modules="no" 914 ;; 915 --disable-module-upgrades) module_upgrades="no" 916 ;; 917 --enable-module-upgrades) module_upgrades="yes" 918 ;; 919 --cpu=*) 920 ;; 921 --target-list=*) target_list="$optarg" 922 if test "$target_list_exclude"; then 923 error_exit "Can't mix --target-list with --target-list-exclude" 924 fi 925 ;; 926 --target-list-exclude=*) target_list_exclude="$optarg" 927 if test "$target_list"; then 928 error_exit "Can't mix --target-list-exclude with --target-list" 929 fi 930 ;; 931 --enable-trace-backends=*) trace_backends="$optarg" 932 ;; 933 # XXX: backwards compatibility 934 --enable-trace-backend=*) trace_backends="$optarg" 935 ;; 936 --with-trace-file=*) trace_file="$optarg" 937 ;; 938 --with-default-devices) default_devices="yes" 939 ;; 940 --without-default-devices) default_devices="no" 941 ;; 942 --enable-gprof) gprof="yes" 943 ;; 944 --enable-gcov) gcov="yes" 945 ;; 946 --static) 947 static="yes" 948 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS" 949 ;; 950 --mandir=*) mandir="$optarg" 951 ;; 952 --bindir=*) bindir="$optarg" 953 ;; 954 --libdir=*) libdir="$optarg" 955 ;; 956 --libexecdir=*) libexecdir="$optarg" 957 ;; 958 --includedir=*) includedir="$optarg" 959 ;; 960 --datadir=*) datadir="$optarg" 961 ;; 962 --with-suffix=*) qemu_suffix="$optarg" 963 ;; 964 --docdir=*) docdir="$optarg" 965 ;; 966 --localedir=*) localedir="$optarg" 967 ;; 968 --sysconfdir=*) sysconfdir="$optarg" 969 ;; 970 --localstatedir=*) local_statedir="$optarg" 971 ;; 972 --firmwarepath=*) firmwarepath="$optarg" 973 ;; 974 --host=*|--build=*|\ 975 --disable-dependency-tracking|\ 976 --sbindir=*|--sharedstatedir=*|\ 977 --oldincludedir=*|--datarootdir=*|--infodir=*|\ 978 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*) 979 # These switches are silently ignored, for compatibility with 980 # autoconf-generated configure scripts. This allows QEMU's 981 # configure to be used by RPM and similar macros that set 982 # lots of directory switches by default. 983 ;; 984 --disable-sdl) sdl="disabled" 985 ;; 986 --enable-sdl) sdl="enabled" 987 ;; 988 --disable-sdl-image) sdl_image="disabled" 989 ;; 990 --enable-sdl-image) sdl_image="enabled" 991 ;; 992 --disable-qom-cast-debug) qom_cast_debug="no" 993 ;; 994 --enable-qom-cast-debug) qom_cast_debug="yes" 995 ;; 996 --disable-virtfs) virtfs="no" 997 ;; 998 --enable-virtfs) virtfs="yes" 999 ;; 1000 --disable-libudev) libudev="disabled" 1001 ;; 1002 --enable-libudev) libudev="enabled" 1003 ;; 1004 --disable-virtiofsd) virtiofsd="disabled" 1005 ;; 1006 --enable-virtiofsd) virtiofsd="enabled" 1007 ;; 1008 --disable-mpath) mpath="disabled" 1009 ;; 1010 --enable-mpath) mpath="enabled" 1011 ;; 1012 --disable-vnc) vnc="disabled" 1013 ;; 1014 --enable-vnc) vnc="enabled" 1015 ;; 1016 --disable-gettext) gettext="false" 1017 ;; 1018 --enable-gettext) gettext="true" 1019 ;; 1020 --oss-lib=*) oss_lib="$optarg" 1021 ;; 1022 --audio-drv-list=*) audio_drv_list="$optarg" 1023 ;; 1024 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 1025 ;; 1026 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 1027 ;; 1028 --enable-debug-tcg) debug_tcg="yes" 1029 ;; 1030 --disable-debug-tcg) debug_tcg="no" 1031 ;; 1032 --enable-debug) 1033 # Enable debugging options that aren't excessively noisy 1034 debug_tcg="yes" 1035 debug_mutex="yes" 1036 debug="yes" 1037 strip_opt="no" 1038 fortify_source="no" 1039 ;; 1040 --enable-sanitizers) sanitizers="yes" 1041 ;; 1042 --disable-sanitizers) sanitizers="no" 1043 ;; 1044 --enable-tsan) tsan="yes" 1045 ;; 1046 --disable-tsan) tsan="no" 1047 ;; 1048 --enable-sparse) sparse="enabled" 1049 ;; 1050 --disable-sparse) sparse="disabled" 1051 ;; 1052 --disable-strip) strip_opt="no" 1053 ;; 1054 --disable-vnc-sasl) vnc_sasl="disabled" 1055 ;; 1056 --enable-vnc-sasl) vnc_sasl="enabled" 1057 ;; 1058 --disable-vnc-jpeg) vnc_jpeg="disabled" 1059 ;; 1060 --enable-vnc-jpeg) vnc_jpeg="enabled" 1061 ;; 1062 --disable-vnc-png) vnc_png="disabled" 1063 ;; 1064 --enable-vnc-png) vnc_png="enabled" 1065 ;; 1066 --disable-slirp) slirp="disabled" 1067 ;; 1068 --enable-slirp=git) slirp="internal" 1069 ;; 1070 --enable-slirp=system) slirp="system" 1071 ;; 1072 --disable-vde) vde="no" 1073 ;; 1074 --enable-vde) vde="yes" 1075 ;; 1076 --disable-netmap) netmap="no" 1077 ;; 1078 --enable-netmap) netmap="yes" 1079 ;; 1080 --disable-xen) xen="disabled" 1081 ;; 1082 --enable-xen) xen="enabled" 1083 ;; 1084 --disable-xen-pci-passthrough) xen_pci_passthrough="disabled" 1085 ;; 1086 --enable-xen-pci-passthrough) xen_pci_passthrough="enabled" 1087 ;; 1088 --disable-brlapi) brlapi="no" 1089 ;; 1090 --enable-brlapi) brlapi="yes" 1091 ;; 1092 --disable-kvm) kvm="disabled" 1093 ;; 1094 --enable-kvm) kvm="enabled" 1095 ;; 1096 --disable-hax) hax="disabled" 1097 ;; 1098 --enable-hax) hax="enabled" 1099 ;; 1100 --disable-hvf) hvf="disabled" 1101 ;; 1102 --enable-hvf) hvf="enabled" 1103 ;; 1104 --disable-whpx) whpx="disabled" 1105 ;; 1106 --enable-whpx) whpx="enabled" 1107 ;; 1108 --disable-tcg-interpreter) tcg_interpreter="no" 1109 ;; 1110 --enable-tcg-interpreter) tcg_interpreter="yes" 1111 ;; 1112 --disable-cap-ng) cap_ng="no" 1113 ;; 1114 --enable-cap-ng) cap_ng="yes" 1115 ;; 1116 --disable-tcg) tcg="disabled" 1117 ;; 1118 --enable-tcg) tcg="enabled" 1119 ;; 1120 --disable-malloc-trim) malloc_trim="disabled" 1121 ;; 1122 --enable-malloc-trim) malloc_trim="enabled" 1123 ;; 1124 --disable-spice) spice="no" 1125 ;; 1126 --enable-spice) spice="yes" 1127 ;; 1128 --disable-libiscsi) libiscsi="no" 1129 ;; 1130 --enable-libiscsi) libiscsi="yes" 1131 ;; 1132 --disable-libnfs) libnfs="no" 1133 ;; 1134 --enable-libnfs) libnfs="yes" 1135 ;; 1136 --enable-profiler) profiler="yes" 1137 ;; 1138 --disable-cocoa) cocoa="disabled" 1139 ;; 1140 --enable-cocoa) 1141 cocoa="enabled" ; 1142 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)" 1143 ;; 1144 --disable-system) softmmu="no" 1145 ;; 1146 --enable-system) softmmu="yes" 1147 ;; 1148 --disable-user) 1149 linux_user="no" ; 1150 bsd_user="no" ; 1151 ;; 1152 --enable-user) ;; 1153 --disable-linux-user) linux_user="no" 1154 ;; 1155 --enable-linux-user) linux_user="yes" 1156 ;; 1157 --disable-bsd-user) bsd_user="no" 1158 ;; 1159 --enable-bsd-user) bsd_user="yes" 1160 ;; 1161 --enable-pie) pie="yes" 1162 ;; 1163 --disable-pie) pie="no" 1164 ;; 1165 --enable-werror) werror="yes" 1166 ;; 1167 --disable-werror) werror="no" 1168 ;; 1169 --enable-stack-protector) stack_protector="yes" 1170 ;; 1171 --disable-stack-protector) stack_protector="no" 1172 ;; 1173 --enable-safe-stack) safe_stack="yes" 1174 ;; 1175 --disable-safe-stack) safe_stack="no" 1176 ;; 1177 --disable-curses) curses="disabled" 1178 ;; 1179 --enable-curses) curses="enabled" 1180 ;; 1181 --disable-iconv) iconv="disabled" 1182 ;; 1183 --enable-iconv) iconv="enabled" 1184 ;; 1185 --disable-curl) curl="no" 1186 ;; 1187 --enable-curl) curl="yes" 1188 ;; 1189 --disable-fdt) fdt="disabled" 1190 ;; 1191 --enable-fdt) fdt="enabled" 1192 ;; 1193 --enable-fdt=git) fdt="internal" 1194 ;; 1195 --enable-fdt=system) fdt="system" 1196 ;; 1197 --disable-linux-aio) linux_aio="no" 1198 ;; 1199 --enable-linux-aio) linux_aio="yes" 1200 ;; 1201 --disable-linux-io-uring) linux_io_uring="no" 1202 ;; 1203 --enable-linux-io-uring) linux_io_uring="yes" 1204 ;; 1205 --disable-attr) attr="no" 1206 ;; 1207 --enable-attr) attr="yes" 1208 ;; 1209 --disable-membarrier) membarrier="no" 1210 ;; 1211 --enable-membarrier) membarrier="yes" 1212 ;; 1213 --disable-blobs) blobs="false" 1214 ;; 1215 --with-pkgversion=*) pkgversion="$optarg" 1216 ;; 1217 --with-coroutine=*) coroutine="$optarg" 1218 ;; 1219 --disable-coroutine-pool) coroutine_pool="no" 1220 ;; 1221 --enable-coroutine-pool) coroutine_pool="yes" 1222 ;; 1223 --enable-debug-stack-usage) debug_stack_usage="yes" 1224 ;; 1225 --enable-crypto-afalg) crypto_afalg="yes" 1226 ;; 1227 --disable-crypto-afalg) crypto_afalg="no" 1228 ;; 1229 --disable-docs) docs="disabled" 1230 ;; 1231 --enable-docs) docs="enabled" 1232 ;; 1233 --disable-vhost-net) vhost_net="no" 1234 ;; 1235 --enable-vhost-net) vhost_net="yes" 1236 ;; 1237 --disable-vhost-crypto) vhost_crypto="no" 1238 ;; 1239 --enable-vhost-crypto) vhost_crypto="yes" 1240 ;; 1241 --disable-vhost-scsi) vhost_scsi="no" 1242 ;; 1243 --enable-vhost-scsi) vhost_scsi="yes" 1244 ;; 1245 --disable-vhost-vsock) vhost_vsock="no" 1246 ;; 1247 --enable-vhost-vsock) vhost_vsock="yes" 1248 ;; 1249 --disable-vhost-user-fs) vhost_user_fs="no" 1250 ;; 1251 --enable-vhost-user-fs) vhost_user_fs="yes" 1252 ;; 1253 --disable-opengl) opengl="no" 1254 ;; 1255 --enable-opengl) opengl="yes" 1256 ;; 1257 --disable-rbd) rbd="no" 1258 ;; 1259 --enable-rbd) rbd="yes" 1260 ;; 1261 --disable-xfsctl) xfs="no" 1262 ;; 1263 --enable-xfsctl) xfs="yes" 1264 ;; 1265 --disable-smartcard) smartcard="no" 1266 ;; 1267 --enable-smartcard) smartcard="yes" 1268 ;; 1269 --disable-u2f) u2f="disabled" 1270 ;; 1271 --enable-u2f) u2f="enabled" 1272 ;; 1273 --disable-libusb) libusb="no" 1274 ;; 1275 --enable-libusb) libusb="yes" 1276 ;; 1277 --disable-usb-redir) usb_redir="no" 1278 ;; 1279 --enable-usb-redir) usb_redir="yes" 1280 ;; 1281 --disable-zlib-test) 1282 ;; 1283 --disable-lzo) lzo="no" 1284 ;; 1285 --enable-lzo) lzo="yes" 1286 ;; 1287 --disable-snappy) snappy="no" 1288 ;; 1289 --enable-snappy) snappy="yes" 1290 ;; 1291 --disable-bzip2) bzip2="no" 1292 ;; 1293 --enable-bzip2) bzip2="yes" 1294 ;; 1295 --enable-lzfse) lzfse="yes" 1296 ;; 1297 --disable-lzfse) lzfse="no" 1298 ;; 1299 --disable-zstd) zstd="no" 1300 ;; 1301 --enable-zstd) zstd="yes" 1302 ;; 1303 --enable-guest-agent) guest_agent="yes" 1304 ;; 1305 --disable-guest-agent) guest_agent="no" 1306 ;; 1307 --enable-guest-agent-msi) guest_agent_msi="yes" 1308 ;; 1309 --disable-guest-agent-msi) guest_agent_msi="no" 1310 ;; 1311 --with-vss-sdk) vss_win32_sdk="" 1312 ;; 1313 --with-vss-sdk=*) vss_win32_sdk="$optarg" 1314 ;; 1315 --without-vss-sdk) vss_win32_sdk="no" 1316 ;; 1317 --with-win-sdk) win_sdk="" 1318 ;; 1319 --with-win-sdk=*) win_sdk="$optarg" 1320 ;; 1321 --without-win-sdk) win_sdk="no" 1322 ;; 1323 --enable-tools) want_tools="yes" 1324 ;; 1325 --disable-tools) want_tools="no" 1326 ;; 1327 --enable-seccomp) seccomp="yes" 1328 ;; 1329 --disable-seccomp) seccomp="no" 1330 ;; 1331 --disable-glusterfs) glusterfs="no" 1332 ;; 1333 --disable-avx2) avx2_opt="no" 1334 ;; 1335 --enable-avx2) avx2_opt="yes" 1336 ;; 1337 --disable-avx512f) avx512f_opt="no" 1338 ;; 1339 --enable-avx512f) avx512f_opt="yes" 1340 ;; 1341 1342 --enable-glusterfs) glusterfs="yes" 1343 ;; 1344 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane) 1345 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2 1346 ;; 1347 --enable-vhdx|--disable-vhdx) 1348 echo "$0: $opt is obsolete, VHDX driver is always built" >&2 1349 ;; 1350 --enable-uuid|--disable-uuid) 1351 echo "$0: $opt is obsolete, UUID support is always built" >&2 1352 ;; 1353 --disable-gtk) gtk="no" 1354 ;; 1355 --enable-gtk) gtk="yes" 1356 ;; 1357 --tls-priority=*) tls_priority="$optarg" 1358 ;; 1359 --disable-gnutls) gnutls="no" 1360 ;; 1361 --enable-gnutls) gnutls="yes" 1362 ;; 1363 --disable-nettle) nettle="no" 1364 ;; 1365 --enable-nettle) nettle="yes" 1366 ;; 1367 --disable-gcrypt) gcrypt="no" 1368 ;; 1369 --enable-gcrypt) gcrypt="yes" 1370 ;; 1371 --disable-auth-pam) auth_pam="no" 1372 ;; 1373 --enable-auth-pam) auth_pam="yes" 1374 ;; 1375 --enable-rdma) rdma="yes" 1376 ;; 1377 --disable-rdma) rdma="no" 1378 ;; 1379 --enable-pvrdma) pvrdma="yes" 1380 ;; 1381 --disable-pvrdma) pvrdma="no" 1382 ;; 1383 --disable-vte) vte="no" 1384 ;; 1385 --enable-vte) vte="yes" 1386 ;; 1387 --disable-virglrenderer) virglrenderer="no" 1388 ;; 1389 --enable-virglrenderer) virglrenderer="yes" 1390 ;; 1391 --disable-tpm) tpm="no" 1392 ;; 1393 --enable-tpm) tpm="yes" 1394 ;; 1395 --disable-libssh) libssh="no" 1396 ;; 1397 --enable-libssh) libssh="yes" 1398 ;; 1399 --disable-live-block-migration) live_block_migration="no" 1400 ;; 1401 --enable-live-block-migration) live_block_migration="yes" 1402 ;; 1403 --disable-numa) numa="no" 1404 ;; 1405 --enable-numa) numa="yes" 1406 ;; 1407 --disable-libxml2) libxml2="no" 1408 ;; 1409 --enable-libxml2) libxml2="yes" 1410 ;; 1411 --disable-tcmalloc) tcmalloc="no" 1412 ;; 1413 --enable-tcmalloc) tcmalloc="yes" 1414 ;; 1415 --disable-jemalloc) jemalloc="no" 1416 ;; 1417 --enable-jemalloc) jemalloc="yes" 1418 ;; 1419 --disable-replication) replication="no" 1420 ;; 1421 --enable-replication) replication="yes" 1422 ;; 1423 --disable-bochs) bochs="no" 1424 ;; 1425 --enable-bochs) bochs="yes" 1426 ;; 1427 --disable-cloop) cloop="no" 1428 ;; 1429 --enable-cloop) cloop="yes" 1430 ;; 1431 --disable-dmg) dmg="no" 1432 ;; 1433 --enable-dmg) dmg="yes" 1434 ;; 1435 --disable-qcow1) qcow1="no" 1436 ;; 1437 --enable-qcow1) qcow1="yes" 1438 ;; 1439 --disable-vdi) vdi="no" 1440 ;; 1441 --enable-vdi) vdi="yes" 1442 ;; 1443 --disable-vvfat) vvfat="no" 1444 ;; 1445 --enable-vvfat) vvfat="yes" 1446 ;; 1447 --disable-qed) qed="no" 1448 ;; 1449 --enable-qed) qed="yes" 1450 ;; 1451 --disable-parallels) parallels="no" 1452 ;; 1453 --enable-parallels) parallels="yes" 1454 ;; 1455 --disable-sheepdog) sheepdog="no" 1456 ;; 1457 --enable-sheepdog) sheepdog="yes" 1458 ;; 1459 --disable-vhost-user) vhost_user="no" 1460 ;; 1461 --enable-vhost-user) vhost_user="yes" 1462 ;; 1463 --disable-vhost-vdpa) vhost_vdpa="no" 1464 ;; 1465 --enable-vhost-vdpa) vhost_vdpa="yes" 1466 ;; 1467 --disable-vhost-kernel) vhost_kernel="no" 1468 ;; 1469 --enable-vhost-kernel) vhost_kernel="yes" 1470 ;; 1471 --disable-capstone) capstone="disabled" 1472 ;; 1473 --enable-capstone) capstone="enabled" 1474 ;; 1475 --enable-capstone=git) capstone="internal" 1476 ;; 1477 --enable-capstone=system) capstone="system" 1478 ;; 1479 --with-git=*) git="$optarg" 1480 ;; 1481 --enable-git-update) git_update=yes 1482 ;; 1483 --disable-git-update) git_update=no 1484 ;; 1485 --enable-debug-mutex) debug_mutex=yes 1486 ;; 1487 --disable-debug-mutex) debug_mutex=no 1488 ;; 1489 --enable-libpmem) libpmem=yes 1490 ;; 1491 --disable-libpmem) libpmem=no 1492 ;; 1493 --enable-xkbcommon) xkbcommon="enabled" 1494 ;; 1495 --disable-xkbcommon) xkbcommon="disabled" 1496 ;; 1497 --enable-plugins) plugins="yes" 1498 ;; 1499 --disable-plugins) plugins="no" 1500 ;; 1501 --enable-containers) use_containers="yes" 1502 ;; 1503 --disable-containers) use_containers="no" 1504 ;; 1505 --enable-fuzzing) fuzzing=yes 1506 ;; 1507 --disable-fuzzing) fuzzing=no 1508 ;; 1509 --gdb=*) gdb_bin="$optarg" 1510 ;; 1511 --enable-rng-none) rng_none=yes 1512 ;; 1513 --disable-rng-none) rng_none=no 1514 ;; 1515 --enable-keyring) secret_keyring="yes" 1516 ;; 1517 --disable-keyring) secret_keyring="no" 1518 ;; 1519 --enable-libdaxctl) libdaxctl=yes 1520 ;; 1521 --disable-libdaxctl) libdaxctl=no 1522 ;; 1523 *) 1524 echo "ERROR: unknown option $opt" 1525 echo "Try '$0 --help' for more information" 1526 exit 1 1527 ;; 1528 esac 1529done 1530 1531libdir="${libdir:-$prefix/lib}" 1532libexecdir="${libexecdir:-$prefix/libexec}" 1533includedir="${includedir:-$prefix/include}" 1534 1535if test "$mingw32" = "yes" ; then 1536 mandir="$prefix" 1537 datadir="$prefix" 1538 docdir="$prefix" 1539 bindir="$prefix" 1540 sysconfdir="$prefix" 1541 local_statedir="$prefix" 1542else 1543 mandir="${mandir:-$prefix/share/man}" 1544 datadir="${datadir:-$prefix/share}" 1545 docdir="${docdir:-$prefix/share/doc}" 1546 bindir="${bindir:-$prefix/bin}" 1547 sysconfdir="${sysconfdir:-$prefix/etc}" 1548 local_statedir="${local_statedir:-$prefix/var}" 1549fi 1550firmwarepath="${firmwarepath:-$datadir/qemu-firmware}" 1551localedir="${localedir:-$datadir/locale}" 1552 1553case "$cpu" in 1554 ppc) 1555 CPU_CFLAGS="-m32" 1556 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" 1557 ;; 1558 ppc64) 1559 CPU_CFLAGS="-m64" 1560 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1561 ;; 1562 sparc) 1563 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" 1564 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS" 1565 ;; 1566 sparc64) 1567 CPU_CFLAGS="-m64 -mcpu=ultrasparc" 1568 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1569 ;; 1570 s390) 1571 CPU_CFLAGS="-m31" 1572 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS" 1573 ;; 1574 s390x) 1575 CPU_CFLAGS="-m64" 1576 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1577 ;; 1578 i386) 1579 CPU_CFLAGS="-m32" 1580 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" 1581 ;; 1582 x86_64) 1583 # ??? Only extremely old AMD cpus do not have cmpxchg16b. 1584 # If we truly care, we should simply detect this case at 1585 # runtime and generate the fallback to serial emulation. 1586 CPU_CFLAGS="-m64 -mcx16" 1587 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1588 ;; 1589 x32) 1590 CPU_CFLAGS="-mx32" 1591 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS" 1592 ;; 1593 # No special flags required for other host CPUs 1594esac 1595 1596eval "cross_cc_${cpu}=\$host_cc" 1597cross_cc_vars="$cross_cc_vars cross_cc_${cpu}" 1598QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS" 1599 1600# For user-mode emulation the host arch has to be one we explicitly 1601# support, even if we're using TCI. 1602if [ "$ARCH" = "unknown" ]; then 1603 bsd_user="no" 1604 linux_user="no" 1605fi 1606 1607default_target_list="" 1608deprecated_targets_list=ppc64abi32-linux-user,tilegx-linux-user,lm32-softmmu,unicore32-softmmu 1609deprecated_features="" 1610mak_wilds="" 1611 1612if [ "$softmmu" = "yes" ]; then 1613 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak" 1614fi 1615if [ "$linux_user" = "yes" ]; then 1616 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak" 1617fi 1618if [ "$bsd_user" = "yes" ]; then 1619 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak" 1620fi 1621 1622# If the user doesn't explicitly specify a deprecated target we will 1623# skip it. 1624if test -z "$target_list"; then 1625 if test -z "$target_list_exclude"; then 1626 target_list_exclude="$deprecated_targets_list" 1627 else 1628 target_list_exclude="$target_list_exclude,$deprecated_targets_list" 1629 fi 1630fi 1631 1632for config in $mak_wilds; do 1633 target="$(basename "$config" .mak)" 1634 if echo "$target_list_exclude" | grep -vq "$target"; then 1635 default_target_list="${default_target_list} $target" 1636 fi 1637done 1638 1639# Enumerate public trace backends for --help output 1640trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/')) 1641 1642if test x"$show_help" = x"yes" ; then 1643cat << EOF 1644 1645Usage: configure [options] 1646Options: [defaults in brackets after descriptions] 1647 1648Standard options: 1649 --help print this message 1650 --prefix=PREFIX install in PREFIX [$prefix] 1651 --interp-prefix=PREFIX where to find shared libraries, etc. 1652 use %M for cpu name [$interp_prefix] 1653 --target-list=LIST set target list (default: build everything) 1654$(echo Available targets: $default_target_list | \ 1655 fold -s -w 53 | sed -e 's/^/ /') 1656 --target-list-exclude=LIST exclude a set of targets from the default target-list 1657 1658Advanced options (experts only): 1659 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix] 1660 --cc=CC use C compiler CC [$cc] 1661 --iasl=IASL use ACPI compiler IASL [$iasl] 1662 --host-cc=CC use C compiler CC [$host_cc] for code run at 1663 build time 1664 --cxx=CXX use C++ compiler CXX [$cxx] 1665 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] 1666 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS 1667 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS 1668 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS 1669 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases 1670 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests 1671 --make=MAKE use specified make [$make] 1672 --python=PYTHON use specified python [$python] 1673 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build] 1674 --meson=MESON use specified meson [$meson] 1675 --ninja=NINJA use specified ninja [$ninja] 1676 --smbd=SMBD use specified smbd [$smbd] 1677 --with-git=GIT use specified git [$git] 1678 --static enable static build [$static] 1679 --mandir=PATH install man pages in PATH 1680 --datadir=PATH install firmware in PATH/$qemu_suffix 1681 --localedir=PATH install translation in PATH/$qemu_suffix 1682 --docdir=PATH install documentation in PATH/$qemu_suffix 1683 --bindir=PATH install binaries in PATH 1684 --libdir=PATH install libraries in PATH 1685 --libexecdir=PATH install helper binaries in PATH 1686 --sysconfdir=PATH install config in PATH/$qemu_suffix 1687 --localstatedir=PATH install local state in PATH (set at runtime on win32) 1688 --firmwarepath=PATH search PATH for firmware files 1689 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs. 1690 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix] 1691 --with-pkgversion=VERS use specified string as sub-version of the package 1692 --enable-debug enable common debug build options 1693 --enable-sanitizers enable default sanitizers 1694 --enable-tsan enable thread sanitizer 1695 --disable-strip disable stripping binaries 1696 --disable-werror disable compilation abort on warning 1697 --disable-stack-protector disable compiler-provided stack protection 1698 --audio-drv-list=LIST set audio drivers list: 1699 Available drivers: $audio_possible_drivers 1700 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L 1701 --block-drv-rw-whitelist=L 1702 set block driver read-write whitelist 1703 (affects only QEMU, not qemu-img) 1704 --block-drv-ro-whitelist=L 1705 set block driver read-only whitelist 1706 (affects only QEMU, not qemu-img) 1707 --enable-trace-backends=B Set trace backend 1708 Available backends: $trace_backend_list 1709 --with-trace-file=NAME Full PATH,NAME of file to store traces 1710 Default:trace-<pid> 1711 --disable-slirp disable SLIRP userspace network connectivity 1712 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI) 1713 --enable-malloc-trim enable libc malloc_trim() for memory optimization 1714 --oss-lib path to OSS library 1715 --cpu=CPU Build for host CPU [$cpu] 1716 --with-coroutine=BACKEND coroutine backend. Supported options: 1717 ucontext, sigaltstack, windows 1718 --enable-gcov enable test coverage analysis with gcov 1719 --disable-blobs disable installing provided firmware blobs 1720 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent 1721 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb) 1722 --tls-priority default TLS protocol/cipher priority string 1723 --enable-gprof QEMU profiling with gprof 1724 --enable-profiler profiler support 1725 --enable-debug-stack-usage 1726 track the maximum stack usage of stacks created by qemu_alloc_stack 1727 --enable-plugins 1728 enable plugins via shared library loading 1729 --disable-containers don't use containers for cross-building 1730 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin] 1731 1732Optional features, enabled with --enable-FEATURE and 1733disabled with --disable-FEATURE, default is enabled if available: 1734 1735 system all system emulation targets 1736 user supported user emulation targets 1737 linux-user all linux usermode emulation targets 1738 bsd-user all BSD usermode emulation targets 1739 docs build documentation 1740 guest-agent build the QEMU Guest Agent 1741 guest-agent-msi build guest agent Windows MSI installation package 1742 pie Position Independent Executables 1743 modules modules support (non-Windows) 1744 module-upgrades try to load modules from alternate paths for upgrades 1745 debug-tcg TCG debugging (default is disabled) 1746 debug-info debugging information 1747 sparse sparse checker 1748 safe-stack SafeStack Stack Smash Protection. Depends on 1749 clang/llvm >= 3.7 and requires coroutine backend ucontext. 1750 1751 gnutls GNUTLS cryptography support 1752 nettle nettle cryptography support 1753 gcrypt libgcrypt cryptography support 1754 auth-pam PAM access control 1755 sdl SDL UI 1756 sdl-image SDL Image support for icons 1757 gtk gtk UI 1758 vte vte support for the gtk UI 1759 curses curses UI 1760 iconv font glyph conversion support 1761 vnc VNC UI support 1762 vnc-sasl SASL encryption for VNC server 1763 vnc-jpeg JPEG lossy compression for VNC server 1764 vnc-png PNG compression for VNC server 1765 cocoa Cocoa UI (Mac OS X only) 1766 virtfs VirtFS 1767 virtiofsd build virtiofs daemon (virtiofsd) 1768 libudev Use libudev to enumerate host devices 1769 mpath Multipath persistent reservation passthrough 1770 xen xen backend driver support 1771 xen-pci-passthrough PCI passthrough support for Xen 1772 brlapi BrlAPI (Braile) 1773 curl curl connectivity 1774 membarrier membarrier system call (for Linux 4.14+ or Windows) 1775 fdt fdt device tree 1776 kvm KVM acceleration support 1777 hax HAX acceleration support 1778 hvf Hypervisor.framework acceleration support 1779 whpx Windows Hypervisor Platform acceleration support 1780 rdma Enable RDMA-based migration 1781 pvrdma Enable PVRDMA support 1782 vde support for vde network 1783 netmap support for netmap network 1784 linux-aio Linux AIO support 1785 linux-io-uring Linux io_uring support 1786 cap-ng libcap-ng support 1787 attr attr and xattr support 1788 vhost-net vhost-net kernel acceleration support 1789 vhost-vsock virtio sockets device support 1790 vhost-scsi vhost-scsi kernel target support 1791 vhost-crypto vhost-user-crypto backend support 1792 vhost-kernel vhost kernel backend support 1793 vhost-user vhost-user backend support 1794 vhost-vdpa vhost-vdpa kernel backend support 1795 spice spice 1796 rbd rados block device (rbd) 1797 libiscsi iscsi support 1798 libnfs nfs support 1799 smartcard smartcard support (libcacard) 1800 u2f U2F support (u2f-emu) 1801 libusb libusb (for usb passthrough) 1802 live-block-migration Block migration in the main migration stream 1803 usb-redir usb network redirection support 1804 lzo support of lzo compression library 1805 snappy support of snappy compression library 1806 bzip2 support of bzip2 compression library 1807 (for reading bzip2-compressed dmg images) 1808 lzfse support of lzfse compression library 1809 (for reading lzfse-compressed dmg images) 1810 zstd support for zstd compression library 1811 (for migration compression and qcow2 cluster compression) 1812 seccomp seccomp support 1813 coroutine-pool coroutine freelist (better performance) 1814 glusterfs GlusterFS backend 1815 tpm TPM support 1816 libssh ssh block device support 1817 numa libnuma support 1818 libxml2 for Parallels image format 1819 tcmalloc tcmalloc support 1820 jemalloc jemalloc support 1821 avx2 AVX2 optimization support 1822 avx512f AVX512F optimization support 1823 replication replication support 1824 opengl opengl support 1825 virglrenderer virgl rendering support 1826 xfsctl xfsctl support 1827 qom-cast-debug cast debugging support 1828 tools build qemu-io, qemu-nbd and qemu-img tools 1829 bochs bochs image format support 1830 cloop cloop image format support 1831 dmg dmg image format support 1832 qcow1 qcow v1 image format support 1833 vdi vdi image format support 1834 vvfat vvfat image format support 1835 qed qed image format support 1836 parallels parallels image format support 1837 sheepdog sheepdog block driver support (deprecated) 1838 crypto-afalg Linux AF_ALG crypto backend driver 1839 capstone capstone disassembler support 1840 debug-mutex mutex debugging support 1841 libpmem libpmem support 1842 xkbcommon xkbcommon support 1843 rng-none dummy RNG, avoid using /dev/(u)random and getrandom() 1844 libdaxctl libdaxctl support 1845 1846NOTE: The object files are built at the place where configure is launched 1847EOF 1848exit 0 1849fi 1850 1851# Remove old dependency files to make sure that they get properly regenerated 1852rm -f */config-devices.mak.d 1853 1854if test -z "$python" 1855then 1856 error_exit "Python not found. Use --python=/path/to/python" 1857fi 1858 1859# Note that if the Python conditional here evaluates True we will exit 1860# with status 1 which is a shell 'false' value. 1861if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then 1862 error_exit "Cannot use '$python', Python >= 3.6 is required." \ 1863 "Use --python=/path/to/python to specify a supported Python." 1864fi 1865 1866# Preserve python version since some functionality is dependent on it 1867python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null) 1868 1869# Suppress writing compiled files 1870python="$python -B" 1871 1872if test -z "$meson"; then 1873 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then 1874 meson=meson 1875 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 1876 meson=git 1877 elif test -e "${source_path}/meson/meson.py" ; then 1878 meson=internal 1879 else 1880 if test "$explicit_python" = yes; then 1881 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found." 1882 else 1883 error_exit "Meson not found. Use --meson=/path/to/meson" 1884 fi 1885 fi 1886else 1887 # Meson uses its own Python interpreter to invoke other Python scripts, 1888 # but the user wants to use the one they specified with --python. 1889 # 1890 # We do not want to override the distro Python interpreter (and sometimes 1891 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so 1892 # just require --meson=git|internal together with --python. 1893 if test "$explicit_python" = yes; then 1894 case "$meson" in 1895 git | internal) ;; 1896 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;; 1897 esac 1898 fi 1899fi 1900 1901if test "$meson" = git; then 1902 git_submodules="${git_submodules} meson" 1903fi 1904 1905case "$meson" in 1906 git | internal) 1907 if ! $python -c 'import pkg_resources' > /dev/null 2>&1; then 1908 error_exit "Python setuptools not found" 1909 fi 1910 meson="$python ${source_path}/meson/meson.py" 1911 ;; 1912 *) meson=$(command -v "$meson") ;; 1913esac 1914 1915# Probe for ninja 1916 1917if test -z "$ninja"; then 1918 for c in ninja ninja-build samu; do 1919 if has $c; then 1920 ninja=$(command -v "$c") 1921 break 1922 fi 1923 done 1924 if test -z "$ninja"; then 1925 error_exit "Cannot find Ninja" 1926 fi 1927fi 1928 1929# Check that the C compiler works. Doing this here before testing 1930# the host CPU ensures that we had a valid CC to autodetect the 1931# $cpu var (and we should bail right here if that's not the case). 1932# It also allows the help message to be printed without a CC. 1933write_c_skeleton; 1934if compile_object ; then 1935 : C compiler works ok 1936else 1937 error_exit "\"$cc\" either does not exist or does not work" 1938fi 1939if ! compile_prog ; then 1940 error_exit "\"$cc\" cannot build an executable (is your linker broken?)" 1941fi 1942 1943# Consult white-list to determine whether to enable werror 1944# by default. Only enable by default for git builds 1945if test -z "$werror" ; then 1946 if test -e "$source_path/.git" && \ 1947 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then 1948 werror="yes" 1949 else 1950 werror="no" 1951 fi 1952fi 1953 1954if test "$bogus_os" = "yes"; then 1955 # Now that we know that we're not printing the help and that 1956 # the compiler works (so the results of the check_defines we used 1957 # to identify the OS are reliable), if we didn't recognize the 1958 # host OS we should stop now. 1959 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')" 1960fi 1961 1962# Check whether the compiler matches our minimum requirements: 1963cat > $TMPC << EOF 1964#if defined(__clang_major__) && defined(__clang_minor__) 1965# ifdef __apple_build_version__ 1966# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1) 1967# error You need at least XCode Clang v5.1 to compile QEMU 1968# endif 1969# else 1970# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4) 1971# error You need at least Clang v3.4 to compile QEMU 1972# endif 1973# endif 1974#elif defined(__GNUC__) && defined(__GNUC_MINOR__) 1975# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) 1976# error You need at least GCC v4.8 to compile QEMU 1977# endif 1978#else 1979# error You either need GCC or Clang to compiler QEMU 1980#endif 1981int main (void) { return 0; } 1982EOF 1983if ! compile_prog "" "" ; then 1984 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)" 1985fi 1986 1987# Accumulate -Wfoo and -Wno-bar separately. 1988# We will list all of the enable flags first, and the disable flags second. 1989# Note that we do not add -Werror, because that would enable it for all 1990# configure tests. If a configure test failed due to -Werror this would 1991# just silently disable some features, so it's too error prone. 1992 1993warn_flags= 1994add_to warn_flags -Wold-style-declaration 1995add_to warn_flags -Wold-style-definition 1996add_to warn_flags -Wtype-limits 1997add_to warn_flags -Wformat-security 1998add_to warn_flags -Wformat-y2k 1999add_to warn_flags -Winit-self 2000add_to warn_flags -Wignored-qualifiers 2001add_to warn_flags -Wempty-body 2002add_to warn_flags -Wnested-externs 2003add_to warn_flags -Wendif-labels 2004add_to warn_flags -Wexpansion-to-defined 2005 2006nowarn_flags= 2007add_to nowarn_flags -Wno-initializer-overrides 2008add_to nowarn_flags -Wno-missing-include-dirs 2009add_to nowarn_flags -Wno-shift-negative-value 2010add_to nowarn_flags -Wno-string-plus-int 2011add_to nowarn_flags -Wno-typedef-redefinition 2012add_to nowarn_flags -Wno-tautological-type-limit-compare 2013add_to nowarn_flags -Wno-psabi 2014 2015gcc_flags="$warn_flags $nowarn_flags" 2016 2017cc_has_warning_flag() { 2018 write_c_skeleton; 2019 2020 # Use the positive sense of the flag when testing for -Wno-wombat 2021 # support (gcc will happily accept the -Wno- form of unknown 2022 # warning options). 2023 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')" 2024 compile_prog "-Werror $optflag" "" 2025} 2026 2027for flag in $gcc_flags; do 2028 if cc_has_warning_flag $flag ; then 2029 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 2030 fi 2031done 2032 2033if test "$stack_protector" != "no"; then 2034 cat > $TMPC << EOF 2035int main(int argc, char *argv[]) 2036{ 2037 char arr[64], *p = arr, *c = argv[0]; 2038 while (*c) { 2039 *p++ = *c++; 2040 } 2041 return 0; 2042} 2043EOF 2044 gcc_flags="-fstack-protector-strong -fstack-protector-all" 2045 sp_on=0 2046 for flag in $gcc_flags; do 2047 # We need to check both a compile and a link, since some compiler 2048 # setups fail only on a .c->.o compile and some only at link time 2049 if compile_object "-Werror $flag" && 2050 compile_prog "-Werror $flag" ""; then 2051 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 2052 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 2053 sp_on=1 2054 break 2055 fi 2056 done 2057 if test "$stack_protector" = yes; then 2058 if test $sp_on = 0; then 2059 error_exit "Stack protector not supported" 2060 fi 2061 fi 2062fi 2063 2064# Disable -Wmissing-braces on older compilers that warn even for 2065# the "universal" C zero initializer {0}. 2066cat > $TMPC << EOF 2067struct { 2068 int a[2]; 2069} x = {0}; 2070EOF 2071if compile_object "-Werror" "" ; then 2072 : 2073else 2074 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces" 2075fi 2076 2077# Our module code doesn't support Windows 2078if test "$modules" = "yes" && test "$mingw32" = "yes" ; then 2079 error_exit "Modules are not available for Windows" 2080fi 2081 2082# module_upgrades is only reasonable if modules are enabled 2083if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then 2084 error_exit "Can't enable module-upgrades as Modules are not enabled" 2085fi 2086 2087# Static linking is not possible with modules or PIE 2088if test "$static" = "yes" ; then 2089 if test "$modules" = "yes" ; then 2090 error_exit "static and modules are mutually incompatible" 2091 fi 2092fi 2093 2094# Unconditional check for compiler __thread support 2095 cat > $TMPC << EOF 2096static __thread int tls_var; 2097int main(void) { return tls_var; } 2098EOF 2099 2100if ! compile_prog "-Werror" "" ; then 2101 error_exit "Your compiler does not support the __thread specifier for " \ 2102 "Thread-Local Storage (TLS). Please upgrade to a version that does." 2103fi 2104 2105cat > $TMPC << EOF 2106 2107#ifdef __linux__ 2108# define THREAD __thread 2109#else 2110# define THREAD 2111#endif 2112static THREAD int tls_var; 2113int main(void) { return tls_var; } 2114EOF 2115 2116# Check we support --no-pie first; we will need this for building ROMs. 2117if compile_prog "-Werror -fno-pie" "-no-pie"; then 2118 CFLAGS_NOPIE="-fno-pie" 2119 LDFLAGS_NOPIE="-no-pie" 2120fi 2121 2122if test "$static" = "yes"; then 2123 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then 2124 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS" 2125 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS" 2126 pie="yes" 2127 elif test "$pie" = "yes"; then 2128 error_exit "-static-pie not available due to missing toolchain support" 2129 else 2130 QEMU_LDFLAGS="-static $QEMU_LDFLAGS" 2131 pie="no" 2132 fi 2133elif test "$pie" = "no"; then 2134 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS" 2135 CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS" 2136elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then 2137 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS" 2138 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS" 2139 pie="yes" 2140elif test "$pie" = "yes"; then 2141 error_exit "PIE not available due to missing toolchain support" 2142else 2143 echo "Disabling PIE due to missing toolchain support" 2144 pie="no" 2145fi 2146 2147# Detect support for PT_GNU_RELRO + DT_BIND_NOW. 2148# The combination is known as "full relro", because .got.plt is read-only too. 2149if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then 2150 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS" 2151fi 2152 2153########################################## 2154# __sync_fetch_and_and requires at least -march=i486. Many toolchains 2155# use i686 as default anyway, but for those that don't, an explicit 2156# specification is necessary 2157 2158if test "$cpu" = "i386"; then 2159 cat > $TMPC << EOF 2160static int sfaa(int *ptr) 2161{ 2162 return __sync_fetch_and_and(ptr, 0); 2163} 2164 2165int main(void) 2166{ 2167 int val = 42; 2168 val = __sync_val_compare_and_swap(&val, 0, 1); 2169 sfaa(&val); 2170 return val; 2171} 2172EOF 2173 if ! compile_prog "" "" ; then 2174 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS" 2175 fi 2176fi 2177 2178######################################### 2179# Solaris specific configure tool chain decisions 2180 2181if test "$solaris" = "yes" ; then 2182 if has ar; then 2183 : 2184 else 2185 if test -f /usr/ccs/bin/ar ; then 2186 error_exit "No path includes ar" \ 2187 "Add /usr/ccs/bin to your path and rerun configure" 2188 fi 2189 error_exit "No path includes ar" 2190 fi 2191fi 2192 2193if test -z "${target_list+xxx}" ; then 2194 default_targets=yes 2195 for target in $default_target_list; do 2196 target_list="$target_list $target" 2197 done 2198 target_list="${target_list# }" 2199else 2200 default_targets=no 2201 target_list=$(echo "$target_list" | sed -e 's/,/ /g') 2202 for target in $target_list; do 2203 # Check that we recognised the target name; this allows a more 2204 # friendly error message than if we let it fall through. 2205 case " $default_target_list " in 2206 *" $target "*) 2207 ;; 2208 *) 2209 error_exit "Unknown target name '$target'" 2210 ;; 2211 esac 2212 done 2213fi 2214 2215for target in $target_list; do 2216 # if a deprecated target is enabled we note it here 2217 if echo "$deprecated_targets_list" | grep -q "$target"; then 2218 add_to deprecated_features $target 2219 fi 2220done 2221 2222# see if system emulation was really requested 2223case " $target_list " in 2224 *"-softmmu "*) softmmu=yes 2225 ;; 2226 *) softmmu=no 2227 ;; 2228esac 2229 2230feature_not_found() { 2231 feature=$1 2232 remedy=$2 2233 2234 error_exit "User requested feature $feature" \ 2235 "configure was not able to find it." \ 2236 "$remedy" 2237} 2238 2239# --- 2240# big/little endian test 2241cat > $TMPC << EOF 2242short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; 2243short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; 2244extern int foo(short *, short *); 2245int main(int argc, char *argv[]) { 2246 return foo(big_endian, little_endian); 2247} 2248EOF 2249 2250if compile_object ; then 2251 if strings -a $TMPO | grep -q BiGeNdIaN ; then 2252 bigendian="yes" 2253 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then 2254 bigendian="no" 2255 else 2256 echo big/little test failed 2257 fi 2258else 2259 echo big/little test failed 2260fi 2261 2262########################################## 2263# system tools 2264if test -z "$want_tools"; then 2265 if test "$softmmu" = "no"; then 2266 want_tools=no 2267 else 2268 want_tools=yes 2269 fi 2270fi 2271 2272########################################## 2273# cocoa implies not SDL or GTK 2274# (the cocoa UI code currently assumes it is always the active UI 2275# and doesn't interact well with other UI frontend code) 2276if test "$cocoa" = "enabled"; then 2277 if test "$sdl" = "enabled"; then 2278 error_exit "Cocoa and SDL UIs cannot both be enabled at once" 2279 fi 2280 if test "$gtk" = "yes"; then 2281 error_exit "Cocoa and GTK UIs cannot both be enabled at once" 2282 fi 2283 gtk=no 2284 sdl=disabled 2285fi 2286 2287# Some versions of Mac OS X incorrectly define SIZE_MAX 2288cat > $TMPC << EOF 2289#include <stdint.h> 2290#include <stdio.h> 2291int main(int argc, char *argv[]) { 2292 return printf("%zu", SIZE_MAX); 2293} 2294EOF 2295have_broken_size_max=no 2296if ! compile_object -Werror ; then 2297 have_broken_size_max=yes 2298fi 2299 2300########################################## 2301# L2TPV3 probe 2302 2303cat > $TMPC <<EOF 2304#include <sys/socket.h> 2305#include <linux/ip.h> 2306int main(void) { return sizeof(struct mmsghdr); } 2307EOF 2308if compile_prog "" "" ; then 2309 l2tpv3=yes 2310else 2311 l2tpv3=no 2312fi 2313 2314if check_include "pty.h" ; then 2315 pty_h=yes 2316else 2317 pty_h=no 2318fi 2319 2320cat > $TMPC <<EOF 2321#include <sys/mman.h> 2322int main(int argc, char *argv[]) { 2323 return mlockall(MCL_FUTURE); 2324} 2325EOF 2326if compile_prog "" "" ; then 2327 have_mlockall=yes 2328else 2329 have_mlockall=no 2330fi 2331 2332######################################### 2333# vhost interdependencies and host support 2334 2335# vhost backends 2336test "$vhost_user" = "" && vhost_user=yes 2337if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then 2338 error_exit "vhost-user isn't available on win32" 2339fi 2340test "$vhost_vdpa" = "" && vhost_vdpa=$linux 2341if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then 2342 error_exit "vhost-vdpa is only available on Linux" 2343fi 2344test "$vhost_kernel" = "" && vhost_kernel=$linux 2345if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then 2346 error_exit "vhost-kernel is only available on Linux" 2347fi 2348 2349# vhost-kernel devices 2350test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel 2351if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then 2352 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel" 2353fi 2354test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel 2355if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then 2356 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel" 2357fi 2358 2359# vhost-user backends 2360test "$vhost_net_user" = "" && vhost_net_user=$vhost_user 2361if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then 2362 error_exit "--enable-vhost-net-user requires --enable-vhost-user" 2363fi 2364test "$vhost_crypto" = "" && vhost_crypto=$vhost_user 2365if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then 2366 error_exit "--enable-vhost-crypto requires --enable-vhost-user" 2367fi 2368test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user 2369if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then 2370 error_exit "--enable-vhost-user-fs requires --enable-vhost-user" 2371fi 2372#vhost-vdpa backends 2373test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa 2374if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then 2375 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa" 2376fi 2377 2378# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity 2379if test "$vhost_net" = ""; then 2380 test "$vhost_net_user" = "yes" && vhost_net=yes 2381 test "$vhost_net_vdpa" = "yes" && vhost_net=yes 2382 test "$vhost_kernel" = "yes" && vhost_net=yes 2383fi 2384 2385########################################## 2386# pkg-config probe 2387 2388if ! has "$pkg_config_exe"; then 2389 error_exit "pkg-config binary '$pkg_config_exe' not found" 2390fi 2391 2392########################################## 2393# NPTL probe 2394 2395if test "$linux_user" = "yes"; then 2396 cat > $TMPC <<EOF 2397#include <sched.h> 2398#include <linux/futex.h> 2399int main(void) { 2400#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) 2401#error bork 2402#endif 2403 return 0; 2404} 2405EOF 2406 if ! compile_object ; then 2407 feature_not_found "nptl" "Install glibc and linux kernel headers." 2408 fi 2409fi 2410 2411########################################## 2412# lzo check 2413 2414if test "$lzo" != "no" ; then 2415 cat > $TMPC << EOF 2416#include <lzo/lzo1x.h> 2417int main(void) { lzo_version(); return 0; } 2418EOF 2419 if compile_prog "" "-llzo2" ; then 2420 lzo_libs="-llzo2" 2421 lzo="yes" 2422 else 2423 if test "$lzo" = "yes"; then 2424 feature_not_found "liblzo2" "Install liblzo2 devel" 2425 fi 2426 lzo="no" 2427 fi 2428fi 2429 2430########################################## 2431# snappy check 2432 2433if test "$snappy" != "no" ; then 2434 cat > $TMPC << EOF 2435#include <snappy-c.h> 2436int main(void) { snappy_max_compressed_length(4096); return 0; } 2437EOF 2438 if compile_prog "" "-lsnappy" ; then 2439 snappy_libs='-lsnappy' 2440 snappy="yes" 2441 else 2442 if test "$snappy" = "yes"; then 2443 feature_not_found "libsnappy" "Install libsnappy devel" 2444 fi 2445 snappy="no" 2446 fi 2447fi 2448 2449########################################## 2450# bzip2 check 2451 2452if test "$bzip2" != "no" ; then 2453 cat > $TMPC << EOF 2454#include <bzlib.h> 2455int main(void) { BZ2_bzlibVersion(); return 0; } 2456EOF 2457 if compile_prog "" "-lbz2" ; then 2458 bzip2="yes" 2459 else 2460 if test "$bzip2" = "yes"; then 2461 feature_not_found "libbzip2" "Install libbzip2 devel" 2462 fi 2463 bzip2="no" 2464 fi 2465fi 2466 2467########################################## 2468# lzfse check 2469 2470if test "$lzfse" != "no" ; then 2471 cat > $TMPC << EOF 2472#include <lzfse.h> 2473int main(void) { lzfse_decode_scratch_size(); return 0; } 2474EOF 2475 if compile_prog "" "-llzfse" ; then 2476 lzfse="yes" 2477 else 2478 if test "$lzfse" = "yes"; then 2479 feature_not_found "lzfse" "Install lzfse devel" 2480 fi 2481 lzfse="no" 2482 fi 2483fi 2484 2485########################################## 2486# zstd check 2487 2488if test "$zstd" != "no" ; then 2489 libzstd_minver="1.4.0" 2490 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then 2491 zstd_cflags="$($pkg_config --cflags libzstd)" 2492 zstd_libs="$($pkg_config --libs libzstd)" 2493 zstd="yes" 2494 else 2495 if test "$zstd" = "yes" ; then 2496 feature_not_found "libzstd" "Install libzstd devel" 2497 fi 2498 zstd="no" 2499 fi 2500fi 2501 2502########################################## 2503# libseccomp check 2504 2505if test "$seccomp" != "no" ; then 2506 libseccomp_minver="2.3.0" 2507 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then 2508 seccomp_cflags="$($pkg_config --cflags libseccomp)" 2509 seccomp_libs="$($pkg_config --libs libseccomp)" 2510 seccomp="yes" 2511 else 2512 if test "$seccomp" = "yes" ; then 2513 feature_not_found "libseccomp" \ 2514 "Install libseccomp devel >= $libseccomp_minver" 2515 fi 2516 seccomp="no" 2517 fi 2518fi 2519 2520########################################## 2521# xen probe 2522 2523if test "$xen" != "disabled" ; then 2524 # Check whether Xen library path is specified via --extra-ldflags to avoid 2525 # overriding this setting with pkg-config output. If not, try pkg-config 2526 # to obtain all needed flags. 2527 2528 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 2529 $pkg_config --exists xencontrol ; then 2530 xen_ctrl_version="$(printf '%d%02d%02d' \ 2531 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 2532 xen=enabled 2533 xen_pc="xencontrol xenstore xenforeignmemory xengnttab" 2534 xen_pc="$xen_pc xenevtchn xendevicemodel" 2535 if $pkg_config --exists xentoolcore; then 2536 xen_pc="$xen_pc xentoolcore" 2537 fi 2538 xen_cflags="$($pkg_config --cflags $xen_pc)" 2539 xen_libs="$($pkg_config --libs $xen_pc)" 2540 else 2541 2542 xen_libs="-lxenstore -lxenctrl" 2543 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 2544 2545 # First we test whether Xen headers and libraries are available. 2546 # If no, we are done and there is no Xen support. 2547 # If yes, more tests are run to detect the Xen version. 2548 2549 # Xen (any) 2550 cat > $TMPC <<EOF 2551#include <xenctrl.h> 2552int main(void) { 2553 return 0; 2554} 2555EOF 2556 if ! compile_prog "" "$xen_libs" ; then 2557 # Xen not found 2558 if test "$xen" = "enabled" ; then 2559 feature_not_found "xen" "Install xen devel" 2560 fi 2561 xen=disabled 2562 2563 # Xen unstable 2564 elif 2565 cat > $TMPC <<EOF && 2566#undef XC_WANT_COMPAT_DEVICEMODEL_API 2567#define __XEN_TOOLS__ 2568#include <xendevicemodel.h> 2569#include <xenforeignmemory.h> 2570int main(void) { 2571 xendevicemodel_handle *xd; 2572 xenforeignmemory_handle *xfmem; 2573 2574 xd = xendevicemodel_open(0, 0); 2575 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); 2576 2577 xfmem = xenforeignmemory_open(0, 0); 2578 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); 2579 2580 return 0; 2581} 2582EOF 2583 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2584 then 2585 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2586 xen_ctrl_version=41100 2587 xen=enabled 2588 elif 2589 cat > $TMPC <<EOF && 2590#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2591#include <xenforeignmemory.h> 2592#include <xentoolcore.h> 2593int main(void) { 2594 xenforeignmemory_handle *xfmem; 2595 2596 xfmem = xenforeignmemory_open(0, 0); 2597 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 2598 xentoolcore_restrict_all(0); 2599 2600 return 0; 2601} 2602EOF 2603 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2604 then 2605 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2606 xen_ctrl_version=41000 2607 xen=enabled 2608 elif 2609 cat > $TMPC <<EOF && 2610#undef XC_WANT_COMPAT_DEVICEMODEL_API 2611#define __XEN_TOOLS__ 2612#include <xendevicemodel.h> 2613int main(void) { 2614 xendevicemodel_handle *xd; 2615 2616 xd = xendevicemodel_open(0, 0); 2617 xendevicemodel_close(xd); 2618 2619 return 0; 2620} 2621EOF 2622 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2623 then 2624 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2625 xen_ctrl_version=40900 2626 xen=enabled 2627 elif 2628 cat > $TMPC <<EOF && 2629/* 2630 * If we have stable libs the we don't want the libxc compat 2631 * layers, regardless of what CFLAGS we may have been given. 2632 * 2633 * Also, check if xengnttab_grant_copy_segment_t is defined and 2634 * grant copy operation is implemented. 2635 */ 2636#undef XC_WANT_COMPAT_EVTCHN_API 2637#undef XC_WANT_COMPAT_GNTTAB_API 2638#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2639#include <xenctrl.h> 2640#include <xenstore.h> 2641#include <xenevtchn.h> 2642#include <xengnttab.h> 2643#include <xenforeignmemory.h> 2644#include <stdint.h> 2645#include <xen/hvm/hvm_info_table.h> 2646#if !defined(HVM_MAX_VCPUS) 2647# error HVM_MAX_VCPUS not defined 2648#endif 2649int main(void) { 2650 xc_interface *xc = NULL; 2651 xenforeignmemory_handle *xfmem; 2652 xenevtchn_handle *xe; 2653 xengnttab_handle *xg; 2654 xengnttab_grant_copy_segment_t* seg = NULL; 2655 2656 xs_daemon_open(); 2657 2658 xc = xc_interface_open(0, 0, 0); 2659 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2660 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2661 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2662 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2663 2664 xfmem = xenforeignmemory_open(0, 0); 2665 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2666 2667 xe = xenevtchn_open(0, 0); 2668 xenevtchn_fd(xe); 2669 2670 xg = xengnttab_open(0, 0); 2671 xengnttab_grant_copy(xg, 0, seg); 2672 2673 return 0; 2674} 2675EOF 2676 compile_prog "" "$xen_libs $xen_stable_libs" 2677 then 2678 xen_ctrl_version=40800 2679 xen=enabled 2680 elif 2681 cat > $TMPC <<EOF && 2682/* 2683 * If we have stable libs the we don't want the libxc compat 2684 * layers, regardless of what CFLAGS we may have been given. 2685 */ 2686#undef XC_WANT_COMPAT_EVTCHN_API 2687#undef XC_WANT_COMPAT_GNTTAB_API 2688#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2689#include <xenctrl.h> 2690#include <xenstore.h> 2691#include <xenevtchn.h> 2692#include <xengnttab.h> 2693#include <xenforeignmemory.h> 2694#include <stdint.h> 2695#include <xen/hvm/hvm_info_table.h> 2696#if !defined(HVM_MAX_VCPUS) 2697# error HVM_MAX_VCPUS not defined 2698#endif 2699int main(void) { 2700 xc_interface *xc = NULL; 2701 xenforeignmemory_handle *xfmem; 2702 xenevtchn_handle *xe; 2703 xengnttab_handle *xg; 2704 2705 xs_daemon_open(); 2706 2707 xc = xc_interface_open(0, 0, 0); 2708 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2709 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2710 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2711 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2712 2713 xfmem = xenforeignmemory_open(0, 0); 2714 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2715 2716 xe = xenevtchn_open(0, 0); 2717 xenevtchn_fd(xe); 2718 2719 xg = xengnttab_open(0, 0); 2720 xengnttab_map_grant_ref(xg, 0, 0, 0); 2721 2722 return 0; 2723} 2724EOF 2725 compile_prog "" "$xen_libs $xen_stable_libs" 2726 then 2727 xen_ctrl_version=40701 2728 xen=enabled 2729 2730 # Xen 4.6 2731 elif 2732 cat > $TMPC <<EOF && 2733#include <xenctrl.h> 2734#include <xenstore.h> 2735#include <stdint.h> 2736#include <xen/hvm/hvm_info_table.h> 2737#if !defined(HVM_MAX_VCPUS) 2738# error HVM_MAX_VCPUS not defined 2739#endif 2740int main(void) { 2741 xc_interface *xc; 2742 xs_daemon_open(); 2743 xc = xc_interface_open(0, 0, 0); 2744 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2745 xc_gnttab_open(NULL, 0); 2746 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2747 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2748 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2749 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2750 return 0; 2751} 2752EOF 2753 compile_prog "" "$xen_libs" 2754 then 2755 xen_ctrl_version=40600 2756 xen=enabled 2757 2758 # Xen 4.5 2759 elif 2760 cat > $TMPC <<EOF && 2761#include <xenctrl.h> 2762#include <xenstore.h> 2763#include <stdint.h> 2764#include <xen/hvm/hvm_info_table.h> 2765#if !defined(HVM_MAX_VCPUS) 2766# error HVM_MAX_VCPUS not defined 2767#endif 2768int main(void) { 2769 xc_interface *xc; 2770 xs_daemon_open(); 2771 xc = xc_interface_open(0, 0, 0); 2772 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2773 xc_gnttab_open(NULL, 0); 2774 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2775 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2776 xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 2777 return 0; 2778} 2779EOF 2780 compile_prog "" "$xen_libs" 2781 then 2782 xen_ctrl_version=40500 2783 xen=enabled 2784 2785 elif 2786 cat > $TMPC <<EOF && 2787#include <xenctrl.h> 2788#include <xenstore.h> 2789#include <stdint.h> 2790#include <xen/hvm/hvm_info_table.h> 2791#if !defined(HVM_MAX_VCPUS) 2792# error HVM_MAX_VCPUS not defined 2793#endif 2794int main(void) { 2795 xc_interface *xc; 2796 xs_daemon_open(); 2797 xc = xc_interface_open(0, 0, 0); 2798 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2799 xc_gnttab_open(NULL, 0); 2800 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2801 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2802 return 0; 2803} 2804EOF 2805 compile_prog "" "$xen_libs" 2806 then 2807 xen_ctrl_version=40200 2808 xen=enabled 2809 2810 else 2811 if test "$xen" = "enabled" ; then 2812 feature_not_found "xen (unsupported version)" \ 2813 "Install a supported xen (xen 4.2 or newer)" 2814 fi 2815 xen=disabled 2816 fi 2817 2818 if test "$xen" = enabled; then 2819 if test $xen_ctrl_version -ge 40701 ; then 2820 xen_libs="$xen_libs $xen_stable_libs " 2821 fi 2822 fi 2823 fi 2824fi 2825 2826if test "$xen_pci_passthrough" != "disabled"; then 2827 if test "$xen" = "enabled" && test "$linux" = "yes"; then 2828 xen_pci_passthrough=enabled 2829 else 2830 if test "$xen_pci_passthrough" = "enabled"; then 2831 error_exit "User requested feature Xen PCI Passthrough" \ 2832 " but this feature requires /sys from Linux" 2833 fi 2834 xen_pci_passthrough=disabled 2835 fi 2836fi 2837 2838########################################## 2839# gettext probe 2840if test "$gettext" != "false" ; then 2841 if has xgettext; then 2842 gettext=true 2843 else 2844 if test "$gettext" = "true" ; then 2845 feature_not_found "gettext" "Install xgettext binary" 2846 fi 2847 gettext=false 2848 fi 2849fi 2850 2851########################################## 2852# X11 probe 2853if $pkg_config --exists "x11"; then 2854 have_x11=yes 2855 x11_cflags=$($pkg_config --cflags x11) 2856 x11_libs=$($pkg_config --libs x11) 2857fi 2858 2859########################################## 2860# GTK probe 2861 2862if test "$gtk" != "no"; then 2863 gtkpackage="gtk+-3.0" 2864 gtkx11package="gtk+-x11-3.0" 2865 gtkversion="3.22.0" 2866 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then 2867 gtk_cflags=$($pkg_config --cflags $gtkpackage) 2868 gtk_libs=$($pkg_config --libs $gtkpackage) 2869 gtk_version=$($pkg_config --modversion $gtkpackage) 2870 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then 2871 need_x11=yes 2872 gtk_cflags="$gtk_cflags $x11_cflags" 2873 gtk_libs="$gtk_libs $x11_libs" 2874 fi 2875 gtk="yes" 2876 elif test "$gtk" = "yes"; then 2877 feature_not_found "gtk" "Install gtk3-devel" 2878 else 2879 gtk="no" 2880 fi 2881fi 2882 2883 2884########################################## 2885# GNUTLS probe 2886 2887if test "$gnutls" != "no"; then 2888 pass="no" 2889 if $pkg_config --exists "gnutls >= 3.1.18"; then 2890 gnutls_cflags=$($pkg_config --cflags gnutls) 2891 gnutls_libs=$($pkg_config --libs gnutls) 2892 # Packaging for the static libraries is not always correct. 2893 # At least ubuntu 18.04 ships only shared libraries. 2894 write_c_skeleton 2895 if compile_prog "" "$gnutls_libs" ; then 2896 pass="yes" 2897 fi 2898 fi 2899 if test "$pass" = "no" && test "$gnutls" = "yes"; then 2900 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18" 2901 else 2902 gnutls="$pass" 2903 fi 2904fi 2905 2906 2907# If user didn't give a --disable/enable-gcrypt flag, 2908# then mark as disabled if user requested nettle 2909# explicitly 2910if test -z "$gcrypt" 2911then 2912 if test "$nettle" = "yes" 2913 then 2914 gcrypt="no" 2915 fi 2916fi 2917 2918# If user didn't give a --disable/enable-nettle flag, 2919# then mark as disabled if user requested gcrypt 2920# explicitly 2921if test -z "$nettle" 2922then 2923 if test "$gcrypt" = "yes" 2924 then 2925 nettle="no" 2926 fi 2927fi 2928 2929has_libgcrypt() { 2930 if ! has "libgcrypt-config" 2931 then 2932 return 1 2933 fi 2934 2935 if test -n "$cross_prefix" 2936 then 2937 host=$(libgcrypt-config --host) 2938 if test "$host-" != $cross_prefix 2939 then 2940 return 1 2941 fi 2942 fi 2943 2944 maj=`libgcrypt-config --version | awk -F . '{print $1}'` 2945 min=`libgcrypt-config --version | awk -F . '{print $2}'` 2946 2947 if test $maj != 1 || test $min -lt 5 2948 then 2949 return 1 2950 fi 2951 2952 return 0 2953} 2954 2955 2956if test "$nettle" != "no"; then 2957 pass="no" 2958 if $pkg_config --exists "nettle >= 2.7.1"; then 2959 nettle_cflags=$($pkg_config --cflags nettle) 2960 nettle_libs=$($pkg_config --libs nettle) 2961 nettle_version=$($pkg_config --modversion nettle) 2962 # Link test to make sure the given libraries work (e.g for static). 2963 write_c_skeleton 2964 if compile_prog "" "$nettle_libs" ; then 2965 if test -z "$gcrypt"; then 2966 gcrypt="no" 2967 fi 2968 pass="yes" 2969 fi 2970 fi 2971 if test "$pass" = "yes" 2972 then 2973 cat > $TMPC << EOF 2974#include <nettle/xts.h> 2975int main(void) { 2976 return 0; 2977} 2978EOF 2979 if compile_prog "$nettle_cflags" "$nettle_libs" ; then 2980 nettle_xts=yes 2981 qemu_private_xts=no 2982 fi 2983 fi 2984 if test "$pass" = "no" && test "$nettle" = "yes"; then 2985 feature_not_found "nettle" "Install nettle devel >= 2.7.1" 2986 else 2987 nettle="$pass" 2988 fi 2989fi 2990 2991if test "$gcrypt" != "no"; then 2992 pass="no" 2993 if has_libgcrypt; then 2994 gcrypt_cflags=$(libgcrypt-config --cflags) 2995 gcrypt_libs=$(libgcrypt-config --libs) 2996 # Debian has removed -lgpg-error from libgcrypt-config 2997 # as it "spreads unnecessary dependencies" which in 2998 # turn breaks static builds... 2999 if test "$static" = "yes" 3000 then 3001 gcrypt_libs="$gcrypt_libs -lgpg-error" 3002 fi 3003 3004 # Link test to make sure the given libraries work (e.g for static). 3005 write_c_skeleton 3006 if compile_prog "" "$gcrypt_libs" ; then 3007 pass="yes" 3008 fi 3009 fi 3010 if test "$pass" = "yes"; then 3011 gcrypt="yes" 3012 cat > $TMPC << EOF 3013#include <gcrypt.h> 3014int main(void) { 3015 gcry_mac_hd_t handle; 3016 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5, 3017 GCRY_MAC_FLAG_SECURE, NULL); 3018 return 0; 3019} 3020EOF 3021 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 3022 gcrypt_hmac=yes 3023 fi 3024 cat > $TMPC << EOF 3025#include <gcrypt.h> 3026int main(void) { 3027 gcry_cipher_hd_t handle; 3028 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0); 3029 return 0; 3030} 3031EOF 3032 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 3033 gcrypt_xts=yes 3034 qemu_private_xts=no 3035 fi 3036 elif test "$gcrypt" = "yes"; then 3037 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0" 3038 else 3039 gcrypt="no" 3040 fi 3041fi 3042 3043 3044if test "$gcrypt" = "yes" && test "$nettle" = "yes" 3045then 3046 error_exit "Only one of gcrypt & nettle can be enabled" 3047fi 3048 3049########################################## 3050# libtasn1 - only for the TLS creds/session test suite 3051 3052tasn1=yes 3053tasn1_cflags="" 3054tasn1_libs="" 3055if $pkg_config --exists "libtasn1"; then 3056 tasn1_cflags=$($pkg_config --cflags libtasn1) 3057 tasn1_libs=$($pkg_config --libs libtasn1) 3058else 3059 tasn1=no 3060fi 3061 3062 3063########################################## 3064# PAM probe 3065 3066if test "$auth_pam" != "no"; then 3067 cat > $TMPC <<EOF 3068#include <security/pam_appl.h> 3069#include <stdio.h> 3070int main(void) { 3071 const char *service_name = "qemu"; 3072 const char *user = "frank"; 3073 const struct pam_conv pam_conv = { 0 }; 3074 pam_handle_t *pamh = NULL; 3075 pam_start(service_name, user, &pam_conv, &pamh); 3076 return 0; 3077} 3078EOF 3079 if compile_prog "" "-lpam" ; then 3080 auth_pam=yes 3081 else 3082 if test "$auth_pam" = "yes"; then 3083 feature_not_found "PAM" "Install PAM development package" 3084 else 3085 auth_pam=no 3086 fi 3087 fi 3088fi 3089 3090########################################## 3091# getifaddrs (for tests/test-io-channel-socket ) 3092 3093have_ifaddrs_h=yes 3094if ! check_include "ifaddrs.h" ; then 3095 have_ifaddrs_h=no 3096fi 3097 3098######################################### 3099# libdrm check 3100have_drm_h=no 3101if check_include "libdrm/drm.h" ; then 3102 have_drm_h=yes 3103fi 3104 3105######################################### 3106# sys/signal.h check 3107have_sys_signal_h=no 3108if check_include "sys/signal.h" ; then 3109 have_sys_signal_h=yes 3110fi 3111 3112########################################## 3113# VTE probe 3114 3115if test "$vte" != "no"; then 3116 vteminversion="0.32.0" 3117 if $pkg_config --exists "vte-2.91"; then 3118 vtepackage="vte-2.91" 3119 else 3120 vtepackage="vte-2.90" 3121 fi 3122 if $pkg_config --exists "$vtepackage >= $vteminversion"; then 3123 vte_cflags=$($pkg_config --cflags $vtepackage) 3124 vte_libs=$($pkg_config --libs $vtepackage) 3125 vteversion=$($pkg_config --modversion $vtepackage) 3126 vte="yes" 3127 elif test "$vte" = "yes"; then 3128 feature_not_found "vte" "Install libvte-2.90/2.91 devel" 3129 else 3130 vte="no" 3131 fi 3132fi 3133 3134########################################## 3135# RDMA needs OpenFabrics libraries 3136if test "$rdma" != "no" ; then 3137 cat > $TMPC <<EOF 3138#include <rdma/rdma_cma.h> 3139int main(void) { return 0; } 3140EOF 3141 rdma_libs="-lrdmacm -libverbs -libumad" 3142 if compile_prog "" "$rdma_libs" ; then 3143 rdma="yes" 3144 else 3145 if test "$rdma" = "yes" ; then 3146 error_exit \ 3147 " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 3148 " Your options:" \ 3149 " (1) Fast: Install infiniband packages (devel) from your distro." \ 3150 " (2) Cleanest: Install libraries from www.openfabrics.org" \ 3151 " (3) Also: Install softiwarp if you don't have RDMA hardware" 3152 fi 3153 rdma="no" 3154 fi 3155fi 3156 3157########################################## 3158# PVRDMA detection 3159 3160cat > $TMPC <<EOF && 3161#include <sys/mman.h> 3162 3163int 3164main(void) 3165{ 3166 char buf = 0; 3167 void *addr = &buf; 3168 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 3169 3170 return 0; 3171} 3172EOF 3173 3174if test "$rdma" = "yes" ; then 3175 case "$pvrdma" in 3176 "") 3177 if compile_prog "" ""; then 3178 pvrdma="yes" 3179 else 3180 pvrdma="no" 3181 fi 3182 ;; 3183 "yes") 3184 if ! compile_prog "" ""; then 3185 error_exit "PVRDMA is not supported since mremap is not implemented" 3186 fi 3187 pvrdma="yes" 3188 ;; 3189 "no") 3190 pvrdma="no" 3191 ;; 3192 esac 3193else 3194 if test "$pvrdma" = "yes" ; then 3195 error_exit "PVRDMA requires rdma suppport" 3196 fi 3197 pvrdma="no" 3198fi 3199 3200# Let's see if enhanced reg_mr is supported 3201if test "$pvrdma" = "yes" ; then 3202 3203cat > $TMPC <<EOF && 3204#include <infiniband/verbs.h> 3205 3206int 3207main(void) 3208{ 3209 struct ibv_mr *mr; 3210 struct ibv_pd *pd = NULL; 3211 size_t length = 10; 3212 uint64_t iova = 0; 3213 int access = 0; 3214 void *addr = NULL; 3215 3216 mr = ibv_reg_mr_iova(pd, addr, length, iova, access); 3217 3218 ibv_dereg_mr(mr); 3219 3220 return 0; 3221} 3222EOF 3223 if ! compile_prog "" "-libverbs"; then 3224 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR" 3225 fi 3226fi 3227 3228########################################## 3229# xfsctl() probe, used for file-posix.c 3230if test "$xfs" != "no" ; then 3231 cat > $TMPC << EOF 3232#include <stddef.h> /* NULL */ 3233#include <xfs/xfs.h> 3234int main(void) 3235{ 3236 xfsctl(NULL, 0, 0, NULL); 3237 return 0; 3238} 3239EOF 3240 if compile_prog "" "" ; then 3241 xfs="yes" 3242 else 3243 if test "$xfs" = "yes" ; then 3244 feature_not_found "xfs" "Install xfsprogs/xfslibs devel" 3245 fi 3246 xfs=no 3247 fi 3248fi 3249 3250########################################## 3251# vde libraries probe 3252if test "$vde" != "no" ; then 3253 vde_libs="-lvdeplug" 3254 cat > $TMPC << EOF 3255#include <libvdeplug.h> 3256int main(void) 3257{ 3258 struct vde_open_args a = {0, 0, 0}; 3259 char s[] = ""; 3260 vde_open(s, s, &a); 3261 return 0; 3262} 3263EOF 3264 if compile_prog "" "$vde_libs" ; then 3265 vde=yes 3266 else 3267 if test "$vde" = "yes" ; then 3268 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel" 3269 fi 3270 vde=no 3271 fi 3272fi 3273 3274########################################## 3275# netmap support probe 3276# Apart from looking for netmap headers, we make sure that the host API version 3277# supports the netmap backend (>=11). The upper bound (15) is meant to simulate 3278# a minor/major version number. Minor new features will be marked with values up 3279# to 15, and if something happens that requires a change to the backend we will 3280# move above 15, submit the backend fixes and modify this two bounds. 3281if test "$netmap" != "no" ; then 3282 cat > $TMPC << EOF 3283#include <inttypes.h> 3284#include <net/if.h> 3285#include <net/netmap.h> 3286#include <net/netmap_user.h> 3287#if (NETMAP_API < 11) || (NETMAP_API > 15) 3288#error 3289#endif 3290int main(void) { return 0; } 3291EOF 3292 if compile_prog "" "" ; then 3293 netmap=yes 3294 else 3295 if test "$netmap" = "yes" ; then 3296 feature_not_found "netmap" 3297 fi 3298 netmap=no 3299 fi 3300fi 3301 3302########################################## 3303# libcap-ng library probe 3304if test "$cap_ng" != "no" ; then 3305 cap_libs="-lcap-ng" 3306 cat > $TMPC << EOF 3307#include <cap-ng.h> 3308int main(void) 3309{ 3310 capng_capability_to_name(CAPNG_EFFECTIVE); 3311 return 0; 3312} 3313EOF 3314 if compile_prog "" "$cap_libs" ; then 3315 cap_ng=yes 3316 else 3317 if test "$cap_ng" = "yes" ; then 3318 feature_not_found "cap_ng" "Install libcap-ng devel" 3319 fi 3320 cap_ng=no 3321 fi 3322fi 3323 3324########################################## 3325# Sound support libraries probe 3326 3327audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g') 3328for drv in $audio_drv_list; do 3329 case $drv in 3330 alsa | try-alsa) 3331 if $pkg_config alsa --exists; then 3332 alsa_libs=$($pkg_config alsa --libs) 3333 alsa_cflags=$($pkg_config alsa --cflags) 3334 alsa=yes 3335 if test "$drv" = "try-alsa"; then 3336 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/') 3337 fi 3338 else 3339 if test "$drv" = "try-alsa"; then 3340 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//') 3341 else 3342 error_exit "$drv check failed" \ 3343 "Make sure to have the $drv libs and headers installed." 3344 fi 3345 fi 3346 ;; 3347 3348 pa | try-pa) 3349 if $pkg_config libpulse --exists; then 3350 libpulse=yes 3351 pulse_libs=$($pkg_config libpulse --libs) 3352 pulse_cflags=$($pkg_config libpulse --cflags) 3353 if test "$drv" = "try-pa"; then 3354 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/') 3355 fi 3356 else 3357 if test "$drv" = "try-pa"; then 3358 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//') 3359 else 3360 error_exit "$drv check failed" \ 3361 "Make sure to have the $drv libs and headers installed." 3362 fi 3363 fi 3364 ;; 3365 3366 sdl) 3367 if test "$sdl" = "no"; then 3368 error_exit "sdl not found or disabled, can not use sdl audio driver" 3369 fi 3370 ;; 3371 3372 try-sdl) 3373 if test "$sdl" = "no"; then 3374 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//') 3375 else 3376 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/') 3377 fi 3378 ;; 3379 3380 coreaudio) 3381 coreaudio_libs="-framework CoreAudio" 3382 ;; 3383 3384 dsound) 3385 dsound_libs="-lole32 -ldxguid" 3386 audio_win_int="yes" 3387 ;; 3388 3389 oss) 3390 oss_libs="$oss_lib" 3391 ;; 3392 3393 jack | try-jack) 3394 if $pkg_config jack --exists; then 3395 libjack=yes 3396 jack_libs=$($pkg_config jack --libs) 3397 if test "$drv" = "try-jack"; then 3398 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/') 3399 fi 3400 else 3401 if test "$drv" = "try-jack"; then 3402 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//') 3403 else 3404 error_exit "$drv check failed" \ 3405 "Make sure to have the $drv libs and headers installed." 3406 fi 3407 fi 3408 ;; 3409 3410 *) 3411 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { 3412 error_exit "Unknown driver '$drv' selected" \ 3413 "Possible drivers are: $audio_possible_drivers" 3414 } 3415 ;; 3416 esac 3417done 3418 3419########################################## 3420# BrlAPI probe 3421 3422if test "$brlapi" != "no" ; then 3423 brlapi_libs="-lbrlapi" 3424 cat > $TMPC << EOF 3425#include <brlapi.h> 3426#include <stddef.h> 3427int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); } 3428EOF 3429 if compile_prog "" "$brlapi_libs" ; then 3430 brlapi=yes 3431 else 3432 if test "$brlapi" = "yes" ; then 3433 feature_not_found "brlapi" "Install brlapi devel" 3434 fi 3435 brlapi=no 3436 fi 3437fi 3438 3439########################################## 3440# curl probe 3441if test "$curl" != "no" ; then 3442 if $pkg_config libcurl --exists; then 3443 curlconfig="$pkg_config libcurl" 3444 else 3445 curlconfig=curl-config 3446 fi 3447 cat > $TMPC << EOF 3448#include <curl/curl.h> 3449int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; } 3450EOF 3451 curl_cflags=$($curlconfig --cflags 2>/dev/null) 3452 curl_libs=$($curlconfig --libs 2>/dev/null) 3453 if compile_prog "$curl_cflags" "$curl_libs" ; then 3454 curl=yes 3455 else 3456 if test "$curl" = "yes" ; then 3457 feature_not_found "curl" "Install libcurl devel" 3458 fi 3459 curl=no 3460 fi 3461fi # test "$curl" 3462 3463########################################## 3464# glib support probe 3465 3466glib_req_ver=2.48 3467glib_modules=gthread-2.0 3468if test "$modules" = yes; then 3469 glib_modules="$glib_modules gmodule-export-2.0" 3470fi 3471if test "$plugins" = yes; then 3472 glib_modules="$glib_modules gmodule-2.0" 3473fi 3474 3475for i in $glib_modules; do 3476 if $pkg_config --atleast-version=$glib_req_ver $i; then 3477 glib_cflags=$($pkg_config --cflags $i) 3478 glib_libs=$($pkg_config --libs $i) 3479 else 3480 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 3481 fi 3482done 3483 3484# This workaround is required due to a bug in pkg-config file for glib as it 3485# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 3486 3487if test "$static" = yes && test "$mingw32" = yes; then 3488 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags" 3489fi 3490 3491if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then 3492 gio=yes 3493 gio_cflags=$($pkg_config --cflags gio-2.0) 3494 gio_libs=$($pkg_config --libs gio-2.0) 3495 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0) 3496 if [ ! -x "$gdbus_codegen" ]; then 3497 gdbus_codegen= 3498 fi 3499else 3500 gio=no 3501fi 3502 3503if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then 3504 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)" 3505 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)" 3506fi 3507 3508# Sanity check that the current size_t matches the 3509# size that glib thinks it should be. This catches 3510# problems on multi-arch where people try to build 3511# 32-bit QEMU while pointing at 64-bit glib headers 3512cat > $TMPC <<EOF 3513#include <glib.h> 3514#include <unistd.h> 3515 3516#define QEMU_BUILD_BUG_ON(x) \ 3517 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 3518 3519int main(void) { 3520 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 3521 return 0; 3522} 3523EOF 3524 3525if ! compile_prog "$glib_cflags" "$glib_libs" ; then 3526 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 3527 "You probably need to set PKG_CONFIG_LIBDIR"\ 3528 "to point to the right pkg-config files for your"\ 3529 "build target" 3530fi 3531 3532# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 3533cat > $TMPC << EOF 3534#include <glib.h> 3535int main(void) { return 0; } 3536EOF 3537if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3538 if cc_has_warning_flag "-Wno-unknown-attributes"; then 3539 glib_cflags="-Wno-unknown-attributes $glib_cflags" 3540 CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS" 3541 fi 3542fi 3543 3544# Silence clang warnings triggered by glib < 2.57.2 3545cat > $TMPC << EOF 3546#include <glib.h> 3547typedef struct Foo { 3548 int i; 3549} Foo; 3550static void foo_free(Foo *f) 3551{ 3552 g_free(f); 3553} 3554G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free); 3555int main(void) { return 0; } 3556EOF 3557if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3558 if cc_has_warning_flag "-Wno-unused-function"; then 3559 glib_cflags="$glib_cflags -Wno-unused-function" 3560 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function" 3561 fi 3562fi 3563 3564########################################## 3565# SHA command probe for modules 3566if test "$modules" = yes; then 3567 shacmd_probe="sha1sum sha1 shasum" 3568 for c in $shacmd_probe; do 3569 if has $c; then 3570 shacmd="$c" 3571 break 3572 fi 3573 done 3574 if test "$shacmd" = ""; then 3575 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 3576 fi 3577fi 3578 3579########################################## 3580# pthread probe 3581PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 3582 3583pthread=no 3584cat > $TMPC << EOF 3585#include <pthread.h> 3586static void *f(void *p) { return NULL; } 3587int main(void) { 3588 pthread_t thread; 3589 pthread_create(&thread, 0, f, 0); 3590 return 0; 3591} 3592EOF 3593if compile_prog "" "" ; then 3594 pthread=yes 3595else 3596 for pthread_lib in $PTHREADLIBS_LIST; do 3597 if compile_prog "" "$pthread_lib" ; then 3598 pthread=yes 3599 found=no 3600 for lib_entry in $LIBS; do 3601 if test "$lib_entry" = "$pthread_lib"; then 3602 found=yes 3603 break 3604 fi 3605 done 3606 if test "$found" = "no"; then 3607 LIBS="$pthread_lib $LIBS" 3608 fi 3609 break 3610 fi 3611 done 3612fi 3613 3614if test "$mingw32" != yes && test "$pthread" = no; then 3615 error_exit "pthread check failed" \ 3616 "Make sure to have the pthread libs and headers installed." 3617fi 3618 3619# check for pthread_setname_np with thread id 3620pthread_setname_np_w_tid=no 3621cat > $TMPC << EOF 3622#include <pthread.h> 3623 3624static void *f(void *p) { return NULL; } 3625int main(void) 3626{ 3627 pthread_t thread; 3628 pthread_create(&thread, 0, f, 0); 3629 pthread_setname_np(thread, "QEMU"); 3630 return 0; 3631} 3632EOF 3633if compile_prog "" "$pthread_lib" ; then 3634 pthread_setname_np_w_tid=yes 3635fi 3636 3637# check for pthread_setname_np without thread id 3638pthread_setname_np_wo_tid=no 3639cat > $TMPC << EOF 3640#include <pthread.h> 3641 3642static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; } 3643int main(void) 3644{ 3645 pthread_t thread; 3646 pthread_create(&thread, 0, f, 0); 3647 return 0; 3648} 3649EOF 3650if compile_prog "" "$pthread_lib" ; then 3651 pthread_setname_np_wo_tid=yes 3652fi 3653 3654########################################## 3655# rbd probe 3656if test "$rbd" != "no" ; then 3657 cat > $TMPC <<EOF 3658#include <stdio.h> 3659#include <rbd/librbd.h> 3660int main(void) { 3661 rados_t cluster; 3662 rados_create(&cluster, NULL); 3663 return 0; 3664} 3665EOF 3666 rbd_libs="-lrbd -lrados" 3667 if compile_prog "" "$rbd_libs" ; then 3668 rbd=yes 3669 else 3670 if test "$rbd" = "yes" ; then 3671 feature_not_found "rados block device" "Install librbd/ceph devel" 3672 fi 3673 rbd=no 3674 fi 3675fi 3676 3677########################################## 3678# libssh probe 3679if test "$libssh" != "no" ; then 3680 if $pkg_config --exists libssh; then 3681 libssh_cflags=$($pkg_config libssh --cflags) 3682 libssh_libs=$($pkg_config libssh --libs) 3683 libssh=yes 3684 else 3685 if test "$libssh" = "yes" ; then 3686 error_exit "libssh required for --enable-libssh" 3687 fi 3688 libssh=no 3689 fi 3690fi 3691 3692########################################## 3693# Check for libssh 0.8 3694# This is done like this instead of using the LIBSSH_VERSION_* and 3695# SSH_VERSION_* macros because some distributions in the past shipped 3696# snapshots of the future 0.8 from Git, and those snapshots did not 3697# have updated version numbers (still referring to 0.7.0). 3698 3699if test "$libssh" = "yes"; then 3700 cat > $TMPC <<EOF 3701#include <libssh/libssh.h> 3702int main(void) { return ssh_get_server_publickey(NULL, NULL); } 3703EOF 3704 if compile_prog "$libssh_cflags" "$libssh_libs"; then 3705 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags" 3706 fi 3707fi 3708 3709########################################## 3710# linux-aio probe 3711 3712if test "$linux_aio" != "no" ; then 3713 cat > $TMPC <<EOF 3714#include <libaio.h> 3715#include <sys/eventfd.h> 3716#include <stddef.h> 3717int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 3718EOF 3719 if compile_prog "" "-laio" ; then 3720 linux_aio=yes 3721 else 3722 if test "$linux_aio" = "yes" ; then 3723 feature_not_found "linux AIO" "Install libaio devel" 3724 fi 3725 linux_aio=no 3726 fi 3727fi 3728########################################## 3729# linux-io-uring probe 3730 3731if test "$linux_io_uring" != "no" ; then 3732 if $pkg_config liburing; then 3733 linux_io_uring_cflags=$($pkg_config --cflags liburing) 3734 linux_io_uring_libs=$($pkg_config --libs liburing) 3735 linux_io_uring=yes 3736 else 3737 if test "$linux_io_uring" = "yes" ; then 3738 feature_not_found "linux io_uring" "Install liburing devel" 3739 fi 3740 linux_io_uring=no 3741 fi 3742fi 3743 3744########################################## 3745# TPM emulation is only on POSIX 3746 3747if test "$tpm" = ""; then 3748 if test "$mingw32" = "yes"; then 3749 tpm=no 3750 else 3751 tpm=yes 3752 fi 3753elif test "$tpm" = "yes"; then 3754 if test "$mingw32" = "yes" ; then 3755 error_exit "TPM emulation only available on POSIX systems" 3756 fi 3757fi 3758 3759########################################## 3760# attr probe 3761 3762libattr_libs= 3763if test "$attr" != "no" ; then 3764 cat > $TMPC <<EOF 3765#include <stdio.h> 3766#include <sys/types.h> 3767#ifdef CONFIG_LIBATTR 3768#include <attr/xattr.h> 3769#else 3770#include <sys/xattr.h> 3771#endif 3772int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 3773EOF 3774 if compile_prog "" "" ; then 3775 attr=yes 3776 # Older distros have <attr/xattr.h>, and need -lattr: 3777 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 3778 attr=yes 3779 libattr_libs="-lattr" 3780 libattr=yes 3781 else 3782 if test "$attr" = "yes" ; then 3783 feature_not_found "ATTR" "Install libc6 or libattr devel" 3784 fi 3785 attr=no 3786 fi 3787fi 3788 3789########################################## 3790# iovec probe 3791cat > $TMPC <<EOF 3792#include <sys/types.h> 3793#include <sys/uio.h> 3794#include <unistd.h> 3795int main(void) { return sizeof(struct iovec); } 3796EOF 3797iovec=no 3798if compile_prog "" "" ; then 3799 iovec=yes 3800fi 3801 3802########################################## 3803# preadv probe 3804cat > $TMPC <<EOF 3805#include <sys/types.h> 3806#include <sys/uio.h> 3807#include <unistd.h> 3808int main(void) { return preadv(0, 0, 0, 0); } 3809EOF 3810preadv=no 3811if compile_prog "" "" ; then 3812 preadv=yes 3813fi 3814 3815########################################## 3816# fdt probe 3817 3818case "$fdt" in 3819 auto | enabled | internal) 3820 # Simpler to always update submodule, even if not needed. 3821 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then 3822 git_submodules="${git_submodules} dtc" 3823 fi 3824 ;; 3825esac 3826 3827########################################## 3828# opengl probe (for sdl2, gtk, milkymist-tmu2) 3829 3830gbm="no" 3831if $pkg_config gbm; then 3832 gbm_cflags="$($pkg_config --cflags gbm)" 3833 gbm_libs="$($pkg_config --libs gbm)" 3834 gbm="yes" 3835fi 3836 3837if test "$opengl" != "no" ; then 3838 opengl_pkgs="epoxy gbm" 3839 if $pkg_config $opengl_pkgs; then 3840 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 3841 opengl_libs="$($pkg_config --libs $opengl_pkgs)" 3842 opengl=yes 3843 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 3844 gtk_gl="yes" 3845 fi 3846 else 3847 if test "$opengl" = "yes" ; then 3848 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 3849 fi 3850 opengl_cflags="" 3851 opengl_libs="" 3852 opengl=no 3853 fi 3854fi 3855 3856if test "$opengl" = "yes"; then 3857 cat > $TMPC << EOF 3858#include <epoxy/egl.h> 3859#ifndef EGL_MESA_image_dma_buf_export 3860# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 3861#endif 3862int main(void) { return 0; } 3863EOF 3864 if compile_prog "" "" ; then 3865 opengl_dmabuf=yes 3866 fi 3867fi 3868 3869if test "$opengl" = "yes" && test "$have_x11" = "yes"; then 3870 for target in $target_list; do 3871 case $target in 3872 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL 3873 need_x11=yes 3874 ;; 3875 esac 3876 done 3877fi 3878 3879########################################## 3880# libxml2 probe 3881if test "$libxml2" != "no" ; then 3882 if $pkg_config --exists libxml-2.0; then 3883 libxml2="yes" 3884 libxml2_cflags=$($pkg_config --cflags libxml-2.0) 3885 libxml2_libs=$($pkg_config --libs libxml-2.0) 3886 else 3887 if test "$libxml2" = "yes"; then 3888 feature_not_found "libxml2" "Install libxml2 devel" 3889 fi 3890 libxml2="no" 3891 fi 3892fi 3893 3894########################################## 3895# glusterfs probe 3896if test "$glusterfs" != "no" ; then 3897 if $pkg_config --atleast-version=3 glusterfs-api; then 3898 glusterfs="yes" 3899 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 3900 glusterfs_libs=$($pkg_config --libs glusterfs-api) 3901 if $pkg_config --atleast-version=4 glusterfs-api; then 3902 glusterfs_xlator_opt="yes" 3903 fi 3904 if $pkg_config --atleast-version=5 glusterfs-api; then 3905 glusterfs_discard="yes" 3906 fi 3907 if $pkg_config --atleast-version=6 glusterfs-api; then 3908 glusterfs_fallocate="yes" 3909 glusterfs_zerofill="yes" 3910 fi 3911 cat > $TMPC << EOF 3912#include <glusterfs/api/glfs.h> 3913 3914int 3915main(void) 3916{ 3917 /* new glfs_ftruncate() passes two additional args */ 3918 return glfs_ftruncate(NULL, 0, NULL, NULL); 3919} 3920EOF 3921 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 3922 glusterfs_ftruncate_has_stat="yes" 3923 fi 3924 cat > $TMPC << EOF 3925#include <glusterfs/api/glfs.h> 3926 3927/* new glfs_io_cbk() passes two additional glfs_stat structs */ 3928static void 3929glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data) 3930{} 3931 3932int 3933main(void) 3934{ 3935 glfs_io_cbk iocb = &glusterfs_iocb; 3936 iocb(NULL, 0 , NULL, NULL, NULL); 3937 return 0; 3938} 3939EOF 3940 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 3941 glusterfs_iocb_has_stat="yes" 3942 fi 3943 else 3944 if test "$glusterfs" = "yes" ; then 3945 feature_not_found "GlusterFS backend support" \ 3946 "Install glusterfs-api devel >= 3" 3947 fi 3948 glusterfs="no" 3949 fi 3950fi 3951 3952# Check for inotify functions when we are building linux-user 3953# emulator. This is done because older glibc versions don't 3954# have syscall stubs for these implemented. In that case we 3955# don't provide them even if kernel supports them. 3956# 3957inotify=no 3958cat > $TMPC << EOF 3959#include <sys/inotify.h> 3960 3961int 3962main(void) 3963{ 3964 /* try to start inotify */ 3965 return inotify_init(); 3966} 3967EOF 3968if compile_prog "" "" ; then 3969 inotify=yes 3970fi 3971 3972inotify1=no 3973cat > $TMPC << EOF 3974#include <sys/inotify.h> 3975 3976int 3977main(void) 3978{ 3979 /* try to start inotify */ 3980 return inotify_init1(0); 3981} 3982EOF 3983if compile_prog "" "" ; then 3984 inotify1=yes 3985fi 3986 3987# check if pipe2 is there 3988pipe2=no 3989cat > $TMPC << EOF 3990#include <unistd.h> 3991#include <fcntl.h> 3992 3993int main(void) 3994{ 3995 int pipefd[2]; 3996 return pipe2(pipefd, O_CLOEXEC); 3997} 3998EOF 3999if compile_prog "" "" ; then 4000 pipe2=yes 4001fi 4002 4003# check if accept4 is there 4004accept4=no 4005cat > $TMPC << EOF 4006#include <sys/socket.h> 4007#include <stddef.h> 4008 4009int main(void) 4010{ 4011 accept4(0, NULL, NULL, SOCK_CLOEXEC); 4012 return 0; 4013} 4014EOF 4015if compile_prog "" "" ; then 4016 accept4=yes 4017fi 4018 4019# check if tee/splice is there. vmsplice was added same time. 4020splice=no 4021cat > $TMPC << EOF 4022#include <unistd.h> 4023#include <fcntl.h> 4024#include <limits.h> 4025 4026int main(void) 4027{ 4028 int len, fd = 0; 4029 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 4030 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 4031 return 0; 4032} 4033EOF 4034if compile_prog "" "" ; then 4035 splice=yes 4036fi 4037 4038########################################## 4039# libnuma probe 4040 4041if test "$numa" != "no" ; then 4042 cat > $TMPC << EOF 4043#include <numa.h> 4044int main(void) { return numa_available(); } 4045EOF 4046 4047 if compile_prog "" "-lnuma" ; then 4048 numa=yes 4049 numa_libs="-lnuma" 4050 else 4051 if test "$numa" = "yes" ; then 4052 feature_not_found "numa" "install numactl devel" 4053 fi 4054 numa=no 4055 fi 4056fi 4057 4058malloc=system 4059if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 4060 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 4061 exit 1 4062elif test "$tcmalloc" = "yes" ; then 4063 malloc=tcmalloc 4064elif test "$jemalloc" = "yes" ; then 4065 malloc=jemalloc 4066fi 4067 4068########################################## 4069# signalfd probe 4070signalfd="no" 4071cat > $TMPC << EOF 4072#include <unistd.h> 4073#include <sys/syscall.h> 4074#include <signal.h> 4075int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4076EOF 4077 4078if compile_prog "" "" ; then 4079 signalfd=yes 4080fi 4081 4082# check if optreset global is declared by <getopt.h> 4083optreset="no" 4084cat > $TMPC << EOF 4085#include <getopt.h> 4086int main(void) { return optreset; } 4087EOF 4088 4089if compile_prog "" "" ; then 4090 optreset=yes 4091fi 4092 4093# check if eventfd is supported 4094eventfd=no 4095cat > $TMPC << EOF 4096#include <sys/eventfd.h> 4097 4098int main(void) 4099{ 4100 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4101} 4102EOF 4103if compile_prog "" "" ; then 4104 eventfd=yes 4105fi 4106 4107# check if memfd is supported 4108memfd=no 4109cat > $TMPC << EOF 4110#include <sys/mman.h> 4111 4112int main(void) 4113{ 4114 return memfd_create("foo", MFD_ALLOW_SEALING); 4115} 4116EOF 4117if compile_prog "" "" ; then 4118 memfd=yes 4119fi 4120 4121# check for usbfs 4122have_usbfs=no 4123if test "$linux_user" = "yes"; then 4124 cat > $TMPC << EOF 4125#include <linux/usbdevice_fs.h> 4126 4127#ifndef USBDEVFS_GET_CAPABILITIES 4128#error "USBDEVFS_GET_CAPABILITIES undefined" 4129#endif 4130 4131#ifndef USBDEVFS_DISCONNECT_CLAIM 4132#error "USBDEVFS_DISCONNECT_CLAIM undefined" 4133#endif 4134 4135int main(void) 4136{ 4137 return 0; 4138} 4139EOF 4140 if compile_prog "" ""; then 4141 have_usbfs=yes 4142 fi 4143fi 4144 4145# check for fallocate 4146fallocate=no 4147cat > $TMPC << EOF 4148#include <fcntl.h> 4149 4150int main(void) 4151{ 4152 fallocate(0, 0, 0, 0); 4153 return 0; 4154} 4155EOF 4156if compile_prog "" "" ; then 4157 fallocate=yes 4158fi 4159 4160# check for fallocate hole punching 4161fallocate_punch_hole=no 4162cat > $TMPC << EOF 4163#include <fcntl.h> 4164#include <linux/falloc.h> 4165 4166int main(void) 4167{ 4168 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4169 return 0; 4170} 4171EOF 4172if compile_prog "" "" ; then 4173 fallocate_punch_hole=yes 4174fi 4175 4176# check that fallocate supports range zeroing inside the file 4177fallocate_zero_range=no 4178cat > $TMPC << EOF 4179#include <fcntl.h> 4180#include <linux/falloc.h> 4181 4182int main(void) 4183{ 4184 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4185 return 0; 4186} 4187EOF 4188if compile_prog "" "" ; then 4189 fallocate_zero_range=yes 4190fi 4191 4192# check for posix_fallocate 4193posix_fallocate=no 4194cat > $TMPC << EOF 4195#include <fcntl.h> 4196 4197int main(void) 4198{ 4199 posix_fallocate(0, 0, 0); 4200 return 0; 4201} 4202EOF 4203if compile_prog "" "" ; then 4204 posix_fallocate=yes 4205fi 4206 4207# check for sync_file_range 4208sync_file_range=no 4209cat > $TMPC << EOF 4210#include <fcntl.h> 4211 4212int main(void) 4213{ 4214 sync_file_range(0, 0, 0, 0); 4215 return 0; 4216} 4217EOF 4218if compile_prog "" "" ; then 4219 sync_file_range=yes 4220fi 4221 4222# check for linux/fiemap.h and FS_IOC_FIEMAP 4223fiemap=no 4224cat > $TMPC << EOF 4225#include <sys/ioctl.h> 4226#include <linux/fs.h> 4227#include <linux/fiemap.h> 4228 4229int main(void) 4230{ 4231 ioctl(0, FS_IOC_FIEMAP, 0); 4232 return 0; 4233} 4234EOF 4235if compile_prog "" "" ; then 4236 fiemap=yes 4237fi 4238 4239# check for dup3 4240dup3=no 4241cat > $TMPC << EOF 4242#include <unistd.h> 4243 4244int main(void) 4245{ 4246 dup3(0, 0, 0); 4247 return 0; 4248} 4249EOF 4250if compile_prog "" "" ; then 4251 dup3=yes 4252fi 4253 4254# check for ppoll support 4255ppoll=no 4256cat > $TMPC << EOF 4257#include <poll.h> 4258 4259int main(void) 4260{ 4261 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 4262 ppoll(&pfd, 1, 0, 0); 4263 return 0; 4264} 4265EOF 4266if compile_prog "" "" ; then 4267 ppoll=yes 4268fi 4269 4270# check for prctl(PR_SET_TIMERSLACK , ... ) support 4271prctl_pr_set_timerslack=no 4272cat > $TMPC << EOF 4273#include <sys/prctl.h> 4274 4275int main(void) 4276{ 4277 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4278 return 0; 4279} 4280EOF 4281if compile_prog "" "" ; then 4282 prctl_pr_set_timerslack=yes 4283fi 4284 4285# check for epoll support 4286epoll=no 4287cat > $TMPC << EOF 4288#include <sys/epoll.h> 4289 4290int main(void) 4291{ 4292 epoll_create(0); 4293 return 0; 4294} 4295EOF 4296if compile_prog "" "" ; then 4297 epoll=yes 4298fi 4299 4300# epoll_create1 is a later addition 4301# so we must check separately for its presence 4302epoll_create1=no 4303cat > $TMPC << EOF 4304#include <sys/epoll.h> 4305 4306int main(void) 4307{ 4308 /* Note that we use epoll_create1 as a value, not as 4309 * a function being called. This is necessary so that on 4310 * old SPARC glibc versions where the function was present in 4311 * the library but not declared in the header file we will 4312 * fail the configure check. (Otherwise we will get a compiler 4313 * warning but not an error, and will proceed to fail the 4314 * qemu compile where we compile with -Werror.) 4315 */ 4316 return (int)(uintptr_t)&epoll_create1; 4317} 4318EOF 4319if compile_prog "" "" ; then 4320 epoll_create1=yes 4321fi 4322 4323# check for sendfile support 4324sendfile=no 4325cat > $TMPC << EOF 4326#include <sys/sendfile.h> 4327 4328int main(void) 4329{ 4330 return sendfile(0, 0, 0, 0); 4331} 4332EOF 4333if compile_prog "" "" ; then 4334 sendfile=yes 4335fi 4336 4337# check for timerfd support (glibc 2.8 and newer) 4338timerfd=no 4339cat > $TMPC << EOF 4340#include <sys/timerfd.h> 4341 4342int main(void) 4343{ 4344 return(timerfd_create(CLOCK_REALTIME, 0)); 4345} 4346EOF 4347if compile_prog "" "" ; then 4348 timerfd=yes 4349fi 4350 4351# check for setns and unshare support 4352setns=no 4353cat > $TMPC << EOF 4354#include <sched.h> 4355 4356int main(void) 4357{ 4358 int ret; 4359 ret = setns(0, 0); 4360 ret = unshare(0); 4361 return ret; 4362} 4363EOF 4364if compile_prog "" "" ; then 4365 setns=yes 4366fi 4367 4368# clock_adjtime probe 4369clock_adjtime=no 4370cat > $TMPC <<EOF 4371#include <time.h> 4372 4373int main(void) 4374{ 4375 return clock_adjtime(0, 0); 4376} 4377EOF 4378clock_adjtime=no 4379if compile_prog "" "" ; then 4380 clock_adjtime=yes 4381fi 4382 4383# syncfs probe 4384syncfs=no 4385cat > $TMPC <<EOF 4386#include <unistd.h> 4387 4388int main(void) 4389{ 4390 return syncfs(0); 4391} 4392EOF 4393syncfs=no 4394if compile_prog "" "" ; then 4395 syncfs=yes 4396fi 4397 4398# check for kcov support (kernel must be 4.4+, compiled with certain options) 4399kcov=no 4400if check_include sys/kcov.h ; then 4401 kcov=yes 4402fi 4403 4404# check for btrfs filesystem support (kernel must be 3.9+) 4405btrfs=no 4406if check_include linux/btrfs.h ; then 4407 btrfs=yes 4408fi 4409 4410# Search for bswap_32 function 4411byteswap_h=no 4412cat > $TMPC << EOF 4413#include <byteswap.h> 4414int main(void) { return bswap_32(0); } 4415EOF 4416if compile_prog "" "" ; then 4417 byteswap_h=yes 4418fi 4419 4420# Search for bswap32 function 4421bswap_h=no 4422cat > $TMPC << EOF 4423#include <sys/endian.h> 4424#include <sys/types.h> 4425#include <machine/bswap.h> 4426int main(void) { return bswap32(0); } 4427EOF 4428if compile_prog "" "" ; then 4429 bswap_h=yes 4430fi 4431 4432########################################## 4433# Do we have libiscsi >= 1.9.0 4434if test "$libiscsi" != "no" ; then 4435 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4436 libiscsi="yes" 4437 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4438 libiscsi_libs=$($pkg_config --libs libiscsi) 4439 else 4440 if test "$libiscsi" = "yes" ; then 4441 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4442 fi 4443 libiscsi="no" 4444 fi 4445fi 4446 4447########################################## 4448# Do we need librt 4449# uClibc provides 2 versions of clock_gettime(), one with realtime 4450# support and one without. This means that the clock_gettime() don't 4451# need -lrt. We still need it for timer_create() so we check for this 4452# function in addition. 4453cat > $TMPC <<EOF 4454#include <signal.h> 4455#include <time.h> 4456int main(void) { 4457 timer_create(CLOCK_REALTIME, NULL, NULL); 4458 return clock_gettime(CLOCK_REALTIME, NULL); 4459} 4460EOF 4461 4462if compile_prog "" "" ; then 4463 : 4464# we need pthread for static linking. use previous pthread test result 4465elif compile_prog "" "$pthread_lib -lrt" ; then 4466 LIBS="$LIBS -lrt" 4467fi 4468 4469# Check whether we have openpty() in either libc or libutil 4470cat > $TMPC << EOF 4471extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 4472int main(void) { return openpty(0, 0, 0, 0, 0); } 4473EOF 4474 4475have_openpty="no" 4476if compile_prog "" "" ; then 4477 have_openpty="yes" 4478else 4479 if compile_prog "" "-lutil" ; then 4480 have_openpty="yes" 4481 fi 4482fi 4483 4484########################################## 4485# spice probe 4486if test "$spice" != "no" ; then 4487 cat > $TMPC << EOF 4488#include <spice.h> 4489int main(void) { spice_server_new(); return 0; } 4490EOF 4491 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4492 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4493 if $pkg_config --atleast-version=0.12.5 spice-server && \ 4494 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4495 compile_prog "$spice_cflags" "$spice_libs" ; then 4496 spice="yes" 4497 else 4498 if test "$spice" = "yes" ; then 4499 feature_not_found "spice" \ 4500 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 4501 fi 4502 spice="no" 4503 fi 4504fi 4505 4506# check for smartcard support 4507if test "$smartcard" != "no"; then 4508 if $pkg_config --atleast-version=2.5.1 libcacard; then 4509 libcacard_cflags=$($pkg_config --cflags libcacard) 4510 libcacard_libs=$($pkg_config --libs libcacard) 4511 smartcard="yes" 4512 else 4513 if test "$smartcard" = "yes"; then 4514 feature_not_found "smartcard" "Install libcacard devel" 4515 fi 4516 smartcard="no" 4517 fi 4518fi 4519 4520# check for libusb 4521if test "$libusb" != "no" ; then 4522 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 4523 libusb="yes" 4524 libusb_cflags=$($pkg_config --cflags libusb-1.0) 4525 libusb_libs=$($pkg_config --libs libusb-1.0) 4526 else 4527 if test "$libusb" = "yes"; then 4528 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 4529 fi 4530 libusb="no" 4531 fi 4532fi 4533 4534# check for usbredirparser for usb network redirection support 4535if test "$usb_redir" != "no" ; then 4536 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 4537 usb_redir="yes" 4538 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4539 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 4540 else 4541 if test "$usb_redir" = "yes"; then 4542 feature_not_found "usb-redir" "Install usbredir devel" 4543 fi 4544 usb_redir="no" 4545 fi 4546fi 4547 4548########################################## 4549# check if we have VSS SDK headers for win 4550 4551if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 4552 test "$vss_win32_sdk" != "no" ; then 4553 case "$vss_win32_sdk" in 4554 "") vss_win32_include="-isystem $source_path" ;; 4555 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4556 # handle path with spaces. So we symlink the headers into ".sdk/vss". 4557 vss_win32_include="-isystem $source_path/.sdk/vss" 4558 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4559 ;; 4560 *) vss_win32_include="-isystem $vss_win32_sdk" 4561 esac 4562 cat > $TMPC << EOF 4563#define __MIDL_user_allocate_free_DEFINED__ 4564#include <inc/win2003/vss.h> 4565int main(void) { return VSS_CTX_BACKUP; } 4566EOF 4567 if compile_prog "$vss_win32_include" "" ; then 4568 guest_agent_with_vss="yes" 4569 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4570 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4571 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4572 else 4573 if test "$vss_win32_sdk" != "" ; then 4574 echo "ERROR: Please download and install Microsoft VSS SDK:" 4575 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4576 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4577 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4578 echo "ERROR: The headers are extracted in the directory \`inc'." 4579 feature_not_found "VSS support" 4580 fi 4581 guest_agent_with_vss="no" 4582 fi 4583fi 4584 4585########################################## 4586# lookup Windows platform SDK (if not specified) 4587# The SDK is needed only to build .tlb (type library) file of guest agent 4588# VSS provider from the source. It is usually unnecessary because the 4589# pre-compiled .tlb file is included. 4590 4591if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 4592 test "$guest_agent_with_vss" = "yes" ; then 4593 if test -z "$win_sdk"; then 4594 programfiles="$PROGRAMFILES" 4595 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4596 if test -n "$programfiles"; then 4597 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4598 else 4599 feature_not_found "Windows SDK" 4600 fi 4601 elif test "$win_sdk" = "no"; then 4602 win_sdk="" 4603 fi 4604fi 4605 4606########################################## 4607# check if mingw environment provides a recent ntddscsi.h 4608if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 4609 cat > $TMPC << EOF 4610#include <windows.h> 4611#include <ntddscsi.h> 4612int main(void) { 4613#if !defined(IOCTL_SCSI_GET_ADDRESS) 4614#error Missing required ioctl definitions 4615#endif 4616 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4617 return addr.Lun; 4618} 4619EOF 4620 if compile_prog "" "" ; then 4621 guest_agent_ntddscsi=yes 4622 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 4623 fi 4624fi 4625 4626########################################## 4627# virgl renderer probe 4628 4629if test "$virglrenderer" != "no" ; then 4630 cat > $TMPC << EOF 4631#include <virglrenderer.h> 4632int main(void) { virgl_renderer_poll(); return 0; } 4633EOF 4634 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4635 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 4636 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 4637 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4638 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4639 virglrenderer="yes" 4640 else 4641 if test "$virglrenderer" = "yes" ; then 4642 feature_not_found "virglrenderer" 4643 fi 4644 virglrenderer="no" 4645 fi 4646fi 4647 4648########################################## 4649# capstone 4650 4651case "$capstone" in 4652 auto | enabled | internal) 4653 # Simpler to always update submodule, even if not needed. 4654 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then 4655 git_submodules="${git_submodules} capstone" 4656 fi 4657 ;; 4658esac 4659 4660########################################## 4661# check if we have fdatasync 4662 4663fdatasync=no 4664cat > $TMPC << EOF 4665#include <unistd.h> 4666int main(void) { 4667#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4668return fdatasync(0); 4669#else 4670#error Not supported 4671#endif 4672} 4673EOF 4674if compile_prog "" "" ; then 4675 fdatasync=yes 4676fi 4677 4678########################################## 4679# check if we have madvise 4680 4681madvise=no 4682cat > $TMPC << EOF 4683#include <sys/types.h> 4684#include <sys/mman.h> 4685#include <stddef.h> 4686int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4687EOF 4688if compile_prog "" "" ; then 4689 madvise=yes 4690fi 4691 4692########################################## 4693# check if we have posix_madvise 4694 4695posix_madvise=no 4696cat > $TMPC << EOF 4697#include <sys/mman.h> 4698#include <stddef.h> 4699int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4700EOF 4701if compile_prog "" "" ; then 4702 posix_madvise=yes 4703fi 4704 4705########################################## 4706# check if we have posix_memalign() 4707 4708posix_memalign=no 4709cat > $TMPC << EOF 4710#include <stdlib.h> 4711int main(void) { 4712 void *p; 4713 return posix_memalign(&p, 8, 8); 4714} 4715EOF 4716if compile_prog "" "" ; then 4717 posix_memalign=yes 4718fi 4719 4720########################################## 4721# check if we have posix_syslog 4722 4723posix_syslog=no 4724cat > $TMPC << EOF 4725#include <syslog.h> 4726int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 4727EOF 4728if compile_prog "" "" ; then 4729 posix_syslog=yes 4730fi 4731 4732########################################## 4733# check if we have sem_timedwait 4734 4735sem_timedwait=no 4736cat > $TMPC << EOF 4737#include <semaphore.h> 4738int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 4739EOF 4740if compile_prog "" "" ; then 4741 sem_timedwait=yes 4742fi 4743 4744########################################## 4745# check if we have strchrnul 4746 4747strchrnul=no 4748cat > $TMPC << EOF 4749#include <string.h> 4750int main(void); 4751// Use a haystack that the compiler shouldn't be able to constant fold 4752char *haystack = (char*)&main; 4753int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 4754EOF 4755if compile_prog "" "" ; then 4756 strchrnul=yes 4757fi 4758 4759######################################### 4760# check if we have st_atim 4761 4762st_atim=no 4763cat > $TMPC << EOF 4764#include <sys/stat.h> 4765#include <stddef.h> 4766int main(void) { return offsetof(struct stat, st_atim); } 4767EOF 4768if compile_prog "" "" ; then 4769 st_atim=yes 4770fi 4771 4772########################################## 4773# check if trace backend exists 4774 4775$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4776if test "$?" -ne 0 ; then 4777 error_exit "invalid trace backends" \ 4778 "Please choose supported trace backends." 4779fi 4780 4781########################################## 4782# For 'ust' backend, test if ust headers are present 4783if have_backend "ust"; then 4784 cat > $TMPC << EOF 4785#include <lttng/tracepoint.h> 4786int main(void) { return 0; } 4787EOF 4788 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 4789 if $pkg_config lttng-ust --exists; then 4790 lttng_ust_libs=$($pkg_config --libs lttng-ust) 4791 else 4792 lttng_ust_libs="-llttng-ust -ldl" 4793 fi 4794 if $pkg_config liburcu-bp --exists; then 4795 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 4796 else 4797 urcu_bp_libs="-lurcu-bp" 4798 fi 4799 else 4800 error_exit "Trace backend 'ust' missing lttng-ust header files" 4801 fi 4802fi 4803 4804########################################## 4805# For 'dtrace' backend, test if 'dtrace' command is present 4806if have_backend "dtrace"; then 4807 if ! has 'dtrace' ; then 4808 error_exit "dtrace command is not found in PATH $PATH" 4809 fi 4810 trace_backend_stap="no" 4811 if has 'stap' ; then 4812 trace_backend_stap="yes" 4813 fi 4814fi 4815 4816########################################## 4817# check and set a backend for coroutine 4818 4819# We prefer ucontext, but it's not always possible. The fallback 4820# is sigcontext. On Windows the only valid backend is the Windows 4821# specific one. 4822 4823ucontext_works=no 4824if test "$darwin" != "yes"; then 4825 cat > $TMPC << EOF 4826#include <ucontext.h> 4827#ifdef __stub_makecontext 4828#error Ignoring glibc stub makecontext which will always fail 4829#endif 4830int main(void) { makecontext(0, 0, 0); return 0; } 4831EOF 4832 if compile_prog "" "" ; then 4833 ucontext_works=yes 4834 fi 4835fi 4836 4837if test "$coroutine" = ""; then 4838 if test "$mingw32" = "yes"; then 4839 coroutine=win32 4840 elif test "$ucontext_works" = "yes"; then 4841 coroutine=ucontext 4842 else 4843 coroutine=sigaltstack 4844 fi 4845else 4846 case $coroutine in 4847 windows) 4848 if test "$mingw32" != "yes"; then 4849 error_exit "'windows' coroutine backend only valid for Windows" 4850 fi 4851 # Unfortunately the user visible backend name doesn't match the 4852 # coroutine-*.c filename for this case, so we have to adjust it here. 4853 coroutine=win32 4854 ;; 4855 ucontext) 4856 if test "$ucontext_works" != "yes"; then 4857 feature_not_found "ucontext" 4858 fi 4859 ;; 4860 sigaltstack) 4861 if test "$mingw32" = "yes"; then 4862 error_exit "only the 'windows' coroutine backend is valid for Windows" 4863 fi 4864 ;; 4865 *) 4866 error_exit "unknown coroutine backend $coroutine" 4867 ;; 4868 esac 4869fi 4870 4871if test "$coroutine_pool" = ""; then 4872 coroutine_pool=yes 4873fi 4874 4875if test "$debug_stack_usage" = "yes"; then 4876 if test "$coroutine_pool" = "yes"; then 4877 echo "WARN: disabling coroutine pool for stack usage debugging" 4878 coroutine_pool=no 4879 fi 4880fi 4881 4882################################################## 4883# SafeStack 4884 4885 4886if test "$safe_stack" = "yes"; then 4887cat > $TMPC << EOF 4888int main(int argc, char *argv[]) 4889{ 4890#if ! __has_feature(safe_stack) 4891#error SafeStack Disabled 4892#endif 4893 return 0; 4894} 4895EOF 4896 flag="-fsanitize=safe-stack" 4897 # Check that safe-stack is supported and enabled. 4898 if compile_prog "-Werror $flag" "$flag"; then 4899 # Flag needed both at compilation and at linking 4900 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 4901 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 4902 else 4903 error_exit "SafeStack not supported by your compiler" 4904 fi 4905 if test "$coroutine" != "ucontext"; then 4906 error_exit "SafeStack is only supported by the coroutine backend ucontext" 4907 fi 4908else 4909cat > $TMPC << EOF 4910int main(int argc, char *argv[]) 4911{ 4912#if defined(__has_feature) 4913#if __has_feature(safe_stack) 4914#error SafeStack Enabled 4915#endif 4916#endif 4917 return 0; 4918} 4919EOF 4920if test "$safe_stack" = "no"; then 4921 # Make sure that safe-stack is disabled 4922 if ! compile_prog "-Werror" ""; then 4923 # SafeStack was already enabled, try to explicitly remove the feature 4924 flag="-fno-sanitize=safe-stack" 4925 if ! compile_prog "-Werror $flag" "$flag"; then 4926 error_exit "Configure cannot disable SafeStack" 4927 fi 4928 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 4929 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 4930 fi 4931else # "$safe_stack" = "" 4932 # Set safe_stack to yes or no based on pre-existing flags 4933 if compile_prog "-Werror" ""; then 4934 safe_stack="no" 4935 else 4936 safe_stack="yes" 4937 if test "$coroutine" != "ucontext"; then 4938 error_exit "SafeStack is only supported by the coroutine backend ucontext" 4939 fi 4940 fi 4941fi 4942fi 4943 4944########################################## 4945# check if we have open_by_handle_at 4946 4947open_by_handle_at=no 4948cat > $TMPC << EOF 4949#include <fcntl.h> 4950#if !defined(AT_EMPTY_PATH) 4951# error missing definition 4952#else 4953int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 4954#endif 4955EOF 4956if compile_prog "" "" ; then 4957 open_by_handle_at=yes 4958fi 4959 4960######################################## 4961# check if we have linux/magic.h 4962 4963linux_magic_h=no 4964cat > $TMPC << EOF 4965#include <linux/magic.h> 4966int main(void) { 4967 return 0; 4968} 4969EOF 4970if compile_prog "" "" ; then 4971 linux_magic_h=yes 4972fi 4973 4974######################################## 4975# check if we have valgrind/valgrind.h 4976 4977valgrind_h=no 4978cat > $TMPC << EOF 4979#include <valgrind/valgrind.h> 4980int main(void) { 4981 return 0; 4982} 4983EOF 4984if compile_prog "" "" ; then 4985 valgrind_h=yes 4986fi 4987 4988######################################## 4989# check if environ is declared 4990 4991has_environ=no 4992cat > $TMPC << EOF 4993#include <unistd.h> 4994int main(void) { 4995 environ = 0; 4996 return 0; 4997} 4998EOF 4999if compile_prog "" "" ; then 5000 has_environ=yes 5001fi 5002 5003######################################## 5004# check if cpuid.h is usable. 5005 5006cat > $TMPC << EOF 5007#include <cpuid.h> 5008int main(void) { 5009 unsigned a, b, c, d; 5010 int max = __get_cpuid_max(0, 0); 5011 5012 if (max >= 1) { 5013 __cpuid(1, a, b, c, d); 5014 } 5015 5016 if (max >= 7) { 5017 __cpuid_count(7, 0, a, b, c, d); 5018 } 5019 5020 return 0; 5021} 5022EOF 5023if compile_prog "" "" ; then 5024 cpuid_h=yes 5025fi 5026 5027########################################## 5028# avx2 optimization requirement check 5029# 5030# There is no point enabling this if cpuid.h is not usable, 5031# since we won't be able to select the new routines. 5032 5033if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 5034 cat > $TMPC << EOF 5035#pragma GCC push_options 5036#pragma GCC target("avx2") 5037#include <cpuid.h> 5038#include <immintrin.h> 5039static int bar(void *a) { 5040 __m256i x = *(__m256i *)a; 5041 return _mm256_testz_si256(x, x); 5042} 5043int main(int argc, char *argv[]) { return bar(argv[0]); } 5044EOF 5045 if compile_object "" ; then 5046 avx2_opt="yes" 5047 else 5048 avx2_opt="no" 5049 fi 5050fi 5051 5052########################################## 5053# avx512f optimization requirement check 5054# 5055# There is no point enabling this if cpuid.h is not usable, 5056# since we won't be able to select the new routines. 5057# by default, it is turned off. 5058# if user explicitly want to enable it, check environment 5059 5060if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 5061 cat > $TMPC << EOF 5062#pragma GCC push_options 5063#pragma GCC target("avx512f") 5064#include <cpuid.h> 5065#include <immintrin.h> 5066static int bar(void *a) { 5067 __m512i x = *(__m512i *)a; 5068 return _mm512_test_epi64_mask(x, x); 5069} 5070int main(int argc, char *argv[]) 5071{ 5072 return bar(argv[0]); 5073} 5074EOF 5075 if ! compile_object "" ; then 5076 avx512f_opt="no" 5077 fi 5078else 5079 avx512f_opt="no" 5080fi 5081 5082######################################## 5083# check if __[u]int128_t is usable. 5084 5085int128=no 5086cat > $TMPC << EOF 5087__int128_t a; 5088__uint128_t b; 5089int main (void) { 5090 a = a + b; 5091 b = a * b; 5092 a = a * a; 5093 return 0; 5094} 5095EOF 5096if compile_prog "" "" ; then 5097 int128=yes 5098fi 5099 5100######################################### 5101# See if 128-bit atomic operations are supported. 5102 5103atomic128=no 5104if test "$int128" = "yes"; then 5105 cat > $TMPC << EOF 5106int main(void) 5107{ 5108 unsigned __int128 x = 0, y = 0; 5109 y = __atomic_load_16(&x, 0); 5110 __atomic_store_16(&x, y, 0); 5111 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5112 return 0; 5113} 5114EOF 5115 if compile_prog "" "" ; then 5116 atomic128=yes 5117 fi 5118fi 5119 5120cmpxchg128=no 5121if test "$int128" = yes && test "$atomic128" = no; then 5122 cat > $TMPC << EOF 5123int main(void) 5124{ 5125 unsigned __int128 x = 0, y = 0; 5126 __sync_val_compare_and_swap_16(&x, y, x); 5127 return 0; 5128} 5129EOF 5130 if compile_prog "" "" ; then 5131 cmpxchg128=yes 5132 fi 5133fi 5134 5135######################################### 5136# See if 64-bit atomic operations are supported. 5137# Note that without __atomic builtins, we can only 5138# assume atomic loads/stores max at pointer size. 5139 5140cat > $TMPC << EOF 5141#include <stdint.h> 5142int main(void) 5143{ 5144 uint64_t x = 0, y = 0; 5145#ifdef __ATOMIC_RELAXED 5146 y = __atomic_load_n(&x, __ATOMIC_RELAXED); 5147 __atomic_store_n(&x, y, __ATOMIC_RELAXED); 5148 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED); 5149 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED); 5150 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED); 5151#else 5152 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5153 __sync_lock_test_and_set(&x, y); 5154 __sync_val_compare_and_swap(&x, y, 0); 5155 __sync_fetch_and_add(&x, y); 5156#endif 5157 return 0; 5158} 5159EOF 5160if compile_prog "" "" ; then 5161 atomic64=yes 5162fi 5163 5164######################################### 5165# See if --dynamic-list is supported by the linker 5166ld_dynamic_list="no" 5167if test "$static" = "no" ; then 5168 cat > $TMPTXT <<EOF 5169{ 5170 foo; 5171}; 5172EOF 5173 5174 cat > $TMPC <<EOF 5175#include <stdio.h> 5176void foo(void); 5177 5178void foo(void) 5179{ 5180 printf("foo\n"); 5181} 5182 5183int main(void) 5184{ 5185 foo(); 5186 return 0; 5187} 5188EOF 5189 5190 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 5191 ld_dynamic_list="yes" 5192 fi 5193fi 5194 5195######################################### 5196# See if -exported_symbols_list is supported by the linker 5197 5198ld_exported_symbols_list="no" 5199if test "$static" = "no" ; then 5200 cat > $TMPTXT <<EOF 5201 _foo 5202EOF 5203 5204 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 5205 ld_exported_symbols_list="yes" 5206 fi 5207fi 5208 5209if test "$plugins" = "yes" && 5210 test "$ld_dynamic_list" = "no" && 5211 test "$ld_exported_symbols_list" = "no" ; then 5212 error_exit \ 5213 "Plugin support requires dynamic linking and specifying a set of symbols " \ 5214 "that are exported to plugins. Unfortunately your linker doesn't " \ 5215 "support the flag (--dynamic-list or -exported_symbols_list) used " \ 5216 "for this purpose. You can't build with --static." 5217fi 5218 5219######################################## 5220# See if __attribute__((alias)) is supported. 5221# This false for Xcode 9, but has been remedied for Xcode 10. 5222# Unfortunately, travis uses Xcode 9 by default. 5223 5224attralias=no 5225cat > $TMPC << EOF 5226int x = 1; 5227extern const int y __attribute__((alias("x"))); 5228int main(void) { return 0; } 5229EOF 5230if compile_prog "" "" ; then 5231 attralias=yes 5232fi 5233 5234######################################## 5235# check if getauxval is available. 5236 5237getauxval=no 5238cat > $TMPC << EOF 5239#include <sys/auxv.h> 5240int main(void) { 5241 return getauxval(AT_HWCAP) == 0; 5242} 5243EOF 5244if compile_prog "" "" ; then 5245 getauxval=yes 5246fi 5247 5248######################################## 5249# check if ccache is interfering with 5250# semantic analysis of macros 5251 5252unset CCACHE_CPP2 5253ccache_cpp2=no 5254cat > $TMPC << EOF 5255static const int Z = 1; 5256#define fn() ({ Z; }) 5257#define TAUT(X) ((X) == Z) 5258#define PAREN(X, Y) (X == Y) 5259#define ID(X) (X) 5260int main(int argc, char *argv[]) 5261{ 5262 int x = 0, y = 0; 5263 x = ID(x); 5264 x = fn(); 5265 fn(); 5266 if (PAREN(x, y)) return 0; 5267 if (TAUT(Z)) return 0; 5268 return 0; 5269} 5270EOF 5271 5272if ! compile_object "-Werror"; then 5273 ccache_cpp2=yes 5274fi 5275 5276################################################# 5277# clang does not support glibc + FORTIFY_SOURCE. 5278 5279if test "$fortify_source" != "no"; then 5280 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5281 fortify_source="no"; 5282 elif test -n "$cxx" && has $cxx && 5283 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5284 fortify_source="no"; 5285 else 5286 fortify_source="yes" 5287 fi 5288fi 5289 5290############################################### 5291# Check if copy_file_range is provided by glibc 5292have_copy_file_range=no 5293cat > $TMPC << EOF 5294#include <unistd.h> 5295int main(void) { 5296 copy_file_range(0, NULL, 0, NULL, 0, 0); 5297 return 0; 5298} 5299EOF 5300if compile_prog "" "" ; then 5301 have_copy_file_range=yes 5302fi 5303 5304########################################## 5305# check if struct fsxattr is available via linux/fs.h 5306 5307have_fsxattr=no 5308cat > $TMPC << EOF 5309#include <linux/fs.h> 5310struct fsxattr foo; 5311int main(void) { 5312 return 0; 5313} 5314EOF 5315if compile_prog "" "" ; then 5316 have_fsxattr=yes 5317fi 5318 5319########################################## 5320# check for usable membarrier system call 5321if test "$membarrier" = "yes"; then 5322 have_membarrier=no 5323 if test "$mingw32" = "yes" ; then 5324 have_membarrier=yes 5325 elif test "$linux" = "yes" ; then 5326 cat > $TMPC << EOF 5327 #include <linux/membarrier.h> 5328 #include <sys/syscall.h> 5329 #include <unistd.h> 5330 #include <stdlib.h> 5331 int main(void) { 5332 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5333 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5334 exit(0); 5335 } 5336EOF 5337 if compile_prog "" "" ; then 5338 have_membarrier=yes 5339 fi 5340 fi 5341 if test "$have_membarrier" = "no"; then 5342 feature_not_found "membarrier" "membarrier system call not available" 5343 fi 5344else 5345 # Do not enable it by default even for Mingw32, because it doesn't 5346 # work on Wine. 5347 membarrier=no 5348fi 5349 5350########################################## 5351# check if rtnetlink.h exists and is useful 5352have_rtnetlink=no 5353cat > $TMPC << EOF 5354#include <linux/rtnetlink.h> 5355int main(void) { 5356 return IFLA_PROTO_DOWN; 5357} 5358EOF 5359if compile_prog "" "" ; then 5360 have_rtnetlink=yes 5361fi 5362 5363########################################## 5364# check for usable AF_VSOCK environment 5365have_af_vsock=no 5366cat > $TMPC << EOF 5367#include <errno.h> 5368#include <sys/types.h> 5369#include <sys/socket.h> 5370#if !defined(AF_VSOCK) 5371# error missing AF_VSOCK flag 5372#endif 5373#include <linux/vm_sockets.h> 5374int main(void) { 5375 int sock, ret; 5376 struct sockaddr_vm svm; 5377 socklen_t len = sizeof(svm); 5378 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5379 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5380 if ((ret == -1) && (errno == ENOTCONN)) { 5381 return 0; 5382 } 5383 return -1; 5384} 5385EOF 5386if compile_prog "" "" ; then 5387 have_af_vsock=yes 5388fi 5389 5390########################################## 5391# check for usable AF_ALG environment 5392have_afalg=no 5393cat > $TMPC << EOF 5394#include <errno.h> 5395#include <sys/types.h> 5396#include <sys/socket.h> 5397#include <linux/if_alg.h> 5398int main(void) { 5399 int sock; 5400 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 5401 return sock; 5402} 5403EOF 5404if compile_prog "" "" ; then 5405 have_afalg=yes 5406fi 5407if test "$crypto_afalg" = "yes" 5408then 5409 if test "$have_afalg" != "yes" 5410 then 5411 error_exit "AF_ALG requested but could not be detected" 5412 fi 5413fi 5414 5415 5416################################################# 5417# check for sysmacros.h 5418 5419have_sysmacros=no 5420cat > $TMPC << EOF 5421#include <sys/sysmacros.h> 5422int main(void) { 5423 return makedev(0, 0); 5424} 5425EOF 5426if compile_prog "" "" ; then 5427 have_sysmacros=yes 5428fi 5429 5430########################################## 5431# check for _Static_assert() 5432 5433have_static_assert=no 5434cat > $TMPC << EOF 5435_Static_assert(1, "success"); 5436int main(void) { 5437 return 0; 5438} 5439EOF 5440if compile_prog "" "" ; then 5441 have_static_assert=yes 5442fi 5443 5444########################################## 5445# check for utmpx.h, it is missing e.g. on OpenBSD 5446 5447have_utmpx=no 5448cat > $TMPC << EOF 5449#include <utmpx.h> 5450struct utmpx user_info; 5451int main(void) { 5452 return 0; 5453} 5454EOF 5455if compile_prog "" "" ; then 5456 have_utmpx=yes 5457fi 5458 5459########################################## 5460# check for getrandom() 5461 5462have_getrandom=no 5463cat > $TMPC << EOF 5464#include <sys/random.h> 5465int main(void) { 5466 return getrandom(0, 0, GRND_NONBLOCK); 5467} 5468EOF 5469if compile_prog "" "" ; then 5470 have_getrandom=yes 5471fi 5472 5473########################################## 5474# checks for sanitizers 5475 5476have_asan=no 5477have_ubsan=no 5478have_asan_iface_h=no 5479have_asan_iface_fiber=no 5480 5481if test "$sanitizers" = "yes" ; then 5482 write_c_skeleton 5483 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 5484 have_asan=yes 5485 fi 5486 5487 # we could use a simple skeleton for flags checks, but this also 5488 # detect the static linking issue of ubsan, see also: 5489 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 5490 cat > $TMPC << EOF 5491#include <stdlib.h> 5492int main(void) { 5493 void *tmp = malloc(10); 5494 if (tmp != NULL) { 5495 return *(int *)(tmp + 2); 5496 } 5497 return 1; 5498} 5499EOF 5500 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 5501 have_ubsan=yes 5502 fi 5503 5504 if check_include "sanitizer/asan_interface.h" ; then 5505 have_asan_iface_h=yes 5506 fi 5507 5508 cat > $TMPC << EOF 5509#include <sanitizer/asan_interface.h> 5510int main(void) { 5511 __sanitizer_start_switch_fiber(0, 0, 0); 5512 return 0; 5513} 5514EOF 5515 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 5516 have_asan_iface_fiber=yes 5517 fi 5518fi 5519 5520########################################## 5521# checks for fuzzer 5522if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then 5523 write_c_fuzzer_skeleton 5524 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then 5525 have_fuzzer=yes 5526 else 5527 error_exit "Your compiler doesn't support -fsanitize=fuzzer" 5528 exit 1 5529 fi 5530fi 5531 5532# Thread sanitizer is, for now, much noisier than the other sanitizers; 5533# keep it separate until that is not the case. 5534if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 5535 error_exit "TSAN is not supported with other sanitiziers." 5536fi 5537have_tsan=no 5538have_tsan_iface_fiber=no 5539if test "$tsan" = "yes" ; then 5540 write_c_skeleton 5541 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 5542 have_tsan=yes 5543 fi 5544 cat > $TMPC << EOF 5545#include <sanitizer/tsan_interface.h> 5546int main(void) { 5547 __tsan_create_fiber(0); 5548 return 0; 5549} 5550EOF 5551 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 5552 have_tsan_iface_fiber=yes 5553 fi 5554fi 5555 5556########################################## 5557# check for libpmem 5558 5559if test "$libpmem" != "no"; then 5560 if $pkg_config --exists "libpmem"; then 5561 libpmem="yes" 5562 libpmem_libs=$($pkg_config --libs libpmem) 5563 libpmem_cflags=$($pkg_config --cflags libpmem) 5564 else 5565 if test "$libpmem" = "yes" ; then 5566 feature_not_found "libpmem" "Install nvml or pmdk" 5567 fi 5568 libpmem="no" 5569 fi 5570fi 5571 5572########################################## 5573# check for libdaxctl 5574 5575if test "$libdaxctl" != "no"; then 5576 if $pkg_config --atleast-version=57 "libdaxctl"; then 5577 libdaxctl="yes" 5578 libdaxctl_libs=$($pkg_config --libs libdaxctl) 5579 libdaxctl_cflags=$($pkg_config --cflags libdaxctl) 5580 else 5581 if test "$libdaxctl" = "yes" ; then 5582 feature_not_found "libdaxctl" "Install libdaxctl" 5583 fi 5584 libdaxctl="no" 5585 fi 5586fi 5587 5588########################################## 5589# check for slirp 5590 5591case "$slirp" in 5592 auto | enabled | internal) 5593 # Simpler to always update submodule, even if not needed. 5594 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5595 git_submodules="${git_submodules} slirp" 5596 fi 5597 ;; 5598esac 5599 5600########################################## 5601# check for usable __NR_keyctl syscall 5602 5603if test "$linux" = "yes" ; then 5604 5605 have_keyring=no 5606 cat > $TMPC << EOF 5607#include <errno.h> 5608#include <asm/unistd.h> 5609#include <linux/keyctl.h> 5610#include <unistd.h> 5611int main(void) { 5612 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 5613} 5614EOF 5615 if compile_prog "" "" ; then 5616 have_keyring=yes 5617 fi 5618fi 5619if test "$secret_keyring" != "no" 5620then 5621 if test "$have_keyring" = "yes" 5622 then 5623 secret_keyring=yes 5624 else 5625 if test "$secret_keyring" = "yes" 5626 then 5627 error_exit "syscall __NR_keyctl requested, \ 5628but not implemented on your system" 5629 else 5630 secret_keyring=no 5631 fi 5632 fi 5633fi 5634 5635########################################## 5636# End of CC checks 5637# After here, no more $cc or $ld runs 5638 5639write_c_skeleton 5640 5641if test "$gcov" = "yes" ; then 5642 : 5643elif test "$fortify_source" = "yes" ; then 5644 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" 5645 debug=no 5646fi 5647 5648case "$ARCH" in 5649alpha) 5650 # Ensure there's only a single GP 5651 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" 5652;; 5653esac 5654 5655if test "$gprof" = "yes" ; then 5656 QEMU_CFLAGS="-p $QEMU_CFLAGS" 5657 QEMU_LDFLAGS="-p $QEMU_LDFLAGS" 5658fi 5659 5660if test "$have_asan" = "yes"; then 5661 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 5662 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 5663 if test "$have_asan_iface_h" = "no" ; then 5664 echo "ASAN build enabled, but ASAN header missing." \ 5665 "Without code annotation, the report may be inferior." 5666 elif test "$have_asan_iface_fiber" = "no" ; then 5667 echo "ASAN build enabled, but ASAN header is too old." \ 5668 "Without code annotation, the report may be inferior." 5669 fi 5670fi 5671if test "$have_tsan" = "yes" ; then 5672 if test "$have_tsan_iface_fiber" = "yes" ; then 5673 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 5674 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 5675 else 5676 error_exit "Cannot enable TSAN due to missing fiber annotation interface." 5677 fi 5678elif test "$tsan" = "yes" ; then 5679 error_exit "Cannot enable TSAN due to missing sanitize thread interface." 5680fi 5681if test "$have_ubsan" = "yes"; then 5682 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 5683 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 5684fi 5685 5686########################################## 5687# Do we have libnfs 5688if test "$libnfs" != "no" ; then 5689 if $pkg_config --atleast-version=1.9.3 libnfs; then 5690 libnfs="yes" 5691 libnfs_libs=$($pkg_config --libs libnfs) 5692 else 5693 if test "$libnfs" = "yes" ; then 5694 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 5695 fi 5696 libnfs="no" 5697 fi 5698fi 5699 5700########################################## 5701 5702# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 5703if test "$solaris" = "no" && test "$tsan" = "no"; then 5704 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 5705 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 5706 fi 5707fi 5708 5709# Use ASLR, no-SEH and DEP if available 5710if test "$mingw32" = "yes" ; then 5711 flags="--no-seh --nxcompat" 5712 5713 # Disable ASLR for debug builds to allow debugging with gdb 5714 if test "$debug" = "no" ; then 5715 flags="--dynamicbase $flags" 5716 fi 5717 5718 for flag in $flags; do 5719 if ld_has $flag ; then 5720 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 5721 fi 5722 done 5723fi 5724 5725# We can only support ivshmem if we have eventfd 5726if [ "$eventfd" = "yes" ]; then 5727 ivshmem=yes 5728fi 5729 5730if test "$softmmu" = yes ; then 5731 if test "$linux" = yes; then 5732 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then 5733 virtfs=yes 5734 else 5735 if test "$virtfs" = yes; then 5736 error_exit "VirtFS requires libcap-ng devel and libattr devel" 5737 fi 5738 virtfs=no 5739 fi 5740 else 5741 if test "$virtfs" = yes; then 5742 error_exit "VirtFS is supported only on Linux" 5743 fi 5744 virtfs=no 5745 fi 5746fi 5747 5748# Probe for guest agent support/options 5749 5750if [ "$guest_agent" != "no" ]; then 5751 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 5752 guest_agent=no 5753 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 5754 guest_agent=yes 5755 elif [ "$guest_agent" != yes ]; then 5756 guest_agent=no 5757 else 5758 error_exit "Guest agent is not supported on this platform" 5759 fi 5760fi 5761 5762# Guest agent Window MSI package 5763 5764if test "$guest_agent" != yes; then 5765 if test "$guest_agent_msi" = yes; then 5766 error_exit "MSI guest agent package requires guest agent enabled" 5767 fi 5768 guest_agent_msi=no 5769elif test "$mingw32" != "yes"; then 5770 if test "$guest_agent_msi" = "yes"; then 5771 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 5772 fi 5773 guest_agent_msi=no 5774elif ! has wixl; then 5775 if test "$guest_agent_msi" = "yes"; then 5776 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 5777 fi 5778 guest_agent_msi=no 5779else 5780 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 5781 # disabled explicitly 5782 if test "$guest_agent_msi" != "no"; then 5783 guest_agent_msi=yes 5784 fi 5785fi 5786 5787if test "$guest_agent_msi" = "yes"; then 5788 if test "$guest_agent_with_vss" = "yes"; then 5789 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 5790 fi 5791 5792 if test "$QEMU_GA_MANUFACTURER" = ""; then 5793 QEMU_GA_MANUFACTURER=QEMU 5794 fi 5795 5796 if test "$QEMU_GA_DISTRO" = ""; then 5797 QEMU_GA_DISTRO=Linux 5798 fi 5799 5800 if test "$QEMU_GA_VERSION" = ""; then 5801 QEMU_GA_VERSION=$(cat $source_path/VERSION) 5802 fi 5803 5804 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 5805 5806 case "$cpu" in 5807 x86_64) 5808 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 5809 ;; 5810 i386) 5811 QEMU_GA_MSI_ARCH="-D Arch=32" 5812 ;; 5813 *) 5814 error_exit "CPU $cpu not supported for building installation package" 5815 ;; 5816 esac 5817fi 5818 5819# Mac OS X ships with a broken assembler 5820roms= 5821if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 5822 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 5823 test "$softmmu" = yes ; then 5824 # Different host OS linkers have different ideas about the name of the ELF 5825 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 5826 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 5827 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 5828 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 5829 ld_i386_emulation="$emu" 5830 roms="optionrom" 5831 break 5832 fi 5833 done 5834fi 5835 5836# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 5837if test "$cpu" = "s390x" ; then 5838 write_c_skeleton 5839 if compile_prog "-march=z900" ""; then 5840 roms="$roms s390-ccw" 5841 # SLOF is required for building the s390-ccw firmware on s390x, 5842 # since it is using the libnet code from SLOF for network booting. 5843 if test -e "${source_path}/.git" ; then 5844 git_submodules="${git_submodules} roms/SLOF" 5845 fi 5846 fi 5847fi 5848 5849# Check that the C++ compiler exists and works with the C compiler. 5850# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 5851if has $cxx; then 5852 cat > $TMPC <<EOF 5853int c_function(void); 5854int main(void) { return c_function(); } 5855EOF 5856 5857 compile_object 5858 5859 cat > $TMPCXX <<EOF 5860extern "C" { 5861 int c_function(void); 5862} 5863int c_function(void) { return 42; } 5864EOF 5865 5866 update_cxxflags 5867 5868 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 5869 # C++ compiler $cxx works ok with C compiler $cc 5870 : 5871 else 5872 echo "C++ compiler $cxx does not work with C compiler $cc" 5873 echo "Disabling C++ specific optional code" 5874 cxx= 5875 fi 5876else 5877 echo "No C++ compiler available; disabling C++ specific optional code" 5878 cxx= 5879fi 5880 5881if test $git_update = 'yes' ; then 5882 (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules") 5883fi 5884 5885config_host_mak="config-host.mak" 5886 5887echo "# Automatically generated by configure - do not modify" > $config_host_mak 5888echo >> $config_host_mak 5889 5890echo all: >> $config_host_mak 5891echo "GIT=$git" >> $config_host_mak 5892echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 5893echo "GIT_UPDATE=$git_update" >> $config_host_mak 5894 5895echo "ARCH=$ARCH" >> $config_host_mak 5896 5897if test "$default_devices" = "yes" ; then 5898 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak 5899else 5900 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak 5901fi 5902if test "$debug_tcg" = "yes" ; then 5903 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 5904fi 5905if test "$strip_opt" = "yes" ; then 5906 echo "STRIP=${strip}" >> $config_host_mak 5907fi 5908if test "$bigendian" = "yes" ; then 5909 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 5910fi 5911if test "$mingw32" = "yes" ; then 5912 echo "CONFIG_WIN32=y" >> $config_host_mak 5913 rc_version=$(cat $source_path/VERSION) 5914 version_major=${rc_version%%.*} 5915 rc_version=${rc_version#*.} 5916 version_minor=${rc_version%%.*} 5917 rc_version=${rc_version#*.} 5918 version_subminor=${rc_version%%.*} 5919 version_micro=0 5920 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 5921 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 5922 if test "$guest_agent_with_vss" = "yes" ; then 5923 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 5924 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 5925 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 5926 fi 5927 if test "$guest_agent_ntddscsi" = "yes" ; then 5928 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 5929 fi 5930 if test "$guest_agent_msi" = "yes"; then 5931 echo "CONFIG_QGA_MSI=y" >> $config_host_mak 5932 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 5933 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 5934 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 5935 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 5936 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 5937 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 5938 fi 5939else 5940 echo "CONFIG_POSIX=y" >> $config_host_mak 5941fi 5942 5943if test "$linux" = "yes" ; then 5944 echo "CONFIG_LINUX=y" >> $config_host_mak 5945fi 5946 5947if test "$darwin" = "yes" ; then 5948 echo "CONFIG_DARWIN=y" >> $config_host_mak 5949fi 5950 5951if test "$solaris" = "yes" ; then 5952 echo "CONFIG_SOLARIS=y" >> $config_host_mak 5953fi 5954if test "$haiku" = "yes" ; then 5955 echo "CONFIG_HAIKU=y" >> $config_host_mak 5956fi 5957if test "$static" = "yes" ; then 5958 echo "CONFIG_STATIC=y" >> $config_host_mak 5959fi 5960if test "$profiler" = "yes" ; then 5961 echo "CONFIG_PROFILER=y" >> $config_host_mak 5962fi 5963if test "$want_tools" = "yes" ; then 5964 echo "CONFIG_TOOLS=y" >> $config_host_mak 5965fi 5966if test "$guest_agent" = "yes" ; then 5967 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak 5968fi 5969echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 5970if test "$vde" = "yes" ; then 5971 echo "CONFIG_VDE=y" >> $config_host_mak 5972 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 5973fi 5974if test "$netmap" = "yes" ; then 5975 echo "CONFIG_NETMAP=y" >> $config_host_mak 5976fi 5977if test "$l2tpv3" = "yes" ; then 5978 echo "CONFIG_L2TPV3=y" >> $config_host_mak 5979fi 5980if test "$gprof" = "yes" ; then 5981 echo "CONFIG_GPROF=y" >> $config_host_mak 5982fi 5983if test "$cap_ng" = "yes" ; then 5984 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak 5985 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak 5986fi 5987echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 5988for drv in $audio_drv_list; do 5989 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 5990 echo "$def=y" >> $config_host_mak 5991done 5992if test "$alsa" = "yes" ; then 5993 echo "CONFIG_ALSA=y" >> $config_host_mak 5994fi 5995echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 5996echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak 5997if test "$libpulse" = "yes" ; then 5998 echo "CONFIG_LIBPULSE=y" >> $config_host_mak 5999fi 6000echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6001echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak 6002echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6003echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6004echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6005if test "$libjack" = "yes" ; then 6006 echo "CONFIG_LIBJACK=y" >> $config_host_mak 6007fi 6008echo "JACK_LIBS=$jack_libs" >> $config_host_mak 6009if test "$audio_win_int" = "yes" ; then 6010 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6011fi 6012echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6013echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6014if test "$xfs" = "yes" ; then 6015 echo "CONFIG_XFS=y" >> $config_host_mak 6016fi 6017qemu_version=$(head $source_path/VERSION) 6018echo "PKGVERSION=$pkgversion" >>$config_host_mak 6019echo "SRC_PATH=$source_path" >> $config_host_mak 6020echo "TARGET_DIRS=$target_list" >> $config_host_mak 6021if test "$modules" = "yes"; then 6022 # $shacmd can generate a hash started with digit, which the compiler doesn't 6023 # like as an symbol. So prefix it with an underscore 6024 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6025 echo "CONFIG_MODULES=y" >> $config_host_mak 6026fi 6027if test "$module_upgrades" = "yes"; then 6028 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 6029fi 6030if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then 6031 echo "CONFIG_X11=y" >> $config_host_mak 6032 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6033 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6034fi 6035if test "$pipe2" = "yes" ; then 6036 echo "CONFIG_PIPE2=y" >> $config_host_mak 6037fi 6038if test "$accept4" = "yes" ; then 6039 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 6040fi 6041if test "$splice" = "yes" ; then 6042 echo "CONFIG_SPLICE=y" >> $config_host_mak 6043fi 6044if test "$eventfd" = "yes" ; then 6045 echo "CONFIG_EVENTFD=y" >> $config_host_mak 6046fi 6047if test "$memfd" = "yes" ; then 6048 echo "CONFIG_MEMFD=y" >> $config_host_mak 6049fi 6050if test "$have_usbfs" = "yes" ; then 6051 echo "CONFIG_USBFS=y" >> $config_host_mak 6052fi 6053if test "$fallocate" = "yes" ; then 6054 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6055fi 6056if test "$fallocate_punch_hole" = "yes" ; then 6057 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 6058fi 6059if test "$fallocate_zero_range" = "yes" ; then 6060 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6061fi 6062if test "$posix_fallocate" = "yes" ; then 6063 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6064fi 6065if test "$sync_file_range" = "yes" ; then 6066 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6067fi 6068if test "$fiemap" = "yes" ; then 6069 echo "CONFIG_FIEMAP=y" >> $config_host_mak 6070fi 6071if test "$dup3" = "yes" ; then 6072 echo "CONFIG_DUP3=y" >> $config_host_mak 6073fi 6074if test "$ppoll" = "yes" ; then 6075 echo "CONFIG_PPOLL=y" >> $config_host_mak 6076fi 6077if test "$prctl_pr_set_timerslack" = "yes" ; then 6078 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6079fi 6080if test "$epoll" = "yes" ; then 6081 echo "CONFIG_EPOLL=y" >> $config_host_mak 6082fi 6083if test "$epoll_create1" = "yes" ; then 6084 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 6085fi 6086if test "$sendfile" = "yes" ; then 6087 echo "CONFIG_SENDFILE=y" >> $config_host_mak 6088fi 6089if test "$timerfd" = "yes" ; then 6090 echo "CONFIG_TIMERFD=y" >> $config_host_mak 6091fi 6092if test "$setns" = "yes" ; then 6093 echo "CONFIG_SETNS=y" >> $config_host_mak 6094fi 6095if test "$clock_adjtime" = "yes" ; then 6096 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 6097fi 6098if test "$syncfs" = "yes" ; then 6099 echo "CONFIG_SYNCFS=y" >> $config_host_mak 6100fi 6101if test "$kcov" = "yes" ; then 6102 echo "CONFIG_KCOV=y" >> $config_host_mak 6103fi 6104if test "$btrfs" = "yes" ; then 6105 echo "CONFIG_BTRFS=y" >> $config_host_mak 6106fi 6107if test "$inotify" = "yes" ; then 6108 echo "CONFIG_INOTIFY=y" >> $config_host_mak 6109fi 6110if test "$inotify1" = "yes" ; then 6111 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6112fi 6113if test "$sem_timedwait" = "yes" ; then 6114 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6115fi 6116if test "$strchrnul" = "yes" ; then 6117 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 6118fi 6119if test "$st_atim" = "yes" ; then 6120 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak 6121fi 6122if test "$byteswap_h" = "yes" ; then 6123 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 6124fi 6125if test "$bswap_h" = "yes" ; then 6126 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 6127fi 6128if test "$curl" = "yes" ; then 6129 echo "CONFIG_CURL=y" >> $config_host_mak 6130 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 6131 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6132fi 6133if test "$brlapi" = "yes" ; then 6134 echo "CONFIG_BRLAPI=y" >> $config_host_mak 6135 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 6136fi 6137if test "$gtk" = "yes" ; then 6138 echo "CONFIG_GTK=y" >> $config_host_mak 6139 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6140 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6141 if test "$gtk_gl" = "yes" ; then 6142 echo "CONFIG_GTK_GL=y" >> $config_host_mak 6143 fi 6144fi 6145if test "$gio" = "yes" ; then 6146 echo "CONFIG_GIO=y" >> $config_host_mak 6147 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 6148 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 6149 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 6150fi 6151echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6152if test "$gnutls" = "yes" ; then 6153 echo "CONFIG_GNUTLS=y" >> $config_host_mak 6154 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak 6155 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak 6156fi 6157if test "$gcrypt" = "yes" ; then 6158 echo "CONFIG_GCRYPT=y" >> $config_host_mak 6159 if test "$gcrypt_hmac" = "yes" ; then 6160 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 6161 fi 6162 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak 6163 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak 6164fi 6165if test "$nettle" = "yes" ; then 6166 echo "CONFIG_NETTLE=y" >> $config_host_mak 6167 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6168 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak 6169 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak 6170fi 6171if test "$qemu_private_xts" = "yes" ; then 6172 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak 6173fi 6174if test "$tasn1" = "yes" ; then 6175 echo "CONFIG_TASN1=y" >> $config_host_mak 6176fi 6177if test "$auth_pam" = "yes" ; then 6178 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 6179fi 6180if test "$have_ifaddrs_h" = "yes" ; then 6181 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 6182fi 6183if test "$have_drm_h" = "yes" ; then 6184 echo "HAVE_DRM_H=y" >> $config_host_mak 6185fi 6186if test "$have_broken_size_max" = "yes" ; then 6187 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 6188fi 6189if test "$have_openpty" = "yes" ; then 6190 echo "HAVE_OPENPTY=y" >> $config_host_mak 6191fi 6192if test "$have_sys_signal_h" = "yes" ; then 6193 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak 6194fi 6195 6196# Work around a system header bug with some kernel/XFS header 6197# versions where they both try to define 'struct fsxattr': 6198# xfs headers will not try to redefine structs from linux headers 6199# if this macro is set. 6200if test "$have_fsxattr" = "yes" ; then 6201 echo "HAVE_FSXATTR=y" >> $config_host_mak 6202fi 6203if test "$have_copy_file_range" = "yes" ; then 6204 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 6205fi 6206if test "$vte" = "yes" ; then 6207 echo "CONFIG_VTE=y" >> $config_host_mak 6208 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 6209 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 6210fi 6211if test "$virglrenderer" = "yes" ; then 6212 echo "CONFIG_VIRGL=y" >> $config_host_mak 6213 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 6214 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 6215fi 6216if test "$xen" = "enabled" ; then 6217 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 6218 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 6219 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak 6220 echo "XEN_LIBS=$xen_libs" >> $config_host_mak 6221fi 6222if test "$linux_aio" = "yes" ; then 6223 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 6224fi 6225if test "$linux_io_uring" = "yes" ; then 6226 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak 6227 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak 6228 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak 6229fi 6230if test "$attr" = "yes" ; then 6231 echo "CONFIG_ATTR=y" >> $config_host_mak 6232 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak 6233fi 6234if test "$libattr" = "yes" ; then 6235 echo "CONFIG_LIBATTR=y" >> $config_host_mak 6236fi 6237if test "$virtfs" = "yes" ; then 6238 echo "CONFIG_VIRTFS=y" >> $config_host_mak 6239fi 6240if test "$vhost_scsi" = "yes" ; then 6241 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 6242fi 6243if test "$vhost_net" = "yes" ; then 6244 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 6245fi 6246if test "$vhost_net_user" = "yes" ; then 6247 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 6248fi 6249if test "$vhost_net_vdpa" = "yes" ; then 6250 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 6251fi 6252if test "$vhost_crypto" = "yes" ; then 6253 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 6254fi 6255if test "$vhost_vsock" = "yes" ; then 6256 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 6257 if test "$vhost_user" = "yes" ; then 6258 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 6259 fi 6260fi 6261if test "$vhost_kernel" = "yes" ; then 6262 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 6263fi 6264if test "$vhost_user" = "yes" ; then 6265 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 6266fi 6267if test "$vhost_vdpa" = "yes" ; then 6268 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 6269fi 6270if test "$vhost_user_fs" = "yes" ; then 6271 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 6272fi 6273if test "$iovec" = "yes" ; then 6274 echo "CONFIG_IOVEC=y" >> $config_host_mak 6275fi 6276if test "$preadv" = "yes" ; then 6277 echo "CONFIG_PREADV=y" >> $config_host_mak 6278fi 6279if test "$membarrier" = "yes" ; then 6280 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 6281fi 6282if test "$signalfd" = "yes" ; then 6283 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 6284fi 6285if test "$optreset" = "yes" ; then 6286 echo "HAVE_OPTRESET=y" >> $config_host_mak 6287fi 6288if test "$tcg" = "enabled"; then 6289 if test "$tcg_interpreter" = "yes" ; then 6290 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 6291 fi 6292fi 6293if test "$fdatasync" = "yes" ; then 6294 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 6295fi 6296if test "$madvise" = "yes" ; then 6297 echo "CONFIG_MADVISE=y" >> $config_host_mak 6298fi 6299if test "$posix_madvise" = "yes" ; then 6300 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 6301fi 6302if test "$posix_memalign" = "yes" ; then 6303 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 6304fi 6305if test "$spice" = "yes" ; then 6306 echo "CONFIG_SPICE=y" >> $config_host_mak 6307 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak 6308 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak 6309fi 6310 6311if test "$smartcard" = "yes" ; then 6312 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 6313 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 6314 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 6315fi 6316 6317if test "$libusb" = "yes" ; then 6318 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 6319 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 6320 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 6321fi 6322 6323if test "$usb_redir" = "yes" ; then 6324 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 6325 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 6326 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 6327fi 6328 6329if test "$opengl" = "yes" ; then 6330 echo "CONFIG_OPENGL=y" >> $config_host_mak 6331 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak 6332 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 6333 if test "$opengl_dmabuf" = "yes" ; then 6334 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 6335 fi 6336fi 6337 6338if test "$gbm" = "yes" ; then 6339 echo "CONFIG_GBM=y" >> $config_host_mak 6340 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 6341 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 6342fi 6343 6344 6345if test "$avx2_opt" = "yes" ; then 6346 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 6347fi 6348 6349if test "$avx512f_opt" = "yes" ; then 6350 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 6351fi 6352 6353if test "$lzo" = "yes" ; then 6354 echo "CONFIG_LZO=y" >> $config_host_mak 6355 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak 6356fi 6357 6358if test "$snappy" = "yes" ; then 6359 echo "CONFIG_SNAPPY=y" >> $config_host_mak 6360 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak 6361fi 6362 6363if test "$bzip2" = "yes" ; then 6364 echo "CONFIG_BZIP2=y" >> $config_host_mak 6365 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 6366fi 6367 6368if test "$lzfse" = "yes" ; then 6369 echo "CONFIG_LZFSE=y" >> $config_host_mak 6370 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak 6371fi 6372 6373if test "$zstd" = "yes" ; then 6374 echo "CONFIG_ZSTD=y" >> $config_host_mak 6375 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak 6376 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak 6377fi 6378 6379if test "$libiscsi" = "yes" ; then 6380 echo "CONFIG_LIBISCSI=y" >> $config_host_mak 6381 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 6382 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 6383fi 6384 6385if test "$libnfs" = "yes" ; then 6386 echo "CONFIG_LIBNFS=y" >> $config_host_mak 6387 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 6388fi 6389 6390if test "$seccomp" = "yes"; then 6391 echo "CONFIG_SECCOMP=y" >> $config_host_mak 6392 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 6393 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 6394fi 6395 6396# XXX: suppress that 6397if [ "$bsd" = "yes" ] ; then 6398 echo "CONFIG_BSD=y" >> $config_host_mak 6399fi 6400 6401if test "$qom_cast_debug" = "yes" ; then 6402 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 6403fi 6404if test "$rbd" = "yes" ; then 6405 echo "CONFIG_RBD=y" >> $config_host_mak 6406 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 6407fi 6408 6409echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 6410if test "$coroutine_pool" = "yes" ; then 6411 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 6412else 6413 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 6414fi 6415 6416if test "$debug_stack_usage" = "yes" ; then 6417 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 6418fi 6419 6420if test "$crypto_afalg" = "yes" ; then 6421 echo "CONFIG_AF_ALG=y" >> $config_host_mak 6422fi 6423 6424if test "$open_by_handle_at" = "yes" ; then 6425 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 6426fi 6427 6428if test "$linux_magic_h" = "yes" ; then 6429 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 6430fi 6431 6432if test "$valgrind_h" = "yes" ; then 6433 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 6434fi 6435 6436if test "$have_asan_iface_fiber" = "yes" ; then 6437 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 6438fi 6439 6440if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 6441 echo "CONFIG_TSAN=y" >> $config_host_mak 6442fi 6443 6444if test "$has_environ" = "yes" ; then 6445 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 6446fi 6447 6448if test "$cpuid_h" = "yes" ; then 6449 echo "CONFIG_CPUID_H=y" >> $config_host_mak 6450fi 6451 6452if test "$int128" = "yes" ; then 6453 echo "CONFIG_INT128=y" >> $config_host_mak 6454fi 6455 6456if test "$atomic128" = "yes" ; then 6457 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 6458fi 6459 6460if test "$cmpxchg128" = "yes" ; then 6461 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 6462fi 6463 6464if test "$atomic64" = "yes" ; then 6465 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 6466fi 6467 6468if test "$attralias" = "yes" ; then 6469 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak 6470fi 6471 6472if test "$getauxval" = "yes" ; then 6473 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 6474fi 6475 6476if test "$glusterfs" = "yes" ; then 6477 echo "CONFIG_GLUSTERFS=y" >> $config_host_mak 6478 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 6479 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 6480fi 6481 6482if test "$glusterfs_xlator_opt" = "yes" ; then 6483 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 6484fi 6485 6486if test "$glusterfs_discard" = "yes" ; then 6487 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 6488fi 6489 6490if test "$glusterfs_fallocate" = "yes" ; then 6491 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 6492fi 6493 6494if test "$glusterfs_zerofill" = "yes" ; then 6495 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 6496fi 6497 6498if test "$glusterfs_ftruncate_has_stat" = "yes" ; then 6499 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak 6500fi 6501 6502if test "$glusterfs_iocb_has_stat" = "yes" ; then 6503 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak 6504fi 6505 6506if test "$libssh" = "yes" ; then 6507 echo "CONFIG_LIBSSH=y" >> $config_host_mak 6508 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 6509 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 6510fi 6511 6512if test "$live_block_migration" = "yes" ; then 6513 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 6514fi 6515 6516if test "$tpm" = "yes"; then 6517 echo 'CONFIG_TPM=y' >> $config_host_mak 6518fi 6519 6520echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 6521if have_backend "nop"; then 6522 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 6523fi 6524if have_backend "simple"; then 6525 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 6526 # Set the appropriate trace file. 6527 trace_file="\"$trace_file-\" FMT_pid" 6528fi 6529if have_backend "log"; then 6530 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 6531fi 6532if have_backend "ust"; then 6533 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 6534 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak 6535 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak 6536fi 6537if have_backend "dtrace"; then 6538 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 6539 if test "$trace_backend_stap" = "yes" ; then 6540 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 6541 fi 6542fi 6543if have_backend "ftrace"; then 6544 if test "$linux" = "yes" ; then 6545 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 6546 else 6547 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 6548 fi 6549fi 6550if have_backend "syslog"; then 6551 if test "$posix_syslog" = "yes" ; then 6552 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 6553 else 6554 feature_not_found "syslog(trace backend)" "syslog not available" 6555 fi 6556fi 6557echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 6558 6559if test "$rdma" = "yes" ; then 6560 echo "CONFIG_RDMA=y" >> $config_host_mak 6561 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 6562fi 6563 6564if test "$pvrdma" = "yes" ; then 6565 echo "CONFIG_PVRDMA=y" >> $config_host_mak 6566fi 6567 6568if test "$have_rtnetlink" = "yes" ; then 6569 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 6570fi 6571 6572if test "$libxml2" = "yes" ; then 6573 echo "CONFIG_LIBXML2=y" >> $config_host_mak 6574 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 6575 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 6576fi 6577 6578if test "$replication" = "yes" ; then 6579 echo "CONFIG_REPLICATION=y" >> $config_host_mak 6580fi 6581 6582if test "$have_af_vsock" = "yes" ; then 6583 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 6584fi 6585 6586if test "$have_sysmacros" = "yes" ; then 6587 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 6588fi 6589 6590if test "$have_static_assert" = "yes" ; then 6591 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 6592fi 6593 6594if test "$have_utmpx" = "yes" ; then 6595 echo "HAVE_UTMPX=y" >> $config_host_mak 6596fi 6597if test "$have_getrandom" = "yes" ; then 6598 echo "CONFIG_GETRANDOM=y" >> $config_host_mak 6599fi 6600if test "$ivshmem" = "yes" ; then 6601 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 6602fi 6603if test "$debug_mutex" = "yes" ; then 6604 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 6605fi 6606 6607# Hold two types of flag: 6608# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 6609# a thread we have a handle to 6610# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 6611# platform 6612if test "$pthread_setname_np_w_tid" = "yes" ; then 6613 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6614 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 6615elif test "$pthread_setname_np_wo_tid" = "yes" ; then 6616 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6617 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 6618fi 6619 6620if test "$libpmem" = "yes" ; then 6621 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 6622 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak 6623 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak 6624fi 6625 6626if test "$libdaxctl" = "yes" ; then 6627 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak 6628 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak 6629fi 6630 6631if test "$bochs" = "yes" ; then 6632 echo "CONFIG_BOCHS=y" >> $config_host_mak 6633fi 6634if test "$cloop" = "yes" ; then 6635 echo "CONFIG_CLOOP=y" >> $config_host_mak 6636fi 6637if test "$dmg" = "yes" ; then 6638 echo "CONFIG_DMG=y" >> $config_host_mak 6639fi 6640if test "$qcow1" = "yes" ; then 6641 echo "CONFIG_QCOW1=y" >> $config_host_mak 6642fi 6643if test "$vdi" = "yes" ; then 6644 echo "CONFIG_VDI=y" >> $config_host_mak 6645fi 6646if test "$vvfat" = "yes" ; then 6647 echo "CONFIG_VVFAT=y" >> $config_host_mak 6648fi 6649if test "$qed" = "yes" ; then 6650 echo "CONFIG_QED=y" >> $config_host_mak 6651fi 6652if test "$parallels" = "yes" ; then 6653 echo "CONFIG_PARALLELS=y" >> $config_host_mak 6654fi 6655if test "$sheepdog" = "yes" ; then 6656 add_to deprecated_features "sheepdog" 6657 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 6658fi 6659if test "$pty_h" = "yes" ; then 6660 echo "HAVE_PTY_H=y" >> $config_host_mak 6661fi 6662if test "$have_mlockall" = "yes" ; then 6663 echo "HAVE_MLOCKALL=y" >> $config_host_mak 6664fi 6665if test "$fuzzing" = "yes" ; then 6666 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the 6667 # needed CFLAGS have already been provided 6668 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then 6669 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link" 6670 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer" 6671 else 6672 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE" 6673 fi 6674fi 6675 6676if test "$plugins" = "yes" ; then 6677 echo "CONFIG_PLUGIN=y" >> $config_host_mak 6678 # Copy the export object list to the build dir 6679 if test "$ld_dynamic_list" = "yes" ; then 6680 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 6681 ld_symbols=qemu-plugins-ld.symbols 6682 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 6683 elif test "$ld_exported_symbols_list" = "yes" ; then 6684 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 6685 ld64_symbols=qemu-plugins-ld64.symbols 6686 echo "# Automatically generated by configure - do not modify" > $ld64_symbols 6687 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 6688 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 6689 else 6690 error_exit \ 6691 "If \$plugins=yes, either \$ld_dynamic_list or " \ 6692 "\$ld_exported_symbols_list should have been set to 'yes'." 6693 fi 6694fi 6695 6696if test -n "$gdb_bin" ; then 6697 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 6698fi 6699 6700if test "$secret_keyring" = "yes" ; then 6701 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 6702fi 6703 6704echo "ROMS=$roms" >> $config_host_mak 6705echo "MAKE=$make" >> $config_host_mak 6706echo "PYTHON=$python" >> $config_host_mak 6707echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 6708echo "MESON=$meson" >> $config_host_mak 6709echo "NINJA=$ninja" >> $config_host_mak 6710echo "CC=$cc" >> $config_host_mak 6711if $iasl -h > /dev/null 2>&1; then 6712 echo "CONFIG_IASL=$iasl" >> $config_host_mak 6713fi 6714echo "CXX=$cxx" >> $config_host_mak 6715echo "OBJCC=$objcc" >> $config_host_mak 6716echo "AR=$ar" >> $config_host_mak 6717echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 6718echo "AS=$as" >> $config_host_mak 6719echo "CCAS=$ccas" >> $config_host_mak 6720echo "CPP=$cpp" >> $config_host_mak 6721echo "OBJCOPY=$objcopy" >> $config_host_mak 6722echo "LD=$ld" >> $config_host_mak 6723echo "RANLIB=$ranlib" >> $config_host_mak 6724echo "NM=$nm" >> $config_host_mak 6725echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 6726echo "WINDRES=$windres" >> $config_host_mak 6727echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 6728echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 6729echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 6730echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 6731echo "GLIB_LIBS=$glib_libs" >> $config_host_mak 6732echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 6733echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 6734echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 6735echo "EXESUF=$EXESUF" >> $config_host_mak 6736echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak 6737echo "LIBS_QGA=$libs_qga" >> $config_host_mak 6738echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 6739echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 6740if test "$gcov" = "yes" ; then 6741 echo "CONFIG_GCOV=y" >> $config_host_mak 6742fi 6743 6744if test "$fuzzing" != "no"; then 6745 echo "CONFIG_FUZZ=y" >> $config_host_mak 6746fi 6747echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak 6748 6749if test "$rng_none" = "yes"; then 6750 echo "CONFIG_RNG_NONE=y" >> $config_host_mak 6751fi 6752 6753# use included Linux headers 6754if test "$linux" = "yes" ; then 6755 mkdir -p linux-headers 6756 case "$cpu" in 6757 i386|x86_64|x32) 6758 linux_arch=x86 6759 ;; 6760 ppc|ppc64|ppc64le) 6761 linux_arch=powerpc 6762 ;; 6763 s390x) 6764 linux_arch=s390 6765 ;; 6766 aarch64) 6767 linux_arch=arm64 6768 ;; 6769 mips64) 6770 linux_arch=mips 6771 ;; 6772 *) 6773 # For most CPUs the kernel architecture name and QEMU CPU name match. 6774 linux_arch="$cpu" 6775 ;; 6776 esac 6777 # For non-KVM architectures we will not have asm headers 6778 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 6779 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 6780 fi 6781fi 6782 6783for target in $target_list; do 6784 target_dir="$target" 6785 target_name=$(echo $target | cut -d '-' -f 1) 6786 mkdir -p $target_dir 6787 case $target in 6788 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;; 6789 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;; 6790 esac 6791done 6792 6793echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak 6794if test "$default_targets" = "yes"; then 6795 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak 6796fi 6797 6798if test "$numa" = "yes"; then 6799 echo "CONFIG_NUMA=y" >> $config_host_mak 6800 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak 6801fi 6802 6803if test "$ccache_cpp2" = "yes"; then 6804 echo "export CCACHE_CPP2=y" >> $config_host_mak 6805fi 6806 6807if test "$safe_stack" = "yes"; then 6808 echo "CONFIG_SAFESTACK=y" >> $config_host_mak 6809fi 6810 6811# If we're using a separate build tree, set it up now. 6812# DIRS are directories which we simply mkdir in the build tree; 6813# LINKS are things to symlink back into the source tree 6814# (these can be both files and directories). 6815# Caution: do not add files or directories here using wildcards. This 6816# will result in problems later if a new file matching the wildcard is 6817# added to the source tree -- nothing will cause configure to be rerun 6818# so the build tree will be missing the link back to the new file, and 6819# tests might fail. Prefer to keep the relevant files in their own 6820# directory and symlink the directory instead. 6821# UNLINK is used to remove symlinks from older development versions 6822# that might get into the way when doing "git update" without doing 6823# a "make distclean" in between. 6824DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" 6825DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 6826DIRS="$DIRS docs docs/interop fsdev scsi" 6827DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 6828DIRS="$DIRS roms/seabios" 6829DIRS="$DIRS contrib/plugins/" 6830LINKS="Makefile" 6831LINKS="$LINKS tests/tcg/lm32/Makefile" 6832LINKS="$LINKS tests/tcg/Makefile.target" 6833LINKS="$LINKS pc-bios/optionrom/Makefile" 6834LINKS="$LINKS pc-bios/s390-ccw/Makefile" 6835LINKS="$LINKS roms/seabios/Makefile" 6836LINKS="$LINKS pc-bios/qemu-icon.bmp" 6837LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 6838LINKS="$LINKS tests/acceptance tests/data" 6839LINKS="$LINKS tests/qemu-iotests/check" 6840LINKS="$LINKS python" 6841LINKS="$LINKS contrib/plugins/Makefile " 6842UNLINK="pc-bios/keymaps" 6843for bios_file in \ 6844 $source_path/pc-bios/*.bin \ 6845 $source_path/pc-bios/*.elf \ 6846 $source_path/pc-bios/*.lid \ 6847 $source_path/pc-bios/*.rom \ 6848 $source_path/pc-bios/*.dtb \ 6849 $source_path/pc-bios/*.img \ 6850 $source_path/pc-bios/openbios-* \ 6851 $source_path/pc-bios/u-boot.* \ 6852 $source_path/pc-bios/edk2-*.fd.bz2 \ 6853 $source_path/pc-bios/palcode-* 6854do 6855 LINKS="$LINKS pc-bios/$(basename $bios_file)" 6856done 6857mkdir -p $DIRS 6858for f in $LINKS ; do 6859 if [ -e "$source_path/$f" ]; then 6860 symlink "$source_path/$f" "$f" 6861 fi 6862done 6863for f in $UNLINK ; do 6864 if [ -L "$f" ]; then 6865 rm -f "$f" 6866 fi 6867done 6868 6869(for i in $cross_cc_vars; do 6870 export $i 6871done 6872export target_list source_path use_containers 6873$source_path/tests/tcg/configure.sh) 6874 6875# temporary config to build submodules 6876for rom in seabios; do 6877 config_mak=roms/$rom/config.mak 6878 echo "# Automatically generated by configure - do not modify" > $config_mak 6879 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 6880 echo "AS=$as" >> $config_mak 6881 echo "CCAS=$ccas" >> $config_mak 6882 echo "CC=$cc" >> $config_mak 6883 echo "BCC=bcc" >> $config_mak 6884 echo "CPP=$cpp" >> $config_mak 6885 echo "OBJCOPY=objcopy" >> $config_mak 6886 echo "IASL=$iasl" >> $config_mak 6887 echo "LD=$ld" >> $config_mak 6888 echo "RANLIB=$ranlib" >> $config_mak 6889done 6890 6891# set up qemu-iotests in this build directory 6892iotests_common_env="tests/qemu-iotests/common.env" 6893 6894echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 6895echo >> "$iotests_common_env" 6896echo "export PYTHON='$python'" >> "$iotests_common_env" 6897 6898if test "$skip_meson" = no; then 6899cross="config-meson.cross.new" 6900meson_quote() { 6901 echo "'$(echo $* | sed "s/ /','/g")'" 6902} 6903 6904echo "# Automatically generated by configure - do not modify" > $cross 6905echo "[properties]" >> $cross 6906test -z "$cxx" && echo "link_language = 'c'" >> $cross 6907echo "[built-in options]" >> $cross 6908echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross 6909echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross 6910echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross 6911echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross 6912echo "[binaries]" >> $cross 6913echo "c = [$(meson_quote $cc)]" >> $cross 6914test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross 6915echo "ar = [$(meson_quote $ar)]" >> $cross 6916echo "nm = [$(meson_quote $nm)]" >> $cross 6917echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross 6918echo "ranlib = [$(meson_quote $ranlib)]" >> $cross 6919if has $sdl2_config; then 6920 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross 6921fi 6922echo "strip = [$(meson_quote $strip)]" >> $cross 6923echo "windres = [$(meson_quote $windres)]" >> $cross 6924if test -n "$cross_prefix"; then 6925 cross_arg="--cross-file config-meson.cross" 6926 echo "[host_machine]" >> $cross 6927 if test "$mingw32" = "yes" ; then 6928 echo "system = 'windows'" >> $cross 6929 fi 6930 if test "$linux" = "yes" ; then 6931 echo "system = 'linux'" >> $cross 6932 fi 6933 case "$ARCH" in 6934 i386|x86_64) 6935 echo "cpu_family = 'x86'" >> $cross 6936 ;; 6937 ppc64le) 6938 echo "cpu_family = 'ppc64'" >> $cross 6939 ;; 6940 *) 6941 echo "cpu_family = '$ARCH'" >> $cross 6942 ;; 6943 esac 6944 echo "cpu = '$cpu'" >> $cross 6945 if test "$bigendian" = "yes" ; then 6946 echo "endian = 'big'" >> $cross 6947 else 6948 echo "endian = 'little'" >> $cross 6949 fi 6950else 6951 cross_arg="--native-file config-meson.cross" 6952fi 6953mv $cross config-meson.cross 6954 6955rm -rf meson-private meson-info meson-logs 6956NINJA=$ninja $meson setup \ 6957 --prefix "$prefix" \ 6958 --libdir "$libdir" \ 6959 --libexecdir "$libexecdir" \ 6960 --bindir "$bindir" \ 6961 --includedir "$includedir" \ 6962 --datadir "$datadir" \ 6963 --mandir "$mandir" \ 6964 --sysconfdir "$sysconfdir" \ 6965 --localedir "$localedir" \ 6966 --localstatedir "$local_statedir" \ 6967 -Ddocdir="$docdir" \ 6968 -Dqemu_firmwarepath="$firmwarepath" \ 6969 -Dqemu_suffix="$qemu_suffix" \ 6970 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ 6971 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ 6972 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ 6973 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \ 6974 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ 6975 -Db_staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi) \ 6976 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ 6977 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \ 6978 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \ 6979 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \ 6980 -Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \ 6981 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \ 6982 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \ 6983 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \ 6984 -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\ 6985 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \ 6986 $cross_arg \ 6987 "$PWD" "$source_path" 6988 6989if test "$?" -ne 0 ; then 6990 error_exit "meson setup failed" 6991fi 6992fi 6993 6994if test -n "${deprecated_features}"; then 6995 echo "Warning, deprecated features enabled." 6996 echo "Please see docs/system/deprecated.rst" 6997 echo " features: ${deprecated_features}" 6998fi 6999 7000# Save the configure command line for later reuse. 7001cat <<EOD >config.status 7002#!/bin/sh 7003# Generated by configure. 7004# Run this file to recreate the current configuration. 7005# Compiler output produced by configure, useful for debugging 7006# configure, is in config.log if it exists. 7007EOD 7008 7009preserve_env() { 7010 envname=$1 7011 7012 eval envval=\$$envname 7013 7014 if test -n "$envval" 7015 then 7016 echo "$envname='$envval'" >> config.status 7017 echo "export $envname" >> config.status 7018 else 7019 echo "unset $envname" >> config.status 7020 fi 7021} 7022 7023# Preserve various env variables that influence what 7024# features/build target configure will detect 7025preserve_env AR 7026preserve_env AS 7027preserve_env CC 7028preserve_env CPP 7029preserve_env CXX 7030preserve_env INSTALL 7031preserve_env LD 7032preserve_env LD_LIBRARY_PATH 7033preserve_env LIBTOOL 7034preserve_env MAKE 7035preserve_env NM 7036preserve_env OBJCOPY 7037preserve_env PATH 7038preserve_env PKG_CONFIG 7039preserve_env PKG_CONFIG_LIBDIR 7040preserve_env PKG_CONFIG_PATH 7041preserve_env PYTHON 7042preserve_env SDL2_CONFIG 7043preserve_env SMBD 7044preserve_env STRIP 7045preserve_env WINDRES 7046 7047printf "exec" >>config.status 7048for i in "$0" "$@"; do 7049 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status 7050done 7051echo ' "$@"' >>config.status 7052chmod +x config.status 7053 7054rm -r "$TMPDIR1" 7055