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