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