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