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