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# Temporary directory used for files created while 15# configure runs. Since it is in the build directory 16# we can safely blow away any previous version of it 17# (and we need not jump through hoops to try to delete 18# it when configure exits.) 19TMPDIR1="config-temp" 20rm -rf "${TMPDIR1}" 21mkdir -p "${TMPDIR1}" 22if [ $? -ne 0 ]; then 23 echo "ERROR: failed to create temporary directory" 24 exit 1 25fi 26 27TMPB="qemu-conf" 28TMPC="${TMPDIR1}/${TMPB}.c" 29TMPO="${TMPDIR1}/${TMPB}.o" 30TMPCXX="${TMPDIR1}/${TMPB}.cxx" 31TMPE="${TMPDIR1}/${TMPB}.exe" 32TMPMO="${TMPDIR1}/${TMPB}.mo" 33TMPTXT="${TMPDIR1}/${TMPB}.txt" 34 35rm -f config.log 36 37# Print a helpful header at the top of config.log 38echo "# QEMU configure log $(date)" >> config.log 39printf "# Configured with:" >> config.log 40printf " '%s'" "$0" "$@" >> config.log 41echo >> config.log 42echo "#" >> config.log 43 44print_error() { 45 (echo 46 echo "ERROR: $1" 47 while test -n "$2"; do 48 echo " $2" 49 shift 50 done 51 echo) >&2 52} 53 54error_exit() { 55 print_error "$@" 56 exit 1 57} 58 59do_compiler() { 60 # Run the compiler, capturing its output to the log. First argument 61 # is compiler binary to execute. 62 local compiler="$1" 63 shift 64 if test -n "$BASH_VERSION"; then eval ' 65 echo >>config.log " 66funcs: ${FUNCNAME[*]} 67lines: ${BASH_LINENO[*]}" 68 '; fi 69 echo $compiler "$@" >> config.log 70 $compiler "$@" >> config.log 2>&1 || return $? 71 # Test passed. If this is an --enable-werror build, rerun 72 # the test with -Werror and bail out if it fails. This 73 # makes warning-generating-errors in configure test code 74 # obvious to developers. 75 if test "$werror" != "yes"; then 76 return 0 77 fi 78 # Don't bother rerunning the compile if we were already using -Werror 79 case "$*" in 80 *-Werror*) 81 return 0 82 ;; 83 esac 84 echo $compiler -Werror "$@" >> config.log 85 $compiler -Werror "$@" >> config.log 2>&1 && return $? 86 error_exit "configure test passed without -Werror but failed with -Werror." \ 87 "This is probably a bug in the configure script. The failing command" \ 88 "will be at the bottom of config.log." \ 89 "You can run configure with --disable-werror to bypass this check." 90} 91 92do_cc() { 93 do_compiler "$cc" "$@" 94} 95 96do_cxx() { 97 do_compiler "$cxx" "$@" 98} 99 100# Append $2 to the variable named $1, with space separation 101add_to() { 102 eval $1=\${$1:+\"\$$1 \"}\$2 103} 104 105update_cxxflags() { 106 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those 107 # options which some versions of GCC's C++ compiler complain about 108 # because they only make sense for C programs. 109 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS" 110 111 for arg in $QEMU_CFLAGS; do 112 case $arg in 113 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\ 114 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls) 115 ;; 116 -std=gnu99) 117 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98" 118 ;; 119 *) 120 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg 121 ;; 122 esac 123 done 124} 125 126compile_object() { 127 local_cflags="$1" 128 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC 129} 130 131compile_prog() { 132 local_cflags="$1" 133 local_ldflags="$2" 134 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $QEMU_LDFLAGS $local_ldflags 135} 136 137# symbolically link $1 to $2. Portable version of "ln -sf". 138symlink() { 139 rm -rf "$2" 140 mkdir -p "$(dirname "$2")" 141 ln -s "$1" "$2" 142} 143 144# check whether a command is available to this shell (may be either an 145# executable or a builtin) 146has() { 147 type "$1" >/dev/null 2>&1 148} 149 150# search for an executable in PATH 151path_of() { 152 local_command="$1" 153 local_ifs="$IFS" 154 local_dir="" 155 156 # pathname has a dir component? 157 if [ "${local_command#*/}" != "$local_command" ]; then 158 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then 159 echo "$local_command" 160 return 0 161 fi 162 fi 163 if [ -z "$local_command" ]; then 164 return 1 165 fi 166 167 IFS=: 168 for local_dir in $PATH; do 169 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then 170 echo "$local_dir/$local_command" 171 IFS="${local_ifs:-$(printf ' \t\n')}" 172 return 0 173 fi 174 done 175 # not found 176 IFS="${local_ifs:-$(printf ' \t\n')}" 177 return 1 178} 179 180have_backend () { 181 echo "$trace_backends" | grep "$1" >/dev/null 182} 183 184glob() { 185 eval test -z '"${1#'"$2"'}"' 186} 187 188supported_hax_target() { 189 test "$hax" = "yes" || return 1 190 glob "$1" "*-softmmu" || return 1 191 case "${1%-softmmu}" in 192 i386|x86_64) 193 return 0 194 ;; 195 esac 196 return 1 197} 198 199supported_kvm_target() { 200 test "$kvm" = "yes" || return 1 201 glob "$1" "*-softmmu" || return 1 202 case "${1%-softmmu}:$cpu" in 203 arm:arm | aarch64:aarch64 | \ 204 i386:i386 | i386:x86_64 | i386:x32 | \ 205 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \ 206 mips:mips | mipsel:mips | mips64:mips | mips64el:mips | \ 207 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \ 208 s390x:s390x) 209 return 0 210 ;; 211 esac 212 return 1 213} 214 215supported_xen_target() { 216 test "$xen" = "yes" || return 1 217 glob "$1" "*-softmmu" || return 1 218 # Only i386 and x86_64 provide the xenpv machine. 219 case "${1%-softmmu}" in 220 i386|x86_64) 221 return 0 222 ;; 223 esac 224 return 1 225} 226 227supported_hvf_target() { 228 test "$hvf" = "yes" || return 1 229 glob "$1" "*-softmmu" || return 1 230 case "${1%-softmmu}" in 231 x86_64) 232 return 0 233 ;; 234 esac 235 return 1 236} 237 238supported_whpx_target() { 239 test "$whpx" = "yes" || return 1 240 glob "$1" "*-softmmu" || return 1 241 case "${1%-softmmu}" in 242 i386|x86_64) 243 return 0 244 ;; 245 esac 246 return 1 247} 248 249supported_target() { 250 case "$1" in 251 *-softmmu) 252 ;; 253 *-linux-user) 254 if test "$linux" != "yes"; then 255 print_error "Target '$target' is only available on a Linux host" 256 return 1 257 fi 258 ;; 259 *-bsd-user) 260 if test "$bsd" != "yes"; then 261 print_error "Target '$target' is only available on a BSD host" 262 return 1 263 fi 264 ;; 265 *) 266 print_error "Invalid target name '$target'" 267 return 1 268 ;; 269 esac 270 test "$tcg" = "yes" && return 0 271 supported_kvm_target "$1" && return 0 272 supported_xen_target "$1" && return 0 273 supported_hax_target "$1" && return 0 274 supported_hvf_target "$1" && return 0 275 supported_whpx_target "$1" && return 0 276 print_error "TCG disabled, but hardware accelerator not available for '$target'" 277 return 1 278} 279 280 281ld_has() { 282 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1 283} 284 285# make source path absolute 286source_path=$(cd "$(dirname -- "$0")"; pwd) 287 288if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]"; 289then 290 error_exit "main directory cannot contain spaces nor colons" 291fi 292 293# default parameters 294cpu="" 295iasl="iasl" 296interp_prefix="/usr/gnemul/qemu-%M" 297static="no" 298cross_prefix="" 299audio_drv_list="" 300block_drv_rw_whitelist="" 301block_drv_ro_whitelist="" 302host_cc="cc" 303libs_cpu="" 304libs_softmmu="" 305libs_tools="" 306audio_win_int="" 307libs_qga="" 308debug_info="yes" 309stack_protector="" 310safe_stack="" 311use_containers="yes" 312gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb") 313 314if test -e "$source_path/.git" 315then 316 git_update=yes 317 git_submodules="ui/keycodemapdb" 318 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3" 319 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3" 320else 321 git_update=no 322 git_submodules="" 323 324 if ! test -f "$source_path/ui/keycodemapdb/README" 325 then 326 echo 327 echo "ERROR: missing file $source_path/ui/keycodemapdb/README" 328 echo 329 echo "This is not a GIT checkout but module content appears to" 330 echo "be missing. Do not use 'git archive' or GitHub download links" 331 echo "to acquire QEMU source archives. Non-GIT builds are only" 332 echo "supported with source archives linked from:" 333 echo 334 echo " https://www.qemu.org/download/#source" 335 echo 336 echo "Developers working with GIT can use scripts/archive-source.sh" 337 echo "if they need to create valid source archives." 338 echo 339 exit 1 340 fi 341fi 342git="git" 343 344# Don't accept a target_list environment variable. 345unset target_list 346unset target_list_exclude 347 348# Default value for a variable defining feature "foo". 349# * foo="no" feature will only be used if --enable-foo arg is given 350# * foo="" feature will be searched for, and if found, will be used 351# unless --disable-foo is given 352# * foo="yes" this value will only be set by --enable-foo flag. 353# feature will searched for, 354# if not found, configure exits with error 355# 356# Always add --enable-foo and --disable-foo command line args. 357# Distributions want to ensure that several features are compiled in, and it 358# is impossible without a --enable-foo that exits if a feature is not found. 359 360brlapi="" 361curl="" 362curses="" 363docs="" 364fdt="" 365netmap="no" 366sdl="" 367sdl_image="" 368virtfs="" 369mpath="" 370vnc="yes" 371sparse="no" 372vde="" 373vnc_sasl="" 374vnc_jpeg="" 375vnc_png="" 376xkbcommon="" 377xen="" 378xen_ctrl_version="" 379xen_pci_passthrough="" 380linux_aio="" 381linux_io_uring="" 382cap_ng="" 383attr="" 384libattr="" 385xfs="" 386tcg="yes" 387membarrier="" 388vhost_net="" 389vhost_crypto="" 390vhost_scsi="" 391vhost_vsock="" 392vhost_user="" 393vhost_user_fs="" 394kvm="no" 395hax="no" 396hvf="no" 397whpx="no" 398rdma="" 399pvrdma="" 400gprof="no" 401debug_tcg="no" 402debug="no" 403sanitizers="no" 404tsan="no" 405fortify_source="" 406strip_opt="yes" 407tcg_interpreter="no" 408bigendian="no" 409mingw32="no" 410gcov="no" 411gcov_tool="gcov" 412EXESUF="" 413DSOSUF=".so" 414LDFLAGS_SHARED="-shared" 415modules="no" 416module_upgrades="no" 417prefix="/usr/local" 418mandir="\${prefix}/share/man" 419datadir="\${prefix}/share" 420firmwarepath="\${prefix}/share/qemu-firmware" 421efi_aarch64="" 422qemu_docdir="\${prefix}/share/doc/qemu" 423bindir="\${prefix}/bin" 424libdir="\${prefix}/lib" 425libexecdir="\${prefix}/libexec" 426includedir="\${prefix}/include" 427sysconfdir="\${prefix}/etc" 428local_statedir="\${prefix}/var" 429confsuffix="/qemu" 430slirp="" 431oss_lib="" 432bsd="no" 433linux="no" 434solaris="no" 435profiler="no" 436cocoa="no" 437softmmu="yes" 438linux_user="no" 439bsd_user="no" 440blobs="yes" 441edk2_blobs="no" 442pkgversion="" 443pie="" 444qom_cast_debug="yes" 445trace_backends="log" 446trace_file="trace" 447spice="" 448rbd="" 449smartcard="" 450libusb="" 451usb_redir="" 452opengl="" 453opengl_dmabuf="no" 454cpuid_h="no" 455avx2_opt="" 456zlib="yes" 457capstone="" 458lzo="" 459snappy="" 460bzip2="" 461lzfse="" 462zstd="" 463guest_agent="" 464guest_agent_with_vss="no" 465guest_agent_ntddscsi="no" 466guest_agent_msi="" 467vss_win32_sdk="" 468win_sdk="no" 469want_tools="" 470libiscsi="" 471libnfs="" 472coroutine="" 473coroutine_pool="" 474debug_stack_usage="no" 475crypto_afalg="no" 476seccomp="" 477glusterfs="" 478glusterfs_xlator_opt="no" 479glusterfs_discard="no" 480glusterfs_fallocate="no" 481glusterfs_zerofill="no" 482glusterfs_ftruncate_has_stat="no" 483glusterfs_iocb_has_stat="no" 484gtk="" 485gtk_gl="no" 486tls_priority="NORMAL" 487gnutls="" 488nettle="" 489nettle_xts="no" 490gcrypt="" 491gcrypt_hmac="no" 492gcrypt_xts="no" 493qemu_private_xts="yes" 494auth_pam="" 495vte="" 496virglrenderer="" 497tpm="" 498libssh="" 499live_block_migration="yes" 500numa="" 501tcmalloc="no" 502jemalloc="no" 503replication="yes" 504vxhs="" 505bochs="yes" 506cloop="yes" 507dmg="yes" 508qcow1="yes" 509vdi="yes" 510vvfat="yes" 511qed="yes" 512parallels="yes" 513sheepdog="yes" 514libxml2="" 515debug_mutex="no" 516libpmem="" 517default_devices="yes" 518plugins="no" 519fuzzing="no" 520rng_none="no" 521secret_keyring="" 522libdaxctl="" 523 524supported_cpu="no" 525supported_os="no" 526bogus_os="no" 527malloc_trim="" 528 529# parse CC options first 530for opt do 531 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 532 case "$opt" in 533 --cross-prefix=*) cross_prefix="$optarg" 534 ;; 535 --cc=*) CC="$optarg" 536 ;; 537 --cxx=*) CXX="$optarg" 538 ;; 539 --cpu=*) cpu="$optarg" 540 ;; 541 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg" 542 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" 543 ;; 544 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg" 545 ;; 546 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" 547 EXTRA_LDFLAGS="$optarg" 548 ;; 549 --enable-debug-info) debug_info="yes" 550 ;; 551 --disable-debug-info) debug_info="no" 552 ;; 553 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" 554 ;; 555 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*} 556 eval "cross_cc_cflags_${cc_arch}=\$optarg" 557 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}" 558 ;; 559 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} 560 cc_archs="$cc_archs $cc_arch" 561 eval "cross_cc_${cc_arch}=\$optarg" 562 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}" 563 ;; 564 esac 565done 566# OS specific 567# Using uname is really, really broken. Once we have the right set of checks 568# we can eliminate its usage altogether. 569 570# Preferred compiler: 571# ${CC} (if set) 572# ${cross_prefix}gcc (if cross-prefix specified) 573# system compiler 574if test -z "${CC}${cross_prefix}"; then 575 cc="$host_cc" 576else 577 cc="${CC-${cross_prefix}gcc}" 578fi 579 580if test -z "${CXX}${cross_prefix}"; then 581 cxx="c++" 582else 583 cxx="${CXX-${cross_prefix}g++}" 584fi 585 586ar="${AR-${cross_prefix}ar}" 587as="${AS-${cross_prefix}as}" 588ccas="${CCAS-$cc}" 589cpp="${CPP-$cc -E}" 590objcopy="${OBJCOPY-${cross_prefix}objcopy}" 591ld="${LD-${cross_prefix}ld}" 592ranlib="${RANLIB-${cross_prefix}ranlib}" 593nm="${NM-${cross_prefix}nm}" 594strip="${STRIP-${cross_prefix}strip}" 595windres="${WINDRES-${cross_prefix}windres}" 596pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}" 597query_pkg_config() { 598 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@" 599} 600pkg_config=query_pkg_config 601sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}" 602 603# If the user hasn't specified ARFLAGS, default to 'rv', just as make does. 604ARFLAGS="${ARFLAGS-rv}" 605 606# default flags for all hosts 607# We use -fwrapv to tell the compiler that we require a C dialect where 608# left shift of signed integers is well defined and has the expected 609# 2s-complement style results. (Both clang and gcc agree that it 610# provides these semantics.) 611QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS" 612QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS" 613QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS" 614QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS" 615QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include" 616QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl" 617if test "$debug_info" = "yes"; then 618 CFLAGS="-g $CFLAGS" 619fi 620 621# running configure in the source tree? 622# we know that's the case if configure is there. 623if test -f "./configure"; then 624 pwd_is_source_path="y" 625else 626 pwd_is_source_path="n" 627fi 628 629check_define() { 630cat > $TMPC <<EOF 631#if !defined($1) 632#error $1 not defined 633#endif 634int main(void) { return 0; } 635EOF 636 compile_object 637} 638 639check_include() { 640cat > $TMPC <<EOF 641#include <$1> 642int main(void) { return 0; } 643EOF 644 compile_object 645} 646 647write_c_skeleton() { 648 cat > $TMPC <<EOF 649int main(void) { return 0; } 650EOF 651} 652 653write_c_fuzzer_skeleton() { 654 cat > $TMPC <<EOF 655#include <stdint.h> 656#include <sys/types.h> 657int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size); 658int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; } 659EOF 660} 661 662if check_define __linux__ ; then 663 targetos="Linux" 664elif check_define _WIN32 ; then 665 targetos='MINGW32' 666elif check_define __OpenBSD__ ; then 667 targetos='OpenBSD' 668elif check_define __sun__ ; then 669 targetos='SunOS' 670elif check_define __HAIKU__ ; then 671 targetos='Haiku' 672elif check_define __FreeBSD__ ; then 673 targetos='FreeBSD' 674elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then 675 targetos='GNU/kFreeBSD' 676elif check_define __DragonFly__ ; then 677 targetos='DragonFly' 678elif check_define __NetBSD__; then 679 targetos='NetBSD' 680elif check_define __APPLE__; then 681 targetos='Darwin' 682else 683 # This is a fatal error, but don't report it yet, because we 684 # might be going to just print the --help text, or it might 685 # be the result of a missing compiler. 686 targetos='bogus' 687 bogus_os='yes' 688fi 689 690# Some host OSes need non-standard checks for which CPU to use. 691# Note that these checks are broken for cross-compilation: if you're 692# cross-compiling to one of these OSes then you'll need to specify 693# the correct CPU with the --cpu option. 694case $targetos in 695Darwin) 696 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can 697 # run 64-bit userspace code. 698 # If the user didn't specify a CPU explicitly and the kernel says this is 699 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code. 700 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then 701 cpu="x86_64" 702 fi 703 ;; 704SunOS) 705 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo 706 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then 707 cpu="x86_64" 708 fi 709esac 710 711if test ! -z "$cpu" ; then 712 # command line argument 713 : 714elif check_define __i386__ ; then 715 cpu="i386" 716elif check_define __x86_64__ ; then 717 if check_define __ILP32__ ; then 718 cpu="x32" 719 else 720 cpu="x86_64" 721 fi 722elif check_define __sparc__ ; then 723 if check_define __arch64__ ; then 724 cpu="sparc64" 725 else 726 cpu="sparc" 727 fi 728elif check_define _ARCH_PPC ; then 729 if check_define _ARCH_PPC64 ; then 730 if check_define _LITTLE_ENDIAN ; then 731 cpu="ppc64le" 732 else 733 cpu="ppc64" 734 fi 735 else 736 cpu="ppc" 737 fi 738elif check_define __mips__ ; then 739 cpu="mips" 740elif check_define __s390__ ; then 741 if check_define __s390x__ ; then 742 cpu="s390x" 743 else 744 cpu="s390" 745 fi 746elif check_define __riscv ; then 747 if check_define _LP64 ; then 748 cpu="riscv64" 749 else 750 cpu="riscv32" 751 fi 752elif check_define __arm__ ; then 753 cpu="arm" 754elif check_define __aarch64__ ; then 755 cpu="aarch64" 756else 757 cpu=$(uname -m) 758fi 759 760ARCH= 761# Normalise host CPU name and set ARCH. 762# Note that this case should only have supported host CPUs, not guests. 763case "$cpu" in 764 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64) 765 supported_cpu="yes" 766 ;; 767 ppc64le) 768 ARCH="ppc64" 769 supported_cpu="yes" 770 ;; 771 i386|i486|i586|i686|i86pc|BePC) 772 cpu="i386" 773 supported_cpu="yes" 774 ;; 775 x86_64|amd64) 776 cpu="x86_64" 777 supported_cpu="yes" 778 ;; 779 armv*b|armv*l|arm) 780 cpu="arm" 781 supported_cpu="yes" 782 ;; 783 aarch64) 784 cpu="aarch64" 785 supported_cpu="yes" 786 ;; 787 mips*) 788 cpu="mips" 789 supported_cpu="yes" 790 ;; 791 sparc|sun4[cdmuv]) 792 cpu="sparc" 793 supported_cpu="yes" 794 ;; 795 *) 796 # This will result in either an error or falling back to TCI later 797 ARCH=unknown 798 ;; 799esac 800if test -z "$ARCH"; then 801 ARCH="$cpu" 802fi 803 804# OS specific 805 806# host *BSD for user mode 807HOST_VARIANT_DIR="" 808 809case $targetos in 810MINGW32*) 811 mingw32="yes" 812 hax="yes" 813 vhost_user="no" 814 audio_possible_drivers="dsound sdl" 815 if check_include dsound.h; then 816 audio_drv_list="dsound" 817 else 818 audio_drv_list="" 819 fi 820 supported_os="yes" 821 pie="no" 822;; 823GNU/kFreeBSD) 824 bsd="yes" 825 audio_drv_list="oss try-sdl" 826 audio_possible_drivers="oss sdl pa" 827;; 828FreeBSD) 829 bsd="yes" 830 make="${MAKE-gmake}" 831 audio_drv_list="oss try-sdl" 832 audio_possible_drivers="oss sdl pa" 833 # needed for kinfo_getvmmap(3) in libutil.h 834 LIBS="-lutil $LIBS" 835 # needed for kinfo_getproc 836 libs_qga="-lutil $libs_qga" 837 netmap="" # enable netmap autodetect 838 HOST_VARIANT_DIR="freebsd" 839 supported_os="yes" 840;; 841DragonFly) 842 bsd="yes" 843 make="${MAKE-gmake}" 844 audio_drv_list="oss try-sdl" 845 audio_possible_drivers="oss sdl pa" 846 HOST_VARIANT_DIR="dragonfly" 847;; 848NetBSD) 849 bsd="yes" 850 hax="yes" 851 make="${MAKE-gmake}" 852 audio_drv_list="oss try-sdl" 853 audio_possible_drivers="oss sdl" 854 oss_lib="-lossaudio" 855 HOST_VARIANT_DIR="netbsd" 856 supported_os="yes" 857;; 858OpenBSD) 859 bsd="yes" 860 make="${MAKE-gmake}" 861 audio_drv_list="try-sdl" 862 audio_possible_drivers="sdl" 863 HOST_VARIANT_DIR="openbsd" 864 supported_os="yes" 865;; 866Darwin) 867 bsd="yes" 868 darwin="yes" 869 hax="yes" 870 hvf="yes" 871 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup" 872 if [ "$cpu" = "x86_64" ] ; then 873 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS" 874 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS" 875 fi 876 cocoa="yes" 877 audio_drv_list="coreaudio try-sdl" 878 audio_possible_drivers="coreaudio sdl" 879 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS" 880 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu" 881 # Disable attempts to use ObjectiveC features in os/object.h since they 882 # won't work when we're compiling with gcc as a C compiler. 883 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS" 884 HOST_VARIANT_DIR="darwin" 885 supported_os="yes" 886;; 887SunOS) 888 solaris="yes" 889 make="${MAKE-gmake}" 890 install="${INSTALL-ginstall}" 891 smbd="${SMBD-/usr/sfw/sbin/smbd}" 892 if test -f /usr/include/sys/soundcard.h ; then 893 audio_drv_list="oss try-sdl" 894 fi 895 audio_possible_drivers="oss sdl" 896# needed for CMSG_ macros in sys/socket.h 897 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS" 898# needed for TIOCWIN* defines in termios.h 899 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS" 900 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS" 901 solarisnetlibs="-lsocket -lnsl -lresolv" 902 LIBS="$solarisnetlibs $LIBS" 903 libs_qga="$solarisnetlibs $libs_qga" 904;; 905Haiku) 906 haiku="yes" 907 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS" 908 LIBS="-lposix_error_mapper -lnetwork -lbsd $LIBS" 909;; 910Linux) 911 audio_drv_list="try-pa oss" 912 audio_possible_drivers="oss alsa sdl pa" 913 linux="yes" 914 linux_user="yes" 915 kvm="yes" 916 QEMU_INCLUDES="-isystem \$(SRC_PATH)/linux-headers -isystem $PWD/linux-headers $QEMU_INCLUDES" 917 supported_os="yes" 918 libudev="yes" 919;; 920esac 921 922if [ "$bsd" = "yes" ] ; then 923 if [ "$darwin" != "yes" ] ; then 924 bsd_user="yes" 925 fi 926fi 927 928: ${make=${MAKE-make}} 929: ${install=${INSTALL-install}} 930# We prefer python 3.x. A bare 'python' is traditionally 931# python 2.x, but some distros have it as python 3.x, so 932# we check that too 933python= 934for binary in "${PYTHON-python3}" python 935do 936 if has "$binary" 937 then 938 python=$(command -v "$binary") 939 break 940 fi 941done 942 943sphinx_build= 944for binary in sphinx-build-3 sphinx-build 945do 946 if has "$binary" 947 then 948 sphinx_build=$(command -v "$binary") 949 break 950 fi 951done 952 953# Check for ancillary tools used in testing 954genisoimage= 955for binary in genisoimage mkisofs 956do 957 if has $binary 958 then 959 genisoimage=$(command -v "$binary") 960 break 961 fi 962done 963 964# Check for existence of python3 yaml, needed to 965# import yaml config files into vm-build. 966python_yaml="no" 967if $(python3 -c "import yaml" 2> /dev/null); then 968 python_yaml="yes" 969fi 970 971: ${smbd=${SMBD-/usr/sbin/smbd}} 972 973# Default objcc to clang if available, otherwise use CC 974if has clang; then 975 objcc=clang 976else 977 objcc="$cc" 978fi 979 980if test "$mingw32" = "yes" ; then 981 EXESUF=".exe" 982 DSOSUF=".dll" 983 # MinGW needs -mthreads for TLS and macro _MT. 984 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS" 985 LIBS="-lwinmm -lws2_32 $LIBS" 986 write_c_skeleton; 987 if compile_prog "" "-liberty" ; then 988 LIBS="-liberty $LIBS" 989 fi 990 prefix="c:/Program Files/QEMU" 991 mandir="\${prefix}" 992 datadir="\${prefix}" 993 qemu_docdir="\${prefix}" 994 bindir="\${prefix}" 995 sysconfdir="\${prefix}" 996 local_statedir= 997 confsuffix="" 998 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga" 999fi 1000 1001werror="" 1002 1003for opt do 1004 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 1005 case "$opt" in 1006 --help|-h) show_help=yes 1007 ;; 1008 --version|-V) exec cat $source_path/VERSION 1009 ;; 1010 --prefix=*) prefix="$optarg" 1011 ;; 1012 --interp-prefix=*) interp_prefix="$optarg" 1013 ;; 1014 --cross-prefix=*) 1015 ;; 1016 --cc=*) 1017 ;; 1018 --host-cc=*) host_cc="$optarg" 1019 ;; 1020 --cxx=*) 1021 ;; 1022 --iasl=*) iasl="$optarg" 1023 ;; 1024 --objcc=*) objcc="$optarg" 1025 ;; 1026 --make=*) make="$optarg" 1027 ;; 1028 --install=*) install="$optarg" 1029 ;; 1030 --python=*) python="$optarg" 1031 ;; 1032 --sphinx-build=*) sphinx_build="$optarg" 1033 ;; 1034 --gcov=*) gcov_tool="$optarg" 1035 ;; 1036 --smbd=*) smbd="$optarg" 1037 ;; 1038 --extra-cflags=*) 1039 ;; 1040 --extra-cxxflags=*) 1041 ;; 1042 --extra-ldflags=*) 1043 ;; 1044 --enable-debug-info) 1045 ;; 1046 --disable-debug-info) 1047 ;; 1048 --cross-cc-*) 1049 ;; 1050 --enable-modules) 1051 modules="yes" 1052 ;; 1053 --disable-modules) 1054 modules="no" 1055 ;; 1056 --disable-module-upgrades) module_upgrades="no" 1057 ;; 1058 --enable-module-upgrades) module_upgrades="yes" 1059 ;; 1060 --cpu=*) 1061 ;; 1062 --target-list=*) target_list="$optarg" 1063 if test "$target_list_exclude"; then 1064 error_exit "Can't mix --target-list with --target-list-exclude" 1065 fi 1066 ;; 1067 --target-list-exclude=*) target_list_exclude="$optarg" 1068 if test "$target_list"; then 1069 error_exit "Can't mix --target-list-exclude with --target-list" 1070 fi 1071 ;; 1072 --enable-trace-backends=*) trace_backends="$optarg" 1073 ;; 1074 # XXX: backwards compatibility 1075 --enable-trace-backend=*) trace_backends="$optarg" 1076 ;; 1077 --with-trace-file=*) trace_file="$optarg" 1078 ;; 1079 --with-default-devices) default_devices="yes" 1080 ;; 1081 --without-default-devices) default_devices="no" 1082 ;; 1083 --enable-gprof) gprof="yes" 1084 ;; 1085 --enable-gcov) gcov="yes" 1086 ;; 1087 --static) 1088 static="yes" 1089 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS" 1090 ;; 1091 --mandir=*) mandir="$optarg" 1092 ;; 1093 --bindir=*) bindir="$optarg" 1094 ;; 1095 --libdir=*) libdir="$optarg" 1096 ;; 1097 --libexecdir=*) libexecdir="$optarg" 1098 ;; 1099 --includedir=*) includedir="$optarg" 1100 ;; 1101 --datadir=*) datadir="$optarg" 1102 ;; 1103 --with-confsuffix=*) confsuffix="$optarg" 1104 ;; 1105 --docdir=*) qemu_docdir="$optarg" 1106 ;; 1107 --sysconfdir=*) sysconfdir="$optarg" 1108 ;; 1109 --localstatedir=*) local_statedir="$optarg" 1110 ;; 1111 --firmwarepath=*) firmwarepath="$optarg" 1112 ;; 1113 --efi-aarch64=*) efi_aarch64="$optarg" 1114 ;; 1115 --host=*|--build=*|\ 1116 --disable-dependency-tracking|\ 1117 --sbindir=*|--sharedstatedir=*|\ 1118 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\ 1119 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*) 1120 # These switches are silently ignored, for compatibility with 1121 # autoconf-generated configure scripts. This allows QEMU's 1122 # configure to be used by RPM and similar macros that set 1123 # lots of directory switches by default. 1124 ;; 1125 --disable-sdl) sdl="no" 1126 ;; 1127 --enable-sdl) sdl="yes" 1128 ;; 1129 --disable-sdl-image) sdl_image="no" 1130 ;; 1131 --enable-sdl-image) sdl_image="yes" 1132 ;; 1133 --disable-qom-cast-debug) qom_cast_debug="no" 1134 ;; 1135 --enable-qom-cast-debug) qom_cast_debug="yes" 1136 ;; 1137 --disable-virtfs) virtfs="no" 1138 ;; 1139 --enable-virtfs) virtfs="yes" 1140 ;; 1141 --disable-mpath) mpath="no" 1142 ;; 1143 --enable-mpath) mpath="yes" 1144 ;; 1145 --disable-vnc) vnc="no" 1146 ;; 1147 --enable-vnc) vnc="yes" 1148 ;; 1149 --oss-lib=*) oss_lib="$optarg" 1150 ;; 1151 --audio-drv-list=*) audio_drv_list="$optarg" 1152 ;; 1153 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 1154 ;; 1155 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 1156 ;; 1157 --enable-debug-tcg) debug_tcg="yes" 1158 ;; 1159 --disable-debug-tcg) debug_tcg="no" 1160 ;; 1161 --enable-debug) 1162 # Enable debugging options that aren't excessively noisy 1163 debug_tcg="yes" 1164 debug_mutex="yes" 1165 debug="yes" 1166 strip_opt="no" 1167 fortify_source="no" 1168 ;; 1169 --enable-sanitizers) sanitizers="yes" 1170 ;; 1171 --disable-sanitizers) sanitizers="no" 1172 ;; 1173 --enable-tsan) tsan="yes" 1174 ;; 1175 --disable-tsan) tsan="no" 1176 ;; 1177 --enable-sparse) sparse="yes" 1178 ;; 1179 --disable-sparse) sparse="no" 1180 ;; 1181 --disable-strip) strip_opt="no" 1182 ;; 1183 --disable-vnc-sasl) vnc_sasl="no" 1184 ;; 1185 --enable-vnc-sasl) vnc_sasl="yes" 1186 ;; 1187 --disable-vnc-jpeg) vnc_jpeg="no" 1188 ;; 1189 --enable-vnc-jpeg) vnc_jpeg="yes" 1190 ;; 1191 --disable-vnc-png) vnc_png="no" 1192 ;; 1193 --enable-vnc-png) vnc_png="yes" 1194 ;; 1195 --disable-slirp) slirp="no" 1196 ;; 1197 --enable-slirp=git) slirp="git" 1198 ;; 1199 --enable-slirp=system) slirp="system" 1200 ;; 1201 --disable-vde) vde="no" 1202 ;; 1203 --enable-vde) vde="yes" 1204 ;; 1205 --disable-netmap) netmap="no" 1206 ;; 1207 --enable-netmap) netmap="yes" 1208 ;; 1209 --disable-xen) xen="no" 1210 ;; 1211 --enable-xen) xen="yes" 1212 ;; 1213 --disable-xen-pci-passthrough) xen_pci_passthrough="no" 1214 ;; 1215 --enable-xen-pci-passthrough) xen_pci_passthrough="yes" 1216 ;; 1217 --disable-brlapi) brlapi="no" 1218 ;; 1219 --enable-brlapi) brlapi="yes" 1220 ;; 1221 --disable-kvm) kvm="no" 1222 ;; 1223 --enable-kvm) kvm="yes" 1224 ;; 1225 --disable-hax) hax="no" 1226 ;; 1227 --enable-hax) hax="yes" 1228 ;; 1229 --disable-hvf) hvf="no" 1230 ;; 1231 --enable-hvf) hvf="yes" 1232 ;; 1233 --disable-whpx) whpx="no" 1234 ;; 1235 --enable-whpx) whpx="yes" 1236 ;; 1237 --disable-tcg-interpreter) tcg_interpreter="no" 1238 ;; 1239 --enable-tcg-interpreter) tcg_interpreter="yes" 1240 ;; 1241 --disable-cap-ng) cap_ng="no" 1242 ;; 1243 --enable-cap-ng) cap_ng="yes" 1244 ;; 1245 --disable-tcg) tcg="no" 1246 ;; 1247 --enable-tcg) tcg="yes" 1248 ;; 1249 --disable-malloc-trim) malloc_trim="no" 1250 ;; 1251 --enable-malloc-trim) malloc_trim="yes" 1252 ;; 1253 --disable-spice) spice="no" 1254 ;; 1255 --enable-spice) spice="yes" 1256 ;; 1257 --disable-libiscsi) libiscsi="no" 1258 ;; 1259 --enable-libiscsi) libiscsi="yes" 1260 ;; 1261 --disable-libnfs) libnfs="no" 1262 ;; 1263 --enable-libnfs) libnfs="yes" 1264 ;; 1265 --enable-profiler) profiler="yes" 1266 ;; 1267 --disable-cocoa) cocoa="no" 1268 ;; 1269 --enable-cocoa) 1270 cocoa="yes" ; 1271 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)" 1272 ;; 1273 --disable-system) softmmu="no" 1274 ;; 1275 --enable-system) softmmu="yes" 1276 ;; 1277 --disable-user) 1278 linux_user="no" ; 1279 bsd_user="no" ; 1280 ;; 1281 --enable-user) ;; 1282 --disable-linux-user) linux_user="no" 1283 ;; 1284 --enable-linux-user) linux_user="yes" 1285 ;; 1286 --disable-bsd-user) bsd_user="no" 1287 ;; 1288 --enable-bsd-user) bsd_user="yes" 1289 ;; 1290 --enable-pie) pie="yes" 1291 ;; 1292 --disable-pie) pie="no" 1293 ;; 1294 --enable-werror) werror="yes" 1295 ;; 1296 --disable-werror) werror="no" 1297 ;; 1298 --enable-stack-protector) stack_protector="yes" 1299 ;; 1300 --disable-stack-protector) stack_protector="no" 1301 ;; 1302 --enable-safe-stack) safe_stack="yes" 1303 ;; 1304 --disable-safe-stack) safe_stack="no" 1305 ;; 1306 --disable-curses) curses="no" 1307 ;; 1308 --enable-curses) curses="yes" 1309 ;; 1310 --disable-iconv) iconv="no" 1311 ;; 1312 --enable-iconv) iconv="yes" 1313 ;; 1314 --disable-curl) curl="no" 1315 ;; 1316 --enable-curl) curl="yes" 1317 ;; 1318 --disable-fdt) fdt="no" 1319 ;; 1320 --enable-fdt) fdt="yes" 1321 ;; 1322 --disable-linux-aio) linux_aio="no" 1323 ;; 1324 --enable-linux-aio) linux_aio="yes" 1325 ;; 1326 --disable-linux-io-uring) linux_io_uring="no" 1327 ;; 1328 --enable-linux-io-uring) linux_io_uring="yes" 1329 ;; 1330 --disable-attr) attr="no" 1331 ;; 1332 --enable-attr) attr="yes" 1333 ;; 1334 --disable-membarrier) membarrier="no" 1335 ;; 1336 --enable-membarrier) membarrier="yes" 1337 ;; 1338 --disable-blobs) blobs="no" 1339 ;; 1340 --with-pkgversion=*) pkgversion="$optarg" 1341 ;; 1342 --with-coroutine=*) coroutine="$optarg" 1343 ;; 1344 --disable-coroutine-pool) coroutine_pool="no" 1345 ;; 1346 --enable-coroutine-pool) coroutine_pool="yes" 1347 ;; 1348 --enable-debug-stack-usage) debug_stack_usage="yes" 1349 ;; 1350 --enable-crypto-afalg) crypto_afalg="yes" 1351 ;; 1352 --disable-crypto-afalg) crypto_afalg="no" 1353 ;; 1354 --disable-docs) docs="no" 1355 ;; 1356 --enable-docs) docs="yes" 1357 ;; 1358 --disable-vhost-net) vhost_net="no" 1359 ;; 1360 --enable-vhost-net) vhost_net="yes" 1361 ;; 1362 --disable-vhost-crypto) vhost_crypto="no" 1363 ;; 1364 --enable-vhost-crypto) vhost_crypto="yes" 1365 ;; 1366 --disable-vhost-scsi) vhost_scsi="no" 1367 ;; 1368 --enable-vhost-scsi) vhost_scsi="yes" 1369 ;; 1370 --disable-vhost-vsock) vhost_vsock="no" 1371 ;; 1372 --enable-vhost-vsock) vhost_vsock="yes" 1373 ;; 1374 --disable-vhost-user-fs) vhost_user_fs="no" 1375 ;; 1376 --enable-vhost-user-fs) vhost_user_fs="yes" 1377 ;; 1378 --disable-opengl) opengl="no" 1379 ;; 1380 --enable-opengl) opengl="yes" 1381 ;; 1382 --disable-rbd) rbd="no" 1383 ;; 1384 --enable-rbd) rbd="yes" 1385 ;; 1386 --disable-xfsctl) xfs="no" 1387 ;; 1388 --enable-xfsctl) xfs="yes" 1389 ;; 1390 --disable-smartcard) smartcard="no" 1391 ;; 1392 --enable-smartcard) smartcard="yes" 1393 ;; 1394 --disable-libusb) libusb="no" 1395 ;; 1396 --enable-libusb) libusb="yes" 1397 ;; 1398 --disable-usb-redir) usb_redir="no" 1399 ;; 1400 --enable-usb-redir) usb_redir="yes" 1401 ;; 1402 --disable-zlib-test) zlib="no" 1403 ;; 1404 --disable-lzo) lzo="no" 1405 ;; 1406 --enable-lzo) lzo="yes" 1407 ;; 1408 --disable-snappy) snappy="no" 1409 ;; 1410 --enable-snappy) snappy="yes" 1411 ;; 1412 --disable-bzip2) bzip2="no" 1413 ;; 1414 --enable-bzip2) bzip2="yes" 1415 ;; 1416 --enable-lzfse) lzfse="yes" 1417 ;; 1418 --disable-lzfse) lzfse="no" 1419 ;; 1420 --disable-zstd) zstd="no" 1421 ;; 1422 --enable-zstd) zstd="yes" 1423 ;; 1424 --enable-guest-agent) guest_agent="yes" 1425 ;; 1426 --disable-guest-agent) guest_agent="no" 1427 ;; 1428 --enable-guest-agent-msi) guest_agent_msi="yes" 1429 ;; 1430 --disable-guest-agent-msi) guest_agent_msi="no" 1431 ;; 1432 --with-vss-sdk) vss_win32_sdk="" 1433 ;; 1434 --with-vss-sdk=*) vss_win32_sdk="$optarg" 1435 ;; 1436 --without-vss-sdk) vss_win32_sdk="no" 1437 ;; 1438 --with-win-sdk) win_sdk="" 1439 ;; 1440 --with-win-sdk=*) win_sdk="$optarg" 1441 ;; 1442 --without-win-sdk) win_sdk="no" 1443 ;; 1444 --enable-tools) want_tools="yes" 1445 ;; 1446 --disable-tools) want_tools="no" 1447 ;; 1448 --enable-seccomp) seccomp="yes" 1449 ;; 1450 --disable-seccomp) seccomp="no" 1451 ;; 1452 --disable-glusterfs) glusterfs="no" 1453 ;; 1454 --disable-avx2) avx2_opt="no" 1455 ;; 1456 --enable-avx2) avx2_opt="yes" 1457 ;; 1458 --disable-avx512f) avx512f_opt="no" 1459 ;; 1460 --enable-avx512f) avx512f_opt="yes" 1461 ;; 1462 1463 --enable-glusterfs) glusterfs="yes" 1464 ;; 1465 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane) 1466 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2 1467 ;; 1468 --enable-vhdx|--disable-vhdx) 1469 echo "$0: $opt is obsolete, VHDX driver is always built" >&2 1470 ;; 1471 --enable-uuid|--disable-uuid) 1472 echo "$0: $opt is obsolete, UUID support is always built" >&2 1473 ;; 1474 --disable-gtk) gtk="no" 1475 ;; 1476 --enable-gtk) gtk="yes" 1477 ;; 1478 --tls-priority=*) tls_priority="$optarg" 1479 ;; 1480 --disable-gnutls) gnutls="no" 1481 ;; 1482 --enable-gnutls) gnutls="yes" 1483 ;; 1484 --disable-nettle) nettle="no" 1485 ;; 1486 --enable-nettle) nettle="yes" 1487 ;; 1488 --disable-gcrypt) gcrypt="no" 1489 ;; 1490 --enable-gcrypt) gcrypt="yes" 1491 ;; 1492 --disable-auth-pam) auth_pam="no" 1493 ;; 1494 --enable-auth-pam) auth_pam="yes" 1495 ;; 1496 --enable-rdma) rdma="yes" 1497 ;; 1498 --disable-rdma) rdma="no" 1499 ;; 1500 --enable-pvrdma) pvrdma="yes" 1501 ;; 1502 --disable-pvrdma) pvrdma="no" 1503 ;; 1504 --disable-vte) vte="no" 1505 ;; 1506 --enable-vte) vte="yes" 1507 ;; 1508 --disable-virglrenderer) virglrenderer="no" 1509 ;; 1510 --enable-virglrenderer) virglrenderer="yes" 1511 ;; 1512 --disable-tpm) tpm="no" 1513 ;; 1514 --enable-tpm) tpm="yes" 1515 ;; 1516 --disable-libssh) libssh="no" 1517 ;; 1518 --enable-libssh) libssh="yes" 1519 ;; 1520 --disable-live-block-migration) live_block_migration="no" 1521 ;; 1522 --enable-live-block-migration) live_block_migration="yes" 1523 ;; 1524 --disable-numa) numa="no" 1525 ;; 1526 --enable-numa) numa="yes" 1527 ;; 1528 --disable-libxml2) libxml2="no" 1529 ;; 1530 --enable-libxml2) libxml2="yes" 1531 ;; 1532 --disable-tcmalloc) tcmalloc="no" 1533 ;; 1534 --enable-tcmalloc) tcmalloc="yes" 1535 ;; 1536 --disable-jemalloc) jemalloc="no" 1537 ;; 1538 --enable-jemalloc) jemalloc="yes" 1539 ;; 1540 --disable-replication) replication="no" 1541 ;; 1542 --enable-replication) replication="yes" 1543 ;; 1544 --disable-vxhs) vxhs="no" 1545 ;; 1546 --enable-vxhs) vxhs="yes" 1547 ;; 1548 --disable-bochs) bochs="no" 1549 ;; 1550 --enable-bochs) bochs="yes" 1551 ;; 1552 --disable-cloop) cloop="no" 1553 ;; 1554 --enable-cloop) cloop="yes" 1555 ;; 1556 --disable-dmg) dmg="no" 1557 ;; 1558 --enable-dmg) dmg="yes" 1559 ;; 1560 --disable-qcow1) qcow1="no" 1561 ;; 1562 --enable-qcow1) qcow1="yes" 1563 ;; 1564 --disable-vdi) vdi="no" 1565 ;; 1566 --enable-vdi) vdi="yes" 1567 ;; 1568 --disable-vvfat) vvfat="no" 1569 ;; 1570 --enable-vvfat) vvfat="yes" 1571 ;; 1572 --disable-qed) qed="no" 1573 ;; 1574 --enable-qed) qed="yes" 1575 ;; 1576 --disable-parallels) parallels="no" 1577 ;; 1578 --enable-parallels) parallels="yes" 1579 ;; 1580 --disable-sheepdog) sheepdog="no" 1581 ;; 1582 --enable-sheepdog) sheepdog="yes" 1583 ;; 1584 --disable-vhost-user) vhost_user="no" 1585 ;; 1586 --enable-vhost-user) vhost_user="yes" 1587 ;; 1588 --disable-vhost-vdpa) vhost_vdpa="no" 1589 ;; 1590 --enable-vhost-vdpa) vhost_vdpa="yes" 1591 ;; 1592 --disable-vhost-kernel) vhost_kernel="no" 1593 ;; 1594 --enable-vhost-kernel) vhost_kernel="yes" 1595 ;; 1596 --disable-capstone) capstone="no" 1597 ;; 1598 --enable-capstone) capstone="yes" 1599 ;; 1600 --enable-capstone=git) capstone="git" 1601 ;; 1602 --enable-capstone=system) capstone="system" 1603 ;; 1604 --with-git=*) git="$optarg" 1605 ;; 1606 --enable-git-update) git_update=yes 1607 ;; 1608 --disable-git-update) git_update=no 1609 ;; 1610 --enable-debug-mutex) debug_mutex=yes 1611 ;; 1612 --disable-debug-mutex) debug_mutex=no 1613 ;; 1614 --enable-libpmem) libpmem=yes 1615 ;; 1616 --disable-libpmem) libpmem=no 1617 ;; 1618 --enable-xkbcommon) xkbcommon=yes 1619 ;; 1620 --disable-xkbcommon) xkbcommon=no 1621 ;; 1622 --enable-plugins) plugins="yes" 1623 ;; 1624 --disable-plugins) plugins="no" 1625 ;; 1626 --enable-containers) use_containers="yes" 1627 ;; 1628 --disable-containers) use_containers="no" 1629 ;; 1630 --enable-fuzzing) fuzzing=yes 1631 ;; 1632 --disable-fuzzing) fuzzing=no 1633 ;; 1634 --gdb=*) gdb_bin="$optarg" 1635 ;; 1636 --enable-rng-none) rng_none=yes 1637 ;; 1638 --disable-rng-none) rng_none=no 1639 ;; 1640 --enable-keyring) secret_keyring="yes" 1641 ;; 1642 --disable-keyring) secret_keyring="no" 1643 ;; 1644 --enable-libdaxctl) libdaxctl=yes 1645 ;; 1646 --disable-libdaxctl) libdaxctl=no 1647 ;; 1648 *) 1649 echo "ERROR: unknown option $opt" 1650 echo "Try '$0 --help' for more information" 1651 exit 1 1652 ;; 1653 esac 1654done 1655 1656case "$cpu" in 1657 ppc) 1658 CPU_CFLAGS="-m32" 1659 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" 1660 ;; 1661 ppc64) 1662 CPU_CFLAGS="-m64" 1663 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1664 ;; 1665 sparc) 1666 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" 1667 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS" 1668 ;; 1669 sparc64) 1670 CPU_CFLAGS="-m64 -mcpu=ultrasparc" 1671 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1672 ;; 1673 s390) 1674 CPU_CFLAGS="-m31" 1675 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS" 1676 ;; 1677 s390x) 1678 CPU_CFLAGS="-m64" 1679 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1680 ;; 1681 i386) 1682 CPU_CFLAGS="-m32" 1683 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" 1684 ;; 1685 x86_64) 1686 # ??? Only extremely old AMD cpus do not have cmpxchg16b. 1687 # If we truly care, we should simply detect this case at 1688 # runtime and generate the fallback to serial emulation. 1689 CPU_CFLAGS="-m64 -mcx16" 1690 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1691 ;; 1692 x32) 1693 CPU_CFLAGS="-mx32" 1694 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS" 1695 ;; 1696 # No special flags required for other host CPUs 1697esac 1698 1699eval "cross_cc_${cpu}=\$host_cc" 1700cross_cc_vars="$cross_cc_vars cross_cc_${cpu}" 1701QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS" 1702 1703# For user-mode emulation the host arch has to be one we explicitly 1704# support, even if we're using TCI. 1705if [ "$ARCH" = "unknown" ]; then 1706 bsd_user="no" 1707 linux_user="no" 1708fi 1709 1710if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then 1711 tcg="no" 1712fi 1713 1714default_target_list="" 1715 1716mak_wilds="" 1717 1718if [ "$softmmu" = "yes" ]; then 1719 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak" 1720fi 1721if [ "$linux_user" = "yes" ]; then 1722 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak" 1723fi 1724if [ "$bsd_user" = "yes" ]; then 1725 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak" 1726fi 1727 1728if test -z "$target_list_exclude"; then 1729 for config in $mak_wilds; do 1730 default_target_list="${default_target_list} $(basename "$config" .mak)" 1731 done 1732else 1733 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g') 1734 for config in $mak_wilds; do 1735 target="$(basename "$config" .mak)" 1736 exclude="no" 1737 for excl in $exclude_list; do 1738 if test "$excl" = "$target"; then 1739 exclude="yes" 1740 break; 1741 fi 1742 done 1743 if test "$exclude" = "no"; then 1744 default_target_list="${default_target_list} $target" 1745 fi 1746 done 1747fi 1748 1749# Enumerate public trace backends for --help output 1750trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/')) 1751 1752if test x"$show_help" = x"yes" ; then 1753cat << EOF 1754 1755Usage: configure [options] 1756Options: [defaults in brackets after descriptions] 1757 1758Standard options: 1759 --help print this message 1760 --prefix=PREFIX install in PREFIX [$prefix] 1761 --interp-prefix=PREFIX where to find shared libraries, etc. 1762 use %M for cpu name [$interp_prefix] 1763 --target-list=LIST set target list (default: build everything) 1764$(echo Available targets: $default_target_list | \ 1765 fold -s -w 53 | sed -e 's/^/ /') 1766 --target-list-exclude=LIST exclude a set of targets from the default target-list 1767 1768Advanced options (experts only): 1769 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix] 1770 --cc=CC use C compiler CC [$cc] 1771 --iasl=IASL use ACPI compiler IASL [$iasl] 1772 --host-cc=CC use C compiler CC [$host_cc] for code run at 1773 build time 1774 --cxx=CXX use C++ compiler CXX [$cxx] 1775 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] 1776 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS 1777 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS 1778 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS 1779 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases 1780 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests 1781 --make=MAKE use specified make [$make] 1782 --install=INSTALL use specified install [$install] 1783 --python=PYTHON use specified python [$python] 1784 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build] 1785 --smbd=SMBD use specified smbd [$smbd] 1786 --with-git=GIT use specified git [$git] 1787 --static enable static build [$static] 1788 --mandir=PATH install man pages in PATH 1789 --datadir=PATH install firmware in PATH$confsuffix 1790 --docdir=PATH install documentation in PATH$confsuffix 1791 --bindir=PATH install binaries in PATH 1792 --libdir=PATH install libraries in PATH 1793 --libexecdir=PATH install helper binaries in PATH 1794 --sysconfdir=PATH install config in PATH$confsuffix 1795 --localstatedir=PATH install local state in PATH (set at runtime on win32) 1796 --firmwarepath=PATH search PATH for firmware files 1797 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs. 1798 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix] 1799 --with-pkgversion=VERS use specified string as sub-version of the package 1800 --enable-debug enable common debug build options 1801 --enable-sanitizers enable default sanitizers 1802 --enable-tsan enable thread sanitizer 1803 --disable-strip disable stripping binaries 1804 --disable-werror disable compilation abort on warning 1805 --disable-stack-protector disable compiler-provided stack protection 1806 --audio-drv-list=LIST set audio drivers list: 1807 Available drivers: $audio_possible_drivers 1808 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L 1809 --block-drv-rw-whitelist=L 1810 set block driver read-write whitelist 1811 (affects only QEMU, not qemu-img) 1812 --block-drv-ro-whitelist=L 1813 set block driver read-only whitelist 1814 (affects only QEMU, not qemu-img) 1815 --enable-trace-backends=B Set trace backend 1816 Available backends: $trace_backend_list 1817 --with-trace-file=NAME Full PATH,NAME of file to store traces 1818 Default:trace-<pid> 1819 --disable-slirp disable SLIRP userspace network connectivity 1820 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI) 1821 --enable-malloc-trim enable libc malloc_trim() for memory optimization 1822 --oss-lib path to OSS library 1823 --cpu=CPU Build for host CPU [$cpu] 1824 --with-coroutine=BACKEND coroutine backend. Supported options: 1825 ucontext, sigaltstack, windows 1826 --enable-gcov enable test coverage analysis with gcov 1827 --gcov=GCOV use specified gcov [$gcov_tool] 1828 --disable-blobs disable installing provided firmware blobs 1829 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent 1830 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb) 1831 --tls-priority default TLS protocol/cipher priority string 1832 --enable-gprof QEMU profiling with gprof 1833 --enable-profiler profiler support 1834 --enable-debug-stack-usage 1835 track the maximum stack usage of stacks created by qemu_alloc_stack 1836 --enable-plugins 1837 enable plugins via shared library loading 1838 --disable-containers don't use containers for cross-building 1839 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin] 1840 1841Optional features, enabled with --enable-FEATURE and 1842disabled with --disable-FEATURE, default is enabled if available: 1843 1844 system all system emulation targets 1845 user supported user emulation targets 1846 linux-user all linux usermode emulation targets 1847 bsd-user all BSD usermode emulation targets 1848 docs build documentation 1849 guest-agent build the QEMU Guest Agent 1850 guest-agent-msi build guest agent Windows MSI installation package 1851 pie Position Independent Executables 1852 modules modules support (non-Windows) 1853 module-upgrades try to load modules from alternate paths for upgrades 1854 debug-tcg TCG debugging (default is disabled) 1855 debug-info debugging information 1856 sparse sparse checker 1857 safe-stack SafeStack Stack Smash Protection. Depends on 1858 clang/llvm >= 3.7 and requires coroutine backend ucontext. 1859 1860 gnutls GNUTLS cryptography support 1861 nettle nettle cryptography support 1862 gcrypt libgcrypt cryptography support 1863 auth-pam PAM access control 1864 sdl SDL UI 1865 sdl-image SDL Image support for icons 1866 gtk gtk UI 1867 vte vte support for the gtk UI 1868 curses curses UI 1869 iconv font glyph conversion support 1870 vnc VNC UI support 1871 vnc-sasl SASL encryption for VNC server 1872 vnc-jpeg JPEG lossy compression for VNC server 1873 vnc-png PNG compression for VNC server 1874 cocoa Cocoa UI (Mac OS X only) 1875 virtfs VirtFS 1876 mpath Multipath persistent reservation passthrough 1877 xen xen backend driver support 1878 xen-pci-passthrough PCI passthrough support for Xen 1879 brlapi BrlAPI (Braile) 1880 curl curl connectivity 1881 membarrier membarrier system call (for Linux 4.14+ or Windows) 1882 fdt fdt device tree 1883 kvm KVM acceleration support 1884 hax HAX acceleration support 1885 hvf Hypervisor.framework acceleration support 1886 whpx Windows Hypervisor Platform acceleration support 1887 rdma Enable RDMA-based migration 1888 pvrdma Enable PVRDMA support 1889 vde support for vde network 1890 netmap support for netmap network 1891 linux-aio Linux AIO support 1892 linux-io-uring Linux io_uring support 1893 cap-ng libcap-ng support 1894 attr attr and xattr support 1895 vhost-net vhost-net kernel acceleration support 1896 vhost-vsock virtio sockets device support 1897 vhost-scsi vhost-scsi kernel target support 1898 vhost-crypto vhost-user-crypto backend support 1899 vhost-kernel vhost kernel backend support 1900 vhost-user vhost-user backend support 1901 vhost-vdpa vhost-vdpa kernel backend support 1902 spice spice 1903 rbd rados block device (rbd) 1904 libiscsi iscsi support 1905 libnfs nfs support 1906 smartcard smartcard support (libcacard) 1907 libusb libusb (for usb passthrough) 1908 live-block-migration Block migration in the main migration stream 1909 usb-redir usb network redirection support 1910 lzo support of lzo compression library 1911 snappy support of snappy compression library 1912 bzip2 support of bzip2 compression library 1913 (for reading bzip2-compressed dmg images) 1914 lzfse support of lzfse compression library 1915 (for reading lzfse-compressed dmg images) 1916 zstd support for zstd compression library 1917 (for migration compression and qcow2 cluster compression) 1918 seccomp seccomp support 1919 coroutine-pool coroutine freelist (better performance) 1920 glusterfs GlusterFS backend 1921 tpm TPM support 1922 libssh ssh block device support 1923 numa libnuma support 1924 libxml2 for Parallels image format 1925 tcmalloc tcmalloc support 1926 jemalloc jemalloc support 1927 avx2 AVX2 optimization support 1928 avx512f AVX512F optimization support 1929 replication replication support 1930 opengl opengl support 1931 virglrenderer virgl rendering support 1932 xfsctl xfsctl support 1933 qom-cast-debug cast debugging support 1934 tools build qemu-io, qemu-nbd and qemu-img tools 1935 vxhs Veritas HyperScale vDisk backend support 1936 bochs bochs image format support 1937 cloop cloop image format support 1938 dmg dmg image format support 1939 qcow1 qcow v1 image format support 1940 vdi vdi image format support 1941 vvfat vvfat image format support 1942 qed qed image format support 1943 parallels parallels image format support 1944 sheepdog sheepdog block driver support 1945 crypto-afalg Linux AF_ALG crypto backend driver 1946 capstone capstone disassembler support 1947 debug-mutex mutex debugging support 1948 libpmem libpmem support 1949 xkbcommon xkbcommon support 1950 rng-none dummy RNG, avoid using /dev/(u)random and getrandom() 1951 libdaxctl libdaxctl support 1952 1953NOTE: The object files are built at the place where configure is launched 1954EOF 1955exit 0 1956fi 1957 1958# Remove old dependency files to make sure that they get properly regenerated 1959rm -f */config-devices.mak.d 1960 1961# Remove syscall_nr.h to be sure they will be regenerated in the build 1962# directory, not in the source directory 1963for arch in alpha hppa m68k xtensa sh4 microblaze arm ppc s390x sparc sparc64 \ 1964 i386 x86_64 mips mips64 ; do 1965 # remove the file if it has been generated in the source directory 1966 rm -f "${source_path}/linux-user/${arch}/syscall_nr.h" 1967 # remove the dependency files 1968 for target in ${arch}*-linux-user ; do 1969 test -d "${target}" && find "${target}" -type f -name "*.d" \ 1970 -exec grep -q "${source_path}/linux-user/${arch}/syscall_nr.h" {} \; \ 1971 -print | while read file ; do rm "${file}" "${file%.d}.o" ; done 1972 done 1973done 1974 1975if test -z "$python" 1976then 1977 error_exit "Python not found. Use --python=/path/to/python" 1978fi 1979 1980# Note that if the Python conditional here evaluates True we will exit 1981# with status 1 which is a shell 'false' value. 1982if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then 1983 error_exit "Cannot use '$python', Python >= 3.5 is required." \ 1984 "Use --python=/path/to/python to specify a supported Python." 1985fi 1986 1987# Preserve python version since some functionality is dependent on it 1988python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null) 1989 1990# Suppress writing compiled files 1991python="$python -B" 1992 1993# Check that the C compiler works. Doing this here before testing 1994# the host CPU ensures that we had a valid CC to autodetect the 1995# $cpu var (and we should bail right here if that's not the case). 1996# It also allows the help message to be printed without a CC. 1997write_c_skeleton; 1998if compile_object ; then 1999 : C compiler works ok 2000else 2001 error_exit "\"$cc\" either does not exist or does not work" 2002fi 2003if ! compile_prog ; then 2004 error_exit "\"$cc\" cannot build an executable (is your linker broken?)" 2005fi 2006 2007# Now we have handled --enable-tcg-interpreter and know we're not just 2008# printing the help message, bail out if the host CPU isn't supported. 2009if test "$ARCH" = "unknown"; then 2010 if test "$tcg_interpreter" = "yes" ; then 2011 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)" 2012 else 2013 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter" 2014 fi 2015fi 2016 2017# Consult white-list to determine whether to enable werror 2018# by default. Only enable by default for git builds 2019if test -z "$werror" ; then 2020 if test -e "$source_path/.git" && \ 2021 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then 2022 werror="yes" 2023 else 2024 werror="no" 2025 fi 2026fi 2027 2028if test "$bogus_os" = "yes"; then 2029 # Now that we know that we're not printing the help and that 2030 # the compiler works (so the results of the check_defines we used 2031 # to identify the OS are reliable), if we didn't recognize the 2032 # host OS we should stop now. 2033 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')" 2034fi 2035 2036# Check whether the compiler matches our minimum requirements: 2037cat > $TMPC << EOF 2038#if defined(__clang_major__) && defined(__clang_minor__) 2039# ifdef __apple_build_version__ 2040# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1) 2041# error You need at least XCode Clang v5.1 to compile QEMU 2042# endif 2043# else 2044# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4) 2045# error You need at least Clang v3.4 to compile QEMU 2046# endif 2047# endif 2048#elif defined(__GNUC__) && defined(__GNUC_MINOR__) 2049# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) 2050# error You need at least GCC v4.8 to compile QEMU 2051# endif 2052#else 2053# error You either need GCC or Clang to compiler QEMU 2054#endif 2055int main (void) { return 0; } 2056EOF 2057if ! compile_prog "" "" ; then 2058 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)" 2059fi 2060 2061# Accumulate -Wfoo and -Wno-bar separately. 2062# We will list all of the enable flags first, and the disable flags second. 2063# Note that we do not add -Werror, because that would enable it for all 2064# configure tests. If a configure test failed due to -Werror this would 2065# just silently disable some features, so it's too error prone. 2066 2067warn_flags= 2068add_to warn_flags -Wold-style-declaration 2069add_to warn_flags -Wold-style-definition 2070add_to warn_flags -Wtype-limits 2071add_to warn_flags -Wformat-security 2072add_to warn_flags -Wformat-y2k 2073add_to warn_flags -Winit-self 2074add_to warn_flags -Wignored-qualifiers 2075add_to warn_flags -Wempty-body 2076add_to warn_flags -Wnested-externs 2077add_to warn_flags -Wendif-labels 2078add_to warn_flags -Wexpansion-to-defined 2079 2080nowarn_flags= 2081add_to nowarn_flags -Wno-initializer-overrides 2082add_to nowarn_flags -Wno-missing-include-dirs 2083add_to nowarn_flags -Wno-shift-negative-value 2084add_to nowarn_flags -Wno-string-plus-int 2085add_to nowarn_flags -Wno-typedef-redefinition 2086add_to nowarn_flags -Wno-tautological-type-limit-compare 2087add_to nowarn_flags -Wno-psabi 2088 2089gcc_flags="$warn_flags $nowarn_flags" 2090 2091cc_has_warning_flag() { 2092 write_c_skeleton; 2093 2094 # Use the positive sense of the flag when testing for -Wno-wombat 2095 # support (gcc will happily accept the -Wno- form of unknown 2096 # warning options). 2097 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')" 2098 compile_prog "-Werror $optflag" "" 2099} 2100 2101for flag in $gcc_flags; do 2102 if cc_has_warning_flag $flag ; then 2103 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 2104 fi 2105done 2106 2107if test "$stack_protector" != "no"; then 2108 cat > $TMPC << EOF 2109int main(int argc, char *argv[]) 2110{ 2111 char arr[64], *p = arr, *c = argv[0]; 2112 while (*c) { 2113 *p++ = *c++; 2114 } 2115 return 0; 2116} 2117EOF 2118 gcc_flags="-fstack-protector-strong -fstack-protector-all" 2119 sp_on=0 2120 for flag in $gcc_flags; do 2121 # We need to check both a compile and a link, since some compiler 2122 # setups fail only on a .c->.o compile and some only at link time 2123 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC && 2124 compile_prog "-Werror $flag" ""; then 2125 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 2126 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 2127 sp_on=1 2128 break 2129 fi 2130 done 2131 if test "$stack_protector" = yes; then 2132 if test $sp_on = 0; then 2133 error_exit "Stack protector not supported" 2134 fi 2135 fi 2136fi 2137 2138# Disable -Wmissing-braces on older compilers that warn even for 2139# the "universal" C zero initializer {0}. 2140cat > $TMPC << EOF 2141struct { 2142 int a[2]; 2143} x = {0}; 2144EOF 2145if compile_object "-Werror" "" ; then 2146 : 2147else 2148 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces" 2149fi 2150 2151# Our module code doesn't support Windows 2152if test "$modules" = "yes" && test "$mingw32" = "yes" ; then 2153 error_exit "Modules are not available for Windows" 2154fi 2155 2156# module_upgrades is only reasonable if modules are enabled 2157if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then 2158 error_exit "Can't enable module-upgrades as Modules are not enabled" 2159fi 2160 2161# Static linking is not possible with modules or PIE 2162if test "$static" = "yes" ; then 2163 if test "$modules" = "yes" ; then 2164 error_exit "static and modules are mutually incompatible" 2165 fi 2166fi 2167 2168# Unconditional check for compiler __thread support 2169 cat > $TMPC << EOF 2170static __thread int tls_var; 2171int main(void) { return tls_var; } 2172EOF 2173 2174if ! compile_prog "-Werror" "" ; then 2175 error_exit "Your compiler does not support the __thread specifier for " \ 2176 "Thread-Local Storage (TLS). Please upgrade to a version that does." 2177fi 2178 2179cat > $TMPC << EOF 2180 2181#ifdef __linux__ 2182# define THREAD __thread 2183#else 2184# define THREAD 2185#endif 2186static THREAD int tls_var; 2187int main(void) { return tls_var; } 2188EOF 2189 2190# Check we support --no-pie first; we will need this for building ROMs. 2191if compile_prog "-Werror -fno-pie" "-no-pie"; then 2192 CFLAGS_NOPIE="-fno-pie" 2193 LDFLAGS_NOPIE="-no-pie" 2194fi 2195 2196if test "$static" = "yes"; then 2197 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then 2198 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS" 2199 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS" 2200 pie="yes" 2201 elif test "$pie" = "yes"; then 2202 error_exit "-static-pie not available due to missing toolchain support" 2203 else 2204 QEMU_LDFLAGS="-static $QEMU_LDFLAGS" 2205 pie="no" 2206 fi 2207elif test "$pie" = "no"; then 2208 QEMU_CFLAGS="$CFLAGS_NOPIE $QEMU_CFLAGS" 2209 QEMU_LDFLAGS="$LDFLAGS_NOPIE $QEMU_LDFLAGS" 2210elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then 2211 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS" 2212 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS" 2213 pie="yes" 2214elif test "$pie" = "yes"; then 2215 error_exit "PIE not available due to missing toolchain support" 2216else 2217 echo "Disabling PIE due to missing toolchain support" 2218 pie="no" 2219fi 2220 2221# Detect support for PT_GNU_RELRO + DT_BIND_NOW. 2222# The combination is known as "full relro", because .got.plt is read-only too. 2223if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then 2224 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS" 2225fi 2226 2227########################################## 2228# __sync_fetch_and_and requires at least -march=i486. Many toolchains 2229# use i686 as default anyway, but for those that don't, an explicit 2230# specification is necessary 2231 2232if test "$cpu" = "i386"; then 2233 cat > $TMPC << EOF 2234static int sfaa(int *ptr) 2235{ 2236 return __sync_fetch_and_and(ptr, 0); 2237} 2238 2239int main(void) 2240{ 2241 int val = 42; 2242 val = __sync_val_compare_and_swap(&val, 0, 1); 2243 sfaa(&val); 2244 return val; 2245} 2246EOF 2247 if ! compile_prog "" "" ; then 2248 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS" 2249 fi 2250fi 2251 2252######################################### 2253# Solaris specific configure tool chain decisions 2254 2255if test "$solaris" = "yes" ; then 2256 if has $install; then 2257 : 2258 else 2259 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \ 2260 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \ 2261 "to get ginstall which is used by default (which lives in /opt/csw/bin)" 2262 fi 2263 if test "$(path_of $install)" = "/usr/sbin/install" ; then 2264 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \ 2265 "try ginstall from the GNU fileutils available from www.blastwave.org" \ 2266 "using pkg-get -i fileutils, or use --install=/usr/ucb/install" 2267 fi 2268 if has ar; then 2269 : 2270 else 2271 if test -f /usr/ccs/bin/ar ; then 2272 error_exit "No path includes ar" \ 2273 "Add /usr/ccs/bin to your path and rerun configure" 2274 fi 2275 error_exit "No path includes ar" 2276 fi 2277fi 2278 2279if test -z "${target_list+xxx}" ; then 2280 for target in $default_target_list; do 2281 supported_target $target 2>/dev/null && \ 2282 target_list="$target_list $target" 2283 done 2284 target_list="${target_list# }" 2285else 2286 target_list=$(echo "$target_list" | sed -e 's/,/ /g') 2287 for target in $target_list; do 2288 # Check that we recognised the target name; this allows a more 2289 # friendly error message than if we let it fall through. 2290 case " $default_target_list " in 2291 *" $target "*) 2292 ;; 2293 *) 2294 error_exit "Unknown target name '$target'" 2295 ;; 2296 esac 2297 supported_target $target || exit 1 2298 done 2299fi 2300 2301# see if system emulation was really requested 2302case " $target_list " in 2303 *"-softmmu "*) softmmu=yes 2304 ;; 2305 *) softmmu=no 2306 ;; 2307esac 2308 2309for target in $target_list; do 2310 case "$target" in 2311 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu) 2312 edk2_blobs="yes" 2313 ;; 2314 esac 2315done 2316# The EDK2 binaries are compressed with bzip2 2317if test "$edk2_blobs" = "yes" && ! has bzip2; then 2318 error_exit "The bzip2 program is required for building QEMU" 2319fi 2320 2321feature_not_found() { 2322 feature=$1 2323 remedy=$2 2324 2325 error_exit "User requested feature $feature" \ 2326 "configure was not able to find it." \ 2327 "$remedy" 2328} 2329 2330# --- 2331# big/little endian test 2332cat > $TMPC << EOF 2333short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; 2334short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; 2335extern int foo(short *, short *); 2336int main(int argc, char *argv[]) { 2337 return foo(big_endian, little_endian); 2338} 2339EOF 2340 2341if compile_object ; then 2342 if strings -a $TMPO | grep -q BiGeNdIaN ; then 2343 bigendian="yes" 2344 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then 2345 bigendian="no" 2346 else 2347 echo big/little test failed 2348 fi 2349else 2350 echo big/little test failed 2351fi 2352 2353########################################## 2354# system tools 2355if test -z "$want_tools"; then 2356 if test "$softmmu" = "no"; then 2357 want_tools=no 2358 else 2359 want_tools=yes 2360 fi 2361fi 2362 2363########################################## 2364# cocoa implies not SDL or GTK 2365# (the cocoa UI code currently assumes it is always the active UI 2366# and doesn't interact well with other UI frontend code) 2367if test "$cocoa" = "yes"; then 2368 if test "$sdl" = "yes"; then 2369 error_exit "Cocoa and SDL UIs cannot both be enabled at once" 2370 fi 2371 if test "$gtk" = "yes"; then 2372 error_exit "Cocoa and GTK UIs cannot both be enabled at once" 2373 fi 2374 gtk=no 2375 sdl=no 2376fi 2377 2378# Some versions of Mac OS X incorrectly define SIZE_MAX 2379cat > $TMPC << EOF 2380#include <stdint.h> 2381#include <stdio.h> 2382int main(int argc, char *argv[]) { 2383 return printf("%zu", SIZE_MAX); 2384} 2385EOF 2386have_broken_size_max=no 2387if ! compile_object -Werror ; then 2388 have_broken_size_max=yes 2389fi 2390 2391########################################## 2392# L2TPV3 probe 2393 2394cat > $TMPC <<EOF 2395#include <sys/socket.h> 2396#include <linux/ip.h> 2397int main(void) { return sizeof(struct mmsghdr); } 2398EOF 2399if compile_prog "" "" ; then 2400 l2tpv3=yes 2401else 2402 l2tpv3=no 2403fi 2404 2405if check_include "pty.h" ; then 2406 pty_h=yes 2407else 2408 pty_h=no 2409fi 2410 2411cat > $TMPC <<EOF 2412#include <sys/mman.h> 2413int main(int argc, char *argv[]) { 2414 return mlockall(MCL_FUTURE); 2415} 2416EOF 2417if compile_prog "" "" ; then 2418 have_mlockall=yes 2419else 2420 have_mlockall=no 2421fi 2422 2423######################################### 2424# vhost interdependencies and host support 2425 2426# vhost backends 2427test "$vhost_user" = "" && vhost_user=yes 2428if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then 2429 error_exit "vhost-user isn't available on win32" 2430fi 2431test "$vhost_vdpa" = "" && vhost_vdpa=$linux 2432if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then 2433 error_exit "vhost-vdpa is only available on Linux" 2434fi 2435test "$vhost_kernel" = "" && vhost_kernel=$linux 2436if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then 2437 error_exit "vhost-kernel is only available on Linux" 2438fi 2439 2440# vhost-kernel devices 2441test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel 2442if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then 2443 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel" 2444fi 2445test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel 2446if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then 2447 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel" 2448fi 2449 2450# vhost-user backends 2451test "$vhost_net_user" = "" && vhost_net_user=$vhost_user 2452if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then 2453 error_exit "--enable-vhost-net-user requires --enable-vhost-user" 2454fi 2455test "$vhost_crypto" = "" && vhost_crypto=$vhost_user 2456if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then 2457 error_exit "--enable-vhost-crypto requires --enable-vhost-user" 2458fi 2459test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user 2460if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then 2461 error_exit "--enable-vhost-user-fs requires --enable-vhost-user" 2462fi 2463#vhost-vdpa backends 2464test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa 2465if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then 2466 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa" 2467fi 2468 2469# OR the vhost-kernel and vhost-user values for simplicity 2470if test "$vhost_net" = ""; then 2471 test "$vhost_net_user" = "yes" && vhost_net=yes 2472 test "$vhost_kernel" = "yes" && vhost_net=yes 2473fi 2474 2475########################################## 2476# MinGW / Mingw-w64 localtime_r/gmtime_r check 2477 2478if test "$mingw32" = "yes"; then 2479 # Some versions of MinGW / Mingw-w64 lack localtime_r 2480 # and gmtime_r entirely. 2481 # 2482 # Some versions of Mingw-w64 define a macro for 2483 # localtime_r/gmtime_r. 2484 # 2485 # Some versions of Mingw-w64 will define functions 2486 # for localtime_r/gmtime_r, but only if you have 2487 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun 2488 # though, unistd.h and pthread.h both define 2489 # that for you. 2490 # 2491 # So this #undef localtime_r and #include <unistd.h> 2492 # are not in fact redundant. 2493cat > $TMPC << EOF 2494#include <unistd.h> 2495#include <time.h> 2496#undef localtime_r 2497int main(void) { localtime_r(NULL, NULL); return 0; } 2498EOF 2499 if compile_prog "" "" ; then 2500 localtime_r="yes" 2501 else 2502 localtime_r="no" 2503 fi 2504fi 2505 2506########################################## 2507# pkg-config probe 2508 2509if ! has "$pkg_config_exe"; then 2510 error_exit "pkg-config binary '$pkg_config_exe' not found" 2511fi 2512 2513########################################## 2514# NPTL probe 2515 2516if test "$linux_user" = "yes"; then 2517 cat > $TMPC <<EOF 2518#include <sched.h> 2519#include <linux/futex.h> 2520int main(void) { 2521#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) 2522#error bork 2523#endif 2524 return 0; 2525} 2526EOF 2527 if ! compile_object ; then 2528 feature_not_found "nptl" "Install glibc and linux kernel headers." 2529 fi 2530fi 2531 2532########################################## 2533# lzo check 2534 2535if test "$lzo" != "no" ; then 2536 cat > $TMPC << EOF 2537#include <lzo/lzo1x.h> 2538int main(void) { lzo_version(); return 0; } 2539EOF 2540 if compile_prog "" "-llzo2" ; then 2541 libs_softmmu="$libs_softmmu -llzo2" 2542 lzo="yes" 2543 else 2544 if test "$lzo" = "yes"; then 2545 feature_not_found "liblzo2" "Install liblzo2 devel" 2546 fi 2547 lzo="no" 2548 fi 2549fi 2550 2551########################################## 2552# snappy check 2553 2554if test "$snappy" != "no" ; then 2555 cat > $TMPC << EOF 2556#include <snappy-c.h> 2557int main(void) { snappy_max_compressed_length(4096); return 0; } 2558EOF 2559 if compile_prog "" "-lsnappy" ; then 2560 libs_softmmu="$libs_softmmu -lsnappy" 2561 snappy="yes" 2562 else 2563 if test "$snappy" = "yes"; then 2564 feature_not_found "libsnappy" "Install libsnappy devel" 2565 fi 2566 snappy="no" 2567 fi 2568fi 2569 2570########################################## 2571# bzip2 check 2572 2573if test "$bzip2" != "no" ; then 2574 cat > $TMPC << EOF 2575#include <bzlib.h> 2576int main(void) { BZ2_bzlibVersion(); return 0; } 2577EOF 2578 if compile_prog "" "-lbz2" ; then 2579 bzip2="yes" 2580 else 2581 if test "$bzip2" = "yes"; then 2582 feature_not_found "libbzip2" "Install libbzip2 devel" 2583 fi 2584 bzip2="no" 2585 fi 2586fi 2587 2588########################################## 2589# lzfse check 2590 2591if test "$lzfse" != "no" ; then 2592 cat > $TMPC << EOF 2593#include <lzfse.h> 2594int main(void) { lzfse_decode_scratch_size(); return 0; } 2595EOF 2596 if compile_prog "" "-llzfse" ; then 2597 lzfse="yes" 2598 else 2599 if test "$lzfse" = "yes"; then 2600 feature_not_found "lzfse" "Install lzfse devel" 2601 fi 2602 lzfse="no" 2603 fi 2604fi 2605 2606########################################## 2607# zstd check 2608 2609if test "$zstd" != "no" ; then 2610 libzstd_minver="1.4.0" 2611 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then 2612 zstd_cflags="$($pkg_config --cflags libzstd)" 2613 zstd_libs="$($pkg_config --libs libzstd)" 2614 LIBS="$zstd_libs $LIBS" 2615 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags" 2616 zstd="yes" 2617 else 2618 if test "$zstd" = "yes" ; then 2619 feature_not_found "libzstd" "Install libzstd devel" 2620 fi 2621 zstd="no" 2622 fi 2623fi 2624 2625########################################## 2626# libseccomp check 2627 2628if test "$seccomp" != "no" ; then 2629 libseccomp_minver="2.3.0" 2630 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then 2631 seccomp_cflags="$($pkg_config --cflags libseccomp)" 2632 seccomp_libs="$($pkg_config --libs libseccomp)" 2633 seccomp="yes" 2634 else 2635 if test "$seccomp" = "yes" ; then 2636 feature_not_found "libseccomp" \ 2637 "Install libseccomp devel >= $libseccomp_minver" 2638 fi 2639 seccomp="no" 2640 fi 2641fi 2642########################################## 2643# xen probe 2644 2645if test "$xen" != "no" ; then 2646 # Check whether Xen library path is specified via --extra-ldflags to avoid 2647 # overriding this setting with pkg-config output. If not, try pkg-config 2648 # to obtain all needed flags. 2649 2650 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 2651 $pkg_config --exists xencontrol ; then 2652 xen_ctrl_version="$(printf '%d%02d%02d' \ 2653 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 2654 xen=yes 2655 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab" 2656 xen_pc="$xen_pc xenevtchn xendevicemodel" 2657 if $pkg_config --exists xentoolcore; then 2658 xen_pc="$xen_pc xentoolcore" 2659 fi 2660 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)" 2661 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu" 2662 else 2663 2664 xen_libs="-lxenstore -lxenctrl -lxenguest" 2665 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 2666 2667 # First we test whether Xen headers and libraries are available. 2668 # If no, we are done and there is no Xen support. 2669 # If yes, more tests are run to detect the Xen version. 2670 2671 # Xen (any) 2672 cat > $TMPC <<EOF 2673#include <xenctrl.h> 2674int main(void) { 2675 return 0; 2676} 2677EOF 2678 if ! compile_prog "" "$xen_libs" ; then 2679 # Xen not found 2680 if test "$xen" = "yes" ; then 2681 feature_not_found "xen" "Install xen devel" 2682 fi 2683 xen=no 2684 2685 # Xen unstable 2686 elif 2687 cat > $TMPC <<EOF && 2688#undef XC_WANT_COMPAT_DEVICEMODEL_API 2689#define __XEN_TOOLS__ 2690#include <xendevicemodel.h> 2691#include <xenforeignmemory.h> 2692int main(void) { 2693 xendevicemodel_handle *xd; 2694 xenforeignmemory_handle *xfmem; 2695 2696 xd = xendevicemodel_open(0, 0); 2697 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); 2698 2699 xfmem = xenforeignmemory_open(0, 0); 2700 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); 2701 2702 return 0; 2703} 2704EOF 2705 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2706 then 2707 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2708 xen_ctrl_version=41100 2709 xen=yes 2710 elif 2711 cat > $TMPC <<EOF && 2712#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2713#include <xenforeignmemory.h> 2714#include <xentoolcore.h> 2715int main(void) { 2716 xenforeignmemory_handle *xfmem; 2717 2718 xfmem = xenforeignmemory_open(0, 0); 2719 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 2720 xentoolcore_restrict_all(0); 2721 2722 return 0; 2723} 2724EOF 2725 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2726 then 2727 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2728 xen_ctrl_version=41000 2729 xen=yes 2730 elif 2731 cat > $TMPC <<EOF && 2732#undef XC_WANT_COMPAT_DEVICEMODEL_API 2733#define __XEN_TOOLS__ 2734#include <xendevicemodel.h> 2735int main(void) { 2736 xendevicemodel_handle *xd; 2737 2738 xd = xendevicemodel_open(0, 0); 2739 xendevicemodel_close(xd); 2740 2741 return 0; 2742} 2743EOF 2744 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2745 then 2746 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2747 xen_ctrl_version=40900 2748 xen=yes 2749 elif 2750 cat > $TMPC <<EOF && 2751/* 2752 * If we have stable libs the we don't want the libxc compat 2753 * layers, regardless of what CFLAGS we may have been given. 2754 * 2755 * Also, check if xengnttab_grant_copy_segment_t is defined and 2756 * grant copy operation is implemented. 2757 */ 2758#undef XC_WANT_COMPAT_EVTCHN_API 2759#undef XC_WANT_COMPAT_GNTTAB_API 2760#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2761#include <xenctrl.h> 2762#include <xenstore.h> 2763#include <xenevtchn.h> 2764#include <xengnttab.h> 2765#include <xenforeignmemory.h> 2766#include <stdint.h> 2767#include <xen/hvm/hvm_info_table.h> 2768#if !defined(HVM_MAX_VCPUS) 2769# error HVM_MAX_VCPUS not defined 2770#endif 2771int main(void) { 2772 xc_interface *xc = NULL; 2773 xenforeignmemory_handle *xfmem; 2774 xenevtchn_handle *xe; 2775 xengnttab_handle *xg; 2776 xengnttab_grant_copy_segment_t* seg = NULL; 2777 2778 xs_daemon_open(); 2779 2780 xc = xc_interface_open(0, 0, 0); 2781 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2782 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2783 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2784 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2785 2786 xfmem = xenforeignmemory_open(0, 0); 2787 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2788 2789 xe = xenevtchn_open(0, 0); 2790 xenevtchn_fd(xe); 2791 2792 xg = xengnttab_open(0, 0); 2793 xengnttab_grant_copy(xg, 0, seg); 2794 2795 return 0; 2796} 2797EOF 2798 compile_prog "" "$xen_libs $xen_stable_libs" 2799 then 2800 xen_ctrl_version=40800 2801 xen=yes 2802 elif 2803 cat > $TMPC <<EOF && 2804/* 2805 * If we have stable libs the we don't want the libxc compat 2806 * layers, regardless of what CFLAGS we may have been given. 2807 */ 2808#undef XC_WANT_COMPAT_EVTCHN_API 2809#undef XC_WANT_COMPAT_GNTTAB_API 2810#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2811#include <xenctrl.h> 2812#include <xenstore.h> 2813#include <xenevtchn.h> 2814#include <xengnttab.h> 2815#include <xenforeignmemory.h> 2816#include <stdint.h> 2817#include <xen/hvm/hvm_info_table.h> 2818#if !defined(HVM_MAX_VCPUS) 2819# error HVM_MAX_VCPUS not defined 2820#endif 2821int main(void) { 2822 xc_interface *xc = NULL; 2823 xenforeignmemory_handle *xfmem; 2824 xenevtchn_handle *xe; 2825 xengnttab_handle *xg; 2826 2827 xs_daemon_open(); 2828 2829 xc = xc_interface_open(0, 0, 0); 2830 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2831 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2832 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2833 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2834 2835 xfmem = xenforeignmemory_open(0, 0); 2836 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2837 2838 xe = xenevtchn_open(0, 0); 2839 xenevtchn_fd(xe); 2840 2841 xg = xengnttab_open(0, 0); 2842 xengnttab_map_grant_ref(xg, 0, 0, 0); 2843 2844 return 0; 2845} 2846EOF 2847 compile_prog "" "$xen_libs $xen_stable_libs" 2848 then 2849 xen_ctrl_version=40701 2850 xen=yes 2851 2852 # Xen 4.6 2853 elif 2854 cat > $TMPC <<EOF && 2855#include <xenctrl.h> 2856#include <xenstore.h> 2857#include <stdint.h> 2858#include <xen/hvm/hvm_info_table.h> 2859#if !defined(HVM_MAX_VCPUS) 2860# error HVM_MAX_VCPUS not defined 2861#endif 2862int main(void) { 2863 xc_interface *xc; 2864 xs_daemon_open(); 2865 xc = xc_interface_open(0, 0, 0); 2866 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2867 xc_gnttab_open(NULL, 0); 2868 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2869 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2870 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2871 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2872 return 0; 2873} 2874EOF 2875 compile_prog "" "$xen_libs" 2876 then 2877 xen_ctrl_version=40600 2878 xen=yes 2879 2880 # Xen 4.5 2881 elif 2882 cat > $TMPC <<EOF && 2883#include <xenctrl.h> 2884#include <xenstore.h> 2885#include <stdint.h> 2886#include <xen/hvm/hvm_info_table.h> 2887#if !defined(HVM_MAX_VCPUS) 2888# error HVM_MAX_VCPUS not defined 2889#endif 2890int main(void) { 2891 xc_interface *xc; 2892 xs_daemon_open(); 2893 xc = xc_interface_open(0, 0, 0); 2894 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2895 xc_gnttab_open(NULL, 0); 2896 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2897 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2898 xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 2899 return 0; 2900} 2901EOF 2902 compile_prog "" "$xen_libs" 2903 then 2904 xen_ctrl_version=40500 2905 xen=yes 2906 2907 elif 2908 cat > $TMPC <<EOF && 2909#include <xenctrl.h> 2910#include <xenstore.h> 2911#include <stdint.h> 2912#include <xen/hvm/hvm_info_table.h> 2913#if !defined(HVM_MAX_VCPUS) 2914# error HVM_MAX_VCPUS not defined 2915#endif 2916int main(void) { 2917 xc_interface *xc; 2918 xs_daemon_open(); 2919 xc = xc_interface_open(0, 0, 0); 2920 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2921 xc_gnttab_open(NULL, 0); 2922 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2923 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2924 return 0; 2925} 2926EOF 2927 compile_prog "" "$xen_libs" 2928 then 2929 xen_ctrl_version=40200 2930 xen=yes 2931 2932 else 2933 if test "$xen" = "yes" ; then 2934 feature_not_found "xen (unsupported version)" \ 2935 "Install a supported xen (xen 4.2 or newer)" 2936 fi 2937 xen=no 2938 fi 2939 2940 if test "$xen" = yes; then 2941 if test $xen_ctrl_version -ge 40701 ; then 2942 libs_softmmu="$xen_stable_libs $libs_softmmu" 2943 fi 2944 libs_softmmu="$xen_libs $libs_softmmu" 2945 fi 2946 fi 2947fi 2948 2949if test "$xen_pci_passthrough" != "no"; then 2950 if test "$xen" = "yes" && test "$linux" = "yes"; then 2951 xen_pci_passthrough=yes 2952 else 2953 if test "$xen_pci_passthrough" = "yes"; then 2954 error_exit "User requested feature Xen PCI Passthrough" \ 2955 " but this feature requires /sys from Linux" 2956 fi 2957 xen_pci_passthrough=no 2958 fi 2959fi 2960 2961########################################## 2962# Windows Hypervisor Platform accelerator (WHPX) check 2963if test "$whpx" != "no" ; then 2964 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then 2965 whpx="yes" 2966 else 2967 if test "$whpx" = "yes"; then 2968 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed" 2969 fi 2970 whpx="no" 2971 fi 2972fi 2973 2974########################################## 2975# Sparse probe 2976if test "$sparse" != "no" ; then 2977 if has cgcc; then 2978 sparse=yes 2979 else 2980 if test "$sparse" = "yes" ; then 2981 feature_not_found "sparse" "Install sparse binary" 2982 fi 2983 sparse=no 2984 fi 2985fi 2986 2987########################################## 2988# X11 probe 2989if $pkg_config --exists "x11"; then 2990 have_x11=yes 2991 x11_cflags=$($pkg_config --cflags x11) 2992 x11_libs=$($pkg_config --libs x11) 2993fi 2994 2995########################################## 2996# GTK probe 2997 2998if test "$gtk" != "no"; then 2999 gtkpackage="gtk+-3.0" 3000 gtkx11package="gtk+-x11-3.0" 3001 gtkversion="3.22.0" 3002 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then 3003 gtk_cflags=$($pkg_config --cflags $gtkpackage) 3004 gtk_libs=$($pkg_config --libs $gtkpackage) 3005 gtk_version=$($pkg_config --modversion $gtkpackage) 3006 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then 3007 need_x11=yes 3008 gtk_cflags="$gtk_cflags $x11_cflags" 3009 gtk_libs="$gtk_libs $x11_libs" 3010 fi 3011 gtk="yes" 3012 elif test "$gtk" = "yes"; then 3013 feature_not_found "gtk" "Install gtk3-devel" 3014 else 3015 gtk="no" 3016 fi 3017fi 3018 3019 3020########################################## 3021# GNUTLS probe 3022 3023if test "$gnutls" != "no"; then 3024 pass="no" 3025 if $pkg_config --exists "gnutls >= 3.1.18"; then 3026 gnutls_cflags=$($pkg_config --cflags gnutls) 3027 gnutls_libs=$($pkg_config --libs gnutls) 3028 # Packaging for the static libraries is not always correct. 3029 # At least ubuntu 18.04 ships only shared libraries. 3030 write_c_skeleton 3031 if compile_prog "" "$gnutls_libs" ; then 3032 LIBS="$gnutls_libs $LIBS" 3033 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags" 3034 pass="yes" 3035 fi 3036 fi 3037 if test "$pass" = "no" && test "$gnutls" = "yes"; then 3038 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18" 3039 else 3040 gnutls="$pass" 3041 fi 3042fi 3043 3044 3045# If user didn't give a --disable/enable-gcrypt flag, 3046# then mark as disabled if user requested nettle 3047# explicitly 3048if test -z "$gcrypt" 3049then 3050 if test "$nettle" = "yes" 3051 then 3052 gcrypt="no" 3053 fi 3054fi 3055 3056# If user didn't give a --disable/enable-nettle flag, 3057# then mark as disabled if user requested gcrypt 3058# explicitly 3059if test -z "$nettle" 3060then 3061 if test "$gcrypt" = "yes" 3062 then 3063 nettle="no" 3064 fi 3065fi 3066 3067has_libgcrypt() { 3068 if ! has "libgcrypt-config" 3069 then 3070 return 1 3071 fi 3072 3073 if test -n "$cross_prefix" 3074 then 3075 host=$(libgcrypt-config --host) 3076 if test "$host-" != $cross_prefix 3077 then 3078 return 1 3079 fi 3080 fi 3081 3082 maj=`libgcrypt-config --version | awk -F . '{print $1}'` 3083 min=`libgcrypt-config --version | awk -F . '{print $2}'` 3084 3085 if test $maj != 1 || test $min -lt 5 3086 then 3087 return 1 3088 fi 3089 3090 return 0 3091} 3092 3093 3094if test "$nettle" != "no"; then 3095 pass="no" 3096 if $pkg_config --exists "nettle >= 2.7.1"; then 3097 nettle_cflags=$($pkg_config --cflags nettle) 3098 nettle_libs=$($pkg_config --libs nettle) 3099 nettle_version=$($pkg_config --modversion nettle) 3100 # Link test to make sure the given libraries work (e.g for static). 3101 write_c_skeleton 3102 if compile_prog "" "$nettle_libs" ; then 3103 LIBS="$nettle_libs $LIBS" 3104 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags" 3105 if test -z "$gcrypt"; then 3106 gcrypt="no" 3107 fi 3108 pass="yes" 3109 fi 3110 fi 3111 if test "$pass" = "yes" 3112 then 3113 cat > $TMPC << EOF 3114#include <nettle/xts.h> 3115int main(void) { 3116 return 0; 3117} 3118EOF 3119 if compile_prog "$nettle_cflags" "$nettle_libs" ; then 3120 nettle_xts=yes 3121 qemu_private_xts=no 3122 fi 3123 fi 3124 if test "$pass" = "no" && test "$nettle" = "yes"; then 3125 feature_not_found "nettle" "Install nettle devel >= 2.7.1" 3126 else 3127 nettle="$pass" 3128 fi 3129fi 3130 3131if test "$gcrypt" != "no"; then 3132 pass="no" 3133 if has_libgcrypt; then 3134 gcrypt_cflags=$(libgcrypt-config --cflags) 3135 gcrypt_libs=$(libgcrypt-config --libs) 3136 # Debian has removed -lgpg-error from libgcrypt-config 3137 # as it "spreads unnecessary dependencies" which in 3138 # turn breaks static builds... 3139 if test "$static" = "yes" 3140 then 3141 gcrypt_libs="$gcrypt_libs -lgpg-error" 3142 fi 3143 3144 # Link test to make sure the given libraries work (e.g for static). 3145 write_c_skeleton 3146 if compile_prog "" "$gcrypt_libs" ; then 3147 LIBS="$gcrypt_libs $LIBS" 3148 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags" 3149 pass="yes" 3150 fi 3151 fi 3152 if test "$pass" = "yes"; then 3153 gcrypt="yes" 3154 cat > $TMPC << EOF 3155#include <gcrypt.h> 3156int main(void) { 3157 gcry_mac_hd_t handle; 3158 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5, 3159 GCRY_MAC_FLAG_SECURE, NULL); 3160 return 0; 3161} 3162EOF 3163 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 3164 gcrypt_hmac=yes 3165 fi 3166 cat > $TMPC << EOF 3167#include <gcrypt.h> 3168int main(void) { 3169 gcry_cipher_hd_t handle; 3170 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0); 3171 return 0; 3172} 3173EOF 3174 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 3175 gcrypt_xts=yes 3176 qemu_private_xts=no 3177 fi 3178 elif test "$gcrypt" = "yes"; then 3179 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0" 3180 else 3181 gcrypt="no" 3182 fi 3183fi 3184 3185 3186if test "$gcrypt" = "yes" && test "$nettle" = "yes" 3187then 3188 error_exit "Only one of gcrypt & nettle can be enabled" 3189fi 3190 3191########################################## 3192# libtasn1 - only for the TLS creds/session test suite 3193 3194tasn1=yes 3195tasn1_cflags="" 3196tasn1_libs="" 3197if $pkg_config --exists "libtasn1"; then 3198 tasn1_cflags=$($pkg_config --cflags libtasn1) 3199 tasn1_libs=$($pkg_config --libs libtasn1) 3200else 3201 tasn1=no 3202fi 3203 3204 3205########################################## 3206# PAM probe 3207 3208if test "$auth_pam" != "no"; then 3209 cat > $TMPC <<EOF 3210#include <security/pam_appl.h> 3211#include <stdio.h> 3212int main(void) { 3213 const char *service_name = "qemu"; 3214 const char *user = "frank"; 3215 const struct pam_conv pam_conv = { 0 }; 3216 pam_handle_t *pamh = NULL; 3217 pam_start(service_name, user, &pam_conv, &pamh); 3218 return 0; 3219} 3220EOF 3221 if compile_prog "" "-lpam" ; then 3222 auth_pam=yes 3223 else 3224 if test "$auth_pam" = "yes"; then 3225 feature_not_found "PAM" "Install PAM development package" 3226 else 3227 auth_pam=no 3228 fi 3229 fi 3230fi 3231 3232########################################## 3233# getifaddrs (for tests/test-io-channel-socket ) 3234 3235have_ifaddrs_h=yes 3236if ! check_include "ifaddrs.h" ; then 3237 have_ifaddrs_h=no 3238fi 3239 3240######################################### 3241# libdrm check 3242have_drm_h=no 3243if check_include "libdrm/drm.h" ; then 3244 have_drm_h=yes 3245fi 3246 3247######################################### 3248# sys/signal.h check 3249have_sys_signal_h=no 3250if check_include "sys/signal.h" ; then 3251 have_sys_signal_h=yes 3252fi 3253 3254########################################## 3255# VTE probe 3256 3257if test "$vte" != "no"; then 3258 vteminversion="0.32.0" 3259 if $pkg_config --exists "vte-2.91"; then 3260 vtepackage="vte-2.91" 3261 else 3262 vtepackage="vte-2.90" 3263 fi 3264 if $pkg_config --exists "$vtepackage >= $vteminversion"; then 3265 vte_cflags=$($pkg_config --cflags $vtepackage) 3266 vte_libs=$($pkg_config --libs $vtepackage) 3267 vteversion=$($pkg_config --modversion $vtepackage) 3268 vte="yes" 3269 elif test "$vte" = "yes"; then 3270 feature_not_found "vte" "Install libvte-2.90/2.91 devel" 3271 else 3272 vte="no" 3273 fi 3274fi 3275 3276########################################## 3277# SDL probe 3278 3279# Look for sdl configuration program (pkg-config or sdl2-config). Try 3280# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config. 3281 3282sdl_probe () 3283{ 3284 if $pkg_config sdl2 --exists; then 3285 sdlconfig="$pkg_config sdl2" 3286 sdlversion=$($sdlconfig --modversion 2>/dev/null) 3287 elif has "$sdl2_config"; then 3288 sdlconfig="$sdl2_config" 3289 sdlversion=$($sdlconfig --version) 3290 else 3291 if test "$sdl" = "yes" ; then 3292 feature_not_found "sdl" "Install SDL2-devel" 3293 fi 3294 sdl=no 3295 # no need to do the rest 3296 return 3297 fi 3298 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then 3299 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2 3300 fi 3301 3302 cat > $TMPC << EOF 3303#include <SDL.h> 3304#undef main /* We don't want SDL to override our main() */ 3305int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } 3306EOF 3307 sdl_cflags=$($sdlconfig --cflags 2>/dev/null) 3308 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug 3309 if test "$static" = "yes" ; then 3310 if $pkg_config sdl2 --exists; then 3311 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null) 3312 else 3313 sdl_libs=$($sdlconfig --static-libs 2>/dev/null) 3314 fi 3315 else 3316 sdl_libs=$($sdlconfig --libs 2>/dev/null) 3317 fi 3318 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 3319 sdl=yes 3320 3321 # static link with sdl ? (note: sdl.pc's --static --libs is broken) 3322 if test "$sdl" = "yes" && test "$static" = "yes" ; then 3323 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then 3324 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)" 3325 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)" 3326 fi 3327 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 3328 : 3329 else 3330 sdl=no 3331 fi 3332 fi # static link 3333 else # sdl not found 3334 if test "$sdl" = "yes" ; then 3335 feature_not_found "sdl" "Install SDL2 devel" 3336 fi 3337 sdl=no 3338 fi # sdl compile test 3339} 3340 3341sdl_image_probe () 3342{ 3343 if test "$sdl_image" != "no" ; then 3344 if $pkg_config SDL2_image --exists; then 3345 if test "$static" = "yes"; then 3346 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null) 3347 else 3348 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null) 3349 fi 3350 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null) 3351 sdl_image=yes 3352 3353 sdl_cflags="$sdl_cflags $sdl_image_cflags" 3354 sdl_libs="$sdl_libs $sdl_image_libs" 3355 else 3356 if test "$sdl_image" = "yes" ; then 3357 feature_not_found "sdl_image" "Install SDL Image devel" 3358 else 3359 sdl_image=no 3360 fi 3361 fi 3362 fi 3363} 3364 3365if test "$sdl" != "no" ; then 3366 sdl_probe 3367fi 3368 3369if test "$sdl" = "yes" ; then 3370 sdl_image_probe 3371else 3372 if test "$sdl_image" = "yes"; then 3373 echo "warning: SDL Image requested, but SDL is not available, disabling" 3374 fi 3375 sdl_image=no 3376fi 3377 3378if test "$sdl" = "yes" ; then 3379 cat > $TMPC <<EOF 3380#include <SDL.h> 3381#if defined(SDL_VIDEO_DRIVER_X11) 3382#include <X11/XKBlib.h> 3383#else 3384#error No x11 support 3385#endif 3386int main(void) { return 0; } 3387EOF 3388 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then 3389 need_x11=yes 3390 sdl_cflags="$sdl_cflags $x11_cflags" 3391 sdl_libs="$sdl_libs $x11_libs" 3392 fi 3393fi 3394 3395########################################## 3396# RDMA needs OpenFabrics libraries 3397if test "$rdma" != "no" ; then 3398 cat > $TMPC <<EOF 3399#include <rdma/rdma_cma.h> 3400int main(void) { return 0; } 3401EOF 3402 rdma_libs="-lrdmacm -libverbs -libumad" 3403 if compile_prog "" "$rdma_libs" ; then 3404 rdma="yes" 3405 libs_softmmu="$libs_softmmu $rdma_libs" 3406 else 3407 if test "$rdma" = "yes" ; then 3408 error_exit \ 3409 " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 3410 " Your options:" \ 3411 " (1) Fast: Install infiniband packages (devel) from your distro." \ 3412 " (2) Cleanest: Install libraries from www.openfabrics.org" \ 3413 " (3) Also: Install softiwarp if you don't have RDMA hardware" 3414 fi 3415 rdma="no" 3416 fi 3417fi 3418 3419########################################## 3420# PVRDMA detection 3421 3422cat > $TMPC <<EOF && 3423#include <sys/mman.h> 3424 3425int 3426main(void) 3427{ 3428 char buf = 0; 3429 void *addr = &buf; 3430 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 3431 3432 return 0; 3433} 3434EOF 3435 3436if test "$rdma" = "yes" ; then 3437 case "$pvrdma" in 3438 "") 3439 if compile_prog "" ""; then 3440 pvrdma="yes" 3441 else 3442 pvrdma="no" 3443 fi 3444 ;; 3445 "yes") 3446 if ! compile_prog "" ""; then 3447 error_exit "PVRDMA is not supported since mremap is not implemented" 3448 fi 3449 pvrdma="yes" 3450 ;; 3451 "no") 3452 pvrdma="no" 3453 ;; 3454 esac 3455else 3456 if test "$pvrdma" = "yes" ; then 3457 error_exit "PVRDMA requires rdma suppport" 3458 fi 3459 pvrdma="no" 3460fi 3461 3462# Let's see if enhanced reg_mr is supported 3463if test "$pvrdma" = "yes" ; then 3464 3465cat > $TMPC <<EOF && 3466#include <infiniband/verbs.h> 3467 3468int 3469main(void) 3470{ 3471 struct ibv_mr *mr; 3472 struct ibv_pd *pd = NULL; 3473 size_t length = 10; 3474 uint64_t iova = 0; 3475 int access = 0; 3476 void *addr = NULL; 3477 3478 mr = ibv_reg_mr_iova(pd, addr, length, iova, access); 3479 3480 ibv_dereg_mr(mr); 3481 3482 return 0; 3483} 3484EOF 3485 if ! compile_prog "" "-libverbs"; then 3486 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR" 3487 fi 3488fi 3489 3490########################################## 3491# VNC SASL detection 3492if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then 3493 cat > $TMPC <<EOF 3494#include <sasl/sasl.h> 3495#include <stdio.h> 3496int main(void) { sasl_server_init(NULL, "qemu"); return 0; } 3497EOF 3498 # Assuming Cyrus-SASL installed in /usr prefix 3499 # QEMU defines struct iovec in "qemu/osdep.h", 3500 # we don't want libsasl to redefine it in <sasl/sasl.h>. 3501 vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED" 3502 vnc_sasl_libs="-lsasl2" 3503 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then 3504 vnc_sasl=yes 3505 libs_softmmu="$vnc_sasl_libs $libs_softmmu" 3506 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags" 3507 else 3508 if test "$vnc_sasl" = "yes" ; then 3509 feature_not_found "vnc-sasl" "Install Cyrus SASL devel" 3510 fi 3511 vnc_sasl=no 3512 fi 3513fi 3514 3515########################################## 3516# VNC JPEG detection 3517if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then 3518cat > $TMPC <<EOF 3519#include <stdio.h> 3520#include <jpeglib.h> 3521int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; } 3522EOF 3523 vnc_jpeg_cflags="" 3524 vnc_jpeg_libs="-ljpeg" 3525 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then 3526 vnc_jpeg=yes 3527 libs_softmmu="$vnc_jpeg_libs $libs_softmmu" 3528 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags" 3529 else 3530 if test "$vnc_jpeg" = "yes" ; then 3531 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel" 3532 fi 3533 vnc_jpeg=no 3534 fi 3535fi 3536 3537########################################## 3538# VNC PNG detection 3539if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then 3540cat > $TMPC <<EOF 3541//#include <stdio.h> 3542#include <png.h> 3543#include <stddef.h> 3544int main(void) { 3545 png_structp png_ptr; 3546 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); 3547 return png_ptr != 0; 3548} 3549EOF 3550 if $pkg_config libpng --exists; then 3551 vnc_png_cflags=$($pkg_config libpng --cflags) 3552 vnc_png_libs=$($pkg_config libpng --libs) 3553 else 3554 vnc_png_cflags="" 3555 vnc_png_libs="-lpng" 3556 fi 3557 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then 3558 vnc_png=yes 3559 libs_softmmu="$vnc_png_libs $libs_softmmu" 3560 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags" 3561 else 3562 if test "$vnc_png" = "yes" ; then 3563 feature_not_found "vnc-png" "Install libpng devel" 3564 fi 3565 vnc_png=no 3566 fi 3567fi 3568 3569########################################## 3570# xkbcommon probe 3571if test "$xkbcommon" != "no" ; then 3572 if $pkg_config xkbcommon --exists; then 3573 xkbcommon_cflags=$($pkg_config xkbcommon --cflags) 3574 xkbcommon_libs=$($pkg_config xkbcommon --libs) 3575 xkbcommon=yes 3576 else 3577 if test "$xkbcommon" = "yes" ; then 3578 feature_not_found "xkbcommon" "Install libxkbcommon-devel" 3579 fi 3580 xkbcommon=no 3581 fi 3582fi 3583 3584 3585########################################## 3586# xfsctl() probe, used for file-posix.c 3587if test "$xfs" != "no" ; then 3588 cat > $TMPC << EOF 3589#include <stddef.h> /* NULL */ 3590#include <xfs/xfs.h> 3591int main(void) 3592{ 3593 xfsctl(NULL, 0, 0, NULL); 3594 return 0; 3595} 3596EOF 3597 if compile_prog "" "" ; then 3598 xfs="yes" 3599 else 3600 if test "$xfs" = "yes" ; then 3601 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel" 3602 fi 3603 xfs=no 3604 fi 3605fi 3606 3607########################################## 3608# vde libraries probe 3609if test "$vde" != "no" ; then 3610 vde_libs="-lvdeplug" 3611 cat > $TMPC << EOF 3612#include <libvdeplug.h> 3613int main(void) 3614{ 3615 struct vde_open_args a = {0, 0, 0}; 3616 char s[] = ""; 3617 vde_open(s, s, &a); 3618 return 0; 3619} 3620EOF 3621 if compile_prog "" "$vde_libs" ; then 3622 vde=yes 3623 else 3624 if test "$vde" = "yes" ; then 3625 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel" 3626 fi 3627 vde=no 3628 fi 3629fi 3630 3631########################################## 3632# netmap support probe 3633# Apart from looking for netmap headers, we make sure that the host API version 3634# supports the netmap backend (>=11). The upper bound (15) is meant to simulate 3635# a minor/major version number. Minor new features will be marked with values up 3636# to 15, and if something happens that requires a change to the backend we will 3637# move above 15, submit the backend fixes and modify this two bounds. 3638if test "$netmap" != "no" ; then 3639 cat > $TMPC << EOF 3640#include <inttypes.h> 3641#include <net/if.h> 3642#include <net/netmap.h> 3643#include <net/netmap_user.h> 3644#if (NETMAP_API < 11) || (NETMAP_API > 15) 3645#error 3646#endif 3647int main(void) { return 0; } 3648EOF 3649 if compile_prog "" "" ; then 3650 netmap=yes 3651 else 3652 if test "$netmap" = "yes" ; then 3653 feature_not_found "netmap" 3654 fi 3655 netmap=no 3656 fi 3657fi 3658 3659############################################ 3660# efi-aarch64 probe 3661# Check for efi files needed by aarch64 VMs. 3662# By default we will use the efi included with QEMU. 3663# Allow user to override the path for efi also. 3664if ! test -f "$efi_aarch64"; then 3665 if test -f $source_path/pc-bios/edk2-aarch64-code.fd.bz2; then 3666 # valid after build 3667 efi_aarch64=$PWD/pc-bios/edk2-aarch64-code.fd 3668 else 3669 efi_aarch64="" 3670 fi 3671fi 3672 3673########################################## 3674# libcap-ng library probe 3675if test "$cap_ng" != "no" ; then 3676 cap_libs="-lcap-ng" 3677 cat > $TMPC << EOF 3678#include <cap-ng.h> 3679int main(void) 3680{ 3681 capng_capability_to_name(CAPNG_EFFECTIVE); 3682 return 0; 3683} 3684EOF 3685 if compile_prog "" "$cap_libs" ; then 3686 cap_ng=yes 3687 libs_tools="$cap_libs $libs_tools" 3688 else 3689 if test "$cap_ng" = "yes" ; then 3690 feature_not_found "cap_ng" "Install libcap-ng devel" 3691 fi 3692 cap_ng=no 3693 fi 3694fi 3695 3696########################################## 3697# Sound support libraries probe 3698 3699audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g') 3700for drv in $audio_drv_list; do 3701 case $drv in 3702 alsa | try-alsa) 3703 if $pkg_config alsa --exists; then 3704 alsa_libs=$($pkg_config alsa --libs) 3705 if test "$drv" = "try-alsa"; then 3706 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/') 3707 fi 3708 else 3709 if test "$drv" = "try-alsa"; then 3710 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//') 3711 else 3712 error_exit "$drv check failed" \ 3713 "Make sure to have the $drv libs and headers installed." 3714 fi 3715 fi 3716 ;; 3717 3718 pa | try-pa) 3719 if $pkg_config libpulse --exists; then 3720 pulse_libs=$($pkg_config libpulse --libs) 3721 if test "$drv" = "try-pa"; then 3722 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/') 3723 fi 3724 else 3725 if test "$drv" = "try-pa"; then 3726 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//') 3727 else 3728 error_exit "$drv check failed" \ 3729 "Make sure to have the $drv libs and headers installed." 3730 fi 3731 fi 3732 ;; 3733 3734 sdl) 3735 if test "$sdl" = "no"; then 3736 error_exit "sdl not found or disabled, can not use sdl audio driver" 3737 fi 3738 ;; 3739 3740 try-sdl) 3741 if test "$sdl" = "no"; then 3742 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//') 3743 else 3744 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/') 3745 fi 3746 ;; 3747 3748 coreaudio) 3749 coreaudio_libs="-framework CoreAudio" 3750 ;; 3751 3752 dsound) 3753 dsound_libs="-lole32 -ldxguid" 3754 audio_win_int="yes" 3755 ;; 3756 3757 oss) 3758 oss_libs="$oss_lib" 3759 ;; 3760 3761 jack | try-jack) 3762 if $pkg_config jack --exists; then 3763 jack_libs=$($pkg_config jack --libs) 3764 if test "$drv" = "try-jack"; then 3765 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/') 3766 fi 3767 else 3768 if test "$drv" = "try-jack"; then 3769 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//') 3770 else 3771 error_exit "$drv check failed" \ 3772 "Make sure to have the $drv libs and headers installed." 3773 fi 3774 fi 3775 ;; 3776 3777 *) 3778 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { 3779 error_exit "Unknown driver '$drv' selected" \ 3780 "Possible drivers are: $audio_possible_drivers" 3781 } 3782 ;; 3783 esac 3784done 3785 3786########################################## 3787# BrlAPI probe 3788 3789if test "$brlapi" != "no" ; then 3790 brlapi_libs="-lbrlapi" 3791 cat > $TMPC << EOF 3792#include <brlapi.h> 3793#include <stddef.h> 3794int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); } 3795EOF 3796 if compile_prog "" "$brlapi_libs" ; then 3797 brlapi=yes 3798 else 3799 if test "$brlapi" = "yes" ; then 3800 feature_not_found "brlapi" "Install brlapi devel" 3801 fi 3802 brlapi=no 3803 fi 3804fi 3805 3806########################################## 3807# iconv probe 3808if test "$iconv" != "no" ; then 3809 cat > $TMPC << EOF 3810#include <iconv.h> 3811int main(void) { 3812 iconv_t conv = iconv_open("WCHAR_T", "UCS-2"); 3813 return conv != (iconv_t) -1; 3814} 3815EOF 3816 iconv_prefix_list="/usr/local:/usr" 3817 iconv_lib_list=":-liconv" 3818 IFS=: 3819 for iconv_prefix in $iconv_prefix_list; do 3820 IFS=: 3821 iconv_cflags="-I$iconv_prefix/include" 3822 iconv_ldflags="-L$iconv_prefix/lib" 3823 for iconv_link in $iconv_lib_list; do 3824 unset IFS 3825 iconv_lib="$iconv_ldflags $iconv_link" 3826 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log 3827 if compile_prog "$iconv_cflags" "$iconv_lib" ; then 3828 iconv_found=yes 3829 break 3830 fi 3831 done 3832 if test "$iconv_found" = yes ; then 3833 break 3834 fi 3835 done 3836 if test "$iconv_found" = "yes" ; then 3837 iconv=yes 3838 else 3839 if test "$iconv" = "yes" ; then 3840 feature_not_found "iconv" "Install iconv devel" 3841 fi 3842 iconv=no 3843 fi 3844fi 3845 3846########################################## 3847# curses probe 3848if test "$iconv" = "no" ; then 3849 # curses will need iconv 3850 curses=no 3851fi 3852if test "$curses" != "no" ; then 3853 if test "$mingw32" = "yes" ; then 3854 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):" 3855 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses" 3856 else 3857 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:" 3858 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw" 3859 fi 3860 curses_found=no 3861 cat > $TMPC << EOF 3862#include <locale.h> 3863#include <curses.h> 3864#include <wchar.h> 3865#include <langinfo.h> 3866int main(void) { 3867 const char *codeset; 3868 wchar_t wch = L'w'; 3869 setlocale(LC_ALL, ""); 3870 resize_term(0, 0); 3871 addwstr(L"wide chars\n"); 3872 addnwstr(&wch, 1); 3873 add_wch(WACS_DEGREE); 3874 codeset = nl_langinfo(CODESET); 3875 return codeset != 0; 3876} 3877EOF 3878 IFS=: 3879 for curses_inc in $curses_inc_list; do 3880 # Make sure we get the wide character prototypes 3881 curses_inc="-DNCURSES_WIDECHAR $curses_inc" 3882 IFS=: 3883 for curses_lib in $curses_lib_list; do 3884 unset IFS 3885 if compile_prog "$curses_inc" "$curses_lib" ; then 3886 curses_found=yes 3887 break 3888 fi 3889 done 3890 if test "$curses_found" = yes ; then 3891 break 3892 fi 3893 done 3894 unset IFS 3895 if test "$curses_found" = "yes" ; then 3896 curses=yes 3897 else 3898 if test "$curses" = "yes" ; then 3899 feature_not_found "curses" "Install ncurses devel" 3900 fi 3901 curses=no 3902 fi 3903fi 3904 3905########################################## 3906# curl probe 3907if test "$curl" != "no" ; then 3908 if $pkg_config libcurl --exists; then 3909 curlconfig="$pkg_config libcurl" 3910 else 3911 curlconfig=curl-config 3912 fi 3913 cat > $TMPC << EOF 3914#include <curl/curl.h> 3915int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; } 3916EOF 3917 curl_cflags=$($curlconfig --cflags 2>/dev/null) 3918 curl_libs=$($curlconfig --libs 2>/dev/null) 3919 if compile_prog "$curl_cflags" "$curl_libs" ; then 3920 curl=yes 3921 else 3922 if test "$curl" = "yes" ; then 3923 feature_not_found "curl" "Install libcurl devel" 3924 fi 3925 curl=no 3926 fi 3927fi # test "$curl" 3928 3929########################################## 3930# glib support probe 3931 3932glib_req_ver=2.48 3933glib_modules=gthread-2.0 3934if test "$modules" = yes; then 3935 glib_modules="$glib_modules gmodule-export-2.0" 3936fi 3937if test "$plugins" = yes; then 3938 glib_modules="$glib_modules gmodule-2.0" 3939fi 3940 3941# This workaround is required due to a bug in pkg-config file for glib as it 3942# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 3943 3944if test "$static" = yes && test "$mingw32" = yes; then 3945 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS" 3946fi 3947 3948for i in $glib_modules; do 3949 if $pkg_config --atleast-version=$glib_req_ver $i; then 3950 glib_cflags=$($pkg_config --cflags $i) 3951 glib_libs=$($pkg_config --libs $i) 3952 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS" 3953 LIBS="$glib_libs $LIBS" 3954 libs_qga="$glib_libs $libs_qga" 3955 else 3956 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 3957 fi 3958done 3959 3960if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then 3961 gio=yes 3962 gio_cflags=$($pkg_config --cflags gio-2.0) 3963 gio_libs=$($pkg_config --libs gio-2.0) 3964 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0) 3965 if [ ! -x "$gdbus_codegen" ]; then 3966 gdbus_codegen= 3967 fi 3968else 3969 gio=no 3970fi 3971 3972if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then 3973 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)" 3974 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)" 3975fi 3976 3977# Sanity check that the current size_t matches the 3978# size that glib thinks it should be. This catches 3979# problems on multi-arch where people try to build 3980# 32-bit QEMU while pointing at 64-bit glib headers 3981cat > $TMPC <<EOF 3982#include <glib.h> 3983#include <unistd.h> 3984 3985#define QEMU_BUILD_BUG_ON(x) \ 3986 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 3987 3988int main(void) { 3989 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 3990 return 0; 3991} 3992EOF 3993 3994if ! compile_prog "$CFLAGS" "$LIBS" ; then 3995 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 3996 "You probably need to set PKG_CONFIG_LIBDIR"\ 3997 "to point to the right pkg-config files for your"\ 3998 "build target" 3999fi 4000 4001# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 4002cat > $TMPC << EOF 4003#include <glib.h> 4004int main(void) { return 0; } 4005EOF 4006if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 4007 if cc_has_warning_flag "-Wno-unknown-attributes"; then 4008 glib_cflags="-Wno-unknown-attributes $glib_cflags" 4009 CFLAGS="-Wno-unknown-attributes $CFLAGS" 4010 fi 4011fi 4012 4013# Silence clang warnings triggered by glib < 2.57.2 4014cat > $TMPC << EOF 4015#include <glib.h> 4016typedef struct Foo { 4017 int i; 4018} Foo; 4019static void foo_free(Foo *f) 4020{ 4021 g_free(f); 4022} 4023G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free); 4024int main(void) { return 0; } 4025EOF 4026if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 4027 if cc_has_warning_flag "-Wno-unused-function"; then 4028 glib_cflags="$glib_cflags -Wno-unused-function" 4029 CFLAGS="$CFLAGS -Wno-unused-function" 4030 fi 4031fi 4032 4033######################################### 4034# zlib check 4035 4036if test "$zlib" != "no" ; then 4037 if $pkg_config --exists zlib; then 4038 zlib_cflags=$($pkg_config --cflags zlib) 4039 zlib_libs=$($pkg_config --libs zlib) 4040 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS" 4041 LIBS="$zlib_libs $LIBS" 4042 else 4043 cat > $TMPC << EOF 4044#include <zlib.h> 4045int main(void) { zlibVersion(); return 0; } 4046EOF 4047 if compile_prog "" "-lz" ; then 4048 LIBS="$LIBS -lz" 4049 else 4050 error_exit "zlib check failed" \ 4051 "Make sure to have the zlib libs and headers installed." 4052 fi 4053 fi 4054fi 4055 4056########################################## 4057# SHA command probe for modules 4058if test "$modules" = yes; then 4059 shacmd_probe="sha1sum sha1 shasum" 4060 for c in $shacmd_probe; do 4061 if has $c; then 4062 shacmd="$c" 4063 break 4064 fi 4065 done 4066 if test "$shacmd" = ""; then 4067 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 4068 fi 4069fi 4070 4071########################################## 4072# pixman support probe 4073 4074if test "$want_tools" = "no" && test "$softmmu" = "no"; then 4075 pixman_cflags= 4076 pixman_libs= 4077elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then 4078 pixman_cflags=$($pkg_config --cflags pixman-1) 4079 pixman_libs=$($pkg_config --libs pixman-1) 4080else 4081 error_exit "pixman >= 0.21.8 not present." \ 4082 "Please install the pixman devel package." 4083fi 4084 4085########################################## 4086# libmpathpersist probe 4087 4088if test "$mpath" != "no" ; then 4089 # probe for the new API 4090 cat > $TMPC <<EOF 4091#include <libudev.h> 4092#include <mpath_persist.h> 4093unsigned mpath_mx_alloc_len = 1024; 4094int logsink; 4095static struct config *multipath_conf; 4096extern struct udev *udev; 4097extern struct config *get_multipath_config(void); 4098extern void put_multipath_config(struct config *conf); 4099struct udev *udev; 4100struct config *get_multipath_config(void) { return multipath_conf; } 4101void put_multipath_config(struct config *conf) { } 4102 4103int main(void) { 4104 udev = udev_new(); 4105 multipath_conf = mpath_lib_init(); 4106 return 0; 4107} 4108EOF 4109 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 4110 mpathpersist=yes 4111 mpathpersist_new_api=yes 4112 else 4113 # probe for the old API 4114 cat > $TMPC <<EOF 4115#include <libudev.h> 4116#include <mpath_persist.h> 4117unsigned mpath_mx_alloc_len = 1024; 4118int logsink; 4119int main(void) { 4120 struct udev *udev = udev_new(); 4121 mpath_lib_init(udev); 4122 return 0; 4123} 4124EOF 4125 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 4126 mpathpersist=yes 4127 mpathpersist_new_api=no 4128 else 4129 mpathpersist=no 4130 fi 4131 fi 4132else 4133 mpathpersist=no 4134fi 4135 4136########################################## 4137# pthread probe 4138PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 4139 4140pthread=no 4141cat > $TMPC << EOF 4142#include <pthread.h> 4143static void *f(void *p) { return NULL; } 4144int main(void) { 4145 pthread_t thread; 4146 pthread_create(&thread, 0, f, 0); 4147 return 0; 4148} 4149EOF 4150if compile_prog "" "" ; then 4151 pthread=yes 4152else 4153 for pthread_lib in $PTHREADLIBS_LIST; do 4154 if compile_prog "" "$pthread_lib" ; then 4155 pthread=yes 4156 found=no 4157 for lib_entry in $LIBS; do 4158 if test "$lib_entry" = "$pthread_lib"; then 4159 found=yes 4160 break 4161 fi 4162 done 4163 if test "$found" = "no"; then 4164 LIBS="$pthread_lib $LIBS" 4165 libs_qga="$pthread_lib $libs_qga" 4166 fi 4167 PTHREAD_LIB="$pthread_lib" 4168 break 4169 fi 4170 done 4171fi 4172 4173if test "$mingw32" != yes && test "$pthread" = no; then 4174 error_exit "pthread check failed" \ 4175 "Make sure to have the pthread libs and headers installed." 4176fi 4177 4178# check for pthread_setname_np with thread id 4179pthread_setname_np_w_tid=no 4180cat > $TMPC << EOF 4181#include <pthread.h> 4182 4183static void *f(void *p) { return NULL; } 4184int main(void) 4185{ 4186 pthread_t thread; 4187 pthread_create(&thread, 0, f, 0); 4188 pthread_setname_np(thread, "QEMU"); 4189 return 0; 4190} 4191EOF 4192if compile_prog "" "$pthread_lib" ; then 4193 pthread_setname_np_w_tid=yes 4194fi 4195 4196# check for pthread_setname_np without thread id 4197pthread_setname_np_wo_tid=no 4198cat > $TMPC << EOF 4199#include <pthread.h> 4200 4201static void *f(void *p) { pthread_setname_np("QEMU"); } 4202int main(void) 4203{ 4204 pthread_t thread; 4205 pthread_create(&thread, 0, f, 0); 4206 return 0; 4207} 4208EOF 4209if compile_prog "" "$pthread_lib" ; then 4210 pthread_setname_np_wo_tid=yes 4211fi 4212 4213########################################## 4214# rbd probe 4215if test "$rbd" != "no" ; then 4216 cat > $TMPC <<EOF 4217#include <stdio.h> 4218#include <rbd/librbd.h> 4219int main(void) { 4220 rados_t cluster; 4221 rados_create(&cluster, NULL); 4222 return 0; 4223} 4224EOF 4225 rbd_libs="-lrbd -lrados" 4226 if compile_prog "" "$rbd_libs" ; then 4227 rbd=yes 4228 else 4229 if test "$rbd" = "yes" ; then 4230 feature_not_found "rados block device" "Install librbd/ceph devel" 4231 fi 4232 rbd=no 4233 fi 4234fi 4235 4236########################################## 4237# libssh probe 4238if test "$libssh" != "no" ; then 4239 if $pkg_config --exists libssh; then 4240 libssh_cflags=$($pkg_config libssh --cflags) 4241 libssh_libs=$($pkg_config libssh --libs) 4242 libssh=yes 4243 else 4244 if test "$libssh" = "yes" ; then 4245 error_exit "libssh required for --enable-libssh" 4246 fi 4247 libssh=no 4248 fi 4249fi 4250 4251########################################## 4252# Check for libssh 0.8 4253# This is done like this instead of using the LIBSSH_VERSION_* and 4254# SSH_VERSION_* macros because some distributions in the past shipped 4255# snapshots of the future 0.8 from Git, and those snapshots did not 4256# have updated version numbers (still referring to 0.7.0). 4257 4258if test "$libssh" = "yes"; then 4259 cat > $TMPC <<EOF 4260#include <libssh/libssh.h> 4261int main(void) { return ssh_get_server_publickey(NULL, NULL); } 4262EOF 4263 if compile_prog "$libssh_cflags" "$libssh_libs"; then 4264 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags" 4265 fi 4266fi 4267 4268########################################## 4269# linux-aio probe 4270 4271if test "$linux_aio" != "no" ; then 4272 cat > $TMPC <<EOF 4273#include <libaio.h> 4274#include <sys/eventfd.h> 4275#include <stddef.h> 4276int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 4277EOF 4278 if compile_prog "" "-laio" ; then 4279 linux_aio=yes 4280 else 4281 if test "$linux_aio" = "yes" ; then 4282 feature_not_found "linux AIO" "Install libaio devel" 4283 fi 4284 linux_aio=no 4285 fi 4286fi 4287########################################## 4288# linux-io-uring probe 4289 4290if test "$linux_io_uring" != "no" ; then 4291 if $pkg_config liburing; then 4292 linux_io_uring_cflags=$($pkg_config --cflags liburing) 4293 linux_io_uring_libs=$($pkg_config --libs liburing) 4294 linux_io_uring=yes 4295 4296 # io_uring is used in libqemuutil.a where per-file -libs variables are not 4297 # seen by programs linking the archive. It's not ideal, but just add the 4298 # library dependency globally. 4299 LIBS="$linux_io_uring_libs $LIBS" 4300 else 4301 if test "$linux_io_uring" = "yes" ; then 4302 feature_not_found "linux io_uring" "Install liburing devel" 4303 fi 4304 linux_io_uring=no 4305 fi 4306fi 4307 4308########################################## 4309# TPM emulation is only on POSIX 4310 4311if test "$tpm" = ""; then 4312 if test "$mingw32" = "yes"; then 4313 tpm=no 4314 else 4315 tpm=yes 4316 fi 4317elif test "$tpm" = "yes"; then 4318 if test "$mingw32" = "yes" ; then 4319 error_exit "TPM emulation only available on POSIX systems" 4320 fi 4321fi 4322 4323########################################## 4324# attr probe 4325 4326if test "$attr" != "no" ; then 4327 cat > $TMPC <<EOF 4328#include <stdio.h> 4329#include <sys/types.h> 4330#ifdef CONFIG_LIBATTR 4331#include <attr/xattr.h> 4332#else 4333#include <sys/xattr.h> 4334#endif 4335int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 4336EOF 4337 if compile_prog "" "" ; then 4338 attr=yes 4339 # Older distros have <attr/xattr.h>, and need -lattr: 4340 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 4341 attr=yes 4342 LIBS="-lattr $LIBS" 4343 libattr=yes 4344 else 4345 if test "$attr" = "yes" ; then 4346 feature_not_found "ATTR" "Install libc6 or libattr devel" 4347 fi 4348 attr=no 4349 fi 4350fi 4351 4352########################################## 4353# iovec probe 4354cat > $TMPC <<EOF 4355#include <sys/types.h> 4356#include <sys/uio.h> 4357#include <unistd.h> 4358int main(void) { return sizeof(struct iovec); } 4359EOF 4360iovec=no 4361if compile_prog "" "" ; then 4362 iovec=yes 4363fi 4364 4365########################################## 4366# preadv probe 4367cat > $TMPC <<EOF 4368#include <sys/types.h> 4369#include <sys/uio.h> 4370#include <unistd.h> 4371int main(void) { return preadv(0, 0, 0, 0); } 4372EOF 4373preadv=no 4374if compile_prog "" "" ; then 4375 preadv=yes 4376fi 4377 4378########################################## 4379# fdt probe 4380# fdt support is mandatory for at least some target architectures, 4381# so insist on it if we're building those system emulators. 4382fdt_required=no 4383for target in $target_list; do 4384 case $target in 4385 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu) 4386 fdt_required=yes 4387 ;; 4388 esac 4389done 4390 4391if test "$fdt_required" = "yes"; then 4392 if test "$fdt" = "no"; then 4393 error_exit "fdt disabled but some requested targets require it." \ 4394 "You can turn off fdt only if you also disable all the system emulation" \ 4395 "targets which need it (by specifying a cut down --target-list)." 4396 fi 4397 fdt=yes 4398elif test "$fdt" != "yes" ; then 4399 fdt=no 4400fi 4401 4402# fdt is only required when building softmmu targets 4403if test -z "$fdt" -a "$softmmu" != "yes" ; then 4404 fdt="no" 4405fi 4406 4407if test "$fdt" != "no" ; then 4408 fdt_libs="-lfdt" 4409 # explicitly check for libfdt_env.h as it is missing in some stable installs 4410 # and test for required functions to make sure we are on a version >= 1.4.2 4411 cat > $TMPC << EOF 4412#include <libfdt.h> 4413#include <libfdt_env.h> 4414int main(void) { fdt_check_full(NULL, 0); return 0; } 4415EOF 4416 if compile_prog "" "$fdt_libs" ; then 4417 # system DTC is good - use it 4418 fdt=system 4419 else 4420 # have GIT checkout, so activate dtc submodule 4421 if test -e "${source_path}/.git" ; then 4422 git_submodules="${git_submodules} dtc" 4423 fi 4424 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then 4425 fdt=git 4426 mkdir -p dtc 4427 if [ "$pwd_is_source_path" != "y" ] ; then 4428 symlink "$source_path/dtc/Makefile" "dtc/Makefile" 4429 fi 4430 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt" 4431 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt" 4432 fdt_libs="$fdt_libs" 4433 elif test "$fdt" = "yes" ; then 4434 # Not a git build & no libfdt found, prompt for system install 4435 error_exit "DTC (libfdt) version >= 1.4.2 not present." \ 4436 "Please install the DTC (libfdt) devel package" 4437 else 4438 # don't have and don't want 4439 fdt_libs= 4440 fdt=no 4441 fi 4442 fi 4443fi 4444 4445libs_softmmu="$libs_softmmu $fdt_libs" 4446 4447########################################## 4448# opengl probe (for sdl2, gtk, milkymist-tmu2) 4449 4450gbm="no" 4451if $pkg_config gbm; then 4452 gbm_cflags="$($pkg_config --cflags gbm)" 4453 gbm_libs="$($pkg_config --libs gbm)" 4454 gbm="yes" 4455fi 4456 4457if test "$opengl" != "no" ; then 4458 opengl_pkgs="epoxy gbm" 4459 if $pkg_config $opengl_pkgs; then 4460 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 4461 opengl_libs="$($pkg_config --libs $opengl_pkgs)" 4462 opengl=yes 4463 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 4464 gtk_gl="yes" 4465 fi 4466 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" 4467 else 4468 if test "$opengl" = "yes" ; then 4469 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 4470 fi 4471 opengl_cflags="" 4472 opengl_libs="" 4473 opengl=no 4474 fi 4475fi 4476 4477if test "$opengl" = "yes"; then 4478 cat > $TMPC << EOF 4479#include <epoxy/egl.h> 4480#ifndef EGL_MESA_image_dma_buf_export 4481# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 4482#endif 4483int main(void) { return 0; } 4484EOF 4485 if compile_prog "" "" ; then 4486 opengl_dmabuf=yes 4487 fi 4488fi 4489 4490if test "$opengl" = "yes" && test "$have_x11" = "yes"; then 4491 for target in $target_list; do 4492 case $target in 4493 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL 4494 need_x11=yes 4495 ;; 4496 esac 4497 done 4498fi 4499 4500########################################## 4501# libxml2 probe 4502if test "$libxml2" != "no" ; then 4503 if $pkg_config --exists libxml-2.0; then 4504 libxml2="yes" 4505 libxml2_cflags=$($pkg_config --cflags libxml-2.0) 4506 libxml2_libs=$($pkg_config --libs libxml-2.0) 4507 else 4508 if test "$libxml2" = "yes"; then 4509 feature_not_found "libxml2" "Install libxml2 devel" 4510 fi 4511 libxml2="no" 4512 fi 4513fi 4514 4515########################################## 4516# glusterfs probe 4517if test "$glusterfs" != "no" ; then 4518 if $pkg_config --atleast-version=3 glusterfs-api; then 4519 glusterfs="yes" 4520 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 4521 glusterfs_libs=$($pkg_config --libs glusterfs-api) 4522 if $pkg_config --atleast-version=4 glusterfs-api; then 4523 glusterfs_xlator_opt="yes" 4524 fi 4525 if $pkg_config --atleast-version=5 glusterfs-api; then 4526 glusterfs_discard="yes" 4527 fi 4528 if $pkg_config --atleast-version=6 glusterfs-api; then 4529 glusterfs_fallocate="yes" 4530 glusterfs_zerofill="yes" 4531 fi 4532 cat > $TMPC << EOF 4533#include <glusterfs/api/glfs.h> 4534 4535int 4536main(void) 4537{ 4538 /* new glfs_ftruncate() passes two additional args */ 4539 return glfs_ftruncate(NULL, 0, NULL, NULL); 4540} 4541EOF 4542 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4543 glusterfs_ftruncate_has_stat="yes" 4544 fi 4545 cat > $TMPC << EOF 4546#include <glusterfs/api/glfs.h> 4547 4548/* new glfs_io_cbk() passes two additional glfs_stat structs */ 4549static void 4550glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data) 4551{} 4552 4553int 4554main(void) 4555{ 4556 glfs_io_cbk iocb = &glusterfs_iocb; 4557 iocb(NULL, 0 , NULL, NULL, NULL); 4558 return 0; 4559} 4560EOF 4561 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4562 glusterfs_iocb_has_stat="yes" 4563 fi 4564 else 4565 if test "$glusterfs" = "yes" ; then 4566 feature_not_found "GlusterFS backend support" \ 4567 "Install glusterfs-api devel >= 3" 4568 fi 4569 glusterfs="no" 4570 fi 4571fi 4572 4573# Check for inotify functions when we are building linux-user 4574# emulator. This is done because older glibc versions don't 4575# have syscall stubs for these implemented. In that case we 4576# don't provide them even if kernel supports them. 4577# 4578inotify=no 4579cat > $TMPC << EOF 4580#include <sys/inotify.h> 4581 4582int 4583main(void) 4584{ 4585 /* try to start inotify */ 4586 return inotify_init(); 4587} 4588EOF 4589if compile_prog "" "" ; then 4590 inotify=yes 4591fi 4592 4593inotify1=no 4594cat > $TMPC << EOF 4595#include <sys/inotify.h> 4596 4597int 4598main(void) 4599{ 4600 /* try to start inotify */ 4601 return inotify_init1(0); 4602} 4603EOF 4604if compile_prog "" "" ; then 4605 inotify1=yes 4606fi 4607 4608# check if pipe2 is there 4609pipe2=no 4610cat > $TMPC << EOF 4611#include <unistd.h> 4612#include <fcntl.h> 4613 4614int main(void) 4615{ 4616 int pipefd[2]; 4617 return pipe2(pipefd, O_CLOEXEC); 4618} 4619EOF 4620if compile_prog "" "" ; then 4621 pipe2=yes 4622fi 4623 4624# check if accept4 is there 4625accept4=no 4626cat > $TMPC << EOF 4627#include <sys/socket.h> 4628#include <stddef.h> 4629 4630int main(void) 4631{ 4632 accept4(0, NULL, NULL, SOCK_CLOEXEC); 4633 return 0; 4634} 4635EOF 4636if compile_prog "" "" ; then 4637 accept4=yes 4638fi 4639 4640# check if tee/splice is there. vmsplice was added same time. 4641splice=no 4642cat > $TMPC << EOF 4643#include <unistd.h> 4644#include <fcntl.h> 4645#include <limits.h> 4646 4647int main(void) 4648{ 4649 int len, fd = 0; 4650 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 4651 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 4652 return 0; 4653} 4654EOF 4655if compile_prog "" "" ; then 4656 splice=yes 4657fi 4658 4659########################################## 4660# libnuma probe 4661 4662if test "$numa" != "no" ; then 4663 cat > $TMPC << EOF 4664#include <numa.h> 4665int main(void) { return numa_available(); } 4666EOF 4667 4668 if compile_prog "" "-lnuma" ; then 4669 numa=yes 4670 libs_softmmu="-lnuma $libs_softmmu" 4671 else 4672 if test "$numa" = "yes" ; then 4673 feature_not_found "numa" "install numactl devel" 4674 fi 4675 numa=no 4676 fi 4677fi 4678 4679if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 4680 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 4681 exit 1 4682fi 4683 4684# Even if malloc_trim() is available, these non-libc memory allocators 4685# do not support it. 4686if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then 4687 if test "$malloc_trim" = "yes" ; then 4688 echo "Disabling malloc_trim with non-libc memory allocator" 4689 fi 4690 malloc_trim="no" 4691fi 4692 4693####################################### 4694# malloc_trim 4695 4696if test "$malloc_trim" != "no" ; then 4697 cat > $TMPC << EOF 4698#include <malloc.h> 4699int main(void) { malloc_trim(0); return 0; } 4700EOF 4701 if compile_prog "" "" ; then 4702 malloc_trim="yes" 4703 else 4704 malloc_trim="no" 4705 fi 4706fi 4707 4708########################################## 4709# tcmalloc probe 4710 4711if test "$tcmalloc" = "yes" ; then 4712 cat > $TMPC << EOF 4713#include <stdlib.h> 4714int main(void) { 4715 void *tmp = malloc(1); 4716 if (tmp != NULL) { 4717 return 0; 4718 } 4719 return 1; 4720} 4721EOF 4722 4723 if compile_prog "" "-ltcmalloc" ; then 4724 LIBS="-ltcmalloc $LIBS" 4725 else 4726 feature_not_found "tcmalloc" "install gperftools devel" 4727 fi 4728fi 4729 4730########################################## 4731# jemalloc probe 4732 4733if test "$jemalloc" = "yes" ; then 4734 cat > $TMPC << EOF 4735#include <stdlib.h> 4736int main(void) { 4737 void *tmp = malloc(1); 4738 if (tmp != NULL) { 4739 return 0; 4740 } 4741 return 1; 4742} 4743EOF 4744 4745 if compile_prog "" "-ljemalloc" ; then 4746 LIBS="-ljemalloc $LIBS" 4747 else 4748 feature_not_found "jemalloc" "install jemalloc devel" 4749 fi 4750fi 4751 4752########################################## 4753# signalfd probe 4754signalfd="no" 4755cat > $TMPC << EOF 4756#include <unistd.h> 4757#include <sys/syscall.h> 4758#include <signal.h> 4759int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4760EOF 4761 4762if compile_prog "" "" ; then 4763 signalfd=yes 4764fi 4765 4766# check if optreset global is declared by <getopt.h> 4767optreset="no" 4768cat > $TMPC << EOF 4769#include <getopt.h> 4770int main(void) { return optreset; } 4771EOF 4772 4773if compile_prog "" "" ; then 4774 optreset=yes 4775fi 4776 4777# check if eventfd is supported 4778eventfd=no 4779cat > $TMPC << EOF 4780#include <sys/eventfd.h> 4781 4782int main(void) 4783{ 4784 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4785} 4786EOF 4787if compile_prog "" "" ; then 4788 eventfd=yes 4789fi 4790 4791# check if memfd is supported 4792memfd=no 4793cat > $TMPC << EOF 4794#include <sys/mman.h> 4795 4796int main(void) 4797{ 4798 return memfd_create("foo", MFD_ALLOW_SEALING); 4799} 4800EOF 4801if compile_prog "" "" ; then 4802 memfd=yes 4803fi 4804 4805# check for usbfs 4806have_usbfs=no 4807if test "$linux_user" = "yes"; then 4808 cat > $TMPC << EOF 4809#include <linux/usbdevice_fs.h> 4810 4811#ifndef USBDEVFS_GET_CAPABILITIES 4812#error "USBDEVFS_GET_CAPABILITIES undefined" 4813#endif 4814 4815#ifndef USBDEVFS_DISCONNECT_CLAIM 4816#error "USBDEVFS_DISCONNECT_CLAIM undefined" 4817#endif 4818 4819int main(void) 4820{ 4821 return 0; 4822} 4823EOF 4824 if compile_prog "" ""; then 4825 have_usbfs=yes 4826 fi 4827fi 4828 4829# check for fallocate 4830fallocate=no 4831cat > $TMPC << EOF 4832#include <fcntl.h> 4833 4834int main(void) 4835{ 4836 fallocate(0, 0, 0, 0); 4837 return 0; 4838} 4839EOF 4840if compile_prog "" "" ; then 4841 fallocate=yes 4842fi 4843 4844# check for fallocate hole punching 4845fallocate_punch_hole=no 4846cat > $TMPC << EOF 4847#include <fcntl.h> 4848#include <linux/falloc.h> 4849 4850int main(void) 4851{ 4852 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4853 return 0; 4854} 4855EOF 4856if compile_prog "" "" ; then 4857 fallocate_punch_hole=yes 4858fi 4859 4860# check that fallocate supports range zeroing inside the file 4861fallocate_zero_range=no 4862cat > $TMPC << EOF 4863#include <fcntl.h> 4864#include <linux/falloc.h> 4865 4866int main(void) 4867{ 4868 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4869 return 0; 4870} 4871EOF 4872if compile_prog "" "" ; then 4873 fallocate_zero_range=yes 4874fi 4875 4876# check for posix_fallocate 4877posix_fallocate=no 4878cat > $TMPC << EOF 4879#include <fcntl.h> 4880 4881int main(void) 4882{ 4883 posix_fallocate(0, 0, 0); 4884 return 0; 4885} 4886EOF 4887if compile_prog "" "" ; then 4888 posix_fallocate=yes 4889fi 4890 4891# check for sync_file_range 4892sync_file_range=no 4893cat > $TMPC << EOF 4894#include <fcntl.h> 4895 4896int main(void) 4897{ 4898 sync_file_range(0, 0, 0, 0); 4899 return 0; 4900} 4901EOF 4902if compile_prog "" "" ; then 4903 sync_file_range=yes 4904fi 4905 4906# check for linux/fiemap.h and FS_IOC_FIEMAP 4907fiemap=no 4908cat > $TMPC << EOF 4909#include <sys/ioctl.h> 4910#include <linux/fs.h> 4911#include <linux/fiemap.h> 4912 4913int main(void) 4914{ 4915 ioctl(0, FS_IOC_FIEMAP, 0); 4916 return 0; 4917} 4918EOF 4919if compile_prog "" "" ; then 4920 fiemap=yes 4921fi 4922 4923# check for dup3 4924dup3=no 4925cat > $TMPC << EOF 4926#include <unistd.h> 4927 4928int main(void) 4929{ 4930 dup3(0, 0, 0); 4931 return 0; 4932} 4933EOF 4934if compile_prog "" "" ; then 4935 dup3=yes 4936fi 4937 4938# check for ppoll support 4939ppoll=no 4940cat > $TMPC << EOF 4941#include <poll.h> 4942 4943int main(void) 4944{ 4945 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 4946 ppoll(&pfd, 1, 0, 0); 4947 return 0; 4948} 4949EOF 4950if compile_prog "" "" ; then 4951 ppoll=yes 4952fi 4953 4954# check for prctl(PR_SET_TIMERSLACK , ... ) support 4955prctl_pr_set_timerslack=no 4956cat > $TMPC << EOF 4957#include <sys/prctl.h> 4958 4959int main(void) 4960{ 4961 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4962 return 0; 4963} 4964EOF 4965if compile_prog "" "" ; then 4966 prctl_pr_set_timerslack=yes 4967fi 4968 4969# check for epoll support 4970epoll=no 4971cat > $TMPC << EOF 4972#include <sys/epoll.h> 4973 4974int main(void) 4975{ 4976 epoll_create(0); 4977 return 0; 4978} 4979EOF 4980if compile_prog "" "" ; then 4981 epoll=yes 4982fi 4983 4984# epoll_create1 is a later addition 4985# so we must check separately for its presence 4986epoll_create1=no 4987cat > $TMPC << EOF 4988#include <sys/epoll.h> 4989 4990int main(void) 4991{ 4992 /* Note that we use epoll_create1 as a value, not as 4993 * a function being called. This is necessary so that on 4994 * old SPARC glibc versions where the function was present in 4995 * the library but not declared in the header file we will 4996 * fail the configure check. (Otherwise we will get a compiler 4997 * warning but not an error, and will proceed to fail the 4998 * qemu compile where we compile with -Werror.) 4999 */ 5000 return (int)(uintptr_t)&epoll_create1; 5001} 5002EOF 5003if compile_prog "" "" ; then 5004 epoll_create1=yes 5005fi 5006 5007# check for sendfile support 5008sendfile=no 5009cat > $TMPC << EOF 5010#include <sys/sendfile.h> 5011 5012int main(void) 5013{ 5014 return sendfile(0, 0, 0, 0); 5015} 5016EOF 5017if compile_prog "" "" ; then 5018 sendfile=yes 5019fi 5020 5021# check for timerfd support (glibc 2.8 and newer) 5022timerfd=no 5023cat > $TMPC << EOF 5024#include <sys/timerfd.h> 5025 5026int main(void) 5027{ 5028 return(timerfd_create(CLOCK_REALTIME, 0)); 5029} 5030EOF 5031if compile_prog "" "" ; then 5032 timerfd=yes 5033fi 5034 5035# check for setns and unshare support 5036setns=no 5037cat > $TMPC << EOF 5038#include <sched.h> 5039 5040int main(void) 5041{ 5042 int ret; 5043 ret = setns(0, 0); 5044 ret = unshare(0); 5045 return ret; 5046} 5047EOF 5048if compile_prog "" "" ; then 5049 setns=yes 5050fi 5051 5052# clock_adjtime probe 5053clock_adjtime=no 5054cat > $TMPC <<EOF 5055#include <time.h> 5056 5057int main(void) 5058{ 5059 return clock_adjtime(0, 0); 5060} 5061EOF 5062clock_adjtime=no 5063if compile_prog "" "" ; then 5064 clock_adjtime=yes 5065fi 5066 5067# syncfs probe 5068syncfs=no 5069cat > $TMPC <<EOF 5070#include <unistd.h> 5071 5072int main(void) 5073{ 5074 return syncfs(0); 5075} 5076EOF 5077syncfs=no 5078if compile_prog "" "" ; then 5079 syncfs=yes 5080fi 5081 5082# check for kcov support (kernel must be 4.4+, compiled with certain options) 5083kcov=no 5084if check_include sys/kcov.h ; then 5085 kcov=yes 5086fi 5087 5088# If we're making warnings fatal, apply this to Sphinx runs as well 5089sphinx_werror="" 5090if test "$werror" = "yes"; then 5091 sphinx_werror="-W" 5092fi 5093 5094# Check we have a new enough version of sphinx-build 5095has_sphinx_build() { 5096 # This is a bit awkward but works: create a trivial document and 5097 # try to run it with our configuration file (which enforces a 5098 # version requirement). This will fail if either 5099 # sphinx-build doesn't exist at all or if it is too old. 5100 mkdir -p "$TMPDIR1/sphinx" 5101 touch "$TMPDIR1/sphinx/index.rst" 5102 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \ 5103 -b html "$TMPDIR1/sphinx" \ 5104 "$TMPDIR1/sphinx/out" >> config.log 2>&1 5105} 5106 5107# Check if tools are available to build documentation. 5108if test "$docs" != "no" ; then 5109 if has_sphinx_build; then 5110 sphinx_ok=yes 5111 else 5112 sphinx_ok=no 5113 fi 5114 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then 5115 docs=yes 5116 else 5117 if test "$docs" = "yes" ; then 5118 if has $sphinx_build && test "$sphinx_ok" != "yes"; then 5119 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2 5120 fi 5121 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx" 5122 fi 5123 docs=no 5124 fi 5125fi 5126 5127# Search for bswap_32 function 5128byteswap_h=no 5129cat > $TMPC << EOF 5130#include <byteswap.h> 5131int main(void) { return bswap_32(0); } 5132EOF 5133if compile_prog "" "" ; then 5134 byteswap_h=yes 5135fi 5136 5137# Search for bswap32 function 5138bswap_h=no 5139cat > $TMPC << EOF 5140#include <sys/endian.h> 5141#include <sys/types.h> 5142#include <machine/bswap.h> 5143int main(void) { return bswap32(0); } 5144EOF 5145if compile_prog "" "" ; then 5146 bswap_h=yes 5147fi 5148 5149########################################## 5150# Do we have libiscsi >= 1.9.0 5151if test "$libiscsi" != "no" ; then 5152 if $pkg_config --atleast-version=1.9.0 libiscsi; then 5153 libiscsi="yes" 5154 libiscsi_cflags=$($pkg_config --cflags libiscsi) 5155 libiscsi_libs=$($pkg_config --libs libiscsi) 5156 else 5157 if test "$libiscsi" = "yes" ; then 5158 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 5159 fi 5160 libiscsi="no" 5161 fi 5162fi 5163 5164########################################## 5165# Do we need libm 5166cat > $TMPC << EOF 5167#include <math.h> 5168int main(int argc, char **argv) { return isnan(sin((double)argc)); } 5169EOF 5170if compile_prog "" "" ; then 5171 : 5172elif compile_prog "" "-lm" ; then 5173 LIBS="-lm $LIBS" 5174 libs_qga="-lm $libs_qga" 5175else 5176 error_exit "libm check failed" 5177fi 5178 5179########################################## 5180# Do we need librt 5181# uClibc provides 2 versions of clock_gettime(), one with realtime 5182# support and one without. This means that the clock_gettime() don't 5183# need -lrt. We still need it for timer_create() so we check for this 5184# function in addition. 5185cat > $TMPC <<EOF 5186#include <signal.h> 5187#include <time.h> 5188int main(void) { 5189 timer_create(CLOCK_REALTIME, NULL, NULL); 5190 return clock_gettime(CLOCK_REALTIME, NULL); 5191} 5192EOF 5193 5194if compile_prog "" "" ; then 5195 : 5196# we need pthread for static linking. use previous pthread test result 5197elif compile_prog "" "$pthread_lib -lrt" ; then 5198 LIBS="$LIBS -lrt" 5199 libs_qga="$libs_qga -lrt" 5200fi 5201 5202# Check whether we need to link libutil for openpty() 5203cat > $TMPC << EOF 5204extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 5205int main(void) { return openpty(0, 0, 0, 0, 0); } 5206EOF 5207 5208have_openpty="no" 5209if compile_prog "" "" ; then 5210 have_openpty="yes" 5211else 5212 if compile_prog "" "-lutil" ; then 5213 libs_softmmu="-lutil $libs_softmmu" 5214 libs_tools="-lutil $libs_tools" 5215 have_openpty="yes" 5216 fi 5217fi 5218 5219########################################## 5220# spice probe 5221if test "$spice" != "no" ; then 5222 cat > $TMPC << EOF 5223#include <spice.h> 5224int main(void) { spice_server_new(); return 0; } 5225EOF 5226 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 5227 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 5228 if $pkg_config --atleast-version=0.12.5 spice-server && \ 5229 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 5230 compile_prog "$spice_cflags" "$spice_libs" ; then 5231 spice="yes" 5232 libs_softmmu="$libs_softmmu $spice_libs" 5233 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 5234 spice_protocol_version=$($pkg_config --modversion spice-protocol) 5235 spice_server_version=$($pkg_config --modversion spice-server) 5236 else 5237 if test "$spice" = "yes" ; then 5238 feature_not_found "spice" \ 5239 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 5240 fi 5241 spice="no" 5242 fi 5243fi 5244 5245# check for smartcard support 5246if test "$smartcard" != "no"; then 5247 if $pkg_config --atleast-version=2.5.1 libcacard; then 5248 libcacard_cflags=$($pkg_config --cflags libcacard) 5249 libcacard_libs=$($pkg_config --libs libcacard) 5250 smartcard="yes" 5251 else 5252 if test "$smartcard" = "yes"; then 5253 feature_not_found "smartcard" "Install libcacard devel" 5254 fi 5255 smartcard="no" 5256 fi 5257fi 5258 5259# check for libusb 5260if test "$libusb" != "no" ; then 5261 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 5262 libusb="yes" 5263 libusb_cflags=$($pkg_config --cflags libusb-1.0) 5264 libusb_libs=$($pkg_config --libs libusb-1.0) 5265 else 5266 if test "$libusb" = "yes"; then 5267 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 5268 fi 5269 libusb="no" 5270 fi 5271fi 5272 5273# check for usbredirparser for usb network redirection support 5274if test "$usb_redir" != "no" ; then 5275 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 5276 usb_redir="yes" 5277 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 5278 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 5279 else 5280 if test "$usb_redir" = "yes"; then 5281 feature_not_found "usb-redir" "Install usbredir devel" 5282 fi 5283 usb_redir="no" 5284 fi 5285fi 5286 5287########################################## 5288# check if we have VSS SDK headers for win 5289 5290if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5291 test "$vss_win32_sdk" != "no" ; then 5292 case "$vss_win32_sdk" in 5293 "") vss_win32_include="-isystem $source_path" ;; 5294 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 5295 # handle path with spaces. So we symlink the headers into ".sdk/vss". 5296 vss_win32_include="-isystem $source_path/.sdk/vss" 5297 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 5298 ;; 5299 *) vss_win32_include="-isystem $vss_win32_sdk" 5300 esac 5301 cat > $TMPC << EOF 5302#define __MIDL_user_allocate_free_DEFINED__ 5303#include <inc/win2003/vss.h> 5304int main(void) { return VSS_CTX_BACKUP; } 5305EOF 5306 if compile_prog "$vss_win32_include" "" ; then 5307 guest_agent_with_vss="yes" 5308 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 5309 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 5310 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 5311 else 5312 if test "$vss_win32_sdk" != "" ; then 5313 echo "ERROR: Please download and install Microsoft VSS SDK:" 5314 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 5315 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 5316 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 5317 echo "ERROR: The headers are extracted in the directory \`inc'." 5318 feature_not_found "VSS support" 5319 fi 5320 guest_agent_with_vss="no" 5321 fi 5322fi 5323 5324########################################## 5325# lookup Windows platform SDK (if not specified) 5326# The SDK is needed only to build .tlb (type library) file of guest agent 5327# VSS provider from the source. It is usually unnecessary because the 5328# pre-compiled .tlb file is included. 5329 5330if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5331 test "$guest_agent_with_vss" = "yes" ; then 5332 if test -z "$win_sdk"; then 5333 programfiles="$PROGRAMFILES" 5334 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 5335 if test -n "$programfiles"; then 5336 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 5337 else 5338 feature_not_found "Windows SDK" 5339 fi 5340 elif test "$win_sdk" = "no"; then 5341 win_sdk="" 5342 fi 5343fi 5344 5345########################################## 5346# check if mingw environment provides a recent ntddscsi.h 5347if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 5348 cat > $TMPC << EOF 5349#include <windows.h> 5350#include <ntddscsi.h> 5351int main(void) { 5352#if !defined(IOCTL_SCSI_GET_ADDRESS) 5353#error Missing required ioctl definitions 5354#endif 5355 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 5356 return addr.Lun; 5357} 5358EOF 5359 if compile_prog "" "" ; then 5360 guest_agent_ntddscsi=yes 5361 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 5362 fi 5363fi 5364 5365########################################## 5366# virgl renderer probe 5367 5368if test "$virglrenderer" != "no" ; then 5369 cat > $TMPC << EOF 5370#include <virglrenderer.h> 5371int main(void) { virgl_renderer_poll(); return 0; } 5372EOF 5373 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 5374 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 5375 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 5376 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 5377 compile_prog "$virgl_cflags" "$virgl_libs" ; then 5378 virglrenderer="yes" 5379 else 5380 if test "$virglrenderer" = "yes" ; then 5381 feature_not_found "virglrenderer" 5382 fi 5383 virglrenderer="no" 5384 fi 5385fi 5386 5387########################################## 5388# capstone 5389 5390case "$capstone" in 5391 "" | yes) 5392 if $pkg_config capstone; then 5393 capstone=system 5394 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5395 capstone=git 5396 elif test -e "${source_path}/capstone/Makefile" ; then 5397 capstone=internal 5398 elif test -z "$capstone" ; then 5399 capstone=no 5400 else 5401 feature_not_found "capstone" "Install capstone devel or git submodule" 5402 fi 5403 ;; 5404 5405 system) 5406 if ! $pkg_config capstone; then 5407 feature_not_found "capstone" "Install capstone devel" 5408 fi 5409 ;; 5410esac 5411 5412case "$capstone" in 5413 git | internal) 5414 if test "$capstone" = git; then 5415 git_submodules="${git_submodules} capstone" 5416 fi 5417 mkdir -p capstone 5418 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include" 5419 if test "$mingw32" = "yes"; then 5420 LIBCAPSTONE=capstone.lib 5421 else 5422 LIBCAPSTONE=libcapstone.a 5423 fi 5424 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu" 5425 ;; 5426 5427 system) 5428 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" 5429 libs_cpu="$($pkg_config --libs capstone) $libs_cpu" 5430 ;; 5431 5432 no) 5433 ;; 5434 *) 5435 error_exit "Unknown state for capstone: $capstone" 5436 ;; 5437esac 5438 5439########################################## 5440# check if we have fdatasync 5441 5442fdatasync=no 5443cat > $TMPC << EOF 5444#include <unistd.h> 5445int main(void) { 5446#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 5447return fdatasync(0); 5448#else 5449#error Not supported 5450#endif 5451} 5452EOF 5453if compile_prog "" "" ; then 5454 fdatasync=yes 5455fi 5456 5457########################################## 5458# check if we have madvise 5459 5460madvise=no 5461cat > $TMPC << EOF 5462#include <sys/types.h> 5463#include <sys/mman.h> 5464#include <stddef.h> 5465int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 5466EOF 5467if compile_prog "" "" ; then 5468 madvise=yes 5469fi 5470 5471########################################## 5472# check if we have posix_madvise 5473 5474posix_madvise=no 5475cat > $TMPC << EOF 5476#include <sys/mman.h> 5477#include <stddef.h> 5478int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 5479EOF 5480if compile_prog "" "" ; then 5481 posix_madvise=yes 5482fi 5483 5484########################################## 5485# check if we have posix_memalign() 5486 5487posix_memalign=no 5488cat > $TMPC << EOF 5489#include <stdlib.h> 5490int main(void) { 5491 void *p; 5492 return posix_memalign(&p, 8, 8); 5493} 5494EOF 5495if compile_prog "" "" ; then 5496 posix_memalign=yes 5497fi 5498 5499########################################## 5500# check if we have posix_syslog 5501 5502posix_syslog=no 5503cat > $TMPC << EOF 5504#include <syslog.h> 5505int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 5506EOF 5507if compile_prog "" "" ; then 5508 posix_syslog=yes 5509fi 5510 5511########################################## 5512# check if we have sem_timedwait 5513 5514sem_timedwait=no 5515cat > $TMPC << EOF 5516#include <semaphore.h> 5517int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 5518EOF 5519if compile_prog "" "" ; then 5520 sem_timedwait=yes 5521fi 5522 5523########################################## 5524# check if we have strchrnul 5525 5526strchrnul=no 5527cat > $TMPC << EOF 5528#include <string.h> 5529int main(void); 5530// Use a haystack that the compiler shouldn't be able to constant fold 5531char *haystack = (char*)&main; 5532int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 5533EOF 5534if compile_prog "" "" ; then 5535 strchrnul=yes 5536fi 5537 5538######################################### 5539# check if we have st_atim 5540 5541st_atim=no 5542cat > $TMPC << EOF 5543#include <sys/stat.h> 5544#include <stddef.h> 5545int main(void) { return offsetof(struct stat, st_atim); } 5546EOF 5547if compile_prog "" "" ; then 5548 st_atim=yes 5549fi 5550 5551########################################## 5552# check if trace backend exists 5553 5554$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 5555if test "$?" -ne 0 ; then 5556 error_exit "invalid trace backends" \ 5557 "Please choose supported trace backends." 5558fi 5559 5560########################################## 5561# For 'ust' backend, test if ust headers are present 5562if have_backend "ust"; then 5563 cat > $TMPC << EOF 5564#include <lttng/tracepoint.h> 5565int main(void) { return 0; } 5566EOF 5567 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 5568 if $pkg_config lttng-ust --exists; then 5569 lttng_ust_libs=$($pkg_config --libs lttng-ust) 5570 else 5571 lttng_ust_libs="-llttng-ust -ldl" 5572 fi 5573 if $pkg_config liburcu-bp --exists; then 5574 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 5575 else 5576 urcu_bp_libs="-lurcu-bp" 5577 fi 5578 5579 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 5580 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 5581 else 5582 error_exit "Trace backend 'ust' missing lttng-ust header files" 5583 fi 5584fi 5585 5586########################################## 5587# For 'dtrace' backend, test if 'dtrace' command is present 5588if have_backend "dtrace"; then 5589 if ! has 'dtrace' ; then 5590 error_exit "dtrace command is not found in PATH $PATH" 5591 fi 5592 trace_backend_stap="no" 5593 if has 'stap' ; then 5594 trace_backend_stap="yes" 5595 fi 5596fi 5597 5598########################################## 5599# check and set a backend for coroutine 5600 5601# We prefer ucontext, but it's not always possible. The fallback 5602# is sigcontext. On Windows the only valid backend is the Windows 5603# specific one. 5604 5605ucontext_works=no 5606if test "$darwin" != "yes"; then 5607 cat > $TMPC << EOF 5608#include <ucontext.h> 5609#ifdef __stub_makecontext 5610#error Ignoring glibc stub makecontext which will always fail 5611#endif 5612int main(void) { makecontext(0, 0, 0); return 0; } 5613EOF 5614 if compile_prog "" "" ; then 5615 ucontext_works=yes 5616 fi 5617fi 5618 5619if test "$coroutine" = ""; then 5620 if test "$mingw32" = "yes"; then 5621 coroutine=win32 5622 elif test "$ucontext_works" = "yes"; then 5623 coroutine=ucontext 5624 else 5625 coroutine=sigaltstack 5626 fi 5627else 5628 case $coroutine in 5629 windows) 5630 if test "$mingw32" != "yes"; then 5631 error_exit "'windows' coroutine backend only valid for Windows" 5632 fi 5633 # Unfortunately the user visible backend name doesn't match the 5634 # coroutine-*.c filename for this case, so we have to adjust it here. 5635 coroutine=win32 5636 ;; 5637 ucontext) 5638 if test "$ucontext_works" != "yes"; then 5639 feature_not_found "ucontext" 5640 fi 5641 ;; 5642 sigaltstack) 5643 if test "$mingw32" = "yes"; then 5644 error_exit "only the 'windows' coroutine backend is valid for Windows" 5645 fi 5646 ;; 5647 *) 5648 error_exit "unknown coroutine backend $coroutine" 5649 ;; 5650 esac 5651fi 5652 5653if test "$coroutine_pool" = ""; then 5654 coroutine_pool=yes 5655fi 5656 5657if test "$debug_stack_usage" = "yes"; then 5658 if test "$coroutine_pool" = "yes"; then 5659 echo "WARN: disabling coroutine pool for stack usage debugging" 5660 coroutine_pool=no 5661 fi 5662fi 5663 5664################################################## 5665# SafeStack 5666 5667 5668if test "$safe_stack" = "yes"; then 5669cat > $TMPC << EOF 5670int main(int argc, char *argv[]) 5671{ 5672#if ! __has_feature(safe_stack) 5673#error SafeStack Disabled 5674#endif 5675 return 0; 5676} 5677EOF 5678 flag="-fsanitize=safe-stack" 5679 # Check that safe-stack is supported and enabled. 5680 if compile_prog "-Werror $flag" "$flag"; then 5681 # Flag needed both at compilation and at linking 5682 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 5683 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 5684 else 5685 error_exit "SafeStack not supported by your compiler" 5686 fi 5687 if test "$coroutine" != "ucontext"; then 5688 error_exit "SafeStack is only supported by the coroutine backend ucontext" 5689 fi 5690else 5691cat > $TMPC << EOF 5692int main(int argc, char *argv[]) 5693{ 5694#if defined(__has_feature) 5695#if __has_feature(safe_stack) 5696#error SafeStack Enabled 5697#endif 5698#endif 5699 return 0; 5700} 5701EOF 5702if test "$safe_stack" = "no"; then 5703 # Make sure that safe-stack is disabled 5704 if ! compile_prog "-Werror" ""; then 5705 # SafeStack was already enabled, try to explicitly remove the feature 5706 flag="-fno-sanitize=safe-stack" 5707 if ! compile_prog "-Werror $flag" "$flag"; then 5708 error_exit "Configure cannot disable SafeStack" 5709 fi 5710 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 5711 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 5712 fi 5713else # "$safe_stack" = "" 5714 # Set safe_stack to yes or no based on pre-existing flags 5715 if compile_prog "-Werror" ""; then 5716 safe_stack="no" 5717 else 5718 safe_stack="yes" 5719 if test "$coroutine" != "ucontext"; then 5720 error_exit "SafeStack is only supported by the coroutine backend ucontext" 5721 fi 5722 fi 5723fi 5724fi 5725 5726########################################## 5727# check if we have open_by_handle_at 5728 5729open_by_handle_at=no 5730cat > $TMPC << EOF 5731#include <fcntl.h> 5732#if !defined(AT_EMPTY_PATH) 5733# error missing definition 5734#else 5735int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 5736#endif 5737EOF 5738if compile_prog "" "" ; then 5739 open_by_handle_at=yes 5740fi 5741 5742######################################## 5743# check if we have linux/magic.h 5744 5745linux_magic_h=no 5746cat > $TMPC << EOF 5747#include <linux/magic.h> 5748int main(void) { 5749 return 0; 5750} 5751EOF 5752if compile_prog "" "" ; then 5753 linux_magic_h=yes 5754fi 5755 5756######################################## 5757# check if we have valgrind/valgrind.h 5758 5759valgrind_h=no 5760cat > $TMPC << EOF 5761#include <valgrind/valgrind.h> 5762int main(void) { 5763 return 0; 5764} 5765EOF 5766if compile_prog "" "" ; then 5767 valgrind_h=yes 5768fi 5769 5770######################################## 5771# check if environ is declared 5772 5773has_environ=no 5774cat > $TMPC << EOF 5775#include <unistd.h> 5776int main(void) { 5777 environ = 0; 5778 return 0; 5779} 5780EOF 5781if compile_prog "" "" ; then 5782 has_environ=yes 5783fi 5784 5785######################################## 5786# check if cpuid.h is usable. 5787 5788cat > $TMPC << EOF 5789#include <cpuid.h> 5790int main(void) { 5791 unsigned a, b, c, d; 5792 int max = __get_cpuid_max(0, 0); 5793 5794 if (max >= 1) { 5795 __cpuid(1, a, b, c, d); 5796 } 5797 5798 if (max >= 7) { 5799 __cpuid_count(7, 0, a, b, c, d); 5800 } 5801 5802 return 0; 5803} 5804EOF 5805if compile_prog "" "" ; then 5806 cpuid_h=yes 5807fi 5808 5809########################################## 5810# avx2 optimization requirement check 5811# 5812# There is no point enabling this if cpuid.h is not usable, 5813# since we won't be able to select the new routines. 5814 5815if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 5816 cat > $TMPC << EOF 5817#pragma GCC push_options 5818#pragma GCC target("avx2") 5819#include <cpuid.h> 5820#include <immintrin.h> 5821static int bar(void *a) { 5822 __m256i x = *(__m256i *)a; 5823 return _mm256_testz_si256(x, x); 5824} 5825int main(int argc, char *argv[]) { return bar(argv[0]); } 5826EOF 5827 if compile_object "" ; then 5828 avx2_opt="yes" 5829 else 5830 avx2_opt="no" 5831 fi 5832fi 5833 5834########################################## 5835# avx512f optimization requirement check 5836# 5837# There is no point enabling this if cpuid.h is not usable, 5838# since we won't be able to select the new routines. 5839# by default, it is turned off. 5840# if user explicitly want to enable it, check environment 5841 5842if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 5843 cat > $TMPC << EOF 5844#pragma GCC push_options 5845#pragma GCC target("avx512f") 5846#include <cpuid.h> 5847#include <immintrin.h> 5848static int bar(void *a) { 5849 __m512i x = *(__m512i *)a; 5850 return _mm512_test_epi64_mask(x, x); 5851} 5852int main(int argc, char *argv[]) 5853{ 5854 return bar(argv[0]); 5855} 5856EOF 5857 if ! compile_object "" ; then 5858 avx512f_opt="no" 5859 fi 5860else 5861 avx512f_opt="no" 5862fi 5863 5864######################################## 5865# check if __[u]int128_t is usable. 5866 5867int128=no 5868cat > $TMPC << EOF 5869__int128_t a; 5870__uint128_t b; 5871int main (void) { 5872 a = a + b; 5873 b = a * b; 5874 a = a * a; 5875 return 0; 5876} 5877EOF 5878if compile_prog "" "" ; then 5879 int128=yes 5880fi 5881 5882######################################### 5883# See if 128-bit atomic operations are supported. 5884 5885atomic128=no 5886if test "$int128" = "yes"; then 5887 cat > $TMPC << EOF 5888int main(void) 5889{ 5890 unsigned __int128 x = 0, y = 0; 5891 y = __atomic_load_16(&x, 0); 5892 __atomic_store_16(&x, y, 0); 5893 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5894 return 0; 5895} 5896EOF 5897 if compile_prog "" "" ; then 5898 atomic128=yes 5899 fi 5900fi 5901 5902cmpxchg128=no 5903if test "$int128" = yes && test "$atomic128" = no; then 5904 cat > $TMPC << EOF 5905int main(void) 5906{ 5907 unsigned __int128 x = 0, y = 0; 5908 __sync_val_compare_and_swap_16(&x, y, x); 5909 return 0; 5910} 5911EOF 5912 if compile_prog "" "" ; then 5913 cmpxchg128=yes 5914 fi 5915fi 5916 5917######################################### 5918# See if 64-bit atomic operations are supported. 5919# Note that without __atomic builtins, we can only 5920# assume atomic loads/stores max at pointer size. 5921 5922cat > $TMPC << EOF 5923#include <stdint.h> 5924int main(void) 5925{ 5926 uint64_t x = 0, y = 0; 5927#ifdef __ATOMIC_RELAXED 5928 y = __atomic_load_8(&x, 0); 5929 __atomic_store_8(&x, y, 0); 5930 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 5931 __atomic_exchange_8(&x, y, 0); 5932 __atomic_fetch_add_8(&x, y, 0); 5933#else 5934 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5935 __sync_lock_test_and_set(&x, y); 5936 __sync_val_compare_and_swap(&x, y, 0); 5937 __sync_fetch_and_add(&x, y); 5938#endif 5939 return 0; 5940} 5941EOF 5942if compile_prog "" "" ; then 5943 atomic64=yes 5944fi 5945 5946######################################### 5947# See if --dynamic-list is supported by the linker 5948ld_dynamic_list="no" 5949if test "$static" = "no" ; then 5950 cat > $TMPTXT <<EOF 5951{ 5952 foo; 5953}; 5954EOF 5955 5956 cat > $TMPC <<EOF 5957#include <stdio.h> 5958void foo(void); 5959 5960void foo(void) 5961{ 5962 printf("foo\n"); 5963} 5964 5965int main(void) 5966{ 5967 foo(); 5968 return 0; 5969} 5970EOF 5971 5972 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 5973 ld_dynamic_list="yes" 5974 fi 5975fi 5976 5977######################################### 5978# See if -exported_symbols_list is supported by the linker 5979 5980ld_exported_symbols_list="no" 5981if test "$static" = "no" ; then 5982 cat > $TMPTXT <<EOF 5983 _foo 5984EOF 5985 5986 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 5987 ld_exported_symbols_list="yes" 5988 fi 5989fi 5990 5991if test "$plugins" = "yes" && 5992 test "$ld_dynamic_list" = "no" && 5993 test "$ld_exported_symbols_list" = "no" ; then 5994 error_exit \ 5995 "Plugin support requires dynamic linking and specifying a set of symbols " \ 5996 "that are exported to plugins. Unfortunately your linker doesn't " \ 5997 "support the flag (--dynamic-list or -exported_symbols_list) used " \ 5998 "for this purpose. You can't build with --static." 5999fi 6000 6001######################################## 6002# See if __attribute__((alias)) is supported. 6003# This false for Xcode 9, but has been remedied for Xcode 10. 6004# Unfortunately, travis uses Xcode 9 by default. 6005 6006attralias=no 6007cat > $TMPC << EOF 6008int x = 1; 6009extern const int y __attribute__((alias("x"))); 6010int main(void) { return 0; } 6011EOF 6012if compile_prog "" "" ; then 6013 attralias=yes 6014fi 6015 6016######################################## 6017# check if getauxval is available. 6018 6019getauxval=no 6020cat > $TMPC << EOF 6021#include <sys/auxv.h> 6022int main(void) { 6023 return getauxval(AT_HWCAP) == 0; 6024} 6025EOF 6026if compile_prog "" "" ; then 6027 getauxval=yes 6028fi 6029 6030######################################## 6031# check if ccache is interfering with 6032# semantic analysis of macros 6033 6034unset CCACHE_CPP2 6035ccache_cpp2=no 6036cat > $TMPC << EOF 6037static const int Z = 1; 6038#define fn() ({ Z; }) 6039#define TAUT(X) ((X) == Z) 6040#define PAREN(X, Y) (X == Y) 6041#define ID(X) (X) 6042int main(int argc, char *argv[]) 6043{ 6044 int x = 0, y = 0; 6045 x = ID(x); 6046 x = fn(); 6047 fn(); 6048 if (PAREN(x, y)) return 0; 6049 if (TAUT(Z)) return 0; 6050 return 0; 6051} 6052EOF 6053 6054if ! compile_object "-Werror"; then 6055 ccache_cpp2=yes 6056fi 6057 6058################################################# 6059# clang does not support glibc + FORTIFY_SOURCE. 6060 6061if test "$fortify_source" != "no"; then 6062 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 6063 fortify_source="no"; 6064 elif test -n "$cxx" && has $cxx && 6065 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 6066 fortify_source="no"; 6067 else 6068 fortify_source="yes" 6069 fi 6070fi 6071 6072############################################### 6073# Check if copy_file_range is provided by glibc 6074have_copy_file_range=no 6075cat > $TMPC << EOF 6076#include <unistd.h> 6077int main(void) { 6078 copy_file_range(0, NULL, 0, NULL, 0, 0); 6079 return 0; 6080} 6081EOF 6082if compile_prog "" "" ; then 6083 have_copy_file_range=yes 6084fi 6085 6086########################################## 6087# check if struct fsxattr is available via linux/fs.h 6088 6089have_fsxattr=no 6090cat > $TMPC << EOF 6091#include <linux/fs.h> 6092struct fsxattr foo; 6093int main(void) { 6094 return 0; 6095} 6096EOF 6097if compile_prog "" "" ; then 6098 have_fsxattr=yes 6099fi 6100 6101########################################## 6102# check for usable membarrier system call 6103if test "$membarrier" = "yes"; then 6104 have_membarrier=no 6105 if test "$mingw32" = "yes" ; then 6106 have_membarrier=yes 6107 elif test "$linux" = "yes" ; then 6108 cat > $TMPC << EOF 6109 #include <linux/membarrier.h> 6110 #include <sys/syscall.h> 6111 #include <unistd.h> 6112 #include <stdlib.h> 6113 int main(void) { 6114 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 6115 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 6116 exit(0); 6117 } 6118EOF 6119 if compile_prog "" "" ; then 6120 have_membarrier=yes 6121 fi 6122 fi 6123 if test "$have_membarrier" = "no"; then 6124 feature_not_found "membarrier" "membarrier system call not available" 6125 fi 6126else 6127 # Do not enable it by default even for Mingw32, because it doesn't 6128 # work on Wine. 6129 membarrier=no 6130fi 6131 6132########################################## 6133# check if rtnetlink.h exists and is useful 6134have_rtnetlink=no 6135cat > $TMPC << EOF 6136#include <linux/rtnetlink.h> 6137int main(void) { 6138 return IFLA_PROTO_DOWN; 6139} 6140EOF 6141if compile_prog "" "" ; then 6142 have_rtnetlink=yes 6143fi 6144 6145########################################## 6146# check for usable AF_VSOCK environment 6147have_af_vsock=no 6148cat > $TMPC << EOF 6149#include <errno.h> 6150#include <sys/types.h> 6151#include <sys/socket.h> 6152#if !defined(AF_VSOCK) 6153# error missing AF_VSOCK flag 6154#endif 6155#include <linux/vm_sockets.h> 6156int main(void) { 6157 int sock, ret; 6158 struct sockaddr_vm svm; 6159 socklen_t len = sizeof(svm); 6160 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 6161 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 6162 if ((ret == -1) && (errno == ENOTCONN)) { 6163 return 0; 6164 } 6165 return -1; 6166} 6167EOF 6168if compile_prog "" "" ; then 6169 have_af_vsock=yes 6170fi 6171 6172########################################## 6173# check for usable AF_ALG environment 6174have_afalg=no 6175cat > $TMPC << EOF 6176#include <errno.h> 6177#include <sys/types.h> 6178#include <sys/socket.h> 6179#include <linux/if_alg.h> 6180int main(void) { 6181 int sock; 6182 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 6183 return sock; 6184} 6185EOF 6186if compile_prog "" "" ; then 6187 have_afalg=yes 6188fi 6189if test "$crypto_afalg" = "yes" 6190then 6191 if test "$have_afalg" != "yes" 6192 then 6193 error_exit "AF_ALG requested but could not be detected" 6194 fi 6195fi 6196 6197 6198################################################# 6199# Check to see if we have the Hypervisor framework 6200if [ "$darwin" = "yes" ] ; then 6201 cat > $TMPC << EOF 6202#include <Hypervisor/hv.h> 6203int main() { return 0;} 6204EOF 6205 if ! compile_object ""; then 6206 hvf='no' 6207 else 6208 hvf='yes' 6209 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS" 6210 fi 6211fi 6212 6213################################################# 6214# Sparc implicitly links with --relax, which is 6215# incompatible with -r, so --no-relax should be 6216# given. It does no harm to give it on other 6217# platforms too. 6218 6219# Note: the prototype is needed since QEMU_CFLAGS 6220# contains -Wmissing-prototypes 6221cat > $TMPC << EOF 6222extern int foo(void); 6223int foo(void) { return 0; } 6224EOF 6225if ! compile_object ""; then 6226 error_exit "Failed to compile object file for LD_REL_FLAGS test" 6227fi 6228for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 6229 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 6230 LD_REL_FLAGS=$i 6231 break 6232 fi 6233done 6234if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 6235 feature_not_found "modules" "Cannot find how to build relocatable objects" 6236fi 6237 6238########################################## 6239# check for sysmacros.h 6240 6241have_sysmacros=no 6242cat > $TMPC << EOF 6243#include <sys/sysmacros.h> 6244int main(void) { 6245 return makedev(0, 0); 6246} 6247EOF 6248if compile_prog "" "" ; then 6249 have_sysmacros=yes 6250fi 6251 6252########################################## 6253# Veritas HyperScale block driver VxHS 6254# Check if libvxhs is installed 6255 6256if test "$vxhs" != "no" ; then 6257 cat > $TMPC <<EOF 6258#include <stdint.h> 6259#include <qnio/qnio_api.h> 6260 6261void *vxhs_callback; 6262 6263int main(void) { 6264 iio_init(QNIO_VERSION, vxhs_callback); 6265 return 0; 6266} 6267EOF 6268 vxhs_libs="-lvxhs -lssl" 6269 if compile_prog "" "$vxhs_libs" ; then 6270 vxhs=yes 6271 else 6272 if test "$vxhs" = "yes" ; then 6273 feature_not_found "vxhs block device" "Install libvxhs See github" 6274 fi 6275 vxhs=no 6276 fi 6277fi 6278 6279########################################## 6280# check for _Static_assert() 6281 6282have_static_assert=no 6283cat > $TMPC << EOF 6284_Static_assert(1, "success"); 6285int main(void) { 6286 return 0; 6287} 6288EOF 6289if compile_prog "" "" ; then 6290 have_static_assert=yes 6291fi 6292 6293########################################## 6294# check for utmpx.h, it is missing e.g. on OpenBSD 6295 6296have_utmpx=no 6297cat > $TMPC << EOF 6298#include <utmpx.h> 6299struct utmpx user_info; 6300int main(void) { 6301 return 0; 6302} 6303EOF 6304if compile_prog "" "" ; then 6305 have_utmpx=yes 6306fi 6307 6308########################################## 6309# check for getrandom() 6310 6311have_getrandom=no 6312cat > $TMPC << EOF 6313#include <sys/random.h> 6314int main(void) { 6315 return getrandom(0, 0, GRND_NONBLOCK); 6316} 6317EOF 6318if compile_prog "" "" ; then 6319 have_getrandom=yes 6320fi 6321 6322########################################## 6323# checks for sanitizers 6324 6325have_asan=no 6326have_ubsan=no 6327have_asan_iface_h=no 6328have_asan_iface_fiber=no 6329 6330if test "$sanitizers" = "yes" ; then 6331 write_c_skeleton 6332 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 6333 have_asan=yes 6334 fi 6335 6336 # we could use a simple skeleton for flags checks, but this also 6337 # detect the static linking issue of ubsan, see also: 6338 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 6339 cat > $TMPC << EOF 6340#include <stdlib.h> 6341int main(void) { 6342 void *tmp = malloc(10); 6343 if (tmp != NULL) { 6344 return *(int *)(tmp + 2); 6345 } 6346 return 1; 6347} 6348EOF 6349 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 6350 have_ubsan=yes 6351 fi 6352 6353 if check_include "sanitizer/asan_interface.h" ; then 6354 have_asan_iface_h=yes 6355 fi 6356 6357 cat > $TMPC << EOF 6358#include <sanitizer/asan_interface.h> 6359int main(void) { 6360 __sanitizer_start_switch_fiber(0, 0, 0); 6361 return 0; 6362} 6363EOF 6364 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 6365 have_asan_iface_fiber=yes 6366 fi 6367fi 6368 6369########################################## 6370# checks for fuzzer 6371if test "$fuzzing" = "yes" ; then 6372 write_c_fuzzer_skeleton 6373 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then 6374 have_fuzzer=yes 6375 fi 6376fi 6377 6378# Thread sanitizer is, for now, much noisier than the other sanitizers; 6379# keep it separate until that is not the case. 6380if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 6381 error_exit "TSAN is not supported with other sanitiziers." 6382fi 6383have_tsan=no 6384have_tsan_iface_fiber=no 6385if test "$tsan" = "yes" ; then 6386 write_c_skeleton 6387 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 6388 have_tsan=yes 6389 fi 6390 cat > $TMPC << EOF 6391#include <sanitizer/tsan_interface.h> 6392int main(void) { 6393 __tsan_create_fiber(0); 6394 return 0; 6395} 6396EOF 6397 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 6398 have_tsan_iface_fiber=yes 6399 fi 6400fi 6401 6402########################################## 6403# check for libpmem 6404 6405if test "$libpmem" != "no"; then 6406 if $pkg_config --exists "libpmem"; then 6407 libpmem="yes" 6408 libpmem_libs=$($pkg_config --libs libpmem) 6409 libpmem_cflags=$($pkg_config --cflags libpmem) 6410 libs_softmmu="$libs_softmmu $libpmem_libs" 6411 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" 6412 else 6413 if test "$libpmem" = "yes" ; then 6414 feature_not_found "libpmem" "Install nvml or pmdk" 6415 fi 6416 libpmem="no" 6417 fi 6418fi 6419 6420########################################## 6421# check for libdaxctl 6422 6423if test "$libdaxctl" != "no"; then 6424 if $pkg_config --atleast-version=57 "libdaxctl"; then 6425 libdaxctl="yes" 6426 libdaxctl_libs=$($pkg_config --libs libdaxctl) 6427 libdaxctl_cflags=$($pkg_config --cflags libdaxctl) 6428 libs_softmmu="$libs_softmmu $libdaxctl_libs" 6429 QEMU_CFLAGS="$QEMU_CFLAGS $libdaxctl_cflags" 6430 else 6431 if test "$libdaxctl" = "yes" ; then 6432 feature_not_found "libdaxctl" "Install libdaxctl" 6433 fi 6434 libdaxctl="no" 6435 fi 6436fi 6437 6438########################################## 6439# check for slirp 6440 6441# slirp is only required when building softmmu targets 6442if test -z "$slirp" -a "$softmmu" != "yes" ; then 6443 slirp="no" 6444fi 6445 6446case "$slirp" in 6447 "" | yes) 6448 if $pkg_config slirp; then 6449 slirp=system 6450 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 6451 slirp=git 6452 elif test -e "${source_path}/slirp/Makefile" ; then 6453 slirp=internal 6454 elif test -z "$slirp" ; then 6455 slirp=no 6456 else 6457 feature_not_found "slirp" "Install slirp devel or git submodule" 6458 fi 6459 ;; 6460 6461 system) 6462 if ! $pkg_config slirp; then 6463 feature_not_found "slirp" "Install slirp devel" 6464 fi 6465 ;; 6466esac 6467 6468case "$slirp" in 6469 git | internal) 6470 if test "$slirp" = git; then 6471 git_submodules="${git_submodules} slirp" 6472 fi 6473 mkdir -p slirp 6474 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src" 6475 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp" 6476 if test "$mingw32" = "yes" ; then 6477 slirp_libs="$slirp_libs -lws2_32 -liphlpapi" 6478 fi 6479 ;; 6480 6481 system) 6482 slirp_version=$($pkg_config --modversion slirp 2>/dev/null) 6483 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null) 6484 slirp_libs=$($pkg_config --libs slirp 2>/dev/null) 6485 ;; 6486 6487 no) 6488 ;; 6489 *) 6490 error_exit "Unknown state for slirp: $slirp" 6491 ;; 6492esac 6493 6494########################################## 6495# check for usable __NR_keyctl syscall 6496 6497if test "$linux" = "yes" ; then 6498 6499 have_keyring=no 6500 cat > $TMPC << EOF 6501#include <errno.h> 6502#include <asm/unistd.h> 6503#include <linux/keyctl.h> 6504#include <unistd.h> 6505int main(void) { 6506 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 6507} 6508EOF 6509 if compile_prog "" "" ; then 6510 have_keyring=yes 6511 fi 6512fi 6513if test "$secret_keyring" != "no" 6514then 6515 if test "$have_keyring" = "yes" 6516 then 6517 secret_keyring=yes 6518 else 6519 if test "$secret_keyring" = "yes" 6520 then 6521 error_exit "syscall __NR_keyctl requested, \ 6522but not implemented on your system" 6523 else 6524 secret_keyring=no 6525 fi 6526 fi 6527fi 6528 6529########################################## 6530# check for usable keyutils.h 6531 6532if test "$linux" = "yes" ; then 6533 6534 have_keyutils=no 6535 cat > $TMPC << EOF 6536#include <errno.h> 6537#include <asm/unistd.h> 6538#include <unistd.h> 6539#include <sys/types.h> 6540#include <keyutils.h> 6541int main(void) { 6542 return request_key("user", NULL, NULL, 0); 6543} 6544EOF 6545 if compile_prog "" "-lkeyutils"; then 6546 have_keyutils=yes 6547 fi 6548fi 6549 6550 6551########################################## 6552# End of CC checks 6553# After here, no more $cc or $ld runs 6554 6555write_c_skeleton 6556 6557if test "$gcov" = "yes" ; then 6558 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS" 6559 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS" 6560elif test "$fortify_source" = "yes" ; then 6561 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 6562elif test "$debug" = "no"; then 6563 CFLAGS="-O2 $CFLAGS" 6564fi 6565 6566if test "$have_asan" = "yes"; then 6567 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 6568 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 6569 if test "$have_asan_iface_h" = "no" ; then 6570 echo "ASAN build enabled, but ASAN header missing." \ 6571 "Without code annotation, the report may be inferior." 6572 elif test "$have_asan_iface_fiber" = "no" ; then 6573 echo "ASAN build enabled, but ASAN header is too old." \ 6574 "Without code annotation, the report may be inferior." 6575 fi 6576fi 6577if test "$have_tsan" = "yes" ; then 6578 if test "$have_tsan_iface_fiber" = "yes" ; then 6579 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 6580 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 6581 else 6582 error_exit "Cannot enable TSAN due to missing fiber annotation interface." 6583 fi 6584elif test "$tsan" = "yes" ; then 6585 error_exit "Cannot enable TSAN due to missing sanitize thread interface." 6586fi 6587if test "$have_ubsan" = "yes"; then 6588 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 6589 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 6590fi 6591 6592########################################## 6593# Do we have libnfs 6594if test "$libnfs" != "no" ; then 6595 if $pkg_config --atleast-version=1.9.3 libnfs; then 6596 libnfs="yes" 6597 libnfs_libs=$($pkg_config --libs libnfs) 6598 else 6599 if test "$libnfs" = "yes" ; then 6600 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 6601 fi 6602 libnfs="no" 6603 fi 6604fi 6605 6606########################################## 6607# Do we have libudev 6608if test "$libudev" != "no" ; then 6609 if $pkg_config libudev && test "$static" != "yes"; then 6610 libudev="yes" 6611 libudev_libs=$($pkg_config --libs libudev) 6612 else 6613 libudev="no" 6614 fi 6615fi 6616 6617# Now we've finished running tests it's OK to add -Werror to the compiler flags 6618if test "$werror" = "yes"; then 6619 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 6620fi 6621 6622# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 6623if test "$solaris" = "no" && test "$tsan" = "no"; then 6624 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 6625 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 6626 fi 6627fi 6628 6629# test if pod2man has --utf8 option 6630if pod2man --help | grep -q utf8; then 6631 POD2MAN="pod2man --utf8" 6632else 6633 POD2MAN="pod2man" 6634fi 6635 6636# Use ASLR, no-SEH and DEP if available 6637if test "$mingw32" = "yes" ; then 6638 for flag in --dynamicbase --no-seh --nxcompat; do 6639 if ld_has $flag ; then 6640 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 6641 fi 6642 done 6643fi 6644 6645# Disable OpenBSD W^X if available 6646if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then 6647 cat > $TMPC <<EOF 6648 int main(void) { return 0; } 6649EOF 6650 wx_ldflags="-Wl,-z,wxneeded" 6651 if compile_prog "" "$wx_ldflags"; then 6652 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags" 6653 fi 6654fi 6655 6656qemu_confdir=$sysconfdir$confsuffix 6657qemu_moddir=$libdir$confsuffix 6658qemu_datadir=$datadir$confsuffix 6659qemu_localedir="$datadir/locale" 6660qemu_icondir="$datadir/icons" 6661qemu_desktopdir="$datadir/applications" 6662 6663# We can only support ivshmem if we have eventfd 6664if [ "$eventfd" = "yes" ]; then 6665 ivshmem=yes 6666fi 6667 6668tools="" 6669if test "$want_tools" = "yes" ; then 6670 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools" 6671 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 6672 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools" 6673 fi 6674 if [ "$ivshmem" = "yes" ]; then 6675 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 6676 fi 6677 if [ "$curl" = "yes" ]; then 6678 tools="elf2dmp\$(EXESUF) $tools" 6679 fi 6680fi 6681if test "$softmmu" = yes ; then 6682 if test "$linux" = yes; then 6683 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then 6684 virtfs=yes 6685 helpers="$helpers fsdev/virtfs-proxy-helper\$(EXESUF)" 6686 else 6687 if test "$virtfs" = yes; then 6688 error_exit "VirtFS requires libcap-ng devel and libattr devel" 6689 fi 6690 virtfs=no 6691 fi 6692 if test "$mpath" != no && test "$mpathpersist" = yes ; then 6693 mpath=yes 6694 else 6695 if test "$mpath" = yes; then 6696 error_exit "Multipath requires libmpathpersist devel" 6697 fi 6698 mpath=no 6699 fi 6700 helpers="$helpers scsi/qemu-pr-helper\$(EXESUF)" 6701 else 6702 if test "$virtfs" = yes; then 6703 error_exit "VirtFS is supported only on Linux" 6704 fi 6705 virtfs=no 6706 if test "$mpath" = yes; then 6707 error_exit "Multipath is supported only on Linux" 6708 fi 6709 mpath=no 6710 fi 6711 if test "$xkbcommon" = "yes"; then 6712 tools="qemu-keymap\$(EXESUF) $tools" 6713 fi 6714fi 6715 6716# Probe for guest agent support/options 6717 6718if [ "$guest_agent" != "no" ]; then 6719 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 6720 guest_agent=no 6721 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 6722 tools="qemu-ga\$(EXESUF) $tools" 6723 guest_agent=yes 6724 elif [ "$guest_agent" != yes ]; then 6725 guest_agent=no 6726 else 6727 error_exit "Guest agent is not supported on this platform" 6728 fi 6729fi 6730 6731# Guest agent Window MSI package 6732 6733if test "$guest_agent" != yes; then 6734 if test "$guest_agent_msi" = yes; then 6735 error_exit "MSI guest agent package requires guest agent enabled" 6736 fi 6737 guest_agent_msi=no 6738elif test "$mingw32" != "yes"; then 6739 if test "$guest_agent_msi" = "yes"; then 6740 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 6741 fi 6742 guest_agent_msi=no 6743elif ! has wixl; then 6744 if test "$guest_agent_msi" = "yes"; then 6745 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 6746 fi 6747 guest_agent_msi=no 6748else 6749 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 6750 # disabled explicitly 6751 if test "$guest_agent_msi" != "no"; then 6752 guest_agent_msi=yes 6753 fi 6754fi 6755 6756if test "$guest_agent_msi" = "yes"; then 6757 if test "$guest_agent_with_vss" = "yes"; then 6758 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 6759 fi 6760 6761 if test "$QEMU_GA_MANUFACTURER" = ""; then 6762 QEMU_GA_MANUFACTURER=QEMU 6763 fi 6764 6765 if test "$QEMU_GA_DISTRO" = ""; then 6766 QEMU_GA_DISTRO=Linux 6767 fi 6768 6769 if test "$QEMU_GA_VERSION" = ""; then 6770 QEMU_GA_VERSION=$(cat $source_path/VERSION) 6771 fi 6772 6773 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 6774 6775 case "$cpu" in 6776 x86_64) 6777 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 6778 ;; 6779 i386) 6780 QEMU_GA_MSI_ARCH="-D Arch=32" 6781 ;; 6782 *) 6783 error_exit "CPU $cpu not supported for building installation package" 6784 ;; 6785 esac 6786fi 6787 6788# Mac OS X ships with a broken assembler 6789roms= 6790if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 6791 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 6792 test "$softmmu" = yes ; then 6793 # Different host OS linkers have different ideas about the name of the ELF 6794 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 6795 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 6796 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 6797 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 6798 ld_i386_emulation="$emu" 6799 roms="optionrom" 6800 break 6801 fi 6802 done 6803fi 6804 6805# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 6806if test "$cpu" = "s390x" ; then 6807 write_c_skeleton 6808 if compile_prog "-march=z900" ""; then 6809 roms="$roms s390-ccw" 6810 # SLOF is required for building the s390-ccw firmware on s390x, 6811 # since it is using the libnet code from SLOF for network booting. 6812 if test -e "${source_path}/.git" ; then 6813 git_submodules="${git_submodules} roms/SLOF" 6814 fi 6815 fi 6816fi 6817 6818# Check that the C++ compiler exists and works with the C compiler. 6819# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 6820if has $cxx; then 6821 cat > $TMPC <<EOF 6822int c_function(void); 6823int main(void) { return c_function(); } 6824EOF 6825 6826 compile_object 6827 6828 cat > $TMPCXX <<EOF 6829extern "C" { 6830 int c_function(void); 6831} 6832int c_function(void) { return 42; } 6833EOF 6834 6835 update_cxxflags 6836 6837 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 6838 # C++ compiler $cxx works ok with C compiler $cc 6839 : 6840 else 6841 echo "C++ compiler $cxx does not work with C compiler $cc" 6842 echo "Disabling C++ specific optional code" 6843 cxx= 6844 fi 6845else 6846 echo "No C++ compiler available; disabling C++ specific optional code" 6847 cxx= 6848fi 6849 6850echo_version() { 6851 if test "$1" = "yes" ; then 6852 echo "($2)" 6853 fi 6854} 6855 6856# prepend pixman and ftd flags after all config tests are done 6857QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 6858QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 6859libs_softmmu="$pixman_libs $libs_softmmu" 6860 6861echo "Install prefix $prefix" 6862echo "BIOS directory $(eval echo $qemu_datadir)" 6863echo "firmware path $(eval echo $firmwarepath)" 6864echo "binary directory $(eval echo $bindir)" 6865echo "library directory $(eval echo $libdir)" 6866echo "module directory $(eval echo $qemu_moddir)" 6867echo "libexec directory $(eval echo $libexecdir)" 6868echo "include directory $(eval echo $includedir)" 6869echo "config directory $(eval echo $sysconfdir)" 6870if test "$mingw32" = "no" ; then 6871echo "local state directory $(eval echo $local_statedir)" 6872echo "Manual directory $(eval echo $mandir)" 6873echo "ELF interp prefix $interp_prefix" 6874else 6875echo "local state directory queried at runtime" 6876echo "Windows SDK $win_sdk" 6877fi 6878echo "Build directory $(pwd)" 6879echo "Source path $source_path" 6880echo "GIT binary $git" 6881echo "GIT submodules $git_submodules" 6882echo "C compiler $cc" 6883echo "Host C compiler $host_cc" 6884echo "C++ compiler $cxx" 6885echo "Objective-C compiler $objcc" 6886echo "ARFLAGS $ARFLAGS" 6887echo "CFLAGS $CFLAGS" 6888echo "QEMU_CFLAGS $QEMU_CFLAGS" 6889echo "QEMU_LDFLAGS $QEMU_LDFLAGS" 6890echo "make $make" 6891echo "install $install" 6892echo "python $python ($python_version)" 6893if test "$docs" != "no"; then 6894 echo "sphinx-build $sphinx_build" 6895fi 6896echo "genisoimage $genisoimage" 6897echo "efi_aarch64 $efi_aarch64" 6898echo "python_yaml $python_yaml" 6899echo "slirp support $slirp $(echo_version $slirp $slirp_version)" 6900if test "$slirp" != "no" ; then 6901 echo "smbd $smbd" 6902fi 6903echo "module support $modules" 6904echo "alt path mod load $module_upgrades" 6905echo "host CPU $cpu" 6906echo "host big endian $bigendian" 6907echo "target list $target_list" 6908echo "gprof enabled $gprof" 6909echo "sparse enabled $sparse" 6910echo "strip binaries $strip_opt" 6911echo "profiler $profiler" 6912echo "static build $static" 6913echo "safe stack $safe_stack" 6914if test "$darwin" = "yes" ; then 6915 echo "Cocoa support $cocoa" 6916fi 6917echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 6918echo "SDL image support $sdl_image" 6919echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 6920echo "GTK GL support $gtk_gl" 6921echo "VTE support $vte $(echo_version $vte $vteversion)" 6922echo "TLS priority $tls_priority" 6923echo "GNUTLS support $gnutls" 6924echo "libgcrypt $gcrypt" 6925if test "$gcrypt" = "yes" 6926then 6927 echo " hmac $gcrypt_hmac" 6928 echo " XTS $gcrypt_xts" 6929fi 6930echo "nettle $nettle $(echo_version $nettle $nettle_version)" 6931if test "$nettle" = "yes" 6932then 6933 echo " XTS $nettle_xts" 6934fi 6935echo "libtasn1 $tasn1" 6936echo "PAM $auth_pam" 6937echo "iconv support $iconv" 6938echo "curses support $curses" 6939echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)" 6940echo "curl support $curl" 6941echo "mingw32 support $mingw32" 6942echo "Audio drivers $audio_drv_list" 6943echo "Block whitelist (rw) $block_drv_rw_whitelist" 6944echo "Block whitelist (ro) $block_drv_ro_whitelist" 6945echo "VirtFS support $virtfs" 6946echo "Multipath support $mpath" 6947echo "VNC support $vnc" 6948if test "$vnc" = "yes" ; then 6949 echo "VNC SASL support $vnc_sasl" 6950 echo "VNC JPEG support $vnc_jpeg" 6951 echo "VNC PNG support $vnc_png" 6952fi 6953echo "xen support $xen" 6954if test "$xen" = "yes" ; then 6955 echo "xen ctrl version $xen_ctrl_version" 6956fi 6957echo "brlapi support $brlapi" 6958echo "Documentation $docs" 6959echo "PIE $pie" 6960echo "vde support $vde" 6961echo "netmap support $netmap" 6962echo "Linux AIO support $linux_aio" 6963echo "Linux io_uring support $linux_io_uring" 6964echo "ATTR/XATTR support $attr" 6965echo "Install blobs $blobs" 6966echo "KVM support $kvm" 6967echo "HAX support $hax" 6968echo "HVF support $hvf" 6969echo "WHPX support $whpx" 6970echo "TCG support $tcg" 6971if test "$tcg" = "yes" ; then 6972 echo "TCG debug enabled $debug_tcg" 6973 echo "TCG interpreter $tcg_interpreter" 6974fi 6975echo "malloc trim support $malloc_trim" 6976echo "RDMA support $rdma" 6977echo "PVRDMA support $pvrdma" 6978echo "fdt support $fdt" 6979echo "membarrier $membarrier" 6980echo "preadv support $preadv" 6981echo "fdatasync $fdatasync" 6982echo "madvise $madvise" 6983echo "posix_madvise $posix_madvise" 6984echo "posix_memalign $posix_memalign" 6985echo "libcap-ng support $cap_ng" 6986echo "vhost-net support $vhost_net" 6987echo "vhost-crypto support $vhost_crypto" 6988echo "vhost-scsi support $vhost_scsi" 6989echo "vhost-vsock support $vhost_vsock" 6990echo "vhost-user support $vhost_user" 6991echo "vhost-user-fs support $vhost_user_fs" 6992echo "vhost-vdpa support $vhost_vdpa" 6993echo "Trace backends $trace_backends" 6994if have_backend "simple"; then 6995echo "Trace output file $trace_file-<pid>" 6996fi 6997echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 6998echo "rbd support $rbd" 6999echo "xfsctl support $xfs" 7000echo "smartcard support $smartcard" 7001echo "libusb $libusb" 7002echo "usb net redir $usb_redir" 7003echo "OpenGL support $opengl" 7004echo "OpenGL dmabufs $opengl_dmabuf" 7005echo "libiscsi support $libiscsi" 7006echo "libnfs support $libnfs" 7007echo "build guest agent $guest_agent" 7008echo "QGA VSS support $guest_agent_with_vss" 7009echo "QGA w32 disk info $guest_agent_ntddscsi" 7010echo "QGA MSI support $guest_agent_msi" 7011echo "seccomp support $seccomp" 7012echo "coroutine backend $coroutine" 7013echo "coroutine pool $coroutine_pool" 7014echo "debug stack usage $debug_stack_usage" 7015echo "mutex debugging $debug_mutex" 7016echo "crypto afalg $crypto_afalg" 7017echo "GlusterFS support $glusterfs" 7018echo "gcov $gcov_tool" 7019echo "gcov enabled $gcov" 7020echo "TPM support $tpm" 7021echo "libssh support $libssh" 7022echo "QOM debugging $qom_cast_debug" 7023echo "Live block migration $live_block_migration" 7024echo "lzo support $lzo" 7025echo "snappy support $snappy" 7026echo "bzip2 support $bzip2" 7027echo "lzfse support $lzfse" 7028echo "zstd support $zstd" 7029echo "NUMA host support $numa" 7030echo "libxml2 $libxml2" 7031echo "tcmalloc support $tcmalloc" 7032echo "jemalloc support $jemalloc" 7033echo "avx2 optimization $avx2_opt" 7034echo "avx512f optimization $avx512f_opt" 7035echo "replication support $replication" 7036echo "VxHS block device $vxhs" 7037echo "bochs support $bochs" 7038echo "cloop support $cloop" 7039echo "dmg support $dmg" 7040echo "qcow v1 support $qcow1" 7041echo "vdi support $vdi" 7042echo "vvfat support $vvfat" 7043echo "qed support $qed" 7044echo "parallels support $parallels" 7045echo "sheepdog support $sheepdog" 7046echo "capstone $capstone" 7047echo "libpmem support $libpmem" 7048echo "libdaxctl support $libdaxctl" 7049echo "libudev $libudev" 7050echo "default devices $default_devices" 7051echo "plugin support $plugins" 7052echo "fuzzing support $fuzzing" 7053echo "gdb $gdb_bin" 7054echo "rng-none $rng_none" 7055echo "Linux keyring $secret_keyring" 7056 7057if test "$supported_cpu" = "no"; then 7058 echo 7059 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 7060 echo 7061 echo "CPU host architecture $cpu support is not currently maintained." 7062 echo "The QEMU project intends to remove support for this host CPU in" 7063 echo "a future release if nobody volunteers to maintain it and to" 7064 echo "provide a build host for our continuous integration setup." 7065 echo "configure has succeeded and you can continue to build, but" 7066 echo "if you care about QEMU on this platform you should contact" 7067 echo "us upstream at qemu-devel@nongnu.org." 7068fi 7069 7070if test "$supported_os" = "no"; then 7071 echo 7072 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 7073 echo 7074 echo "Host OS $targetos support is not currently maintained." 7075 echo "The QEMU project intends to remove support for this host OS in" 7076 echo "a future release if nobody volunteers to maintain it and to" 7077 echo "provide a build host for our continuous integration setup." 7078 echo "configure has succeeded and you can continue to build, but" 7079 echo "if you care about QEMU on this platform you should contact" 7080 echo "us upstream at qemu-devel@nongnu.org." 7081fi 7082 7083config_host_mak="config-host.mak" 7084 7085echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 7086 7087echo "# Automatically generated by configure - do not modify" > $config_host_mak 7088echo >> $config_host_mak 7089 7090echo all: >> $config_host_mak 7091echo "prefix=$prefix" >> $config_host_mak 7092echo "bindir=$bindir" >> $config_host_mak 7093echo "libdir=$libdir" >> $config_host_mak 7094echo "libexecdir=$libexecdir" >> $config_host_mak 7095echo "includedir=$includedir" >> $config_host_mak 7096echo "mandir=$mandir" >> $config_host_mak 7097echo "sysconfdir=$sysconfdir" >> $config_host_mak 7098echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 7099echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 7100echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 7101echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 7102echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 7103if test "$mingw32" = "no" ; then 7104 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 7105fi 7106echo "qemu_helperdir=$libexecdir" >> $config_host_mak 7107echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 7108echo "qemu_icondir=$qemu_icondir" >> $config_host_mak 7109echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak 7110echo "libs_cpu=$libs_cpu" >> $config_host_mak 7111echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 7112echo "GIT=$git" >> $config_host_mak 7113echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 7114echo "GIT_UPDATE=$git_update" >> $config_host_mak 7115 7116echo "ARCH=$ARCH" >> $config_host_mak 7117 7118if test "$default_devices" = "yes" ; then 7119 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak 7120else 7121 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak 7122fi 7123if test "$debug_tcg" = "yes" ; then 7124 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 7125fi 7126if test "$strip_opt" = "yes" ; then 7127 echo "STRIP=${strip}" >> $config_host_mak 7128fi 7129if test "$bigendian" = "yes" ; then 7130 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 7131fi 7132if test "$mingw32" = "yes" ; then 7133 echo "CONFIG_WIN32=y" >> $config_host_mak 7134 rc_version=$(cat $source_path/VERSION) 7135 version_major=${rc_version%%.*} 7136 rc_version=${rc_version#*.} 7137 version_minor=${rc_version%%.*} 7138 rc_version=${rc_version#*.} 7139 version_subminor=${rc_version%%.*} 7140 version_micro=0 7141 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 7142 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 7143 if test "$guest_agent_with_vss" = "yes" ; then 7144 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 7145 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 7146 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 7147 fi 7148 if test "$guest_agent_ntddscsi" = "yes" ; then 7149 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 7150 fi 7151 if test "$guest_agent_msi" = "yes"; then 7152 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 7153 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 7154 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 7155 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 7156 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 7157 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 7158 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 7159 fi 7160else 7161 echo "CONFIG_POSIX=y" >> $config_host_mak 7162fi 7163 7164if test "$linux" = "yes" ; then 7165 echo "CONFIG_LINUX=y" >> $config_host_mak 7166fi 7167 7168if test "$darwin" = "yes" ; then 7169 echo "CONFIG_DARWIN=y" >> $config_host_mak 7170fi 7171 7172if test "$solaris" = "yes" ; then 7173 echo "CONFIG_SOLARIS=y" >> $config_host_mak 7174fi 7175if test "$haiku" = "yes" ; then 7176 echo "CONFIG_HAIKU=y" >> $config_host_mak 7177fi 7178if test "$static" = "yes" ; then 7179 echo "CONFIG_STATIC=y" >> $config_host_mak 7180fi 7181if test "$profiler" = "yes" ; then 7182 echo "CONFIG_PROFILER=y" >> $config_host_mak 7183fi 7184if test "$want_tools" = "yes" ; then 7185 echo "CONFIG_TOOLS=y" >> $config_host_mak 7186fi 7187if test "$slirp" != "no"; then 7188 echo "CONFIG_SLIRP=y" >> $config_host_mak 7189 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 7190 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak 7191 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak 7192fi 7193if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then 7194 echo "config-host.h: slirp/all" >> $config_host_mak 7195fi 7196if test "$vde" = "yes" ; then 7197 echo "CONFIG_VDE=y" >> $config_host_mak 7198 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 7199fi 7200if test "$netmap" = "yes" ; then 7201 echo "CONFIG_NETMAP=y" >> $config_host_mak 7202fi 7203if test "$l2tpv3" = "yes" ; then 7204 echo "CONFIG_L2TPV3=y" >> $config_host_mak 7205fi 7206if test "$gprof" = "yes" ; then 7207 echo "CONFIG_GPROF=y" >> $config_host_mak 7208fi 7209if test "$cap_ng" = "yes" ; then 7210 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak 7211fi 7212echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 7213for drv in $audio_drv_list; do 7214 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 7215 case "$drv" in 7216 alsa | oss | pa | sdl) 7217 echo "$def=m" >> $config_host_mak ;; 7218 *) 7219 echo "$def=y" >> $config_host_mak ;; 7220 esac 7221done 7222echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 7223echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 7224echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 7225echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 7226echo "OSS_LIBS=$oss_libs" >> $config_host_mak 7227echo "JACK_LIBS=$jack_libs" >> $config_host_mak 7228if test "$audio_win_int" = "yes" ; then 7229 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 7230fi 7231echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 7232echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 7233if test "$vnc" = "yes" ; then 7234 echo "CONFIG_VNC=y" >> $config_host_mak 7235fi 7236if test "$vnc_sasl" = "yes" ; then 7237 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 7238fi 7239if test "$vnc_jpeg" = "yes" ; then 7240 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 7241fi 7242if test "$vnc_png" = "yes" ; then 7243 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 7244fi 7245if test "$xkbcommon" = "yes" ; then 7246 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 7247 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 7248fi 7249if test "$xfs" = "yes" ; then 7250 echo "CONFIG_XFS=y" >> $config_host_mak 7251fi 7252qemu_version=$(head $source_path/VERSION) 7253echo "VERSION=$qemu_version" >>$config_host_mak 7254echo "PKGVERSION=$pkgversion" >>$config_host_mak 7255echo "SRC_PATH=$source_path" >> $config_host_mak 7256echo "TARGET_DIRS=$target_list" >> $config_host_mak 7257if [ "$docs" = "yes" ] ; then 7258 echo "BUILD_DOCS=yes" >> $config_host_mak 7259fi 7260if test "$modules" = "yes"; then 7261 # $shacmd can generate a hash started with digit, which the compiler doesn't 7262 # like as an symbol. So prefix it with an underscore 7263 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 7264 echo "CONFIG_MODULES=y" >> $config_host_mak 7265fi 7266if test "$module_upgrades" = "yes"; then 7267 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 7268fi 7269if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then 7270 echo "CONFIG_X11=y" >> $config_host_mak 7271 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 7272 echo "X11_LIBS=$x11_libs" >> $config_host_mak 7273fi 7274if test "$sdl" = "yes" ; then 7275 echo "CONFIG_SDL=m" >> $config_host_mak 7276 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 7277 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 7278 if test "$sdl_image" = "yes" ; then 7279 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak 7280 fi 7281fi 7282if test "$cocoa" = "yes" ; then 7283 echo "CONFIG_COCOA=y" >> $config_host_mak 7284fi 7285if test "$iconv" = "yes" ; then 7286 echo "CONFIG_ICONV=y" >> $config_host_mak 7287 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak 7288 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak 7289fi 7290if test "$curses" = "yes" ; then 7291 echo "CONFIG_CURSES=m" >> $config_host_mak 7292 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 7293 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 7294fi 7295if test "$pipe2" = "yes" ; then 7296 echo "CONFIG_PIPE2=y" >> $config_host_mak 7297fi 7298if test "$accept4" = "yes" ; then 7299 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 7300fi 7301if test "$splice" = "yes" ; then 7302 echo "CONFIG_SPLICE=y" >> $config_host_mak 7303fi 7304if test "$eventfd" = "yes" ; then 7305 echo "CONFIG_EVENTFD=y" >> $config_host_mak 7306fi 7307if test "$memfd" = "yes" ; then 7308 echo "CONFIG_MEMFD=y" >> $config_host_mak 7309fi 7310if test "$have_usbfs" = "yes" ; then 7311 echo "CONFIG_USBFS=y" >> $config_host_mak 7312fi 7313if test "$fallocate" = "yes" ; then 7314 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 7315fi 7316if test "$fallocate_punch_hole" = "yes" ; then 7317 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 7318fi 7319if test "$fallocate_zero_range" = "yes" ; then 7320 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 7321fi 7322if test "$posix_fallocate" = "yes" ; then 7323 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 7324fi 7325if test "$sync_file_range" = "yes" ; then 7326 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 7327fi 7328if test "$fiemap" = "yes" ; then 7329 echo "CONFIG_FIEMAP=y" >> $config_host_mak 7330fi 7331if test "$dup3" = "yes" ; then 7332 echo "CONFIG_DUP3=y" >> $config_host_mak 7333fi 7334if test "$ppoll" = "yes" ; then 7335 echo "CONFIG_PPOLL=y" >> $config_host_mak 7336fi 7337if test "$prctl_pr_set_timerslack" = "yes" ; then 7338 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 7339fi 7340if test "$epoll" = "yes" ; then 7341 echo "CONFIG_EPOLL=y" >> $config_host_mak 7342fi 7343if test "$epoll_create1" = "yes" ; then 7344 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 7345fi 7346if test "$sendfile" = "yes" ; then 7347 echo "CONFIG_SENDFILE=y" >> $config_host_mak 7348fi 7349if test "$timerfd" = "yes" ; then 7350 echo "CONFIG_TIMERFD=y" >> $config_host_mak 7351fi 7352if test "$setns" = "yes" ; then 7353 echo "CONFIG_SETNS=y" >> $config_host_mak 7354fi 7355if test "$clock_adjtime" = "yes" ; then 7356 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 7357fi 7358if test "$syncfs" = "yes" ; then 7359 echo "CONFIG_SYNCFS=y" >> $config_host_mak 7360fi 7361if test "$kcov" = "yes" ; then 7362 echo "CONFIG_KCOV=y" >> $config_host_mak 7363fi 7364if test "$inotify" = "yes" ; then 7365 echo "CONFIG_INOTIFY=y" >> $config_host_mak 7366fi 7367if test "$inotify1" = "yes" ; then 7368 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 7369fi 7370if test "$sem_timedwait" = "yes" ; then 7371 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 7372fi 7373if test "$strchrnul" = "yes" ; then 7374 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 7375fi 7376if test "$st_atim" = "yes" ; then 7377 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak 7378fi 7379if test "$byteswap_h" = "yes" ; then 7380 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 7381fi 7382if test "$bswap_h" = "yes" ; then 7383 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 7384fi 7385if test "$curl" = "yes" ; then 7386 echo "CONFIG_CURL=m" >> $config_host_mak 7387 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 7388 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 7389fi 7390if test "$brlapi" = "yes" ; then 7391 echo "CONFIG_BRLAPI=y" >> $config_host_mak 7392 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 7393fi 7394if test "$gtk" = "yes" ; then 7395 echo "CONFIG_GTK=m" >> $config_host_mak 7396 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 7397 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 7398 if test "$gtk_gl" = "yes" ; then 7399 echo "CONFIG_GTK_GL=y" >> $config_host_mak 7400 fi 7401fi 7402if test "$gio" = "yes" ; then 7403 echo "CONFIG_GIO=y" >> $config_host_mak 7404 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 7405 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 7406 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 7407fi 7408echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 7409if test "$gnutls" = "yes" ; then 7410 echo "CONFIG_GNUTLS=y" >> $config_host_mak 7411fi 7412if test "$gcrypt" = "yes" ; then 7413 echo "CONFIG_GCRYPT=y" >> $config_host_mak 7414 if test "$gcrypt_hmac" = "yes" ; then 7415 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 7416 fi 7417fi 7418if test "$nettle" = "yes" ; then 7419 echo "CONFIG_NETTLE=y" >> $config_host_mak 7420 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 7421fi 7422if test "$qemu_private_xts" = "yes" ; then 7423 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak 7424fi 7425if test "$tasn1" = "yes" ; then 7426 echo "CONFIG_TASN1=y" >> $config_host_mak 7427fi 7428if test "$auth_pam" = "yes" ; then 7429 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 7430fi 7431if test "$have_ifaddrs_h" = "yes" ; then 7432 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 7433fi 7434if test "$have_drm_h" = "yes" ; then 7435 echo "HAVE_DRM_H=y" >> $config_host_mak 7436fi 7437if test "$have_broken_size_max" = "yes" ; then 7438 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 7439fi 7440if test "$have_openpty" = "yes" ; then 7441 echo "HAVE_OPENPTY=y" >> $config_host_mak 7442fi 7443if test "$have_sys_signal_h" = "yes" ; then 7444 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak 7445fi 7446 7447# Work around a system header bug with some kernel/XFS header 7448# versions where they both try to define 'struct fsxattr': 7449# xfs headers will not try to redefine structs from linux headers 7450# if this macro is set. 7451if test "$have_fsxattr" = "yes" ; then 7452 echo "HAVE_FSXATTR=y" >> $config_host_mak 7453fi 7454if test "$have_copy_file_range" = "yes" ; then 7455 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 7456fi 7457if test "$vte" = "yes" ; then 7458 echo "CONFIG_VTE=y" >> $config_host_mak 7459 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 7460 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 7461fi 7462if test "$virglrenderer" = "yes" ; then 7463 echo "CONFIG_VIRGL=y" >> $config_host_mak 7464 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 7465 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 7466fi 7467if test "$xen" = "yes" ; then 7468 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 7469 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 7470fi 7471if test "$linux_aio" = "yes" ; then 7472 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 7473fi 7474if test "$linux_io_uring" = "yes" ; then 7475 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak 7476 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak 7477 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak 7478fi 7479if test "$attr" = "yes" ; then 7480 echo "CONFIG_ATTR=y" >> $config_host_mak 7481fi 7482if test "$libattr" = "yes" ; then 7483 echo "CONFIG_LIBATTR=y" >> $config_host_mak 7484fi 7485if test "$virtfs" = "yes" ; then 7486 echo "CONFIG_VIRTFS=y" >> $config_host_mak 7487fi 7488if test "$mpath" = "yes" ; then 7489 echo "CONFIG_MPATH=y" >> $config_host_mak 7490 if test "$mpathpersist_new_api" = "yes"; then 7491 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 7492 fi 7493fi 7494if test "$vhost_scsi" = "yes" ; then 7495 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 7496fi 7497if test "$vhost_net" = "yes" ; then 7498 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 7499fi 7500if test "$vhost_net_user" = "yes" ; then 7501 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 7502fi 7503if test "$vhost_net_vdpa" = "yes" ; then 7504 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 7505fi 7506if test "$vhost_crypto" = "yes" ; then 7507 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 7508fi 7509if test "$vhost_vsock" = "yes" ; then 7510 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 7511 if test "$vhost_user" = "yes" ; then 7512 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 7513 fi 7514fi 7515if test "$vhost_kernel" = "yes" ; then 7516 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 7517fi 7518if test "$vhost_user" = "yes" ; then 7519 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 7520fi 7521if test "$vhost_vdpa" = "yes" ; then 7522 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 7523fi 7524if test "$vhost_user_fs" = "yes" ; then 7525 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 7526fi 7527if test "$blobs" = "yes" ; then 7528 echo "INSTALL_BLOBS=yes" >> $config_host_mak 7529fi 7530if test "$iovec" = "yes" ; then 7531 echo "CONFIG_IOVEC=y" >> $config_host_mak 7532fi 7533if test "$preadv" = "yes" ; then 7534 echo "CONFIG_PREADV=y" >> $config_host_mak 7535fi 7536if test "$fdt" != "no" ; then 7537 echo "CONFIG_FDT=y" >> $config_host_mak 7538fi 7539if test "$membarrier" = "yes" ; then 7540 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 7541fi 7542if test "$signalfd" = "yes" ; then 7543 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 7544fi 7545if test "$optreset" = "yes" ; then 7546 echo "HAVE_OPTRESET=y" >> $config_host_mak 7547fi 7548if test "$tcg" = "yes"; then 7549 echo "CONFIG_TCG=y" >> $config_host_mak 7550 if test "$tcg_interpreter" = "yes" ; then 7551 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 7552 fi 7553fi 7554if test "$fdatasync" = "yes" ; then 7555 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 7556fi 7557if test "$madvise" = "yes" ; then 7558 echo "CONFIG_MADVISE=y" >> $config_host_mak 7559fi 7560if test "$posix_madvise" = "yes" ; then 7561 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 7562fi 7563if test "$posix_memalign" = "yes" ; then 7564 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 7565fi 7566 7567if test "$spice" = "yes" ; then 7568 echo "CONFIG_SPICE=y" >> $config_host_mak 7569fi 7570 7571if test "$smartcard" = "yes" ; then 7572 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 7573 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 7574 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 7575fi 7576 7577if test "$libusb" = "yes" ; then 7578 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 7579 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 7580 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 7581fi 7582 7583if test "$usb_redir" = "yes" ; then 7584 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 7585 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 7586 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 7587fi 7588 7589if test "$opengl" = "yes" ; then 7590 echo "CONFIG_OPENGL=y" >> $config_host_mak 7591 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 7592 if test "$opengl_dmabuf" = "yes" ; then 7593 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 7594 fi 7595fi 7596 7597if test "$gbm" = "yes" ; then 7598 echo "CONFIG_GBM=y" >> $config_host_mak 7599 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 7600 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 7601fi 7602 7603 7604if test "$malloc_trim" = "yes" ; then 7605 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 7606fi 7607 7608if test "$avx2_opt" = "yes" ; then 7609 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 7610fi 7611 7612if test "$avx512f_opt" = "yes" ; then 7613 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 7614fi 7615 7616if test "$lzo" = "yes" ; then 7617 echo "CONFIG_LZO=y" >> $config_host_mak 7618fi 7619 7620if test "$snappy" = "yes" ; then 7621 echo "CONFIG_SNAPPY=y" >> $config_host_mak 7622fi 7623 7624if test "$bzip2" = "yes" ; then 7625 echo "CONFIG_BZIP2=y" >> $config_host_mak 7626 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 7627fi 7628 7629if test "$lzfse" = "yes" ; then 7630 echo "CONFIG_LZFSE=y" >> $config_host_mak 7631 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak 7632fi 7633 7634if test "$zstd" = "yes" ; then 7635 echo "CONFIG_ZSTD=y" >> $config_host_mak 7636fi 7637 7638if test "$libiscsi" = "yes" ; then 7639 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 7640 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 7641 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 7642fi 7643 7644if test "$libnfs" = "yes" ; then 7645 echo "CONFIG_LIBNFS=m" >> $config_host_mak 7646 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 7647fi 7648 7649if test "$seccomp" = "yes"; then 7650 echo "CONFIG_SECCOMP=y" >> $config_host_mak 7651 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 7652 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 7653fi 7654 7655# XXX: suppress that 7656if [ "$bsd" = "yes" ] ; then 7657 echo "CONFIG_BSD=y" >> $config_host_mak 7658fi 7659 7660if test "$localtime_r" = "yes" ; then 7661 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 7662fi 7663if test "$qom_cast_debug" = "yes" ; then 7664 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 7665fi 7666if test "$rbd" = "yes" ; then 7667 echo "CONFIG_RBD=m" >> $config_host_mak 7668 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 7669 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 7670fi 7671 7672echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 7673if test "$coroutine_pool" = "yes" ; then 7674 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 7675else 7676 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 7677fi 7678 7679if test "$debug_stack_usage" = "yes" ; then 7680 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 7681fi 7682 7683if test "$crypto_afalg" = "yes" ; then 7684 echo "CONFIG_AF_ALG=y" >> $config_host_mak 7685fi 7686 7687if test "$open_by_handle_at" = "yes" ; then 7688 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 7689fi 7690 7691if test "$linux_magic_h" = "yes" ; then 7692 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 7693fi 7694 7695if test "$valgrind_h" = "yes" ; then 7696 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 7697fi 7698 7699if test "$have_asan_iface_fiber" = "yes" ; then 7700 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 7701fi 7702 7703if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 7704 echo "CONFIG_TSAN=y" >> $config_host_mak 7705fi 7706 7707if test "$has_environ" = "yes" ; then 7708 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 7709fi 7710 7711if test "$cpuid_h" = "yes" ; then 7712 echo "CONFIG_CPUID_H=y" >> $config_host_mak 7713fi 7714 7715if test "$int128" = "yes" ; then 7716 echo "CONFIG_INT128=y" >> $config_host_mak 7717fi 7718 7719if test "$atomic128" = "yes" ; then 7720 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 7721fi 7722 7723if test "$cmpxchg128" = "yes" ; then 7724 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 7725fi 7726 7727if test "$atomic64" = "yes" ; then 7728 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 7729fi 7730 7731if test "$attralias" = "yes" ; then 7732 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak 7733fi 7734 7735if test "$getauxval" = "yes" ; then 7736 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 7737fi 7738 7739if test "$glusterfs" = "yes" ; then 7740 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 7741 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 7742 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 7743fi 7744 7745if test "$glusterfs_xlator_opt" = "yes" ; then 7746 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 7747fi 7748 7749if test "$glusterfs_discard" = "yes" ; then 7750 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 7751fi 7752 7753if test "$glusterfs_fallocate" = "yes" ; then 7754 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 7755fi 7756 7757if test "$glusterfs_zerofill" = "yes" ; then 7758 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 7759fi 7760 7761if test "$glusterfs_ftruncate_has_stat" = "yes" ; then 7762 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak 7763fi 7764 7765if test "$glusterfs_iocb_has_stat" = "yes" ; then 7766 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak 7767fi 7768 7769if test "$libssh" = "yes" ; then 7770 echo "CONFIG_LIBSSH=m" >> $config_host_mak 7771 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 7772 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 7773fi 7774 7775if test "$live_block_migration" = "yes" ; then 7776 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 7777fi 7778 7779if test "$tpm" = "yes"; then 7780 echo 'CONFIG_TPM=y' >> $config_host_mak 7781fi 7782 7783echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 7784if have_backend "nop"; then 7785 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 7786fi 7787if have_backend "simple"; then 7788 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 7789 # Set the appropriate trace file. 7790 trace_file="\"$trace_file-\" FMT_pid" 7791fi 7792if have_backend "log"; then 7793 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 7794fi 7795if have_backend "ust"; then 7796 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 7797fi 7798if have_backend "dtrace"; then 7799 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 7800 if test "$trace_backend_stap" = "yes" ; then 7801 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 7802 fi 7803fi 7804if have_backend "ftrace"; then 7805 if test "$linux" = "yes" ; then 7806 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 7807 else 7808 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 7809 fi 7810fi 7811if have_backend "syslog"; then 7812 if test "$posix_syslog" = "yes" ; then 7813 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 7814 else 7815 feature_not_found "syslog(trace backend)" "syslog not available" 7816 fi 7817fi 7818echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 7819 7820if test "$rdma" = "yes" ; then 7821 echo "CONFIG_RDMA=y" >> $config_host_mak 7822 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 7823fi 7824 7825if test "$pvrdma" = "yes" ; then 7826 echo "CONFIG_PVRDMA=y" >> $config_host_mak 7827fi 7828 7829if test "$have_rtnetlink" = "yes" ; then 7830 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 7831fi 7832 7833if test "$libxml2" = "yes" ; then 7834 echo "CONFIG_LIBXML2=y" >> $config_host_mak 7835 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 7836 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 7837fi 7838 7839if test "$replication" = "yes" ; then 7840 echo "CONFIG_REPLICATION=y" >> $config_host_mak 7841fi 7842 7843if test "$have_af_vsock" = "yes" ; then 7844 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 7845fi 7846 7847if test "$have_sysmacros" = "yes" ; then 7848 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 7849fi 7850 7851if test "$have_static_assert" = "yes" ; then 7852 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 7853fi 7854 7855if test "$have_utmpx" = "yes" ; then 7856 echo "HAVE_UTMPX=y" >> $config_host_mak 7857fi 7858if test "$have_getrandom" = "yes" ; then 7859 echo "CONFIG_GETRANDOM=y" >> $config_host_mak 7860fi 7861if test "$ivshmem" = "yes" ; then 7862 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 7863fi 7864if test "$capstone" != "no" ; then 7865 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 7866fi 7867if test "$debug_mutex" = "yes" ; then 7868 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 7869fi 7870 7871# Hold two types of flag: 7872# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 7873# a thread we have a handle to 7874# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 7875# platform 7876if test "$pthread_setname_np_w_tid" = "yes" ; then 7877 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7878 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 7879elif test "$pthread_setname_np_wo_tid" = "yes" ; then 7880 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7881 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 7882fi 7883 7884if test "$vxhs" = "yes" ; then 7885 echo "CONFIG_VXHS=y" >> $config_host_mak 7886 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 7887fi 7888 7889if test "$libpmem" = "yes" ; then 7890 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 7891fi 7892 7893if test "$libdaxctl" = "yes" ; then 7894 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak 7895fi 7896 7897if test "$bochs" = "yes" ; then 7898 echo "CONFIG_BOCHS=y" >> $config_host_mak 7899fi 7900if test "$cloop" = "yes" ; then 7901 echo "CONFIG_CLOOP=y" >> $config_host_mak 7902fi 7903if test "$dmg" = "yes" ; then 7904 echo "CONFIG_DMG=y" >> $config_host_mak 7905fi 7906if test "$qcow1" = "yes" ; then 7907 echo "CONFIG_QCOW1=y" >> $config_host_mak 7908fi 7909if test "$vdi" = "yes" ; then 7910 echo "CONFIG_VDI=y" >> $config_host_mak 7911fi 7912if test "$vvfat" = "yes" ; then 7913 echo "CONFIG_VVFAT=y" >> $config_host_mak 7914fi 7915if test "$qed" = "yes" ; then 7916 echo "CONFIG_QED=y" >> $config_host_mak 7917fi 7918if test "$parallels" = "yes" ; then 7919 echo "CONFIG_PARALLELS=y" >> $config_host_mak 7920fi 7921if test "$sheepdog" = "yes" ; then 7922 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 7923fi 7924if test "$pty_h" = "yes" ; then 7925 echo "HAVE_PTY_H=y" >> $config_host_mak 7926fi 7927if test "$have_mlockall" = "yes" ; then 7928 echo "HAVE_MLOCKALL=y" >> $config_host_mak 7929fi 7930if test "$fuzzing" = "yes" ; then 7931 if test "$have_fuzzer" = "yes"; then 7932 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer" 7933 FUZZ_CFLAGS=" -fsanitize=address,fuzzer" 7934 CFLAGS="$CFLAGS -fsanitize=address,fuzzer-no-link" 7935 else 7936 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer" 7937 exit 1 7938 fi 7939fi 7940 7941if test "$plugins" = "yes" ; then 7942 echo "CONFIG_PLUGIN=y" >> $config_host_mak 7943 LIBS="-ldl $LIBS" 7944 # Copy the export object list to the build dir 7945 if test "$ld_dynamic_list" = "yes" ; then 7946 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 7947 ld_symbols=qemu-plugins-ld.symbols 7948 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 7949 elif test "$ld_exported_symbols_list" = "yes" ; then 7950 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 7951 ld64_symbols=qemu-plugins-ld64.symbols 7952 echo "# Automatically generated by configure - do not modify" > $ld64_symbols 7953 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 7954 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 7955 else 7956 error_exit \ 7957 "If \$plugins=yes, either \$ld_dynamic_list or " \ 7958 "\$ld_exported_symbols_list should have been set to 'yes'." 7959 fi 7960fi 7961 7962if test -n "$gdb_bin" ; then 7963 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 7964fi 7965 7966if test "$secret_keyring" = "yes" ; then 7967 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 7968 if test "$have_keyutils" = "yes" ; then 7969 echo "CONFIG_TEST_SECRET_KEYRING=y" >> $config_host_mak 7970 fi 7971fi 7972 7973if test "$tcg_interpreter" = "yes"; then 7974 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 7975elif test "$ARCH" = "sparc64" ; then 7976 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 7977elif test "$ARCH" = "s390x" ; then 7978 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 7979elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then 7980 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 7981elif test "$ARCH" = "ppc64" ; then 7982 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 7983elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then 7984 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES" 7985else 7986 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 7987fi 7988 7989echo "HELPERS=$helpers" >> $config_host_mak 7990echo "TOOLS=$tools" >> $config_host_mak 7991echo "ROMS=$roms" >> $config_host_mak 7992echo "MAKE=$make" >> $config_host_mak 7993echo "INSTALL=$install" >> $config_host_mak 7994echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 7995echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 7996echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 7997echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 7998echo "PYTHON=$python" >> $config_host_mak 7999echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak 8000echo "SPHINX_WERROR=$sphinx_werror" >> $config_host_mak 8001echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 8002echo "EFI_AARCH64=$efi_aarch64" >> $config_host_mak 8003echo "PYTHON_YAML=$python_yaml" >> $config_host_mak 8004echo "CC=$cc" >> $config_host_mak 8005if $iasl -h > /dev/null 2>&1; then 8006 echo "IASL=$iasl" >> $config_host_mak 8007fi 8008echo "HOST_CC=$host_cc" >> $config_host_mak 8009echo "CXX=$cxx" >> $config_host_mak 8010echo "OBJCC=$objcc" >> $config_host_mak 8011echo "AR=$ar" >> $config_host_mak 8012echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 8013echo "AS=$as" >> $config_host_mak 8014echo "CCAS=$ccas" >> $config_host_mak 8015echo "CPP=$cpp" >> $config_host_mak 8016echo "OBJCOPY=$objcopy" >> $config_host_mak 8017echo "LD=$ld" >> $config_host_mak 8018echo "RANLIB=$ranlib" >> $config_host_mak 8019echo "NM=$nm" >> $config_host_mak 8020echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 8021echo "WINDRES=$windres" >> $config_host_mak 8022echo "CFLAGS=$CFLAGS" >> $config_host_mak 8023echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 8024echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 8025echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 8026echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 8027if test "$sparse" = "yes" ; then 8028 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 8029 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 8030 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 8031 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 8032 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 8033fi 8034echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 8035echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 8036echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 8037echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 8038echo "LIBS+=$LIBS" >> $config_host_mak 8039echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 8040echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 8041echo "EXESUF=$EXESUF" >> $config_host_mak 8042echo "DSOSUF=$DSOSUF" >> $config_host_mak 8043echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 8044echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 8045echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 8046echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 8047echo "POD2MAN=$POD2MAN" >> $config_host_mak 8048if test "$gcov" = "yes" ; then 8049 echo "CONFIG_GCOV=y" >> $config_host_mak 8050 echo "GCOV=$gcov_tool" >> $config_host_mak 8051fi 8052 8053if test "$libudev" != "no"; then 8054 echo "CONFIG_LIBUDEV=y" >> $config_host_mak 8055 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak 8056fi 8057if test "$fuzzing" != "no"; then 8058 echo "CONFIG_FUZZ=y" >> $config_host_mak 8059 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak 8060 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak 8061fi 8062 8063if test "$edk2_blobs" = "yes" ; then 8064 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak 8065fi 8066 8067if test "$rng_none" = "yes"; then 8068 echo "CONFIG_RNG_NONE=y" >> $config_host_mak 8069fi 8070 8071# use included Linux headers 8072if test "$linux" = "yes" ; then 8073 mkdir -p linux-headers 8074 case "$cpu" in 8075 i386|x86_64|x32) 8076 linux_arch=x86 8077 ;; 8078 ppc|ppc64|ppc64le) 8079 linux_arch=powerpc 8080 ;; 8081 s390x) 8082 linux_arch=s390 8083 ;; 8084 aarch64) 8085 linux_arch=arm64 8086 ;; 8087 mips64) 8088 linux_arch=mips 8089 ;; 8090 *) 8091 # For most CPUs the kernel architecture name and QEMU CPU name match. 8092 linux_arch="$cpu" 8093 ;; 8094 esac 8095 # For non-KVM architectures we will not have asm headers 8096 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 8097 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 8098 fi 8099fi 8100 8101for target in $target_list; do 8102target_dir="$target" 8103config_target_mak=$target_dir/config-target.mak 8104target_name=$(echo $target | cut -d '-' -f 1) 8105target_aligned_only="no" 8106case "$target_name" in 8107 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb) 8108 target_aligned_only="yes" 8109 ;; 8110esac 8111target_bigendian="no" 8112case "$target_name" in 8113 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 8114 target_bigendian="yes" 8115 ;; 8116esac 8117target_softmmu="no" 8118target_user_only="no" 8119target_linux_user="no" 8120target_bsd_user="no" 8121case "$target" in 8122 ${target_name}-softmmu) 8123 target_softmmu="yes" 8124 ;; 8125 ${target_name}-linux-user) 8126 target_user_only="yes" 8127 target_linux_user="yes" 8128 ;; 8129 ${target_name}-bsd-user) 8130 target_user_only="yes" 8131 target_bsd_user="yes" 8132 ;; 8133 *) 8134 error_exit "Target '$target' not recognised" 8135 exit 1 8136 ;; 8137esac 8138 8139mkdir -p $target_dir 8140echo "# Automatically generated by configure - do not modify" > $config_target_mak 8141 8142bflt="no" 8143mttcg="no" 8144interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 8145gdb_xml_files="" 8146 8147TARGET_ARCH="$target_name" 8148TARGET_BASE_ARCH="" 8149TARGET_ABI_DIR="" 8150 8151case "$target_name" in 8152 i386) 8153 mttcg="yes" 8154 gdb_xml_files="i386-32bit.xml" 8155 TARGET_SYSTBL_ABI=i386 8156 ;; 8157 x86_64) 8158 TARGET_BASE_ARCH=i386 8159 TARGET_SYSTBL_ABI=common,64 8160 mttcg="yes" 8161 gdb_xml_files="i386-64bit.xml" 8162 ;; 8163 alpha) 8164 mttcg="yes" 8165 TARGET_SYSTBL_ABI=common 8166 ;; 8167 arm|armeb) 8168 TARGET_ARCH=arm 8169 TARGET_SYSTBL_ABI=common,oabi 8170 bflt="yes" 8171 mttcg="yes" 8172 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml" 8173 ;; 8174 aarch64|aarch64_be) 8175 TARGET_ARCH=aarch64 8176 TARGET_BASE_ARCH=arm 8177 bflt="yes" 8178 mttcg="yes" 8179 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml" 8180 ;; 8181 avr) 8182 gdb_xml_files="avr-cpu.xml" 8183 target_compiler=$cross_cc_avr 8184 ;; 8185 cris) 8186 ;; 8187 hppa) 8188 mttcg="yes" 8189 TARGET_SYSTBL_ABI=common,32 8190 ;; 8191 lm32) 8192 ;; 8193 m68k) 8194 bflt="yes" 8195 gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml" 8196 TARGET_SYSTBL_ABI=common 8197 ;; 8198 microblaze|microblazeel) 8199 TARGET_ARCH=microblaze 8200 TARGET_SYSTBL_ABI=common 8201 bflt="yes" 8202 echo "TARGET_ABI32=y" >> $config_target_mak 8203 ;; 8204 mips|mipsel) 8205 mttcg="yes" 8206 TARGET_ARCH=mips 8207 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 8208 TARGET_SYSTBL_ABI=o32 8209 ;; 8210 mipsn32|mipsn32el) 8211 mttcg="yes" 8212 TARGET_ARCH=mips64 8213 TARGET_BASE_ARCH=mips 8214 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 8215 echo "TARGET_ABI32=y" >> $config_target_mak 8216 TARGET_SYSTBL_ABI=n32 8217 ;; 8218 mips64|mips64el) 8219 mttcg="no" 8220 TARGET_ARCH=mips64 8221 TARGET_BASE_ARCH=mips 8222 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 8223 TARGET_SYSTBL_ABI=n64 8224 ;; 8225 moxie) 8226 ;; 8227 nios2) 8228 ;; 8229 or1k) 8230 TARGET_ARCH=openrisc 8231 TARGET_BASE_ARCH=openrisc 8232 ;; 8233 ppc) 8234 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 8235 TARGET_SYSTBL_ABI=common,nospu,32 8236 ;; 8237 ppc64) 8238 TARGET_BASE_ARCH=ppc 8239 TARGET_ABI_DIR=ppc 8240 TARGET_SYSTBL_ABI=common,nospu,64 8241 mttcg=yes 8242 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 8243 ;; 8244 ppc64le) 8245 TARGET_ARCH=ppc64 8246 TARGET_BASE_ARCH=ppc 8247 TARGET_ABI_DIR=ppc 8248 TARGET_SYSTBL_ABI=common,nospu,64 8249 mttcg=yes 8250 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 8251 ;; 8252 ppc64abi32) 8253 TARGET_ARCH=ppc64 8254 TARGET_BASE_ARCH=ppc 8255 TARGET_ABI_DIR=ppc 8256 TARGET_SYSTBL_ABI=common,nospu,32 8257 echo "TARGET_ABI32=y" >> $config_target_mak 8258 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 8259 ;; 8260 riscv32) 8261 TARGET_BASE_ARCH=riscv 8262 TARGET_ABI_DIR=riscv 8263 mttcg=yes 8264 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml" 8265 ;; 8266 riscv64) 8267 TARGET_BASE_ARCH=riscv 8268 TARGET_ABI_DIR=riscv 8269 mttcg=yes 8270 gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml" 8271 ;; 8272 rx) 8273 TARGET_ARCH=rx 8274 bflt="yes" 8275 target_compiler=$cross_cc_rx 8276 gdb_xml_files="rx-core.xml" 8277 ;; 8278 sh4|sh4eb) 8279 TARGET_ARCH=sh4 8280 TARGET_SYSTBL_ABI=common 8281 bflt="yes" 8282 ;; 8283 sparc) 8284 TARGET_SYSTBL_ABI=common,32 8285 ;; 8286 sparc64) 8287 TARGET_BASE_ARCH=sparc 8288 TARGET_SYSTBL_ABI=common,64 8289 ;; 8290 sparc32plus) 8291 TARGET_ARCH=sparc64 8292 TARGET_BASE_ARCH=sparc 8293 TARGET_ABI_DIR=sparc 8294 TARGET_SYSTBL_ABI=common,32 8295 echo "TARGET_ABI32=y" >> $config_target_mak 8296 ;; 8297 s390x) 8298 TARGET_SYSTBL_ABI=common,64 8299 mttcg=yes 8300 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 8301 ;; 8302 tilegx) 8303 ;; 8304 tricore) 8305 ;; 8306 unicore32) 8307 ;; 8308 xtensa|xtensaeb) 8309 TARGET_ARCH=xtensa 8310 TARGET_SYSTBL_ABI=common 8311 bflt="yes" 8312 mttcg="yes" 8313 ;; 8314 *) 8315 error_exit "Unsupported target CPU" 8316 ;; 8317esac 8318# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 8319if [ "$TARGET_BASE_ARCH" = "" ]; then 8320 TARGET_BASE_ARCH=$TARGET_ARCH 8321fi 8322 8323symlink "$source_path/Makefile.target" "$target_dir/Makefile" 8324 8325upper() { 8326 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 8327} 8328 8329target_arch_name="$(upper $TARGET_ARCH)" 8330echo "TARGET_$target_arch_name=y" >> $config_target_mak 8331echo "TARGET_NAME=$target_name" >> $config_target_mak 8332echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 8333if [ "$TARGET_ABI_DIR" = "" ]; then 8334 TARGET_ABI_DIR=$TARGET_ARCH 8335fi 8336echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 8337if [ "$HOST_VARIANT_DIR" != "" ]; then 8338 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 8339fi 8340if [ "$TARGET_SYSTBL_ABI" != "" ]; then 8341 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak 8342fi 8343 8344if supported_xen_target $target; then 8345 echo "CONFIG_XEN=y" >> $config_target_mak 8346 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak 8347 if test "$xen_pci_passthrough" = yes; then 8348 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 8349 fi 8350else 8351 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak 8352fi 8353if supported_kvm_target $target; then 8354 echo "CONFIG_KVM=y" >> $config_target_mak 8355 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak 8356else 8357 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak 8358fi 8359if supported_hax_target $target; then 8360 echo "CONFIG_HAX=y" >> $config_target_mak 8361fi 8362if supported_hvf_target $target; then 8363 echo "CONFIG_HVF=y" >> $config_target_mak 8364fi 8365if supported_whpx_target $target; then 8366 echo "CONFIG_WHPX=y" >> $config_target_mak 8367fi 8368if test "$target_aligned_only" = "yes" ; then 8369 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak 8370fi 8371if test "$target_bigendian" = "yes" ; then 8372 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 8373fi 8374if test "$target_softmmu" = "yes" ; then 8375 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 8376 if test "$mttcg" = "yes" ; then 8377 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 8378 fi 8379fi 8380if test "$target_user_only" = "yes" ; then 8381 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 8382 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 8383fi 8384if test "$target_linux_user" = "yes" ; then 8385 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 8386fi 8387list="" 8388if test ! -z "$gdb_xml_files" ; then 8389 for x in $gdb_xml_files; do 8390 list="$list $source_path/gdb-xml/$x" 8391 done 8392 echo "TARGET_XML_FILES=$list" >> $config_target_mak 8393fi 8394 8395if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then 8396 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 8397fi 8398if test "$target_bsd_user" = "yes" ; then 8399 echo "CONFIG_BSD_USER=y" >> $config_target_mak 8400fi 8401 8402 8403# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets 8404 8405cflags="" 8406ldflags="" 8407 8408disas_config() { 8409 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 8410 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 8411} 8412 8413for i in $ARCH $TARGET_BASE_ARCH ; do 8414 case "$i" in 8415 alpha) 8416 disas_config "ALPHA" 8417 ;; 8418 aarch64) 8419 if test -n "${cxx}"; then 8420 disas_config "ARM_A64" 8421 fi 8422 ;; 8423 arm) 8424 disas_config "ARM" 8425 if test -n "${cxx}"; then 8426 disas_config "ARM_A64" 8427 fi 8428 ;; 8429 avr) 8430 disas_config "AVR" 8431 ;; 8432 cris) 8433 disas_config "CRIS" 8434 ;; 8435 hppa) 8436 disas_config "HPPA" 8437 ;; 8438 i386|x86_64|x32) 8439 disas_config "I386" 8440 ;; 8441 lm32) 8442 disas_config "LM32" 8443 ;; 8444 m68k) 8445 disas_config "M68K" 8446 ;; 8447 microblaze*) 8448 disas_config "MICROBLAZE" 8449 ;; 8450 mips*) 8451 disas_config "MIPS" 8452 if test -n "${cxx}"; then 8453 disas_config "NANOMIPS" 8454 fi 8455 ;; 8456 moxie*) 8457 disas_config "MOXIE" 8458 ;; 8459 nios2) 8460 disas_config "NIOS2" 8461 ;; 8462 or1k) 8463 disas_config "OPENRISC" 8464 ;; 8465 ppc*) 8466 disas_config "PPC" 8467 ;; 8468 riscv*) 8469 disas_config "RISCV" 8470 ;; 8471 rx) 8472 disas_config "RX" 8473 ;; 8474 s390*) 8475 disas_config "S390" 8476 ;; 8477 sh4) 8478 disas_config "SH4" 8479 ;; 8480 sparc*) 8481 disas_config "SPARC" 8482 ;; 8483 xtensa*) 8484 disas_config "XTENSA" 8485 ;; 8486 esac 8487done 8488if test "$tcg_interpreter" = "yes" ; then 8489 disas_config "TCI" 8490fi 8491 8492case "$ARCH" in 8493alpha) 8494 # Ensure there's only a single GP 8495 cflags="-msmall-data $cflags" 8496;; 8497esac 8498 8499if test "$gprof" = "yes" ; then 8500 if test "$target_linux_user" = "yes" ; then 8501 cflags="-p $cflags" 8502 ldflags="-p $ldflags" 8503 fi 8504 if test "$target_softmmu" = "yes" ; then 8505 ldflags="-p $ldflags" 8506 echo "GPROF_CFLAGS=-p" >> $config_target_mak 8507 fi 8508fi 8509 8510# Newer kernels on s390 check for an S390_PGSTE program header and 8511# enable the pgste page table extensions in that case. This makes 8512# the vm.allocate_pgste sysctl unnecessary. We enable this program 8513# header if 8514# - we build on s390x 8515# - we build the system emulation for s390x (qemu-system-s390x) 8516# - KVM is enabled 8517# - the linker supports --s390-pgste 8518if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \ 8519 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then 8520 if ld_has --s390-pgste ; then 8521 ldflags="-Wl,--s390-pgste $ldflags" 8522 fi 8523fi 8524 8525echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak 8526echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 8527 8528done # for target in $targets 8529 8530echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak 8531echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak 8532 8533if [ "$fdt" = "git" ]; then 8534 echo "config-host.h: dtc/all" >> $config_host_mak 8535fi 8536if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 8537 echo "config-host.h: capstone/all" >> $config_host_mak 8538fi 8539if test -n "$LIBCAPSTONE"; then 8540 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 8541fi 8542 8543if test "$numa" = "yes"; then 8544 echo "CONFIG_NUMA=y" >> $config_host_mak 8545fi 8546 8547if test "$ccache_cpp2" = "yes"; then 8548 echo "export CCACHE_CPP2=y" >> $config_host_mak 8549fi 8550 8551if test "$safe_stack" = "yes"; then 8552 echo "CONFIG_SAFESTACK=y" >> $config_host_mak 8553fi 8554 8555# If we're using a separate build tree, set it up now. 8556# DIRS are directories which we simply mkdir in the build tree; 8557# LINKS are things to symlink back into the source tree 8558# (these can be both files and directories). 8559# Caution: do not add files or directories here using wildcards. This 8560# will result in problems later if a new file matching the wildcard is 8561# added to the source tree -- nothing will cause configure to be rerun 8562# so the build tree will be missing the link back to the new file, and 8563# tests might fail. Prefer to keep the relevant files in their own 8564# directory and symlink the directory instead. 8565DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" 8566DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 8567DIRS="$DIRS docs docs/interop fsdev scsi" 8568DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 8569DIRS="$DIRS roms/seabios" 8570LINKS="Makefile" 8571LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile" 8572LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile" 8573LINKS="$LINKS tests/plugin/Makefile" 8574LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps" 8575LINKS="$LINKS pc-bios/s390-ccw/Makefile" 8576LINKS="$LINKS roms/seabios/Makefile" 8577LINKS="$LINKS pc-bios/qemu-icon.bmp" 8578LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 8579LINKS="$LINKS tests/acceptance tests/data" 8580LINKS="$LINKS tests/qemu-iotests/check" 8581LINKS="$LINKS python" 8582for bios_file in \ 8583 $source_path/pc-bios/*.bin \ 8584 $source_path/pc-bios/*.lid \ 8585 $source_path/pc-bios/*.rom \ 8586 $source_path/pc-bios/*.dtb \ 8587 $source_path/pc-bios/*.img \ 8588 $source_path/pc-bios/openbios-* \ 8589 $source_path/pc-bios/u-boot.* \ 8590 $source_path/pc-bios/edk2-*.fd.bz2 \ 8591 $source_path/pc-bios/palcode-* 8592do 8593 LINKS="$LINKS pc-bios/$(basename $bios_file)" 8594done 8595mkdir -p $DIRS 8596for f in $LINKS ; do 8597 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 8598 symlink "$source_path/$f" "$f" 8599 fi 8600done 8601 8602(for i in $cross_cc_vars; do 8603 export $i 8604done 8605export target_list source_path use_containers 8606$source_path/tests/tcg/configure.sh) 8607 8608# temporary config to build submodules 8609for rom in seabios; do 8610 config_mak=roms/$rom/config.mak 8611 echo "# Automatically generated by configure - do not modify" > $config_mak 8612 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 8613 echo "AS=$as" >> $config_mak 8614 echo "CCAS=$ccas" >> $config_mak 8615 echo "CC=$cc" >> $config_mak 8616 echo "BCC=bcc" >> $config_mak 8617 echo "CPP=$cpp" >> $config_mak 8618 echo "OBJCOPY=objcopy" >> $config_mak 8619 echo "IASL=$iasl" >> $config_mak 8620 echo "LD=$ld" >> $config_mak 8621 echo "RANLIB=$ranlib" >> $config_mak 8622done 8623 8624# set up qemu-iotests in this build directory 8625iotests_common_env="tests/qemu-iotests/common.env" 8626 8627echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 8628echo >> "$iotests_common_env" 8629echo "export PYTHON='$python'" >> "$iotests_common_env" 8630 8631# Save the configure command line for later reuse. 8632cat <<EOD >config.status 8633#!/bin/sh 8634# Generated by configure. 8635# Run this file to recreate the current configuration. 8636# Compiler output produced by configure, useful for debugging 8637# configure, is in config.log if it exists. 8638EOD 8639 8640preserve_env() { 8641 envname=$1 8642 8643 eval envval=\$$envname 8644 8645 if test -n "$envval" 8646 then 8647 echo "$envname='$envval'" >> config.status 8648 echo "export $envname" >> config.status 8649 else 8650 echo "unset $envname" >> config.status 8651 fi 8652} 8653 8654# Preserve various env variables that influence what 8655# features/build target configure will detect 8656preserve_env AR 8657preserve_env AS 8658preserve_env CC 8659preserve_env CPP 8660preserve_env CXX 8661preserve_env INSTALL 8662preserve_env LD 8663preserve_env LD_LIBRARY_PATH 8664preserve_env LIBTOOL 8665preserve_env MAKE 8666preserve_env NM 8667preserve_env OBJCOPY 8668preserve_env PATH 8669preserve_env PKG_CONFIG 8670preserve_env PKG_CONFIG_LIBDIR 8671preserve_env PKG_CONFIG_PATH 8672preserve_env PYTHON 8673preserve_env SDL2_CONFIG 8674preserve_env SMBD 8675preserve_env STRIP 8676preserve_env WINDRES 8677 8678printf "exec" >>config.status 8679printf " '%s'" "$0" "$@" >>config.status 8680echo ' "$@"' >>config.status 8681chmod +x config.status 8682 8683rm -r "$TMPDIR1" 8684