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