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#include <sys/timex.h> 4043 4044int main(void) 4045{ 4046 return clock_adjtime(0, 0); 4047} 4048EOF 4049clock_adjtime=no 4050if compile_prog "" "" ; then 4051 clock_adjtime=yes 4052fi 4053 4054# syncfs probe 4055syncfs=no 4056cat > $TMPC <<EOF 4057#include <unistd.h> 4058 4059int main(void) 4060{ 4061 return syncfs(0); 4062} 4063EOF 4064syncfs=no 4065if compile_prog "" "" ; then 4066 syncfs=yes 4067fi 4068 4069# Search for bswap_32 function 4070byteswap_h=no 4071cat > $TMPC << EOF 4072#include <byteswap.h> 4073int main(void) { return bswap_32(0); } 4074EOF 4075if compile_prog "" "" ; then 4076 byteswap_h=yes 4077fi 4078 4079# Search for bswap32 function 4080bswap_h=no 4081cat > $TMPC << EOF 4082#include <sys/endian.h> 4083#include <sys/types.h> 4084#include <machine/bswap.h> 4085int main(void) { return bswap32(0); } 4086EOF 4087if compile_prog "" "" ; then 4088 bswap_h=yes 4089fi 4090 4091########################################## 4092# Do we need librt 4093# uClibc provides 2 versions of clock_gettime(), one with realtime 4094# support and one without. This means that the clock_gettime() don't 4095# need -lrt. We still need it for timer_create() so we check for this 4096# function in addition. 4097cat > $TMPC <<EOF 4098#include <signal.h> 4099#include <time.h> 4100int main(void) { 4101 timer_create(CLOCK_REALTIME, NULL, NULL); 4102 return clock_gettime(CLOCK_REALTIME, NULL); 4103} 4104EOF 4105 4106if compile_prog "" "" ; then 4107 : 4108# we need pthread for static linking. use previous pthread test result 4109elif compile_prog "" "$pthread_lib -lrt" ; then 4110 LIBS="$LIBS -lrt" 4111fi 4112 4113# Check whether we have openpty() in either libc or libutil 4114cat > $TMPC << EOF 4115extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 4116int main(void) { return openpty(0, 0, 0, 0, 0); } 4117EOF 4118 4119have_openpty="no" 4120if compile_prog "" "" ; then 4121 have_openpty="yes" 4122else 4123 if compile_prog "" "-lutil" ; then 4124 have_openpty="yes" 4125 fi 4126fi 4127 4128########################################## 4129# spice probe 4130if test "$spice" != "no" ; then 4131 cat > $TMPC << EOF 4132#include <spice.h> 4133int main(void) { spice_server_new(); return 0; } 4134EOF 4135 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4136 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4137 if $pkg_config --atleast-version=0.12.5 spice-server && \ 4138 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4139 compile_prog "$spice_cflags" "$spice_libs" ; then 4140 spice="yes" 4141 else 4142 if test "$spice" = "yes" ; then 4143 feature_not_found "spice" \ 4144 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 4145 fi 4146 spice="no" 4147 fi 4148fi 4149 4150# check for smartcard support 4151if test "$smartcard" != "no"; then 4152 if $pkg_config --atleast-version=2.5.1 libcacard; then 4153 libcacard_cflags=$($pkg_config --cflags libcacard) 4154 libcacard_libs=$($pkg_config --libs libcacard) 4155 smartcard="yes" 4156 else 4157 if test "$smartcard" = "yes"; then 4158 feature_not_found "smartcard" "Install libcacard devel" 4159 fi 4160 smartcard="no" 4161 fi 4162fi 4163 4164# check for libusb 4165if test "$libusb" != "no" ; then 4166 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 4167 libusb="yes" 4168 libusb_cflags=$($pkg_config --cflags libusb-1.0) 4169 libusb_libs=$($pkg_config --libs libusb-1.0) 4170 else 4171 if test "$libusb" = "yes"; then 4172 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 4173 fi 4174 libusb="no" 4175 fi 4176fi 4177 4178# check for usbredirparser for usb network redirection support 4179if test "$usb_redir" != "no" ; then 4180 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 4181 usb_redir="yes" 4182 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4183 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 4184 else 4185 if test "$usb_redir" = "yes"; then 4186 feature_not_found "usb-redir" "Install usbredir devel" 4187 fi 4188 usb_redir="no" 4189 fi 4190fi 4191 4192########################################## 4193# check if we have VSS SDK headers for win 4194 4195if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 4196 test "$vss_win32_sdk" != "no" ; then 4197 case "$vss_win32_sdk" in 4198 "") vss_win32_include="-isystem $source_path" ;; 4199 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4200 # handle path with spaces. So we symlink the headers into ".sdk/vss". 4201 vss_win32_include="-isystem $source_path/.sdk/vss" 4202 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4203 ;; 4204 *) vss_win32_include="-isystem $vss_win32_sdk" 4205 esac 4206 cat > $TMPC << EOF 4207#define __MIDL_user_allocate_free_DEFINED__ 4208#include <inc/win2003/vss.h> 4209int main(void) { return VSS_CTX_BACKUP; } 4210EOF 4211 if compile_prog "$vss_win32_include" "" ; then 4212 guest_agent_with_vss="yes" 4213 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4214 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4215 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4216 else 4217 if test "$vss_win32_sdk" != "" ; then 4218 echo "ERROR: Please download and install Microsoft VSS SDK:" 4219 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4220 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4221 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4222 echo "ERROR: The headers are extracted in the directory \`inc'." 4223 feature_not_found "VSS support" 4224 fi 4225 guest_agent_with_vss="no" 4226 fi 4227fi 4228 4229########################################## 4230# lookup Windows platform SDK (if not specified) 4231# The SDK is needed only to build .tlb (type library) file of guest agent 4232# VSS provider from the source. It is usually unnecessary because the 4233# pre-compiled .tlb file is included. 4234 4235if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 4236 test "$guest_agent_with_vss" = "yes" ; then 4237 if test -z "$win_sdk"; then 4238 programfiles="$PROGRAMFILES" 4239 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4240 if test -n "$programfiles"; then 4241 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4242 else 4243 feature_not_found "Windows SDK" 4244 fi 4245 elif test "$win_sdk" = "no"; then 4246 win_sdk="" 4247 fi 4248fi 4249 4250########################################## 4251# check if mingw environment provides a recent ntddscsi.h 4252if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 4253 cat > $TMPC << EOF 4254#include <windows.h> 4255#include <ntddscsi.h> 4256int main(void) { 4257#if !defined(IOCTL_SCSI_GET_ADDRESS) 4258#error Missing required ioctl definitions 4259#endif 4260 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4261 return addr.Lun; 4262} 4263EOF 4264 if compile_prog "" "" ; then 4265 guest_agent_ntddscsi=yes 4266 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 4267 fi 4268fi 4269 4270########################################## 4271# virgl renderer probe 4272 4273if test "$virglrenderer" != "no" ; then 4274 cat > $TMPC << EOF 4275#include <virglrenderer.h> 4276int main(void) { virgl_renderer_poll(); return 0; } 4277EOF 4278 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4279 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 4280 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 4281 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4282 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4283 virglrenderer="yes" 4284 else 4285 if test "$virglrenderer" = "yes" ; then 4286 feature_not_found "virglrenderer" 4287 fi 4288 virglrenderer="no" 4289 fi 4290fi 4291 4292########################################## 4293# capstone 4294 4295case "$capstone" in 4296 auto | enabled | internal) 4297 # Simpler to always update submodule, even if not needed. 4298 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then 4299 git_submodules="${git_submodules} capstone" 4300 fi 4301 ;; 4302esac 4303 4304########################################## 4305# check if we have fdatasync 4306 4307fdatasync=no 4308cat > $TMPC << EOF 4309#include <unistd.h> 4310int main(void) { 4311#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4312return fdatasync(0); 4313#else 4314#error Not supported 4315#endif 4316} 4317EOF 4318if compile_prog "" "" ; then 4319 fdatasync=yes 4320fi 4321 4322########################################## 4323# check if we have madvise 4324 4325madvise=no 4326cat > $TMPC << EOF 4327#include <sys/types.h> 4328#include <sys/mman.h> 4329#include <stddef.h> 4330int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4331EOF 4332if compile_prog "" "" ; then 4333 madvise=yes 4334fi 4335 4336########################################## 4337# check if we have posix_madvise 4338 4339posix_madvise=no 4340cat > $TMPC << EOF 4341#include <sys/mman.h> 4342#include <stddef.h> 4343int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4344EOF 4345if compile_prog "" "" ; then 4346 posix_madvise=yes 4347fi 4348 4349########################################## 4350# check if we have posix_memalign() 4351 4352posix_memalign=no 4353cat > $TMPC << EOF 4354#include <stdlib.h> 4355int main(void) { 4356 void *p; 4357 return posix_memalign(&p, 8, 8); 4358} 4359EOF 4360if compile_prog "" "" ; then 4361 posix_memalign=yes 4362fi 4363 4364########################################## 4365# check if we have posix_syslog 4366 4367posix_syslog=no 4368cat > $TMPC << EOF 4369#include <syslog.h> 4370int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 4371EOF 4372if compile_prog "" "" ; then 4373 posix_syslog=yes 4374fi 4375 4376########################################## 4377# check if we have sem_timedwait 4378 4379sem_timedwait=no 4380cat > $TMPC << EOF 4381#include <semaphore.h> 4382int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 4383EOF 4384if compile_prog "" "" ; then 4385 sem_timedwait=yes 4386fi 4387 4388########################################## 4389# check if we have strchrnul 4390 4391strchrnul=no 4392cat > $TMPC << EOF 4393#include <string.h> 4394int main(void); 4395// Use a haystack that the compiler shouldn't be able to constant fold 4396char *haystack = (char*)&main; 4397int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 4398EOF 4399if compile_prog "" "" ; then 4400 strchrnul=yes 4401fi 4402 4403######################################### 4404# check if we have st_atim 4405 4406st_atim=no 4407cat > $TMPC << EOF 4408#include <sys/stat.h> 4409#include <stddef.h> 4410int main(void) { return offsetof(struct stat, st_atim); } 4411EOF 4412if compile_prog "" "" ; then 4413 st_atim=yes 4414fi 4415 4416########################################## 4417# check if trace backend exists 4418 4419$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4420if test "$?" -ne 0 ; then 4421 error_exit "invalid trace backends" \ 4422 "Please choose supported trace backends." 4423fi 4424 4425########################################## 4426# For 'ust' backend, test if ust headers are present 4427if have_backend "ust"; then 4428 cat > $TMPC << EOF 4429#include <lttng/tracepoint.h> 4430int main(void) { return 0; } 4431EOF 4432 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 4433 if $pkg_config lttng-ust --exists; then 4434 lttng_ust_libs=$($pkg_config --libs lttng-ust) 4435 else 4436 lttng_ust_libs="-llttng-ust -ldl" 4437 fi 4438 if $pkg_config liburcu-bp --exists; then 4439 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 4440 else 4441 urcu_bp_libs="-lurcu-bp" 4442 fi 4443 else 4444 error_exit "Trace backend 'ust' missing lttng-ust header files" 4445 fi 4446fi 4447 4448########################################## 4449# For 'dtrace' backend, test if 'dtrace' command is present 4450if have_backend "dtrace"; then 4451 if ! has 'dtrace' ; then 4452 error_exit "dtrace command is not found in PATH $PATH" 4453 fi 4454 trace_backend_stap="no" 4455 if has 'stap' ; then 4456 trace_backend_stap="yes" 4457 4458 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol 4459 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility 4460 # instead. QEMU --enable-modules depends on this because the SystemTap 4461 # semaphores are linked into the main binary and not the module's shared 4462 # object. 4463 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2" 4464 fi 4465fi 4466 4467########################################## 4468# check and set a backend for coroutine 4469 4470# We prefer ucontext, but it's not always possible. The fallback 4471# is sigcontext. On Windows the only valid backend is the Windows 4472# specific one. 4473 4474ucontext_works=no 4475if test "$darwin" != "yes"; then 4476 cat > $TMPC << EOF 4477#include <ucontext.h> 4478#ifdef __stub_makecontext 4479#error Ignoring glibc stub makecontext which will always fail 4480#endif 4481int main(void) { makecontext(0, 0, 0); return 0; } 4482EOF 4483 if compile_prog "" "" ; then 4484 ucontext_works=yes 4485 fi 4486fi 4487 4488if test "$coroutine" = ""; then 4489 if test "$mingw32" = "yes"; then 4490 coroutine=win32 4491 elif test "$ucontext_works" = "yes"; then 4492 coroutine=ucontext 4493 else 4494 coroutine=sigaltstack 4495 fi 4496else 4497 case $coroutine in 4498 windows) 4499 if test "$mingw32" != "yes"; then 4500 error_exit "'windows' coroutine backend only valid for Windows" 4501 fi 4502 # Unfortunately the user visible backend name doesn't match the 4503 # coroutine-*.c filename for this case, so we have to adjust it here. 4504 coroutine=win32 4505 ;; 4506 ucontext) 4507 if test "$ucontext_works" != "yes"; then 4508 feature_not_found "ucontext" 4509 fi 4510 ;; 4511 sigaltstack) 4512 if test "$mingw32" = "yes"; then 4513 error_exit "only the 'windows' coroutine backend is valid for Windows" 4514 fi 4515 ;; 4516 *) 4517 error_exit "unknown coroutine backend $coroutine" 4518 ;; 4519 esac 4520fi 4521 4522if test "$coroutine_pool" = ""; then 4523 coroutine_pool=yes 4524fi 4525 4526if test "$debug_stack_usage" = "yes"; then 4527 if test "$coroutine_pool" = "yes"; then 4528 echo "WARN: disabling coroutine pool for stack usage debugging" 4529 coroutine_pool=no 4530 fi 4531fi 4532 4533################################################## 4534# SafeStack 4535 4536 4537if test "$safe_stack" = "yes"; then 4538cat > $TMPC << EOF 4539int main(int argc, char *argv[]) 4540{ 4541#if ! __has_feature(safe_stack) 4542#error SafeStack Disabled 4543#endif 4544 return 0; 4545} 4546EOF 4547 flag="-fsanitize=safe-stack" 4548 # Check that safe-stack is supported and enabled. 4549 if compile_prog "-Werror $flag" "$flag"; then 4550 # Flag needed both at compilation and at linking 4551 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 4552 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 4553 else 4554 error_exit "SafeStack not supported by your compiler" 4555 fi 4556 if test "$coroutine" != "ucontext"; then 4557 error_exit "SafeStack is only supported by the coroutine backend ucontext" 4558 fi 4559else 4560cat > $TMPC << EOF 4561int main(int argc, char *argv[]) 4562{ 4563#if defined(__has_feature) 4564#if __has_feature(safe_stack) 4565#error SafeStack Enabled 4566#endif 4567#endif 4568 return 0; 4569} 4570EOF 4571if test "$safe_stack" = "no"; then 4572 # Make sure that safe-stack is disabled 4573 if ! compile_prog "-Werror" ""; then 4574 # SafeStack was already enabled, try to explicitly remove the feature 4575 flag="-fno-sanitize=safe-stack" 4576 if ! compile_prog "-Werror $flag" "$flag"; then 4577 error_exit "Configure cannot disable SafeStack" 4578 fi 4579 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 4580 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 4581 fi 4582else # "$safe_stack" = "" 4583 # Set safe_stack to yes or no based on pre-existing flags 4584 if compile_prog "-Werror" ""; then 4585 safe_stack="no" 4586 else 4587 safe_stack="yes" 4588 if test "$coroutine" != "ucontext"; then 4589 error_exit "SafeStack is only supported by the coroutine backend ucontext" 4590 fi 4591 fi 4592fi 4593fi 4594 4595########################################## 4596# check if we have open_by_handle_at 4597 4598open_by_handle_at=no 4599cat > $TMPC << EOF 4600#include <fcntl.h> 4601#if !defined(AT_EMPTY_PATH) 4602# error missing definition 4603#else 4604int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 4605#endif 4606EOF 4607if compile_prog "" "" ; then 4608 open_by_handle_at=yes 4609fi 4610 4611######################################## 4612# check if we have linux/magic.h 4613 4614linux_magic_h=no 4615cat > $TMPC << EOF 4616#include <linux/magic.h> 4617int main(void) { 4618 return 0; 4619} 4620EOF 4621if compile_prog "" "" ; then 4622 linux_magic_h=yes 4623fi 4624 4625######################################## 4626# check if we have valgrind/valgrind.h 4627 4628valgrind_h=no 4629cat > $TMPC << EOF 4630#include <valgrind/valgrind.h> 4631int main(void) { 4632 return 0; 4633} 4634EOF 4635if compile_prog "" "" ; then 4636 valgrind_h=yes 4637fi 4638 4639######################################## 4640# check if environ is declared 4641 4642has_environ=no 4643cat > $TMPC << EOF 4644#include <unistd.h> 4645int main(void) { 4646 environ = 0; 4647 return 0; 4648} 4649EOF 4650if compile_prog "" "" ; then 4651 has_environ=yes 4652fi 4653 4654######################################## 4655# check if cpuid.h is usable. 4656 4657cat > $TMPC << EOF 4658#include <cpuid.h> 4659int main(void) { 4660 unsigned a, b, c, d; 4661 int max = __get_cpuid_max(0, 0); 4662 4663 if (max >= 1) { 4664 __cpuid(1, a, b, c, d); 4665 } 4666 4667 if (max >= 7) { 4668 __cpuid_count(7, 0, a, b, c, d); 4669 } 4670 4671 return 0; 4672} 4673EOF 4674if compile_prog "" "" ; then 4675 cpuid_h=yes 4676fi 4677 4678########################################## 4679# avx2 optimization requirement check 4680# 4681# There is no point enabling this if cpuid.h is not usable, 4682# since we won't be able to select the new routines. 4683 4684if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 4685 cat > $TMPC << EOF 4686#pragma GCC push_options 4687#pragma GCC target("avx2") 4688#include <cpuid.h> 4689#include <immintrin.h> 4690static int bar(void *a) { 4691 __m256i x = *(__m256i *)a; 4692 return _mm256_testz_si256(x, x); 4693} 4694int main(int argc, char *argv[]) { return bar(argv[0]); } 4695EOF 4696 if compile_object "" ; then 4697 avx2_opt="yes" 4698 else 4699 avx2_opt="no" 4700 fi 4701fi 4702 4703########################################## 4704# avx512f optimization requirement check 4705# 4706# There is no point enabling this if cpuid.h is not usable, 4707# since we won't be able to select the new routines. 4708# by default, it is turned off. 4709# if user explicitly want to enable it, check environment 4710 4711if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 4712 cat > $TMPC << EOF 4713#pragma GCC push_options 4714#pragma GCC target("avx512f") 4715#include <cpuid.h> 4716#include <immintrin.h> 4717static int bar(void *a) { 4718 __m512i x = *(__m512i *)a; 4719 return _mm512_test_epi64_mask(x, x); 4720} 4721int main(int argc, char *argv[]) 4722{ 4723 return bar(argv[0]); 4724} 4725EOF 4726 if ! compile_object "" ; then 4727 avx512f_opt="no" 4728 fi 4729else 4730 avx512f_opt="no" 4731fi 4732 4733######################################## 4734# check if __[u]int128_t is usable. 4735 4736int128=no 4737cat > $TMPC << EOF 4738__int128_t a; 4739__uint128_t b; 4740int main (void) { 4741 a = a + b; 4742 b = a * b; 4743 a = a * a; 4744 return 0; 4745} 4746EOF 4747if compile_prog "" "" ; then 4748 int128=yes 4749fi 4750 4751######################################### 4752# See if 128-bit atomic operations are supported. 4753 4754atomic128=no 4755if test "$int128" = "yes"; then 4756 cat > $TMPC << EOF 4757int main(void) 4758{ 4759 unsigned __int128 x = 0, y = 0; 4760 y = __atomic_load_16(&x, 0); 4761 __atomic_store_16(&x, y, 0); 4762 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 4763 return 0; 4764} 4765EOF 4766 if compile_prog "" "" ; then 4767 atomic128=yes 4768 fi 4769fi 4770 4771cmpxchg128=no 4772if test "$int128" = yes && test "$atomic128" = no; then 4773 cat > $TMPC << EOF 4774int main(void) 4775{ 4776 unsigned __int128 x = 0, y = 0; 4777 __sync_val_compare_and_swap_16(&x, y, x); 4778 return 0; 4779} 4780EOF 4781 if compile_prog "" "" ; then 4782 cmpxchg128=yes 4783 fi 4784fi 4785 4786######################################### 4787# See if 64-bit atomic operations are supported. 4788# Note that without __atomic builtins, we can only 4789# assume atomic loads/stores max at pointer size. 4790 4791cat > $TMPC << EOF 4792#include <stdint.h> 4793int main(void) 4794{ 4795 uint64_t x = 0, y = 0; 4796#ifdef __ATOMIC_RELAXED 4797 y = __atomic_load_n(&x, __ATOMIC_RELAXED); 4798 __atomic_store_n(&x, y, __ATOMIC_RELAXED); 4799 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED); 4800 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED); 4801 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED); 4802#else 4803 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 4804 __sync_lock_test_and_set(&x, y); 4805 __sync_val_compare_and_swap(&x, y, 0); 4806 __sync_fetch_and_add(&x, y); 4807#endif 4808 return 0; 4809} 4810EOF 4811if compile_prog "" "" ; then 4812 atomic64=yes 4813fi 4814 4815######################################### 4816# See if --dynamic-list is supported by the linker 4817ld_dynamic_list="no" 4818if test "$static" = "no" ; then 4819 cat > $TMPTXT <<EOF 4820{ 4821 foo; 4822}; 4823EOF 4824 4825 cat > $TMPC <<EOF 4826#include <stdio.h> 4827void foo(void); 4828 4829void foo(void) 4830{ 4831 printf("foo\n"); 4832} 4833 4834int main(void) 4835{ 4836 foo(); 4837 return 0; 4838} 4839EOF 4840 4841 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 4842 ld_dynamic_list="yes" 4843 fi 4844fi 4845 4846######################################### 4847# See if -exported_symbols_list is supported by the linker 4848 4849ld_exported_symbols_list="no" 4850if test "$static" = "no" ; then 4851 cat > $TMPTXT <<EOF 4852 _foo 4853EOF 4854 4855 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 4856 ld_exported_symbols_list="yes" 4857 fi 4858fi 4859 4860if test "$plugins" = "yes" && 4861 test "$ld_dynamic_list" = "no" && 4862 test "$ld_exported_symbols_list" = "no" ; then 4863 error_exit \ 4864 "Plugin support requires dynamic linking and specifying a set of symbols " \ 4865 "that are exported to plugins. Unfortunately your linker doesn't " \ 4866 "support the flag (--dynamic-list or -exported_symbols_list) used " \ 4867 "for this purpose. You can't build with --static." 4868fi 4869 4870######################################## 4871# See if __attribute__((alias)) is supported. 4872# This false for Xcode 9, but has been remedied for Xcode 10. 4873# Unfortunately, travis uses Xcode 9 by default. 4874 4875attralias=no 4876cat > $TMPC << EOF 4877int x = 1; 4878extern const int y __attribute__((alias("x"))); 4879int main(void) { return 0; } 4880EOF 4881if compile_prog "" "" ; then 4882 attralias=yes 4883fi 4884 4885######################################## 4886# check if getauxval is available. 4887 4888getauxval=no 4889cat > $TMPC << EOF 4890#include <sys/auxv.h> 4891int main(void) { 4892 return getauxval(AT_HWCAP) == 0; 4893} 4894EOF 4895if compile_prog "" "" ; then 4896 getauxval=yes 4897fi 4898 4899######################################## 4900# check if ccache is interfering with 4901# semantic analysis of macros 4902 4903unset CCACHE_CPP2 4904ccache_cpp2=no 4905cat > $TMPC << EOF 4906static const int Z = 1; 4907#define fn() ({ Z; }) 4908#define TAUT(X) ((X) == Z) 4909#define PAREN(X, Y) (X == Y) 4910#define ID(X) (X) 4911int main(int argc, char *argv[]) 4912{ 4913 int x = 0, y = 0; 4914 x = ID(x); 4915 x = fn(); 4916 fn(); 4917 if (PAREN(x, y)) return 0; 4918 if (TAUT(Z)) return 0; 4919 return 0; 4920} 4921EOF 4922 4923if ! compile_object "-Werror"; then 4924 ccache_cpp2=yes 4925fi 4926 4927################################################# 4928# clang does not support glibc + FORTIFY_SOURCE. 4929 4930if test "$fortify_source" != "no"; then 4931 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 4932 fortify_source="no"; 4933 elif test -n "$cxx" && has $cxx && 4934 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 4935 fortify_source="no"; 4936 else 4937 fortify_source="yes" 4938 fi 4939fi 4940 4941############################################### 4942# Check if copy_file_range is provided by glibc 4943have_copy_file_range=no 4944cat > $TMPC << EOF 4945#include <unistd.h> 4946int main(void) { 4947 copy_file_range(0, NULL, 0, NULL, 0, 0); 4948 return 0; 4949} 4950EOF 4951if compile_prog "" "" ; then 4952 have_copy_file_range=yes 4953fi 4954 4955########################################## 4956# check if struct fsxattr is available via linux/fs.h 4957 4958have_fsxattr=no 4959cat > $TMPC << EOF 4960#include <linux/fs.h> 4961struct fsxattr foo; 4962int main(void) { 4963 return 0; 4964} 4965EOF 4966if compile_prog "" "" ; then 4967 have_fsxattr=yes 4968fi 4969 4970########################################## 4971# check for usable membarrier system call 4972if test "$membarrier" = "yes"; then 4973 have_membarrier=no 4974 if test "$mingw32" = "yes" ; then 4975 have_membarrier=yes 4976 elif test "$linux" = "yes" ; then 4977 cat > $TMPC << EOF 4978 #include <linux/membarrier.h> 4979 #include <sys/syscall.h> 4980 #include <unistd.h> 4981 #include <stdlib.h> 4982 int main(void) { 4983 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 4984 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 4985 exit(0); 4986 } 4987EOF 4988 if compile_prog "" "" ; then 4989 have_membarrier=yes 4990 fi 4991 fi 4992 if test "$have_membarrier" = "no"; then 4993 feature_not_found "membarrier" "membarrier system call not available" 4994 fi 4995else 4996 # Do not enable it by default even for Mingw32, because it doesn't 4997 # work on Wine. 4998 membarrier=no 4999fi 5000 5001########################################## 5002# check if rtnetlink.h exists and is useful 5003have_rtnetlink=no 5004cat > $TMPC << EOF 5005#include <linux/rtnetlink.h> 5006int main(void) { 5007 return IFLA_PROTO_DOWN; 5008} 5009EOF 5010if compile_prog "" "" ; then 5011 have_rtnetlink=yes 5012fi 5013 5014########################################## 5015# check for usable AF_VSOCK environment 5016have_af_vsock=no 5017cat > $TMPC << EOF 5018#include <errno.h> 5019#include <sys/types.h> 5020#include <sys/socket.h> 5021#if !defined(AF_VSOCK) 5022# error missing AF_VSOCK flag 5023#endif 5024#include <linux/vm_sockets.h> 5025int main(void) { 5026 int sock, ret; 5027 struct sockaddr_vm svm; 5028 socklen_t len = sizeof(svm); 5029 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5030 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5031 if ((ret == -1) && (errno == ENOTCONN)) { 5032 return 0; 5033 } 5034 return -1; 5035} 5036EOF 5037if compile_prog "" "" ; then 5038 have_af_vsock=yes 5039fi 5040 5041########################################## 5042# check for usable AF_ALG environment 5043have_afalg=no 5044cat > $TMPC << EOF 5045#include <errno.h> 5046#include <sys/types.h> 5047#include <sys/socket.h> 5048#include <linux/if_alg.h> 5049int main(void) { 5050 int sock; 5051 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 5052 return sock; 5053} 5054EOF 5055if compile_prog "" "" ; then 5056 have_afalg=yes 5057fi 5058if test "$crypto_afalg" = "yes" 5059then 5060 if test "$have_afalg" != "yes" 5061 then 5062 error_exit "AF_ALG requested but could not be detected" 5063 fi 5064fi 5065 5066 5067################################################# 5068# check for sysmacros.h 5069 5070have_sysmacros=no 5071cat > $TMPC << EOF 5072#include <sys/sysmacros.h> 5073int main(void) { 5074 return makedev(0, 0); 5075} 5076EOF 5077if compile_prog "" "" ; then 5078 have_sysmacros=yes 5079fi 5080 5081########################################## 5082# check for _Static_assert() 5083 5084have_static_assert=no 5085cat > $TMPC << EOF 5086_Static_assert(1, "success"); 5087int main(void) { 5088 return 0; 5089} 5090EOF 5091if compile_prog "" "" ; then 5092 have_static_assert=yes 5093fi 5094 5095########################################## 5096# check for utmpx.h, it is missing e.g. on OpenBSD 5097 5098have_utmpx=no 5099cat > $TMPC << EOF 5100#include <utmpx.h> 5101struct utmpx user_info; 5102int main(void) { 5103 return 0; 5104} 5105EOF 5106if compile_prog "" "" ; then 5107 have_utmpx=yes 5108fi 5109 5110########################################## 5111# check for getrandom() 5112 5113have_getrandom=no 5114cat > $TMPC << EOF 5115#include <sys/random.h> 5116int main(void) { 5117 return getrandom(0, 0, GRND_NONBLOCK); 5118} 5119EOF 5120if compile_prog "" "" ; then 5121 have_getrandom=yes 5122fi 5123 5124########################################## 5125# checks for sanitizers 5126 5127have_asan=no 5128have_ubsan=no 5129have_asan_iface_h=no 5130have_asan_iface_fiber=no 5131 5132if test "$sanitizers" = "yes" ; then 5133 write_c_skeleton 5134 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 5135 have_asan=yes 5136 fi 5137 5138 # we could use a simple skeleton for flags checks, but this also 5139 # detect the static linking issue of ubsan, see also: 5140 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 5141 cat > $TMPC << EOF 5142#include <stdlib.h> 5143int main(void) { 5144 void *tmp = malloc(10); 5145 if (tmp != NULL) { 5146 return *(int *)(tmp + 2); 5147 } 5148 return 1; 5149} 5150EOF 5151 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 5152 have_ubsan=yes 5153 fi 5154 5155 if check_include "sanitizer/asan_interface.h" ; then 5156 have_asan_iface_h=yes 5157 fi 5158 5159 cat > $TMPC << EOF 5160#include <sanitizer/asan_interface.h> 5161int main(void) { 5162 __sanitizer_start_switch_fiber(0, 0, 0); 5163 return 0; 5164} 5165EOF 5166 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 5167 have_asan_iface_fiber=yes 5168 fi 5169fi 5170 5171########################################## 5172# checks for fuzzer 5173if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then 5174 write_c_fuzzer_skeleton 5175 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then 5176 have_fuzzer=yes 5177 else 5178 error_exit "Your compiler doesn't support -fsanitize=fuzzer" 5179 exit 1 5180 fi 5181fi 5182 5183# Thread sanitizer is, for now, much noisier than the other sanitizers; 5184# keep it separate until that is not the case. 5185if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 5186 error_exit "TSAN is not supported with other sanitiziers." 5187fi 5188have_tsan=no 5189have_tsan_iface_fiber=no 5190if test "$tsan" = "yes" ; then 5191 write_c_skeleton 5192 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 5193 have_tsan=yes 5194 fi 5195 cat > $TMPC << EOF 5196#include <sanitizer/tsan_interface.h> 5197int main(void) { 5198 __tsan_create_fiber(0); 5199 return 0; 5200} 5201EOF 5202 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 5203 have_tsan_iface_fiber=yes 5204 fi 5205fi 5206 5207########################################## 5208# check for libpmem 5209 5210if test "$libpmem" != "no"; then 5211 if $pkg_config --exists "libpmem"; then 5212 libpmem="yes" 5213 libpmem_libs=$($pkg_config --libs libpmem) 5214 libpmem_cflags=$($pkg_config --cflags libpmem) 5215 else 5216 if test "$libpmem" = "yes" ; then 5217 feature_not_found "libpmem" "Install nvml or pmdk" 5218 fi 5219 libpmem="no" 5220 fi 5221fi 5222 5223########################################## 5224# check for libdaxctl 5225 5226if test "$libdaxctl" != "no"; then 5227 if $pkg_config --atleast-version=57 "libdaxctl"; then 5228 libdaxctl="yes" 5229 libdaxctl_libs=$($pkg_config --libs libdaxctl) 5230 libdaxctl_cflags=$($pkg_config --cflags libdaxctl) 5231 else 5232 if test "$libdaxctl" = "yes" ; then 5233 feature_not_found "libdaxctl" "Install libdaxctl" 5234 fi 5235 libdaxctl="no" 5236 fi 5237fi 5238 5239########################################## 5240# check for slirp 5241 5242case "$slirp" in 5243 auto | enabled | internal) 5244 # Simpler to always update submodule, even if not needed. 5245 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5246 git_submodules="${git_submodules} slirp" 5247 fi 5248 ;; 5249esac 5250 5251########################################## 5252# check for usable __NR_keyctl syscall 5253 5254if test "$linux" = "yes" ; then 5255 5256 have_keyring=no 5257 cat > $TMPC << EOF 5258#include <errno.h> 5259#include <asm/unistd.h> 5260#include <linux/keyctl.h> 5261#include <unistd.h> 5262int main(void) { 5263 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 5264} 5265EOF 5266 if compile_prog "" "" ; then 5267 have_keyring=yes 5268 fi 5269fi 5270if test "$secret_keyring" != "no" 5271then 5272 if test "$have_keyring" = "yes" 5273 then 5274 secret_keyring=yes 5275 else 5276 if test "$secret_keyring" = "yes" 5277 then 5278 error_exit "syscall __NR_keyctl requested, \ 5279but not implemented on your system" 5280 else 5281 secret_keyring=no 5282 fi 5283 fi 5284fi 5285 5286########################################## 5287# End of CC checks 5288# After here, no more $cc or $ld runs 5289 5290write_c_skeleton 5291 5292if test "$gcov" = "yes" ; then 5293 : 5294elif test "$fortify_source" = "yes" ; then 5295 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" 5296 debug=no 5297fi 5298 5299case "$ARCH" in 5300alpha) 5301 # Ensure there's only a single GP 5302 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" 5303;; 5304esac 5305 5306if test "$gprof" = "yes" ; then 5307 QEMU_CFLAGS="-p $QEMU_CFLAGS" 5308 QEMU_LDFLAGS="-p $QEMU_LDFLAGS" 5309fi 5310 5311if test "$have_asan" = "yes"; then 5312 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 5313 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 5314 if test "$have_asan_iface_h" = "no" ; then 5315 echo "ASAN build enabled, but ASAN header missing." \ 5316 "Without code annotation, the report may be inferior." 5317 elif test "$have_asan_iface_fiber" = "no" ; then 5318 echo "ASAN build enabled, but ASAN header is too old." \ 5319 "Without code annotation, the report may be inferior." 5320 fi 5321fi 5322if test "$have_tsan" = "yes" ; then 5323 if test "$have_tsan_iface_fiber" = "yes" ; then 5324 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 5325 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 5326 else 5327 error_exit "Cannot enable TSAN due to missing fiber annotation interface." 5328 fi 5329elif test "$tsan" = "yes" ; then 5330 error_exit "Cannot enable TSAN due to missing sanitize thread interface." 5331fi 5332if test "$have_ubsan" = "yes"; then 5333 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 5334 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 5335fi 5336 5337########################################## 5338 5339# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 5340if test "$solaris" = "no" && test "$tsan" = "no"; then 5341 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 5342 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 5343 fi 5344fi 5345 5346# Use ASLR, no-SEH and DEP if available 5347if test "$mingw32" = "yes" ; then 5348 flags="--no-seh --nxcompat" 5349 5350 # Disable ASLR for debug builds to allow debugging with gdb 5351 if test "$debug" = "no" ; then 5352 flags="--dynamicbase $flags" 5353 fi 5354 5355 for flag in $flags; do 5356 if ld_has $flag ; then 5357 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 5358 fi 5359 done 5360fi 5361 5362# We can only support ivshmem if we have eventfd 5363if [ "$eventfd" = "yes" ]; then 5364 ivshmem=yes 5365fi 5366 5367# Probe for guest agent support/options 5368 5369if [ "$guest_agent" != "no" ]; then 5370 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 5371 guest_agent=no 5372 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 5373 guest_agent=yes 5374 elif [ "$guest_agent" != yes ]; then 5375 guest_agent=no 5376 else 5377 error_exit "Guest agent is not supported on this platform" 5378 fi 5379fi 5380 5381# Guest agent Window MSI package 5382 5383if test "$guest_agent" != yes; then 5384 if test "$guest_agent_msi" = yes; then 5385 error_exit "MSI guest agent package requires guest agent enabled" 5386 fi 5387 guest_agent_msi=no 5388elif test "$mingw32" != "yes"; then 5389 if test "$guest_agent_msi" = "yes"; then 5390 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 5391 fi 5392 guest_agent_msi=no 5393elif ! has wixl; then 5394 if test "$guest_agent_msi" = "yes"; then 5395 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 5396 fi 5397 guest_agent_msi=no 5398else 5399 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 5400 # disabled explicitly 5401 if test "$guest_agent_msi" != "no"; then 5402 guest_agent_msi=yes 5403 fi 5404fi 5405 5406if test "$guest_agent_msi" = "yes"; then 5407 if test "$guest_agent_with_vss" = "yes"; then 5408 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 5409 fi 5410 5411 if test "$QEMU_GA_MANUFACTURER" = ""; then 5412 QEMU_GA_MANUFACTURER=QEMU 5413 fi 5414 5415 if test "$QEMU_GA_DISTRO" = ""; then 5416 QEMU_GA_DISTRO=Linux 5417 fi 5418 5419 if test "$QEMU_GA_VERSION" = ""; then 5420 QEMU_GA_VERSION=$(cat $source_path/VERSION) 5421 fi 5422 5423 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 5424 5425 case "$cpu" in 5426 x86_64) 5427 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 5428 ;; 5429 i386) 5430 QEMU_GA_MSI_ARCH="-D Arch=32" 5431 ;; 5432 *) 5433 error_exit "CPU $cpu not supported for building installation package" 5434 ;; 5435 esac 5436fi 5437 5438# Mac OS X ships with a broken assembler 5439roms= 5440if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 5441 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 5442 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then 5443 # Different host OS linkers have different ideas about the name of the ELF 5444 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 5445 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 5446 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 5447 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 5448 ld_i386_emulation="$emu" 5449 roms="optionrom" 5450 break 5451 fi 5452 done 5453fi 5454 5455# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 5456if test "$cpu" = "s390x" ; then 5457 write_c_skeleton 5458 if compile_prog "-march=z900" ""; then 5459 roms="$roms s390-ccw" 5460 # SLOF is required for building the s390-ccw firmware on s390x, 5461 # since it is using the libnet code from SLOF for network booting. 5462 if test -e "${source_path}/.git" ; then 5463 git_submodules="${git_submodules} roms/SLOF" 5464 fi 5465 fi 5466fi 5467 5468# Check that the C++ compiler exists and works with the C compiler. 5469# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 5470if has $cxx; then 5471 cat > $TMPC <<EOF 5472int c_function(void); 5473int main(void) { return c_function(); } 5474EOF 5475 5476 compile_object 5477 5478 cat > $TMPCXX <<EOF 5479extern "C" { 5480 int c_function(void); 5481} 5482int c_function(void) { return 42; } 5483EOF 5484 5485 update_cxxflags 5486 5487 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 5488 # C++ compiler $cxx works ok with C compiler $cc 5489 : 5490 else 5491 echo "C++ compiler $cxx does not work with C compiler $cc" 5492 echo "Disabling C++ specific optional code" 5493 cxx= 5494 fi 5495else 5496 echo "No C++ compiler available; disabling C++ specific optional code" 5497 cxx= 5498fi 5499 5500if test $git_update = 'yes' ; then 5501 (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules") 5502fi 5503 5504config_host_mak="config-host.mak" 5505 5506echo "# Automatically generated by configure - do not modify" > $config_host_mak 5507echo >> $config_host_mak 5508 5509echo all: >> $config_host_mak 5510echo "GIT=$git" >> $config_host_mak 5511echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 5512echo "GIT_UPDATE=$git_update" >> $config_host_mak 5513 5514echo "ARCH=$ARCH" >> $config_host_mak 5515 5516if test "$debug_tcg" = "yes" ; then 5517 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 5518fi 5519if test "$strip_opt" = "yes" ; then 5520 echo "STRIP=${strip}" >> $config_host_mak 5521fi 5522if test "$bigendian" = "yes" ; then 5523 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 5524fi 5525if test "$mingw32" = "yes" ; then 5526 echo "CONFIG_WIN32=y" >> $config_host_mak 5527 if test "$guest_agent_with_vss" = "yes" ; then 5528 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 5529 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 5530 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 5531 fi 5532 if test "$guest_agent_ntddscsi" = "yes" ; then 5533 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 5534 fi 5535 if test "$guest_agent_msi" = "yes"; then 5536 echo "CONFIG_QGA_MSI=y" >> $config_host_mak 5537 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 5538 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 5539 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 5540 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 5541 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 5542 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 5543 fi 5544else 5545 echo "CONFIG_POSIX=y" >> $config_host_mak 5546fi 5547 5548if test "$linux" = "yes" ; then 5549 echo "CONFIG_LINUX=y" >> $config_host_mak 5550fi 5551 5552if test "$darwin" = "yes" ; then 5553 echo "CONFIG_DARWIN=y" >> $config_host_mak 5554fi 5555 5556if test "$solaris" = "yes" ; then 5557 echo "CONFIG_SOLARIS=y" >> $config_host_mak 5558fi 5559if test "$haiku" = "yes" ; then 5560 echo "CONFIG_HAIKU=y" >> $config_host_mak 5561fi 5562if test "$static" = "yes" ; then 5563 echo "CONFIG_STATIC=y" >> $config_host_mak 5564fi 5565if test "$profiler" = "yes" ; then 5566 echo "CONFIG_PROFILER=y" >> $config_host_mak 5567fi 5568if test "$want_tools" = "yes" ; then 5569 echo "CONFIG_TOOLS=y" >> $config_host_mak 5570fi 5571if test "$guest_agent" = "yes" ; then 5572 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak 5573fi 5574echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 5575if test "$vde" = "yes" ; then 5576 echo "CONFIG_VDE=y" >> $config_host_mak 5577 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 5578fi 5579if test "$netmap" = "yes" ; then 5580 echo "CONFIG_NETMAP=y" >> $config_host_mak 5581fi 5582if test "$l2tpv3" = "yes" ; then 5583 echo "CONFIG_L2TPV3=y" >> $config_host_mak 5584fi 5585if test "$gprof" = "yes" ; then 5586 echo "CONFIG_GPROF=y" >> $config_host_mak 5587fi 5588echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 5589for drv in $audio_drv_list; do 5590 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 5591 echo "$def=y" >> $config_host_mak 5592done 5593if test "$alsa" = "yes" ; then 5594 echo "CONFIG_ALSA=y" >> $config_host_mak 5595fi 5596echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 5597echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak 5598if test "$libpulse" = "yes" ; then 5599 echo "CONFIG_LIBPULSE=y" >> $config_host_mak 5600fi 5601echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 5602echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak 5603echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 5604echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 5605echo "OSS_LIBS=$oss_libs" >> $config_host_mak 5606if test "$libjack" = "yes" ; then 5607 echo "CONFIG_LIBJACK=y" >> $config_host_mak 5608fi 5609echo "JACK_LIBS=$jack_libs" >> $config_host_mak 5610if test "$audio_win_int" = "yes" ; then 5611 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 5612fi 5613echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 5614echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 5615if test "$xfs" = "yes" ; then 5616 echo "CONFIG_XFS=y" >> $config_host_mak 5617fi 5618qemu_version=$(head $source_path/VERSION) 5619echo "PKGVERSION=$pkgversion" >>$config_host_mak 5620echo "SRC_PATH=$source_path" >> $config_host_mak 5621echo "TARGET_DIRS=$target_list" >> $config_host_mak 5622if test "$modules" = "yes"; then 5623 # $shacmd can generate a hash started with digit, which the compiler doesn't 5624 # like as an symbol. So prefix it with an underscore 5625 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 5626 echo "CONFIG_MODULES=y" >> $config_host_mak 5627fi 5628if test "$module_upgrades" = "yes"; then 5629 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 5630fi 5631if test "$pipe2" = "yes" ; then 5632 echo "CONFIG_PIPE2=y" >> $config_host_mak 5633fi 5634if test "$accept4" = "yes" ; then 5635 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 5636fi 5637if test "$splice" = "yes" ; then 5638 echo "CONFIG_SPLICE=y" >> $config_host_mak 5639fi 5640if test "$eventfd" = "yes" ; then 5641 echo "CONFIG_EVENTFD=y" >> $config_host_mak 5642fi 5643if test "$memfd" = "yes" ; then 5644 echo "CONFIG_MEMFD=y" >> $config_host_mak 5645fi 5646if test "$have_usbfs" = "yes" ; then 5647 echo "CONFIG_USBFS=y" >> $config_host_mak 5648fi 5649if test "$fallocate" = "yes" ; then 5650 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 5651fi 5652if test "$fallocate_punch_hole" = "yes" ; then 5653 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 5654fi 5655if test "$fallocate_zero_range" = "yes" ; then 5656 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 5657fi 5658if test "$posix_fallocate" = "yes" ; then 5659 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 5660fi 5661if test "$sync_file_range" = "yes" ; then 5662 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 5663fi 5664if test "$fiemap" = "yes" ; then 5665 echo "CONFIG_FIEMAP=y" >> $config_host_mak 5666fi 5667if test "$dup3" = "yes" ; then 5668 echo "CONFIG_DUP3=y" >> $config_host_mak 5669fi 5670if test "$ppoll" = "yes" ; then 5671 echo "CONFIG_PPOLL=y" >> $config_host_mak 5672fi 5673if test "$prctl_pr_set_timerslack" = "yes" ; then 5674 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 5675fi 5676if test "$epoll" = "yes" ; then 5677 echo "CONFIG_EPOLL=y" >> $config_host_mak 5678fi 5679if test "$epoll_create1" = "yes" ; then 5680 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 5681fi 5682if test "$sendfile" = "yes" ; then 5683 echo "CONFIG_SENDFILE=y" >> $config_host_mak 5684fi 5685if test "$timerfd" = "yes" ; then 5686 echo "CONFIG_TIMERFD=y" >> $config_host_mak 5687fi 5688if test "$setns" = "yes" ; then 5689 echo "CONFIG_SETNS=y" >> $config_host_mak 5690fi 5691if test "$clock_adjtime" = "yes" ; then 5692 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 5693fi 5694if test "$syncfs" = "yes" ; then 5695 echo "CONFIG_SYNCFS=y" >> $config_host_mak 5696fi 5697if test "$inotify" = "yes" ; then 5698 echo "CONFIG_INOTIFY=y" >> $config_host_mak 5699fi 5700if test "$inotify1" = "yes" ; then 5701 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 5702fi 5703if test "$sem_timedwait" = "yes" ; then 5704 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 5705fi 5706if test "$strchrnul" = "yes" ; then 5707 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 5708fi 5709if test "$st_atim" = "yes" ; then 5710 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak 5711fi 5712if test "$byteswap_h" = "yes" ; then 5713 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 5714fi 5715if test "$bswap_h" = "yes" ; then 5716 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 5717fi 5718if test "$gio" = "yes" ; then 5719 echo "CONFIG_GIO=y" >> $config_host_mak 5720 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 5721 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 5722 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 5723fi 5724echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 5725if test "$gnutls" = "yes" ; then 5726 echo "CONFIG_GNUTLS=y" >> $config_host_mak 5727 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak 5728 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak 5729fi 5730if test "$gcrypt" = "yes" ; then 5731 echo "CONFIG_GCRYPT=y" >> $config_host_mak 5732 if test "$gcrypt_hmac" = "yes" ; then 5733 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 5734 fi 5735 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak 5736 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak 5737fi 5738if test "$nettle" = "yes" ; then 5739 echo "CONFIG_NETTLE=y" >> $config_host_mak 5740 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 5741 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak 5742 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak 5743fi 5744if test "$qemu_private_xts" = "yes" ; then 5745 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak 5746fi 5747if test "$tasn1" = "yes" ; then 5748 echo "CONFIG_TASN1=y" >> $config_host_mak 5749fi 5750if test "$auth_pam" = "yes" ; then 5751 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 5752fi 5753if test "$have_broken_size_max" = "yes" ; then 5754 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 5755fi 5756if test "$have_openpty" = "yes" ; then 5757 echo "HAVE_OPENPTY=y" >> $config_host_mak 5758fi 5759 5760# Work around a system header bug with some kernel/XFS header 5761# versions where they both try to define 'struct fsxattr': 5762# xfs headers will not try to redefine structs from linux headers 5763# if this macro is set. 5764if test "$have_fsxattr" = "yes" ; then 5765 echo "HAVE_FSXATTR=y" >> $config_host_mak 5766fi 5767if test "$have_copy_file_range" = "yes" ; then 5768 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 5769fi 5770if test "$vte" = "yes" ; then 5771 echo "CONFIG_VTE=y" >> $config_host_mak 5772 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 5773 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 5774fi 5775if test "$virglrenderer" = "yes" ; then 5776 echo "CONFIG_VIRGL=y" >> $config_host_mak 5777 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 5778 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 5779fi 5780if test "$xen" = "enabled" ; then 5781 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 5782 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 5783 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak 5784 echo "XEN_LIBS=$xen_libs" >> $config_host_mak 5785fi 5786if test "$linux_aio" = "yes" ; then 5787 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 5788fi 5789if test "$linux_io_uring" = "yes" ; then 5790 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak 5791 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak 5792 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak 5793fi 5794if test "$vhost_scsi" = "yes" ; then 5795 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 5796fi 5797if test "$vhost_net" = "yes" ; then 5798 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 5799fi 5800if test "$vhost_net_user" = "yes" ; then 5801 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 5802fi 5803if test "$vhost_net_vdpa" = "yes" ; then 5804 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 5805fi 5806if test "$vhost_crypto" = "yes" ; then 5807 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 5808fi 5809if test "$vhost_vsock" = "yes" ; then 5810 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 5811 if test "$vhost_user" = "yes" ; then 5812 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 5813 fi 5814fi 5815if test "$vhost_kernel" = "yes" ; then 5816 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 5817fi 5818if test "$vhost_user" = "yes" ; then 5819 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 5820fi 5821if test "$vhost_vdpa" = "yes" ; then 5822 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 5823fi 5824if test "$vhost_user_fs" = "yes" ; then 5825 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 5826fi 5827if test "$iovec" = "yes" ; then 5828 echo "CONFIG_IOVEC=y" >> $config_host_mak 5829fi 5830if test "$preadv" = "yes" ; then 5831 echo "CONFIG_PREADV=y" >> $config_host_mak 5832fi 5833if test "$membarrier" = "yes" ; then 5834 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 5835fi 5836if test "$signalfd" = "yes" ; then 5837 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 5838fi 5839if test "$optreset" = "yes" ; then 5840 echo "HAVE_OPTRESET=y" >> $config_host_mak 5841fi 5842if test "$tcg" = "enabled"; then 5843 if test "$tcg_interpreter" = "yes" ; then 5844 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 5845 fi 5846fi 5847if test "$fdatasync" = "yes" ; then 5848 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 5849fi 5850if test "$madvise" = "yes" ; then 5851 echo "CONFIG_MADVISE=y" >> $config_host_mak 5852fi 5853if test "$posix_madvise" = "yes" ; then 5854 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 5855fi 5856if test "$posix_memalign" = "yes" ; then 5857 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 5858fi 5859if test "$spice" = "yes" ; then 5860 echo "CONFIG_SPICE=y" >> $config_host_mak 5861 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak 5862 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak 5863fi 5864 5865if test "$smartcard" = "yes" ; then 5866 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 5867 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 5868 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 5869fi 5870 5871if test "$libusb" = "yes" ; then 5872 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 5873 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 5874 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 5875fi 5876 5877if test "$usb_redir" = "yes" ; then 5878 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 5879 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 5880 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 5881fi 5882 5883if test "$opengl" = "yes" ; then 5884 echo "CONFIG_OPENGL=y" >> $config_host_mak 5885 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak 5886 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 5887 if test "$opengl_dmabuf" = "yes" ; then 5888 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 5889 fi 5890fi 5891 5892if test "$gbm" = "yes" ; then 5893 echo "CONFIG_GBM=y" >> $config_host_mak 5894 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 5895 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 5896fi 5897 5898 5899if test "$avx2_opt" = "yes" ; then 5900 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 5901fi 5902 5903if test "$avx512f_opt" = "yes" ; then 5904 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 5905fi 5906 5907# XXX: suppress that 5908if [ "$bsd" = "yes" ] ; then 5909 echo "CONFIG_BSD=y" >> $config_host_mak 5910fi 5911 5912if test "$qom_cast_debug" = "yes" ; then 5913 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 5914fi 5915 5916echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 5917if test "$coroutine_pool" = "yes" ; then 5918 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 5919else 5920 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 5921fi 5922 5923if test "$debug_stack_usage" = "yes" ; then 5924 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 5925fi 5926 5927if test "$crypto_afalg" = "yes" ; then 5928 echo "CONFIG_AF_ALG=y" >> $config_host_mak 5929fi 5930 5931if test "$open_by_handle_at" = "yes" ; then 5932 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 5933fi 5934 5935if test "$linux_magic_h" = "yes" ; then 5936 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 5937fi 5938 5939if test "$valgrind_h" = "yes" ; then 5940 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 5941fi 5942 5943if test "$have_asan_iface_fiber" = "yes" ; then 5944 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 5945fi 5946 5947if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 5948 echo "CONFIG_TSAN=y" >> $config_host_mak 5949fi 5950 5951if test "$has_environ" = "yes" ; then 5952 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 5953fi 5954 5955if test "$cpuid_h" = "yes" ; then 5956 echo "CONFIG_CPUID_H=y" >> $config_host_mak 5957fi 5958 5959if test "$int128" = "yes" ; then 5960 echo "CONFIG_INT128=y" >> $config_host_mak 5961fi 5962 5963if test "$atomic128" = "yes" ; then 5964 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 5965fi 5966 5967if test "$cmpxchg128" = "yes" ; then 5968 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 5969fi 5970 5971if test "$atomic64" = "yes" ; then 5972 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 5973fi 5974 5975if test "$attralias" = "yes" ; then 5976 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak 5977fi 5978 5979if test "$getauxval" = "yes" ; then 5980 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 5981fi 5982 5983if test "$libssh" = "yes" ; then 5984 echo "CONFIG_LIBSSH=y" >> $config_host_mak 5985 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 5986 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 5987fi 5988 5989if test "$live_block_migration" = "yes" ; then 5990 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 5991fi 5992 5993if test "$tpm" = "yes"; then 5994 echo 'CONFIG_TPM=y' >> $config_host_mak 5995fi 5996 5997echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 5998if have_backend "nop"; then 5999 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 6000fi 6001if have_backend "simple"; then 6002 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 6003 # Set the appropriate trace file. 6004 trace_file="\"$trace_file-\" FMT_pid" 6005fi 6006if have_backend "log"; then 6007 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 6008fi 6009if have_backend "ust"; then 6010 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 6011 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak 6012 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak 6013fi 6014if have_backend "dtrace"; then 6015 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 6016 if test "$trace_backend_stap" = "yes" ; then 6017 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 6018 fi 6019fi 6020if have_backend "ftrace"; then 6021 if test "$linux" = "yes" ; then 6022 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 6023 else 6024 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 6025 fi 6026fi 6027if have_backend "syslog"; then 6028 if test "$posix_syslog" = "yes" ; then 6029 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 6030 else 6031 feature_not_found "syslog(trace backend)" "syslog not available" 6032 fi 6033fi 6034echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 6035 6036if test "$rdma" = "yes" ; then 6037 echo "CONFIG_RDMA=y" >> $config_host_mak 6038 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 6039fi 6040 6041if test "$pvrdma" = "yes" ; then 6042 echo "CONFIG_PVRDMA=y" >> $config_host_mak 6043fi 6044 6045if test "$have_rtnetlink" = "yes" ; then 6046 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 6047fi 6048 6049if test "$libxml2" = "yes" ; then 6050 echo "CONFIG_LIBXML2=y" >> $config_host_mak 6051 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 6052 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 6053fi 6054 6055if test "$replication" = "yes" ; then 6056 echo "CONFIG_REPLICATION=y" >> $config_host_mak 6057fi 6058 6059if test "$have_af_vsock" = "yes" ; then 6060 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 6061fi 6062 6063if test "$have_sysmacros" = "yes" ; then 6064 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 6065fi 6066 6067if test "$have_static_assert" = "yes" ; then 6068 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 6069fi 6070 6071if test "$have_utmpx" = "yes" ; then 6072 echo "HAVE_UTMPX=y" >> $config_host_mak 6073fi 6074if test "$have_getrandom" = "yes" ; then 6075 echo "CONFIG_GETRANDOM=y" >> $config_host_mak 6076fi 6077if test "$ivshmem" = "yes" ; then 6078 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 6079fi 6080if test "$debug_mutex" = "yes" ; then 6081 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 6082fi 6083 6084# Hold two types of flag: 6085# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 6086# a thread we have a handle to 6087# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 6088# platform 6089if test "$pthread_setname_np_w_tid" = "yes" ; then 6090 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6091 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 6092elif test "$pthread_setname_np_wo_tid" = "yes" ; then 6093 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6094 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 6095fi 6096 6097if test "$libpmem" = "yes" ; then 6098 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 6099 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak 6100 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak 6101fi 6102 6103if test "$libdaxctl" = "yes" ; then 6104 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak 6105 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak 6106fi 6107 6108if test "$bochs" = "yes" ; then 6109 echo "CONFIG_BOCHS=y" >> $config_host_mak 6110fi 6111if test "$cloop" = "yes" ; then 6112 echo "CONFIG_CLOOP=y" >> $config_host_mak 6113fi 6114if test "$dmg" = "yes" ; then 6115 echo "CONFIG_DMG=y" >> $config_host_mak 6116fi 6117if test "$qcow1" = "yes" ; then 6118 echo "CONFIG_QCOW1=y" >> $config_host_mak 6119fi 6120if test "$vdi" = "yes" ; then 6121 echo "CONFIG_VDI=y" >> $config_host_mak 6122fi 6123if test "$vvfat" = "yes" ; then 6124 echo "CONFIG_VVFAT=y" >> $config_host_mak 6125fi 6126if test "$qed" = "yes" ; then 6127 echo "CONFIG_QED=y" >> $config_host_mak 6128fi 6129if test "$parallels" = "yes" ; then 6130 echo "CONFIG_PARALLELS=y" >> $config_host_mak 6131fi 6132if test "$sheepdog" = "yes" ; then 6133 add_to deprecated_features "sheepdog" 6134 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 6135fi 6136if test "$have_mlockall" = "yes" ; then 6137 echo "HAVE_MLOCKALL=y" >> $config_host_mak 6138fi 6139if test "$fuzzing" = "yes" ; then 6140 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the 6141 # needed CFLAGS have already been provided 6142 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then 6143 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link" 6144 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer" 6145 else 6146 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE" 6147 fi 6148fi 6149 6150if test "$plugins" = "yes" ; then 6151 echo "CONFIG_PLUGIN=y" >> $config_host_mak 6152 # Copy the export object list to the build dir 6153 if test "$ld_dynamic_list" = "yes" ; then 6154 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 6155 ld_symbols=qemu-plugins-ld.symbols 6156 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 6157 elif test "$ld_exported_symbols_list" = "yes" ; then 6158 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 6159 ld64_symbols=qemu-plugins-ld64.symbols 6160 echo "# Automatically generated by configure - do not modify" > $ld64_symbols 6161 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 6162 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 6163 else 6164 error_exit \ 6165 "If \$plugins=yes, either \$ld_dynamic_list or " \ 6166 "\$ld_exported_symbols_list should have been set to 'yes'." 6167 fi 6168fi 6169 6170if test -n "$gdb_bin"; then 6171 gdb_version=$($gdb_bin --version | head -n 1) 6172 if version_ge ${gdb_version##* } 8.3.1; then 6173 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 6174 fi 6175fi 6176 6177if test "$secret_keyring" = "yes" ; then 6178 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 6179fi 6180 6181echo "ROMS=$roms" >> $config_host_mak 6182echo "MAKE=$make" >> $config_host_mak 6183echo "PYTHON=$python" >> $config_host_mak 6184echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 6185echo "MESON=$meson" >> $config_host_mak 6186echo "NINJA=$ninja" >> $config_host_mak 6187echo "CC=$cc" >> $config_host_mak 6188if $iasl -h > /dev/null 2>&1; then 6189 echo "CONFIG_IASL=$iasl" >> $config_host_mak 6190fi 6191echo "CXX=$cxx" >> $config_host_mak 6192echo "OBJCC=$objcc" >> $config_host_mak 6193echo "AR=$ar" >> $config_host_mak 6194echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 6195echo "AS=$as" >> $config_host_mak 6196echo "CCAS=$ccas" >> $config_host_mak 6197echo "CPP=$cpp" >> $config_host_mak 6198echo "OBJCOPY=$objcopy" >> $config_host_mak 6199echo "LD=$ld" >> $config_host_mak 6200echo "RANLIB=$ranlib" >> $config_host_mak 6201echo "NM=$nm" >> $config_host_mak 6202echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 6203echo "WINDRES=$windres" >> $config_host_mak 6204echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 6205echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 6206echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 6207echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 6208echo "GLIB_LIBS=$glib_libs" >> $config_host_mak 6209echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 6210echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 6211echo "EXESUF=$EXESUF" >> $config_host_mak 6212echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak 6213echo "LIBS_QGA=$libs_qga" >> $config_host_mak 6214echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 6215echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 6216if test "$gcov" = "yes" ; then 6217 echo "CONFIG_GCOV=y" >> $config_host_mak 6218fi 6219 6220if test "$fuzzing" != "no"; then 6221 echo "CONFIG_FUZZ=y" >> $config_host_mak 6222fi 6223echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak 6224 6225if test "$rng_none" = "yes"; then 6226 echo "CONFIG_RNG_NONE=y" >> $config_host_mak 6227fi 6228 6229# use included Linux headers 6230if test "$linux" = "yes" ; then 6231 mkdir -p linux-headers 6232 case "$cpu" in 6233 i386|x86_64|x32) 6234 linux_arch=x86 6235 ;; 6236 ppc|ppc64|ppc64le) 6237 linux_arch=powerpc 6238 ;; 6239 s390x) 6240 linux_arch=s390 6241 ;; 6242 aarch64) 6243 linux_arch=arm64 6244 ;; 6245 mips64) 6246 linux_arch=mips 6247 ;; 6248 *) 6249 # For most CPUs the kernel architecture name and QEMU CPU name match. 6250 linux_arch="$cpu" 6251 ;; 6252 esac 6253 # For non-KVM architectures we will not have asm headers 6254 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 6255 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 6256 fi 6257fi 6258 6259for target in $target_list; do 6260 target_dir="$target" 6261 target_name=$(echo $target | cut -d '-' -f 1) 6262 mkdir -p $target_dir 6263 case $target in 6264 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;; 6265 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;; 6266 esac 6267done 6268 6269echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak 6270if test "$default_targets" = "yes"; then 6271 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak 6272fi 6273 6274if test "$numa" = "yes"; then 6275 echo "CONFIG_NUMA=y" >> $config_host_mak 6276 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak 6277fi 6278 6279if test "$ccache_cpp2" = "yes"; then 6280 echo "export CCACHE_CPP2=y" >> $config_host_mak 6281fi 6282 6283if test "$safe_stack" = "yes"; then 6284 echo "CONFIG_SAFESTACK=y" >> $config_host_mak 6285fi 6286 6287# If we're using a separate build tree, set it up now. 6288# DIRS are directories which we simply mkdir in the build tree; 6289# LINKS are things to symlink back into the source tree 6290# (these can be both files and directories). 6291# Caution: do not add files or directories here using wildcards. This 6292# will result in problems later if a new file matching the wildcard is 6293# added to the source tree -- nothing will cause configure to be rerun 6294# so the build tree will be missing the link back to the new file, and 6295# tests might fail. Prefer to keep the relevant files in their own 6296# directory and symlink the directory instead. 6297# UNLINK is used to remove symlinks from older development versions 6298# that might get into the way when doing "git update" without doing 6299# a "make distclean" in between. 6300DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" 6301DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 6302DIRS="$DIRS docs docs/interop fsdev scsi" 6303DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 6304DIRS="$DIRS roms/seabios" 6305DIRS="$DIRS contrib/plugins/" 6306LINKS="Makefile" 6307LINKS="$LINKS tests/tcg/lm32/Makefile" 6308LINKS="$LINKS tests/tcg/Makefile.target" 6309LINKS="$LINKS pc-bios/optionrom/Makefile" 6310LINKS="$LINKS pc-bios/s390-ccw/Makefile" 6311LINKS="$LINKS roms/seabios/Makefile" 6312LINKS="$LINKS pc-bios/qemu-icon.bmp" 6313LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 6314LINKS="$LINKS tests/acceptance tests/data" 6315LINKS="$LINKS tests/qemu-iotests/check" 6316LINKS="$LINKS python" 6317LINKS="$LINKS contrib/plugins/Makefile " 6318UNLINK="pc-bios/keymaps" 6319for bios_file in \ 6320 $source_path/pc-bios/*.bin \ 6321 $source_path/pc-bios/*.elf \ 6322 $source_path/pc-bios/*.lid \ 6323 $source_path/pc-bios/*.rom \ 6324 $source_path/pc-bios/*.dtb \ 6325 $source_path/pc-bios/*.img \ 6326 $source_path/pc-bios/openbios-* \ 6327 $source_path/pc-bios/u-boot.* \ 6328 $source_path/pc-bios/edk2-*.fd.bz2 \ 6329 $source_path/pc-bios/palcode-* 6330do 6331 LINKS="$LINKS pc-bios/$(basename $bios_file)" 6332done 6333mkdir -p $DIRS 6334for f in $LINKS ; do 6335 if [ -e "$source_path/$f" ]; then 6336 symlink "$source_path/$f" "$f" 6337 fi 6338done 6339for f in $UNLINK ; do 6340 if [ -L "$f" ]; then 6341 rm -f "$f" 6342 fi 6343done 6344 6345(for i in $cross_cc_vars; do 6346 export $i 6347done 6348export target_list source_path use_containers 6349$source_path/tests/tcg/configure.sh) 6350 6351# temporary config to build submodules 6352for rom in seabios; do 6353 config_mak=roms/$rom/config.mak 6354 echo "# Automatically generated by configure - do not modify" > $config_mak 6355 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 6356 echo "AS=$as" >> $config_mak 6357 echo "CCAS=$ccas" >> $config_mak 6358 echo "CC=$cc" >> $config_mak 6359 echo "BCC=bcc" >> $config_mak 6360 echo "CPP=$cpp" >> $config_mak 6361 echo "OBJCOPY=objcopy" >> $config_mak 6362 echo "IASL=$iasl" >> $config_mak 6363 echo "LD=$ld" >> $config_mak 6364 echo "RANLIB=$ranlib" >> $config_mak 6365done 6366 6367if test "$skip_meson" = no; then 6368cross="config-meson.cross.new" 6369meson_quote() { 6370 echo "'$(echo $* | sed "s/ /','/g")'" 6371} 6372 6373echo "# Automatically generated by configure - do not modify" > $cross 6374echo "[properties]" >> $cross 6375test -z "$cxx" && echo "link_language = 'c'" >> $cross 6376echo "[built-in options]" >> $cross 6377echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross 6378echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross 6379echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross 6380echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross 6381echo "[binaries]" >> $cross 6382echo "c = [$(meson_quote $cc)]" >> $cross 6383test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross 6384echo "ar = [$(meson_quote $ar)]" >> $cross 6385echo "nm = [$(meson_quote $nm)]" >> $cross 6386echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross 6387echo "ranlib = [$(meson_quote $ranlib)]" >> $cross 6388if has $sdl2_config; then 6389 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross 6390fi 6391echo "strip = [$(meson_quote $strip)]" >> $cross 6392echo "windres = [$(meson_quote $windres)]" >> $cross 6393if test -n "$cross_prefix"; then 6394 cross_arg="--cross-file config-meson.cross" 6395 echo "[host_machine]" >> $cross 6396 if test "$mingw32" = "yes" ; then 6397 echo "system = 'windows'" >> $cross 6398 fi 6399 if test "$linux" = "yes" ; then 6400 echo "system = 'linux'" >> $cross 6401 fi 6402 case "$ARCH" in 6403 i386|x86_64) 6404 echo "cpu_family = 'x86'" >> $cross 6405 ;; 6406 ppc64le) 6407 echo "cpu_family = 'ppc64'" >> $cross 6408 ;; 6409 *) 6410 echo "cpu_family = '$ARCH'" >> $cross 6411 ;; 6412 esac 6413 echo "cpu = '$cpu'" >> $cross 6414 if test "$bigendian" = "yes" ; then 6415 echo "endian = 'big'" >> $cross 6416 else 6417 echo "endian = 'little'" >> $cross 6418 fi 6419else 6420 cross_arg="--native-file config-meson.cross" 6421fi 6422mv $cross config-meson.cross 6423 6424rm -rf meson-private meson-info meson-logs 6425unset staticpic 6426if ! version_ge "$($meson --version)" 0.56.0; then 6427 staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi) 6428fi 6429NINJA=$ninja $meson setup \ 6430 --prefix "$prefix" \ 6431 --libdir "$libdir" \ 6432 --libexecdir "$libexecdir" \ 6433 --bindir "$bindir" \ 6434 --includedir "$includedir" \ 6435 --datadir "$datadir" \ 6436 --mandir "$mandir" \ 6437 --sysconfdir "$sysconfdir" \ 6438 --localedir "$localedir" \ 6439 --localstatedir "$local_statedir" \ 6440 -Ddocdir="$docdir" \ 6441 -Dqemu_firmwarepath="$firmwarepath" \ 6442 -Dqemu_suffix="$qemu_suffix" \ 6443 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ 6444 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ 6445 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ 6446 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \ 6447 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ 6448 ${staticpic:+-Db_staticpic=$staticpic} \ 6449 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ 6450 -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug \ 6451 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \ 6452 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \ 6453 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \ 6454 -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \ 6455 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \ 6456 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \ 6457 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \ 6458 -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \ 6459 -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\ 6460 -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse \ 6461 -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \ 6462 -Dattr=$attr -Ddefault_devices=$default_devices \ 6463 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \ 6464 -Dvhost_user_blk_server=$vhost_user_blk_server \ 6465 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek \ 6466 $(if test "$default_features" = no; then echo "-Dauto_features=disabled"; fi) \ 6467 $cross_arg \ 6468 "$PWD" "$source_path" 6469 6470if test "$?" -ne 0 ; then 6471 error_exit "meson setup failed" 6472fi 6473fi 6474 6475if test -n "${deprecated_features}"; then 6476 echo "Warning, deprecated features enabled." 6477 echo "Please see docs/system/deprecated.rst" 6478 echo " features: ${deprecated_features}" 6479fi 6480 6481# Save the configure command line for later reuse. 6482cat <<EOD >config.status 6483#!/bin/sh 6484# Generated by configure. 6485# Run this file to recreate the current configuration. 6486# Compiler output produced by configure, useful for debugging 6487# configure, is in config.log if it exists. 6488EOD 6489 6490preserve_env() { 6491 envname=$1 6492 6493 eval envval=\$$envname 6494 6495 if test -n "$envval" 6496 then 6497 echo "$envname='$envval'" >> config.status 6498 echo "export $envname" >> config.status 6499 else 6500 echo "unset $envname" >> config.status 6501 fi 6502} 6503 6504# Preserve various env variables that influence what 6505# features/build target configure will detect 6506preserve_env AR 6507preserve_env AS 6508preserve_env CC 6509preserve_env CPP 6510preserve_env CXX 6511preserve_env INSTALL 6512preserve_env LD 6513preserve_env LD_LIBRARY_PATH 6514preserve_env LIBTOOL 6515preserve_env MAKE 6516preserve_env NM 6517preserve_env OBJCOPY 6518preserve_env PATH 6519preserve_env PKG_CONFIG 6520preserve_env PKG_CONFIG_LIBDIR 6521preserve_env PKG_CONFIG_PATH 6522preserve_env PYTHON 6523preserve_env SDL2_CONFIG 6524preserve_env SMBD 6525preserve_env STRIP 6526preserve_env WINDRES 6527 6528printf "exec" >>config.status 6529for i in "$0" "$@"; do 6530 test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status 6531done 6532echo ' "$@"' >>config.status 6533chmod +x config.status 6534 6535rm -r "$TMPDIR1" 6536