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