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