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