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