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