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