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