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