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="" 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="false" 1020 ;; 1021 --enable-gettext) gettext="true" 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 2026 2027nowarn_flags= 2028add_to nowarn_flags -Wno-initializer-overrides 2029add_to nowarn_flags -Wno-missing-include-dirs 2030add_to nowarn_flags -Wno-shift-negative-value 2031add_to nowarn_flags -Wno-string-plus-int 2032add_to nowarn_flags -Wno-typedef-redefinition 2033add_to nowarn_flags -Wno-tautological-type-limit-compare 2034add_to nowarn_flags -Wno-psabi 2035 2036gcc_flags="$warn_flags $nowarn_flags" 2037 2038cc_has_warning_flag() { 2039 write_c_skeleton; 2040 2041 # Use the positive sense of the flag when testing for -Wno-wombat 2042 # support (gcc will happily accept the -Wno- form of unknown 2043 # warning options). 2044 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')" 2045 compile_prog "-Werror $optflag" "" 2046} 2047 2048for flag in $gcc_flags; do 2049 if cc_has_warning_flag $flag ; then 2050 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 2051 fi 2052done 2053 2054if test "$stack_protector" != "no"; then 2055 cat > $TMPC << EOF 2056int main(int argc, char *argv[]) 2057{ 2058 char arr[64], *p = arr, *c = argv[0]; 2059 while (*c) { 2060 *p++ = *c++; 2061 } 2062 return 0; 2063} 2064EOF 2065 gcc_flags="-fstack-protector-strong -fstack-protector-all" 2066 sp_on=0 2067 for flag in $gcc_flags; do 2068 # We need to check both a compile and a link, since some compiler 2069 # setups fail only on a .c->.o compile and some only at link time 2070 if compile_object "-Werror $flag" && 2071 compile_prog "-Werror $flag" ""; then 2072 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 2073 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 2074 sp_on=1 2075 break 2076 fi 2077 done 2078 if test "$stack_protector" = yes; then 2079 if test $sp_on = 0; then 2080 error_exit "Stack protector not supported" 2081 fi 2082 fi 2083fi 2084 2085# Disable -Wmissing-braces on older compilers that warn even for 2086# the "universal" C zero initializer {0}. 2087cat > $TMPC << EOF 2088struct { 2089 int a[2]; 2090} x = {0}; 2091EOF 2092if compile_object "-Werror" "" ; then 2093 : 2094else 2095 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces" 2096fi 2097 2098# Our module code doesn't support Windows 2099if test "$modules" = "yes" && test "$mingw32" = "yes" ; then 2100 error_exit "Modules are not available for Windows" 2101fi 2102 2103# module_upgrades is only reasonable if modules are enabled 2104if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then 2105 error_exit "Can't enable module-upgrades as Modules are not enabled" 2106fi 2107 2108# Static linking is not possible with modules or PIE 2109if test "$static" = "yes" ; then 2110 if test "$modules" = "yes" ; then 2111 error_exit "static and modules are mutually incompatible" 2112 fi 2113fi 2114 2115# Unconditional check for compiler __thread support 2116 cat > $TMPC << EOF 2117static __thread int tls_var; 2118int main(void) { return tls_var; } 2119EOF 2120 2121if ! compile_prog "-Werror" "" ; then 2122 error_exit "Your compiler does not support the __thread specifier for " \ 2123 "Thread-Local Storage (TLS). Please upgrade to a version that does." 2124fi 2125 2126cat > $TMPC << EOF 2127 2128#ifdef __linux__ 2129# define THREAD __thread 2130#else 2131# define THREAD 2132#endif 2133static THREAD int tls_var; 2134int main(void) { return tls_var; } 2135EOF 2136 2137# Check we support --no-pie first; we will need this for building ROMs. 2138if compile_prog "-Werror -fno-pie" "-no-pie"; then 2139 CFLAGS_NOPIE="-fno-pie" 2140 LDFLAGS_NOPIE="-no-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" 2156 CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS" 2157elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then 2158 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS" 2159 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS" 2160 pie="yes" 2161elif test "$pie" = "yes"; then 2162 error_exit "PIE not available due to missing toolchain support" 2163else 2164 echo "Disabling PIE due to missing toolchain support" 2165 pie="no" 2166fi 2167 2168# Detect support for PT_GNU_RELRO + DT_BIND_NOW. 2169# The combination is known as "full relro", because .got.plt is read-only too. 2170if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then 2171 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS" 2172fi 2173 2174########################################## 2175# __sync_fetch_and_and requires at least -march=i486. Many toolchains 2176# use i686 as default anyway, but for those that don't, an explicit 2177# specification is necessary 2178 2179if test "$cpu" = "i386"; then 2180 cat > $TMPC << EOF 2181static int sfaa(int *ptr) 2182{ 2183 return __sync_fetch_and_and(ptr, 0); 2184} 2185 2186int main(void) 2187{ 2188 int val = 42; 2189 val = __sync_val_compare_and_swap(&val, 0, 1); 2190 sfaa(&val); 2191 return val; 2192} 2193EOF 2194 if ! compile_prog "" "" ; then 2195 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS" 2196 fi 2197fi 2198 2199######################################### 2200# Solaris specific configure tool chain decisions 2201 2202if test "$solaris" = "yes" ; then 2203 if has ar; then 2204 : 2205 else 2206 if test -f /usr/ccs/bin/ar ; then 2207 error_exit "No path includes ar" \ 2208 "Add /usr/ccs/bin to your path and rerun configure" 2209 fi 2210 error_exit "No path includes ar" 2211 fi 2212fi 2213 2214if test -z "${target_list+xxx}" ; then 2215 default_targets=yes 2216 for target in $default_target_list; do 2217 target_list="$target_list $target" 2218 done 2219 target_list="${target_list# }" 2220else 2221 default_targets=no 2222 target_list=$(echo "$target_list" | sed -e 's/,/ /g') 2223 for target in $target_list; do 2224 # Check that we recognised the target name; this allows a more 2225 # friendly error message than if we let it fall through. 2226 case " $default_target_list " in 2227 *" $target "*) 2228 ;; 2229 *) 2230 error_exit "Unknown target name '$target'" 2231 ;; 2232 esac 2233 done 2234fi 2235 2236for target in $target_list; do 2237 # if a deprecated target is enabled we note it here 2238 if echo "$deprecated_targets_list" | grep -q "$target"; then 2239 add_to deprecated_features $target 2240 fi 2241done 2242 2243# see if system emulation was really requested 2244case " $target_list " in 2245 *"-softmmu "*) softmmu=yes 2246 ;; 2247 *) softmmu=no 2248 ;; 2249esac 2250 2251feature_not_found() { 2252 feature=$1 2253 remedy=$2 2254 2255 error_exit "User requested feature $feature" \ 2256 "configure was not able to find it." \ 2257 "$remedy" 2258} 2259 2260# --- 2261# big/little endian test 2262cat > $TMPC << EOF 2263short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; 2264short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; 2265extern int foo(short *, short *); 2266int main(int argc, char *argv[]) { 2267 return foo(big_endian, little_endian); 2268} 2269EOF 2270 2271if compile_object ; then 2272 if strings -a $TMPO | grep -q BiGeNdIaN ; then 2273 bigendian="yes" 2274 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then 2275 bigendian="no" 2276 else 2277 echo big/little test failed 2278 fi 2279else 2280 echo big/little test failed 2281fi 2282 2283########################################## 2284# system tools 2285if test -z "$want_tools"; then 2286 if test "$softmmu" = "no"; then 2287 want_tools=no 2288 else 2289 want_tools=yes 2290 fi 2291fi 2292 2293########################################## 2294# cocoa implies not SDL or GTK 2295# (the cocoa UI code currently assumes it is always the active UI 2296# and doesn't interact well with other UI frontend code) 2297if test "$cocoa" = "enabled"; then 2298 if test "$sdl" = "enabled"; then 2299 error_exit "Cocoa and SDL UIs cannot both be enabled at once" 2300 fi 2301 if test "$gtk" = "yes"; then 2302 error_exit "Cocoa and GTK UIs cannot both be enabled at once" 2303 fi 2304 gtk=no 2305 sdl=disabled 2306fi 2307 2308# Some versions of Mac OS X incorrectly define SIZE_MAX 2309cat > $TMPC << EOF 2310#include <stdint.h> 2311#include <stdio.h> 2312int main(int argc, char *argv[]) { 2313 return printf("%zu", SIZE_MAX); 2314} 2315EOF 2316have_broken_size_max=no 2317if ! compile_object -Werror ; then 2318 have_broken_size_max=yes 2319fi 2320 2321########################################## 2322# L2TPV3 probe 2323 2324cat > $TMPC <<EOF 2325#include <sys/socket.h> 2326#include <linux/ip.h> 2327int main(void) { return sizeof(struct mmsghdr); } 2328EOF 2329if compile_prog "" "" ; then 2330 l2tpv3=yes 2331else 2332 l2tpv3=no 2333fi 2334 2335cat > $TMPC <<EOF 2336#include <sys/mman.h> 2337int main(int argc, char *argv[]) { 2338 return mlockall(MCL_FUTURE); 2339} 2340EOF 2341if compile_prog "" "" ; then 2342 have_mlockall=yes 2343else 2344 have_mlockall=no 2345fi 2346 2347######################################### 2348# vhost interdependencies and host support 2349 2350# vhost backends 2351if test "$vhost_user" = "yes" && test "$linux" != "yes"; then 2352 error_exit "vhost-user is only available on Linux" 2353fi 2354test "$vhost_vdpa" = "" && vhost_vdpa=$linux 2355if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then 2356 error_exit "vhost-vdpa is only available on Linux" 2357fi 2358test "$vhost_kernel" = "" && vhost_kernel=$linux 2359if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then 2360 error_exit "vhost-kernel is only available on Linux" 2361fi 2362 2363# vhost-kernel devices 2364test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel 2365if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then 2366 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel" 2367fi 2368test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel 2369if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then 2370 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel" 2371fi 2372 2373# vhost-user backends 2374test "$vhost_net_user" = "" && vhost_net_user=$vhost_user 2375if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then 2376 error_exit "--enable-vhost-net-user requires --enable-vhost-user" 2377fi 2378test "$vhost_crypto" = "" && vhost_crypto=$vhost_user 2379if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then 2380 error_exit "--enable-vhost-crypto requires --enable-vhost-user" 2381fi 2382test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user 2383if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then 2384 error_exit "--enable-vhost-user-fs requires --enable-vhost-user" 2385fi 2386#vhost-vdpa backends 2387test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa 2388if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then 2389 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa" 2390fi 2391 2392# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity 2393if test "$vhost_net" = ""; then 2394 test "$vhost_net_user" = "yes" && vhost_net=yes 2395 test "$vhost_net_vdpa" = "yes" && vhost_net=yes 2396 test "$vhost_kernel" = "yes" && vhost_net=yes 2397fi 2398 2399########################################## 2400# pkg-config probe 2401 2402if ! has "$pkg_config_exe"; then 2403 error_exit "pkg-config binary '$pkg_config_exe' not found" 2404fi 2405 2406########################################## 2407# NPTL probe 2408 2409if test "$linux_user" = "yes"; then 2410 cat > $TMPC <<EOF 2411#include <sched.h> 2412#include <linux/futex.h> 2413int main(void) { 2414#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) 2415#error bork 2416#endif 2417 return 0; 2418} 2419EOF 2420 if ! compile_object ; then 2421 feature_not_found "nptl" "Install glibc and linux kernel headers." 2422 fi 2423fi 2424 2425########################################## 2426# lzo check 2427 2428if test "$lzo" != "no" ; then 2429 cat > $TMPC << EOF 2430#include <lzo/lzo1x.h> 2431int main(void) { lzo_version(); return 0; } 2432EOF 2433 if compile_prog "" "-llzo2" ; then 2434 lzo_libs="-llzo2" 2435 lzo="yes" 2436 else 2437 if test "$lzo" = "yes"; then 2438 feature_not_found "liblzo2" "Install liblzo2 devel" 2439 fi 2440 lzo="no" 2441 fi 2442fi 2443 2444########################################## 2445# snappy check 2446 2447if test "$snappy" != "no" ; then 2448 cat > $TMPC << EOF 2449#include <snappy-c.h> 2450int main(void) { snappy_max_compressed_length(4096); return 0; } 2451EOF 2452 if compile_prog "" "-lsnappy" ; then 2453 snappy_libs='-lsnappy' 2454 snappy="yes" 2455 else 2456 if test "$snappy" = "yes"; then 2457 feature_not_found "libsnappy" "Install libsnappy devel" 2458 fi 2459 snappy="no" 2460 fi 2461fi 2462 2463########################################## 2464# bzip2 check 2465 2466if test "$bzip2" != "no" ; then 2467 cat > $TMPC << EOF 2468#include <bzlib.h> 2469int main(void) { BZ2_bzlibVersion(); return 0; } 2470EOF 2471 if compile_prog "" "-lbz2" ; then 2472 bzip2="yes" 2473 else 2474 if test "$bzip2" = "yes"; then 2475 feature_not_found "libbzip2" "Install libbzip2 devel" 2476 fi 2477 bzip2="no" 2478 fi 2479fi 2480 2481########################################## 2482# lzfse check 2483 2484if test "$lzfse" != "no" ; then 2485 cat > $TMPC << EOF 2486#include <lzfse.h> 2487int main(void) { lzfse_decode_scratch_size(); return 0; } 2488EOF 2489 if compile_prog "" "-llzfse" ; then 2490 lzfse="yes" 2491 else 2492 if test "$lzfse" = "yes"; then 2493 feature_not_found "lzfse" "Install lzfse devel" 2494 fi 2495 lzfse="no" 2496 fi 2497fi 2498 2499########################################## 2500# zstd check 2501 2502if test "$zstd" != "no" ; then 2503 libzstd_minver="1.4.0" 2504 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then 2505 zstd_cflags="$($pkg_config --cflags libzstd)" 2506 zstd_libs="$($pkg_config --libs libzstd)" 2507 zstd="yes" 2508 else 2509 if test "$zstd" = "yes" ; then 2510 feature_not_found "libzstd" "Install libzstd devel" 2511 fi 2512 zstd="no" 2513 fi 2514fi 2515 2516########################################## 2517# libseccomp check 2518 2519if test "$seccomp" != "no" ; then 2520 libseccomp_minver="2.3.0" 2521 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then 2522 seccomp_cflags="$($pkg_config --cflags libseccomp)" 2523 seccomp_libs="$($pkg_config --libs libseccomp)" 2524 seccomp="yes" 2525 else 2526 if test "$seccomp" = "yes" ; then 2527 feature_not_found "libseccomp" \ 2528 "Install libseccomp devel >= $libseccomp_minver" 2529 fi 2530 seccomp="no" 2531 fi 2532fi 2533 2534########################################## 2535# xen probe 2536 2537if test "$xen" != "disabled" ; then 2538 # Check whether Xen library path is specified via --extra-ldflags to avoid 2539 # overriding this setting with pkg-config output. If not, try pkg-config 2540 # to obtain all needed flags. 2541 2542 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 2543 $pkg_config --exists xencontrol ; then 2544 xen_ctrl_version="$(printf '%d%02d%02d' \ 2545 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 2546 xen=enabled 2547 xen_pc="xencontrol xenstore xenforeignmemory xengnttab" 2548 xen_pc="$xen_pc xenevtchn xendevicemodel" 2549 if $pkg_config --exists xentoolcore; then 2550 xen_pc="$xen_pc xentoolcore" 2551 fi 2552 xen_cflags="$($pkg_config --cflags $xen_pc)" 2553 xen_libs="$($pkg_config --libs $xen_pc)" 2554 else 2555 2556 xen_libs="-lxenstore -lxenctrl" 2557 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 2558 2559 # First we test whether Xen headers and libraries are available. 2560 # If no, we are done and there is no Xen support. 2561 # If yes, more tests are run to detect the Xen version. 2562 2563 # Xen (any) 2564 cat > $TMPC <<EOF 2565#include <xenctrl.h> 2566int main(void) { 2567 return 0; 2568} 2569EOF 2570 if ! compile_prog "" "$xen_libs" ; then 2571 # Xen not found 2572 if test "$xen" = "enabled" ; then 2573 feature_not_found "xen" "Install xen devel" 2574 fi 2575 xen=disabled 2576 2577 # Xen unstable 2578 elif 2579 cat > $TMPC <<EOF && 2580#undef XC_WANT_COMPAT_DEVICEMODEL_API 2581#define __XEN_TOOLS__ 2582#include <xendevicemodel.h> 2583#include <xenforeignmemory.h> 2584int main(void) { 2585 xendevicemodel_handle *xd; 2586 xenforeignmemory_handle *xfmem; 2587 2588 xd = xendevicemodel_open(0, 0); 2589 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); 2590 2591 xfmem = xenforeignmemory_open(0, 0); 2592 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); 2593 2594 return 0; 2595} 2596EOF 2597 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2598 then 2599 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2600 xen_ctrl_version=41100 2601 xen=enabled 2602 elif 2603 cat > $TMPC <<EOF && 2604#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2605#include <xenforeignmemory.h> 2606#include <xentoolcore.h> 2607int main(void) { 2608 xenforeignmemory_handle *xfmem; 2609 2610 xfmem = xenforeignmemory_open(0, 0); 2611 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 2612 xentoolcore_restrict_all(0); 2613 2614 return 0; 2615} 2616EOF 2617 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2618 then 2619 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2620 xen_ctrl_version=41000 2621 xen=enabled 2622 elif 2623 cat > $TMPC <<EOF && 2624#undef XC_WANT_COMPAT_DEVICEMODEL_API 2625#define __XEN_TOOLS__ 2626#include <xendevicemodel.h> 2627int main(void) { 2628 xendevicemodel_handle *xd; 2629 2630 xd = xendevicemodel_open(0, 0); 2631 xendevicemodel_close(xd); 2632 2633 return 0; 2634} 2635EOF 2636 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2637 then 2638 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2639 xen_ctrl_version=40900 2640 xen=enabled 2641 elif 2642 cat > $TMPC <<EOF && 2643/* 2644 * If we have stable libs the we don't want the libxc compat 2645 * layers, regardless of what CFLAGS we may have been given. 2646 * 2647 * Also, check if xengnttab_grant_copy_segment_t is defined and 2648 * grant copy operation is implemented. 2649 */ 2650#undef XC_WANT_COMPAT_EVTCHN_API 2651#undef XC_WANT_COMPAT_GNTTAB_API 2652#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2653#include <xenctrl.h> 2654#include <xenstore.h> 2655#include <xenevtchn.h> 2656#include <xengnttab.h> 2657#include <xenforeignmemory.h> 2658#include <stdint.h> 2659#include <xen/hvm/hvm_info_table.h> 2660#if !defined(HVM_MAX_VCPUS) 2661# error HVM_MAX_VCPUS not defined 2662#endif 2663int main(void) { 2664 xc_interface *xc = NULL; 2665 xenforeignmemory_handle *xfmem; 2666 xenevtchn_handle *xe; 2667 xengnttab_handle *xg; 2668 xengnttab_grant_copy_segment_t* seg = NULL; 2669 2670 xs_daemon_open(); 2671 2672 xc = xc_interface_open(0, 0, 0); 2673 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2674 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2675 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2676 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2677 2678 xfmem = xenforeignmemory_open(0, 0); 2679 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2680 2681 xe = xenevtchn_open(0, 0); 2682 xenevtchn_fd(xe); 2683 2684 xg = xengnttab_open(0, 0); 2685 xengnttab_grant_copy(xg, 0, seg); 2686 2687 return 0; 2688} 2689EOF 2690 compile_prog "" "$xen_libs $xen_stable_libs" 2691 then 2692 xen_ctrl_version=40800 2693 xen=enabled 2694 elif 2695 cat > $TMPC <<EOF && 2696/* 2697 * If we have stable libs the we don't want the libxc compat 2698 * layers, regardless of what CFLAGS we may have been given. 2699 */ 2700#undef XC_WANT_COMPAT_EVTCHN_API 2701#undef XC_WANT_COMPAT_GNTTAB_API 2702#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2703#include <xenctrl.h> 2704#include <xenstore.h> 2705#include <xenevtchn.h> 2706#include <xengnttab.h> 2707#include <xenforeignmemory.h> 2708#include <stdint.h> 2709#include <xen/hvm/hvm_info_table.h> 2710#if !defined(HVM_MAX_VCPUS) 2711# error HVM_MAX_VCPUS not defined 2712#endif 2713int main(void) { 2714 xc_interface *xc = NULL; 2715 xenforeignmemory_handle *xfmem; 2716 xenevtchn_handle *xe; 2717 xengnttab_handle *xg; 2718 2719 xs_daemon_open(); 2720 2721 xc = xc_interface_open(0, 0, 0); 2722 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2723 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2724 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2725 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2726 2727 xfmem = xenforeignmemory_open(0, 0); 2728 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2729 2730 xe = xenevtchn_open(0, 0); 2731 xenevtchn_fd(xe); 2732 2733 xg = xengnttab_open(0, 0); 2734 xengnttab_map_grant_ref(xg, 0, 0, 0); 2735 2736 return 0; 2737} 2738EOF 2739 compile_prog "" "$xen_libs $xen_stable_libs" 2740 then 2741 xen_ctrl_version=40701 2742 xen=enabled 2743 2744 # Xen 4.6 2745 elif 2746 cat > $TMPC <<EOF && 2747#include <xenctrl.h> 2748#include <xenstore.h> 2749#include <stdint.h> 2750#include <xen/hvm/hvm_info_table.h> 2751#if !defined(HVM_MAX_VCPUS) 2752# error HVM_MAX_VCPUS not defined 2753#endif 2754int main(void) { 2755 xc_interface *xc; 2756 xs_daemon_open(); 2757 xc = xc_interface_open(0, 0, 0); 2758 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2759 xc_gnttab_open(NULL, 0); 2760 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2761 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2762 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2763 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2764 return 0; 2765} 2766EOF 2767 compile_prog "" "$xen_libs" 2768 then 2769 xen_ctrl_version=40600 2770 xen=enabled 2771 2772 # Xen 4.5 2773 elif 2774 cat > $TMPC <<EOF && 2775#include <xenctrl.h> 2776#include <xenstore.h> 2777#include <stdint.h> 2778#include <xen/hvm/hvm_info_table.h> 2779#if !defined(HVM_MAX_VCPUS) 2780# error HVM_MAX_VCPUS not defined 2781#endif 2782int main(void) { 2783 xc_interface *xc; 2784 xs_daemon_open(); 2785 xc = xc_interface_open(0, 0, 0); 2786 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2787 xc_gnttab_open(NULL, 0); 2788 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2789 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2790 xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 2791 return 0; 2792} 2793EOF 2794 compile_prog "" "$xen_libs" 2795 then 2796 xen_ctrl_version=40500 2797 xen=enabled 2798 2799 elif 2800 cat > $TMPC <<EOF && 2801#include <xenctrl.h> 2802#include <xenstore.h> 2803#include <stdint.h> 2804#include <xen/hvm/hvm_info_table.h> 2805#if !defined(HVM_MAX_VCPUS) 2806# error HVM_MAX_VCPUS not defined 2807#endif 2808int main(void) { 2809 xc_interface *xc; 2810 xs_daemon_open(); 2811 xc = xc_interface_open(0, 0, 0); 2812 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2813 xc_gnttab_open(NULL, 0); 2814 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2815 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2816 return 0; 2817} 2818EOF 2819 compile_prog "" "$xen_libs" 2820 then 2821 xen_ctrl_version=40200 2822 xen=enabled 2823 2824 else 2825 if test "$xen" = "enabled" ; then 2826 feature_not_found "xen (unsupported version)" \ 2827 "Install a supported xen (xen 4.2 or newer)" 2828 fi 2829 xen=disabled 2830 fi 2831 2832 if test "$xen" = enabled; then 2833 if test $xen_ctrl_version -ge 40701 ; then 2834 xen_libs="$xen_libs $xen_stable_libs " 2835 fi 2836 fi 2837 fi 2838fi 2839 2840if test "$xen_pci_passthrough" != "disabled"; then 2841 if test "$xen" = "enabled" && test "$linux" = "yes"; then 2842 xen_pci_passthrough=enabled 2843 else 2844 if test "$xen_pci_passthrough" = "enabled"; then 2845 error_exit "User requested feature Xen PCI Passthrough" \ 2846 " but this feature requires /sys from Linux" 2847 fi 2848 xen_pci_passthrough=disabled 2849 fi 2850fi 2851 2852########################################## 2853# gettext probe 2854if test "$gettext" != "false" ; then 2855 if has xgettext; then 2856 gettext=true 2857 else 2858 if test "$gettext" = "true" ; then 2859 feature_not_found "gettext" "Install xgettext binary" 2860 fi 2861 gettext=false 2862 fi 2863fi 2864 2865########################################## 2866# X11 probe 2867if $pkg_config --exists "x11"; then 2868 have_x11=yes 2869 x11_cflags=$($pkg_config --cflags x11) 2870 x11_libs=$($pkg_config --libs x11) 2871fi 2872 2873########################################## 2874# GTK probe 2875 2876if test "$gtk" != "no"; then 2877 gtkpackage="gtk+-3.0" 2878 gtkx11package="gtk+-x11-3.0" 2879 gtkversion="3.22.0" 2880 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then 2881 gtk_cflags=$($pkg_config --cflags $gtkpackage) 2882 gtk_libs=$($pkg_config --libs $gtkpackage) 2883 gtk_version=$($pkg_config --modversion $gtkpackage) 2884 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then 2885 need_x11=yes 2886 gtk_cflags="$gtk_cflags $x11_cflags" 2887 gtk_libs="$gtk_libs $x11_libs" 2888 fi 2889 gtk="yes" 2890 elif test "$gtk" = "yes"; then 2891 feature_not_found "gtk" "Install gtk3-devel" 2892 else 2893 gtk="no" 2894 fi 2895fi 2896 2897 2898########################################## 2899# GNUTLS probe 2900 2901if test "$gnutls" != "no"; then 2902 pass="no" 2903 if $pkg_config --exists "gnutls >= 3.1.18"; then 2904 gnutls_cflags=$($pkg_config --cflags gnutls) 2905 gnutls_libs=$($pkg_config --libs gnutls) 2906 # Packaging for the static libraries is not always correct. 2907 # At least ubuntu 18.04 ships only shared libraries. 2908 write_c_skeleton 2909 if compile_prog "" "$gnutls_libs" ; then 2910 pass="yes" 2911 fi 2912 fi 2913 if test "$pass" = "no" && test "$gnutls" = "yes"; then 2914 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18" 2915 else 2916 gnutls="$pass" 2917 fi 2918fi 2919 2920 2921# If user didn't give a --disable/enable-gcrypt flag, 2922# then mark as disabled if user requested nettle 2923# explicitly 2924if test -z "$gcrypt" 2925then 2926 if test "$nettle" = "yes" 2927 then 2928 gcrypt="no" 2929 fi 2930fi 2931 2932# If user didn't give a --disable/enable-nettle flag, 2933# then mark as disabled if user requested gcrypt 2934# explicitly 2935if test -z "$nettle" 2936then 2937 if test "$gcrypt" = "yes" 2938 then 2939 nettle="no" 2940 fi 2941fi 2942 2943has_libgcrypt() { 2944 if ! has "libgcrypt-config" 2945 then 2946 return 1 2947 fi 2948 2949 if test -n "$cross_prefix" 2950 then 2951 host=$(libgcrypt-config --host) 2952 if test "$host-" != $cross_prefix 2953 then 2954 return 1 2955 fi 2956 fi 2957 2958 maj=`libgcrypt-config --version | awk -F . '{print $1}'` 2959 min=`libgcrypt-config --version | awk -F . '{print $2}'` 2960 2961 if test $maj != 1 || test $min -lt 5 2962 then 2963 return 1 2964 fi 2965 2966 return 0 2967} 2968 2969 2970if test "$nettle" != "no"; then 2971 pass="no" 2972 if $pkg_config --exists "nettle >= 2.7.1"; then 2973 nettle_cflags=$($pkg_config --cflags nettle) 2974 nettle_libs=$($pkg_config --libs nettle) 2975 nettle_version=$($pkg_config --modversion nettle) 2976 # Link test to make sure the given libraries work (e.g for static). 2977 write_c_skeleton 2978 if compile_prog "" "$nettle_libs" ; then 2979 if test -z "$gcrypt"; then 2980 gcrypt="no" 2981 fi 2982 pass="yes" 2983 fi 2984 fi 2985 if test "$pass" = "yes" 2986 then 2987 cat > $TMPC << EOF 2988#include <nettle/xts.h> 2989int main(void) { 2990 return 0; 2991} 2992EOF 2993 if compile_prog "$nettle_cflags" "$nettle_libs" ; then 2994 nettle_xts=yes 2995 qemu_private_xts=no 2996 fi 2997 fi 2998 if test "$pass" = "no" && test "$nettle" = "yes"; then 2999 feature_not_found "nettle" "Install nettle devel >= 2.7.1" 3000 else 3001 nettle="$pass" 3002 fi 3003fi 3004 3005if test "$gcrypt" != "no"; then 3006 pass="no" 3007 if has_libgcrypt; then 3008 gcrypt_cflags=$(libgcrypt-config --cflags) 3009 gcrypt_libs=$(libgcrypt-config --libs) 3010 # Debian has removed -lgpg-error from libgcrypt-config 3011 # as it "spreads unnecessary dependencies" which in 3012 # turn breaks static builds... 3013 if test "$static" = "yes" 3014 then 3015 gcrypt_libs="$gcrypt_libs -lgpg-error" 3016 fi 3017 3018 # Link test to make sure the given libraries work (e.g for static). 3019 write_c_skeleton 3020 if compile_prog "" "$gcrypt_libs" ; then 3021 pass="yes" 3022 fi 3023 fi 3024 if test "$pass" = "yes"; then 3025 gcrypt="yes" 3026 cat > $TMPC << EOF 3027#include <gcrypt.h> 3028int main(void) { 3029 gcry_mac_hd_t handle; 3030 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5, 3031 GCRY_MAC_FLAG_SECURE, NULL); 3032 return 0; 3033} 3034EOF 3035 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 3036 gcrypt_hmac=yes 3037 fi 3038 cat > $TMPC << EOF 3039#include <gcrypt.h> 3040int main(void) { 3041 gcry_cipher_hd_t handle; 3042 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0); 3043 return 0; 3044} 3045EOF 3046 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 3047 gcrypt_xts=yes 3048 qemu_private_xts=no 3049 fi 3050 elif test "$gcrypt" = "yes"; then 3051 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0" 3052 else 3053 gcrypt="no" 3054 fi 3055fi 3056 3057 3058if test "$gcrypt" = "yes" && test "$nettle" = "yes" 3059then 3060 error_exit "Only one of gcrypt & nettle can be enabled" 3061fi 3062 3063########################################## 3064# libtasn1 - only for the TLS creds/session test suite 3065 3066tasn1=yes 3067tasn1_cflags="" 3068tasn1_libs="" 3069if $pkg_config --exists "libtasn1"; then 3070 tasn1_cflags=$($pkg_config --cflags libtasn1) 3071 tasn1_libs=$($pkg_config --libs libtasn1) 3072else 3073 tasn1=no 3074fi 3075 3076 3077########################################## 3078# PAM probe 3079 3080if test "$auth_pam" != "no"; then 3081 cat > $TMPC <<EOF 3082#include <security/pam_appl.h> 3083#include <stdio.h> 3084int main(void) { 3085 const char *service_name = "qemu"; 3086 const char *user = "frank"; 3087 const struct pam_conv pam_conv = { 0 }; 3088 pam_handle_t *pamh = NULL; 3089 pam_start(service_name, user, &pam_conv, &pamh); 3090 return 0; 3091} 3092EOF 3093 if compile_prog "" "-lpam" ; then 3094 auth_pam=yes 3095 else 3096 if test "$auth_pam" = "yes"; then 3097 feature_not_found "PAM" "Install PAM development package" 3098 else 3099 auth_pam=no 3100 fi 3101 fi 3102fi 3103 3104########################################## 3105# VTE probe 3106 3107if test "$vte" != "no"; then 3108 vteminversion="0.32.0" 3109 if $pkg_config --exists "vte-2.91"; then 3110 vtepackage="vte-2.91" 3111 else 3112 vtepackage="vte-2.90" 3113 fi 3114 if $pkg_config --exists "$vtepackage >= $vteminversion"; then 3115 vte_cflags=$($pkg_config --cflags $vtepackage) 3116 vte_libs=$($pkg_config --libs $vtepackage) 3117 vteversion=$($pkg_config --modversion $vtepackage) 3118 vte="yes" 3119 elif test "$vte" = "yes"; then 3120 feature_not_found "vte" "Install libvte-2.90/2.91 devel" 3121 else 3122 vte="no" 3123 fi 3124fi 3125 3126########################################## 3127# RDMA needs OpenFabrics libraries 3128if test "$rdma" != "no" ; then 3129 cat > $TMPC <<EOF 3130#include <rdma/rdma_cma.h> 3131int main(void) { return 0; } 3132EOF 3133 rdma_libs="-lrdmacm -libverbs -libumad" 3134 if compile_prog "" "$rdma_libs" ; then 3135 rdma="yes" 3136 else 3137 if test "$rdma" = "yes" ; then 3138 error_exit \ 3139 " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 3140 " Your options:" \ 3141 " (1) Fast: Install infiniband packages (devel) from your distro." \ 3142 " (2) Cleanest: Install libraries from www.openfabrics.org" \ 3143 " (3) Also: Install softiwarp if you don't have RDMA hardware" 3144 fi 3145 rdma="no" 3146 fi 3147fi 3148 3149########################################## 3150# PVRDMA detection 3151 3152cat > $TMPC <<EOF && 3153#include <sys/mman.h> 3154 3155int 3156main(void) 3157{ 3158 char buf = 0; 3159 void *addr = &buf; 3160 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 3161 3162 return 0; 3163} 3164EOF 3165 3166if test "$rdma" = "yes" ; then 3167 case "$pvrdma" in 3168 "") 3169 if compile_prog "" ""; then 3170 pvrdma="yes" 3171 else 3172 pvrdma="no" 3173 fi 3174 ;; 3175 "yes") 3176 if ! compile_prog "" ""; then 3177 error_exit "PVRDMA is not supported since mremap is not implemented" 3178 fi 3179 pvrdma="yes" 3180 ;; 3181 "no") 3182 pvrdma="no" 3183 ;; 3184 esac 3185else 3186 if test "$pvrdma" = "yes" ; then 3187 error_exit "PVRDMA requires rdma suppport" 3188 fi 3189 pvrdma="no" 3190fi 3191 3192# Let's see if enhanced reg_mr is supported 3193if test "$pvrdma" = "yes" ; then 3194 3195cat > $TMPC <<EOF && 3196#include <infiniband/verbs.h> 3197 3198int 3199main(void) 3200{ 3201 struct ibv_mr *mr; 3202 struct ibv_pd *pd = NULL; 3203 size_t length = 10; 3204 uint64_t iova = 0; 3205 int access = 0; 3206 void *addr = NULL; 3207 3208 mr = ibv_reg_mr_iova(pd, addr, length, iova, access); 3209 3210 ibv_dereg_mr(mr); 3211 3212 return 0; 3213} 3214EOF 3215 if ! compile_prog "" "-libverbs"; then 3216 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR" 3217 fi 3218fi 3219 3220########################################## 3221# xfsctl() probe, used for file-posix.c 3222if test "$xfs" != "no" ; then 3223 cat > $TMPC << EOF 3224#include <stddef.h> /* NULL */ 3225#include <xfs/xfs.h> 3226int main(void) 3227{ 3228 xfsctl(NULL, 0, 0, NULL); 3229 return 0; 3230} 3231EOF 3232 if compile_prog "" "" ; then 3233 xfs="yes" 3234 else 3235 if test "$xfs" = "yes" ; then 3236 feature_not_found "xfs" "Install xfsprogs/xfslibs devel" 3237 fi 3238 xfs=no 3239 fi 3240fi 3241 3242########################################## 3243# vde libraries probe 3244if test "$vde" != "no" ; then 3245 vde_libs="-lvdeplug" 3246 cat > $TMPC << EOF 3247#include <libvdeplug.h> 3248int main(void) 3249{ 3250 struct vde_open_args a = {0, 0, 0}; 3251 char s[] = ""; 3252 vde_open(s, s, &a); 3253 return 0; 3254} 3255EOF 3256 if compile_prog "" "$vde_libs" ; then 3257 vde=yes 3258 else 3259 if test "$vde" = "yes" ; then 3260 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel" 3261 fi 3262 vde=no 3263 fi 3264fi 3265 3266########################################## 3267# netmap support probe 3268# Apart from looking for netmap headers, we make sure that the host API version 3269# supports the netmap backend (>=11). The upper bound (15) is meant to simulate 3270# a minor/major version number. Minor new features will be marked with values up 3271# to 15, and if something happens that requires a change to the backend we will 3272# move above 15, submit the backend fixes and modify this two bounds. 3273if test "$netmap" != "no" ; then 3274 cat > $TMPC << EOF 3275#include <inttypes.h> 3276#include <net/if.h> 3277#include <net/netmap.h> 3278#include <net/netmap_user.h> 3279#if (NETMAP_API < 11) || (NETMAP_API > 15) 3280#error 3281#endif 3282int main(void) { return 0; } 3283EOF 3284 if compile_prog "" "" ; then 3285 netmap=yes 3286 else 3287 if test "$netmap" = "yes" ; then 3288 feature_not_found "netmap" 3289 fi 3290 netmap=no 3291 fi 3292fi 3293 3294########################################## 3295# libcap-ng library probe 3296if test "$cap_ng" != "no" ; then 3297 cap_libs="-lcap-ng" 3298 cat > $TMPC << EOF 3299#include <cap-ng.h> 3300int main(void) 3301{ 3302 capng_capability_to_name(CAPNG_EFFECTIVE); 3303 return 0; 3304} 3305EOF 3306 if compile_prog "" "$cap_libs" ; then 3307 cap_ng=yes 3308 else 3309 if test "$cap_ng" = "yes" ; then 3310 feature_not_found "cap_ng" "Install libcap-ng devel" 3311 fi 3312 cap_ng=no 3313 fi 3314fi 3315 3316########################################## 3317# Sound support libraries probe 3318 3319audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g') 3320for drv in $audio_drv_list; do 3321 case $drv in 3322 alsa | try-alsa) 3323 if $pkg_config alsa --exists; then 3324 alsa_libs=$($pkg_config alsa --libs) 3325 alsa_cflags=$($pkg_config alsa --cflags) 3326 alsa=yes 3327 if test "$drv" = "try-alsa"; then 3328 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/') 3329 fi 3330 else 3331 if test "$drv" = "try-alsa"; then 3332 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//') 3333 else 3334 error_exit "$drv check failed" \ 3335 "Make sure to have the $drv libs and headers installed." 3336 fi 3337 fi 3338 ;; 3339 3340 pa | try-pa) 3341 if $pkg_config libpulse --exists; then 3342 libpulse=yes 3343 pulse_libs=$($pkg_config libpulse --libs) 3344 pulse_cflags=$($pkg_config libpulse --cflags) 3345 if test "$drv" = "try-pa"; then 3346 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/') 3347 fi 3348 else 3349 if test "$drv" = "try-pa"; then 3350 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//') 3351 else 3352 error_exit "$drv check failed" \ 3353 "Make sure to have the $drv libs and headers installed." 3354 fi 3355 fi 3356 ;; 3357 3358 sdl) 3359 if test "$sdl" = "no"; then 3360 error_exit "sdl not found or disabled, can not use sdl audio driver" 3361 fi 3362 ;; 3363 3364 try-sdl) 3365 if test "$sdl" = "no"; then 3366 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//') 3367 else 3368 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/') 3369 fi 3370 ;; 3371 3372 coreaudio) 3373 coreaudio_libs="-framework CoreAudio" 3374 ;; 3375 3376 dsound) 3377 dsound_libs="-lole32 -ldxguid" 3378 audio_win_int="yes" 3379 ;; 3380 3381 oss) 3382 oss_libs="$oss_lib" 3383 ;; 3384 3385 jack | try-jack) 3386 if $pkg_config jack --exists; then 3387 libjack=yes 3388 jack_libs=$($pkg_config jack --libs) 3389 if test "$drv" = "try-jack"; then 3390 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/') 3391 fi 3392 else 3393 if test "$drv" = "try-jack"; then 3394 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//') 3395 else 3396 error_exit "$drv check failed" \ 3397 "Make sure to have the $drv libs and headers installed." 3398 fi 3399 fi 3400 ;; 3401 3402 *) 3403 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { 3404 error_exit "Unknown driver '$drv' selected" \ 3405 "Possible drivers are: $audio_possible_drivers" 3406 } 3407 ;; 3408 esac 3409done 3410 3411########################################## 3412# BrlAPI probe 3413 3414if test "$brlapi" != "no" ; then 3415 brlapi_libs="-lbrlapi" 3416 cat > $TMPC << EOF 3417#include <brlapi.h> 3418#include <stddef.h> 3419int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); } 3420EOF 3421 if compile_prog "" "$brlapi_libs" ; then 3422 brlapi=yes 3423 else 3424 if test "$brlapi" = "yes" ; then 3425 feature_not_found "brlapi" "Install brlapi devel" 3426 fi 3427 brlapi=no 3428 fi 3429fi 3430 3431########################################## 3432# curl probe 3433if test "$curl" != "no" ; then 3434 if $pkg_config libcurl --exists; then 3435 curlconfig="$pkg_config libcurl" 3436 else 3437 curlconfig=curl-config 3438 fi 3439 cat > $TMPC << EOF 3440#include <curl/curl.h> 3441int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; } 3442EOF 3443 curl_cflags=$($curlconfig --cflags 2>/dev/null) 3444 curl_libs=$($curlconfig --libs 2>/dev/null) 3445 if compile_prog "$curl_cflags" "$curl_libs" ; then 3446 curl=yes 3447 else 3448 if test "$curl" = "yes" ; then 3449 feature_not_found "curl" "Install libcurl devel" 3450 fi 3451 curl=no 3452 fi 3453fi # test "$curl" 3454 3455########################################## 3456# glib support probe 3457 3458glib_req_ver=2.48 3459glib_modules=gthread-2.0 3460if test "$modules" = yes; then 3461 glib_modules="$glib_modules gmodule-export-2.0" 3462fi 3463if test "$plugins" = yes; then 3464 glib_modules="$glib_modules gmodule-2.0" 3465fi 3466 3467for i in $glib_modules; do 3468 if $pkg_config --atleast-version=$glib_req_ver $i; then 3469 glib_cflags=$($pkg_config --cflags $i) 3470 glib_libs=$($pkg_config --libs $i) 3471 else 3472 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 3473 fi 3474done 3475 3476# This workaround is required due to a bug in pkg-config file for glib as it 3477# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 3478 3479if test "$static" = yes && test "$mingw32" = yes; then 3480 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags" 3481fi 3482 3483if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then 3484 gio_cflags=$($pkg_config --cflags gio-2.0) 3485 gio_libs=$($pkg_config --libs gio-2.0) 3486 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0) 3487 if [ ! -x "$gdbus_codegen" ]; then 3488 gdbus_codegen= 3489 fi 3490 # Check that the libraries actually work -- Ubuntu 18.04 ships 3491 # with pkg-config --static --libs data for gio-2.0 that is missing 3492 # -lblkid and will give a link error. 3493 cat > $TMPC <<EOF 3494#include <gio/gio.h> 3495int main(void) 3496{ 3497 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0); 3498 return 0; 3499} 3500EOF 3501 if compile_prog "$gio_cflags" "$gio_libs" ; then 3502 gio=yes 3503 else 3504 gio=no 3505 fi 3506else 3507 gio=no 3508fi 3509 3510if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then 3511 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)" 3512 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)" 3513fi 3514 3515# Sanity check that the current size_t matches the 3516# size that glib thinks it should be. This catches 3517# problems on multi-arch where people try to build 3518# 32-bit QEMU while pointing at 64-bit glib headers 3519cat > $TMPC <<EOF 3520#include <glib.h> 3521#include <unistd.h> 3522 3523#define QEMU_BUILD_BUG_ON(x) \ 3524 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 3525 3526int main(void) { 3527 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 3528 return 0; 3529} 3530EOF 3531 3532if ! compile_prog "$glib_cflags" "$glib_libs" ; then 3533 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 3534 "You probably need to set PKG_CONFIG_LIBDIR"\ 3535 "to point to the right pkg-config files for your"\ 3536 "build target" 3537fi 3538 3539# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 3540cat > $TMPC << EOF 3541#include <glib.h> 3542int main(void) { return 0; } 3543EOF 3544if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3545 if cc_has_warning_flag "-Wno-unknown-attributes"; then 3546 glib_cflags="-Wno-unknown-attributes $glib_cflags" 3547 CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS" 3548 fi 3549fi 3550 3551# Silence clang warnings triggered by glib < 2.57.2 3552cat > $TMPC << EOF 3553#include <glib.h> 3554typedef struct Foo { 3555 int i; 3556} Foo; 3557static void foo_free(Foo *f) 3558{ 3559 g_free(f); 3560} 3561G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free); 3562int main(void) { return 0; } 3563EOF 3564if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3565 if cc_has_warning_flag "-Wno-unused-function"; then 3566 glib_cflags="$glib_cflags -Wno-unused-function" 3567 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function" 3568 fi 3569fi 3570 3571########################################## 3572# SHA command probe for modules 3573if test "$modules" = yes; then 3574 shacmd_probe="sha1sum sha1 shasum" 3575 for c in $shacmd_probe; do 3576 if has $c; then 3577 shacmd="$c" 3578 break 3579 fi 3580 done 3581 if test "$shacmd" = ""; then 3582 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 3583 fi 3584fi 3585 3586########################################## 3587# pthread probe 3588PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 3589 3590pthread=no 3591cat > $TMPC << EOF 3592#include <pthread.h> 3593static void *f(void *p) { return NULL; } 3594int main(void) { 3595 pthread_t thread; 3596 pthread_create(&thread, 0, f, 0); 3597 return 0; 3598} 3599EOF 3600if compile_prog "" "" ; then 3601 pthread=yes 3602else 3603 for pthread_lib in $PTHREADLIBS_LIST; do 3604 if compile_prog "" "$pthread_lib" ; then 3605 pthread=yes 3606 found=no 3607 for lib_entry in $LIBS; do 3608 if test "$lib_entry" = "$pthread_lib"; then 3609 found=yes 3610 break 3611 fi 3612 done 3613 if test "$found" = "no"; then 3614 LIBS="$pthread_lib $LIBS" 3615 fi 3616 break 3617 fi 3618 done 3619fi 3620 3621if test "$mingw32" != yes && test "$pthread" = no; then 3622 error_exit "pthread check failed" \ 3623 "Make sure to have the pthread libs and headers installed." 3624fi 3625 3626# check for pthread_setname_np with thread id 3627pthread_setname_np_w_tid=no 3628cat > $TMPC << EOF 3629#include <pthread.h> 3630 3631static void *f(void *p) { return NULL; } 3632int main(void) 3633{ 3634 pthread_t thread; 3635 pthread_create(&thread, 0, f, 0); 3636 pthread_setname_np(thread, "QEMU"); 3637 return 0; 3638} 3639EOF 3640if compile_prog "" "$pthread_lib" ; then 3641 pthread_setname_np_w_tid=yes 3642fi 3643 3644# check for pthread_setname_np without thread id 3645pthread_setname_np_wo_tid=no 3646cat > $TMPC << EOF 3647#include <pthread.h> 3648 3649static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; } 3650int main(void) 3651{ 3652 pthread_t thread; 3653 pthread_create(&thread, 0, f, 0); 3654 return 0; 3655} 3656EOF 3657if compile_prog "" "$pthread_lib" ; then 3658 pthread_setname_np_wo_tid=yes 3659fi 3660 3661########################################## 3662# rbd probe 3663if test "$rbd" != "no" ; then 3664 cat > $TMPC <<EOF 3665#include <stdio.h> 3666#include <rbd/librbd.h> 3667int main(void) { 3668 rados_t cluster; 3669 rados_create(&cluster, NULL); 3670 return 0; 3671} 3672EOF 3673 rbd_libs="-lrbd -lrados" 3674 if compile_prog "" "$rbd_libs" ; then 3675 rbd=yes 3676 else 3677 if test "$rbd" = "yes" ; then 3678 feature_not_found "rados block device" "Install librbd/ceph devel" 3679 fi 3680 rbd=no 3681 fi 3682fi 3683 3684########################################## 3685# libssh probe 3686if test "$libssh" != "no" ; then 3687 if $pkg_config --exists libssh; then 3688 libssh_cflags=$($pkg_config libssh --cflags) 3689 libssh_libs=$($pkg_config libssh --libs) 3690 libssh=yes 3691 else 3692 if test "$libssh" = "yes" ; then 3693 error_exit "libssh required for --enable-libssh" 3694 fi 3695 libssh=no 3696 fi 3697fi 3698 3699########################################## 3700# Check for libssh 0.8 3701# This is done like this instead of using the LIBSSH_VERSION_* and 3702# SSH_VERSION_* macros because some distributions in the past shipped 3703# snapshots of the future 0.8 from Git, and those snapshots did not 3704# have updated version numbers (still referring to 0.7.0). 3705 3706if test "$libssh" = "yes"; then 3707 cat > $TMPC <<EOF 3708#include <libssh/libssh.h> 3709int main(void) { return ssh_get_server_publickey(NULL, NULL); } 3710EOF 3711 if compile_prog "$libssh_cflags" "$libssh_libs"; then 3712 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags" 3713 fi 3714fi 3715 3716########################################## 3717# linux-aio probe 3718 3719if test "$linux_aio" != "no" ; then 3720 cat > $TMPC <<EOF 3721#include <libaio.h> 3722#include <sys/eventfd.h> 3723#include <stddef.h> 3724int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 3725EOF 3726 if compile_prog "" "-laio" ; then 3727 linux_aio=yes 3728 else 3729 if test "$linux_aio" = "yes" ; then 3730 feature_not_found "linux AIO" "Install libaio devel" 3731 fi 3732 linux_aio=no 3733 fi 3734fi 3735########################################## 3736# linux-io-uring probe 3737 3738if test "$linux_io_uring" != "no" ; then 3739 if $pkg_config liburing; then 3740 linux_io_uring_cflags=$($pkg_config --cflags liburing) 3741 linux_io_uring_libs=$($pkg_config --libs liburing) 3742 linux_io_uring=yes 3743 else 3744 if test "$linux_io_uring" = "yes" ; then 3745 feature_not_found "linux io_uring" "Install liburing devel" 3746 fi 3747 linux_io_uring=no 3748 fi 3749fi 3750 3751########################################## 3752# TPM emulation is only on POSIX 3753 3754if test "$tpm" = ""; then 3755 if test "$mingw32" = "yes"; then 3756 tpm=no 3757 else 3758 tpm=yes 3759 fi 3760elif test "$tpm" = "yes"; then 3761 if test "$mingw32" = "yes" ; then 3762 error_exit "TPM emulation only available on POSIX systems" 3763 fi 3764fi 3765 3766########################################## 3767# attr probe 3768 3769libattr_libs= 3770if test "$attr" != "no" ; then 3771 cat > $TMPC <<EOF 3772#include <stdio.h> 3773#include <sys/types.h> 3774#ifdef CONFIG_LIBATTR 3775#include <attr/xattr.h> 3776#else 3777#include <sys/xattr.h> 3778#endif 3779int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 3780EOF 3781 if compile_prog "" "" ; then 3782 attr=yes 3783 # Older distros have <attr/xattr.h>, and need -lattr: 3784 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 3785 attr=yes 3786 libattr_libs="-lattr" 3787 libattr=yes 3788 else 3789 if test "$attr" = "yes" ; then 3790 feature_not_found "ATTR" "Install libc6 or libattr devel" 3791 fi 3792 attr=no 3793 fi 3794fi 3795 3796########################################## 3797# iovec probe 3798cat > $TMPC <<EOF 3799#include <sys/types.h> 3800#include <sys/uio.h> 3801#include <unistd.h> 3802int main(void) { return sizeof(struct iovec); } 3803EOF 3804iovec=no 3805if compile_prog "" "" ; then 3806 iovec=yes 3807fi 3808 3809########################################## 3810# preadv probe 3811cat > $TMPC <<EOF 3812#include <sys/types.h> 3813#include <sys/uio.h> 3814#include <unistd.h> 3815int main(void) { return preadv(0, 0, 0, 0); } 3816EOF 3817preadv=no 3818if compile_prog "" "" ; then 3819 preadv=yes 3820fi 3821 3822########################################## 3823# fdt probe 3824 3825case "$fdt" in 3826 auto | enabled | internal) 3827 # Simpler to always update submodule, even if not needed. 3828 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then 3829 git_submodules="${git_submodules} dtc" 3830 fi 3831 ;; 3832esac 3833 3834########################################## 3835# opengl probe (for sdl2, gtk, milkymist-tmu2) 3836 3837gbm="no" 3838if $pkg_config gbm; then 3839 gbm_cflags="$($pkg_config --cflags gbm)" 3840 gbm_libs="$($pkg_config --libs gbm)" 3841 gbm="yes" 3842fi 3843 3844if test "$opengl" != "no" ; then 3845 opengl_pkgs="epoxy gbm" 3846 if $pkg_config $opengl_pkgs; then 3847 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 3848 opengl_libs="$($pkg_config --libs $opengl_pkgs)" 3849 opengl=yes 3850 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 3851 gtk_gl="yes" 3852 fi 3853 else 3854 if test "$opengl" = "yes" ; then 3855 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 3856 fi 3857 opengl_cflags="" 3858 opengl_libs="" 3859 opengl=no 3860 fi 3861fi 3862 3863if test "$opengl" = "yes"; then 3864 cat > $TMPC << EOF 3865#include <epoxy/egl.h> 3866#ifndef EGL_MESA_image_dma_buf_export 3867# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 3868#endif 3869int main(void) { return 0; } 3870EOF 3871 if compile_prog "" "" ; then 3872 opengl_dmabuf=yes 3873 fi 3874fi 3875 3876if test "$opengl" = "yes" && test "$have_x11" = "yes"; then 3877 for target in $target_list; do 3878 case $target in 3879 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL 3880 need_x11=yes 3881 ;; 3882 esac 3883 done 3884fi 3885 3886########################################## 3887# libxml2 probe 3888if test "$libxml2" != "no" ; then 3889 if $pkg_config --exists libxml-2.0; then 3890 libxml2="yes" 3891 libxml2_cflags=$($pkg_config --cflags libxml-2.0) 3892 libxml2_libs=$($pkg_config --libs libxml-2.0) 3893 else 3894 if test "$libxml2" = "yes"; then 3895 feature_not_found "libxml2" "Install libxml2 devel" 3896 fi 3897 libxml2="no" 3898 fi 3899fi 3900 3901########################################## 3902# glusterfs probe 3903if test "$glusterfs" != "no" ; then 3904 if $pkg_config --atleast-version=3 glusterfs-api; then 3905 glusterfs="yes" 3906 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 3907 glusterfs_libs=$($pkg_config --libs glusterfs-api) 3908 if $pkg_config --atleast-version=4 glusterfs-api; then 3909 glusterfs_xlator_opt="yes" 3910 fi 3911 if $pkg_config --atleast-version=5 glusterfs-api; then 3912 glusterfs_discard="yes" 3913 fi 3914 if $pkg_config --atleast-version=6 glusterfs-api; then 3915 glusterfs_fallocate="yes" 3916 glusterfs_zerofill="yes" 3917 fi 3918 cat > $TMPC << EOF 3919#include <glusterfs/api/glfs.h> 3920 3921int 3922main(void) 3923{ 3924 /* new glfs_ftruncate() passes two additional args */ 3925 return glfs_ftruncate(NULL, 0, NULL, NULL); 3926} 3927EOF 3928 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 3929 glusterfs_ftruncate_has_stat="yes" 3930 fi 3931 cat > $TMPC << EOF 3932#include <glusterfs/api/glfs.h> 3933 3934/* new glfs_io_cbk() passes two additional glfs_stat structs */ 3935static void 3936glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data) 3937{} 3938 3939int 3940main(void) 3941{ 3942 glfs_io_cbk iocb = &glusterfs_iocb; 3943 iocb(NULL, 0 , NULL, NULL, NULL); 3944 return 0; 3945} 3946EOF 3947 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 3948 glusterfs_iocb_has_stat="yes" 3949 fi 3950 else 3951 if test "$glusterfs" = "yes" ; then 3952 feature_not_found "GlusterFS backend support" \ 3953 "Install glusterfs-api devel >= 3" 3954 fi 3955 glusterfs="no" 3956 fi 3957fi 3958 3959# Check for inotify functions when we are building linux-user 3960# emulator. This is done because older glibc versions don't 3961# have syscall stubs for these implemented. In that case we 3962# don't provide them even if kernel supports them. 3963# 3964inotify=no 3965cat > $TMPC << EOF 3966#include <sys/inotify.h> 3967 3968int 3969main(void) 3970{ 3971 /* try to start inotify */ 3972 return inotify_init(); 3973} 3974EOF 3975if compile_prog "" "" ; then 3976 inotify=yes 3977fi 3978 3979inotify1=no 3980cat > $TMPC << EOF 3981#include <sys/inotify.h> 3982 3983int 3984main(void) 3985{ 3986 /* try to start inotify */ 3987 return inotify_init1(0); 3988} 3989EOF 3990if compile_prog "" "" ; then 3991 inotify1=yes 3992fi 3993 3994# check if pipe2 is there 3995pipe2=no 3996cat > $TMPC << EOF 3997#include <unistd.h> 3998#include <fcntl.h> 3999 4000int main(void) 4001{ 4002 int pipefd[2]; 4003 return pipe2(pipefd, O_CLOEXEC); 4004} 4005EOF 4006if compile_prog "" "" ; then 4007 pipe2=yes 4008fi 4009 4010# check if accept4 is there 4011accept4=no 4012cat > $TMPC << EOF 4013#include <sys/socket.h> 4014#include <stddef.h> 4015 4016int main(void) 4017{ 4018 accept4(0, NULL, NULL, SOCK_CLOEXEC); 4019 return 0; 4020} 4021EOF 4022if compile_prog "" "" ; then 4023 accept4=yes 4024fi 4025 4026# check if tee/splice is there. vmsplice was added same time. 4027splice=no 4028cat > $TMPC << EOF 4029#include <unistd.h> 4030#include <fcntl.h> 4031#include <limits.h> 4032 4033int main(void) 4034{ 4035 int len, fd = 0; 4036 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 4037 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 4038 return 0; 4039} 4040EOF 4041if compile_prog "" "" ; then 4042 splice=yes 4043fi 4044 4045########################################## 4046# libnuma probe 4047 4048if test "$numa" != "no" ; then 4049 cat > $TMPC << EOF 4050#include <numa.h> 4051int main(void) { return numa_available(); } 4052EOF 4053 4054 if compile_prog "" "-lnuma" ; then 4055 numa=yes 4056 numa_libs="-lnuma" 4057 else 4058 if test "$numa" = "yes" ; then 4059 feature_not_found "numa" "install numactl devel" 4060 fi 4061 numa=no 4062 fi 4063fi 4064 4065malloc=system 4066if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 4067 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 4068 exit 1 4069elif test "$tcmalloc" = "yes" ; then 4070 malloc=tcmalloc 4071elif test "$jemalloc" = "yes" ; then 4072 malloc=jemalloc 4073fi 4074 4075########################################## 4076# signalfd probe 4077signalfd="no" 4078cat > $TMPC << EOF 4079#include <unistd.h> 4080#include <sys/syscall.h> 4081#include <signal.h> 4082int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4083EOF 4084 4085if compile_prog "" "" ; then 4086 signalfd=yes 4087fi 4088 4089# check if optreset global is declared by <getopt.h> 4090optreset="no" 4091cat > $TMPC << EOF 4092#include <getopt.h> 4093int main(void) { return optreset; } 4094EOF 4095 4096if compile_prog "" "" ; then 4097 optreset=yes 4098fi 4099 4100# check if eventfd is supported 4101eventfd=no 4102cat > $TMPC << EOF 4103#include <sys/eventfd.h> 4104 4105int main(void) 4106{ 4107 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4108} 4109EOF 4110if compile_prog "" "" ; then 4111 eventfd=yes 4112fi 4113 4114# check if memfd is supported 4115memfd=no 4116cat > $TMPC << EOF 4117#include <sys/mman.h> 4118 4119int main(void) 4120{ 4121 return memfd_create("foo", MFD_ALLOW_SEALING); 4122} 4123EOF 4124if compile_prog "" "" ; then 4125 memfd=yes 4126fi 4127 4128# check for usbfs 4129have_usbfs=no 4130if test "$linux_user" = "yes"; then 4131 cat > $TMPC << EOF 4132#include <linux/usbdevice_fs.h> 4133 4134#ifndef USBDEVFS_GET_CAPABILITIES 4135#error "USBDEVFS_GET_CAPABILITIES undefined" 4136#endif 4137 4138#ifndef USBDEVFS_DISCONNECT_CLAIM 4139#error "USBDEVFS_DISCONNECT_CLAIM undefined" 4140#endif 4141 4142int main(void) 4143{ 4144 return 0; 4145} 4146EOF 4147 if compile_prog "" ""; then 4148 have_usbfs=yes 4149 fi 4150fi 4151 4152# check for fallocate 4153fallocate=no 4154cat > $TMPC << EOF 4155#include <fcntl.h> 4156 4157int main(void) 4158{ 4159 fallocate(0, 0, 0, 0); 4160 return 0; 4161} 4162EOF 4163if compile_prog "" "" ; then 4164 fallocate=yes 4165fi 4166 4167# check for fallocate hole punching 4168fallocate_punch_hole=no 4169cat > $TMPC << EOF 4170#include <fcntl.h> 4171#include <linux/falloc.h> 4172 4173int main(void) 4174{ 4175 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4176 return 0; 4177} 4178EOF 4179if compile_prog "" "" ; then 4180 fallocate_punch_hole=yes 4181fi 4182 4183# check that fallocate supports range zeroing inside the file 4184fallocate_zero_range=no 4185cat > $TMPC << EOF 4186#include <fcntl.h> 4187#include <linux/falloc.h> 4188 4189int main(void) 4190{ 4191 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4192 return 0; 4193} 4194EOF 4195if compile_prog "" "" ; then 4196 fallocate_zero_range=yes 4197fi 4198 4199# check for posix_fallocate 4200posix_fallocate=no 4201cat > $TMPC << EOF 4202#include <fcntl.h> 4203 4204int main(void) 4205{ 4206 posix_fallocate(0, 0, 0); 4207 return 0; 4208} 4209EOF 4210if compile_prog "" "" ; then 4211 posix_fallocate=yes 4212fi 4213 4214# check for sync_file_range 4215sync_file_range=no 4216cat > $TMPC << EOF 4217#include <fcntl.h> 4218 4219int main(void) 4220{ 4221 sync_file_range(0, 0, 0, 0); 4222 return 0; 4223} 4224EOF 4225if compile_prog "" "" ; then 4226 sync_file_range=yes 4227fi 4228 4229# check for linux/fiemap.h and FS_IOC_FIEMAP 4230fiemap=no 4231cat > $TMPC << EOF 4232#include <sys/ioctl.h> 4233#include <linux/fs.h> 4234#include <linux/fiemap.h> 4235 4236int main(void) 4237{ 4238 ioctl(0, FS_IOC_FIEMAP, 0); 4239 return 0; 4240} 4241EOF 4242if compile_prog "" "" ; then 4243 fiemap=yes 4244fi 4245 4246# check for dup3 4247dup3=no 4248cat > $TMPC << EOF 4249#include <unistd.h> 4250 4251int main(void) 4252{ 4253 dup3(0, 0, 0); 4254 return 0; 4255} 4256EOF 4257if compile_prog "" "" ; then 4258 dup3=yes 4259fi 4260 4261# check for ppoll support 4262ppoll=no 4263cat > $TMPC << EOF 4264#include <poll.h> 4265 4266int main(void) 4267{ 4268 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 4269 ppoll(&pfd, 1, 0, 0); 4270 return 0; 4271} 4272EOF 4273if compile_prog "" "" ; then 4274 ppoll=yes 4275fi 4276 4277# check for prctl(PR_SET_TIMERSLACK , ... ) support 4278prctl_pr_set_timerslack=no 4279cat > $TMPC << EOF 4280#include <sys/prctl.h> 4281 4282int main(void) 4283{ 4284 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4285 return 0; 4286} 4287EOF 4288if compile_prog "" "" ; then 4289 prctl_pr_set_timerslack=yes 4290fi 4291 4292# check for epoll support 4293epoll=no 4294cat > $TMPC << EOF 4295#include <sys/epoll.h> 4296 4297int main(void) 4298{ 4299 epoll_create(0); 4300 return 0; 4301} 4302EOF 4303if compile_prog "" "" ; then 4304 epoll=yes 4305fi 4306 4307# epoll_create1 is a later addition 4308# so we must check separately for its presence 4309epoll_create1=no 4310cat > $TMPC << EOF 4311#include <sys/epoll.h> 4312 4313int main(void) 4314{ 4315 /* Note that we use epoll_create1 as a value, not as 4316 * a function being called. This is necessary so that on 4317 * old SPARC glibc versions where the function was present in 4318 * the library but not declared in the header file we will 4319 * fail the configure check. (Otherwise we will get a compiler 4320 * warning but not an error, and will proceed to fail the 4321 * qemu compile where we compile with -Werror.) 4322 */ 4323 return (int)(uintptr_t)&epoll_create1; 4324} 4325EOF 4326if compile_prog "" "" ; then 4327 epoll_create1=yes 4328fi 4329 4330# check for sendfile support 4331sendfile=no 4332cat > $TMPC << EOF 4333#include <sys/sendfile.h> 4334 4335int main(void) 4336{ 4337 return sendfile(0, 0, 0, 0); 4338} 4339EOF 4340if compile_prog "" "" ; then 4341 sendfile=yes 4342fi 4343 4344# check for timerfd support (glibc 2.8 and newer) 4345timerfd=no 4346cat > $TMPC << EOF 4347#include <sys/timerfd.h> 4348 4349int main(void) 4350{ 4351 return(timerfd_create(CLOCK_REALTIME, 0)); 4352} 4353EOF 4354if compile_prog "" "" ; then 4355 timerfd=yes 4356fi 4357 4358# check for setns and unshare support 4359setns=no 4360cat > $TMPC << EOF 4361#include <sched.h> 4362 4363int main(void) 4364{ 4365 int ret; 4366 ret = setns(0, 0); 4367 ret = unshare(0); 4368 return ret; 4369} 4370EOF 4371if compile_prog "" "" ; then 4372 setns=yes 4373fi 4374 4375# clock_adjtime probe 4376clock_adjtime=no 4377cat > $TMPC <<EOF 4378#include <time.h> 4379 4380int main(void) 4381{ 4382 return clock_adjtime(0, 0); 4383} 4384EOF 4385clock_adjtime=no 4386if compile_prog "" "" ; then 4387 clock_adjtime=yes 4388fi 4389 4390# syncfs probe 4391syncfs=no 4392cat > $TMPC <<EOF 4393#include <unistd.h> 4394 4395int main(void) 4396{ 4397 return syncfs(0); 4398} 4399EOF 4400syncfs=no 4401if compile_prog "" "" ; then 4402 syncfs=yes 4403fi 4404 4405# Search for bswap_32 function 4406byteswap_h=no 4407cat > $TMPC << EOF 4408#include <byteswap.h> 4409int main(void) { return bswap_32(0); } 4410EOF 4411if compile_prog "" "" ; then 4412 byteswap_h=yes 4413fi 4414 4415# Search for bswap32 function 4416bswap_h=no 4417cat > $TMPC << EOF 4418#include <sys/endian.h> 4419#include <sys/types.h> 4420#include <machine/bswap.h> 4421int main(void) { return bswap32(0); } 4422EOF 4423if compile_prog "" "" ; then 4424 bswap_h=yes 4425fi 4426 4427########################################## 4428# Do we have libiscsi >= 1.9.0 4429if test "$libiscsi" != "no" ; then 4430 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4431 libiscsi="yes" 4432 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4433 libiscsi_libs=$($pkg_config --libs libiscsi) 4434 else 4435 if test "$libiscsi" = "yes" ; then 4436 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4437 fi 4438 libiscsi="no" 4439 fi 4440fi 4441 4442########################################## 4443# Do we need librt 4444# uClibc provides 2 versions of clock_gettime(), one with realtime 4445# support and one without. This means that the clock_gettime() don't 4446# need -lrt. We still need it for timer_create() so we check for this 4447# function in addition. 4448cat > $TMPC <<EOF 4449#include <signal.h> 4450#include <time.h> 4451int main(void) { 4452 timer_create(CLOCK_REALTIME, NULL, NULL); 4453 return clock_gettime(CLOCK_REALTIME, NULL); 4454} 4455EOF 4456 4457if compile_prog "" "" ; then 4458 : 4459# we need pthread for static linking. use previous pthread test result 4460elif compile_prog "" "$pthread_lib -lrt" ; then 4461 LIBS="$LIBS -lrt" 4462fi 4463 4464# Check whether we have openpty() in either libc or libutil 4465cat > $TMPC << EOF 4466extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 4467int main(void) { return openpty(0, 0, 0, 0, 0); } 4468EOF 4469 4470have_openpty="no" 4471if compile_prog "" "" ; then 4472 have_openpty="yes" 4473else 4474 if compile_prog "" "-lutil" ; then 4475 have_openpty="yes" 4476 fi 4477fi 4478 4479########################################## 4480# spice probe 4481if test "$spice" != "no" ; then 4482 cat > $TMPC << EOF 4483#include <spice.h> 4484int main(void) { spice_server_new(); return 0; } 4485EOF 4486 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4487 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4488 if $pkg_config --atleast-version=0.12.5 spice-server && \ 4489 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4490 compile_prog "$spice_cflags" "$spice_libs" ; then 4491 spice="yes" 4492 else 4493 if test "$spice" = "yes" ; then 4494 feature_not_found "spice" \ 4495 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 4496 fi 4497 spice="no" 4498 fi 4499fi 4500 4501# check for smartcard support 4502if test "$smartcard" != "no"; then 4503 if $pkg_config --atleast-version=2.5.1 libcacard; then 4504 libcacard_cflags=$($pkg_config --cflags libcacard) 4505 libcacard_libs=$($pkg_config --libs libcacard) 4506 smartcard="yes" 4507 else 4508 if test "$smartcard" = "yes"; then 4509 feature_not_found "smartcard" "Install libcacard devel" 4510 fi 4511 smartcard="no" 4512 fi 4513fi 4514 4515# check for libusb 4516if test "$libusb" != "no" ; then 4517 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 4518 libusb="yes" 4519 libusb_cflags=$($pkg_config --cflags libusb-1.0) 4520 libusb_libs=$($pkg_config --libs libusb-1.0) 4521 else 4522 if test "$libusb" = "yes"; then 4523 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 4524 fi 4525 libusb="no" 4526 fi 4527fi 4528 4529# check for usbredirparser for usb network redirection support 4530if test "$usb_redir" != "no" ; then 4531 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 4532 usb_redir="yes" 4533 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4534 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 4535 else 4536 if test "$usb_redir" = "yes"; then 4537 feature_not_found "usb-redir" "Install usbredir devel" 4538 fi 4539 usb_redir="no" 4540 fi 4541fi 4542 4543########################################## 4544# check if we have VSS SDK headers for win 4545 4546if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 4547 test "$vss_win32_sdk" != "no" ; then 4548 case "$vss_win32_sdk" in 4549 "") vss_win32_include="-isystem $source_path" ;; 4550 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4551 # handle path with spaces. So we symlink the headers into ".sdk/vss". 4552 vss_win32_include="-isystem $source_path/.sdk/vss" 4553 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4554 ;; 4555 *) vss_win32_include="-isystem $vss_win32_sdk" 4556 esac 4557 cat > $TMPC << EOF 4558#define __MIDL_user_allocate_free_DEFINED__ 4559#include <inc/win2003/vss.h> 4560int main(void) { return VSS_CTX_BACKUP; } 4561EOF 4562 if compile_prog "$vss_win32_include" "" ; then 4563 guest_agent_with_vss="yes" 4564 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4565 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4566 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4567 else 4568 if test "$vss_win32_sdk" != "" ; then 4569 echo "ERROR: Please download and install Microsoft VSS SDK:" 4570 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4571 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4572 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4573 echo "ERROR: The headers are extracted in the directory \`inc'." 4574 feature_not_found "VSS support" 4575 fi 4576 guest_agent_with_vss="no" 4577 fi 4578fi 4579 4580########################################## 4581# lookup Windows platform SDK (if not specified) 4582# The SDK is needed only to build .tlb (type library) file of guest agent 4583# VSS provider from the source. It is usually unnecessary because the 4584# pre-compiled .tlb file is included. 4585 4586if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 4587 test "$guest_agent_with_vss" = "yes" ; then 4588 if test -z "$win_sdk"; then 4589 programfiles="$PROGRAMFILES" 4590 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4591 if test -n "$programfiles"; then 4592 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4593 else 4594 feature_not_found "Windows SDK" 4595 fi 4596 elif test "$win_sdk" = "no"; then 4597 win_sdk="" 4598 fi 4599fi 4600 4601########################################## 4602# check if mingw environment provides a recent ntddscsi.h 4603if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 4604 cat > $TMPC << EOF 4605#include <windows.h> 4606#include <ntddscsi.h> 4607int main(void) { 4608#if !defined(IOCTL_SCSI_GET_ADDRESS) 4609#error Missing required ioctl definitions 4610#endif 4611 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4612 return addr.Lun; 4613} 4614EOF 4615 if compile_prog "" "" ; then 4616 guest_agent_ntddscsi=yes 4617 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 4618 fi 4619fi 4620 4621########################################## 4622# virgl renderer probe 4623 4624if test "$virglrenderer" != "no" ; then 4625 cat > $TMPC << EOF 4626#include <virglrenderer.h> 4627int main(void) { virgl_renderer_poll(); return 0; } 4628EOF 4629 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4630 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 4631 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 4632 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4633 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4634 virglrenderer="yes" 4635 else 4636 if test "$virglrenderer" = "yes" ; then 4637 feature_not_found "virglrenderer" 4638 fi 4639 virglrenderer="no" 4640 fi 4641fi 4642 4643########################################## 4644# capstone 4645 4646case "$capstone" in 4647 auto | enabled | internal) 4648 # Simpler to always update submodule, even if not needed. 4649 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then 4650 git_submodules="${git_submodules} capstone" 4651 fi 4652 ;; 4653esac 4654 4655########################################## 4656# check if we have fdatasync 4657 4658fdatasync=no 4659cat > $TMPC << EOF 4660#include <unistd.h> 4661int main(void) { 4662#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4663return fdatasync(0); 4664#else 4665#error Not supported 4666#endif 4667} 4668EOF 4669if compile_prog "" "" ; then 4670 fdatasync=yes 4671fi 4672 4673########################################## 4674# check if we have madvise 4675 4676madvise=no 4677cat > $TMPC << EOF 4678#include <sys/types.h> 4679#include <sys/mman.h> 4680#include <stddef.h> 4681int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4682EOF 4683if compile_prog "" "" ; then 4684 madvise=yes 4685fi 4686 4687########################################## 4688# check if we have posix_madvise 4689 4690posix_madvise=no 4691cat > $TMPC << EOF 4692#include <sys/mman.h> 4693#include <stddef.h> 4694int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4695EOF 4696if compile_prog "" "" ; then 4697 posix_madvise=yes 4698fi 4699 4700########################################## 4701# check if we have posix_memalign() 4702 4703posix_memalign=no 4704cat > $TMPC << EOF 4705#include <stdlib.h> 4706int main(void) { 4707 void *p; 4708 return posix_memalign(&p, 8, 8); 4709} 4710EOF 4711if compile_prog "" "" ; then 4712 posix_memalign=yes 4713fi 4714 4715########################################## 4716# check if we have posix_syslog 4717 4718posix_syslog=no 4719cat > $TMPC << EOF 4720#include <syslog.h> 4721int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 4722EOF 4723if compile_prog "" "" ; then 4724 posix_syslog=yes 4725fi 4726 4727########################################## 4728# check if we have sem_timedwait 4729 4730sem_timedwait=no 4731cat > $TMPC << EOF 4732#include <semaphore.h> 4733int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 4734EOF 4735if compile_prog "" "" ; then 4736 sem_timedwait=yes 4737fi 4738 4739########################################## 4740# check if we have strchrnul 4741 4742strchrnul=no 4743cat > $TMPC << EOF 4744#include <string.h> 4745int main(void); 4746// Use a haystack that the compiler shouldn't be able to constant fold 4747char *haystack = (char*)&main; 4748int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 4749EOF 4750if compile_prog "" "" ; then 4751 strchrnul=yes 4752fi 4753 4754######################################### 4755# check if we have st_atim 4756 4757st_atim=no 4758cat > $TMPC << EOF 4759#include <sys/stat.h> 4760#include <stddef.h> 4761int main(void) { return offsetof(struct stat, st_atim); } 4762EOF 4763if compile_prog "" "" ; then 4764 st_atim=yes 4765fi 4766 4767########################################## 4768# check if trace backend exists 4769 4770$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4771if test "$?" -ne 0 ; then 4772 error_exit "invalid trace backends" \ 4773 "Please choose supported trace backends." 4774fi 4775 4776########################################## 4777# For 'ust' backend, test if ust headers are present 4778if have_backend "ust"; then 4779 cat > $TMPC << EOF 4780#include <lttng/tracepoint.h> 4781int main(void) { return 0; } 4782EOF 4783 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 4784 if $pkg_config lttng-ust --exists; then 4785 lttng_ust_libs=$($pkg_config --libs lttng-ust) 4786 else 4787 lttng_ust_libs="-llttng-ust -ldl" 4788 fi 4789 if $pkg_config liburcu-bp --exists; then 4790 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 4791 else 4792 urcu_bp_libs="-lurcu-bp" 4793 fi 4794 else 4795 error_exit "Trace backend 'ust' missing lttng-ust header files" 4796 fi 4797fi 4798 4799########################################## 4800# For 'dtrace' backend, test if 'dtrace' command is present 4801if have_backend "dtrace"; then 4802 if ! has 'dtrace' ; then 4803 error_exit "dtrace command is not found in PATH $PATH" 4804 fi 4805 trace_backend_stap="no" 4806 if has 'stap' ; then 4807 trace_backend_stap="yes" 4808 4809 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol 4810 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility 4811 # instead. QEMU --enable-modules depends on this because the SystemTap 4812 # semaphores are linked into the main binary and not the module's shared 4813 # object. 4814 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2" 4815 fi 4816fi 4817 4818########################################## 4819# check and set a backend for coroutine 4820 4821# We prefer ucontext, but it's not always possible. The fallback 4822# is sigcontext. On Windows the only valid backend is the Windows 4823# specific one. 4824 4825ucontext_works=no 4826if test "$darwin" != "yes"; then 4827 cat > $TMPC << EOF 4828#include <ucontext.h> 4829#ifdef __stub_makecontext 4830#error Ignoring glibc stub makecontext which will always fail 4831#endif 4832int main(void) { makecontext(0, 0, 0); return 0; } 4833EOF 4834 if compile_prog "" "" ; then 4835 ucontext_works=yes 4836 fi 4837fi 4838 4839if test "$coroutine" = ""; then 4840 if test "$mingw32" = "yes"; then 4841 coroutine=win32 4842 elif test "$ucontext_works" = "yes"; then 4843 coroutine=ucontext 4844 else 4845 coroutine=sigaltstack 4846 fi 4847else 4848 case $coroutine in 4849 windows) 4850 if test "$mingw32" != "yes"; then 4851 error_exit "'windows' coroutine backend only valid for Windows" 4852 fi 4853 # Unfortunately the user visible backend name doesn't match the 4854 # coroutine-*.c filename for this case, so we have to adjust it here. 4855 coroutine=win32 4856 ;; 4857 ucontext) 4858 if test "$ucontext_works" != "yes"; then 4859 feature_not_found "ucontext" 4860 fi 4861 ;; 4862 sigaltstack) 4863 if test "$mingw32" = "yes"; then 4864 error_exit "only the 'windows' coroutine backend is valid for Windows" 4865 fi 4866 ;; 4867 *) 4868 error_exit "unknown coroutine backend $coroutine" 4869 ;; 4870 esac 4871fi 4872 4873if test "$coroutine_pool" = ""; then 4874 coroutine_pool=yes 4875fi 4876 4877if test "$debug_stack_usage" = "yes"; then 4878 if test "$coroutine_pool" = "yes"; then 4879 echo "WARN: disabling coroutine pool for stack usage debugging" 4880 coroutine_pool=no 4881 fi 4882fi 4883 4884################################################## 4885# SafeStack 4886 4887 4888if test "$safe_stack" = "yes"; then 4889cat > $TMPC << EOF 4890int main(int argc, char *argv[]) 4891{ 4892#if ! __has_feature(safe_stack) 4893#error SafeStack Disabled 4894#endif 4895 return 0; 4896} 4897EOF 4898 flag="-fsanitize=safe-stack" 4899 # Check that safe-stack is supported and enabled. 4900 if compile_prog "-Werror $flag" "$flag"; then 4901 # Flag needed both at compilation and at linking 4902 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 4903 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 4904 else 4905 error_exit "SafeStack not supported by your compiler" 4906 fi 4907 if test "$coroutine" != "ucontext"; then 4908 error_exit "SafeStack is only supported by the coroutine backend ucontext" 4909 fi 4910else 4911cat > $TMPC << EOF 4912int main(int argc, char *argv[]) 4913{ 4914#if defined(__has_feature) 4915#if __has_feature(safe_stack) 4916#error SafeStack Enabled 4917#endif 4918#endif 4919 return 0; 4920} 4921EOF 4922if test "$safe_stack" = "no"; then 4923 # Make sure that safe-stack is disabled 4924 if ! compile_prog "-Werror" ""; then 4925 # SafeStack was already enabled, try to explicitly remove the feature 4926 flag="-fno-sanitize=safe-stack" 4927 if ! compile_prog "-Werror $flag" "$flag"; then 4928 error_exit "Configure cannot disable SafeStack" 4929 fi 4930 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 4931 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 4932 fi 4933else # "$safe_stack" = "" 4934 # Set safe_stack to yes or no based on pre-existing flags 4935 if compile_prog "-Werror" ""; then 4936 safe_stack="no" 4937 else 4938 safe_stack="yes" 4939 if test "$coroutine" != "ucontext"; then 4940 error_exit "SafeStack is only supported by the coroutine backend ucontext" 4941 fi 4942 fi 4943fi 4944fi 4945 4946########################################## 4947# check if we have open_by_handle_at 4948 4949open_by_handle_at=no 4950cat > $TMPC << EOF 4951#include <fcntl.h> 4952#if !defined(AT_EMPTY_PATH) 4953# error missing definition 4954#else 4955int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 4956#endif 4957EOF 4958if compile_prog "" "" ; then 4959 open_by_handle_at=yes 4960fi 4961 4962######################################## 4963# check if we have linux/magic.h 4964 4965linux_magic_h=no 4966cat > $TMPC << EOF 4967#include <linux/magic.h> 4968int main(void) { 4969 return 0; 4970} 4971EOF 4972if compile_prog "" "" ; then 4973 linux_magic_h=yes 4974fi 4975 4976######################################## 4977# check if we have valgrind/valgrind.h 4978 4979valgrind_h=no 4980cat > $TMPC << EOF 4981#include <valgrind/valgrind.h> 4982int main(void) { 4983 return 0; 4984} 4985EOF 4986if compile_prog "" "" ; then 4987 valgrind_h=yes 4988fi 4989 4990######################################## 4991# check if environ is declared 4992 4993has_environ=no 4994cat > $TMPC << EOF 4995#include <unistd.h> 4996int main(void) { 4997 environ = 0; 4998 return 0; 4999} 5000EOF 5001if compile_prog "" "" ; then 5002 has_environ=yes 5003fi 5004 5005######################################## 5006# check if cpuid.h is usable. 5007 5008cat > $TMPC << EOF 5009#include <cpuid.h> 5010int main(void) { 5011 unsigned a, b, c, d; 5012 int max = __get_cpuid_max(0, 0); 5013 5014 if (max >= 1) { 5015 __cpuid(1, a, b, c, d); 5016 } 5017 5018 if (max >= 7) { 5019 __cpuid_count(7, 0, a, b, c, d); 5020 } 5021 5022 return 0; 5023} 5024EOF 5025if compile_prog "" "" ; then 5026 cpuid_h=yes 5027fi 5028 5029########################################## 5030# avx2 optimization requirement check 5031# 5032# There is no point enabling this if cpuid.h is not usable, 5033# since we won't be able to select the new routines. 5034 5035if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 5036 cat > $TMPC << EOF 5037#pragma GCC push_options 5038#pragma GCC target("avx2") 5039#include <cpuid.h> 5040#include <immintrin.h> 5041static int bar(void *a) { 5042 __m256i x = *(__m256i *)a; 5043 return _mm256_testz_si256(x, x); 5044} 5045int main(int argc, char *argv[]) { return bar(argv[0]); } 5046EOF 5047 if compile_object "" ; then 5048 avx2_opt="yes" 5049 else 5050 avx2_opt="no" 5051 fi 5052fi 5053 5054########################################## 5055# avx512f optimization requirement check 5056# 5057# There is no point enabling this if cpuid.h is not usable, 5058# since we won't be able to select the new routines. 5059# by default, it is turned off. 5060# if user explicitly want to enable it, check environment 5061 5062if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 5063 cat > $TMPC << EOF 5064#pragma GCC push_options 5065#pragma GCC target("avx512f") 5066#include <cpuid.h> 5067#include <immintrin.h> 5068static int bar(void *a) { 5069 __m512i x = *(__m512i *)a; 5070 return _mm512_test_epi64_mask(x, x); 5071} 5072int main(int argc, char *argv[]) 5073{ 5074 return bar(argv[0]); 5075} 5076EOF 5077 if ! compile_object "" ; then 5078 avx512f_opt="no" 5079 fi 5080else 5081 avx512f_opt="no" 5082fi 5083 5084######################################## 5085# check if __[u]int128_t is usable. 5086 5087int128=no 5088cat > $TMPC << EOF 5089__int128_t a; 5090__uint128_t b; 5091int main (void) { 5092 a = a + b; 5093 b = a * b; 5094 a = a * a; 5095 return 0; 5096} 5097EOF 5098if compile_prog "" "" ; then 5099 int128=yes 5100fi 5101 5102######################################### 5103# See if 128-bit atomic operations are supported. 5104 5105atomic128=no 5106if test "$int128" = "yes"; then 5107 cat > $TMPC << EOF 5108int main(void) 5109{ 5110 unsigned __int128 x = 0, y = 0; 5111 y = __atomic_load_16(&x, 0); 5112 __atomic_store_16(&x, y, 0); 5113 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5114 return 0; 5115} 5116EOF 5117 if compile_prog "" "" ; then 5118 atomic128=yes 5119 fi 5120fi 5121 5122cmpxchg128=no 5123if test "$int128" = yes && test "$atomic128" = no; then 5124 cat > $TMPC << EOF 5125int main(void) 5126{ 5127 unsigned __int128 x = 0, y = 0; 5128 __sync_val_compare_and_swap_16(&x, y, x); 5129 return 0; 5130} 5131EOF 5132 if compile_prog "" "" ; then 5133 cmpxchg128=yes 5134 fi 5135fi 5136 5137######################################### 5138# See if 64-bit atomic operations are supported. 5139# Note that without __atomic builtins, we can only 5140# assume atomic loads/stores max at pointer size. 5141 5142cat > $TMPC << EOF 5143#include <stdint.h> 5144int main(void) 5145{ 5146 uint64_t x = 0, y = 0; 5147#ifdef __ATOMIC_RELAXED 5148 y = __atomic_load_n(&x, __ATOMIC_RELAXED); 5149 __atomic_store_n(&x, y, __ATOMIC_RELAXED); 5150 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED); 5151 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED); 5152 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED); 5153#else 5154 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5155 __sync_lock_test_and_set(&x, y); 5156 __sync_val_compare_and_swap(&x, y, 0); 5157 __sync_fetch_and_add(&x, y); 5158#endif 5159 return 0; 5160} 5161EOF 5162if compile_prog "" "" ; then 5163 atomic64=yes 5164fi 5165 5166######################################### 5167# See if --dynamic-list is supported by the linker 5168ld_dynamic_list="no" 5169if test "$static" = "no" ; then 5170 cat > $TMPTXT <<EOF 5171{ 5172 foo; 5173}; 5174EOF 5175 5176 cat > $TMPC <<EOF 5177#include <stdio.h> 5178void foo(void); 5179 5180void foo(void) 5181{ 5182 printf("foo\n"); 5183} 5184 5185int main(void) 5186{ 5187 foo(); 5188 return 0; 5189} 5190EOF 5191 5192 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 5193 ld_dynamic_list="yes" 5194 fi 5195fi 5196 5197######################################### 5198# See if -exported_symbols_list is supported by the linker 5199 5200ld_exported_symbols_list="no" 5201if test "$static" = "no" ; then 5202 cat > $TMPTXT <<EOF 5203 _foo 5204EOF 5205 5206 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 5207 ld_exported_symbols_list="yes" 5208 fi 5209fi 5210 5211if test "$plugins" = "yes" && 5212 test "$ld_dynamic_list" = "no" && 5213 test "$ld_exported_symbols_list" = "no" ; then 5214 error_exit \ 5215 "Plugin support requires dynamic linking and specifying a set of symbols " \ 5216 "that are exported to plugins. Unfortunately your linker doesn't " \ 5217 "support the flag (--dynamic-list or -exported_symbols_list) used " \ 5218 "for this purpose. You can't build with --static." 5219fi 5220 5221######################################## 5222# See if __attribute__((alias)) is supported. 5223# This false for Xcode 9, but has been remedied for Xcode 10. 5224# Unfortunately, travis uses Xcode 9 by default. 5225 5226attralias=no 5227cat > $TMPC << EOF 5228int x = 1; 5229extern const int y __attribute__((alias("x"))); 5230int main(void) { return 0; } 5231EOF 5232if compile_prog "" "" ; then 5233 attralias=yes 5234fi 5235 5236######################################## 5237# check if getauxval is available. 5238 5239getauxval=no 5240cat > $TMPC << EOF 5241#include <sys/auxv.h> 5242int main(void) { 5243 return getauxval(AT_HWCAP) == 0; 5244} 5245EOF 5246if compile_prog "" "" ; then 5247 getauxval=yes 5248fi 5249 5250######################################## 5251# check if ccache is interfering with 5252# semantic analysis of macros 5253 5254unset CCACHE_CPP2 5255ccache_cpp2=no 5256cat > $TMPC << EOF 5257static const int Z = 1; 5258#define fn() ({ Z; }) 5259#define TAUT(X) ((X) == Z) 5260#define PAREN(X, Y) (X == Y) 5261#define ID(X) (X) 5262int main(int argc, char *argv[]) 5263{ 5264 int x = 0, y = 0; 5265 x = ID(x); 5266 x = fn(); 5267 fn(); 5268 if (PAREN(x, y)) return 0; 5269 if (TAUT(Z)) return 0; 5270 return 0; 5271} 5272EOF 5273 5274if ! compile_object "-Werror"; then 5275 ccache_cpp2=yes 5276fi 5277 5278################################################# 5279# clang does not support glibc + FORTIFY_SOURCE. 5280 5281if test "$fortify_source" != "no"; then 5282 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5283 fortify_source="no"; 5284 elif test -n "$cxx" && has $cxx && 5285 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5286 fortify_source="no"; 5287 else 5288 fortify_source="yes" 5289 fi 5290fi 5291 5292############################################### 5293# Check if copy_file_range is provided by glibc 5294have_copy_file_range=no 5295cat > $TMPC << EOF 5296#include <unistd.h> 5297int main(void) { 5298 copy_file_range(0, NULL, 0, NULL, 0, 0); 5299 return 0; 5300} 5301EOF 5302if compile_prog "" "" ; then 5303 have_copy_file_range=yes 5304fi 5305 5306########################################## 5307# check if struct fsxattr is available via linux/fs.h 5308 5309have_fsxattr=no 5310cat > $TMPC << EOF 5311#include <linux/fs.h> 5312struct fsxattr foo; 5313int main(void) { 5314 return 0; 5315} 5316EOF 5317if compile_prog "" "" ; then 5318 have_fsxattr=yes 5319fi 5320 5321########################################## 5322# check for usable membarrier system call 5323if test "$membarrier" = "yes"; then 5324 have_membarrier=no 5325 if test "$mingw32" = "yes" ; then 5326 have_membarrier=yes 5327 elif test "$linux" = "yes" ; then 5328 cat > $TMPC << EOF 5329 #include <linux/membarrier.h> 5330 #include <sys/syscall.h> 5331 #include <unistd.h> 5332 #include <stdlib.h> 5333 int main(void) { 5334 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5335 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5336 exit(0); 5337 } 5338EOF 5339 if compile_prog "" "" ; then 5340 have_membarrier=yes 5341 fi 5342 fi 5343 if test "$have_membarrier" = "no"; then 5344 feature_not_found "membarrier" "membarrier system call not available" 5345 fi 5346else 5347 # Do not enable it by default even for Mingw32, because it doesn't 5348 # work on Wine. 5349 membarrier=no 5350fi 5351 5352########################################## 5353# check if rtnetlink.h exists and is useful 5354have_rtnetlink=no 5355cat > $TMPC << EOF 5356#include <linux/rtnetlink.h> 5357int main(void) { 5358 return IFLA_PROTO_DOWN; 5359} 5360EOF 5361if compile_prog "" "" ; then 5362 have_rtnetlink=yes 5363fi 5364 5365########################################## 5366# check for usable AF_VSOCK environment 5367have_af_vsock=no 5368cat > $TMPC << EOF 5369#include <errno.h> 5370#include <sys/types.h> 5371#include <sys/socket.h> 5372#if !defined(AF_VSOCK) 5373# error missing AF_VSOCK flag 5374#endif 5375#include <linux/vm_sockets.h> 5376int main(void) { 5377 int sock, ret; 5378 struct sockaddr_vm svm; 5379 socklen_t len = sizeof(svm); 5380 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5381 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5382 if ((ret == -1) && (errno == ENOTCONN)) { 5383 return 0; 5384 } 5385 return -1; 5386} 5387EOF 5388if compile_prog "" "" ; then 5389 have_af_vsock=yes 5390fi 5391 5392########################################## 5393# check for usable AF_ALG environment 5394have_afalg=no 5395cat > $TMPC << EOF 5396#include <errno.h> 5397#include <sys/types.h> 5398#include <sys/socket.h> 5399#include <linux/if_alg.h> 5400int main(void) { 5401 int sock; 5402 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 5403 return sock; 5404} 5405EOF 5406if compile_prog "" "" ; then 5407 have_afalg=yes 5408fi 5409if test "$crypto_afalg" = "yes" 5410then 5411 if test "$have_afalg" != "yes" 5412 then 5413 error_exit "AF_ALG requested but could not be detected" 5414 fi 5415fi 5416 5417 5418################################################# 5419# check for sysmacros.h 5420 5421have_sysmacros=no 5422cat > $TMPC << EOF 5423#include <sys/sysmacros.h> 5424int main(void) { 5425 return makedev(0, 0); 5426} 5427EOF 5428if compile_prog "" "" ; then 5429 have_sysmacros=yes 5430fi 5431 5432########################################## 5433# check for _Static_assert() 5434 5435have_static_assert=no 5436cat > $TMPC << EOF 5437_Static_assert(1, "success"); 5438int main(void) { 5439 return 0; 5440} 5441EOF 5442if compile_prog "" "" ; then 5443 have_static_assert=yes 5444fi 5445 5446########################################## 5447# check for utmpx.h, it is missing e.g. on OpenBSD 5448 5449have_utmpx=no 5450cat > $TMPC << EOF 5451#include <utmpx.h> 5452struct utmpx user_info; 5453int main(void) { 5454 return 0; 5455} 5456EOF 5457if compile_prog "" "" ; then 5458 have_utmpx=yes 5459fi 5460 5461########################################## 5462# check for getrandom() 5463 5464have_getrandom=no 5465cat > $TMPC << EOF 5466#include <sys/random.h> 5467int main(void) { 5468 return getrandom(0, 0, GRND_NONBLOCK); 5469} 5470EOF 5471if compile_prog "" "" ; then 5472 have_getrandom=yes 5473fi 5474 5475########################################## 5476# checks for sanitizers 5477 5478have_asan=no 5479have_ubsan=no 5480have_asan_iface_h=no 5481have_asan_iface_fiber=no 5482 5483if test "$sanitizers" = "yes" ; then 5484 write_c_skeleton 5485 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 5486 have_asan=yes 5487 fi 5488 5489 # we could use a simple skeleton for flags checks, but this also 5490 # detect the static linking issue of ubsan, see also: 5491 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 5492 cat > $TMPC << EOF 5493#include <stdlib.h> 5494int main(void) { 5495 void *tmp = malloc(10); 5496 if (tmp != NULL) { 5497 return *(int *)(tmp + 2); 5498 } 5499 return 1; 5500} 5501EOF 5502 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 5503 have_ubsan=yes 5504 fi 5505 5506 if check_include "sanitizer/asan_interface.h" ; then 5507 have_asan_iface_h=yes 5508 fi 5509 5510 cat > $TMPC << EOF 5511#include <sanitizer/asan_interface.h> 5512int main(void) { 5513 __sanitizer_start_switch_fiber(0, 0, 0); 5514 return 0; 5515} 5516EOF 5517 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 5518 have_asan_iface_fiber=yes 5519 fi 5520fi 5521 5522########################################## 5523# checks for fuzzer 5524if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then 5525 write_c_fuzzer_skeleton 5526 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then 5527 have_fuzzer=yes 5528 else 5529 error_exit "Your compiler doesn't support -fsanitize=fuzzer" 5530 exit 1 5531 fi 5532fi 5533 5534# Thread sanitizer is, for now, much noisier than the other sanitizers; 5535# keep it separate until that is not the case. 5536if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 5537 error_exit "TSAN is not supported with other sanitiziers." 5538fi 5539have_tsan=no 5540have_tsan_iface_fiber=no 5541if test "$tsan" = "yes" ; then 5542 write_c_skeleton 5543 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 5544 have_tsan=yes 5545 fi 5546 cat > $TMPC << EOF 5547#include <sanitizer/tsan_interface.h> 5548int main(void) { 5549 __tsan_create_fiber(0); 5550 return 0; 5551} 5552EOF 5553 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 5554 have_tsan_iface_fiber=yes 5555 fi 5556fi 5557 5558########################################## 5559# check for libpmem 5560 5561if test "$libpmem" != "no"; then 5562 if $pkg_config --exists "libpmem"; then 5563 libpmem="yes" 5564 libpmem_libs=$($pkg_config --libs libpmem) 5565 libpmem_cflags=$($pkg_config --cflags libpmem) 5566 else 5567 if test "$libpmem" = "yes" ; then 5568 feature_not_found "libpmem" "Install nvml or pmdk" 5569 fi 5570 libpmem="no" 5571 fi 5572fi 5573 5574########################################## 5575# check for libdaxctl 5576 5577if test "$libdaxctl" != "no"; then 5578 if $pkg_config --atleast-version=57 "libdaxctl"; then 5579 libdaxctl="yes" 5580 libdaxctl_libs=$($pkg_config --libs libdaxctl) 5581 libdaxctl_cflags=$($pkg_config --cflags libdaxctl) 5582 else 5583 if test "$libdaxctl" = "yes" ; then 5584 feature_not_found "libdaxctl" "Install libdaxctl" 5585 fi 5586 libdaxctl="no" 5587 fi 5588fi 5589 5590########################################## 5591# check for slirp 5592 5593case "$slirp" in 5594 auto | enabled | internal) 5595 # Simpler to always update submodule, even if not needed. 5596 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5597 git_submodules="${git_submodules} slirp" 5598 fi 5599 ;; 5600esac 5601 5602########################################## 5603# check for usable __NR_keyctl syscall 5604 5605if test "$linux" = "yes" ; then 5606 5607 have_keyring=no 5608 cat > $TMPC << EOF 5609#include <errno.h> 5610#include <asm/unistd.h> 5611#include <linux/keyctl.h> 5612#include <unistd.h> 5613int main(void) { 5614 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 5615} 5616EOF 5617 if compile_prog "" "" ; then 5618 have_keyring=yes 5619 fi 5620fi 5621if test "$secret_keyring" != "no" 5622then 5623 if test "$have_keyring" = "yes" 5624 then 5625 secret_keyring=yes 5626 else 5627 if test "$secret_keyring" = "yes" 5628 then 5629 error_exit "syscall __NR_keyctl requested, \ 5630but not implemented on your system" 5631 else 5632 secret_keyring=no 5633 fi 5634 fi 5635fi 5636 5637########################################## 5638# End of CC checks 5639# After here, no more $cc or $ld runs 5640 5641write_c_skeleton 5642 5643if test "$gcov" = "yes" ; then 5644 : 5645elif test "$fortify_source" = "yes" ; then 5646 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" 5647 debug=no 5648fi 5649 5650case "$ARCH" in 5651alpha) 5652 # Ensure there's only a single GP 5653 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" 5654;; 5655esac 5656 5657if test "$gprof" = "yes" ; then 5658 QEMU_CFLAGS="-p $QEMU_CFLAGS" 5659 QEMU_LDFLAGS="-p $QEMU_LDFLAGS" 5660fi 5661 5662if test "$have_asan" = "yes"; then 5663 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 5664 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 5665 if test "$have_asan_iface_h" = "no" ; then 5666 echo "ASAN build enabled, but ASAN header missing." \ 5667 "Without code annotation, the report may be inferior." 5668 elif test "$have_asan_iface_fiber" = "no" ; then 5669 echo "ASAN build enabled, but ASAN header is too old." \ 5670 "Without code annotation, the report may be inferior." 5671 fi 5672fi 5673if test "$have_tsan" = "yes" ; then 5674 if test "$have_tsan_iface_fiber" = "yes" ; then 5675 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 5676 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 5677 else 5678 error_exit "Cannot enable TSAN due to missing fiber annotation interface." 5679 fi 5680elif test "$tsan" = "yes" ; then 5681 error_exit "Cannot enable TSAN due to missing sanitize thread interface." 5682fi 5683if test "$have_ubsan" = "yes"; then 5684 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 5685 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 5686fi 5687 5688########################################## 5689# Do we have libnfs 5690if test "$libnfs" != "no" ; then 5691 if $pkg_config --atleast-version=1.9.3 libnfs; then 5692 libnfs="yes" 5693 libnfs_libs=$($pkg_config --libs libnfs) 5694 else 5695 if test "$libnfs" = "yes" ; then 5696 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 5697 fi 5698 libnfs="no" 5699 fi 5700fi 5701 5702########################################## 5703 5704# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 5705if test "$solaris" = "no" && test "$tsan" = "no"; then 5706 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 5707 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 5708 fi 5709fi 5710 5711# Use ASLR, no-SEH and DEP if available 5712if test "$mingw32" = "yes" ; then 5713 flags="--no-seh --nxcompat" 5714 5715 # Disable ASLR for debug builds to allow debugging with gdb 5716 if test "$debug" = "no" ; then 5717 flags="--dynamicbase $flags" 5718 fi 5719 5720 for flag in $flags; do 5721 if ld_has $flag ; then 5722 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 5723 fi 5724 done 5725fi 5726 5727# We can only support ivshmem if we have eventfd 5728if [ "$eventfd" = "yes" ]; then 5729 ivshmem=yes 5730fi 5731 5732if test "$softmmu" = yes ; then 5733 if test "$linux" = yes; then 5734 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then 5735 virtfs=yes 5736 else 5737 if test "$virtfs" = yes; then 5738 error_exit "VirtFS requires libcap-ng devel and libattr devel" 5739 fi 5740 virtfs=no 5741 fi 5742 else 5743 if test "$virtfs" = yes; then 5744 error_exit "VirtFS is supported only on Linux" 5745 fi 5746 virtfs=no 5747 fi 5748fi 5749 5750# Probe for guest agent support/options 5751 5752if [ "$guest_agent" != "no" ]; then 5753 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 5754 guest_agent=no 5755 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 5756 guest_agent=yes 5757 elif [ "$guest_agent" != yes ]; then 5758 guest_agent=no 5759 else 5760 error_exit "Guest agent is not supported on this platform" 5761 fi 5762fi 5763 5764# Guest agent Window MSI package 5765 5766if test "$guest_agent" != yes; then 5767 if test "$guest_agent_msi" = yes; then 5768 error_exit "MSI guest agent package requires guest agent enabled" 5769 fi 5770 guest_agent_msi=no 5771elif test "$mingw32" != "yes"; then 5772 if test "$guest_agent_msi" = "yes"; then 5773 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 5774 fi 5775 guest_agent_msi=no 5776elif ! has wixl; then 5777 if test "$guest_agent_msi" = "yes"; then 5778 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 5779 fi 5780 guest_agent_msi=no 5781else 5782 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 5783 # disabled explicitly 5784 if test "$guest_agent_msi" != "no"; then 5785 guest_agent_msi=yes 5786 fi 5787fi 5788 5789if test "$guest_agent_msi" = "yes"; then 5790 if test "$guest_agent_with_vss" = "yes"; then 5791 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 5792 fi 5793 5794 if test "$QEMU_GA_MANUFACTURER" = ""; then 5795 QEMU_GA_MANUFACTURER=QEMU 5796 fi 5797 5798 if test "$QEMU_GA_DISTRO" = ""; then 5799 QEMU_GA_DISTRO=Linux 5800 fi 5801 5802 if test "$QEMU_GA_VERSION" = ""; then 5803 QEMU_GA_VERSION=$(cat $source_path/VERSION) 5804 fi 5805 5806 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 5807 5808 case "$cpu" in 5809 x86_64) 5810 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 5811 ;; 5812 i386) 5813 QEMU_GA_MSI_ARCH="-D Arch=32" 5814 ;; 5815 *) 5816 error_exit "CPU $cpu not supported for building installation package" 5817 ;; 5818 esac 5819fi 5820 5821# Mac OS X ships with a broken assembler 5822roms= 5823if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 5824 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 5825 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then 5826 # Different host OS linkers have different ideas about the name of the ELF 5827 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 5828 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 5829 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 5830 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 5831 ld_i386_emulation="$emu" 5832 roms="optionrom" 5833 break 5834 fi 5835 done 5836fi 5837 5838# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 5839if test "$cpu" = "s390x" ; then 5840 write_c_skeleton 5841 if compile_prog "-march=z900" ""; then 5842 roms="$roms s390-ccw" 5843 # SLOF is required for building the s390-ccw firmware on s390x, 5844 # since it is using the libnet code from SLOF for network booting. 5845 if test -e "${source_path}/.git" ; then 5846 git_submodules="${git_submodules} roms/SLOF" 5847 fi 5848 fi 5849fi 5850 5851# Check that the C++ compiler exists and works with the C compiler. 5852# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 5853if has $cxx; then 5854 cat > $TMPC <<EOF 5855int c_function(void); 5856int main(void) { return c_function(); } 5857EOF 5858 5859 compile_object 5860 5861 cat > $TMPCXX <<EOF 5862extern "C" { 5863 int c_function(void); 5864} 5865int c_function(void) { return 42; } 5866EOF 5867 5868 update_cxxflags 5869 5870 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 5871 # C++ compiler $cxx works ok with C compiler $cc 5872 : 5873 else 5874 echo "C++ compiler $cxx does not work with C compiler $cc" 5875 echo "Disabling C++ specific optional code" 5876 cxx= 5877 fi 5878else 5879 echo "No C++ compiler available; disabling C++ specific optional code" 5880 cxx= 5881fi 5882 5883if test $git_update = 'yes' ; then 5884 (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules") 5885fi 5886 5887config_host_mak="config-host.mak" 5888 5889echo "# Automatically generated by configure - do not modify" > $config_host_mak 5890echo >> $config_host_mak 5891 5892echo all: >> $config_host_mak 5893echo "GIT=$git" >> $config_host_mak 5894echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 5895echo "GIT_UPDATE=$git_update" >> $config_host_mak 5896 5897echo "ARCH=$ARCH" >> $config_host_mak 5898 5899if test "$default_devices" = "yes" ; then 5900 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak 5901else 5902 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak 5903fi 5904if test "$debug_tcg" = "yes" ; then 5905 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 5906fi 5907if test "$strip_opt" = "yes" ; then 5908 echo "STRIP=${strip}" >> $config_host_mak 5909fi 5910if test "$bigendian" = "yes" ; then 5911 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 5912fi 5913if test "$mingw32" = "yes" ; then 5914 echo "CONFIG_WIN32=y" >> $config_host_mak 5915 rc_version=$(cat $source_path/VERSION) 5916 version_major=${rc_version%%.*} 5917 rc_version=${rc_version#*.} 5918 version_minor=${rc_version%%.*} 5919 rc_version=${rc_version#*.} 5920 version_subminor=${rc_version%%.*} 5921 version_micro=0 5922 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 5923 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 5924 if test "$guest_agent_with_vss" = "yes" ; then 5925 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 5926 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 5927 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 5928 fi 5929 if test "$guest_agent_ntddscsi" = "yes" ; then 5930 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 5931 fi 5932 if test "$guest_agent_msi" = "yes"; then 5933 echo "CONFIG_QGA_MSI=y" >> $config_host_mak 5934 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 5935 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 5936 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 5937 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 5938 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 5939 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 5940 fi 5941else 5942 echo "CONFIG_POSIX=y" >> $config_host_mak 5943fi 5944 5945if test "$linux" = "yes" ; then 5946 echo "CONFIG_LINUX=y" >> $config_host_mak 5947fi 5948 5949if test "$darwin" = "yes" ; then 5950 echo "CONFIG_DARWIN=y" >> $config_host_mak 5951fi 5952 5953if test "$solaris" = "yes" ; then 5954 echo "CONFIG_SOLARIS=y" >> $config_host_mak 5955fi 5956if test "$haiku" = "yes" ; then 5957 echo "CONFIG_HAIKU=y" >> $config_host_mak 5958fi 5959if test "$static" = "yes" ; then 5960 echo "CONFIG_STATIC=y" >> $config_host_mak 5961fi 5962if test "$profiler" = "yes" ; then 5963 echo "CONFIG_PROFILER=y" >> $config_host_mak 5964fi 5965if test "$want_tools" = "yes" ; then 5966 echo "CONFIG_TOOLS=y" >> $config_host_mak 5967fi 5968if test "$guest_agent" = "yes" ; then 5969 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak 5970fi 5971echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 5972if test "$vde" = "yes" ; then 5973 echo "CONFIG_VDE=y" >> $config_host_mak 5974 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 5975fi 5976if test "$netmap" = "yes" ; then 5977 echo "CONFIG_NETMAP=y" >> $config_host_mak 5978fi 5979if test "$l2tpv3" = "yes" ; then 5980 echo "CONFIG_L2TPV3=y" >> $config_host_mak 5981fi 5982if test "$gprof" = "yes" ; then 5983 echo "CONFIG_GPROF=y" >> $config_host_mak 5984fi 5985if test "$cap_ng" = "yes" ; then 5986 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak 5987 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak 5988fi 5989echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 5990for drv in $audio_drv_list; do 5991 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 5992 echo "$def=y" >> $config_host_mak 5993done 5994if test "$alsa" = "yes" ; then 5995 echo "CONFIG_ALSA=y" >> $config_host_mak 5996fi 5997echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 5998echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak 5999if test "$libpulse" = "yes" ; then 6000 echo "CONFIG_LIBPULSE=y" >> $config_host_mak 6001fi 6002echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6003echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak 6004echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6005echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6006echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6007if test "$libjack" = "yes" ; then 6008 echo "CONFIG_LIBJACK=y" >> $config_host_mak 6009fi 6010echo "JACK_LIBS=$jack_libs" >> $config_host_mak 6011if test "$audio_win_int" = "yes" ; then 6012 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6013fi 6014echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6015echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6016if test "$xfs" = "yes" ; then 6017 echo "CONFIG_XFS=y" >> $config_host_mak 6018fi 6019qemu_version=$(head $source_path/VERSION) 6020echo "PKGVERSION=$pkgversion" >>$config_host_mak 6021echo "SRC_PATH=$source_path" >> $config_host_mak 6022echo "TARGET_DIRS=$target_list" >> $config_host_mak 6023if test "$modules" = "yes"; then 6024 # $shacmd can generate a hash started with digit, which the compiler doesn't 6025 # like as an symbol. So prefix it with an underscore 6026 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6027 echo "CONFIG_MODULES=y" >> $config_host_mak 6028fi 6029if test "$module_upgrades" = "yes"; then 6030 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 6031fi 6032if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then 6033 echo "CONFIG_X11=y" >> $config_host_mak 6034 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6035 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6036fi 6037if test "$pipe2" = "yes" ; then 6038 echo "CONFIG_PIPE2=y" >> $config_host_mak 6039fi 6040if test "$accept4" = "yes" ; then 6041 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 6042fi 6043if test "$splice" = "yes" ; then 6044 echo "CONFIG_SPLICE=y" >> $config_host_mak 6045fi 6046if test "$eventfd" = "yes" ; then 6047 echo "CONFIG_EVENTFD=y" >> $config_host_mak 6048fi 6049if test "$memfd" = "yes" ; then 6050 echo "CONFIG_MEMFD=y" >> $config_host_mak 6051fi 6052if test "$have_usbfs" = "yes" ; then 6053 echo "CONFIG_USBFS=y" >> $config_host_mak 6054fi 6055if test "$fallocate" = "yes" ; then 6056 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6057fi 6058if test "$fallocate_punch_hole" = "yes" ; then 6059 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 6060fi 6061if test "$fallocate_zero_range" = "yes" ; then 6062 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6063fi 6064if test "$posix_fallocate" = "yes" ; then 6065 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6066fi 6067if test "$sync_file_range" = "yes" ; then 6068 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6069fi 6070if test "$fiemap" = "yes" ; then 6071 echo "CONFIG_FIEMAP=y" >> $config_host_mak 6072fi 6073if test "$dup3" = "yes" ; then 6074 echo "CONFIG_DUP3=y" >> $config_host_mak 6075fi 6076if test "$ppoll" = "yes" ; then 6077 echo "CONFIG_PPOLL=y" >> $config_host_mak 6078fi 6079if test "$prctl_pr_set_timerslack" = "yes" ; then 6080 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6081fi 6082if test "$epoll" = "yes" ; then 6083 echo "CONFIG_EPOLL=y" >> $config_host_mak 6084fi 6085if test "$epoll_create1" = "yes" ; then 6086 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 6087fi 6088if test "$sendfile" = "yes" ; then 6089 echo "CONFIG_SENDFILE=y" >> $config_host_mak 6090fi 6091if test "$timerfd" = "yes" ; then 6092 echo "CONFIG_TIMERFD=y" >> $config_host_mak 6093fi 6094if test "$setns" = "yes" ; then 6095 echo "CONFIG_SETNS=y" >> $config_host_mak 6096fi 6097if test "$clock_adjtime" = "yes" ; then 6098 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 6099fi 6100if test "$syncfs" = "yes" ; then 6101 echo "CONFIG_SYNCFS=y" >> $config_host_mak 6102fi 6103if test "$inotify" = "yes" ; then 6104 echo "CONFIG_INOTIFY=y" >> $config_host_mak 6105fi 6106if test "$inotify1" = "yes" ; then 6107 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6108fi 6109if test "$sem_timedwait" = "yes" ; then 6110 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6111fi 6112if test "$strchrnul" = "yes" ; then 6113 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 6114fi 6115if test "$st_atim" = "yes" ; then 6116 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak 6117fi 6118if test "$byteswap_h" = "yes" ; then 6119 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 6120fi 6121if test "$bswap_h" = "yes" ; then 6122 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 6123fi 6124if test "$curl" = "yes" ; then 6125 echo "CONFIG_CURL=y" >> $config_host_mak 6126 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 6127 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6128fi 6129if test "$brlapi" = "yes" ; then 6130 echo "CONFIG_BRLAPI=y" >> $config_host_mak 6131 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 6132fi 6133if test "$gtk" = "yes" ; then 6134 echo "CONFIG_GTK=y" >> $config_host_mak 6135 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6136 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6137 if test "$gtk_gl" = "yes" ; then 6138 echo "CONFIG_GTK_GL=y" >> $config_host_mak 6139 fi 6140fi 6141if test "$gio" = "yes" ; then 6142 echo "CONFIG_GIO=y" >> $config_host_mak 6143 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 6144 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 6145 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 6146fi 6147echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6148if test "$gnutls" = "yes" ; then 6149 echo "CONFIG_GNUTLS=y" >> $config_host_mak 6150 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak 6151 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak 6152fi 6153if test "$gcrypt" = "yes" ; then 6154 echo "CONFIG_GCRYPT=y" >> $config_host_mak 6155 if test "$gcrypt_hmac" = "yes" ; then 6156 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 6157 fi 6158 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak 6159 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak 6160fi 6161if test "$nettle" = "yes" ; then 6162 echo "CONFIG_NETTLE=y" >> $config_host_mak 6163 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6164 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak 6165 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak 6166fi 6167if test "$qemu_private_xts" = "yes" ; then 6168 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak 6169fi 6170if test "$tasn1" = "yes" ; then 6171 echo "CONFIG_TASN1=y" >> $config_host_mak 6172fi 6173if test "$auth_pam" = "yes" ; then 6174 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 6175fi 6176if test "$have_broken_size_max" = "yes" ; then 6177 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 6178fi 6179if test "$have_openpty" = "yes" ; then 6180 echo "HAVE_OPENPTY=y" >> $config_host_mak 6181fi 6182 6183# Work around a system header bug with some kernel/XFS header 6184# versions where they both try to define 'struct fsxattr': 6185# xfs headers will not try to redefine structs from linux headers 6186# if this macro is set. 6187if test "$have_fsxattr" = "yes" ; then 6188 echo "HAVE_FSXATTR=y" >> $config_host_mak 6189fi 6190if test "$have_copy_file_range" = "yes" ; then 6191 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 6192fi 6193if test "$vte" = "yes" ; then 6194 echo "CONFIG_VTE=y" >> $config_host_mak 6195 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 6196 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 6197fi 6198if test "$virglrenderer" = "yes" ; then 6199 echo "CONFIG_VIRGL=y" >> $config_host_mak 6200 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 6201 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 6202fi 6203if test "$xen" = "enabled" ; then 6204 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 6205 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 6206 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak 6207 echo "XEN_LIBS=$xen_libs" >> $config_host_mak 6208fi 6209if test "$linux_aio" = "yes" ; then 6210 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 6211fi 6212if test "$linux_io_uring" = "yes" ; then 6213 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak 6214 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak 6215 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak 6216fi 6217if test "$attr" = "yes" ; then 6218 echo "CONFIG_ATTR=y" >> $config_host_mak 6219 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak 6220fi 6221if test "$libattr" = "yes" ; then 6222 echo "CONFIG_LIBATTR=y" >> $config_host_mak 6223fi 6224if test "$virtfs" = "yes" ; then 6225 echo "CONFIG_VIRTFS=y" >> $config_host_mak 6226fi 6227if test "$vhost_scsi" = "yes" ; then 6228 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 6229fi 6230if test "$vhost_net" = "yes" ; then 6231 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 6232fi 6233if test "$vhost_net_user" = "yes" ; then 6234 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 6235fi 6236if test "$vhost_net_vdpa" = "yes" ; then 6237 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 6238fi 6239if test "$vhost_crypto" = "yes" ; then 6240 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 6241fi 6242if test "$vhost_vsock" = "yes" ; then 6243 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 6244 if test "$vhost_user" = "yes" ; then 6245 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 6246 fi 6247fi 6248if test "$vhost_kernel" = "yes" ; then 6249 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 6250fi 6251if test "$vhost_user" = "yes" ; then 6252 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 6253fi 6254if test "$vhost_vdpa" = "yes" ; then 6255 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 6256fi 6257if test "$vhost_user_fs" = "yes" ; then 6258 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 6259fi 6260if test "$iovec" = "yes" ; then 6261 echo "CONFIG_IOVEC=y" >> $config_host_mak 6262fi 6263if test "$preadv" = "yes" ; then 6264 echo "CONFIG_PREADV=y" >> $config_host_mak 6265fi 6266if test "$membarrier" = "yes" ; then 6267 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 6268fi 6269if test "$signalfd" = "yes" ; then 6270 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 6271fi 6272if test "$optreset" = "yes" ; then 6273 echo "HAVE_OPTRESET=y" >> $config_host_mak 6274fi 6275if test "$tcg" = "enabled"; then 6276 if test "$tcg_interpreter" = "yes" ; then 6277 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 6278 fi 6279fi 6280if test "$fdatasync" = "yes" ; then 6281 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 6282fi 6283if test "$madvise" = "yes" ; then 6284 echo "CONFIG_MADVISE=y" >> $config_host_mak 6285fi 6286if test "$posix_madvise" = "yes" ; then 6287 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 6288fi 6289if test "$posix_memalign" = "yes" ; then 6290 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 6291fi 6292if test "$spice" = "yes" ; then 6293 echo "CONFIG_SPICE=y" >> $config_host_mak 6294 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak 6295 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak 6296fi 6297 6298if test "$smartcard" = "yes" ; then 6299 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 6300 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 6301 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 6302fi 6303 6304if test "$libusb" = "yes" ; then 6305 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 6306 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 6307 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 6308fi 6309 6310if test "$usb_redir" = "yes" ; then 6311 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 6312 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 6313 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 6314fi 6315 6316if test "$opengl" = "yes" ; then 6317 echo "CONFIG_OPENGL=y" >> $config_host_mak 6318 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak 6319 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 6320 if test "$opengl_dmabuf" = "yes" ; then 6321 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 6322 fi 6323fi 6324 6325if test "$gbm" = "yes" ; then 6326 echo "CONFIG_GBM=y" >> $config_host_mak 6327 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 6328 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 6329fi 6330 6331 6332if test "$avx2_opt" = "yes" ; then 6333 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 6334fi 6335 6336if test "$avx512f_opt" = "yes" ; then 6337 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 6338fi 6339 6340if test "$lzo" = "yes" ; then 6341 echo "CONFIG_LZO=y" >> $config_host_mak 6342 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak 6343fi 6344 6345if test "$snappy" = "yes" ; then 6346 echo "CONFIG_SNAPPY=y" >> $config_host_mak 6347 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak 6348fi 6349 6350if test "$bzip2" = "yes" ; then 6351 echo "CONFIG_BZIP2=y" >> $config_host_mak 6352 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 6353fi 6354 6355if test "$lzfse" = "yes" ; then 6356 echo "CONFIG_LZFSE=y" >> $config_host_mak 6357 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak 6358fi 6359 6360if test "$zstd" = "yes" ; then 6361 echo "CONFIG_ZSTD=y" >> $config_host_mak 6362 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak 6363 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak 6364fi 6365 6366if test "$libiscsi" = "yes" ; then 6367 echo "CONFIG_LIBISCSI=y" >> $config_host_mak 6368 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 6369 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 6370fi 6371 6372if test "$libnfs" = "yes" ; then 6373 echo "CONFIG_LIBNFS=y" >> $config_host_mak 6374 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 6375fi 6376 6377if test "$seccomp" = "yes"; then 6378 echo "CONFIG_SECCOMP=y" >> $config_host_mak 6379 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 6380 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 6381fi 6382 6383# XXX: suppress that 6384if [ "$bsd" = "yes" ] ; then 6385 echo "CONFIG_BSD=y" >> $config_host_mak 6386fi 6387 6388if test "$qom_cast_debug" = "yes" ; then 6389 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 6390fi 6391if test "$rbd" = "yes" ; then 6392 echo "CONFIG_RBD=y" >> $config_host_mak 6393 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 6394fi 6395 6396echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 6397if test "$coroutine_pool" = "yes" ; then 6398 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 6399else 6400 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 6401fi 6402 6403if test "$debug_stack_usage" = "yes" ; then 6404 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 6405fi 6406 6407if test "$crypto_afalg" = "yes" ; then 6408 echo "CONFIG_AF_ALG=y" >> $config_host_mak 6409fi 6410 6411if test "$open_by_handle_at" = "yes" ; then 6412 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 6413fi 6414 6415if test "$linux_magic_h" = "yes" ; then 6416 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 6417fi 6418 6419if test "$valgrind_h" = "yes" ; then 6420 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 6421fi 6422 6423if test "$have_asan_iface_fiber" = "yes" ; then 6424 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 6425fi 6426 6427if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 6428 echo "CONFIG_TSAN=y" >> $config_host_mak 6429fi 6430 6431if test "$has_environ" = "yes" ; then 6432 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 6433fi 6434 6435if test "$cpuid_h" = "yes" ; then 6436 echo "CONFIG_CPUID_H=y" >> $config_host_mak 6437fi 6438 6439if test "$int128" = "yes" ; then 6440 echo "CONFIG_INT128=y" >> $config_host_mak 6441fi 6442 6443if test "$atomic128" = "yes" ; then 6444 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 6445fi 6446 6447if test "$cmpxchg128" = "yes" ; then 6448 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 6449fi 6450 6451if test "$atomic64" = "yes" ; then 6452 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 6453fi 6454 6455if test "$attralias" = "yes" ; then 6456 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak 6457fi 6458 6459if test "$getauxval" = "yes" ; then 6460 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 6461fi 6462 6463if test "$glusterfs" = "yes" ; then 6464 echo "CONFIG_GLUSTERFS=y" >> $config_host_mak 6465 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 6466 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 6467fi 6468 6469if test "$glusterfs_xlator_opt" = "yes" ; then 6470 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 6471fi 6472 6473if test "$glusterfs_discard" = "yes" ; then 6474 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 6475fi 6476 6477if test "$glusterfs_fallocate" = "yes" ; then 6478 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 6479fi 6480 6481if test "$glusterfs_zerofill" = "yes" ; then 6482 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 6483fi 6484 6485if test "$glusterfs_ftruncate_has_stat" = "yes" ; then 6486 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak 6487fi 6488 6489if test "$glusterfs_iocb_has_stat" = "yes" ; then 6490 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak 6491fi 6492 6493if test "$libssh" = "yes" ; then 6494 echo "CONFIG_LIBSSH=y" >> $config_host_mak 6495 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 6496 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 6497fi 6498 6499if test "$live_block_migration" = "yes" ; then 6500 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 6501fi 6502 6503if test "$tpm" = "yes"; then 6504 echo 'CONFIG_TPM=y' >> $config_host_mak 6505fi 6506 6507echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 6508if have_backend "nop"; then 6509 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 6510fi 6511if have_backend "simple"; then 6512 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 6513 # Set the appropriate trace file. 6514 trace_file="\"$trace_file-\" FMT_pid" 6515fi 6516if have_backend "log"; then 6517 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 6518fi 6519if have_backend "ust"; then 6520 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 6521 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak 6522 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak 6523fi 6524if have_backend "dtrace"; then 6525 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 6526 if test "$trace_backend_stap" = "yes" ; then 6527 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 6528 fi 6529fi 6530if have_backend "ftrace"; then 6531 if test "$linux" = "yes" ; then 6532 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 6533 else 6534 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 6535 fi 6536fi 6537if have_backend "syslog"; then 6538 if test "$posix_syslog" = "yes" ; then 6539 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 6540 else 6541 feature_not_found "syslog(trace backend)" "syslog not available" 6542 fi 6543fi 6544echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 6545 6546if test "$rdma" = "yes" ; then 6547 echo "CONFIG_RDMA=y" >> $config_host_mak 6548 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 6549fi 6550 6551if test "$pvrdma" = "yes" ; then 6552 echo "CONFIG_PVRDMA=y" >> $config_host_mak 6553fi 6554 6555if test "$have_rtnetlink" = "yes" ; then 6556 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 6557fi 6558 6559if test "$libxml2" = "yes" ; then 6560 echo "CONFIG_LIBXML2=y" >> $config_host_mak 6561 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 6562 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 6563fi 6564 6565if test "$replication" = "yes" ; then 6566 echo "CONFIG_REPLICATION=y" >> $config_host_mak 6567fi 6568 6569if test "$have_af_vsock" = "yes" ; then 6570 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 6571fi 6572 6573if test "$have_sysmacros" = "yes" ; then 6574 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 6575fi 6576 6577if test "$have_static_assert" = "yes" ; then 6578 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 6579fi 6580 6581if test "$have_utmpx" = "yes" ; then 6582 echo "HAVE_UTMPX=y" >> $config_host_mak 6583fi 6584if test "$have_getrandom" = "yes" ; then 6585 echo "CONFIG_GETRANDOM=y" >> $config_host_mak 6586fi 6587if test "$ivshmem" = "yes" ; then 6588 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 6589fi 6590if test "$debug_mutex" = "yes" ; then 6591 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 6592fi 6593 6594# Hold two types of flag: 6595# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 6596# a thread we have a handle to 6597# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 6598# platform 6599if test "$pthread_setname_np_w_tid" = "yes" ; then 6600 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6601 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 6602elif test "$pthread_setname_np_wo_tid" = "yes" ; then 6603 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6604 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 6605fi 6606 6607if test "$libpmem" = "yes" ; then 6608 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 6609 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak 6610 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak 6611fi 6612 6613if test "$libdaxctl" = "yes" ; then 6614 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak 6615 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak 6616fi 6617 6618if test "$bochs" = "yes" ; then 6619 echo "CONFIG_BOCHS=y" >> $config_host_mak 6620fi 6621if test "$cloop" = "yes" ; then 6622 echo "CONFIG_CLOOP=y" >> $config_host_mak 6623fi 6624if test "$dmg" = "yes" ; then 6625 echo "CONFIG_DMG=y" >> $config_host_mak 6626fi 6627if test "$qcow1" = "yes" ; then 6628 echo "CONFIG_QCOW1=y" >> $config_host_mak 6629fi 6630if test "$vdi" = "yes" ; then 6631 echo "CONFIG_VDI=y" >> $config_host_mak 6632fi 6633if test "$vvfat" = "yes" ; then 6634 echo "CONFIG_VVFAT=y" >> $config_host_mak 6635fi 6636if test "$qed" = "yes" ; then 6637 echo "CONFIG_QED=y" >> $config_host_mak 6638fi 6639if test "$parallels" = "yes" ; then 6640 echo "CONFIG_PARALLELS=y" >> $config_host_mak 6641fi 6642if test "$sheepdog" = "yes" ; then 6643 add_to deprecated_features "sheepdog" 6644 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 6645fi 6646if test "$have_mlockall" = "yes" ; then 6647 echo "HAVE_MLOCKALL=y" >> $config_host_mak 6648fi 6649if test "$fuzzing" = "yes" ; then 6650 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the 6651 # needed CFLAGS have already been provided 6652 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then 6653 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link" 6654 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer" 6655 else 6656 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE" 6657 fi 6658fi 6659 6660if test "$plugins" = "yes" ; then 6661 echo "CONFIG_PLUGIN=y" >> $config_host_mak 6662 # Copy the export object list to the build dir 6663 if test "$ld_dynamic_list" = "yes" ; then 6664 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 6665 ld_symbols=qemu-plugins-ld.symbols 6666 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 6667 elif test "$ld_exported_symbols_list" = "yes" ; then 6668 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 6669 ld64_symbols=qemu-plugins-ld64.symbols 6670 echo "# Automatically generated by configure - do not modify" > $ld64_symbols 6671 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 6672 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 6673 else 6674 error_exit \ 6675 "If \$plugins=yes, either \$ld_dynamic_list or " \ 6676 "\$ld_exported_symbols_list should have been set to 'yes'." 6677 fi 6678fi 6679 6680if test -n "$gdb_bin" ; then 6681 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 6682fi 6683 6684if test "$secret_keyring" = "yes" ; then 6685 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 6686fi 6687 6688echo "ROMS=$roms" >> $config_host_mak 6689echo "MAKE=$make" >> $config_host_mak 6690echo "PYTHON=$python" >> $config_host_mak 6691echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 6692echo "MESON=$meson" >> $config_host_mak 6693echo "NINJA=$ninja" >> $config_host_mak 6694echo "CC=$cc" >> $config_host_mak 6695if $iasl -h > /dev/null 2>&1; then 6696 echo "CONFIG_IASL=$iasl" >> $config_host_mak 6697fi 6698echo "CXX=$cxx" >> $config_host_mak 6699echo "OBJCC=$objcc" >> $config_host_mak 6700echo "AR=$ar" >> $config_host_mak 6701echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 6702echo "AS=$as" >> $config_host_mak 6703echo "CCAS=$ccas" >> $config_host_mak 6704echo "CPP=$cpp" >> $config_host_mak 6705echo "OBJCOPY=$objcopy" >> $config_host_mak 6706echo "LD=$ld" >> $config_host_mak 6707echo "RANLIB=$ranlib" >> $config_host_mak 6708echo "NM=$nm" >> $config_host_mak 6709echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 6710echo "WINDRES=$windres" >> $config_host_mak 6711echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 6712echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 6713echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 6714echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 6715echo "GLIB_LIBS=$glib_libs" >> $config_host_mak 6716echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 6717echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 6718echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 6719echo "EXESUF=$EXESUF" >> $config_host_mak 6720echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak 6721echo "LIBS_QGA=$libs_qga" >> $config_host_mak 6722echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 6723echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 6724if test "$gcov" = "yes" ; then 6725 echo "CONFIG_GCOV=y" >> $config_host_mak 6726fi 6727 6728if test "$fuzzing" != "no"; then 6729 echo "CONFIG_FUZZ=y" >> $config_host_mak 6730fi 6731echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak 6732 6733if test "$rng_none" = "yes"; then 6734 echo "CONFIG_RNG_NONE=y" >> $config_host_mak 6735fi 6736 6737# use included Linux headers 6738if test "$linux" = "yes" ; then 6739 mkdir -p linux-headers 6740 case "$cpu" in 6741 i386|x86_64|x32) 6742 linux_arch=x86 6743 ;; 6744 ppc|ppc64|ppc64le) 6745 linux_arch=powerpc 6746 ;; 6747 s390x) 6748 linux_arch=s390 6749 ;; 6750 aarch64) 6751 linux_arch=arm64 6752 ;; 6753 mips64) 6754 linux_arch=mips 6755 ;; 6756 *) 6757 # For most CPUs the kernel architecture name and QEMU CPU name match. 6758 linux_arch="$cpu" 6759 ;; 6760 esac 6761 # For non-KVM architectures we will not have asm headers 6762 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 6763 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 6764 fi 6765fi 6766 6767for target in $target_list; do 6768 target_dir="$target" 6769 target_name=$(echo $target | cut -d '-' -f 1) 6770 mkdir -p $target_dir 6771 case $target in 6772 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;; 6773 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;; 6774 esac 6775done 6776 6777echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak 6778if test "$default_targets" = "yes"; then 6779 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak 6780fi 6781 6782if test "$numa" = "yes"; then 6783 echo "CONFIG_NUMA=y" >> $config_host_mak 6784 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak 6785fi 6786 6787if test "$ccache_cpp2" = "yes"; then 6788 echo "export CCACHE_CPP2=y" >> $config_host_mak 6789fi 6790 6791if test "$safe_stack" = "yes"; then 6792 echo "CONFIG_SAFESTACK=y" >> $config_host_mak 6793fi 6794 6795# If we're using a separate build tree, set it up now. 6796# DIRS are directories which we simply mkdir in the build tree; 6797# LINKS are things to symlink back into the source tree 6798# (these can be both files and directories). 6799# Caution: do not add files or directories here using wildcards. This 6800# will result in problems later if a new file matching the wildcard is 6801# added to the source tree -- nothing will cause configure to be rerun 6802# so the build tree will be missing the link back to the new file, and 6803# tests might fail. Prefer to keep the relevant files in their own 6804# directory and symlink the directory instead. 6805# UNLINK is used to remove symlinks from older development versions 6806# that might get into the way when doing "git update" without doing 6807# a "make distclean" in between. 6808DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" 6809DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 6810DIRS="$DIRS docs docs/interop fsdev scsi" 6811DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 6812DIRS="$DIRS roms/seabios" 6813DIRS="$DIRS contrib/plugins/" 6814LINKS="Makefile" 6815LINKS="$LINKS tests/tcg/lm32/Makefile" 6816LINKS="$LINKS tests/tcg/Makefile.target" 6817LINKS="$LINKS pc-bios/optionrom/Makefile" 6818LINKS="$LINKS pc-bios/s390-ccw/Makefile" 6819LINKS="$LINKS roms/seabios/Makefile" 6820LINKS="$LINKS pc-bios/qemu-icon.bmp" 6821LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 6822LINKS="$LINKS tests/acceptance tests/data" 6823LINKS="$LINKS tests/qemu-iotests/check" 6824LINKS="$LINKS python" 6825LINKS="$LINKS contrib/plugins/Makefile " 6826UNLINK="pc-bios/keymaps" 6827for bios_file in \ 6828 $source_path/pc-bios/*.bin \ 6829 $source_path/pc-bios/*.elf \ 6830 $source_path/pc-bios/*.lid \ 6831 $source_path/pc-bios/*.rom \ 6832 $source_path/pc-bios/*.dtb \ 6833 $source_path/pc-bios/*.img \ 6834 $source_path/pc-bios/openbios-* \ 6835 $source_path/pc-bios/u-boot.* \ 6836 $source_path/pc-bios/edk2-*.fd.bz2 \ 6837 $source_path/pc-bios/palcode-* 6838do 6839 LINKS="$LINKS pc-bios/$(basename $bios_file)" 6840done 6841mkdir -p $DIRS 6842for f in $LINKS ; do 6843 if [ -e "$source_path/$f" ]; then 6844 symlink "$source_path/$f" "$f" 6845 fi 6846done 6847for f in $UNLINK ; do 6848 if [ -L "$f" ]; then 6849 rm -f "$f" 6850 fi 6851done 6852 6853(for i in $cross_cc_vars; do 6854 export $i 6855done 6856export target_list source_path use_containers 6857$source_path/tests/tcg/configure.sh) 6858 6859# temporary config to build submodules 6860for rom in seabios; do 6861 config_mak=roms/$rom/config.mak 6862 echo "# Automatically generated by configure - do not modify" > $config_mak 6863 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 6864 echo "AS=$as" >> $config_mak 6865 echo "CCAS=$ccas" >> $config_mak 6866 echo "CC=$cc" >> $config_mak 6867 echo "BCC=bcc" >> $config_mak 6868 echo "CPP=$cpp" >> $config_mak 6869 echo "OBJCOPY=objcopy" >> $config_mak 6870 echo "IASL=$iasl" >> $config_mak 6871 echo "LD=$ld" >> $config_mak 6872 echo "RANLIB=$ranlib" >> $config_mak 6873done 6874 6875# set up qemu-iotests in this build directory 6876iotests_common_env="tests/qemu-iotests/common.env" 6877 6878echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 6879echo >> "$iotests_common_env" 6880echo "export PYTHON='$python'" >> "$iotests_common_env" 6881 6882if test "$skip_meson" = no; then 6883cross="config-meson.cross.new" 6884meson_quote() { 6885 echo "'$(echo $* | sed "s/ /','/g")'" 6886} 6887 6888echo "# Automatically generated by configure - do not modify" > $cross 6889echo "[properties]" >> $cross 6890test -z "$cxx" && echo "link_language = 'c'" >> $cross 6891echo "[built-in options]" >> $cross 6892echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross 6893echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross 6894echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross 6895echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross 6896echo "[binaries]" >> $cross 6897echo "c = [$(meson_quote $cc)]" >> $cross 6898test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross 6899echo "ar = [$(meson_quote $ar)]" >> $cross 6900echo "nm = [$(meson_quote $nm)]" >> $cross 6901echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross 6902echo "ranlib = [$(meson_quote $ranlib)]" >> $cross 6903if has $sdl2_config; then 6904 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross 6905fi 6906echo "strip = [$(meson_quote $strip)]" >> $cross 6907echo "windres = [$(meson_quote $windres)]" >> $cross 6908if test -n "$cross_prefix"; then 6909 cross_arg="--cross-file config-meson.cross" 6910 echo "[host_machine]" >> $cross 6911 if test "$mingw32" = "yes" ; then 6912 echo "system = 'windows'" >> $cross 6913 fi 6914 if test "$linux" = "yes" ; then 6915 echo "system = 'linux'" >> $cross 6916 fi 6917 case "$ARCH" in 6918 i386|x86_64) 6919 echo "cpu_family = 'x86'" >> $cross 6920 ;; 6921 ppc64le) 6922 echo "cpu_family = 'ppc64'" >> $cross 6923 ;; 6924 *) 6925 echo "cpu_family = '$ARCH'" >> $cross 6926 ;; 6927 esac 6928 echo "cpu = '$cpu'" >> $cross 6929 if test "$bigendian" = "yes" ; then 6930 echo "endian = 'big'" >> $cross 6931 else 6932 echo "endian = 'little'" >> $cross 6933 fi 6934else 6935 cross_arg="--native-file config-meson.cross" 6936fi 6937mv $cross config-meson.cross 6938 6939rm -rf meson-private meson-info meson-logs 6940unset staticpic 6941if ! version_ge "$($meson --version)" 0.56.0; then 6942 staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi) 6943fi 6944NINJA=$ninja $meson setup \ 6945 --prefix "$prefix" \ 6946 --libdir "$libdir" \ 6947 --libexecdir "$libexecdir" \ 6948 --bindir "$bindir" \ 6949 --includedir "$includedir" \ 6950 --datadir "$datadir" \ 6951 --mandir "$mandir" \ 6952 --sysconfdir "$sysconfdir" \ 6953 --localedir "$localedir" \ 6954 --localstatedir "$local_statedir" \ 6955 -Ddocdir="$docdir" \ 6956 -Dqemu_firmwarepath="$firmwarepath" \ 6957 -Dqemu_suffix="$qemu_suffix" \ 6958 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ 6959 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ 6960 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ 6961 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \ 6962 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ 6963 ${staticpic:+-Db_staticpic=$staticpic} \ 6964 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ 6965 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \ 6966 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \ 6967 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \ 6968 -Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \ 6969 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \ 6970 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \ 6971 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \ 6972 -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\ 6973 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \ 6974 -Dvhost_user_blk_server=$vhost_user_blk_server \ 6975 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek \ 6976 $cross_arg \ 6977 "$PWD" "$source_path" 6978 6979if test "$?" -ne 0 ; then 6980 error_exit "meson setup failed" 6981fi 6982fi 6983 6984if test -n "${deprecated_features}"; then 6985 echo "Warning, deprecated features enabled." 6986 echo "Please see docs/system/deprecated.rst" 6987 echo " features: ${deprecated_features}" 6988fi 6989 6990# Save the configure command line for later reuse. 6991cat <<EOD >config.status 6992#!/bin/sh 6993# Generated by configure. 6994# Run this file to recreate the current configuration. 6995# Compiler output produced by configure, useful for debugging 6996# configure, is in config.log if it exists. 6997EOD 6998 6999preserve_env() { 7000 envname=$1 7001 7002 eval envval=\$$envname 7003 7004 if test -n "$envval" 7005 then 7006 echo "$envname='$envval'" >> config.status 7007 echo "export $envname" >> config.status 7008 else 7009 echo "unset $envname" >> config.status 7010 fi 7011} 7012 7013# Preserve various env variables that influence what 7014# features/build target configure will detect 7015preserve_env AR 7016preserve_env AS 7017preserve_env CC 7018preserve_env CPP 7019preserve_env CXX 7020preserve_env INSTALL 7021preserve_env LD 7022preserve_env LD_LIBRARY_PATH 7023preserve_env LIBTOOL 7024preserve_env MAKE 7025preserve_env NM 7026preserve_env OBJCOPY 7027preserve_env PATH 7028preserve_env PKG_CONFIG 7029preserve_env PKG_CONFIG_LIBDIR 7030preserve_env PKG_CONFIG_PATH 7031preserve_env PYTHON 7032preserve_env SDL2_CONFIG 7033preserve_env SMBD 7034preserve_env STRIP 7035preserve_env WINDRES 7036 7037printf "exec" >>config.status 7038for i in "$0" "$@"; do 7039 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status 7040done 7041echo ' "$@"' >>config.status 7042chmod +x config.status 7043 7044rm -r "$TMPDIR1" 7045