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