1#!/bin/sh 2# 3# qemu configure script (c) 2003 Fabrice Bellard 4# 5 6# Unset some variables known to interfere with behavior of common tools, 7# just as autoconf does. 8CLICOLOR_FORCE= GREP_OPTIONS= 9unset CLICOLOR_FORCE GREP_OPTIONS 10 11# Don't allow CCACHE, if present, to use cached results of compile tests! 12export CCACHE_RECACHE=yes 13 14# make source path absolute 15source_path=$(cd "$(dirname -- "$0")"; pwd) 16 17if test "$PWD" = "$source_path" 18then 19 echo "Using './build' as the directory for build output" 20 21 MARKER=build/auto-created-by-configure 22 23 if test -e build 24 then 25 if test -f $MARKER 26 then 27 rm -rf build 28 else 29 echo "ERROR: ./build dir already exists and was not previously created by configure" 30 exit 1 31 fi 32 fi 33 34 mkdir build 35 touch $MARKER 36 37 cat > GNUmakefile <<'EOF' 38# This file is auto-generated by configure to support in-source tree 39# 'make' command invocation 40 41ifeq ($(MAKECMDGOALS),) 42recurse: all 43endif 44 45.NOTPARALLEL: % 46%: force 47 @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...' 48 @$(MAKE) -C build -f Makefile $(MAKECMDGOALS) 49 @if test "$(MAKECMDGOALS)" = "distclean" && \ 50 test -e build/auto-created-by-configure ; \ 51 then \ 52 rm -rf build GNUmakefile ; \ 53 fi 54force: ; 55.PHONY: force 56GNUmakefile: ; 57 58EOF 59 cd build 60 exec $source_path/configure "$@" 61fi 62 63# Temporary directory used for files created while 64# configure runs. Since it is in the build directory 65# we can safely blow away any previous version of it 66# (and we need not jump through hoops to try to delete 67# it when configure exits.) 68TMPDIR1="config-temp" 69rm -rf "${TMPDIR1}" 70mkdir -p "${TMPDIR1}" 71if [ $? -ne 0 ]; then 72 echo "ERROR: failed to create temporary directory" 73 exit 1 74fi 75 76TMPB="qemu-conf" 77TMPC="${TMPDIR1}/${TMPB}.c" 78TMPO="${TMPDIR1}/${TMPB}.o" 79TMPCXX="${TMPDIR1}/${TMPB}.cxx" 80TMPE="${TMPDIR1}/${TMPB}.exe" 81TMPTXT="${TMPDIR1}/${TMPB}.txt" 82 83rm -f config.log 84 85# Print a helpful header at the top of config.log 86echo "# QEMU configure log $(date)" >> config.log 87printf "# Configured with:" >> config.log 88printf " '%s'" "$0" "$@" >> config.log 89echo >> config.log 90echo "#" >> config.log 91 92quote_sh() { 93 printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&'," 94} 95 96print_error() { 97 (echo 98 echo "ERROR: $1" 99 while test -n "$2"; do 100 echo " $2" 101 shift 102 done 103 echo) >&2 104} 105 106error_exit() { 107 print_error "$@" 108 exit 1 109} 110 111do_compiler() { 112 # Run the compiler, capturing its output to the log. First argument 113 # is compiler binary to execute. 114 compiler="$1" 115 shift 116 if test -n "$BASH_VERSION"; then eval ' 117 echo >>config.log " 118funcs: ${FUNCNAME[*]} 119lines: ${BASH_LINENO[*]}" 120 '; fi 121 echo $compiler "$@" >> config.log 122 $compiler "$@" >> config.log 2>&1 || return $? 123 # Test passed. If this is an --enable-werror build, rerun 124 # the test with -Werror and bail out if it fails. This 125 # makes warning-generating-errors in configure test code 126 # obvious to developers. 127 if test "$werror" != "yes"; then 128 return 0 129 fi 130 # Don't bother rerunning the compile if we were already using -Werror 131 case "$*" in 132 *-Werror*) 133 return 0 134 ;; 135 esac 136 echo $compiler -Werror "$@" >> config.log 137 $compiler -Werror "$@" >> config.log 2>&1 && return $? 138 error_exit "configure test passed without -Werror but failed with -Werror." \ 139 "This is probably a bug in the configure script. The failing command" \ 140 "will be at the bottom of config.log." \ 141 "You can run configure with --disable-werror to bypass this check." 142} 143 144do_cc() { 145 do_compiler "$cc" "$@" 146} 147 148do_cxx() { 149 do_compiler "$cxx" "$@" 150} 151 152# Append $2 to the variable named $1, with space separation 153add_to() { 154 eval $1=\${$1:+\"\$$1 \"}\$2 155} 156 157update_cxxflags() { 158 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those 159 # options which some versions of GCC's C++ compiler complain about 160 # because they only make sense for C programs. 161 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS" 162 CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu11/-std=gnu++11/) 163 for arg in $QEMU_CFLAGS; do 164 case $arg in 165 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\ 166 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls) 167 ;; 168 *) 169 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg 170 ;; 171 esac 172 done 173} 174 175compile_object() { 176 local_cflags="$1" 177 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC 178} 179 180compile_prog() { 181 local_cflags="$1" 182 local_ldflags="$2" 183 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \ 184 $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags 185} 186 187# symbolically link $1 to $2. Portable version of "ln -sf". 188symlink() { 189 rm -rf "$2" 190 mkdir -p "$(dirname "$2")" 191 ln -s "$1" "$2" 192} 193 194# check whether a command is available to this shell (may be either an 195# executable or a builtin) 196has() { 197 type "$1" >/dev/null 2>&1 198} 199 200version_ge () { 201 local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ') 202 local_ver2=$(echo "$2" | tr . ' ') 203 while true; do 204 set x $local_ver1 205 local_first=${2-0} 206 # 'shift 2' if $2 is set, or 'shift' if $2 is not set 207 shift ${2:+2} 208 local_ver1=$* 209 set x $local_ver2 210 # the second argument finished, the first must be greater or equal 211 test $# = 1 && return 0 212 test $local_first -lt $2 && return 1 213 test $local_first -gt $2 && return 0 214 shift ${2:+2} 215 local_ver2=$* 216 done 217} 218 219have_backend () { 220 echo "$trace_backends" | grep "$1" >/dev/null 221} 222 223glob() { 224 eval test -z '"${1#'"$2"'}"' 225} 226 227ld_has() { 228 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1 229} 230 231if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]"; 232then 233 error_exit "main directory cannot contain spaces nor colons" 234fi 235 236# default parameters 237cpu="" 238iasl="iasl" 239interp_prefix="/usr/gnemul/qemu-%M" 240static="no" 241cross_compile="no" 242cross_prefix="" 243audio_drv_list="" 244block_drv_rw_whitelist="" 245block_drv_ro_whitelist="" 246host_cc="cc" 247audio_win_int="" 248libs_qga="" 249debug_info="yes" 250lto="false" 251stack_protector="" 252safe_stack="" 253use_containers="yes" 254gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb") 255 256if test -e "$source_path/.git" 257then 258 git_submodules_action="update" 259else 260 git_submodules_action="ignore" 261fi 262 263git_submodules="ui/keycodemapdb" 264git="git" 265 266# Don't accept a target_list environment variable. 267unset target_list 268unset target_list_exclude 269 270# Default value for a variable defining feature "foo". 271# * foo="no" feature will only be used if --enable-foo arg is given 272# * foo="" feature will be searched for, and if found, will be used 273# unless --disable-foo is given 274# * foo="yes" this value will only be set by --enable-foo flag. 275# feature will searched for, 276# if not found, configure exits with error 277# 278# Always add --enable-foo and --disable-foo command line args. 279# Distributions want to ensure that several features are compiled in, and it 280# is impossible without a --enable-foo that exits if a feature is not found. 281 282default_feature="" 283# parse CC options second 284for opt do 285 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 286 case "$opt" in 287 --without-default-features) 288 default_feature="no" 289 ;; 290 esac 291done 292 293brlapi="auto" 294curl="auto" 295iconv="auto" 296curses="auto" 297docs="auto" 298fdt="auto" 299netmap="no" 300sdl="auto" 301sdl_image="auto" 302coreaudio="auto" 303virtiofsd="auto" 304virtfs="auto" 305libudev="auto" 306mpath="auto" 307vnc="enabled" 308sparse="auto" 309vde="$default_feature" 310vnc_sasl="auto" 311vnc_jpeg="auto" 312vnc_png="auto" 313xkbcommon="auto" 314xen="$default_feature" 315xen_ctrl_version="$default_feature" 316xen_pci_passthrough="auto" 317linux_aio="$default_feature" 318linux_io_uring="auto" 319cap_ng="auto" 320attr="auto" 321xfs="$default_feature" 322tcg="enabled" 323membarrier="$default_feature" 324vhost_net="$default_feature" 325vhost_crypto="$default_feature" 326vhost_scsi="$default_feature" 327vhost_vsock="$default_feature" 328vhost_user="no" 329vhost_user_blk_server="auto" 330vhost_user_fs="$default_feature" 331bpf="auto" 332kvm="auto" 333hax="auto" 334hvf="auto" 335whpx="auto" 336nvmm="auto" 337rdma="$default_feature" 338pvrdma="$default_feature" 339gprof="no" 340debug_tcg="no" 341debug="no" 342sanitizers="no" 343tsan="no" 344fortify_source="$default_feature" 345strip_opt="yes" 346tcg_interpreter="false" 347bigendian="no" 348mingw32="no" 349gcov="no" 350EXESUF="" 351HOST_DSOSUF=".so" 352modules="no" 353module_upgrades="no" 354prefix="/usr/local" 355qemu_suffix="qemu" 356slirp="auto" 357oss_lib="" 358bsd="no" 359linux="no" 360solaris="no" 361profiler="no" 362cocoa="auto" 363softmmu="yes" 364linux_user="no" 365bsd_user="no" 366blobs="true" 367pkgversion="" 368pie="" 369qom_cast_debug="yes" 370trace_backends="log" 371trace_file="trace" 372spice="$default_feature" 373spice_protocol="auto" 374rbd="auto" 375smartcard="auto" 376u2f="auto" 377libusb="auto" 378usb_redir="auto" 379opengl="$default_feature" 380cpuid_h="no" 381avx2_opt="$default_feature" 382capstone="auto" 383lzo="auto" 384snappy="auto" 385bzip2="auto" 386lzfse="auto" 387zstd="auto" 388guest_agent="$default_feature" 389guest_agent_with_vss="no" 390guest_agent_ntddscsi="no" 391guest_agent_msi="auto" 392vss_win32_sdk="$default_feature" 393win_sdk="no" 394want_tools="$default_feature" 395libiscsi="auto" 396libnfs="auto" 397coroutine="" 398coroutine_pool="$default_feature" 399debug_stack_usage="no" 400crypto_afalg="no" 401cfi="false" 402cfi_debug="false" 403seccomp="auto" 404glusterfs="auto" 405gtk="auto" 406tls_priority="NORMAL" 407gnutls="auto" 408nettle="auto" 409gcrypt="auto" 410auth_pam="auto" 411vte="auto" 412virglrenderer="auto" 413tpm="$default_feature" 414libssh="$default_feature" 415live_block_migration=${default_feature:-yes} 416numa="$default_feature" 417tcmalloc="no" 418jemalloc="no" 419replication=${default_feature:-yes} 420bochs=${default_feature:-yes} 421cloop=${default_feature:-yes} 422dmg=${default_feature:-yes} 423qcow1=${default_feature:-yes} 424vdi=${default_feature:-yes} 425vvfat=${default_feature:-yes} 426qed=${default_feature:-yes} 427parallels=${default_feature:-yes} 428libxml2="auto" 429debug_mutex="no" 430libpmem="auto" 431default_devices="true" 432plugins="no" 433fuzzing="no" 434rng_none="no" 435secret_keyring="$default_feature" 436libdaxctl="auto" 437meson="" 438ninja="" 439skip_meson=no 440gettext="auto" 441fuse="auto" 442fuse_lseek="auto" 443multiprocess="auto" 444slirp_smbd="$default_feature" 445 446malloc_trim="auto" 447gio="$default_feature" 448 449# parse CC options second 450for opt do 451 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 452 case "$opt" in 453 --cross-prefix=*) cross_prefix="$optarg" 454 cross_compile="yes" 455 ;; 456 --cc=*) CC="$optarg" 457 ;; 458 --cxx=*) CXX="$optarg" 459 ;; 460 --cpu=*) cpu="$optarg" 461 ;; 462 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg" 463 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" 464 ;; 465 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg" 466 ;; 467 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" 468 EXTRA_LDFLAGS="$optarg" 469 ;; 470 --enable-debug-info) debug_info="yes" 471 ;; 472 --disable-debug-info) debug_info="no" 473 ;; 474 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" 475 ;; 476 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*} 477 eval "cross_cc_cflags_${cc_arch}=\$optarg" 478 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}" 479 ;; 480 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} 481 cc_archs="$cc_archs $cc_arch" 482 eval "cross_cc_${cc_arch}=\$optarg" 483 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}" 484 ;; 485 esac 486done 487# OS specific 488# Using uname is really, really broken. Once we have the right set of checks 489# we can eliminate its usage altogether. 490 491# Preferred compiler: 492# ${CC} (if set) 493# ${cross_prefix}gcc (if cross-prefix specified) 494# system compiler 495if test -z "${CC}${cross_prefix}"; then 496 cc="$host_cc" 497else 498 cc="${CC-${cross_prefix}gcc}" 499fi 500 501if test -z "${CXX}${cross_prefix}"; then 502 cxx="c++" 503else 504 cxx="${CXX-${cross_prefix}g++}" 505fi 506 507ar="${AR-${cross_prefix}ar}" 508as="${AS-${cross_prefix}as}" 509ccas="${CCAS-$cc}" 510cpp="${CPP-$cc -E}" 511objcopy="${OBJCOPY-${cross_prefix}objcopy}" 512ld="${LD-${cross_prefix}ld}" 513ranlib="${RANLIB-${cross_prefix}ranlib}" 514nm="${NM-${cross_prefix}nm}" 515strip="${STRIP-${cross_prefix}strip}" 516windres="${WINDRES-${cross_prefix}windres}" 517pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}" 518query_pkg_config() { 519 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@" 520} 521pkg_config=query_pkg_config 522sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}" 523 524# 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="disabled" 1209 ;; 1210 --enable-linux-io-uring) linux_io_uring="enabled" 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="disabled" 1423 ;; 1424 --enable-libxml2) libxml2="enabled" 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=disabled 1508 ;; 1509 --disable-libpmem) libpmem=enabled 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=disabled 1538 ;; 1539 --disable-libdaxctl) libdaxctl=enabled 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########################################## 3339# TPM emulation is only on POSIX 3340 3341if test "$tpm" = ""; then 3342 if test "$mingw32" = "yes"; then 3343 tpm=no 3344 else 3345 tpm=yes 3346 fi 3347elif test "$tpm" = "yes"; then 3348 if test "$mingw32" = "yes" ; then 3349 error_exit "TPM emulation only available on POSIX systems" 3350 fi 3351fi 3352 3353########################################## 3354# iovec probe 3355cat > $TMPC <<EOF 3356#include <sys/types.h> 3357#include <sys/uio.h> 3358#include <unistd.h> 3359int main(void) { return sizeof(struct iovec); } 3360EOF 3361iovec=no 3362if compile_prog "" "" ; then 3363 iovec=yes 3364fi 3365 3366########################################## 3367# fdt probe 3368 3369case "$fdt" in 3370 auto | enabled | internal) 3371 # Simpler to always update submodule, even if not needed. 3372 git_submodules="${git_submodules} dtc" 3373 ;; 3374esac 3375 3376########################################## 3377# opengl probe (for sdl2, gtk) 3378 3379gbm="no" 3380if $pkg_config gbm; then 3381 gbm_cflags="$($pkg_config --cflags gbm)" 3382 gbm_libs="$($pkg_config --libs gbm)" 3383 gbm="yes" 3384fi 3385 3386if test "$opengl" != "no" ; then 3387 epoxy=no 3388 if $pkg_config epoxy; then 3389 cat > $TMPC << EOF 3390#include <epoxy/egl.h> 3391int main(void) { return 0; } 3392EOF 3393 if compile_prog "" "" ; then 3394 epoxy=yes 3395 fi 3396 fi 3397 3398 if test "$epoxy" = "yes" ; then 3399 opengl_cflags="$($pkg_config --cflags epoxy)" 3400 opengl_libs="$($pkg_config --libs epoxy)" 3401 opengl=yes 3402 else 3403 if test "$opengl" = "yes" ; then 3404 feature_not_found "opengl" "Please install epoxy with EGL" 3405 fi 3406 opengl_cflags="" 3407 opengl_libs="" 3408 opengl=no 3409 fi 3410fi 3411 3412# Check for inotify functions when we are building linux-user 3413# emulator. This is done because older glibc versions don't 3414# have syscall stubs for these implemented. In that case we 3415# don't provide them even if kernel supports them. 3416# 3417inotify=no 3418cat > $TMPC << EOF 3419#include <sys/inotify.h> 3420 3421int 3422main(void) 3423{ 3424 /* try to start inotify */ 3425 return inotify_init(); 3426} 3427EOF 3428if compile_prog "" "" ; then 3429 inotify=yes 3430fi 3431 3432inotify1=no 3433cat > $TMPC << EOF 3434#include <sys/inotify.h> 3435 3436int 3437main(void) 3438{ 3439 /* try to start inotify */ 3440 return inotify_init1(0); 3441} 3442EOF 3443if compile_prog "" "" ; then 3444 inotify1=yes 3445fi 3446 3447# check if pipe2 is there 3448pipe2=no 3449cat > $TMPC << EOF 3450#include <unistd.h> 3451#include <fcntl.h> 3452 3453int main(void) 3454{ 3455 int pipefd[2]; 3456 return pipe2(pipefd, O_CLOEXEC); 3457} 3458EOF 3459if compile_prog "" "" ; then 3460 pipe2=yes 3461fi 3462 3463# check if accept4 is there 3464accept4=no 3465cat > $TMPC << EOF 3466#include <sys/socket.h> 3467#include <stddef.h> 3468 3469int main(void) 3470{ 3471 accept4(0, NULL, NULL, SOCK_CLOEXEC); 3472 return 0; 3473} 3474EOF 3475if compile_prog "" "" ; then 3476 accept4=yes 3477fi 3478 3479# check if tee/splice is there. vmsplice was added same time. 3480splice=no 3481cat > $TMPC << EOF 3482#include <unistd.h> 3483#include <fcntl.h> 3484#include <limits.h> 3485 3486int main(void) 3487{ 3488 int len, fd = 0; 3489 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 3490 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 3491 return 0; 3492} 3493EOF 3494if compile_prog "" "" ; then 3495 splice=yes 3496fi 3497 3498########################################## 3499# libnuma probe 3500 3501if test "$numa" != "no" ; then 3502 cat > $TMPC << EOF 3503#include <numa.h> 3504int main(void) { return numa_available(); } 3505EOF 3506 3507 if compile_prog "" "-lnuma" ; then 3508 numa=yes 3509 numa_libs="-lnuma" 3510 else 3511 if test "$numa" = "yes" ; then 3512 feature_not_found "numa" "install numactl devel" 3513 fi 3514 numa=no 3515 fi 3516fi 3517 3518malloc=system 3519if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 3520 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 3521 exit 1 3522elif test "$tcmalloc" = "yes" ; then 3523 malloc=tcmalloc 3524elif test "$jemalloc" = "yes" ; then 3525 malloc=jemalloc 3526fi 3527 3528########################################## 3529# signalfd probe 3530signalfd="no" 3531cat > $TMPC << EOF 3532#include <unistd.h> 3533#include <sys/syscall.h> 3534#include <signal.h> 3535int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 3536EOF 3537 3538if compile_prog "" "" ; then 3539 signalfd=yes 3540fi 3541 3542# check if optreset global is declared by <getopt.h> 3543optreset="no" 3544cat > $TMPC << EOF 3545#include <getopt.h> 3546int main(void) { return optreset; } 3547EOF 3548 3549if compile_prog "" "" ; then 3550 optreset=yes 3551fi 3552 3553# check if eventfd is supported 3554eventfd=no 3555cat > $TMPC << EOF 3556#include <sys/eventfd.h> 3557 3558int main(void) 3559{ 3560 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 3561} 3562EOF 3563if compile_prog "" "" ; then 3564 eventfd=yes 3565fi 3566 3567# check if memfd is supported 3568memfd=no 3569cat > $TMPC << EOF 3570#include <sys/mman.h> 3571 3572int main(void) 3573{ 3574 return memfd_create("foo", MFD_ALLOW_SEALING); 3575} 3576EOF 3577if compile_prog "" "" ; then 3578 memfd=yes 3579fi 3580 3581# check for usbfs 3582have_usbfs=no 3583if test "$linux_user" = "yes"; then 3584 cat > $TMPC << EOF 3585#include <linux/usbdevice_fs.h> 3586 3587#ifndef USBDEVFS_GET_CAPABILITIES 3588#error "USBDEVFS_GET_CAPABILITIES undefined" 3589#endif 3590 3591#ifndef USBDEVFS_DISCONNECT_CLAIM 3592#error "USBDEVFS_DISCONNECT_CLAIM undefined" 3593#endif 3594 3595int main(void) 3596{ 3597 return 0; 3598} 3599EOF 3600 if compile_prog "" ""; then 3601 have_usbfs=yes 3602 fi 3603fi 3604 3605# check for fallocate 3606fallocate=no 3607cat > $TMPC << EOF 3608#include <fcntl.h> 3609 3610int main(void) 3611{ 3612 fallocate(0, 0, 0, 0); 3613 return 0; 3614} 3615EOF 3616if compile_prog "" "" ; then 3617 fallocate=yes 3618fi 3619 3620# check for fallocate hole punching 3621fallocate_punch_hole=no 3622cat > $TMPC << EOF 3623#include <fcntl.h> 3624#include <linux/falloc.h> 3625 3626int main(void) 3627{ 3628 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 3629 return 0; 3630} 3631EOF 3632if compile_prog "" "" ; then 3633 fallocate_punch_hole=yes 3634fi 3635 3636# check that fallocate supports range zeroing inside the file 3637fallocate_zero_range=no 3638cat > $TMPC << EOF 3639#include <fcntl.h> 3640#include <linux/falloc.h> 3641 3642int main(void) 3643{ 3644 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 3645 return 0; 3646} 3647EOF 3648if compile_prog "" "" ; then 3649 fallocate_zero_range=yes 3650fi 3651 3652# check for posix_fallocate 3653posix_fallocate=no 3654cat > $TMPC << EOF 3655#include <fcntl.h> 3656 3657int main(void) 3658{ 3659 posix_fallocate(0, 0, 0); 3660 return 0; 3661} 3662EOF 3663if compile_prog "" "" ; then 3664 posix_fallocate=yes 3665fi 3666 3667# check for sync_file_range 3668sync_file_range=no 3669cat > $TMPC << EOF 3670#include <fcntl.h> 3671 3672int main(void) 3673{ 3674 sync_file_range(0, 0, 0, 0); 3675 return 0; 3676} 3677EOF 3678if compile_prog "" "" ; then 3679 sync_file_range=yes 3680fi 3681 3682# check for linux/fiemap.h and FS_IOC_FIEMAP 3683fiemap=no 3684cat > $TMPC << EOF 3685#include <sys/ioctl.h> 3686#include <linux/fs.h> 3687#include <linux/fiemap.h> 3688 3689int main(void) 3690{ 3691 ioctl(0, FS_IOC_FIEMAP, 0); 3692 return 0; 3693} 3694EOF 3695if compile_prog "" "" ; then 3696 fiemap=yes 3697fi 3698 3699# check for dup3 3700dup3=no 3701cat > $TMPC << EOF 3702#include <unistd.h> 3703 3704int main(void) 3705{ 3706 dup3(0, 0, 0); 3707 return 0; 3708} 3709EOF 3710if compile_prog "" "" ; then 3711 dup3=yes 3712fi 3713 3714# check for ppoll support 3715ppoll=no 3716cat > $TMPC << EOF 3717#include <poll.h> 3718 3719int main(void) 3720{ 3721 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 3722 ppoll(&pfd, 1, 0, 0); 3723 return 0; 3724} 3725EOF 3726if compile_prog "" "" ; then 3727 ppoll=yes 3728fi 3729 3730# check for prctl(PR_SET_TIMERSLACK , ... ) support 3731prctl_pr_set_timerslack=no 3732cat > $TMPC << EOF 3733#include <sys/prctl.h> 3734 3735int main(void) 3736{ 3737 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 3738 return 0; 3739} 3740EOF 3741if compile_prog "" "" ; then 3742 prctl_pr_set_timerslack=yes 3743fi 3744 3745# check for epoll support 3746epoll=no 3747cat > $TMPC << EOF 3748#include <sys/epoll.h> 3749 3750int main(void) 3751{ 3752 epoll_create(0); 3753 return 0; 3754} 3755EOF 3756if compile_prog "" "" ; then 3757 epoll=yes 3758fi 3759 3760# epoll_create1 is a later addition 3761# so we must check separately for its presence 3762epoll_create1=no 3763cat > $TMPC << EOF 3764#include <sys/epoll.h> 3765 3766int main(void) 3767{ 3768 /* Note that we use epoll_create1 as a value, not as 3769 * a function being called. This is necessary so that on 3770 * old SPARC glibc versions where the function was present in 3771 * the library but not declared in the header file we will 3772 * fail the configure check. (Otherwise we will get a compiler 3773 * warning but not an error, and will proceed to fail the 3774 * qemu compile where we compile with -Werror.) 3775 */ 3776 return (int)(uintptr_t)&epoll_create1; 3777} 3778EOF 3779if compile_prog "" "" ; then 3780 epoll_create1=yes 3781fi 3782 3783# check for sendfile support 3784sendfile=no 3785cat > $TMPC << EOF 3786#include <sys/sendfile.h> 3787 3788int main(void) 3789{ 3790 return sendfile(0, 0, 0, 0); 3791} 3792EOF 3793if compile_prog "" "" ; then 3794 sendfile=yes 3795fi 3796 3797# check for timerfd support (glibc 2.8 and newer) 3798timerfd=no 3799cat > $TMPC << EOF 3800#include <sys/timerfd.h> 3801 3802int main(void) 3803{ 3804 return(timerfd_create(CLOCK_REALTIME, 0)); 3805} 3806EOF 3807if compile_prog "" "" ; then 3808 timerfd=yes 3809fi 3810 3811# check for setns and unshare support 3812setns=no 3813cat > $TMPC << EOF 3814#include <sched.h> 3815 3816int main(void) 3817{ 3818 int ret; 3819 ret = setns(0, 0); 3820 ret = unshare(0); 3821 return ret; 3822} 3823EOF 3824if compile_prog "" "" ; then 3825 setns=yes 3826fi 3827 3828# clock_adjtime probe 3829clock_adjtime=no 3830cat > $TMPC <<EOF 3831#include <time.h> 3832#include <sys/timex.h> 3833 3834int main(void) 3835{ 3836 return clock_adjtime(0, 0); 3837} 3838EOF 3839clock_adjtime=no 3840if compile_prog "" "" ; then 3841 clock_adjtime=yes 3842fi 3843 3844# syncfs probe 3845syncfs=no 3846cat > $TMPC <<EOF 3847#include <unistd.h> 3848 3849int main(void) 3850{ 3851 return syncfs(0); 3852} 3853EOF 3854syncfs=no 3855if compile_prog "" "" ; then 3856 syncfs=yes 3857fi 3858 3859# Search for bswap_32 function 3860byteswap_h=no 3861cat > $TMPC << EOF 3862#include <byteswap.h> 3863int main(void) { return bswap_32(0); } 3864EOF 3865if compile_prog "" "" ; then 3866 byteswap_h=yes 3867fi 3868 3869# Search for bswap32 function 3870bswap_h=no 3871cat > $TMPC << EOF 3872#include <sys/endian.h> 3873#include <sys/types.h> 3874#include <machine/bswap.h> 3875int main(void) { return bswap32(0); } 3876EOF 3877if compile_prog "" "" ; then 3878 bswap_h=yes 3879fi 3880 3881# Check whether we have openpty() in either libc or libutil 3882cat > $TMPC << EOF 3883extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 3884int main(void) { return openpty(0, 0, 0, 0, 0); } 3885EOF 3886 3887have_openpty="no" 3888if compile_prog "" "" ; then 3889 have_openpty="yes" 3890else 3891 if compile_prog "" "-lutil" ; then 3892 have_openpty="yes" 3893 fi 3894fi 3895 3896########################################## 3897# spice probe 3898if test "$spice_protocol" != "no" ; then 3899 spice_protocol_cflags=$($pkg_config --cflags spice-protocol 2>/dev/null) 3900 if $pkg_config --atleast-version=0.12.3 spice-protocol; then 3901 spice_protocol="yes" 3902 else 3903 if test "$spice_protocol" = "yes" ; then 3904 feature_not_found "spice_protocol" \ 3905 "Install spice-protocol(>=0.12.3) devel" 3906 fi 3907 spice_protocol="no" 3908 fi 3909fi 3910 3911if test "$spice" != "no" ; then 3912 cat > $TMPC << EOF 3913#include <spice.h> 3914int main(void) { spice_server_new(); return 0; } 3915EOF 3916 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 3917 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 3918 if $pkg_config --atleast-version=0.12.5 spice-server && \ 3919 test "$spice_protocol" = "yes" && \ 3920 compile_prog "$spice_cflags" "$spice_libs" ; then 3921 spice="yes" 3922 else 3923 if test "$spice" = "yes" ; then 3924 feature_not_found "spice" \ 3925 "Install spice-server(>=0.12.5) devel" 3926 fi 3927 spice="no" 3928 fi 3929fi 3930 3931########################################## 3932# check if we have VSS SDK headers for win 3933 3934if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 3935 test "$vss_win32_sdk" != "no" ; then 3936 case "$vss_win32_sdk" in 3937 "") vss_win32_include="-isystem $source_path" ;; 3938 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 3939 # handle path with spaces. So we symlink the headers into ".sdk/vss". 3940 vss_win32_include="-isystem $source_path/.sdk/vss" 3941 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 3942 ;; 3943 *) vss_win32_include="-isystem $vss_win32_sdk" 3944 esac 3945 cat > $TMPC << EOF 3946#define __MIDL_user_allocate_free_DEFINED__ 3947#include <inc/win2003/vss.h> 3948int main(void) { return VSS_CTX_BACKUP; } 3949EOF 3950 if compile_prog "$vss_win32_include" "" ; then 3951 guest_agent_with_vss="yes" 3952 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 3953 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 3954 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 3955 else 3956 if test "$vss_win32_sdk" != "" ; then 3957 echo "ERROR: Please download and install Microsoft VSS SDK:" 3958 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 3959 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 3960 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 3961 echo "ERROR: The headers are extracted in the directory \`inc'." 3962 feature_not_found "VSS support" 3963 fi 3964 guest_agent_with_vss="no" 3965 fi 3966fi 3967 3968########################################## 3969# lookup Windows platform SDK (if not specified) 3970# The SDK is needed only to build .tlb (type library) file of guest agent 3971# VSS provider from the source. It is usually unnecessary because the 3972# pre-compiled .tlb file is included. 3973 3974if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 3975 test "$guest_agent_with_vss" = "yes" ; then 3976 if test -z "$win_sdk"; then 3977 programfiles="$PROGRAMFILES" 3978 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 3979 if test -n "$programfiles"; then 3980 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 3981 else 3982 feature_not_found "Windows SDK" 3983 fi 3984 elif test "$win_sdk" = "no"; then 3985 win_sdk="" 3986 fi 3987fi 3988 3989########################################## 3990# check if mingw environment provides a recent ntddscsi.h 3991if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 3992 cat > $TMPC << EOF 3993#include <windows.h> 3994#include <ntddscsi.h> 3995int main(void) { 3996#if !defined(IOCTL_SCSI_GET_ADDRESS) 3997#error Missing required ioctl definitions 3998#endif 3999 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4000 return addr.Lun; 4001} 4002EOF 4003 if compile_prog "" "" ; then 4004 guest_agent_ntddscsi=yes 4005 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 4006 fi 4007fi 4008 4009########################################## 4010# capstone 4011 4012case "$capstone" in 4013 auto | enabled | internal) 4014 # Simpler to always update submodule, even if not needed. 4015 git_submodules="${git_submodules} capstone" 4016 ;; 4017esac 4018 4019########################################## 4020# check if we have fdatasync 4021 4022fdatasync=no 4023cat > $TMPC << EOF 4024#include <unistd.h> 4025int main(void) { 4026#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4027return fdatasync(0); 4028#else 4029#error Not supported 4030#endif 4031} 4032EOF 4033if compile_prog "" "" ; then 4034 fdatasync=yes 4035fi 4036 4037########################################## 4038# check if we have madvise 4039 4040madvise=no 4041cat > $TMPC << EOF 4042#include <sys/types.h> 4043#include <sys/mman.h> 4044#include <stddef.h> 4045int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4046EOF 4047if compile_prog "" "" ; then 4048 madvise=yes 4049fi 4050 4051########################################## 4052# check if we have posix_madvise 4053 4054posix_madvise=no 4055cat > $TMPC << EOF 4056#include <sys/mman.h> 4057#include <stddef.h> 4058int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4059EOF 4060if compile_prog "" "" ; then 4061 posix_madvise=yes 4062fi 4063 4064########################################## 4065# check if we have posix_memalign() 4066 4067posix_memalign=no 4068cat > $TMPC << EOF 4069#include <stdlib.h> 4070int main(void) { 4071 void *p; 4072 return posix_memalign(&p, 8, 8); 4073} 4074EOF 4075if compile_prog "" "" ; then 4076 posix_memalign=yes 4077fi 4078 4079########################################## 4080# check if we have posix_syslog 4081 4082posix_syslog=no 4083cat > $TMPC << EOF 4084#include <syslog.h> 4085int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 4086EOF 4087if compile_prog "" "" ; then 4088 posix_syslog=yes 4089fi 4090 4091########################################## 4092# check if we have sem_timedwait 4093 4094sem_timedwait=no 4095cat > $TMPC << EOF 4096#include <semaphore.h> 4097int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 4098EOF 4099if compile_prog "" "" ; then 4100 sem_timedwait=yes 4101fi 4102 4103########################################## 4104# check if we have strchrnul 4105 4106strchrnul=no 4107cat > $TMPC << EOF 4108#include <string.h> 4109int main(void); 4110// Use a haystack that the compiler shouldn't be able to constant fold 4111char *haystack = (char*)&main; 4112int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 4113EOF 4114if compile_prog "" "" ; then 4115 strchrnul=yes 4116fi 4117 4118######################################### 4119# check if we have st_atim 4120 4121st_atim=no 4122cat > $TMPC << EOF 4123#include <sys/stat.h> 4124#include <stddef.h> 4125int main(void) { return offsetof(struct stat, st_atim); } 4126EOF 4127if compile_prog "" "" ; then 4128 st_atim=yes 4129fi 4130 4131########################################## 4132# check if we have sigev_notify_thread_id 4133 4134sigev_notify_thread_id=no 4135cat > $TMPC << EOF 4136#include <stddef.h> 4137#include <signal.h> 4138int main(void) { return offsetof(struct sigevent, sigev_notify_thread_id); } 4139EOF 4140if compile_prog "" "" ; then 4141 sigev_notify_thread_id=yes 4142fi 4143 4144########################################## 4145# check if trace backend exists 4146 4147$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4148if test "$?" -ne 0 ; then 4149 error_exit "invalid trace backends" \ 4150 "Please choose supported trace backends." 4151fi 4152 4153########################################## 4154# For 'ust' backend, test if ust headers are present 4155if have_backend "ust"; then 4156 cat > $TMPC << EOF 4157#include <lttng/tracepoint.h> 4158int main(void) { return 0; } 4159EOF 4160 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 4161 if $pkg_config lttng-ust --exists; then 4162 lttng_ust_libs=$($pkg_config --libs lttng-ust) 4163 else 4164 lttng_ust_libs="-llttng-ust -ldl" 4165 fi 4166 if $pkg_config liburcu-bp --exists; then 4167 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 4168 else 4169 urcu_bp_libs="-lurcu-bp" 4170 fi 4171 else 4172 error_exit "Trace backend 'ust' missing lttng-ust header files" 4173 fi 4174fi 4175 4176########################################## 4177# For 'dtrace' backend, test if 'dtrace' command is present 4178if have_backend "dtrace"; then 4179 if ! has 'dtrace' ; then 4180 error_exit "dtrace command is not found in PATH $PATH" 4181 fi 4182 trace_backend_stap="no" 4183 if has 'stap' ; then 4184 trace_backend_stap="yes" 4185 4186 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol 4187 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility 4188 # instead. QEMU --enable-modules depends on this because the SystemTap 4189 # semaphores are linked into the main binary and not the module's shared 4190 # object. 4191 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2" 4192 fi 4193fi 4194 4195########################################## 4196# check and set a backend for coroutine 4197 4198# We prefer ucontext, but it's not always possible. The fallback 4199# is sigcontext. On Windows the only valid backend is the Windows 4200# specific one. 4201 4202ucontext_works=no 4203if test "$darwin" != "yes"; then 4204 cat > $TMPC << EOF 4205#include <ucontext.h> 4206#ifdef __stub_makecontext 4207#error Ignoring glibc stub makecontext which will always fail 4208#endif 4209int main(void) { makecontext(0, 0, 0); return 0; } 4210EOF 4211 if compile_prog "" "" ; then 4212 ucontext_works=yes 4213 fi 4214fi 4215 4216if test "$coroutine" = ""; then 4217 if test "$mingw32" = "yes"; then 4218 coroutine=win32 4219 elif test "$ucontext_works" = "yes"; then 4220 coroutine=ucontext 4221 else 4222 coroutine=sigaltstack 4223 fi 4224else 4225 case $coroutine in 4226 windows) 4227 if test "$mingw32" != "yes"; then 4228 error_exit "'windows' coroutine backend only valid for Windows" 4229 fi 4230 # Unfortunately the user visible backend name doesn't match the 4231 # coroutine-*.c filename for this case, so we have to adjust it here. 4232 coroutine=win32 4233 ;; 4234 ucontext) 4235 if test "$ucontext_works" != "yes"; then 4236 feature_not_found "ucontext" 4237 fi 4238 ;; 4239 sigaltstack) 4240 if test "$mingw32" = "yes"; then 4241 error_exit "only the 'windows' coroutine backend is valid for Windows" 4242 fi 4243 ;; 4244 *) 4245 error_exit "unknown coroutine backend $coroutine" 4246 ;; 4247 esac 4248fi 4249 4250if test "$coroutine_pool" = ""; then 4251 coroutine_pool=yes 4252fi 4253 4254if test "$debug_stack_usage" = "yes"; then 4255 if test "$coroutine_pool" = "yes"; then 4256 echo "WARN: disabling coroutine pool for stack usage debugging" 4257 coroutine_pool=no 4258 fi 4259fi 4260 4261################################################## 4262# SafeStack 4263 4264 4265if test "$safe_stack" = "yes"; then 4266cat > $TMPC << EOF 4267int main(int argc, char *argv[]) 4268{ 4269#if ! __has_feature(safe_stack) 4270#error SafeStack Disabled 4271#endif 4272 return 0; 4273} 4274EOF 4275 flag="-fsanitize=safe-stack" 4276 # Check that safe-stack is supported and enabled. 4277 if compile_prog "-Werror $flag" "$flag"; then 4278 # Flag needed both at compilation and at linking 4279 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 4280 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 4281 else 4282 error_exit "SafeStack not supported by your compiler" 4283 fi 4284 if test "$coroutine" != "ucontext"; then 4285 error_exit "SafeStack is only supported by the coroutine backend ucontext" 4286 fi 4287else 4288cat > $TMPC << EOF 4289int main(int argc, char *argv[]) 4290{ 4291#if defined(__has_feature) 4292#if __has_feature(safe_stack) 4293#error SafeStack Enabled 4294#endif 4295#endif 4296 return 0; 4297} 4298EOF 4299if test "$safe_stack" = "no"; then 4300 # Make sure that safe-stack is disabled 4301 if ! compile_prog "-Werror" ""; then 4302 # SafeStack was already enabled, try to explicitly remove the feature 4303 flag="-fno-sanitize=safe-stack" 4304 if ! compile_prog "-Werror $flag" "$flag"; then 4305 error_exit "Configure cannot disable SafeStack" 4306 fi 4307 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 4308 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 4309 fi 4310else # "$safe_stack" = "" 4311 # Set safe_stack to yes or no based on pre-existing flags 4312 if compile_prog "-Werror" ""; then 4313 safe_stack="no" 4314 else 4315 safe_stack="yes" 4316 if test "$coroutine" != "ucontext"; then 4317 error_exit "SafeStack is only supported by the coroutine backend ucontext" 4318 fi 4319 fi 4320fi 4321fi 4322 4323########################################## 4324# check if we have open_by_handle_at 4325 4326open_by_handle_at=no 4327cat > $TMPC << EOF 4328#include <fcntl.h> 4329#if !defined(AT_EMPTY_PATH) 4330# error missing definition 4331#else 4332int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 4333#endif 4334EOF 4335if compile_prog "" "" ; then 4336 open_by_handle_at=yes 4337fi 4338 4339######################################## 4340# check if we have linux/magic.h 4341 4342linux_magic_h=no 4343cat > $TMPC << EOF 4344#include <linux/magic.h> 4345int main(void) { 4346 return 0; 4347} 4348EOF 4349if compile_prog "" "" ; then 4350 linux_magic_h=yes 4351fi 4352 4353######################################## 4354# check if we have valgrind/valgrind.h 4355 4356valgrind_h=no 4357cat > $TMPC << EOF 4358#include <valgrind/valgrind.h> 4359int main(void) { 4360 return 0; 4361} 4362EOF 4363if compile_prog "" "" ; then 4364 valgrind_h=yes 4365fi 4366 4367######################################## 4368# check if environ is declared 4369 4370has_environ=no 4371cat > $TMPC << EOF 4372#include <unistd.h> 4373int main(void) { 4374 environ = 0; 4375 return 0; 4376} 4377EOF 4378if compile_prog "" "" ; then 4379 has_environ=yes 4380fi 4381 4382######################################## 4383# check if cpuid.h is usable. 4384 4385cat > $TMPC << EOF 4386#include <cpuid.h> 4387int main(void) { 4388 unsigned a, b, c, d; 4389 int max = __get_cpuid_max(0, 0); 4390 4391 if (max >= 1) { 4392 __cpuid(1, a, b, c, d); 4393 } 4394 4395 if (max >= 7) { 4396 __cpuid_count(7, 0, a, b, c, d); 4397 } 4398 4399 return 0; 4400} 4401EOF 4402if compile_prog "" "" ; then 4403 cpuid_h=yes 4404fi 4405 4406########################################## 4407# avx2 optimization requirement check 4408# 4409# There is no point enabling this if cpuid.h is not usable, 4410# since we won't be able to select the new routines. 4411 4412if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 4413 cat > $TMPC << EOF 4414#pragma GCC push_options 4415#pragma GCC target("avx2") 4416#include <cpuid.h> 4417#include <immintrin.h> 4418static int bar(void *a) { 4419 __m256i x = *(__m256i *)a; 4420 return _mm256_testz_si256(x, x); 4421} 4422int main(int argc, char *argv[]) { return bar(argv[0]); } 4423EOF 4424 if compile_object "" ; then 4425 avx2_opt="yes" 4426 else 4427 avx2_opt="no" 4428 fi 4429fi 4430 4431########################################## 4432# avx512f optimization requirement check 4433# 4434# There is no point enabling this if cpuid.h is not usable, 4435# since we won't be able to select the new routines. 4436# by default, it is turned off. 4437# if user explicitly want to enable it, check environment 4438 4439if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 4440 cat > $TMPC << EOF 4441#pragma GCC push_options 4442#pragma GCC target("avx512f") 4443#include <cpuid.h> 4444#include <immintrin.h> 4445static int bar(void *a) { 4446 __m512i x = *(__m512i *)a; 4447 return _mm512_test_epi64_mask(x, x); 4448} 4449int main(int argc, char *argv[]) 4450{ 4451 return bar(argv[0]); 4452} 4453EOF 4454 if ! compile_object "" ; then 4455 avx512f_opt="no" 4456 fi 4457else 4458 avx512f_opt="no" 4459fi 4460 4461######################################## 4462# check if __[u]int128_t is usable. 4463 4464int128=no 4465cat > $TMPC << EOF 4466__int128_t a; 4467__uint128_t b; 4468int main (void) { 4469 a = a + b; 4470 b = a * b; 4471 a = a * a; 4472 return 0; 4473} 4474EOF 4475if compile_prog "" "" ; then 4476 int128=yes 4477fi 4478 4479######################################### 4480# See if 128-bit atomic operations are supported. 4481 4482atomic128=no 4483if test "$int128" = "yes"; then 4484 cat > $TMPC << EOF 4485int main(void) 4486{ 4487 unsigned __int128 x = 0, y = 0; 4488 y = __atomic_load(&x, 0); 4489 __atomic_store(&x, y, 0); 4490 __atomic_compare_exchange(&x, &y, x, 0, 0, 0); 4491 return 0; 4492} 4493EOF 4494 if compile_prog "" "" ; then 4495 atomic128=yes 4496 fi 4497fi 4498 4499cmpxchg128=no 4500if test "$int128" = yes && test "$atomic128" = no; then 4501 cat > $TMPC << EOF 4502int main(void) 4503{ 4504 unsigned __int128 x = 0, y = 0; 4505 __sync_val_compare_and_swap_16(&x, y, x); 4506 return 0; 4507} 4508EOF 4509 if compile_prog "" "" ; then 4510 cmpxchg128=yes 4511 fi 4512fi 4513 4514######################################### 4515# See if 64-bit atomic operations are supported. 4516# Note that without __atomic builtins, we can only 4517# assume atomic loads/stores max at pointer size. 4518 4519cat > $TMPC << EOF 4520#include <stdint.h> 4521int main(void) 4522{ 4523 uint64_t x = 0, y = 0; 4524#ifdef __ATOMIC_RELAXED 4525 y = __atomic_load_n(&x, __ATOMIC_RELAXED); 4526 __atomic_store_n(&x, y, __ATOMIC_RELAXED); 4527 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED); 4528 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED); 4529 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED); 4530#else 4531 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 4532 __sync_lock_test_and_set(&x, y); 4533 __sync_val_compare_and_swap(&x, y, 0); 4534 __sync_fetch_and_add(&x, y); 4535#endif 4536 return 0; 4537} 4538EOF 4539if compile_prog "" "" ; then 4540 atomic64=yes 4541fi 4542 4543######################################### 4544# See if --dynamic-list is supported by the linker 4545ld_dynamic_list="no" 4546if test "$static" = "no" ; then 4547 cat > $TMPTXT <<EOF 4548{ 4549 foo; 4550}; 4551EOF 4552 4553 cat > $TMPC <<EOF 4554#include <stdio.h> 4555void foo(void); 4556 4557void foo(void) 4558{ 4559 printf("foo\n"); 4560} 4561 4562int main(void) 4563{ 4564 foo(); 4565 return 0; 4566} 4567EOF 4568 4569 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 4570 ld_dynamic_list="yes" 4571 fi 4572fi 4573 4574######################################### 4575# See if -exported_symbols_list is supported by the linker 4576 4577ld_exported_symbols_list="no" 4578if test "$static" = "no" ; then 4579 cat > $TMPTXT <<EOF 4580 _foo 4581EOF 4582 4583 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 4584 ld_exported_symbols_list="yes" 4585 fi 4586fi 4587 4588if test "$plugins" = "yes" && 4589 test "$ld_dynamic_list" = "no" && 4590 test "$ld_exported_symbols_list" = "no" ; then 4591 error_exit \ 4592 "Plugin support requires dynamic linking and specifying a set of symbols " \ 4593 "that are exported to plugins. Unfortunately your linker doesn't " \ 4594 "support the flag (--dynamic-list or -exported_symbols_list) used " \ 4595 "for this purpose. You can't build with --static." 4596fi 4597 4598######################################## 4599# check if getauxval is available. 4600 4601getauxval=no 4602cat > $TMPC << EOF 4603#include <sys/auxv.h> 4604int main(void) { 4605 return getauxval(AT_HWCAP) == 0; 4606} 4607EOF 4608if compile_prog "" "" ; then 4609 getauxval=yes 4610fi 4611 4612######################################## 4613# check if ccache is interfering with 4614# semantic analysis of macros 4615 4616unset CCACHE_CPP2 4617ccache_cpp2=no 4618cat > $TMPC << EOF 4619static const int Z = 1; 4620#define fn() ({ Z; }) 4621#define TAUT(X) ((X) == Z) 4622#define PAREN(X, Y) (X == Y) 4623#define ID(X) (X) 4624int main(int argc, char *argv[]) 4625{ 4626 int x = 0, y = 0; 4627 x = ID(x); 4628 x = fn(); 4629 fn(); 4630 if (PAREN(x, y)) return 0; 4631 if (TAUT(Z)) return 0; 4632 return 0; 4633} 4634EOF 4635 4636if ! compile_object "-Werror"; then 4637 ccache_cpp2=yes 4638fi 4639 4640################################################# 4641# clang does not support glibc + FORTIFY_SOURCE. 4642 4643if test "$fortify_source" != "no"; then 4644 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 4645 fortify_source="no"; 4646 elif test -n "$cxx" && has $cxx && 4647 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 4648 fortify_source="no"; 4649 else 4650 fortify_source="yes" 4651 fi 4652fi 4653 4654############################################### 4655# Check if copy_file_range is provided by glibc 4656have_copy_file_range=no 4657cat > $TMPC << EOF 4658#include <unistd.h> 4659int main(void) { 4660 copy_file_range(0, NULL, 0, NULL, 0, 0); 4661 return 0; 4662} 4663EOF 4664if compile_prog "" "" ; then 4665 have_copy_file_range=yes 4666fi 4667 4668########################################## 4669# check if struct fsxattr is available via linux/fs.h 4670 4671have_fsxattr=no 4672cat > $TMPC << EOF 4673#include <linux/fs.h> 4674struct fsxattr foo; 4675int main(void) { 4676 return 0; 4677} 4678EOF 4679if compile_prog "" "" ; then 4680 have_fsxattr=yes 4681fi 4682 4683########################################## 4684# check for usable membarrier system call 4685if test "$membarrier" = "yes"; then 4686 have_membarrier=no 4687 if test "$mingw32" = "yes" ; then 4688 have_membarrier=yes 4689 elif test "$linux" = "yes" ; then 4690 cat > $TMPC << EOF 4691 #include <linux/membarrier.h> 4692 #include <sys/syscall.h> 4693 #include <unistd.h> 4694 #include <stdlib.h> 4695 int main(void) { 4696 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 4697 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 4698 exit(0); 4699 } 4700EOF 4701 if compile_prog "" "" ; then 4702 have_membarrier=yes 4703 fi 4704 fi 4705 if test "$have_membarrier" = "no"; then 4706 feature_not_found "membarrier" "membarrier system call not available" 4707 fi 4708else 4709 # Do not enable it by default even for Mingw32, because it doesn't 4710 # work on Wine. 4711 membarrier=no 4712fi 4713 4714########################################## 4715# check if rtnetlink.h exists and is useful 4716have_rtnetlink=no 4717cat > $TMPC << EOF 4718#include <linux/rtnetlink.h> 4719int main(void) { 4720 return IFLA_PROTO_DOWN; 4721} 4722EOF 4723if compile_prog "" "" ; then 4724 have_rtnetlink=yes 4725fi 4726 4727########################################## 4728# check for usable AF_VSOCK environment 4729have_af_vsock=no 4730cat > $TMPC << EOF 4731#include <errno.h> 4732#include <sys/types.h> 4733#include <sys/socket.h> 4734#if !defined(AF_VSOCK) 4735# error missing AF_VSOCK flag 4736#endif 4737#include <linux/vm_sockets.h> 4738int main(void) { 4739 int sock, ret; 4740 struct sockaddr_vm svm; 4741 socklen_t len = sizeof(svm); 4742 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 4743 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 4744 if ((ret == -1) && (errno == ENOTCONN)) { 4745 return 0; 4746 } 4747 return -1; 4748} 4749EOF 4750if compile_prog "" "" ; then 4751 have_af_vsock=yes 4752fi 4753 4754########################################## 4755# check for usable AF_ALG environment 4756have_afalg=no 4757cat > $TMPC << EOF 4758#include <errno.h> 4759#include <sys/types.h> 4760#include <sys/socket.h> 4761#include <linux/if_alg.h> 4762int main(void) { 4763 int sock; 4764 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 4765 return sock; 4766} 4767EOF 4768if compile_prog "" "" ; then 4769 have_afalg=yes 4770fi 4771if test "$crypto_afalg" = "yes" 4772then 4773 if test "$have_afalg" != "yes" 4774 then 4775 error_exit "AF_ALG requested but could not be detected" 4776 fi 4777fi 4778 4779 4780################################################# 4781# check for sysmacros.h 4782 4783have_sysmacros=no 4784cat > $TMPC << EOF 4785#include <sys/sysmacros.h> 4786int main(void) { 4787 return makedev(0, 0); 4788} 4789EOF 4790if compile_prog "" "" ; then 4791 have_sysmacros=yes 4792fi 4793 4794########################################## 4795# check for utmpx.h, it is missing e.g. on OpenBSD 4796 4797have_utmpx=no 4798cat > $TMPC << EOF 4799#include <utmpx.h> 4800struct utmpx user_info; 4801int main(void) { 4802 return 0; 4803} 4804EOF 4805if compile_prog "" "" ; then 4806 have_utmpx=yes 4807fi 4808 4809########################################## 4810# check for getrandom() 4811 4812have_getrandom=no 4813cat > $TMPC << EOF 4814#include <sys/random.h> 4815int main(void) { 4816 return getrandom(0, 0, GRND_NONBLOCK); 4817} 4818EOF 4819if compile_prog "" "" ; then 4820 have_getrandom=yes 4821fi 4822 4823########################################## 4824# checks for sanitizers 4825 4826have_asan=no 4827have_ubsan=no 4828have_asan_iface_h=no 4829have_asan_iface_fiber=no 4830 4831if test "$sanitizers" = "yes" ; then 4832 write_c_skeleton 4833 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 4834 have_asan=yes 4835 fi 4836 4837 # we could use a simple skeleton for flags checks, but this also 4838 # detect the static linking issue of ubsan, see also: 4839 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 4840 cat > $TMPC << EOF 4841#include <stdlib.h> 4842int main(void) { 4843 void *tmp = malloc(10); 4844 if (tmp != NULL) { 4845 return *(int *)(tmp + 2); 4846 } 4847 return 1; 4848} 4849EOF 4850 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 4851 have_ubsan=yes 4852 fi 4853 4854 if check_include "sanitizer/asan_interface.h" ; then 4855 have_asan_iface_h=yes 4856 fi 4857 4858 cat > $TMPC << EOF 4859#include <sanitizer/asan_interface.h> 4860int main(void) { 4861 __sanitizer_start_switch_fiber(0, 0, 0); 4862 return 0; 4863} 4864EOF 4865 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 4866 have_asan_iface_fiber=yes 4867 fi 4868fi 4869 4870########################################## 4871# checks for fuzzer 4872if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then 4873 write_c_fuzzer_skeleton 4874 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then 4875 have_fuzzer=yes 4876 else 4877 error_exit "Your compiler doesn't support -fsanitize=fuzzer" 4878 exit 1 4879 fi 4880fi 4881 4882# Thread sanitizer is, for now, much noisier than the other sanitizers; 4883# keep it separate until that is not the case. 4884if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 4885 error_exit "TSAN is not supported with other sanitiziers." 4886fi 4887have_tsan=no 4888have_tsan_iface_fiber=no 4889if test "$tsan" = "yes" ; then 4890 write_c_skeleton 4891 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 4892 have_tsan=yes 4893 fi 4894 cat > $TMPC << EOF 4895#include <sanitizer/tsan_interface.h> 4896int main(void) { 4897 __tsan_create_fiber(0); 4898 return 0; 4899} 4900EOF 4901 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 4902 have_tsan_iface_fiber=yes 4903 fi 4904fi 4905 4906########################################## 4907# check for slirp 4908 4909case "$slirp" in 4910 auto | enabled | internal) 4911 # Simpler to always update submodule, even if not needed. 4912 git_submodules="${git_submodules} slirp" 4913 ;; 4914esac 4915 4916# Check for slirp smbd dupport 4917: ${smbd=${SMBD-/usr/sbin/smbd}} 4918if test "$slirp_smbd" != "no" ; then 4919 if test "$mingw32" = "yes" ; then 4920 if test "$slirp_smbd" = "yes" ; then 4921 error_exit "Host smbd not supported on this platform." 4922 fi 4923 slirp_smbd=no 4924 else 4925 slirp_smbd=yes 4926 fi 4927fi 4928 4929########################################## 4930# check for usable __NR_keyctl syscall 4931 4932if test "$linux" = "yes" ; then 4933 4934 have_keyring=no 4935 cat > $TMPC << EOF 4936#include <errno.h> 4937#include <asm/unistd.h> 4938#include <linux/keyctl.h> 4939#include <unistd.h> 4940int main(void) { 4941 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 4942} 4943EOF 4944 if compile_prog "" "" ; then 4945 have_keyring=yes 4946 fi 4947fi 4948if test "$secret_keyring" != "no" 4949then 4950 if test "$have_keyring" = "yes" 4951 then 4952 secret_keyring=yes 4953 else 4954 if test "$secret_keyring" = "yes" 4955 then 4956 error_exit "syscall __NR_keyctl requested, \ 4957but not implemented on your system" 4958 else 4959 secret_keyring=no 4960 fi 4961 fi 4962fi 4963 4964########################################## 4965# End of CC checks 4966# After here, no more $cc or $ld runs 4967 4968write_c_skeleton 4969 4970if test "$gcov" = "yes" ; then 4971 : 4972elif test "$fortify_source" = "yes" ; then 4973 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" 4974 debug=no 4975fi 4976 4977case "$ARCH" in 4978alpha) 4979 # Ensure there's only a single GP 4980 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" 4981;; 4982esac 4983 4984if test "$gprof" = "yes" ; then 4985 QEMU_CFLAGS="-p $QEMU_CFLAGS" 4986 QEMU_LDFLAGS="-p $QEMU_LDFLAGS" 4987fi 4988 4989if test "$have_asan" = "yes"; then 4990 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 4991 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 4992 if test "$have_asan_iface_h" = "no" ; then 4993 echo "ASAN build enabled, but ASAN header missing." \ 4994 "Without code annotation, the report may be inferior." 4995 elif test "$have_asan_iface_fiber" = "no" ; then 4996 echo "ASAN build enabled, but ASAN header is too old." \ 4997 "Without code annotation, the report may be inferior." 4998 fi 4999fi 5000if test "$have_tsan" = "yes" ; then 5001 if test "$have_tsan_iface_fiber" = "yes" ; then 5002 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 5003 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 5004 else 5005 error_exit "Cannot enable TSAN due to missing fiber annotation interface." 5006 fi 5007elif test "$tsan" = "yes" ; then 5008 error_exit "Cannot enable TSAN due to missing sanitize thread interface." 5009fi 5010if test "$have_ubsan" = "yes"; then 5011 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 5012 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 5013fi 5014 5015########################################## 5016 5017# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 5018if test "$solaris" = "no" && test "$tsan" = "no"; then 5019 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 5020 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 5021 fi 5022fi 5023 5024# Use ASLR, no-SEH and DEP if available 5025if test "$mingw32" = "yes" ; then 5026 flags="--no-seh --nxcompat" 5027 5028 # Disable ASLR for debug builds to allow debugging with gdb 5029 if test "$debug" = "no" ; then 5030 flags="--dynamicbase $flags" 5031 fi 5032 5033 for flag in $flags; do 5034 if ld_has $flag ; then 5035 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 5036 fi 5037 done 5038fi 5039 5040# Probe for guest agent support/options 5041 5042if [ "$guest_agent" != "no" ]; then 5043 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 5044 guest_agent=no 5045 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 5046 guest_agent=yes 5047 elif [ "$guest_agent" != yes ]; then 5048 guest_agent=no 5049 else 5050 error_exit "Guest agent is not supported on this platform" 5051 fi 5052fi 5053 5054# Guest agent Windows MSI package 5055 5056if test "$QEMU_GA_MANUFACTURER" = ""; then 5057 QEMU_GA_MANUFACTURER=QEMU 5058fi 5059if test "$QEMU_GA_DISTRO" = ""; then 5060 QEMU_GA_DISTRO=Linux 5061fi 5062if test "$QEMU_GA_VERSION" = ""; then 5063 QEMU_GA_VERSION=$(cat $source_path/VERSION) 5064fi 5065 5066QEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin" 5067 5068# Mac OS X ships with a broken assembler 5069roms= 5070if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 5071 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 5072 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then 5073 # Different host OS linkers have different ideas about the name of the ELF 5074 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 5075 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 5076 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 5077 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 5078 ld_i386_emulation="$emu" 5079 roms="optionrom" 5080 break 5081 fi 5082 done 5083fi 5084 5085# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 5086# or -march=z10 (which is the lowest architecture level that Clang supports) 5087if test "$cpu" = "s390x" ; then 5088 write_c_skeleton 5089 compile_prog "-march=z900" "" 5090 has_z900=$? 5091 if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then 5092 if [ $has_z900 != 0 ]; then 5093 echo "WARNING: Your compiler does not support the z900!" 5094 echo " The s390-ccw bios will only work with guest CPUs >= z10." 5095 fi 5096 roms="$roms s390-ccw" 5097 # SLOF is required for building the s390-ccw firmware on s390x, 5098 # since it is using the libnet code from SLOF for network booting. 5099 git_submodules="${git_submodules} roms/SLOF" 5100 fi 5101fi 5102 5103# Check that the C++ compiler exists and works with the C compiler. 5104# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 5105if has $cxx; then 5106 cat > $TMPC <<EOF 5107int c_function(void); 5108int main(void) { return c_function(); } 5109EOF 5110 5111 compile_object 5112 5113 cat > $TMPCXX <<EOF 5114extern "C" { 5115 int c_function(void); 5116} 5117int c_function(void) { return 42; } 5118EOF 5119 5120 update_cxxflags 5121 5122 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 5123 # C++ compiler $cxx works ok with C compiler $cc 5124 : 5125 else 5126 echo "C++ compiler $cxx does not work with C compiler $cc" 5127 echo "Disabling C++ specific optional code" 5128 cxx= 5129 fi 5130else 5131 echo "No C++ compiler available; disabling C++ specific optional code" 5132 cxx= 5133fi 5134 5135if !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then 5136 exit 1 5137fi 5138 5139config_host_mak="config-host.mak" 5140 5141echo "# Automatically generated by configure - do not modify" > $config_host_mak 5142echo >> $config_host_mak 5143 5144echo all: >> $config_host_mak 5145echo "GIT=$git" >> $config_host_mak 5146echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 5147echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak 5148 5149echo "ARCH=$ARCH" >> $config_host_mak 5150 5151if test "$debug_tcg" = "yes" ; then 5152 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 5153fi 5154if test "$strip_opt" = "yes" ; then 5155 echo "STRIP=${strip}" >> $config_host_mak 5156fi 5157if test "$bigendian" = "yes" ; then 5158 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 5159fi 5160if test "$mingw32" = "yes" ; then 5161 echo "CONFIG_WIN32=y" >> $config_host_mak 5162 if test "$guest_agent_with_vss" = "yes" ; then 5163 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 5164 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 5165 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 5166 fi 5167 if test "$guest_agent_ntddscsi" = "yes" ; then 5168 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 5169 fi 5170 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 5171 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 5172 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 5173 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 5174else 5175 echo "CONFIG_POSIX=y" >> $config_host_mak 5176fi 5177 5178if test "$linux" = "yes" ; then 5179 echo "CONFIG_LINUX=y" >> $config_host_mak 5180fi 5181 5182if test "$darwin" = "yes" ; then 5183 echo "CONFIG_DARWIN=y" >> $config_host_mak 5184fi 5185 5186if test "$solaris" = "yes" ; then 5187 echo "CONFIG_SOLARIS=y" >> $config_host_mak 5188fi 5189if test "$haiku" = "yes" ; then 5190 echo "CONFIG_HAIKU=y" >> $config_host_mak 5191fi 5192if test "$static" = "yes" ; then 5193 echo "CONFIG_STATIC=y" >> $config_host_mak 5194fi 5195if test "$profiler" = "yes" ; then 5196 echo "CONFIG_PROFILER=y" >> $config_host_mak 5197fi 5198if test "$want_tools" = "yes" ; then 5199 echo "CONFIG_TOOLS=y" >> $config_host_mak 5200fi 5201if test "$guest_agent" = "yes" ; then 5202 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak 5203fi 5204if test "$slirp_smbd" = "yes" ; then 5205 echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak 5206 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 5207fi 5208if test "$vde" = "yes" ; then 5209 echo "CONFIG_VDE=y" >> $config_host_mak 5210 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 5211fi 5212if test "$netmap" = "yes" ; then 5213 echo "CONFIG_NETMAP=y" >> $config_host_mak 5214fi 5215if test "$l2tpv3" = "yes" ; then 5216 echo "CONFIG_L2TPV3=y" >> $config_host_mak 5217fi 5218if test "$gprof" = "yes" ; then 5219 echo "CONFIG_GPROF=y" >> $config_host_mak 5220fi 5221echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 5222for drv in $audio_drv_list; do 5223 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 5224 echo "$def=y" >> $config_host_mak 5225done 5226if test "$alsa" = "yes" ; then 5227 echo "CONFIG_ALSA=y" >> $config_host_mak 5228fi 5229echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 5230echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak 5231if test "$libpulse" = "yes" ; then 5232 echo "CONFIG_LIBPULSE=y" >> $config_host_mak 5233fi 5234echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 5235echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak 5236echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 5237echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 5238echo "OSS_LIBS=$oss_libs" >> $config_host_mak 5239if test "$libjack" = "yes" ; then 5240 echo "CONFIG_LIBJACK=y" >> $config_host_mak 5241fi 5242echo "JACK_LIBS=$jack_libs" >> $config_host_mak 5243if test "$audio_win_int" = "yes" ; then 5244 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 5245fi 5246echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 5247echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 5248if test "$xfs" = "yes" ; then 5249 echo "CONFIG_XFS=y" >> $config_host_mak 5250fi 5251qemu_version=$(head $source_path/VERSION) 5252echo "PKGVERSION=$pkgversion" >>$config_host_mak 5253echo "SRC_PATH=$source_path" >> $config_host_mak 5254echo "TARGET_DIRS=$target_list" >> $config_host_mak 5255if test "$modules" = "yes"; then 5256 # $shacmd can generate a hash started with digit, which the compiler doesn't 5257 # like as an symbol. So prefix it with an underscore 5258 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 5259 echo "CONFIG_MODULES=y" >> $config_host_mak 5260fi 5261if test "$module_upgrades" = "yes"; then 5262 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 5263fi 5264if test "$pipe2" = "yes" ; then 5265 echo "CONFIG_PIPE2=y" >> $config_host_mak 5266fi 5267if test "$accept4" = "yes" ; then 5268 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 5269fi 5270if test "$splice" = "yes" ; then 5271 echo "CONFIG_SPLICE=y" >> $config_host_mak 5272fi 5273if test "$eventfd" = "yes" ; then 5274 echo "CONFIG_EVENTFD=y" >> $config_host_mak 5275fi 5276if test "$memfd" = "yes" ; then 5277 echo "CONFIG_MEMFD=y" >> $config_host_mak 5278fi 5279if test "$have_usbfs" = "yes" ; then 5280 echo "CONFIG_USBFS=y" >> $config_host_mak 5281fi 5282if test "$fallocate" = "yes" ; then 5283 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 5284fi 5285if test "$fallocate_punch_hole" = "yes" ; then 5286 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 5287fi 5288if test "$fallocate_zero_range" = "yes" ; then 5289 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 5290fi 5291if test "$posix_fallocate" = "yes" ; then 5292 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 5293fi 5294if test "$sync_file_range" = "yes" ; then 5295 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 5296fi 5297if test "$fiemap" = "yes" ; then 5298 echo "CONFIG_FIEMAP=y" >> $config_host_mak 5299fi 5300if test "$dup3" = "yes" ; then 5301 echo "CONFIG_DUP3=y" >> $config_host_mak 5302fi 5303if test "$ppoll" = "yes" ; then 5304 echo "CONFIG_PPOLL=y" >> $config_host_mak 5305fi 5306if test "$prctl_pr_set_timerslack" = "yes" ; then 5307 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 5308fi 5309if test "$epoll" = "yes" ; then 5310 echo "CONFIG_EPOLL=y" >> $config_host_mak 5311fi 5312if test "$epoll_create1" = "yes" ; then 5313 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 5314fi 5315if test "$sendfile" = "yes" ; then 5316 echo "CONFIG_SENDFILE=y" >> $config_host_mak 5317fi 5318if test "$timerfd" = "yes" ; then 5319 echo "CONFIG_TIMERFD=y" >> $config_host_mak 5320fi 5321if test "$setns" = "yes" ; then 5322 echo "CONFIG_SETNS=y" >> $config_host_mak 5323fi 5324if test "$clock_adjtime" = "yes" ; then 5325 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 5326fi 5327if test "$syncfs" = "yes" ; then 5328 echo "CONFIG_SYNCFS=y" >> $config_host_mak 5329fi 5330if test "$inotify" = "yes" ; then 5331 echo "CONFIG_INOTIFY=y" >> $config_host_mak 5332fi 5333if test "$inotify1" = "yes" ; then 5334 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 5335fi 5336if test "$sem_timedwait" = "yes" ; then 5337 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 5338fi 5339if test "$strchrnul" = "yes" ; then 5340 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 5341fi 5342if test "$st_atim" = "yes" ; then 5343 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak 5344fi 5345if test "$sigev_notify_thread_id" = "yes" ; then 5346 echo "HAVE_SIGEV_NOTIFY_THREAD_ID=y" >> $config_host_mak 5347fi 5348if test "$byteswap_h" = "yes" ; then 5349 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 5350fi 5351if test "$bswap_h" = "yes" ; then 5352 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 5353fi 5354if test "$gio" = "yes" ; then 5355 echo "CONFIG_GIO=y" >> $config_host_mak 5356 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 5357 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 5358fi 5359if test "$gdbus_codegen" != "" ; then 5360 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 5361fi 5362echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 5363if test "$have_broken_size_max" = "yes" ; then 5364 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 5365fi 5366if test "$have_openpty" = "yes" ; then 5367 echo "HAVE_OPENPTY=y" >> $config_host_mak 5368fi 5369 5370# Work around a system header bug with some kernel/XFS header 5371# versions where they both try to define 'struct fsxattr': 5372# xfs headers will not try to redefine structs from linux headers 5373# if this macro is set. 5374if test "$have_fsxattr" = "yes" ; then 5375 echo "HAVE_FSXATTR=y" >> $config_host_mak 5376fi 5377if test "$have_copy_file_range" = "yes" ; then 5378 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 5379fi 5380if test "$xen" = "enabled" ; then 5381 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 5382 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 5383 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak 5384 echo "XEN_LIBS=$xen_libs" >> $config_host_mak 5385fi 5386if test "$linux_aio" = "yes" ; then 5387 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 5388fi 5389if test "$vhost_scsi" = "yes" ; then 5390 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 5391fi 5392if test "$vhost_net" = "yes" ; then 5393 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 5394fi 5395if test "$vhost_net_user" = "yes" ; then 5396 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 5397fi 5398if test "$vhost_net_vdpa" = "yes" ; then 5399 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 5400fi 5401if test "$vhost_crypto" = "yes" ; then 5402 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 5403fi 5404if test "$vhost_vsock" = "yes" ; then 5405 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 5406 if test "$vhost_user" = "yes" ; then 5407 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 5408 fi 5409fi 5410if test "$vhost_kernel" = "yes" ; then 5411 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 5412fi 5413if test "$vhost_user" = "yes" ; then 5414 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 5415fi 5416if test "$vhost_vdpa" = "yes" ; then 5417 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 5418fi 5419if test "$vhost_user_fs" = "yes" ; then 5420 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 5421fi 5422if test "$iovec" = "yes" ; then 5423 echo "CONFIG_IOVEC=y" >> $config_host_mak 5424fi 5425if test "$membarrier" = "yes" ; then 5426 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 5427fi 5428if test "$signalfd" = "yes" ; then 5429 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 5430fi 5431if test "$optreset" = "yes" ; then 5432 echo "HAVE_OPTRESET=y" >> $config_host_mak 5433fi 5434if test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then 5435 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 5436fi 5437if test "$fdatasync" = "yes" ; then 5438 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 5439fi 5440if test "$madvise" = "yes" ; then 5441 echo "CONFIG_MADVISE=y" >> $config_host_mak 5442fi 5443if test "$posix_madvise" = "yes" ; then 5444 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 5445fi 5446if test "$posix_memalign" = "yes" ; then 5447 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 5448fi 5449 5450if test "$spice_protocol" = "yes" ; then 5451 echo "CONFIG_SPICE_PROTOCOL=y" >> $config_host_mak 5452 echo "SPICE_PROTOCOL_CFLAGS=$spice_protocol_cflags" >> $config_host_mak 5453fi 5454if test "$spice" = "yes" ; then 5455 echo "CONFIG_SPICE=y" >> $config_host_mak 5456 echo "SPICE_CFLAGS=$spice_cflags $spice_protocol_cflags" >> $config_host_mak 5457 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak 5458fi 5459 5460if test "$opengl" = "yes" ; then 5461 echo "CONFIG_OPENGL=y" >> $config_host_mak 5462 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak 5463 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 5464fi 5465 5466if test "$gbm" = "yes" ; then 5467 echo "CONFIG_GBM=y" >> $config_host_mak 5468 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 5469 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 5470fi 5471 5472 5473if test "$avx2_opt" = "yes" ; then 5474 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 5475fi 5476 5477if test "$avx512f_opt" = "yes" ; then 5478 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 5479fi 5480 5481# XXX: suppress that 5482if [ "$bsd" = "yes" ] ; then 5483 echo "CONFIG_BSD=y" >> $config_host_mak 5484fi 5485 5486if test "$qom_cast_debug" = "yes" ; then 5487 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 5488fi 5489 5490echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 5491if test "$coroutine_pool" = "yes" ; then 5492 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 5493else 5494 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 5495fi 5496 5497if test "$debug_stack_usage" = "yes" ; then 5498 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 5499fi 5500 5501if test "$crypto_afalg" = "yes" ; then 5502 echo "CONFIG_AF_ALG=y" >> $config_host_mak 5503fi 5504 5505if test "$open_by_handle_at" = "yes" ; then 5506 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 5507fi 5508 5509if test "$linux_magic_h" = "yes" ; then 5510 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 5511fi 5512 5513if test "$valgrind_h" = "yes" ; then 5514 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 5515fi 5516 5517if test "$have_asan_iface_fiber" = "yes" ; then 5518 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 5519fi 5520 5521if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 5522 echo "CONFIG_TSAN=y" >> $config_host_mak 5523fi 5524 5525if test "$has_environ" = "yes" ; then 5526 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 5527fi 5528 5529if test "$cpuid_h" = "yes" ; then 5530 echo "CONFIG_CPUID_H=y" >> $config_host_mak 5531fi 5532 5533if test "$int128" = "yes" ; then 5534 echo "CONFIG_INT128=y" >> $config_host_mak 5535fi 5536 5537if test "$atomic128" = "yes" ; then 5538 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 5539fi 5540 5541if test "$cmpxchg128" = "yes" ; then 5542 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 5543fi 5544 5545if test "$atomic64" = "yes" ; then 5546 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 5547fi 5548 5549if test "$getauxval" = "yes" ; then 5550 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 5551fi 5552 5553if test "$libssh" = "yes" ; then 5554 echo "CONFIG_LIBSSH=y" >> $config_host_mak 5555 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 5556 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 5557fi 5558 5559if test "$live_block_migration" = "yes" ; then 5560 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 5561fi 5562 5563if test "$tpm" = "yes"; then 5564 echo 'CONFIG_TPM=y' >> $config_host_mak 5565fi 5566 5567echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 5568if have_backend "nop"; then 5569 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 5570fi 5571if have_backend "simple"; then 5572 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 5573 # Set the appropriate trace file. 5574 trace_file="\"$trace_file-\" FMT_pid" 5575fi 5576if have_backend "log"; then 5577 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 5578fi 5579if have_backend "ust"; then 5580 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 5581 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak 5582 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak 5583fi 5584if have_backend "dtrace"; then 5585 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 5586 if test "$trace_backend_stap" = "yes" ; then 5587 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 5588 fi 5589fi 5590if have_backend "ftrace"; then 5591 if test "$linux" = "yes" ; then 5592 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 5593 else 5594 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 5595 fi 5596fi 5597if have_backend "syslog"; then 5598 if test "$posix_syslog" = "yes" ; then 5599 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 5600 else 5601 feature_not_found "syslog(trace backend)" "syslog not available" 5602 fi 5603fi 5604echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 5605 5606if test "$rdma" = "yes" ; then 5607 echo "CONFIG_RDMA=y" >> $config_host_mak 5608 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 5609fi 5610 5611if test "$pvrdma" = "yes" ; then 5612 echo "CONFIG_PVRDMA=y" >> $config_host_mak 5613fi 5614 5615if test "$have_rtnetlink" = "yes" ; then 5616 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 5617fi 5618 5619if test "$replication" = "yes" ; then 5620 echo "CONFIG_REPLICATION=y" >> $config_host_mak 5621fi 5622 5623if test "$have_af_vsock" = "yes" ; then 5624 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 5625fi 5626 5627if test "$have_sysmacros" = "yes" ; then 5628 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 5629fi 5630 5631if test "$have_utmpx" = "yes" ; then 5632 echo "HAVE_UTMPX=y" >> $config_host_mak 5633fi 5634if test "$have_getrandom" = "yes" ; then 5635 echo "CONFIG_GETRANDOM=y" >> $config_host_mak 5636fi 5637if test "$debug_mutex" = "yes" ; then 5638 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 5639fi 5640 5641# Hold two types of flag: 5642# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 5643# a thread we have a handle to 5644# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 5645# platform 5646if test "$pthread_setname_np_w_tid" = "yes" ; then 5647 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 5648 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 5649elif test "$pthread_setname_np_wo_tid" = "yes" ; then 5650 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 5651 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 5652fi 5653 5654if test "$libpmem" = "yes" ; then 5655 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 5656 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak 5657 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak 5658fi 5659 5660if test "$bochs" = "yes" ; then 5661 echo "CONFIG_BOCHS=y" >> $config_host_mak 5662fi 5663if test "$cloop" = "yes" ; then 5664 echo "CONFIG_CLOOP=y" >> $config_host_mak 5665fi 5666if test "$dmg" = "yes" ; then 5667 echo "CONFIG_DMG=y" >> $config_host_mak 5668fi 5669if test "$qcow1" = "yes" ; then 5670 echo "CONFIG_QCOW1=y" >> $config_host_mak 5671fi 5672if test "$vdi" = "yes" ; then 5673 echo "CONFIG_VDI=y" >> $config_host_mak 5674fi 5675if test "$vvfat" = "yes" ; then 5676 echo "CONFIG_VVFAT=y" >> $config_host_mak 5677fi 5678if test "$qed" = "yes" ; then 5679 echo "CONFIG_QED=y" >> $config_host_mak 5680fi 5681if test "$parallels" = "yes" ; then 5682 echo "CONFIG_PARALLELS=y" >> $config_host_mak 5683fi 5684if test "$have_mlockall" = "yes" ; then 5685 echo "HAVE_MLOCKALL=y" >> $config_host_mak 5686fi 5687if test "$fuzzing" = "yes" ; then 5688 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the 5689 # needed CFLAGS have already been provided 5690 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then 5691 # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the 5692 # compiled code. 5693 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link" 5694 # To build non-fuzzer binaries with --enable-fuzzing, link everything with 5695 # fsanitize=fuzzer-no-link. Otherwise, the linker will be unable to bind 5696 # the fuzzer-related callbacks added by instrumentation. 5697 QEMU_LDFLAGS="$QEMU_LDFLAGS -fsanitize=fuzzer-no-link" 5698 # For the actual fuzzer binaries, we need to link against the libfuzzer 5699 # library. Provide the flags for doing this in FUZZ_EXE_LDFLAGS. The meson 5700 # rule for the fuzzer adds these to the link_args. They need to be 5701 # configurable, to support OSS-Fuzz 5702 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer" 5703 else 5704 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE" 5705 fi 5706fi 5707 5708if test "$plugins" = "yes" ; then 5709 echo "CONFIG_PLUGIN=y" >> $config_host_mak 5710 # Copy the export object list to the build dir 5711 if test "$ld_dynamic_list" = "yes" ; then 5712 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 5713 ld_symbols=qemu-plugins-ld.symbols 5714 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 5715 elif test "$ld_exported_symbols_list" = "yes" ; then 5716 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 5717 ld64_symbols=qemu-plugins-ld64.symbols 5718 echo "# Automatically generated by configure - do not modify" > $ld64_symbols 5719 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 5720 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 5721 else 5722 error_exit \ 5723 "If \$plugins=yes, either \$ld_dynamic_list or " \ 5724 "\$ld_exported_symbols_list should have been set to 'yes'." 5725 fi 5726fi 5727 5728if test -n "$gdb_bin"; then 5729 gdb_version=$($gdb_bin --version | head -n 1) 5730 if version_ge ${gdb_version##* } 9.1; then 5731 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 5732 fi 5733fi 5734 5735if test "$secret_keyring" = "yes" ; then 5736 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 5737fi 5738 5739echo "ROMS=$roms" >> $config_host_mak 5740echo "MAKE=$make" >> $config_host_mak 5741echo "PYTHON=$python" >> $config_host_mak 5742echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 5743echo "MESON=$meson" >> $config_host_mak 5744echo "NINJA=$ninja" >> $config_host_mak 5745echo "CC=$cc" >> $config_host_mak 5746echo "HOST_CC=$host_cc" >> $config_host_mak 5747if $iasl -h > /dev/null 2>&1; then 5748 echo "CONFIG_IASL=$iasl" >> $config_host_mak 5749fi 5750echo "CXX=$cxx" >> $config_host_mak 5751echo "OBJCC=$objcc" >> $config_host_mak 5752echo "AR=$ar" >> $config_host_mak 5753echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 5754echo "AS=$as" >> $config_host_mak 5755echo "CCAS=$ccas" >> $config_host_mak 5756echo "CPP=$cpp" >> $config_host_mak 5757echo "OBJCOPY=$objcopy" >> $config_host_mak 5758echo "LD=$ld" >> $config_host_mak 5759echo "RANLIB=$ranlib" >> $config_host_mak 5760echo "NM=$nm" >> $config_host_mak 5761echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 5762echo "WINDRES=$windres" >> $config_host_mak 5763echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 5764echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 5765echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 5766echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 5767echo "GLIB_LIBS=$glib_libs" >> $config_host_mak 5768echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 5769echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 5770echo "EXESUF=$EXESUF" >> $config_host_mak 5771echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak 5772echo "LIBS_QGA=$libs_qga" >> $config_host_mak 5773if test "$gcov" = "yes" ; then 5774 echo "CONFIG_GCOV=y" >> $config_host_mak 5775fi 5776 5777if test "$fuzzing" != "no"; then 5778 echo "CONFIG_FUZZ=y" >> $config_host_mak 5779fi 5780echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak 5781 5782if test "$rng_none" = "yes"; then 5783 echo "CONFIG_RNG_NONE=y" >> $config_host_mak 5784fi 5785 5786# use included Linux headers 5787if test "$linux" = "yes" ; then 5788 mkdir -p linux-headers 5789 case "$cpu" in 5790 i386|x86_64|x32) 5791 linux_arch=x86 5792 ;; 5793 ppc|ppc64|ppc64le) 5794 linux_arch=powerpc 5795 ;; 5796 s390x) 5797 linux_arch=s390 5798 ;; 5799 aarch64) 5800 linux_arch=arm64 5801 ;; 5802 mips64) 5803 linux_arch=mips 5804 ;; 5805 *) 5806 # For most CPUs the kernel architecture name and QEMU CPU name match. 5807 linux_arch="$cpu" 5808 ;; 5809 esac 5810 # For non-KVM architectures we will not have asm headers 5811 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 5812 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 5813 fi 5814fi 5815 5816for target in $target_list; do 5817 target_dir="$target" 5818 target_name=$(echo $target | cut -d '-' -f 1) 5819 mkdir -p $target_dir 5820 case $target in 5821 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;; 5822 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;; 5823 esac 5824done 5825 5826echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak 5827if test "$default_targets" = "yes"; then 5828 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak 5829fi 5830 5831if test "$numa" = "yes"; then 5832 echo "CONFIG_NUMA=y" >> $config_host_mak 5833 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak 5834fi 5835 5836if test "$ccache_cpp2" = "yes"; then 5837 echo "export CCACHE_CPP2=y" >> $config_host_mak 5838fi 5839 5840if test "$safe_stack" = "yes"; then 5841 echo "CONFIG_SAFESTACK=y" >> $config_host_mak 5842fi 5843 5844# If we're using a separate build tree, set it up now. 5845# DIRS are directories which we simply mkdir in the build tree; 5846# LINKS are things to symlink back into the source tree 5847# (these can be both files and directories). 5848# Caution: do not add files or directories here using wildcards. This 5849# will result in problems later if a new file matching the wildcard is 5850# added to the source tree -- nothing will cause configure to be rerun 5851# so the build tree will be missing the link back to the new file, and 5852# tests might fail. Prefer to keep the relevant files in their own 5853# directory and symlink the directory instead. 5854# UNLINK is used to remove symlinks from older development versions 5855# that might get into the way when doing "git update" without doing 5856# a "make distclean" in between. 5857DIRS="tests tests/tcg tests/qapi-schema tests/qtest/libqos" 5858DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 5859DIRS="$DIRS docs docs/interop fsdev scsi" 5860DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 5861DIRS="$DIRS roms/seabios" 5862DIRS="$DIRS contrib/plugins/" 5863LINKS="Makefile" 5864LINKS="$LINKS tests/tcg/Makefile.target" 5865LINKS="$LINKS pc-bios/optionrom/Makefile" 5866LINKS="$LINKS pc-bios/s390-ccw/Makefile" 5867LINKS="$LINKS roms/seabios/Makefile" 5868LINKS="$LINKS pc-bios/qemu-icon.bmp" 5869LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 5870LINKS="$LINKS tests/acceptance tests/data" 5871LINKS="$LINKS tests/qemu-iotests/check" 5872LINKS="$LINKS python" 5873LINKS="$LINKS contrib/plugins/Makefile " 5874UNLINK="pc-bios/keymaps" 5875for bios_file in \ 5876 $source_path/pc-bios/*.bin \ 5877 $source_path/pc-bios/*.elf \ 5878 $source_path/pc-bios/*.lid \ 5879 $source_path/pc-bios/*.rom \ 5880 $source_path/pc-bios/*.dtb \ 5881 $source_path/pc-bios/*.img \ 5882 $source_path/pc-bios/openbios-* \ 5883 $source_path/pc-bios/u-boot.* \ 5884 $source_path/pc-bios/edk2-*.fd.bz2 \ 5885 $source_path/pc-bios/palcode-* 5886do 5887 LINKS="$LINKS pc-bios/$(basename $bios_file)" 5888done 5889mkdir -p $DIRS 5890for f in $LINKS ; do 5891 if [ -e "$source_path/$f" ]; then 5892 symlink "$source_path/$f" "$f" 5893 fi 5894done 5895for f in $UNLINK ; do 5896 if [ -L "$f" ]; then 5897 rm -f "$f" 5898 fi 5899done 5900 5901(for i in $cross_cc_vars; do 5902 export $i 5903done 5904export target_list source_path use_containers ARCH 5905$source_path/tests/tcg/configure.sh) 5906 5907# temporary config to build submodules 5908for rom in seabios; do 5909 config_mak=roms/$rom/config.mak 5910 echo "# Automatically generated by configure - do not modify" > $config_mak 5911 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 5912 echo "AS=$as" >> $config_mak 5913 echo "CCAS=$ccas" >> $config_mak 5914 echo "CC=$cc" >> $config_mak 5915 echo "BCC=bcc" >> $config_mak 5916 echo "CPP=$cpp" >> $config_mak 5917 echo "OBJCOPY=objcopy" >> $config_mak 5918 echo "IASL=$iasl" >> $config_mak 5919 echo "LD=$ld" >> $config_mak 5920 echo "RANLIB=$ranlib" >> $config_mak 5921done 5922 5923if test "$skip_meson" = no; then 5924 cross="config-meson.cross.new" 5925 meson_quote() { 5926 echo "'$(echo $* | sed "s/ /','/g")'" 5927 } 5928 5929 echo "# Automatically generated by configure - do not modify" > $cross 5930 echo "[properties]" >> $cross 5931 test -z "$cxx" && echo "link_language = 'c'" >> $cross 5932 echo "[built-in options]" >> $cross 5933 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross 5934 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross 5935 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross 5936 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross 5937 echo "[binaries]" >> $cross 5938 echo "c = [$(meson_quote $cc)]" >> $cross 5939 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross 5940 test -n "$objcc" && echo "objc = [$(meson_quote $objcc)]" >> $cross 5941 echo "ar = [$(meson_quote $ar)]" >> $cross 5942 echo "nm = [$(meson_quote $nm)]" >> $cross 5943 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross 5944 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross 5945 if has $sdl2_config; then 5946 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross 5947 fi 5948 echo "strip = [$(meson_quote $strip)]" >> $cross 5949 echo "windres = [$(meson_quote $windres)]" >> $cross 5950 if test "$cross_compile" = "yes"; then 5951 cross_arg="--cross-file config-meson.cross" 5952 echo "[host_machine]" >> $cross 5953 if test "$mingw32" = "yes" ; then 5954 echo "system = 'windows'" >> $cross 5955 fi 5956 if test "$linux" = "yes" ; then 5957 echo "system = 'linux'" >> $cross 5958 fi 5959 if test "$darwin" = "yes" ; then 5960 echo "system = 'darwin'" >> $cross 5961 fi 5962 case "$ARCH" in 5963 i386) 5964 echo "cpu_family = 'x86'" >> $cross 5965 ;; 5966 x86_64|x32) 5967 echo "cpu_family = 'x86_64'" >> $cross 5968 ;; 5969 ppc64le) 5970 echo "cpu_family = 'ppc64'" >> $cross 5971 ;; 5972 *) 5973 echo "cpu_family = '$ARCH'" >> $cross 5974 ;; 5975 esac 5976 echo "cpu = '$cpu'" >> $cross 5977 if test "$bigendian" = "yes" ; then 5978 echo "endian = 'big'" >> $cross 5979 else 5980 echo "endian = 'little'" >> $cross 5981 fi 5982 else 5983 cross_arg="--native-file config-meson.cross" 5984 fi 5985 mv $cross config-meson.cross 5986 5987 rm -rf meson-private meson-info meson-logs 5988 unset staticpic 5989 if ! version_ge "$($meson --version)" 0.56.0; then 5990 staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi) 5991 fi 5992 NINJA=$ninja $meson setup \ 5993 --prefix "$prefix" \ 5994 --libdir "$libdir" \ 5995 --libexecdir "$libexecdir" \ 5996 --bindir "$bindir" \ 5997 --includedir "$includedir" \ 5998 --datadir "$datadir" \ 5999 --mandir "$mandir" \ 6000 --sysconfdir "$sysconfdir" \ 6001 --localedir "$localedir" \ 6002 --localstatedir "$local_statedir" \ 6003 -Ddocdir="$docdir" \ 6004 -Dqemu_firmwarepath="$firmwarepath" \ 6005 -Dqemu_suffix="$qemu_suffix" \ 6006 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ 6007 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ 6008 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ 6009 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \ 6010 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ 6011 ${staticpic:+-Db_staticpic=$staticpic} \ 6012 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ 6013 -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug \ 6014 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \ 6015 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \ 6016 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \ 6017 -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \ 6018 -Dlibusb=$libusb -Dsmartcard=$smartcard -Dusb_redir=$usb_redir -Dvte=$vte \ 6019 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \ 6020 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \ 6021 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \ 6022 -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \ 6023 -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\ 6024 -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse -Dlibxml2=$libxml2 \ 6025 -Dlibdaxctl=$libdaxctl -Dlibpmem=$libpmem -Dlinux_io_uring=$linux_io_uring \ 6026 -Dgnutls=$gnutls -Dnettle=$nettle -Dgcrypt=$gcrypt -Dauth_pam=$auth_pam \ 6027 -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \ 6028 -Dattr=$attr -Ddefault_devices=$default_devices -Dvirglrenderer=$virglrenderer \ 6029 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \ 6030 -Dvhost_user_blk_server=$vhost_user_blk_server -Dmultiprocess=$multiprocess \ 6031 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek -Dguest_agent_msi=$guest_agent_msi -Dbpf=$bpf\ 6032 $(if test "$default_features" = no; then echo "-Dauto_features=disabled"; fi) \ 6033 -Dtcg_interpreter=$tcg_interpreter \ 6034 $cross_arg \ 6035 "$PWD" "$source_path" 6036 6037 if test "$?" -ne 0 ; then 6038 error_exit "meson setup failed" 6039 fi 6040else 6041 if test -f meson-private/cmd_line.txt; then 6042 # Adjust old command line options whose type was changed 6043 # Avoids having to use "setup --wipe" when Meson is upgraded 6044 perl -i -ne ' 6045 s/^gettext = true$/gettext = auto/; 6046 s/^gettext = false$/gettext = disabled/; 6047 print;' meson-private/cmd_line.txt 6048 fi 6049fi 6050 6051if test -n "${deprecated_features}"; then 6052 echo "Warning, deprecated features enabled." 6053 echo "Please see docs/system/deprecated.rst" 6054 echo " features: ${deprecated_features}" 6055fi 6056 6057# Create list of config switches that should be poisoned in common code... 6058# but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special. 6059target_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null) 6060if test -n "$target_configs_h" ; then 6061 sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \ 6062 -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \ 6063 $target_configs_h | sort -u > config-poison.h 6064else 6065 :> config-poison.h 6066fi 6067 6068# Save the configure command line for later reuse. 6069cat <<EOD >config.status 6070#!/bin/sh 6071# Generated by configure. 6072# Run this file to recreate the current configuration. 6073# Compiler output produced by configure, useful for debugging 6074# configure, is in config.log if it exists. 6075EOD 6076 6077preserve_env() { 6078 envname=$1 6079 6080 eval envval=\$$envname 6081 6082 if test -n "$envval" 6083 then 6084 echo "$envname='$envval'" >> config.status 6085 echo "export $envname" >> config.status 6086 else 6087 echo "unset $envname" >> config.status 6088 fi 6089} 6090 6091# Preserve various env variables that influence what 6092# features/build target configure will detect 6093preserve_env AR 6094preserve_env AS 6095preserve_env CC 6096preserve_env CPP 6097preserve_env CXX 6098preserve_env INSTALL 6099preserve_env LD 6100preserve_env LD_LIBRARY_PATH 6101preserve_env LIBTOOL 6102preserve_env MAKE 6103preserve_env NM 6104preserve_env OBJCOPY 6105preserve_env PATH 6106preserve_env PKG_CONFIG 6107preserve_env PKG_CONFIG_LIBDIR 6108preserve_env PKG_CONFIG_PATH 6109preserve_env PYTHON 6110preserve_env SDL2_CONFIG 6111preserve_env SMBD 6112preserve_env STRIP 6113preserve_env WINDRES 6114 6115printf "exec" >>config.status 6116for i in "$0" "$@"; do 6117 test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status 6118done 6119echo ' "$@"' >>config.status 6120chmod +x config.status 6121 6122rm -r "$TMPDIR1" 6123