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