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