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