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