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