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 $QEMU_CFLAGS" 908 LIBS="-lposix_error_mapper -lnetwork $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 2405######################################### 2406# vhost interdependencies and host support 2407 2408# vhost backends 2409test "$vhost_user" = "" && vhost_user=yes 2410if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then 2411 error_exit "vhost-user isn't available on win32" 2412fi 2413test "$vhost_vdpa" = "" && vhost_vdpa=$linux 2414if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then 2415 error_exit "vhost-vdpa is only available on Linux" 2416fi 2417test "$vhost_kernel" = "" && vhost_kernel=$linux 2418if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then 2419 error_exit "vhost-kernel is only available on Linux" 2420fi 2421 2422# vhost-kernel devices 2423test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel 2424if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then 2425 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel" 2426fi 2427test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel 2428if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then 2429 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel" 2430fi 2431 2432# vhost-user backends 2433test "$vhost_net_user" = "" && vhost_net_user=$vhost_user 2434if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then 2435 error_exit "--enable-vhost-net-user requires --enable-vhost-user" 2436fi 2437test "$vhost_crypto" = "" && vhost_crypto=$vhost_user 2438if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then 2439 error_exit "--enable-vhost-crypto requires --enable-vhost-user" 2440fi 2441test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user 2442if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then 2443 error_exit "--enable-vhost-user-fs requires --enable-vhost-user" 2444fi 2445#vhost-vdpa backends 2446test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa 2447if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then 2448 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa" 2449fi 2450 2451# OR the vhost-kernel and vhost-user values for simplicity 2452if test "$vhost_net" = ""; then 2453 test "$vhost_net_user" = "yes" && vhost_net=yes 2454 test "$vhost_kernel" = "yes" && vhost_net=yes 2455fi 2456 2457########################################## 2458# MinGW / Mingw-w64 localtime_r/gmtime_r check 2459 2460if test "$mingw32" = "yes"; then 2461 # Some versions of MinGW / Mingw-w64 lack localtime_r 2462 # and gmtime_r entirely. 2463 # 2464 # Some versions of Mingw-w64 define a macro for 2465 # localtime_r/gmtime_r. 2466 # 2467 # Some versions of Mingw-w64 will define functions 2468 # for localtime_r/gmtime_r, but only if you have 2469 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun 2470 # though, unistd.h and pthread.h both define 2471 # that for you. 2472 # 2473 # So this #undef localtime_r and #include <unistd.h> 2474 # are not in fact redundant. 2475cat > $TMPC << EOF 2476#include <unistd.h> 2477#include <time.h> 2478#undef localtime_r 2479int main(void) { localtime_r(NULL, NULL); return 0; } 2480EOF 2481 if compile_prog "" "" ; then 2482 localtime_r="yes" 2483 else 2484 localtime_r="no" 2485 fi 2486fi 2487 2488########################################## 2489# pkg-config probe 2490 2491if ! has "$pkg_config_exe"; then 2492 error_exit "pkg-config binary '$pkg_config_exe' not found" 2493fi 2494 2495########################################## 2496# NPTL probe 2497 2498if test "$linux_user" = "yes"; then 2499 cat > $TMPC <<EOF 2500#include <sched.h> 2501#include <linux/futex.h> 2502int main(void) { 2503#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) 2504#error bork 2505#endif 2506 return 0; 2507} 2508EOF 2509 if ! compile_object ; then 2510 feature_not_found "nptl" "Install glibc and linux kernel headers." 2511 fi 2512fi 2513 2514########################################## 2515# lzo check 2516 2517if test "$lzo" != "no" ; then 2518 cat > $TMPC << EOF 2519#include <lzo/lzo1x.h> 2520int main(void) { lzo_version(); return 0; } 2521EOF 2522 if compile_prog "" "-llzo2" ; then 2523 libs_softmmu="$libs_softmmu -llzo2" 2524 lzo="yes" 2525 else 2526 if test "$lzo" = "yes"; then 2527 feature_not_found "liblzo2" "Install liblzo2 devel" 2528 fi 2529 lzo="no" 2530 fi 2531fi 2532 2533########################################## 2534# snappy check 2535 2536if test "$snappy" != "no" ; then 2537 cat > $TMPC << EOF 2538#include <snappy-c.h> 2539int main(void) { snappy_max_compressed_length(4096); return 0; } 2540EOF 2541 if compile_prog "" "-lsnappy" ; then 2542 libs_softmmu="$libs_softmmu -lsnappy" 2543 snappy="yes" 2544 else 2545 if test "$snappy" = "yes"; then 2546 feature_not_found "libsnappy" "Install libsnappy devel" 2547 fi 2548 snappy="no" 2549 fi 2550fi 2551 2552########################################## 2553# bzip2 check 2554 2555if test "$bzip2" != "no" ; then 2556 cat > $TMPC << EOF 2557#include <bzlib.h> 2558int main(void) { BZ2_bzlibVersion(); return 0; } 2559EOF 2560 if compile_prog "" "-lbz2" ; then 2561 bzip2="yes" 2562 else 2563 if test "$bzip2" = "yes"; then 2564 feature_not_found "libbzip2" "Install libbzip2 devel" 2565 fi 2566 bzip2="no" 2567 fi 2568fi 2569 2570########################################## 2571# lzfse check 2572 2573if test "$lzfse" != "no" ; then 2574 cat > $TMPC << EOF 2575#include <lzfse.h> 2576int main(void) { lzfse_decode_scratch_size(); return 0; } 2577EOF 2578 if compile_prog "" "-llzfse" ; then 2579 lzfse="yes" 2580 else 2581 if test "$lzfse" = "yes"; then 2582 feature_not_found "lzfse" "Install lzfse devel" 2583 fi 2584 lzfse="no" 2585 fi 2586fi 2587 2588########################################## 2589# zstd check 2590 2591if test "$zstd" != "no" ; then 2592 libzstd_minver="1.4.0" 2593 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then 2594 zstd_cflags="$($pkg_config --cflags libzstd)" 2595 zstd_libs="$($pkg_config --libs libzstd)" 2596 LIBS="$zstd_libs $LIBS" 2597 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags" 2598 zstd="yes" 2599 else 2600 if test "$zstd" = "yes" ; then 2601 feature_not_found "libzstd" "Install libzstd devel" 2602 fi 2603 zstd="no" 2604 fi 2605fi 2606 2607########################################## 2608# libseccomp check 2609 2610if test "$seccomp" != "no" ; then 2611 libseccomp_minver="2.3.0" 2612 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then 2613 seccomp_cflags="$($pkg_config --cflags libseccomp)" 2614 seccomp_libs="$($pkg_config --libs libseccomp)" 2615 seccomp="yes" 2616 else 2617 if test "$seccomp" = "yes" ; then 2618 feature_not_found "libseccomp" \ 2619 "Install libseccomp devel >= $libseccomp_minver" 2620 fi 2621 seccomp="no" 2622 fi 2623fi 2624########################################## 2625# xen probe 2626 2627if test "$xen" != "no" ; then 2628 # Check whether Xen library path is specified via --extra-ldflags to avoid 2629 # overriding this setting with pkg-config output. If not, try pkg-config 2630 # to obtain all needed flags. 2631 2632 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 2633 $pkg_config --exists xencontrol ; then 2634 xen_ctrl_version="$(printf '%d%02d%02d' \ 2635 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 2636 xen=yes 2637 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab" 2638 xen_pc="$xen_pc xenevtchn xendevicemodel" 2639 if $pkg_config --exists xentoolcore; then 2640 xen_pc="$xen_pc xentoolcore" 2641 fi 2642 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)" 2643 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu" 2644 else 2645 2646 xen_libs="-lxenstore -lxenctrl -lxenguest" 2647 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 2648 2649 # First we test whether Xen headers and libraries are available. 2650 # If no, we are done and there is no Xen support. 2651 # If yes, more tests are run to detect the Xen version. 2652 2653 # Xen (any) 2654 cat > $TMPC <<EOF 2655#include <xenctrl.h> 2656int main(void) { 2657 return 0; 2658} 2659EOF 2660 if ! compile_prog "" "$xen_libs" ; then 2661 # Xen not found 2662 if test "$xen" = "yes" ; then 2663 feature_not_found "xen" "Install xen devel" 2664 fi 2665 xen=no 2666 2667 # Xen unstable 2668 elif 2669 cat > $TMPC <<EOF && 2670#undef XC_WANT_COMPAT_DEVICEMODEL_API 2671#define __XEN_TOOLS__ 2672#include <xendevicemodel.h> 2673#include <xenforeignmemory.h> 2674int main(void) { 2675 xendevicemodel_handle *xd; 2676 xenforeignmemory_handle *xfmem; 2677 2678 xd = xendevicemodel_open(0, 0); 2679 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); 2680 2681 xfmem = xenforeignmemory_open(0, 0); 2682 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); 2683 2684 return 0; 2685} 2686EOF 2687 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2688 then 2689 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2690 xen_ctrl_version=41100 2691 xen=yes 2692 elif 2693 cat > $TMPC <<EOF && 2694#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2695#include <xenforeignmemory.h> 2696#include <xentoolcore.h> 2697int main(void) { 2698 xenforeignmemory_handle *xfmem; 2699 2700 xfmem = xenforeignmemory_open(0, 0); 2701 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 2702 xentoolcore_restrict_all(0); 2703 2704 return 0; 2705} 2706EOF 2707 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2708 then 2709 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2710 xen_ctrl_version=41000 2711 xen=yes 2712 elif 2713 cat > $TMPC <<EOF && 2714#undef XC_WANT_COMPAT_DEVICEMODEL_API 2715#define __XEN_TOOLS__ 2716#include <xendevicemodel.h> 2717int main(void) { 2718 xendevicemodel_handle *xd; 2719 2720 xd = xendevicemodel_open(0, 0); 2721 xendevicemodel_close(xd); 2722 2723 return 0; 2724} 2725EOF 2726 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2727 then 2728 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2729 xen_ctrl_version=40900 2730 xen=yes 2731 elif 2732 cat > $TMPC <<EOF && 2733/* 2734 * If we have stable libs the we don't want the libxc compat 2735 * layers, regardless of what CFLAGS we may have been given. 2736 * 2737 * Also, check if xengnttab_grant_copy_segment_t is defined and 2738 * grant copy operation is implemented. 2739 */ 2740#undef XC_WANT_COMPAT_EVTCHN_API 2741#undef XC_WANT_COMPAT_GNTTAB_API 2742#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2743#include <xenctrl.h> 2744#include <xenstore.h> 2745#include <xenevtchn.h> 2746#include <xengnttab.h> 2747#include <xenforeignmemory.h> 2748#include <stdint.h> 2749#include <xen/hvm/hvm_info_table.h> 2750#if !defined(HVM_MAX_VCPUS) 2751# error HVM_MAX_VCPUS not defined 2752#endif 2753int main(void) { 2754 xc_interface *xc = NULL; 2755 xenforeignmemory_handle *xfmem; 2756 xenevtchn_handle *xe; 2757 xengnttab_handle *xg; 2758 xengnttab_grant_copy_segment_t* seg = NULL; 2759 2760 xs_daemon_open(); 2761 2762 xc = xc_interface_open(0, 0, 0); 2763 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2764 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2765 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2766 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2767 2768 xfmem = xenforeignmemory_open(0, 0); 2769 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2770 2771 xe = xenevtchn_open(0, 0); 2772 xenevtchn_fd(xe); 2773 2774 xg = xengnttab_open(0, 0); 2775 xengnttab_grant_copy(xg, 0, seg); 2776 2777 return 0; 2778} 2779EOF 2780 compile_prog "" "$xen_libs $xen_stable_libs" 2781 then 2782 xen_ctrl_version=40800 2783 xen=yes 2784 elif 2785 cat > $TMPC <<EOF && 2786/* 2787 * If we have stable libs the we don't want the libxc compat 2788 * layers, regardless of what CFLAGS we may have been given. 2789 */ 2790#undef XC_WANT_COMPAT_EVTCHN_API 2791#undef XC_WANT_COMPAT_GNTTAB_API 2792#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2793#include <xenctrl.h> 2794#include <xenstore.h> 2795#include <xenevtchn.h> 2796#include <xengnttab.h> 2797#include <xenforeignmemory.h> 2798#include <stdint.h> 2799#include <xen/hvm/hvm_info_table.h> 2800#if !defined(HVM_MAX_VCPUS) 2801# error HVM_MAX_VCPUS not defined 2802#endif 2803int main(void) { 2804 xc_interface *xc = NULL; 2805 xenforeignmemory_handle *xfmem; 2806 xenevtchn_handle *xe; 2807 xengnttab_handle *xg; 2808 2809 xs_daemon_open(); 2810 2811 xc = xc_interface_open(0, 0, 0); 2812 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2813 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2814 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2815 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2816 2817 xfmem = xenforeignmemory_open(0, 0); 2818 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2819 2820 xe = xenevtchn_open(0, 0); 2821 xenevtchn_fd(xe); 2822 2823 xg = xengnttab_open(0, 0); 2824 xengnttab_map_grant_ref(xg, 0, 0, 0); 2825 2826 return 0; 2827} 2828EOF 2829 compile_prog "" "$xen_libs $xen_stable_libs" 2830 then 2831 xen_ctrl_version=40701 2832 xen=yes 2833 2834 # Xen 4.6 2835 elif 2836 cat > $TMPC <<EOF && 2837#include <xenctrl.h> 2838#include <xenstore.h> 2839#include <stdint.h> 2840#include <xen/hvm/hvm_info_table.h> 2841#if !defined(HVM_MAX_VCPUS) 2842# error HVM_MAX_VCPUS not defined 2843#endif 2844int main(void) { 2845 xc_interface *xc; 2846 xs_daemon_open(); 2847 xc = xc_interface_open(0, 0, 0); 2848 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2849 xc_gnttab_open(NULL, 0); 2850 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2851 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2852 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2853 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2854 return 0; 2855} 2856EOF 2857 compile_prog "" "$xen_libs" 2858 then 2859 xen_ctrl_version=40600 2860 xen=yes 2861 2862 # Xen 4.5 2863 elif 2864 cat > $TMPC <<EOF && 2865#include <xenctrl.h> 2866#include <xenstore.h> 2867#include <stdint.h> 2868#include <xen/hvm/hvm_info_table.h> 2869#if !defined(HVM_MAX_VCPUS) 2870# error HVM_MAX_VCPUS not defined 2871#endif 2872int main(void) { 2873 xc_interface *xc; 2874 xs_daemon_open(); 2875 xc = xc_interface_open(0, 0, 0); 2876 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2877 xc_gnttab_open(NULL, 0); 2878 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2879 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2880 xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 2881 return 0; 2882} 2883EOF 2884 compile_prog "" "$xen_libs" 2885 then 2886 xen_ctrl_version=40500 2887 xen=yes 2888 2889 elif 2890 cat > $TMPC <<EOF && 2891#include <xenctrl.h> 2892#include <xenstore.h> 2893#include <stdint.h> 2894#include <xen/hvm/hvm_info_table.h> 2895#if !defined(HVM_MAX_VCPUS) 2896# error HVM_MAX_VCPUS not defined 2897#endif 2898int main(void) { 2899 xc_interface *xc; 2900 xs_daemon_open(); 2901 xc = xc_interface_open(0, 0, 0); 2902 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2903 xc_gnttab_open(NULL, 0); 2904 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2905 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2906 return 0; 2907} 2908EOF 2909 compile_prog "" "$xen_libs" 2910 then 2911 xen_ctrl_version=40200 2912 xen=yes 2913 2914 else 2915 if test "$xen" = "yes" ; then 2916 feature_not_found "xen (unsupported version)" \ 2917 "Install a supported xen (xen 4.2 or newer)" 2918 fi 2919 xen=no 2920 fi 2921 2922 if test "$xen" = yes; then 2923 if test $xen_ctrl_version -ge 40701 ; then 2924 libs_softmmu="$xen_stable_libs $libs_softmmu" 2925 fi 2926 libs_softmmu="$xen_libs $libs_softmmu" 2927 fi 2928 fi 2929fi 2930 2931if test "$xen_pci_passthrough" != "no"; then 2932 if test "$xen" = "yes" && test "$linux" = "yes"; then 2933 xen_pci_passthrough=yes 2934 else 2935 if test "$xen_pci_passthrough" = "yes"; then 2936 error_exit "User requested feature Xen PCI Passthrough" \ 2937 " but this feature requires /sys from Linux" 2938 fi 2939 xen_pci_passthrough=no 2940 fi 2941fi 2942 2943########################################## 2944# Windows Hypervisor Platform accelerator (WHPX) check 2945if test "$whpx" != "no" ; then 2946 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then 2947 whpx="yes" 2948 else 2949 if test "$whpx" = "yes"; then 2950 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed" 2951 fi 2952 whpx="no" 2953 fi 2954fi 2955 2956########################################## 2957# Sparse probe 2958if test "$sparse" != "no" ; then 2959 if has cgcc; then 2960 sparse=yes 2961 else 2962 if test "$sparse" = "yes" ; then 2963 feature_not_found "sparse" "Install sparse binary" 2964 fi 2965 sparse=no 2966 fi 2967fi 2968 2969########################################## 2970# X11 probe 2971if $pkg_config --exists "x11"; then 2972 have_x11=yes 2973 x11_cflags=$($pkg_config --cflags x11) 2974 x11_libs=$($pkg_config --libs x11) 2975fi 2976 2977########################################## 2978# GTK probe 2979 2980if test "$gtk" != "no"; then 2981 gtkpackage="gtk+-3.0" 2982 gtkx11package="gtk+-x11-3.0" 2983 gtkversion="3.22.0" 2984 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then 2985 gtk_cflags=$($pkg_config --cflags $gtkpackage) 2986 gtk_libs=$($pkg_config --libs $gtkpackage) 2987 gtk_version=$($pkg_config --modversion $gtkpackage) 2988 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then 2989 need_x11=yes 2990 gtk_cflags="$gtk_cflags $x11_cflags" 2991 gtk_libs="$gtk_libs $x11_libs" 2992 fi 2993 gtk="yes" 2994 elif test "$gtk" = "yes"; then 2995 feature_not_found "gtk" "Install gtk3-devel" 2996 else 2997 gtk="no" 2998 fi 2999fi 3000 3001 3002########################################## 3003# GNUTLS probe 3004 3005if test "$gnutls" != "no"; then 3006 pass="no" 3007 if $pkg_config --exists "gnutls >= 3.1.18"; then 3008 gnutls_cflags=$($pkg_config --cflags gnutls) 3009 gnutls_libs=$($pkg_config --libs gnutls) 3010 # Packaging for the static libraries is not always correct. 3011 # At least ubuntu 18.04 ships only shared libraries. 3012 write_c_skeleton 3013 if compile_prog "" "$gnutls_libs" ; then 3014 LIBS="$gnutls_libs $LIBS" 3015 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags" 3016 pass="yes" 3017 fi 3018 fi 3019 if test "$pass" = "no" && test "$gnutls" = "yes"; then 3020 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18" 3021 else 3022 gnutls="$pass" 3023 fi 3024fi 3025 3026 3027# If user didn't give a --disable/enable-gcrypt flag, 3028# then mark as disabled if user requested nettle 3029# explicitly 3030if test -z "$gcrypt" 3031then 3032 if test "$nettle" = "yes" 3033 then 3034 gcrypt="no" 3035 fi 3036fi 3037 3038# If user didn't give a --disable/enable-nettle flag, 3039# then mark as disabled if user requested gcrypt 3040# explicitly 3041if test -z "$nettle" 3042then 3043 if test "$gcrypt" = "yes" 3044 then 3045 nettle="no" 3046 fi 3047fi 3048 3049has_libgcrypt() { 3050 if ! has "libgcrypt-config" 3051 then 3052 return 1 3053 fi 3054 3055 if test -n "$cross_prefix" 3056 then 3057 host=$(libgcrypt-config --host) 3058 if test "$host-" != $cross_prefix 3059 then 3060 return 1 3061 fi 3062 fi 3063 3064 maj=`libgcrypt-config --version | awk -F . '{print $1}'` 3065 min=`libgcrypt-config --version | awk -F . '{print $2}'` 3066 3067 if test $maj != 1 || test $min -lt 5 3068 then 3069 return 1 3070 fi 3071 3072 return 0 3073} 3074 3075 3076if test "$nettle" != "no"; then 3077 pass="no" 3078 if $pkg_config --exists "nettle >= 2.7.1"; then 3079 nettle_cflags=$($pkg_config --cflags nettle) 3080 nettle_libs=$($pkg_config --libs nettle) 3081 nettle_version=$($pkg_config --modversion nettle) 3082 # Link test to make sure the given libraries work (e.g for static). 3083 write_c_skeleton 3084 if compile_prog "" "$nettle_libs" ; then 3085 LIBS="$nettle_libs $LIBS" 3086 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags" 3087 if test -z "$gcrypt"; then 3088 gcrypt="no" 3089 fi 3090 pass="yes" 3091 fi 3092 fi 3093 if test "$pass" = "yes" 3094 then 3095 cat > $TMPC << EOF 3096#include <nettle/xts.h> 3097int main(void) { 3098 return 0; 3099} 3100EOF 3101 if compile_prog "$nettle_cflags" "$nettle_libs" ; then 3102 nettle_xts=yes 3103 qemu_private_xts=no 3104 fi 3105 fi 3106 if test "$pass" = "no" && test "$nettle" = "yes"; then 3107 feature_not_found "nettle" "Install nettle devel >= 2.7.1" 3108 else 3109 nettle="$pass" 3110 fi 3111fi 3112 3113if test "$gcrypt" != "no"; then 3114 pass="no" 3115 if has_libgcrypt; then 3116 gcrypt_cflags=$(libgcrypt-config --cflags) 3117 gcrypt_libs=$(libgcrypt-config --libs) 3118 # Debian has removed -lgpg-error from libgcrypt-config 3119 # as it "spreads unnecessary dependencies" which in 3120 # turn breaks static builds... 3121 if test "$static" = "yes" 3122 then 3123 gcrypt_libs="$gcrypt_libs -lgpg-error" 3124 fi 3125 3126 # Link test to make sure the given libraries work (e.g for static). 3127 write_c_skeleton 3128 if compile_prog "" "$gcrypt_libs" ; then 3129 LIBS="$gcrypt_libs $LIBS" 3130 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags" 3131 pass="yes" 3132 fi 3133 fi 3134 if test "$pass" = "yes"; then 3135 gcrypt="yes" 3136 cat > $TMPC << EOF 3137#include <gcrypt.h> 3138int main(void) { 3139 gcry_mac_hd_t handle; 3140 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5, 3141 GCRY_MAC_FLAG_SECURE, NULL); 3142 return 0; 3143} 3144EOF 3145 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 3146 gcrypt_hmac=yes 3147 fi 3148 cat > $TMPC << EOF 3149#include <gcrypt.h> 3150int main(void) { 3151 gcry_cipher_hd_t handle; 3152 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0); 3153 return 0; 3154} 3155EOF 3156 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 3157 gcrypt_xts=yes 3158 qemu_private_xts=no 3159 fi 3160 elif test "$gcrypt" = "yes"; then 3161 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0" 3162 else 3163 gcrypt="no" 3164 fi 3165fi 3166 3167 3168if test "$gcrypt" = "yes" && test "$nettle" = "yes" 3169then 3170 error_exit "Only one of gcrypt & nettle can be enabled" 3171fi 3172 3173########################################## 3174# libtasn1 - only for the TLS creds/session test suite 3175 3176tasn1=yes 3177tasn1_cflags="" 3178tasn1_libs="" 3179if $pkg_config --exists "libtasn1"; then 3180 tasn1_cflags=$($pkg_config --cflags libtasn1) 3181 tasn1_libs=$($pkg_config --libs libtasn1) 3182else 3183 tasn1=no 3184fi 3185 3186 3187########################################## 3188# PAM probe 3189 3190if test "$auth_pam" != "no"; then 3191 cat > $TMPC <<EOF 3192#include <security/pam_appl.h> 3193#include <stdio.h> 3194int main(void) { 3195 const char *service_name = "qemu"; 3196 const char *user = "frank"; 3197 const struct pam_conv pam_conv = { 0 }; 3198 pam_handle_t *pamh = NULL; 3199 pam_start(service_name, user, &pam_conv, &pamh); 3200 return 0; 3201} 3202EOF 3203 if compile_prog "" "-lpam" ; then 3204 auth_pam=yes 3205 else 3206 if test "$auth_pam" = "yes"; then 3207 feature_not_found "PAM" "Install PAM development package" 3208 else 3209 auth_pam=no 3210 fi 3211 fi 3212fi 3213 3214########################################## 3215# getifaddrs (for tests/test-io-channel-socket ) 3216 3217have_ifaddrs_h=yes 3218if ! check_include "ifaddrs.h" ; then 3219 have_ifaddrs_h=no 3220fi 3221 3222######################################### 3223# libdrm check 3224have_drm_h=no 3225if check_include "libdrm/drm.h" ; then 3226 have_drm_h=yes 3227fi 3228 3229########################################## 3230# VTE probe 3231 3232if test "$vte" != "no"; then 3233 vteminversion="0.32.0" 3234 if $pkg_config --exists "vte-2.91"; then 3235 vtepackage="vte-2.91" 3236 else 3237 vtepackage="vte-2.90" 3238 fi 3239 if $pkg_config --exists "$vtepackage >= $vteminversion"; then 3240 vte_cflags=$($pkg_config --cflags $vtepackage) 3241 vte_libs=$($pkg_config --libs $vtepackage) 3242 vteversion=$($pkg_config --modversion $vtepackage) 3243 vte="yes" 3244 elif test "$vte" = "yes"; then 3245 feature_not_found "vte" "Install libvte-2.90/2.91 devel" 3246 else 3247 vte="no" 3248 fi 3249fi 3250 3251########################################## 3252# SDL probe 3253 3254# Look for sdl configuration program (pkg-config or sdl2-config). Try 3255# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config. 3256 3257sdl_probe () 3258{ 3259 if $pkg_config sdl2 --exists; then 3260 sdlconfig="$pkg_config sdl2" 3261 sdlversion=$($sdlconfig --modversion 2>/dev/null) 3262 elif has "$sdl2_config"; then 3263 sdlconfig="$sdl2_config" 3264 sdlversion=$($sdlconfig --version) 3265 else 3266 if test "$sdl" = "yes" ; then 3267 feature_not_found "sdl" "Install SDL2-devel" 3268 fi 3269 sdl=no 3270 # no need to do the rest 3271 return 3272 fi 3273 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then 3274 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2 3275 fi 3276 3277 cat > $TMPC << EOF 3278#include <SDL.h> 3279#undef main /* We don't want SDL to override our main() */ 3280int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } 3281EOF 3282 sdl_cflags=$($sdlconfig --cflags 2>/dev/null) 3283 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug 3284 if test "$static" = "yes" ; then 3285 if $pkg_config sdl2 --exists; then 3286 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null) 3287 else 3288 sdl_libs=$($sdlconfig --static-libs 2>/dev/null) 3289 fi 3290 else 3291 sdl_libs=$($sdlconfig --libs 2>/dev/null) 3292 fi 3293 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 3294 sdl=yes 3295 3296 # static link with sdl ? (note: sdl.pc's --static --libs is broken) 3297 if test "$sdl" = "yes" && test "$static" = "yes" ; then 3298 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then 3299 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)" 3300 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)" 3301 fi 3302 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 3303 : 3304 else 3305 sdl=no 3306 fi 3307 fi # static link 3308 else # sdl not found 3309 if test "$sdl" = "yes" ; then 3310 feature_not_found "sdl" "Install SDL2 devel" 3311 fi 3312 sdl=no 3313 fi # sdl compile test 3314} 3315 3316sdl_image_probe () 3317{ 3318 if test "$sdl_image" != "no" ; then 3319 if $pkg_config SDL2_image --exists; then 3320 if test "$static" = "yes"; then 3321 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null) 3322 else 3323 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null) 3324 fi 3325 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null) 3326 sdl_image=yes 3327 3328 sdl_cflags="$sdl_cflags $sdl_image_cflags" 3329 sdl_libs="$sdl_libs $sdl_image_libs" 3330 else 3331 if test "$sdl_image" = "yes" ; then 3332 feature_not_found "sdl_image" "Install SDL Image devel" 3333 else 3334 sdl_image=no 3335 fi 3336 fi 3337 fi 3338} 3339 3340if test "$sdl" != "no" ; then 3341 sdl_probe 3342fi 3343 3344if test "$sdl" = "yes" ; then 3345 sdl_image_probe 3346else 3347 if test "$sdl_image" = "yes"; then 3348 echo "warning: SDL Image requested, but SDL is not available, disabling" 3349 fi 3350 sdl_image=no 3351fi 3352 3353if test "$sdl" = "yes" ; then 3354 cat > $TMPC <<EOF 3355#include <SDL.h> 3356#if defined(SDL_VIDEO_DRIVER_X11) 3357#include <X11/XKBlib.h> 3358#else 3359#error No x11 support 3360#endif 3361int main(void) { return 0; } 3362EOF 3363 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then 3364 need_x11=yes 3365 sdl_cflags="$sdl_cflags $x11_cflags" 3366 sdl_libs="$sdl_libs $x11_libs" 3367 fi 3368fi 3369 3370########################################## 3371# RDMA needs OpenFabrics libraries 3372if test "$rdma" != "no" ; then 3373 cat > $TMPC <<EOF 3374#include <rdma/rdma_cma.h> 3375int main(void) { return 0; } 3376EOF 3377 rdma_libs="-lrdmacm -libverbs -libumad" 3378 if compile_prog "" "$rdma_libs" ; then 3379 rdma="yes" 3380 libs_softmmu="$libs_softmmu $rdma_libs" 3381 else 3382 if test "$rdma" = "yes" ; then 3383 error_exit \ 3384 " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 3385 " Your options:" \ 3386 " (1) Fast: Install infiniband packages (devel) from your distro." \ 3387 " (2) Cleanest: Install libraries from www.openfabrics.org" \ 3388 " (3) Also: Install softiwarp if you don't have RDMA hardware" 3389 fi 3390 rdma="no" 3391 fi 3392fi 3393 3394########################################## 3395# PVRDMA detection 3396 3397cat > $TMPC <<EOF && 3398#include <sys/mman.h> 3399 3400int 3401main(void) 3402{ 3403 char buf = 0; 3404 void *addr = &buf; 3405 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 3406 3407 return 0; 3408} 3409EOF 3410 3411if test "$rdma" = "yes" ; then 3412 case "$pvrdma" in 3413 "") 3414 if compile_prog "" ""; then 3415 pvrdma="yes" 3416 else 3417 pvrdma="no" 3418 fi 3419 ;; 3420 "yes") 3421 if ! compile_prog "" ""; then 3422 error_exit "PVRDMA is not supported since mremap is not implemented" 3423 fi 3424 pvrdma="yes" 3425 ;; 3426 "no") 3427 pvrdma="no" 3428 ;; 3429 esac 3430else 3431 if test "$pvrdma" = "yes" ; then 3432 error_exit "PVRDMA requires rdma suppport" 3433 fi 3434 pvrdma="no" 3435fi 3436 3437# Let's see if enhanced reg_mr is supported 3438if test "$pvrdma" = "yes" ; then 3439 3440cat > $TMPC <<EOF && 3441#include <infiniband/verbs.h> 3442 3443int 3444main(void) 3445{ 3446 struct ibv_mr *mr; 3447 struct ibv_pd *pd = NULL; 3448 size_t length = 10; 3449 uint64_t iova = 0; 3450 int access = 0; 3451 void *addr = NULL; 3452 3453 mr = ibv_reg_mr_iova(pd, addr, length, iova, access); 3454 3455 ibv_dereg_mr(mr); 3456 3457 return 0; 3458} 3459EOF 3460 if ! compile_prog "" "-libverbs"; then 3461 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR" 3462 fi 3463fi 3464 3465########################################## 3466# VNC SASL detection 3467if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then 3468 cat > $TMPC <<EOF 3469#include <sasl/sasl.h> 3470#include <stdio.h> 3471int main(void) { sasl_server_init(NULL, "qemu"); return 0; } 3472EOF 3473 # Assuming Cyrus-SASL installed in /usr prefix 3474 # QEMU defines struct iovec in "qemu/osdep.h", 3475 # we don't want libsasl to redefine it in <sasl/sasl.h>. 3476 vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED" 3477 vnc_sasl_libs="-lsasl2" 3478 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then 3479 vnc_sasl=yes 3480 libs_softmmu="$vnc_sasl_libs $libs_softmmu" 3481 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags" 3482 else 3483 if test "$vnc_sasl" = "yes" ; then 3484 feature_not_found "vnc-sasl" "Install Cyrus SASL devel" 3485 fi 3486 vnc_sasl=no 3487 fi 3488fi 3489 3490########################################## 3491# VNC JPEG detection 3492if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then 3493cat > $TMPC <<EOF 3494#include <stdio.h> 3495#include <jpeglib.h> 3496int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; } 3497EOF 3498 vnc_jpeg_cflags="" 3499 vnc_jpeg_libs="-ljpeg" 3500 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then 3501 vnc_jpeg=yes 3502 libs_softmmu="$vnc_jpeg_libs $libs_softmmu" 3503 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags" 3504 else 3505 if test "$vnc_jpeg" = "yes" ; then 3506 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel" 3507 fi 3508 vnc_jpeg=no 3509 fi 3510fi 3511 3512########################################## 3513# VNC PNG detection 3514if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then 3515cat > $TMPC <<EOF 3516//#include <stdio.h> 3517#include <png.h> 3518#include <stddef.h> 3519int main(void) { 3520 png_structp png_ptr; 3521 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); 3522 return png_ptr != 0; 3523} 3524EOF 3525 if $pkg_config libpng --exists; then 3526 vnc_png_cflags=$($pkg_config libpng --cflags) 3527 vnc_png_libs=$($pkg_config libpng --libs) 3528 else 3529 vnc_png_cflags="" 3530 vnc_png_libs="-lpng" 3531 fi 3532 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then 3533 vnc_png=yes 3534 libs_softmmu="$vnc_png_libs $libs_softmmu" 3535 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags" 3536 else 3537 if test "$vnc_png" = "yes" ; then 3538 feature_not_found "vnc-png" "Install libpng devel" 3539 fi 3540 vnc_png=no 3541 fi 3542fi 3543 3544########################################## 3545# xkbcommon probe 3546if test "$xkbcommon" != "no" ; then 3547 if $pkg_config xkbcommon --exists; then 3548 xkbcommon_cflags=$($pkg_config xkbcommon --cflags) 3549 xkbcommon_libs=$($pkg_config xkbcommon --libs) 3550 xkbcommon=yes 3551 else 3552 if test "$xkbcommon" = "yes" ; then 3553 feature_not_found "xkbcommon" "Install libxkbcommon-devel" 3554 fi 3555 xkbcommon=no 3556 fi 3557fi 3558 3559 3560########################################## 3561# xfsctl() probe, used for file-posix.c 3562if test "$xfs" != "no" ; then 3563 cat > $TMPC << EOF 3564#include <stddef.h> /* NULL */ 3565#include <xfs/xfs.h> 3566int main(void) 3567{ 3568 xfsctl(NULL, 0, 0, NULL); 3569 return 0; 3570} 3571EOF 3572 if compile_prog "" "" ; then 3573 xfs="yes" 3574 else 3575 if test "$xfs" = "yes" ; then 3576 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel" 3577 fi 3578 xfs=no 3579 fi 3580fi 3581 3582########################################## 3583# vde libraries probe 3584if test "$vde" != "no" ; then 3585 vde_libs="-lvdeplug" 3586 cat > $TMPC << EOF 3587#include <libvdeplug.h> 3588int main(void) 3589{ 3590 struct vde_open_args a = {0, 0, 0}; 3591 char s[] = ""; 3592 vde_open(s, s, &a); 3593 return 0; 3594} 3595EOF 3596 if compile_prog "" "$vde_libs" ; then 3597 vde=yes 3598 else 3599 if test "$vde" = "yes" ; then 3600 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel" 3601 fi 3602 vde=no 3603 fi 3604fi 3605 3606########################################## 3607# netmap support probe 3608# Apart from looking for netmap headers, we make sure that the host API version 3609# supports the netmap backend (>=11). The upper bound (15) is meant to simulate 3610# a minor/major version number. Minor new features will be marked with values up 3611# to 15, and if something happens that requires a change to the backend we will 3612# move above 15, submit the backend fixes and modify this two bounds. 3613if test "$netmap" != "no" ; then 3614 cat > $TMPC << EOF 3615#include <inttypes.h> 3616#include <net/if.h> 3617#include <net/netmap.h> 3618#include <net/netmap_user.h> 3619#if (NETMAP_API < 11) || (NETMAP_API > 15) 3620#error 3621#endif 3622int main(void) { return 0; } 3623EOF 3624 if compile_prog "" "" ; then 3625 netmap=yes 3626 else 3627 if test "$netmap" = "yes" ; then 3628 feature_not_found "netmap" 3629 fi 3630 netmap=no 3631 fi 3632fi 3633 3634############################################ 3635# efi-aarch64 probe 3636# Check for efi files needed by aarch64 VMs. 3637# By default we will use the efi included with QEMU. 3638# Allow user to override the path for efi also. 3639if ! test -f "$efi_aarch64"; then 3640 if test -f $source_path/pc-bios/edk2-aarch64-code.fd.bz2; then 3641 # valid after build 3642 efi_aarch64=$PWD/pc-bios/edk2-aarch64-code.fd 3643 else 3644 efi_aarch64="" 3645 fi 3646fi 3647 3648########################################## 3649# libcap-ng library probe 3650if test "$cap_ng" != "no" ; then 3651 cap_libs="-lcap-ng" 3652 cat > $TMPC << EOF 3653#include <cap-ng.h> 3654int main(void) 3655{ 3656 capng_capability_to_name(CAPNG_EFFECTIVE); 3657 return 0; 3658} 3659EOF 3660 if compile_prog "" "$cap_libs" ; then 3661 cap_ng=yes 3662 libs_tools="$cap_libs $libs_tools" 3663 else 3664 if test "$cap_ng" = "yes" ; then 3665 feature_not_found "cap_ng" "Install libcap-ng devel" 3666 fi 3667 cap_ng=no 3668 fi 3669fi 3670 3671########################################## 3672# Sound support libraries probe 3673 3674audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g') 3675for drv in $audio_drv_list; do 3676 case $drv in 3677 alsa | try-alsa) 3678 if $pkg_config alsa --exists; then 3679 alsa_libs=$($pkg_config alsa --libs) 3680 if test "$drv" = "try-alsa"; then 3681 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/') 3682 fi 3683 else 3684 if test "$drv" = "try-alsa"; then 3685 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//') 3686 else 3687 error_exit "$drv check failed" \ 3688 "Make sure to have the $drv libs and headers installed." 3689 fi 3690 fi 3691 ;; 3692 3693 pa | try-pa) 3694 if $pkg_config libpulse --exists; then 3695 pulse_libs=$($pkg_config libpulse --libs) 3696 if test "$drv" = "try-pa"; then 3697 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/') 3698 fi 3699 else 3700 if test "$drv" = "try-pa"; then 3701 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//') 3702 else 3703 error_exit "$drv check failed" \ 3704 "Make sure to have the $drv libs and headers installed." 3705 fi 3706 fi 3707 ;; 3708 3709 sdl) 3710 if test "$sdl" = "no"; then 3711 error_exit "sdl not found or disabled, can not use sdl audio driver" 3712 fi 3713 ;; 3714 3715 try-sdl) 3716 if test "$sdl" = "no"; then 3717 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//') 3718 else 3719 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/') 3720 fi 3721 ;; 3722 3723 coreaudio) 3724 coreaudio_libs="-framework CoreAudio" 3725 ;; 3726 3727 dsound) 3728 dsound_libs="-lole32 -ldxguid" 3729 audio_win_int="yes" 3730 ;; 3731 3732 oss) 3733 oss_libs="$oss_lib" 3734 ;; 3735 3736 jack | try-jack) 3737 if $pkg_config jack --exists; then 3738 jack_libs=$($pkg_config jack --libs) 3739 if test "$drv" = "try-jack"; then 3740 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/') 3741 fi 3742 else 3743 if test "$drv" = "try-jack"; then 3744 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//') 3745 else 3746 error_exit "$drv check failed" \ 3747 "Make sure to have the $drv libs and headers installed." 3748 fi 3749 fi 3750 ;; 3751 3752 *) 3753 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { 3754 error_exit "Unknown driver '$drv' selected" \ 3755 "Possible drivers are: $audio_possible_drivers" 3756 } 3757 ;; 3758 esac 3759done 3760 3761########################################## 3762# BrlAPI probe 3763 3764if test "$brlapi" != "no" ; then 3765 brlapi_libs="-lbrlapi" 3766 cat > $TMPC << EOF 3767#include <brlapi.h> 3768#include <stddef.h> 3769int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); } 3770EOF 3771 if compile_prog "" "$brlapi_libs" ; then 3772 brlapi=yes 3773 else 3774 if test "$brlapi" = "yes" ; then 3775 feature_not_found "brlapi" "Install brlapi devel" 3776 fi 3777 brlapi=no 3778 fi 3779fi 3780 3781########################################## 3782# iconv probe 3783if test "$iconv" != "no" ; then 3784 cat > $TMPC << EOF 3785#include <iconv.h> 3786int main(void) { 3787 iconv_t conv = iconv_open("WCHAR_T", "UCS-2"); 3788 return conv != (iconv_t) -1; 3789} 3790EOF 3791 iconv_prefix_list="/usr/local:/usr" 3792 iconv_lib_list=":-liconv" 3793 IFS=: 3794 for iconv_prefix in $iconv_prefix_list; do 3795 IFS=: 3796 iconv_cflags="-I$iconv_prefix/include" 3797 iconv_ldflags="-L$iconv_prefix/lib" 3798 for iconv_link in $iconv_lib_list; do 3799 unset IFS 3800 iconv_lib="$iconv_ldflags $iconv_link" 3801 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log 3802 if compile_prog "$iconv_cflags" "$iconv_lib" ; then 3803 iconv_found=yes 3804 break 3805 fi 3806 done 3807 if test "$iconv_found" = yes ; then 3808 break 3809 fi 3810 done 3811 if test "$iconv_found" = "yes" ; then 3812 iconv=yes 3813 else 3814 if test "$iconv" = "yes" ; then 3815 feature_not_found "iconv" "Install iconv devel" 3816 fi 3817 iconv=no 3818 fi 3819fi 3820 3821########################################## 3822# curses probe 3823if test "$iconv" = "no" ; then 3824 # curses will need iconv 3825 curses=no 3826fi 3827if test "$curses" != "no" ; then 3828 if test "$mingw32" = "yes" ; then 3829 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):" 3830 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses" 3831 else 3832 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:" 3833 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw" 3834 fi 3835 curses_found=no 3836 cat > $TMPC << EOF 3837#include <locale.h> 3838#include <curses.h> 3839#include <wchar.h> 3840#include <langinfo.h> 3841int main(void) { 3842 const char *codeset; 3843 wchar_t wch = L'w'; 3844 setlocale(LC_ALL, ""); 3845 resize_term(0, 0); 3846 addwstr(L"wide chars\n"); 3847 addnwstr(&wch, 1); 3848 add_wch(WACS_DEGREE); 3849 codeset = nl_langinfo(CODESET); 3850 return codeset != 0; 3851} 3852EOF 3853 IFS=: 3854 for curses_inc in $curses_inc_list; do 3855 # Make sure we get the wide character prototypes 3856 curses_inc="-DNCURSES_WIDECHAR $curses_inc" 3857 IFS=: 3858 for curses_lib in $curses_lib_list; do 3859 unset IFS 3860 if compile_prog "$curses_inc" "$curses_lib" ; then 3861 curses_found=yes 3862 break 3863 fi 3864 done 3865 if test "$curses_found" = yes ; then 3866 break 3867 fi 3868 done 3869 unset IFS 3870 if test "$curses_found" = "yes" ; then 3871 curses=yes 3872 else 3873 if test "$curses" = "yes" ; then 3874 feature_not_found "curses" "Install ncurses devel" 3875 fi 3876 curses=no 3877 fi 3878fi 3879 3880########################################## 3881# curl probe 3882if test "$curl" != "no" ; then 3883 if $pkg_config libcurl --exists; then 3884 curlconfig="$pkg_config libcurl" 3885 else 3886 curlconfig=curl-config 3887 fi 3888 cat > $TMPC << EOF 3889#include <curl/curl.h> 3890int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; } 3891EOF 3892 curl_cflags=$($curlconfig --cflags 2>/dev/null) 3893 curl_libs=$($curlconfig --libs 2>/dev/null) 3894 if compile_prog "$curl_cflags" "$curl_libs" ; then 3895 curl=yes 3896 else 3897 if test "$curl" = "yes" ; then 3898 feature_not_found "curl" "Install libcurl devel" 3899 fi 3900 curl=no 3901 fi 3902fi # test "$curl" 3903 3904########################################## 3905# glib support probe 3906 3907glib_req_ver=2.48 3908glib_modules=gthread-2.0 3909if test "$modules" = yes; then 3910 glib_modules="$glib_modules gmodule-export-2.0" 3911fi 3912if test "$plugins" = yes; then 3913 glib_modules="$glib_modules gmodule-2.0" 3914fi 3915 3916# This workaround is required due to a bug in pkg-config file for glib as it 3917# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 3918 3919if test "$static" = yes && test "$mingw32" = yes; then 3920 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS" 3921fi 3922 3923for i in $glib_modules; do 3924 if $pkg_config --atleast-version=$glib_req_ver $i; then 3925 glib_cflags=$($pkg_config --cflags $i) 3926 glib_libs=$($pkg_config --libs $i) 3927 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS" 3928 LIBS="$glib_libs $LIBS" 3929 libs_qga="$glib_libs $libs_qga" 3930 else 3931 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 3932 fi 3933done 3934 3935if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then 3936 gio=yes 3937 gio_cflags=$($pkg_config --cflags gio-2.0) 3938 gio_libs=$($pkg_config --libs gio-2.0) 3939 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0) 3940 if [ ! -x "$gdbus_codegen" ]; then 3941 gdbus_codegen= 3942 fi 3943else 3944 gio=no 3945fi 3946 3947if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then 3948 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)" 3949 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)" 3950fi 3951 3952# Sanity check that the current size_t matches the 3953# size that glib thinks it should be. This catches 3954# problems on multi-arch where people try to build 3955# 32-bit QEMU while pointing at 64-bit glib headers 3956cat > $TMPC <<EOF 3957#include <glib.h> 3958#include <unistd.h> 3959 3960#define QEMU_BUILD_BUG_ON(x) \ 3961 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 3962 3963int main(void) { 3964 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 3965 return 0; 3966} 3967EOF 3968 3969if ! compile_prog "$CFLAGS" "$LIBS" ; then 3970 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 3971 "You probably need to set PKG_CONFIG_LIBDIR"\ 3972 "to point to the right pkg-config files for your"\ 3973 "build target" 3974fi 3975 3976# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 3977cat > $TMPC << EOF 3978#include <glib.h> 3979int main(void) { return 0; } 3980EOF 3981if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3982 if cc_has_warning_flag "-Wno-unknown-attributes"; then 3983 glib_cflags="-Wno-unknown-attributes $glib_cflags" 3984 CFLAGS="-Wno-unknown-attributes $CFLAGS" 3985 fi 3986fi 3987 3988# Silence clang warnings triggered by glib < 2.57.2 3989cat > $TMPC << EOF 3990#include <glib.h> 3991typedef struct Foo { 3992 int i; 3993} Foo; 3994static void foo_free(Foo *f) 3995{ 3996 g_free(f); 3997} 3998G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free); 3999int main(void) { return 0; } 4000EOF 4001if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 4002 if cc_has_warning_flag "-Wno-unused-function"; then 4003 glib_cflags="$glib_cflags -Wno-unused-function" 4004 CFLAGS="$CFLAGS -Wno-unused-function" 4005 fi 4006fi 4007 4008######################################### 4009# zlib check 4010 4011if test "$zlib" != "no" ; then 4012 if $pkg_config --exists zlib; then 4013 zlib_cflags=$($pkg_config --cflags zlib) 4014 zlib_libs=$($pkg_config --libs zlib) 4015 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS" 4016 LIBS="$zlib_libs $LIBS" 4017 else 4018 cat > $TMPC << EOF 4019#include <zlib.h> 4020int main(void) { zlibVersion(); return 0; } 4021EOF 4022 if compile_prog "" "-lz" ; then 4023 LIBS="$LIBS -lz" 4024 else 4025 error_exit "zlib check failed" \ 4026 "Make sure to have the zlib libs and headers installed." 4027 fi 4028 fi 4029fi 4030 4031########################################## 4032# SHA command probe for modules 4033if test "$modules" = yes; then 4034 shacmd_probe="sha1sum sha1 shasum" 4035 for c in $shacmd_probe; do 4036 if has $c; then 4037 shacmd="$c" 4038 break 4039 fi 4040 done 4041 if test "$shacmd" = ""; then 4042 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 4043 fi 4044fi 4045 4046########################################## 4047# pixman support probe 4048 4049if test "$want_tools" = "no" && test "$softmmu" = "no"; then 4050 pixman_cflags= 4051 pixman_libs= 4052elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then 4053 pixman_cflags=$($pkg_config --cflags pixman-1) 4054 pixman_libs=$($pkg_config --libs pixman-1) 4055else 4056 error_exit "pixman >= 0.21.8 not present." \ 4057 "Please install the pixman devel package." 4058fi 4059 4060########################################## 4061# libmpathpersist probe 4062 4063if test "$mpath" != "no" ; then 4064 # probe for the new API 4065 cat > $TMPC <<EOF 4066#include <libudev.h> 4067#include <mpath_persist.h> 4068unsigned mpath_mx_alloc_len = 1024; 4069int logsink; 4070static struct config *multipath_conf; 4071extern struct udev *udev; 4072extern struct config *get_multipath_config(void); 4073extern void put_multipath_config(struct config *conf); 4074struct udev *udev; 4075struct config *get_multipath_config(void) { return multipath_conf; } 4076void put_multipath_config(struct config *conf) { } 4077 4078int main(void) { 4079 udev = udev_new(); 4080 multipath_conf = mpath_lib_init(); 4081 return 0; 4082} 4083EOF 4084 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 4085 mpathpersist=yes 4086 mpathpersist_new_api=yes 4087 else 4088 # probe for the old API 4089 cat > $TMPC <<EOF 4090#include <libudev.h> 4091#include <mpath_persist.h> 4092unsigned mpath_mx_alloc_len = 1024; 4093int logsink; 4094int main(void) { 4095 struct udev *udev = udev_new(); 4096 mpath_lib_init(udev); 4097 return 0; 4098} 4099EOF 4100 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 4101 mpathpersist=yes 4102 mpathpersist_new_api=no 4103 else 4104 mpathpersist=no 4105 fi 4106 fi 4107else 4108 mpathpersist=no 4109fi 4110 4111########################################## 4112# pthread probe 4113PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 4114 4115pthread=no 4116cat > $TMPC << EOF 4117#include <pthread.h> 4118static void *f(void *p) { return NULL; } 4119int main(void) { 4120 pthread_t thread; 4121 pthread_create(&thread, 0, f, 0); 4122 return 0; 4123} 4124EOF 4125if compile_prog "" "" ; then 4126 pthread=yes 4127else 4128 for pthread_lib in $PTHREADLIBS_LIST; do 4129 if compile_prog "" "$pthread_lib" ; then 4130 pthread=yes 4131 found=no 4132 for lib_entry in $LIBS; do 4133 if test "$lib_entry" = "$pthread_lib"; then 4134 found=yes 4135 break 4136 fi 4137 done 4138 if test "$found" = "no"; then 4139 LIBS="$pthread_lib $LIBS" 4140 libs_qga="$pthread_lib $libs_qga" 4141 fi 4142 PTHREAD_LIB="$pthread_lib" 4143 break 4144 fi 4145 done 4146fi 4147 4148if test "$mingw32" != yes && test "$pthread" = no; then 4149 error_exit "pthread check failed" \ 4150 "Make sure to have the pthread libs and headers installed." 4151fi 4152 4153# check for pthread_setname_np with thread id 4154pthread_setname_np_w_tid=no 4155cat > $TMPC << EOF 4156#include <pthread.h> 4157 4158static void *f(void *p) { return NULL; } 4159int main(void) 4160{ 4161 pthread_t thread; 4162 pthread_create(&thread, 0, f, 0); 4163 pthread_setname_np(thread, "QEMU"); 4164 return 0; 4165} 4166EOF 4167if compile_prog "" "$pthread_lib" ; then 4168 pthread_setname_np_w_tid=yes 4169fi 4170 4171# check for pthread_setname_np without thread id 4172pthread_setname_np_wo_tid=no 4173cat > $TMPC << EOF 4174#include <pthread.h> 4175 4176static void *f(void *p) { pthread_setname_np("QEMU"); } 4177int main(void) 4178{ 4179 pthread_t thread; 4180 pthread_create(&thread, 0, f, 0); 4181 return 0; 4182} 4183EOF 4184if compile_prog "" "$pthread_lib" ; then 4185 pthread_setname_np_wo_tid=yes 4186fi 4187 4188########################################## 4189# rbd probe 4190if test "$rbd" != "no" ; then 4191 cat > $TMPC <<EOF 4192#include <stdio.h> 4193#include <rbd/librbd.h> 4194int main(void) { 4195 rados_t cluster; 4196 rados_create(&cluster, NULL); 4197 return 0; 4198} 4199EOF 4200 rbd_libs="-lrbd -lrados" 4201 if compile_prog "" "$rbd_libs" ; then 4202 rbd=yes 4203 else 4204 if test "$rbd" = "yes" ; then 4205 feature_not_found "rados block device" "Install librbd/ceph devel" 4206 fi 4207 rbd=no 4208 fi 4209fi 4210 4211########################################## 4212# libssh probe 4213if test "$libssh" != "no" ; then 4214 if $pkg_config --exists libssh; then 4215 libssh_cflags=$($pkg_config libssh --cflags) 4216 libssh_libs=$($pkg_config libssh --libs) 4217 libssh=yes 4218 else 4219 if test "$libssh" = "yes" ; then 4220 error_exit "libssh required for --enable-libssh" 4221 fi 4222 libssh=no 4223 fi 4224fi 4225 4226########################################## 4227# Check for libssh 0.8 4228# This is done like this instead of using the LIBSSH_VERSION_* and 4229# SSH_VERSION_* macros because some distributions in the past shipped 4230# snapshots of the future 0.8 from Git, and those snapshots did not 4231# have updated version numbers (still referring to 0.7.0). 4232 4233if test "$libssh" = "yes"; then 4234 cat > $TMPC <<EOF 4235#include <libssh/libssh.h> 4236int main(void) { return ssh_get_server_publickey(NULL, NULL); } 4237EOF 4238 if compile_prog "$libssh_cflags" "$libssh_libs"; then 4239 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags" 4240 fi 4241fi 4242 4243########################################## 4244# linux-aio probe 4245 4246if test "$linux_aio" != "no" ; then 4247 cat > $TMPC <<EOF 4248#include <libaio.h> 4249#include <sys/eventfd.h> 4250#include <stddef.h> 4251int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 4252EOF 4253 if compile_prog "" "-laio" ; then 4254 linux_aio=yes 4255 else 4256 if test "$linux_aio" = "yes" ; then 4257 feature_not_found "linux AIO" "Install libaio devel" 4258 fi 4259 linux_aio=no 4260 fi 4261fi 4262########################################## 4263# linux-io-uring probe 4264 4265if test "$linux_io_uring" != "no" ; then 4266 if $pkg_config liburing; then 4267 linux_io_uring_cflags=$($pkg_config --cflags liburing) 4268 linux_io_uring_libs=$($pkg_config --libs liburing) 4269 linux_io_uring=yes 4270 4271 # io_uring is used in libqemuutil.a where per-file -libs variables are not 4272 # seen by programs linking the archive. It's not ideal, but just add the 4273 # library dependency globally. 4274 LIBS="$linux_io_uring_libs $LIBS" 4275 else 4276 if test "$linux_io_uring" = "yes" ; then 4277 feature_not_found "linux io_uring" "Install liburing devel" 4278 fi 4279 linux_io_uring=no 4280 fi 4281fi 4282 4283########################################## 4284# TPM emulation is only on POSIX 4285 4286if test "$tpm" = ""; then 4287 if test "$mingw32" = "yes"; then 4288 tpm=no 4289 else 4290 tpm=yes 4291 fi 4292elif test "$tpm" = "yes"; then 4293 if test "$mingw32" = "yes" ; then 4294 error_exit "TPM emulation only available on POSIX systems" 4295 fi 4296fi 4297 4298########################################## 4299# attr probe 4300 4301if test "$attr" != "no" ; then 4302 cat > $TMPC <<EOF 4303#include <stdio.h> 4304#include <sys/types.h> 4305#ifdef CONFIG_LIBATTR 4306#include <attr/xattr.h> 4307#else 4308#include <sys/xattr.h> 4309#endif 4310int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 4311EOF 4312 if compile_prog "" "" ; then 4313 attr=yes 4314 # Older distros have <attr/xattr.h>, and need -lattr: 4315 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 4316 attr=yes 4317 LIBS="-lattr $LIBS" 4318 libattr=yes 4319 else 4320 if test "$attr" = "yes" ; then 4321 feature_not_found "ATTR" "Install libc6 or libattr devel" 4322 fi 4323 attr=no 4324 fi 4325fi 4326 4327########################################## 4328# iovec probe 4329cat > $TMPC <<EOF 4330#include <sys/types.h> 4331#include <sys/uio.h> 4332#include <unistd.h> 4333int main(void) { return sizeof(struct iovec); } 4334EOF 4335iovec=no 4336if compile_prog "" "" ; then 4337 iovec=yes 4338fi 4339 4340########################################## 4341# preadv probe 4342cat > $TMPC <<EOF 4343#include <sys/types.h> 4344#include <sys/uio.h> 4345#include <unistd.h> 4346int main(void) { return preadv(0, 0, 0, 0); } 4347EOF 4348preadv=no 4349if compile_prog "" "" ; then 4350 preadv=yes 4351fi 4352 4353########################################## 4354# fdt probe 4355# fdt support is mandatory for at least some target architectures, 4356# so insist on it if we're building those system emulators. 4357fdt_required=no 4358for target in $target_list; do 4359 case $target in 4360 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu) 4361 fdt_required=yes 4362 ;; 4363 esac 4364done 4365 4366if test "$fdt_required" = "yes"; then 4367 if test "$fdt" = "no"; then 4368 error_exit "fdt disabled but some requested targets require it." \ 4369 "You can turn off fdt only if you also disable all the system emulation" \ 4370 "targets which need it (by specifying a cut down --target-list)." 4371 fi 4372 fdt=yes 4373elif test "$fdt" != "yes" ; then 4374 fdt=no 4375fi 4376 4377# fdt is only required when building softmmu targets 4378if test -z "$fdt" -a "$softmmu" != "yes" ; then 4379 fdt="no" 4380fi 4381 4382if test "$fdt" != "no" ; then 4383 fdt_libs="-lfdt" 4384 # explicitly check for libfdt_env.h as it is missing in some stable installs 4385 # and test for required functions to make sure we are on a version >= 1.4.2 4386 cat > $TMPC << EOF 4387#include <libfdt.h> 4388#include <libfdt_env.h> 4389int main(void) { fdt_check_full(NULL, 0); return 0; } 4390EOF 4391 if compile_prog "" "$fdt_libs" ; then 4392 # system DTC is good - use it 4393 fdt=system 4394 else 4395 # have GIT checkout, so activate dtc submodule 4396 if test -e "${source_path}/.git" ; then 4397 git_submodules="${git_submodules} dtc" 4398 fi 4399 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then 4400 fdt=git 4401 mkdir -p dtc 4402 if [ "$pwd_is_source_path" != "y" ] ; then 4403 symlink "$source_path/dtc/Makefile" "dtc/Makefile" 4404 fi 4405 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt" 4406 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt" 4407 fdt_libs="$fdt_libs" 4408 elif test "$fdt" = "yes" ; then 4409 # Not a git build & no libfdt found, prompt for system install 4410 error_exit "DTC (libfdt) version >= 1.4.2 not present." \ 4411 "Please install the DTC (libfdt) devel package" 4412 else 4413 # don't have and don't want 4414 fdt_libs= 4415 fdt=no 4416 fi 4417 fi 4418fi 4419 4420libs_softmmu="$libs_softmmu $fdt_libs" 4421 4422########################################## 4423# opengl probe (for sdl2, gtk, milkymist-tmu2) 4424 4425gbm="no" 4426if $pkg_config gbm; then 4427 gbm_cflags="$($pkg_config --cflags gbm)" 4428 gbm_libs="$($pkg_config --libs gbm)" 4429 gbm="yes" 4430fi 4431 4432if test "$opengl" != "no" ; then 4433 opengl_pkgs="epoxy gbm" 4434 if $pkg_config $opengl_pkgs; then 4435 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 4436 opengl_libs="$($pkg_config --libs $opengl_pkgs)" 4437 opengl=yes 4438 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 4439 gtk_gl="yes" 4440 fi 4441 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" 4442 else 4443 if test "$opengl" = "yes" ; then 4444 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 4445 fi 4446 opengl_cflags="" 4447 opengl_libs="" 4448 opengl=no 4449 fi 4450fi 4451 4452if test "$opengl" = "yes"; then 4453 cat > $TMPC << EOF 4454#include <epoxy/egl.h> 4455#ifndef EGL_MESA_image_dma_buf_export 4456# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 4457#endif 4458int main(void) { return 0; } 4459EOF 4460 if compile_prog "" "" ; then 4461 opengl_dmabuf=yes 4462 fi 4463fi 4464 4465if test "$opengl" = "yes" && test "$have_x11" = "yes"; then 4466 for target in $target_list; do 4467 case $target in 4468 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL 4469 need_x11=yes 4470 ;; 4471 esac 4472 done 4473fi 4474 4475########################################## 4476# libxml2 probe 4477if test "$libxml2" != "no" ; then 4478 if $pkg_config --exists libxml-2.0; then 4479 libxml2="yes" 4480 libxml2_cflags=$($pkg_config --cflags libxml-2.0) 4481 libxml2_libs=$($pkg_config --libs libxml-2.0) 4482 else 4483 if test "$libxml2" = "yes"; then 4484 feature_not_found "libxml2" "Install libxml2 devel" 4485 fi 4486 libxml2="no" 4487 fi 4488fi 4489 4490########################################## 4491# glusterfs probe 4492if test "$glusterfs" != "no" ; then 4493 if $pkg_config --atleast-version=3 glusterfs-api; then 4494 glusterfs="yes" 4495 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 4496 glusterfs_libs=$($pkg_config --libs glusterfs-api) 4497 if $pkg_config --atleast-version=4 glusterfs-api; then 4498 glusterfs_xlator_opt="yes" 4499 fi 4500 if $pkg_config --atleast-version=5 glusterfs-api; then 4501 glusterfs_discard="yes" 4502 fi 4503 if $pkg_config --atleast-version=6 glusterfs-api; then 4504 glusterfs_fallocate="yes" 4505 glusterfs_zerofill="yes" 4506 fi 4507 cat > $TMPC << EOF 4508#include <glusterfs/api/glfs.h> 4509 4510int 4511main(void) 4512{ 4513 /* new glfs_ftruncate() passes two additional args */ 4514 return glfs_ftruncate(NULL, 0, NULL, NULL); 4515} 4516EOF 4517 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4518 glusterfs_ftruncate_has_stat="yes" 4519 fi 4520 cat > $TMPC << EOF 4521#include <glusterfs/api/glfs.h> 4522 4523/* new glfs_io_cbk() passes two additional glfs_stat structs */ 4524static void 4525glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data) 4526{} 4527 4528int 4529main(void) 4530{ 4531 glfs_io_cbk iocb = &glusterfs_iocb; 4532 iocb(NULL, 0 , NULL, NULL, NULL); 4533 return 0; 4534} 4535EOF 4536 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4537 glusterfs_iocb_has_stat="yes" 4538 fi 4539 else 4540 if test "$glusterfs" = "yes" ; then 4541 feature_not_found "GlusterFS backend support" \ 4542 "Install glusterfs-api devel >= 3" 4543 fi 4544 glusterfs="no" 4545 fi 4546fi 4547 4548# Check for inotify functions when we are building linux-user 4549# emulator. This is done because older glibc versions don't 4550# have syscall stubs for these implemented. In that case we 4551# don't provide them even if kernel supports them. 4552# 4553inotify=no 4554cat > $TMPC << EOF 4555#include <sys/inotify.h> 4556 4557int 4558main(void) 4559{ 4560 /* try to start inotify */ 4561 return inotify_init(); 4562} 4563EOF 4564if compile_prog "" "" ; then 4565 inotify=yes 4566fi 4567 4568inotify1=no 4569cat > $TMPC << EOF 4570#include <sys/inotify.h> 4571 4572int 4573main(void) 4574{ 4575 /* try to start inotify */ 4576 return inotify_init1(0); 4577} 4578EOF 4579if compile_prog "" "" ; then 4580 inotify1=yes 4581fi 4582 4583# check if pipe2 is there 4584pipe2=no 4585cat > $TMPC << EOF 4586#include <unistd.h> 4587#include <fcntl.h> 4588 4589int main(void) 4590{ 4591 int pipefd[2]; 4592 return pipe2(pipefd, O_CLOEXEC); 4593} 4594EOF 4595if compile_prog "" "" ; then 4596 pipe2=yes 4597fi 4598 4599# check if accept4 is there 4600accept4=no 4601cat > $TMPC << EOF 4602#include <sys/socket.h> 4603#include <stddef.h> 4604 4605int main(void) 4606{ 4607 accept4(0, NULL, NULL, SOCK_CLOEXEC); 4608 return 0; 4609} 4610EOF 4611if compile_prog "" "" ; then 4612 accept4=yes 4613fi 4614 4615# check if tee/splice is there. vmsplice was added same time. 4616splice=no 4617cat > $TMPC << EOF 4618#include <unistd.h> 4619#include <fcntl.h> 4620#include <limits.h> 4621 4622int main(void) 4623{ 4624 int len, fd = 0; 4625 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 4626 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 4627 return 0; 4628} 4629EOF 4630if compile_prog "" "" ; then 4631 splice=yes 4632fi 4633 4634########################################## 4635# libnuma probe 4636 4637if test "$numa" != "no" ; then 4638 cat > $TMPC << EOF 4639#include <numa.h> 4640int main(void) { return numa_available(); } 4641EOF 4642 4643 if compile_prog "" "-lnuma" ; then 4644 numa=yes 4645 libs_softmmu="-lnuma $libs_softmmu" 4646 else 4647 if test "$numa" = "yes" ; then 4648 feature_not_found "numa" "install numactl devel" 4649 fi 4650 numa=no 4651 fi 4652fi 4653 4654if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 4655 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 4656 exit 1 4657fi 4658 4659# Even if malloc_trim() is available, these non-libc memory allocators 4660# do not support it. 4661if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then 4662 if test "$malloc_trim" = "yes" ; then 4663 echo "Disabling malloc_trim with non-libc memory allocator" 4664 fi 4665 malloc_trim="no" 4666fi 4667 4668####################################### 4669# malloc_trim 4670 4671if test "$malloc_trim" != "no" ; then 4672 cat > $TMPC << EOF 4673#include <malloc.h> 4674int main(void) { malloc_trim(0); return 0; } 4675EOF 4676 if compile_prog "" "" ; then 4677 malloc_trim="yes" 4678 else 4679 malloc_trim="no" 4680 fi 4681fi 4682 4683########################################## 4684# tcmalloc probe 4685 4686if test "$tcmalloc" = "yes" ; then 4687 cat > $TMPC << EOF 4688#include <stdlib.h> 4689int main(void) { 4690 void *tmp = malloc(1); 4691 if (tmp != NULL) { 4692 return 0; 4693 } 4694 return 1; 4695} 4696EOF 4697 4698 if compile_prog "" "-ltcmalloc" ; then 4699 LIBS="-ltcmalloc $LIBS" 4700 else 4701 feature_not_found "tcmalloc" "install gperftools devel" 4702 fi 4703fi 4704 4705########################################## 4706# jemalloc probe 4707 4708if test "$jemalloc" = "yes" ; then 4709 cat > $TMPC << EOF 4710#include <stdlib.h> 4711int main(void) { 4712 void *tmp = malloc(1); 4713 if (tmp != NULL) { 4714 return 0; 4715 } 4716 return 1; 4717} 4718EOF 4719 4720 if compile_prog "" "-ljemalloc" ; then 4721 LIBS="-ljemalloc $LIBS" 4722 else 4723 feature_not_found "jemalloc" "install jemalloc devel" 4724 fi 4725fi 4726 4727########################################## 4728# signalfd probe 4729signalfd="no" 4730cat > $TMPC << EOF 4731#include <unistd.h> 4732#include <sys/syscall.h> 4733#include <signal.h> 4734int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4735EOF 4736 4737if compile_prog "" "" ; then 4738 signalfd=yes 4739fi 4740 4741# check if optreset global is declared by <getopt.h> 4742optreset="no" 4743cat > $TMPC << EOF 4744#include <getopt.h> 4745int main(void) { return optreset; } 4746EOF 4747 4748if compile_prog "" "" ; then 4749 optreset=yes 4750fi 4751 4752# check if eventfd is supported 4753eventfd=no 4754cat > $TMPC << EOF 4755#include <sys/eventfd.h> 4756 4757int main(void) 4758{ 4759 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4760} 4761EOF 4762if compile_prog "" "" ; then 4763 eventfd=yes 4764fi 4765 4766# check if memfd is supported 4767memfd=no 4768cat > $TMPC << EOF 4769#include <sys/mman.h> 4770 4771int main(void) 4772{ 4773 return memfd_create("foo", MFD_ALLOW_SEALING); 4774} 4775EOF 4776if compile_prog "" "" ; then 4777 memfd=yes 4778fi 4779 4780# check for usbfs 4781have_usbfs=no 4782if test "$linux_user" = "yes"; then 4783 cat > $TMPC << EOF 4784#include <linux/usbdevice_fs.h> 4785 4786#ifndef USBDEVFS_GET_CAPABILITIES 4787#error "USBDEVFS_GET_CAPABILITIES undefined" 4788#endif 4789 4790#ifndef USBDEVFS_DISCONNECT_CLAIM 4791#error "USBDEVFS_DISCONNECT_CLAIM undefined" 4792#endif 4793 4794int main(void) 4795{ 4796 return 0; 4797} 4798EOF 4799 if compile_prog "" ""; then 4800 have_usbfs=yes 4801 fi 4802fi 4803 4804# check for fallocate 4805fallocate=no 4806cat > $TMPC << EOF 4807#include <fcntl.h> 4808 4809int main(void) 4810{ 4811 fallocate(0, 0, 0, 0); 4812 return 0; 4813} 4814EOF 4815if compile_prog "" "" ; then 4816 fallocate=yes 4817fi 4818 4819# check for fallocate hole punching 4820fallocate_punch_hole=no 4821cat > $TMPC << EOF 4822#include <fcntl.h> 4823#include <linux/falloc.h> 4824 4825int main(void) 4826{ 4827 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4828 return 0; 4829} 4830EOF 4831if compile_prog "" "" ; then 4832 fallocate_punch_hole=yes 4833fi 4834 4835# check that fallocate supports range zeroing inside the file 4836fallocate_zero_range=no 4837cat > $TMPC << EOF 4838#include <fcntl.h> 4839#include <linux/falloc.h> 4840 4841int main(void) 4842{ 4843 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4844 return 0; 4845} 4846EOF 4847if compile_prog "" "" ; then 4848 fallocate_zero_range=yes 4849fi 4850 4851# check for posix_fallocate 4852posix_fallocate=no 4853cat > $TMPC << EOF 4854#include <fcntl.h> 4855 4856int main(void) 4857{ 4858 posix_fallocate(0, 0, 0); 4859 return 0; 4860} 4861EOF 4862if compile_prog "" "" ; then 4863 posix_fallocate=yes 4864fi 4865 4866# check for sync_file_range 4867sync_file_range=no 4868cat > $TMPC << EOF 4869#include <fcntl.h> 4870 4871int main(void) 4872{ 4873 sync_file_range(0, 0, 0, 0); 4874 return 0; 4875} 4876EOF 4877if compile_prog "" "" ; then 4878 sync_file_range=yes 4879fi 4880 4881# check for linux/fiemap.h and FS_IOC_FIEMAP 4882fiemap=no 4883cat > $TMPC << EOF 4884#include <sys/ioctl.h> 4885#include <linux/fs.h> 4886#include <linux/fiemap.h> 4887 4888int main(void) 4889{ 4890 ioctl(0, FS_IOC_FIEMAP, 0); 4891 return 0; 4892} 4893EOF 4894if compile_prog "" "" ; then 4895 fiemap=yes 4896fi 4897 4898# check for dup3 4899dup3=no 4900cat > $TMPC << EOF 4901#include <unistd.h> 4902 4903int main(void) 4904{ 4905 dup3(0, 0, 0); 4906 return 0; 4907} 4908EOF 4909if compile_prog "" "" ; then 4910 dup3=yes 4911fi 4912 4913# check for ppoll support 4914ppoll=no 4915cat > $TMPC << EOF 4916#include <poll.h> 4917 4918int main(void) 4919{ 4920 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 4921 ppoll(&pfd, 1, 0, 0); 4922 return 0; 4923} 4924EOF 4925if compile_prog "" "" ; then 4926 ppoll=yes 4927fi 4928 4929# check for prctl(PR_SET_TIMERSLACK , ... ) support 4930prctl_pr_set_timerslack=no 4931cat > $TMPC << EOF 4932#include <sys/prctl.h> 4933 4934int main(void) 4935{ 4936 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4937 return 0; 4938} 4939EOF 4940if compile_prog "" "" ; then 4941 prctl_pr_set_timerslack=yes 4942fi 4943 4944# check for epoll support 4945epoll=no 4946cat > $TMPC << EOF 4947#include <sys/epoll.h> 4948 4949int main(void) 4950{ 4951 epoll_create(0); 4952 return 0; 4953} 4954EOF 4955if compile_prog "" "" ; then 4956 epoll=yes 4957fi 4958 4959# epoll_create1 is a later addition 4960# so we must check separately for its presence 4961epoll_create1=no 4962cat > $TMPC << EOF 4963#include <sys/epoll.h> 4964 4965int main(void) 4966{ 4967 /* Note that we use epoll_create1 as a value, not as 4968 * a function being called. This is necessary so that on 4969 * old SPARC glibc versions where the function was present in 4970 * the library but not declared in the header file we will 4971 * fail the configure check. (Otherwise we will get a compiler 4972 * warning but not an error, and will proceed to fail the 4973 * qemu compile where we compile with -Werror.) 4974 */ 4975 return (int)(uintptr_t)&epoll_create1; 4976} 4977EOF 4978if compile_prog "" "" ; then 4979 epoll_create1=yes 4980fi 4981 4982# check for sendfile support 4983sendfile=no 4984cat > $TMPC << EOF 4985#include <sys/sendfile.h> 4986 4987int main(void) 4988{ 4989 return sendfile(0, 0, 0, 0); 4990} 4991EOF 4992if compile_prog "" "" ; then 4993 sendfile=yes 4994fi 4995 4996# check for timerfd support (glibc 2.8 and newer) 4997timerfd=no 4998cat > $TMPC << EOF 4999#include <sys/timerfd.h> 5000 5001int main(void) 5002{ 5003 return(timerfd_create(CLOCK_REALTIME, 0)); 5004} 5005EOF 5006if compile_prog "" "" ; then 5007 timerfd=yes 5008fi 5009 5010# check for setns and unshare support 5011setns=no 5012cat > $TMPC << EOF 5013#include <sched.h> 5014 5015int main(void) 5016{ 5017 int ret; 5018 ret = setns(0, 0); 5019 ret = unshare(0); 5020 return ret; 5021} 5022EOF 5023if compile_prog "" "" ; then 5024 setns=yes 5025fi 5026 5027# clock_adjtime probe 5028clock_adjtime=no 5029cat > $TMPC <<EOF 5030#include <time.h> 5031 5032int main(void) 5033{ 5034 return clock_adjtime(0, 0); 5035} 5036EOF 5037clock_adjtime=no 5038if compile_prog "" "" ; then 5039 clock_adjtime=yes 5040fi 5041 5042# syncfs probe 5043syncfs=no 5044cat > $TMPC <<EOF 5045#include <unistd.h> 5046 5047int main(void) 5048{ 5049 return syncfs(0); 5050} 5051EOF 5052syncfs=no 5053if compile_prog "" "" ; then 5054 syncfs=yes 5055fi 5056 5057# check for kcov support (kernel must be 4.4+, compiled with certain options) 5058kcov=no 5059if check_include sys/kcov.h ; then 5060 kcov=yes 5061fi 5062 5063# If we're making warnings fatal, apply this to Sphinx runs as well 5064sphinx_werror="" 5065if test "$werror" = "yes"; then 5066 sphinx_werror="-W" 5067fi 5068 5069# Check we have a new enough version of sphinx-build 5070has_sphinx_build() { 5071 # This is a bit awkward but works: create a trivial document and 5072 # try to run it with our configuration file (which enforces a 5073 # version requirement). This will fail if either 5074 # sphinx-build doesn't exist at all or if it is too old. 5075 mkdir -p "$TMPDIR1/sphinx" 5076 touch "$TMPDIR1/sphinx/index.rst" 5077 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \ 5078 -b html "$TMPDIR1/sphinx" \ 5079 "$TMPDIR1/sphinx/out" >> config.log 2>&1 5080} 5081 5082# Check if tools are available to build documentation. 5083if test "$docs" != "no" ; then 5084 if has_sphinx_build; then 5085 sphinx_ok=yes 5086 else 5087 sphinx_ok=no 5088 fi 5089 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then 5090 docs=yes 5091 else 5092 if test "$docs" = "yes" ; then 5093 if has $sphinx_build && test "$sphinx_ok" != "yes"; then 5094 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2 5095 fi 5096 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx" 5097 fi 5098 docs=no 5099 fi 5100fi 5101 5102# Search for bswap_32 function 5103byteswap_h=no 5104cat > $TMPC << EOF 5105#include <byteswap.h> 5106int main(void) { return bswap_32(0); } 5107EOF 5108if compile_prog "" "" ; then 5109 byteswap_h=yes 5110fi 5111 5112# Search for bswap32 function 5113bswap_h=no 5114cat > $TMPC << EOF 5115#include <sys/endian.h> 5116#include <sys/types.h> 5117#include <machine/bswap.h> 5118int main(void) { return bswap32(0); } 5119EOF 5120if compile_prog "" "" ; then 5121 bswap_h=yes 5122fi 5123 5124########################################## 5125# Do we have libiscsi >= 1.9.0 5126if test "$libiscsi" != "no" ; then 5127 if $pkg_config --atleast-version=1.9.0 libiscsi; then 5128 libiscsi="yes" 5129 libiscsi_cflags=$($pkg_config --cflags libiscsi) 5130 libiscsi_libs=$($pkg_config --libs libiscsi) 5131 else 5132 if test "$libiscsi" = "yes" ; then 5133 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 5134 fi 5135 libiscsi="no" 5136 fi 5137fi 5138 5139########################################## 5140# Do we need libm 5141cat > $TMPC << EOF 5142#include <math.h> 5143int main(int argc, char **argv) { return isnan(sin((double)argc)); } 5144EOF 5145if compile_prog "" "" ; then 5146 : 5147elif compile_prog "" "-lm" ; then 5148 LIBS="-lm $LIBS" 5149 libs_qga="-lm $libs_qga" 5150else 5151 error_exit "libm check failed" 5152fi 5153 5154########################################## 5155# Do we need librt 5156# uClibc provides 2 versions of clock_gettime(), one with realtime 5157# support and one without. This means that the clock_gettime() don't 5158# need -lrt. We still need it for timer_create() so we check for this 5159# function in addition. 5160cat > $TMPC <<EOF 5161#include <signal.h> 5162#include <time.h> 5163int main(void) { 5164 timer_create(CLOCK_REALTIME, NULL, NULL); 5165 return clock_gettime(CLOCK_REALTIME, NULL); 5166} 5167EOF 5168 5169if compile_prog "" "" ; then 5170 : 5171# we need pthread for static linking. use previous pthread test result 5172elif compile_prog "" "$pthread_lib -lrt" ; then 5173 LIBS="$LIBS -lrt" 5174 libs_qga="$libs_qga -lrt" 5175fi 5176 5177# Check whether we need to link libutil for openpty() 5178cat > $TMPC << EOF 5179extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 5180int main(void) { return openpty(0, 0, 0, 0, 0); } 5181EOF 5182 5183have_openpty="no" 5184if compile_prog "" "" ; then 5185 have_openpty="yes" 5186else 5187 if compile_prog "" "-lutil" ; then 5188 libs_softmmu="-lutil $libs_softmmu" 5189 libs_tools="-lutil $libs_tools" 5190 have_openpty="yes" 5191 fi 5192fi 5193 5194########################################## 5195# spice probe 5196if test "$spice" != "no" ; then 5197 cat > $TMPC << EOF 5198#include <spice.h> 5199int main(void) { spice_server_new(); return 0; } 5200EOF 5201 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 5202 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 5203 if $pkg_config --atleast-version=0.12.5 spice-server && \ 5204 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 5205 compile_prog "$spice_cflags" "$spice_libs" ; then 5206 spice="yes" 5207 libs_softmmu="$libs_softmmu $spice_libs" 5208 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 5209 spice_protocol_version=$($pkg_config --modversion spice-protocol) 5210 spice_server_version=$($pkg_config --modversion spice-server) 5211 else 5212 if test "$spice" = "yes" ; then 5213 feature_not_found "spice" \ 5214 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 5215 fi 5216 spice="no" 5217 fi 5218fi 5219 5220# check for smartcard support 5221if test "$smartcard" != "no"; then 5222 if $pkg_config --atleast-version=2.5.1 libcacard; then 5223 libcacard_cflags=$($pkg_config --cflags libcacard) 5224 libcacard_libs=$($pkg_config --libs libcacard) 5225 smartcard="yes" 5226 else 5227 if test "$smartcard" = "yes"; then 5228 feature_not_found "smartcard" "Install libcacard devel" 5229 fi 5230 smartcard="no" 5231 fi 5232fi 5233 5234# check for libusb 5235if test "$libusb" != "no" ; then 5236 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 5237 libusb="yes" 5238 libusb_cflags=$($pkg_config --cflags libusb-1.0) 5239 libusb_libs=$($pkg_config --libs libusb-1.0) 5240 else 5241 if test "$libusb" = "yes"; then 5242 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 5243 fi 5244 libusb="no" 5245 fi 5246fi 5247 5248# check for usbredirparser for usb network redirection support 5249if test "$usb_redir" != "no" ; then 5250 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 5251 usb_redir="yes" 5252 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 5253 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 5254 else 5255 if test "$usb_redir" = "yes"; then 5256 feature_not_found "usb-redir" "Install usbredir devel" 5257 fi 5258 usb_redir="no" 5259 fi 5260fi 5261 5262########################################## 5263# check if we have VSS SDK headers for win 5264 5265if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5266 test "$vss_win32_sdk" != "no" ; then 5267 case "$vss_win32_sdk" in 5268 "") vss_win32_include="-isystem $source_path" ;; 5269 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 5270 # handle path with spaces. So we symlink the headers into ".sdk/vss". 5271 vss_win32_include="-isystem $source_path/.sdk/vss" 5272 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 5273 ;; 5274 *) vss_win32_include="-isystem $vss_win32_sdk" 5275 esac 5276 cat > $TMPC << EOF 5277#define __MIDL_user_allocate_free_DEFINED__ 5278#include <inc/win2003/vss.h> 5279int main(void) { return VSS_CTX_BACKUP; } 5280EOF 5281 if compile_prog "$vss_win32_include" "" ; then 5282 guest_agent_with_vss="yes" 5283 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 5284 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 5285 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 5286 else 5287 if test "$vss_win32_sdk" != "" ; then 5288 echo "ERROR: Please download and install Microsoft VSS SDK:" 5289 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 5290 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 5291 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 5292 echo "ERROR: The headers are extracted in the directory \`inc'." 5293 feature_not_found "VSS support" 5294 fi 5295 guest_agent_with_vss="no" 5296 fi 5297fi 5298 5299########################################## 5300# lookup Windows platform SDK (if not specified) 5301# The SDK is needed only to build .tlb (type library) file of guest agent 5302# VSS provider from the source. It is usually unnecessary because the 5303# pre-compiled .tlb file is included. 5304 5305if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5306 test "$guest_agent_with_vss" = "yes" ; then 5307 if test -z "$win_sdk"; then 5308 programfiles="$PROGRAMFILES" 5309 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 5310 if test -n "$programfiles"; then 5311 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 5312 else 5313 feature_not_found "Windows SDK" 5314 fi 5315 elif test "$win_sdk" = "no"; then 5316 win_sdk="" 5317 fi 5318fi 5319 5320########################################## 5321# check if mingw environment provides a recent ntddscsi.h 5322if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 5323 cat > $TMPC << EOF 5324#include <windows.h> 5325#include <ntddscsi.h> 5326int main(void) { 5327#if !defined(IOCTL_SCSI_GET_ADDRESS) 5328#error Missing required ioctl definitions 5329#endif 5330 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 5331 return addr.Lun; 5332} 5333EOF 5334 if compile_prog "" "" ; then 5335 guest_agent_ntddscsi=yes 5336 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 5337 fi 5338fi 5339 5340########################################## 5341# virgl renderer probe 5342 5343if test "$virglrenderer" != "no" ; then 5344 cat > $TMPC << EOF 5345#include <virglrenderer.h> 5346int main(void) { virgl_renderer_poll(); return 0; } 5347EOF 5348 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 5349 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 5350 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 5351 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 5352 compile_prog "$virgl_cflags" "$virgl_libs" ; then 5353 virglrenderer="yes" 5354 else 5355 if test "$virglrenderer" = "yes" ; then 5356 feature_not_found "virglrenderer" 5357 fi 5358 virglrenderer="no" 5359 fi 5360fi 5361 5362########################################## 5363# capstone 5364 5365case "$capstone" in 5366 "" | yes) 5367 if $pkg_config capstone; then 5368 capstone=system 5369 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5370 capstone=git 5371 elif test -e "${source_path}/capstone/Makefile" ; then 5372 capstone=internal 5373 elif test -z "$capstone" ; then 5374 capstone=no 5375 else 5376 feature_not_found "capstone" "Install capstone devel or git submodule" 5377 fi 5378 ;; 5379 5380 system) 5381 if ! $pkg_config capstone; then 5382 feature_not_found "capstone" "Install capstone devel" 5383 fi 5384 ;; 5385esac 5386 5387case "$capstone" in 5388 git | internal) 5389 if test "$capstone" = git; then 5390 git_submodules="${git_submodules} capstone" 5391 fi 5392 mkdir -p capstone 5393 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include" 5394 if test "$mingw32" = "yes"; then 5395 LIBCAPSTONE=capstone.lib 5396 else 5397 LIBCAPSTONE=libcapstone.a 5398 fi 5399 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu" 5400 ;; 5401 5402 system) 5403 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" 5404 libs_cpu="$($pkg_config --libs capstone) $libs_cpu" 5405 ;; 5406 5407 no) 5408 ;; 5409 *) 5410 error_exit "Unknown state for capstone: $capstone" 5411 ;; 5412esac 5413 5414########################################## 5415# check if we have fdatasync 5416 5417fdatasync=no 5418cat > $TMPC << EOF 5419#include <unistd.h> 5420int main(void) { 5421#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 5422return fdatasync(0); 5423#else 5424#error Not supported 5425#endif 5426} 5427EOF 5428if compile_prog "" "" ; then 5429 fdatasync=yes 5430fi 5431 5432########################################## 5433# check if we have madvise 5434 5435madvise=no 5436cat > $TMPC << EOF 5437#include <sys/types.h> 5438#include <sys/mman.h> 5439#include <stddef.h> 5440int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 5441EOF 5442if compile_prog "" "" ; then 5443 madvise=yes 5444fi 5445 5446########################################## 5447# check if we have posix_madvise 5448 5449posix_madvise=no 5450cat > $TMPC << EOF 5451#include <sys/mman.h> 5452#include <stddef.h> 5453int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 5454EOF 5455if compile_prog "" "" ; then 5456 posix_madvise=yes 5457fi 5458 5459########################################## 5460# check if we have posix_memalign() 5461 5462posix_memalign=no 5463cat > $TMPC << EOF 5464#include <stdlib.h> 5465int main(void) { 5466 void *p; 5467 return posix_memalign(&p, 8, 8); 5468} 5469EOF 5470if compile_prog "" "" ; then 5471 posix_memalign=yes 5472fi 5473 5474########################################## 5475# check if we have posix_syslog 5476 5477posix_syslog=no 5478cat > $TMPC << EOF 5479#include <syslog.h> 5480int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 5481EOF 5482if compile_prog "" "" ; then 5483 posix_syslog=yes 5484fi 5485 5486########################################## 5487# check if we have sem_timedwait 5488 5489sem_timedwait=no 5490cat > $TMPC << EOF 5491#include <semaphore.h> 5492int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 5493EOF 5494if compile_prog "" "" ; then 5495 sem_timedwait=yes 5496fi 5497 5498########################################## 5499# check if we have strchrnul 5500 5501strchrnul=no 5502cat > $TMPC << EOF 5503#include <string.h> 5504int main(void); 5505// Use a haystack that the compiler shouldn't be able to constant fold 5506char *haystack = (char*)&main; 5507int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 5508EOF 5509if compile_prog "" "" ; then 5510 strchrnul=yes 5511fi 5512 5513######################################### 5514# check if we have st_atim 5515 5516st_atim=no 5517cat > $TMPC << EOF 5518#include <sys/stat.h> 5519#include <stddef.h> 5520int main(void) { return offsetof(struct stat, st_atim); } 5521EOF 5522if compile_prog "" "" ; then 5523 st_atim=yes 5524fi 5525 5526########################################## 5527# check if trace backend exists 5528 5529$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 5530if test "$?" -ne 0 ; then 5531 error_exit "invalid trace backends" \ 5532 "Please choose supported trace backends." 5533fi 5534 5535########################################## 5536# For 'ust' backend, test if ust headers are present 5537if have_backend "ust"; then 5538 cat > $TMPC << EOF 5539#include <lttng/tracepoint.h> 5540int main(void) { return 0; } 5541EOF 5542 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 5543 if $pkg_config lttng-ust --exists; then 5544 lttng_ust_libs=$($pkg_config --libs lttng-ust) 5545 else 5546 lttng_ust_libs="-llttng-ust -ldl" 5547 fi 5548 if $pkg_config liburcu-bp --exists; then 5549 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 5550 else 5551 urcu_bp_libs="-lurcu-bp" 5552 fi 5553 5554 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 5555 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 5556 else 5557 error_exit "Trace backend 'ust' missing lttng-ust header files" 5558 fi 5559fi 5560 5561########################################## 5562# For 'dtrace' backend, test if 'dtrace' command is present 5563if have_backend "dtrace"; then 5564 if ! has 'dtrace' ; then 5565 error_exit "dtrace command is not found in PATH $PATH" 5566 fi 5567 trace_backend_stap="no" 5568 if has 'stap' ; then 5569 trace_backend_stap="yes" 5570 fi 5571fi 5572 5573########################################## 5574# check and set a backend for coroutine 5575 5576# We prefer ucontext, but it's not always possible. The fallback 5577# is sigcontext. On Windows the only valid backend is the Windows 5578# specific one. 5579 5580ucontext_works=no 5581if test "$darwin" != "yes"; then 5582 cat > $TMPC << EOF 5583#include <ucontext.h> 5584#ifdef __stub_makecontext 5585#error Ignoring glibc stub makecontext which will always fail 5586#endif 5587int main(void) { makecontext(0, 0, 0); return 0; } 5588EOF 5589 if compile_prog "" "" ; then 5590 ucontext_works=yes 5591 fi 5592fi 5593 5594if test "$coroutine" = ""; then 5595 if test "$mingw32" = "yes"; then 5596 coroutine=win32 5597 elif test "$ucontext_works" = "yes"; then 5598 coroutine=ucontext 5599 else 5600 coroutine=sigaltstack 5601 fi 5602else 5603 case $coroutine in 5604 windows) 5605 if test "$mingw32" != "yes"; then 5606 error_exit "'windows' coroutine backend only valid for Windows" 5607 fi 5608 # Unfortunately the user visible backend name doesn't match the 5609 # coroutine-*.c filename for this case, so we have to adjust it here. 5610 coroutine=win32 5611 ;; 5612 ucontext) 5613 if test "$ucontext_works" != "yes"; then 5614 feature_not_found "ucontext" 5615 fi 5616 ;; 5617 sigaltstack) 5618 if test "$mingw32" = "yes"; then 5619 error_exit "only the 'windows' coroutine backend is valid for Windows" 5620 fi 5621 ;; 5622 *) 5623 error_exit "unknown coroutine backend $coroutine" 5624 ;; 5625 esac 5626fi 5627 5628if test "$coroutine_pool" = ""; then 5629 coroutine_pool=yes 5630fi 5631 5632if test "$debug_stack_usage" = "yes"; then 5633 if test "$coroutine_pool" = "yes"; then 5634 echo "WARN: disabling coroutine pool for stack usage debugging" 5635 coroutine_pool=no 5636 fi 5637fi 5638 5639################################################## 5640# SafeStack 5641 5642 5643if test "$safe_stack" = "yes"; then 5644cat > $TMPC << EOF 5645int main(int argc, char *argv[]) 5646{ 5647#if ! __has_feature(safe_stack) 5648#error SafeStack Disabled 5649#endif 5650 return 0; 5651} 5652EOF 5653 flag="-fsanitize=safe-stack" 5654 # Check that safe-stack is supported and enabled. 5655 if compile_prog "-Werror $flag" "$flag"; then 5656 # Flag needed both at compilation and at linking 5657 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 5658 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 5659 else 5660 error_exit "SafeStack not supported by your compiler" 5661 fi 5662 if test "$coroutine" != "ucontext"; then 5663 error_exit "SafeStack is only supported by the coroutine backend ucontext" 5664 fi 5665else 5666cat > $TMPC << EOF 5667int main(int argc, char *argv[]) 5668{ 5669#if defined(__has_feature) 5670#if __has_feature(safe_stack) 5671#error SafeStack Enabled 5672#endif 5673#endif 5674 return 0; 5675} 5676EOF 5677if test "$safe_stack" = "no"; then 5678 # Make sure that safe-stack is disabled 5679 if ! compile_prog "-Werror" ""; then 5680 # SafeStack was already enabled, try to explicitly remove the feature 5681 flag="-fno-sanitize=safe-stack" 5682 if ! compile_prog "-Werror $flag" "$flag"; then 5683 error_exit "Configure cannot disable SafeStack" 5684 fi 5685 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 5686 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 5687 fi 5688else # "$safe_stack" = "" 5689 # Set safe_stack to yes or no based on pre-existing flags 5690 if compile_prog "-Werror" ""; then 5691 safe_stack="no" 5692 else 5693 safe_stack="yes" 5694 if test "$coroutine" != "ucontext"; then 5695 error_exit "SafeStack is only supported by the coroutine backend ucontext" 5696 fi 5697 fi 5698fi 5699fi 5700 5701########################################## 5702# check if we have open_by_handle_at 5703 5704open_by_handle_at=no 5705cat > $TMPC << EOF 5706#include <fcntl.h> 5707#if !defined(AT_EMPTY_PATH) 5708# error missing definition 5709#else 5710int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 5711#endif 5712EOF 5713if compile_prog "" "" ; then 5714 open_by_handle_at=yes 5715fi 5716 5717######################################## 5718# check if we have linux/magic.h 5719 5720linux_magic_h=no 5721cat > $TMPC << EOF 5722#include <linux/magic.h> 5723int main(void) { 5724 return 0; 5725} 5726EOF 5727if compile_prog "" "" ; then 5728 linux_magic_h=yes 5729fi 5730 5731######################################## 5732# check whether we can disable warning option with a pragma (this is needed 5733# to silence warnings in the headers of some versions of external libraries). 5734# This test has to be compiled with -Werror as otherwise an unknown pragma is 5735# only a warning. 5736# 5737# If we can't selectively disable warning in the code, disable -Werror so that 5738# the build doesn't fail anyway. 5739 5740pragma_disable_unused_but_set=no 5741cat > $TMPC << EOF 5742#pragma GCC diagnostic push 5743#pragma GCC diagnostic ignored "-Wstrict-prototypes" 5744#pragma GCC diagnostic pop 5745 5746int main(void) { 5747 return 0; 5748} 5749EOF 5750if compile_prog "-Werror" "" ; then 5751 pragma_diagnostic_available=yes 5752else 5753 werror=no 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} 6347EOF 6348 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 6349 have_ubsan=yes 6350 fi 6351 6352 if check_include "sanitizer/asan_interface.h" ; then 6353 have_asan_iface_h=yes 6354 fi 6355 6356 cat > $TMPC << EOF 6357#include <sanitizer/asan_interface.h> 6358int main(void) { 6359 __sanitizer_start_switch_fiber(0, 0, 0); 6360 return 0; 6361} 6362EOF 6363 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 6364 have_asan_iface_fiber=yes 6365 fi 6366fi 6367 6368########################################## 6369# checks for fuzzer 6370if test "$fuzzing" = "yes" ; then 6371 write_c_fuzzer_skeleton 6372 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then 6373 have_fuzzer=yes 6374 fi 6375fi 6376 6377# Thread sanitizer is, for now, much noisier than the other sanitizers; 6378# keep it separate until that is not the case. 6379if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 6380 error_exit "TSAN is not supported with other sanitiziers." 6381fi 6382have_tsan=no 6383have_tsan_iface_fiber=no 6384if test "$tsan" = "yes" ; then 6385 write_c_skeleton 6386 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 6387 have_tsan=yes 6388 fi 6389 cat > $TMPC << EOF 6390#include <sanitizer/tsan_interface.h> 6391int main(void) { 6392 __tsan_create_fiber(0); 6393 return 0; 6394} 6395EOF 6396 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 6397 have_tsan_iface_fiber=yes 6398 fi 6399fi 6400 6401########################################## 6402# check for libpmem 6403 6404if test "$libpmem" != "no"; then 6405 if $pkg_config --exists "libpmem"; then 6406 libpmem="yes" 6407 libpmem_libs=$($pkg_config --libs libpmem) 6408 libpmem_cflags=$($pkg_config --cflags libpmem) 6409 libs_softmmu="$libs_softmmu $libpmem_libs" 6410 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" 6411 else 6412 if test "$libpmem" = "yes" ; then 6413 feature_not_found "libpmem" "Install nvml or pmdk" 6414 fi 6415 libpmem="no" 6416 fi 6417fi 6418 6419########################################## 6420# check for libdaxctl 6421 6422if test "$libdaxctl" != "no"; then 6423 if $pkg_config --atleast-version=57 "libdaxctl"; then 6424 libdaxctl="yes" 6425 libdaxctl_libs=$($pkg_config --libs libdaxctl) 6426 libdaxctl_cflags=$($pkg_config --cflags libdaxctl) 6427 libs_softmmu="$libs_softmmu $libdaxctl_libs" 6428 QEMU_CFLAGS="$QEMU_CFLAGS $libdaxctl_cflags" 6429 else 6430 if test "$libdaxctl" = "yes" ; then 6431 feature_not_found "libdaxctl" "Install libdaxctl" 6432 fi 6433 libdaxctl="no" 6434 fi 6435fi 6436 6437########################################## 6438# check for slirp 6439 6440# slirp is only required when building softmmu targets 6441if test -z "$slirp" -a "$softmmu" != "yes" ; then 6442 slirp="no" 6443fi 6444 6445case "$slirp" in 6446 "" | yes) 6447 if $pkg_config slirp; then 6448 slirp=system 6449 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 6450 slirp=git 6451 elif test -e "${source_path}/slirp/Makefile" ; then 6452 slirp=internal 6453 elif test -z "$slirp" ; then 6454 slirp=no 6455 else 6456 feature_not_found "slirp" "Install slirp devel or git submodule" 6457 fi 6458 ;; 6459 6460 system) 6461 if ! $pkg_config slirp; then 6462 feature_not_found "slirp" "Install slirp devel" 6463 fi 6464 ;; 6465esac 6466 6467case "$slirp" in 6468 git | internal) 6469 if test "$slirp" = git; then 6470 git_submodules="${git_submodules} slirp" 6471 fi 6472 mkdir -p slirp 6473 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src" 6474 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp" 6475 if test "$mingw32" = "yes" ; then 6476 slirp_libs="$slirp_libs -lws2_32 -liphlpapi" 6477 fi 6478 ;; 6479 6480 system) 6481 slirp_version=$($pkg_config --modversion slirp 2>/dev/null) 6482 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null) 6483 slirp_libs=$($pkg_config --libs slirp 2>/dev/null) 6484 ;; 6485 6486 no) 6487 ;; 6488 *) 6489 error_exit "Unknown state for slirp: $slirp" 6490 ;; 6491esac 6492 6493########################################## 6494# check for usable __NR_keyctl syscall 6495 6496if test "$linux" = "yes" ; then 6497 6498 have_keyring=no 6499 cat > $TMPC << EOF 6500#include <errno.h> 6501#include <asm/unistd.h> 6502#include <linux/keyctl.h> 6503#include <unistd.h> 6504int main(void) { 6505 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 6506} 6507EOF 6508 if compile_prog "" "" ; then 6509 have_keyring=yes 6510 fi 6511fi 6512if test "$secret_keyring" != "no" 6513then 6514 if test "$have_keyring" = "yes" 6515 then 6516 secret_keyring=yes 6517 else 6518 if test "$secret_keyring" = "yes" 6519 then 6520 error_exit "syscall __NR_keyctl requested, \ 6521but not implemented on your system" 6522 else 6523 secret_keyring=no 6524 fi 6525 fi 6526fi 6527 6528########################################## 6529# check for usable keyutils.h 6530 6531if test "$linux" = "yes" ; then 6532 6533 have_keyutils=no 6534 cat > $TMPC << EOF 6535#include <errno.h> 6536#include <asm/unistd.h> 6537#include <unistd.h> 6538#include <sys/types.h> 6539#include <keyutils.h> 6540int main(void) { 6541 return request_key("user", NULL, NULL, 0); 6542} 6543EOF 6544 if compile_prog "" "-lkeyutils"; then 6545 have_keyutils=yes 6546 fi 6547fi 6548 6549 6550########################################## 6551# End of CC checks 6552# After here, no more $cc or $ld runs 6553 6554write_c_skeleton 6555 6556if test "$gcov" = "yes" ; then 6557 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS" 6558 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS" 6559elif test "$fortify_source" = "yes" ; then 6560 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 6561elif test "$debug" = "no"; then 6562 CFLAGS="-O2 $CFLAGS" 6563fi 6564 6565if test "$have_asan" = "yes"; then 6566 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 6567 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 6568 if test "$have_asan_iface_h" = "no" ; then 6569 echo "ASAN build enabled, but ASAN header missing." \ 6570 "Without code annotation, the report may be inferior." 6571 elif test "$have_asan_iface_fiber" = "no" ; then 6572 echo "ASAN build enabled, but ASAN header is too old." \ 6573 "Without code annotation, the report may be inferior." 6574 fi 6575fi 6576if test "$have_tsan" = "yes" ; then 6577 if test "$have_tsan_iface_fiber" = "yes" ; then 6578 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 6579 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 6580 else 6581 error_exit "Cannot enable TSAN due to missing fiber annotation interface." 6582 fi 6583elif test "$tsan" = "yes" ; then 6584 error_exit "Cannot enable TSAN due to missing sanitize thread interface." 6585fi 6586if test "$have_ubsan" = "yes"; then 6587 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 6588 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 6589fi 6590 6591########################################## 6592# Do we have libnfs 6593if test "$libnfs" != "no" ; then 6594 if $pkg_config --atleast-version=1.9.3 libnfs; then 6595 libnfs="yes" 6596 libnfs_libs=$($pkg_config --libs libnfs) 6597 else 6598 if test "$libnfs" = "yes" ; then 6599 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 6600 fi 6601 libnfs="no" 6602 fi 6603fi 6604 6605########################################## 6606# Do we have libudev 6607if test "$libudev" != "no" ; then 6608 if $pkg_config libudev && test "$static" != "yes"; then 6609 libudev="yes" 6610 libudev_libs=$($pkg_config --libs libudev) 6611 else 6612 libudev="no" 6613 fi 6614fi 6615 6616# Now we've finished running tests it's OK to add -Werror to the compiler flags 6617if test "$werror" = "yes"; then 6618 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 6619fi 6620 6621# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 6622if test "$solaris" = "no" && test "$tsan" = "no"; then 6623 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 6624 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 6625 fi 6626fi 6627 6628# test if pod2man has --utf8 option 6629if pod2man --help | grep -q utf8; then 6630 POD2MAN="pod2man --utf8" 6631else 6632 POD2MAN="pod2man" 6633fi 6634 6635# Use ASLR, no-SEH and DEP if available 6636if test "$mingw32" = "yes" ; then 6637 for flag in --dynamicbase --no-seh --nxcompat; do 6638 if ld_has $flag ; then 6639 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 6640 fi 6641 done 6642fi 6643 6644# Disable OpenBSD W^X if available 6645if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then 6646 cat > $TMPC <<EOF 6647 int main(void) { return 0; } 6648EOF 6649 wx_ldflags="-Wl,-z,wxneeded" 6650 if compile_prog "" "$wx_ldflags"; then 6651 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags" 6652 fi 6653fi 6654 6655qemu_confdir=$sysconfdir$confsuffix 6656qemu_moddir=$libdir$confsuffix 6657qemu_datadir=$datadir$confsuffix 6658qemu_localedir="$datadir/locale" 6659qemu_icondir="$datadir/icons" 6660qemu_desktopdir="$datadir/applications" 6661 6662# We can only support ivshmem if we have eventfd 6663if [ "$eventfd" = "yes" ]; then 6664 ivshmem=yes 6665fi 6666 6667tools="" 6668if test "$want_tools" = "yes" ; then 6669 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools" 6670 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 6671 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools" 6672 fi 6673 if [ "$ivshmem" = "yes" ]; then 6674 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 6675 fi 6676 if [ "$curl" = "yes" ]; then 6677 tools="elf2dmp\$(EXESUF) $tools" 6678 fi 6679fi 6680if test "$softmmu" = yes ; then 6681 if test "$linux" = yes; then 6682 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then 6683 virtfs=yes 6684 helpers="$helpers fsdev/virtfs-proxy-helper\$(EXESUF)" 6685 else 6686 if test "$virtfs" = yes; then 6687 error_exit "VirtFS requires libcap-ng devel and libattr devel" 6688 fi 6689 virtfs=no 6690 fi 6691 if test "$mpath" != no && test "$mpathpersist" = yes ; then 6692 mpath=yes 6693 else 6694 if test "$mpath" = yes; then 6695 error_exit "Multipath requires libmpathpersist devel" 6696 fi 6697 mpath=no 6698 fi 6699 helpers="$helpers scsi/qemu-pr-helper\$(EXESUF)" 6700 else 6701 if test "$virtfs" = yes; then 6702 error_exit "VirtFS is supported only on Linux" 6703 fi 6704 virtfs=no 6705 if test "$mpath" = yes; then 6706 error_exit "Multipath is supported only on Linux" 6707 fi 6708 mpath=no 6709 fi 6710 if test "$xkbcommon" = "yes"; then 6711 tools="qemu-keymap\$(EXESUF) $tools" 6712 fi 6713fi 6714 6715# Probe for guest agent support/options 6716 6717if [ "$guest_agent" != "no" ]; then 6718 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 6719 guest_agent=no 6720 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 6721 tools="qemu-ga\$(EXESUF) $tools" 6722 guest_agent=yes 6723 elif [ "$guest_agent" != yes ]; then 6724 guest_agent=no 6725 else 6726 error_exit "Guest agent is not supported on this platform" 6727 fi 6728fi 6729 6730# Guest agent Window MSI package 6731 6732if test "$guest_agent" != yes; then 6733 if test "$guest_agent_msi" = yes; then 6734 error_exit "MSI guest agent package requires guest agent enabled" 6735 fi 6736 guest_agent_msi=no 6737elif test "$mingw32" != "yes"; then 6738 if test "$guest_agent_msi" = "yes"; then 6739 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 6740 fi 6741 guest_agent_msi=no 6742elif ! has wixl; then 6743 if test "$guest_agent_msi" = "yes"; then 6744 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 6745 fi 6746 guest_agent_msi=no 6747else 6748 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 6749 # disabled explicitly 6750 if test "$guest_agent_msi" != "no"; then 6751 guest_agent_msi=yes 6752 fi 6753fi 6754 6755if test "$guest_agent_msi" = "yes"; then 6756 if test "$guest_agent_with_vss" = "yes"; then 6757 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 6758 fi 6759 6760 if test "$QEMU_GA_MANUFACTURER" = ""; then 6761 QEMU_GA_MANUFACTURER=QEMU 6762 fi 6763 6764 if test "$QEMU_GA_DISTRO" = ""; then 6765 QEMU_GA_DISTRO=Linux 6766 fi 6767 6768 if test "$QEMU_GA_VERSION" = ""; then 6769 QEMU_GA_VERSION=$(cat $source_path/VERSION) 6770 fi 6771 6772 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 6773 6774 case "$cpu" in 6775 x86_64) 6776 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 6777 ;; 6778 i386) 6779 QEMU_GA_MSI_ARCH="-D Arch=32" 6780 ;; 6781 *) 6782 error_exit "CPU $cpu not supported for building installation package" 6783 ;; 6784 esac 6785fi 6786 6787# Mac OS X ships with a broken assembler 6788roms= 6789if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 6790 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 6791 test "$softmmu" = yes ; then 6792 # Different host OS linkers have different ideas about the name of the ELF 6793 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 6794 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 6795 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 6796 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 6797 ld_i386_emulation="$emu" 6798 roms="optionrom" 6799 break 6800 fi 6801 done 6802fi 6803 6804# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 6805if test "$cpu" = "s390x" ; then 6806 write_c_skeleton 6807 if compile_prog "-march=z900" ""; then 6808 roms="$roms s390-ccw" 6809 # SLOF is required for building the s390-ccw firmware on s390x, 6810 # since it is using the libnet code from SLOF for network booting. 6811 if test -e "${source_path}/.git" ; then 6812 git_submodules="${git_submodules} roms/SLOF" 6813 fi 6814 fi 6815fi 6816 6817# Check that the C++ compiler exists and works with the C compiler. 6818# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 6819if has $cxx; then 6820 cat > $TMPC <<EOF 6821int c_function(void); 6822int main(void) { return c_function(); } 6823EOF 6824 6825 compile_object 6826 6827 cat > $TMPCXX <<EOF 6828extern "C" { 6829 int c_function(void); 6830} 6831int c_function(void) { return 42; } 6832EOF 6833 6834 update_cxxflags 6835 6836 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 6837 # C++ compiler $cxx works ok with C compiler $cc 6838 : 6839 else 6840 echo "C++ compiler $cxx does not work with C compiler $cc" 6841 echo "Disabling C++ specific optional code" 6842 cxx= 6843 fi 6844else 6845 echo "No C++ compiler available; disabling C++ specific optional code" 6846 cxx= 6847fi 6848 6849echo_version() { 6850 if test "$1" = "yes" ; then 6851 echo "($2)" 6852 fi 6853} 6854 6855# prepend pixman and ftd flags after all config tests are done 6856QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 6857QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 6858libs_softmmu="$pixman_libs $libs_softmmu" 6859 6860echo "Install prefix $prefix" 6861echo "BIOS directory $(eval echo $qemu_datadir)" 6862echo "firmware path $(eval echo $firmwarepath)" 6863echo "binary directory $(eval echo $bindir)" 6864echo "library directory $(eval echo $libdir)" 6865echo "module directory $(eval echo $qemu_moddir)" 6866echo "libexec directory $(eval echo $libexecdir)" 6867echo "include directory $(eval echo $includedir)" 6868echo "config directory $(eval echo $sysconfdir)" 6869if test "$mingw32" = "no" ; then 6870echo "local state directory $(eval echo $local_statedir)" 6871echo "Manual directory $(eval echo $mandir)" 6872echo "ELF interp prefix $interp_prefix" 6873else 6874echo "local state directory queried at runtime" 6875echo "Windows SDK $win_sdk" 6876fi 6877echo "Build directory $(pwd)" 6878echo "Source path $source_path" 6879echo "GIT binary $git" 6880echo "GIT submodules $git_submodules" 6881echo "C compiler $cc" 6882echo "Host C compiler $host_cc" 6883echo "C++ compiler $cxx" 6884echo "Objective-C compiler $objcc" 6885echo "ARFLAGS $ARFLAGS" 6886echo "CFLAGS $CFLAGS" 6887echo "QEMU_CFLAGS $QEMU_CFLAGS" 6888echo "QEMU_LDFLAGS $QEMU_LDFLAGS" 6889echo "make $make" 6890echo "install $install" 6891echo "python $python ($python_version)" 6892if test "$docs" != "no"; then 6893 echo "sphinx-build $sphinx_build" 6894fi 6895echo "genisoimage $genisoimage" 6896echo "efi_aarch64 $efi_aarch64" 6897echo "python_yaml $python_yaml" 6898echo "slirp support $slirp $(echo_version $slirp $slirp_version)" 6899if test "$slirp" != "no" ; then 6900 echo "smbd $smbd" 6901fi 6902echo "module support $modules" 6903echo "alt path mod load $module_upgrades" 6904echo "host CPU $cpu" 6905echo "host big endian $bigendian" 6906echo "target list $target_list" 6907echo "gprof enabled $gprof" 6908echo "sparse enabled $sparse" 6909echo "strip binaries $strip_opt" 6910echo "profiler $profiler" 6911echo "static build $static" 6912echo "safe stack $safe_stack" 6913if test "$darwin" = "yes" ; then 6914 echo "Cocoa support $cocoa" 6915fi 6916echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 6917echo "SDL image support $sdl_image" 6918echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 6919echo "GTK GL support $gtk_gl" 6920echo "VTE support $vte $(echo_version $vte $vteversion)" 6921echo "TLS priority $tls_priority" 6922echo "GNUTLS support $gnutls" 6923echo "libgcrypt $gcrypt" 6924if test "$gcrypt" = "yes" 6925then 6926 echo " hmac $gcrypt_hmac" 6927 echo " XTS $gcrypt_xts" 6928fi 6929echo "nettle $nettle $(echo_version $nettle $nettle_version)" 6930if test "$nettle" = "yes" 6931then 6932 echo " XTS $nettle_xts" 6933fi 6934echo "libtasn1 $tasn1" 6935echo "PAM $auth_pam" 6936echo "iconv support $iconv" 6937echo "curses support $curses" 6938echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)" 6939echo "curl support $curl" 6940echo "mingw32 support $mingw32" 6941echo "Audio drivers $audio_drv_list" 6942echo "Block whitelist (rw) $block_drv_rw_whitelist" 6943echo "Block whitelist (ro) $block_drv_ro_whitelist" 6944echo "VirtFS support $virtfs" 6945echo "Multipath support $mpath" 6946echo "VNC support $vnc" 6947if test "$vnc" = "yes" ; then 6948 echo "VNC SASL support $vnc_sasl" 6949 echo "VNC JPEG support $vnc_jpeg" 6950 echo "VNC PNG support $vnc_png" 6951fi 6952echo "xen support $xen" 6953if test "$xen" = "yes" ; then 6954 echo "xen ctrl version $xen_ctrl_version" 6955fi 6956echo "brlapi support $brlapi" 6957echo "Documentation $docs" 6958echo "PIE $pie" 6959echo "vde support $vde" 6960echo "netmap support $netmap" 6961echo "Linux AIO support $linux_aio" 6962echo "Linux io_uring support $linux_io_uring" 6963echo "ATTR/XATTR support $attr" 6964echo "Install blobs $blobs" 6965echo "KVM support $kvm" 6966echo "HAX support $hax" 6967echo "HVF support $hvf" 6968echo "WHPX support $whpx" 6969echo "TCG support $tcg" 6970if test "$tcg" = "yes" ; then 6971 echo "TCG debug enabled $debug_tcg" 6972 echo "TCG interpreter $tcg_interpreter" 6973fi 6974echo "malloc trim support $malloc_trim" 6975echo "RDMA support $rdma" 6976echo "PVRDMA support $pvrdma" 6977echo "fdt support $fdt" 6978echo "membarrier $membarrier" 6979echo "preadv support $preadv" 6980echo "fdatasync $fdatasync" 6981echo "madvise $madvise" 6982echo "posix_madvise $posix_madvise" 6983echo "posix_memalign $posix_memalign" 6984echo "libcap-ng support $cap_ng" 6985echo "vhost-net support $vhost_net" 6986echo "vhost-crypto support $vhost_crypto" 6987echo "vhost-scsi support $vhost_scsi" 6988echo "vhost-vsock support $vhost_vsock" 6989echo "vhost-user support $vhost_user" 6990echo "vhost-user-fs support $vhost_user_fs" 6991echo "vhost-vdpa support $vhost_vdpa" 6992echo "Trace backends $trace_backends" 6993if have_backend "simple"; then 6994echo "Trace output file $trace_file-<pid>" 6995fi 6996echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 6997echo "rbd support $rbd" 6998echo "xfsctl support $xfs" 6999echo "smartcard support $smartcard" 7000echo "libusb $libusb" 7001echo "usb net redir $usb_redir" 7002echo "OpenGL support $opengl" 7003echo "OpenGL dmabufs $opengl_dmabuf" 7004echo "libiscsi support $libiscsi" 7005echo "libnfs support $libnfs" 7006echo "build guest agent $guest_agent" 7007echo "QGA VSS support $guest_agent_with_vss" 7008echo "QGA w32 disk info $guest_agent_ntddscsi" 7009echo "QGA MSI support $guest_agent_msi" 7010echo "seccomp support $seccomp" 7011echo "coroutine backend $coroutine" 7012echo "coroutine pool $coroutine_pool" 7013echo "debug stack usage $debug_stack_usage" 7014echo "mutex debugging $debug_mutex" 7015echo "crypto afalg $crypto_afalg" 7016echo "GlusterFS support $glusterfs" 7017echo "gcov $gcov_tool" 7018echo "gcov enabled $gcov" 7019echo "TPM support $tpm" 7020echo "libssh support $libssh" 7021echo "QOM debugging $qom_cast_debug" 7022echo "Live block migration $live_block_migration" 7023echo "lzo support $lzo" 7024echo "snappy support $snappy" 7025echo "bzip2 support $bzip2" 7026echo "lzfse support $lzfse" 7027echo "zstd support $zstd" 7028echo "NUMA host support $numa" 7029echo "libxml2 $libxml2" 7030echo "tcmalloc support $tcmalloc" 7031echo "jemalloc support $jemalloc" 7032echo "avx2 optimization $avx2_opt" 7033echo "avx512f optimization $avx512f_opt" 7034echo "replication support $replication" 7035echo "VxHS block device $vxhs" 7036echo "bochs support $bochs" 7037echo "cloop support $cloop" 7038echo "dmg support $dmg" 7039echo "qcow v1 support $qcow1" 7040echo "vdi support $vdi" 7041echo "vvfat support $vvfat" 7042echo "qed support $qed" 7043echo "parallels support $parallels" 7044echo "sheepdog support $sheepdog" 7045echo "capstone $capstone" 7046echo "libpmem support $libpmem" 7047echo "libdaxctl support $libdaxctl" 7048echo "libudev $libudev" 7049echo "default devices $default_devices" 7050echo "plugin support $plugins" 7051echo "fuzzing support $fuzzing" 7052echo "gdb $gdb_bin" 7053echo "rng-none $rng_none" 7054echo "Linux keyring $secret_keyring" 7055 7056if test "$supported_cpu" = "no"; then 7057 echo 7058 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 7059 echo 7060 echo "CPU host architecture $cpu support is not currently maintained." 7061 echo "The QEMU project intends to remove support for this host CPU in" 7062 echo "a future release if nobody volunteers to maintain it and to" 7063 echo "provide a build host for our continuous integration setup." 7064 echo "configure has succeeded and you can continue to build, but" 7065 echo "if you care about QEMU on this platform you should contact" 7066 echo "us upstream at qemu-devel@nongnu.org." 7067fi 7068 7069if test "$supported_os" = "no"; then 7070 echo 7071 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 7072 echo 7073 echo "Host OS $targetos support is not currently maintained." 7074 echo "The QEMU project intends to remove support for this host OS in" 7075 echo "a future release if nobody volunteers to maintain it and to" 7076 echo "provide a build host for our continuous integration setup." 7077 echo "configure has succeeded and you can continue to build, but" 7078 echo "if you care about QEMU on this platform you should contact" 7079 echo "us upstream at qemu-devel@nongnu.org." 7080fi 7081 7082config_host_mak="config-host.mak" 7083 7084echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 7085 7086echo "# Automatically generated by configure - do not modify" > $config_host_mak 7087echo >> $config_host_mak 7088 7089echo all: >> $config_host_mak 7090echo "prefix=$prefix" >> $config_host_mak 7091echo "bindir=$bindir" >> $config_host_mak 7092echo "libdir=$libdir" >> $config_host_mak 7093echo "libexecdir=$libexecdir" >> $config_host_mak 7094echo "includedir=$includedir" >> $config_host_mak 7095echo "mandir=$mandir" >> $config_host_mak 7096echo "sysconfdir=$sysconfdir" >> $config_host_mak 7097echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 7098echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 7099echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 7100echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 7101echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 7102if test "$mingw32" = "no" ; then 7103 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 7104fi 7105echo "qemu_helperdir=$libexecdir" >> $config_host_mak 7106echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 7107echo "qemu_icondir=$qemu_icondir" >> $config_host_mak 7108echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak 7109echo "libs_cpu=$libs_cpu" >> $config_host_mak 7110echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 7111echo "GIT=$git" >> $config_host_mak 7112echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 7113echo "GIT_UPDATE=$git_update" >> $config_host_mak 7114 7115echo "ARCH=$ARCH" >> $config_host_mak 7116 7117if test "$default_devices" = "yes" ; then 7118 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak 7119else 7120 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak 7121fi 7122if test "$debug_tcg" = "yes" ; then 7123 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 7124fi 7125if test "$strip_opt" = "yes" ; then 7126 echo "STRIP=${strip}" >> $config_host_mak 7127fi 7128if test "$bigendian" = "yes" ; then 7129 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 7130fi 7131if test "$mingw32" = "yes" ; then 7132 echo "CONFIG_WIN32=y" >> $config_host_mak 7133 rc_version=$(cat $source_path/VERSION) 7134 version_major=${rc_version%%.*} 7135 rc_version=${rc_version#*.} 7136 version_minor=${rc_version%%.*} 7137 rc_version=${rc_version#*.} 7138 version_subminor=${rc_version%%.*} 7139 version_micro=0 7140 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 7141 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 7142 if test "$guest_agent_with_vss" = "yes" ; then 7143 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 7144 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 7145 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 7146 fi 7147 if test "$guest_agent_ntddscsi" = "yes" ; then 7148 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 7149 fi 7150 if test "$guest_agent_msi" = "yes"; then 7151 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 7152 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 7153 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 7154 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 7155 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 7156 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 7157 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 7158 fi 7159else 7160 echo "CONFIG_POSIX=y" >> $config_host_mak 7161fi 7162 7163if test "$linux" = "yes" ; then 7164 echo "CONFIG_LINUX=y" >> $config_host_mak 7165fi 7166 7167if test "$darwin" = "yes" ; then 7168 echo "CONFIG_DARWIN=y" >> $config_host_mak 7169fi 7170 7171if test "$solaris" = "yes" ; then 7172 echo "CONFIG_SOLARIS=y" >> $config_host_mak 7173fi 7174if test "$haiku" = "yes" ; then 7175 echo "CONFIG_HAIKU=y" >> $config_host_mak 7176fi 7177if test "$static" = "yes" ; then 7178 echo "CONFIG_STATIC=y" >> $config_host_mak 7179fi 7180if test "$profiler" = "yes" ; then 7181 echo "CONFIG_PROFILER=y" >> $config_host_mak 7182fi 7183if test "$want_tools" = "yes" ; then 7184 echo "CONFIG_TOOLS=y" >> $config_host_mak 7185fi 7186if test "$slirp" != "no"; then 7187 echo "CONFIG_SLIRP=y" >> $config_host_mak 7188 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 7189 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak 7190 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak 7191fi 7192if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then 7193 echo "config-host.h: slirp/all" >> $config_host_mak 7194fi 7195if test "$vde" = "yes" ; then 7196 echo "CONFIG_VDE=y" >> $config_host_mak 7197 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 7198fi 7199if test "$netmap" = "yes" ; then 7200 echo "CONFIG_NETMAP=y" >> $config_host_mak 7201fi 7202if test "$l2tpv3" = "yes" ; then 7203 echo "CONFIG_L2TPV3=y" >> $config_host_mak 7204fi 7205if test "$gprof" = "yes" ; then 7206 echo "CONFIG_GPROF=y" >> $config_host_mak 7207fi 7208if test "$cap_ng" = "yes" ; then 7209 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak 7210fi 7211echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 7212for drv in $audio_drv_list; do 7213 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 7214 case "$drv" in 7215 alsa | oss | pa | sdl) 7216 echo "$def=m" >> $config_host_mak ;; 7217 *) 7218 echo "$def=y" >> $config_host_mak ;; 7219 esac 7220done 7221echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 7222echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 7223echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 7224echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 7225echo "OSS_LIBS=$oss_libs" >> $config_host_mak 7226echo "JACK_LIBS=$jack_libs" >> $config_host_mak 7227if test "$audio_win_int" = "yes" ; then 7228 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 7229fi 7230echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 7231echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 7232if test "$vnc" = "yes" ; then 7233 echo "CONFIG_VNC=y" >> $config_host_mak 7234fi 7235if test "$vnc_sasl" = "yes" ; then 7236 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 7237fi 7238if test "$vnc_jpeg" = "yes" ; then 7239 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 7240fi 7241if test "$vnc_png" = "yes" ; then 7242 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 7243fi 7244if test "$xkbcommon" = "yes" ; then 7245 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 7246 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 7247fi 7248if test "$xfs" = "yes" ; then 7249 echo "CONFIG_XFS=y" >> $config_host_mak 7250fi 7251qemu_version=$(head $source_path/VERSION) 7252echo "VERSION=$qemu_version" >>$config_host_mak 7253echo "PKGVERSION=$pkgversion" >>$config_host_mak 7254echo "SRC_PATH=$source_path" >> $config_host_mak 7255echo "TARGET_DIRS=$target_list" >> $config_host_mak 7256if [ "$docs" = "yes" ] ; then 7257 echo "BUILD_DOCS=yes" >> $config_host_mak 7258fi 7259if test "$modules" = "yes"; then 7260 # $shacmd can generate a hash started with digit, which the compiler doesn't 7261 # like as an symbol. So prefix it with an underscore 7262 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 7263 echo "CONFIG_MODULES=y" >> $config_host_mak 7264fi 7265if test "$module_upgrades" = "yes"; then 7266 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 7267fi 7268if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then 7269 echo "CONFIG_X11=y" >> $config_host_mak 7270 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 7271 echo "X11_LIBS=$x11_libs" >> $config_host_mak 7272fi 7273if test "$sdl" = "yes" ; then 7274 echo "CONFIG_SDL=m" >> $config_host_mak 7275 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 7276 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 7277 if test "$sdl_image" = "yes" ; then 7278 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak 7279 fi 7280fi 7281if test "$cocoa" = "yes" ; then 7282 echo "CONFIG_COCOA=y" >> $config_host_mak 7283fi 7284if test "$iconv" = "yes" ; then 7285 echo "CONFIG_ICONV=y" >> $config_host_mak 7286 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak 7287 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak 7288fi 7289if test "$curses" = "yes" ; then 7290 echo "CONFIG_CURSES=m" >> $config_host_mak 7291 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 7292 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 7293fi 7294if test "$pipe2" = "yes" ; then 7295 echo "CONFIG_PIPE2=y" >> $config_host_mak 7296fi 7297if test "$accept4" = "yes" ; then 7298 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 7299fi 7300if test "$splice" = "yes" ; then 7301 echo "CONFIG_SPLICE=y" >> $config_host_mak 7302fi 7303if test "$eventfd" = "yes" ; then 7304 echo "CONFIG_EVENTFD=y" >> $config_host_mak 7305fi 7306if test "$memfd" = "yes" ; then 7307 echo "CONFIG_MEMFD=y" >> $config_host_mak 7308fi 7309if test "$have_usbfs" = "yes" ; then 7310 echo "CONFIG_USBFS=y" >> $config_host_mak 7311fi 7312if test "$fallocate" = "yes" ; then 7313 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 7314fi 7315if test "$fallocate_punch_hole" = "yes" ; then 7316 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 7317fi 7318if test "$fallocate_zero_range" = "yes" ; then 7319 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 7320fi 7321if test "$posix_fallocate" = "yes" ; then 7322 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 7323fi 7324if test "$sync_file_range" = "yes" ; then 7325 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 7326fi 7327if test "$fiemap" = "yes" ; then 7328 echo "CONFIG_FIEMAP=y" >> $config_host_mak 7329fi 7330if test "$dup3" = "yes" ; then 7331 echo "CONFIG_DUP3=y" >> $config_host_mak 7332fi 7333if test "$ppoll" = "yes" ; then 7334 echo "CONFIG_PPOLL=y" >> $config_host_mak 7335fi 7336if test "$prctl_pr_set_timerslack" = "yes" ; then 7337 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 7338fi 7339if test "$epoll" = "yes" ; then 7340 echo "CONFIG_EPOLL=y" >> $config_host_mak 7341fi 7342if test "$epoll_create1" = "yes" ; then 7343 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 7344fi 7345if test "$sendfile" = "yes" ; then 7346 echo "CONFIG_SENDFILE=y" >> $config_host_mak 7347fi 7348if test "$timerfd" = "yes" ; then 7349 echo "CONFIG_TIMERFD=y" >> $config_host_mak 7350fi 7351if test "$setns" = "yes" ; then 7352 echo "CONFIG_SETNS=y" >> $config_host_mak 7353fi 7354if test "$clock_adjtime" = "yes" ; then 7355 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 7356fi 7357if test "$syncfs" = "yes" ; then 7358 echo "CONFIG_SYNCFS=y" >> $config_host_mak 7359fi 7360if test "$kcov" = "yes" ; then 7361 echo "CONFIG_KCOV=y" >> $config_host_mak 7362fi 7363if test "$inotify" = "yes" ; then 7364 echo "CONFIG_INOTIFY=y" >> $config_host_mak 7365fi 7366if test "$inotify1" = "yes" ; then 7367 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 7368fi 7369if test "$sem_timedwait" = "yes" ; then 7370 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 7371fi 7372if test "$strchrnul" = "yes" ; then 7373 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 7374fi 7375if test "$st_atim" = "yes" ; then 7376 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak 7377fi 7378if test "$byteswap_h" = "yes" ; then 7379 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 7380fi 7381if test "$bswap_h" = "yes" ; then 7382 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 7383fi 7384if test "$curl" = "yes" ; then 7385 echo "CONFIG_CURL=m" >> $config_host_mak 7386 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 7387 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 7388fi 7389if test "$brlapi" = "yes" ; then 7390 echo "CONFIG_BRLAPI=y" >> $config_host_mak 7391 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 7392fi 7393if test "$gtk" = "yes" ; then 7394 echo "CONFIG_GTK=m" >> $config_host_mak 7395 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 7396 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 7397 if test "$gtk_gl" = "yes" ; then 7398 echo "CONFIG_GTK_GL=y" >> $config_host_mak 7399 fi 7400fi 7401if test "$gio" = "yes" ; then 7402 echo "CONFIG_GIO=y" >> $config_host_mak 7403 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 7404 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 7405 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 7406fi 7407echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 7408if test "$gnutls" = "yes" ; then 7409 echo "CONFIG_GNUTLS=y" >> $config_host_mak 7410fi 7411if test "$gcrypt" = "yes" ; then 7412 echo "CONFIG_GCRYPT=y" >> $config_host_mak 7413 if test "$gcrypt_hmac" = "yes" ; then 7414 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 7415 fi 7416fi 7417if test "$nettle" = "yes" ; then 7418 echo "CONFIG_NETTLE=y" >> $config_host_mak 7419 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 7420fi 7421if test "$qemu_private_xts" = "yes" ; then 7422 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak 7423fi 7424if test "$tasn1" = "yes" ; then 7425 echo "CONFIG_TASN1=y" >> $config_host_mak 7426fi 7427if test "$auth_pam" = "yes" ; then 7428 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 7429fi 7430if test "$have_ifaddrs_h" = "yes" ; then 7431 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 7432fi 7433if test "$have_drm_h" = "yes" ; then 7434 echo "HAVE_DRM_H=y" >> $config_host_mak 7435fi 7436if test "$have_broken_size_max" = "yes" ; then 7437 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 7438fi 7439if test "$have_openpty" = "yes" ; then 7440 echo "HAVE_OPENPTY=y" >> $config_host_mak 7441fi 7442 7443# Work around a system header bug with some kernel/XFS header 7444# versions where they both try to define 'struct fsxattr': 7445# xfs headers will not try to redefine structs from linux headers 7446# if this macro is set. 7447if test "$have_fsxattr" = "yes" ; then 7448 echo "HAVE_FSXATTR=y" >> $config_host_mak 7449fi 7450if test "$have_copy_file_range" = "yes" ; then 7451 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 7452fi 7453if test "$vte" = "yes" ; then 7454 echo "CONFIG_VTE=y" >> $config_host_mak 7455 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 7456 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 7457fi 7458if test "$virglrenderer" = "yes" ; then 7459 echo "CONFIG_VIRGL=y" >> $config_host_mak 7460 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 7461 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 7462fi 7463if test "$xen" = "yes" ; then 7464 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 7465 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 7466fi 7467if test "$linux_aio" = "yes" ; then 7468 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 7469fi 7470if test "$linux_io_uring" = "yes" ; then 7471 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak 7472 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak 7473 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak 7474fi 7475if test "$attr" = "yes" ; then 7476 echo "CONFIG_ATTR=y" >> $config_host_mak 7477fi 7478if test "$libattr" = "yes" ; then 7479 echo "CONFIG_LIBATTR=y" >> $config_host_mak 7480fi 7481if test "$virtfs" = "yes" ; then 7482 echo "CONFIG_VIRTFS=y" >> $config_host_mak 7483fi 7484if test "$mpath" = "yes" ; then 7485 echo "CONFIG_MPATH=y" >> $config_host_mak 7486 if test "$mpathpersist_new_api" = "yes"; then 7487 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 7488 fi 7489fi 7490if test "$vhost_scsi" = "yes" ; then 7491 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 7492fi 7493if test "$vhost_net" = "yes" ; then 7494 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 7495fi 7496if test "$vhost_net_user" = "yes" ; then 7497 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 7498fi 7499if test "$vhost_net_vdpa" = "yes" ; then 7500 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 7501fi 7502if test "$vhost_crypto" = "yes" ; then 7503 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 7504fi 7505if test "$vhost_vsock" = "yes" ; then 7506 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 7507 if test "$vhost_user" = "yes" ; then 7508 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 7509 fi 7510fi 7511if test "$vhost_kernel" = "yes" ; then 7512 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 7513fi 7514if test "$vhost_user" = "yes" ; then 7515 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 7516fi 7517if test "$vhost_vdpa" = "yes" ; then 7518 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 7519fi 7520if test "$vhost_user_fs" = "yes" ; then 7521 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 7522fi 7523if test "$blobs" = "yes" ; then 7524 echo "INSTALL_BLOBS=yes" >> $config_host_mak 7525fi 7526if test "$iovec" = "yes" ; then 7527 echo "CONFIG_IOVEC=y" >> $config_host_mak 7528fi 7529if test "$preadv" = "yes" ; then 7530 echo "CONFIG_PREADV=y" >> $config_host_mak 7531fi 7532if test "$fdt" != "no" ; then 7533 echo "CONFIG_FDT=y" >> $config_host_mak 7534fi 7535if test "$membarrier" = "yes" ; then 7536 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 7537fi 7538if test "$signalfd" = "yes" ; then 7539 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 7540fi 7541if test "$optreset" = "yes" ; then 7542 echo "HAVE_OPTRESET=y" >> $config_host_mak 7543fi 7544if test "$tcg" = "yes"; then 7545 echo "CONFIG_TCG=y" >> $config_host_mak 7546 if test "$tcg_interpreter" = "yes" ; then 7547 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 7548 fi 7549fi 7550if test "$fdatasync" = "yes" ; then 7551 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 7552fi 7553if test "$madvise" = "yes" ; then 7554 echo "CONFIG_MADVISE=y" >> $config_host_mak 7555fi 7556if test "$posix_madvise" = "yes" ; then 7557 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 7558fi 7559if test "$posix_memalign" = "yes" ; then 7560 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 7561fi 7562 7563if test "$spice" = "yes" ; then 7564 echo "CONFIG_SPICE=y" >> $config_host_mak 7565fi 7566 7567if test "$smartcard" = "yes" ; then 7568 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 7569 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 7570 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 7571fi 7572 7573if test "$libusb" = "yes" ; then 7574 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 7575 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 7576 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 7577fi 7578 7579if test "$usb_redir" = "yes" ; then 7580 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 7581 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 7582 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 7583fi 7584 7585if test "$opengl" = "yes" ; then 7586 echo "CONFIG_OPENGL=y" >> $config_host_mak 7587 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 7588 if test "$opengl_dmabuf" = "yes" ; then 7589 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 7590 fi 7591fi 7592 7593if test "$gbm" = "yes" ; then 7594 echo "CONFIG_GBM=y" >> $config_host_mak 7595 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 7596 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 7597fi 7598 7599 7600if test "$malloc_trim" = "yes" ; then 7601 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 7602fi 7603 7604if test "$avx2_opt" = "yes" ; then 7605 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 7606fi 7607 7608if test "$avx512f_opt" = "yes" ; then 7609 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 7610fi 7611 7612if test "$lzo" = "yes" ; then 7613 echo "CONFIG_LZO=y" >> $config_host_mak 7614fi 7615 7616if test "$snappy" = "yes" ; then 7617 echo "CONFIG_SNAPPY=y" >> $config_host_mak 7618fi 7619 7620if test "$bzip2" = "yes" ; then 7621 echo "CONFIG_BZIP2=y" >> $config_host_mak 7622 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 7623fi 7624 7625if test "$lzfse" = "yes" ; then 7626 echo "CONFIG_LZFSE=y" >> $config_host_mak 7627 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak 7628fi 7629 7630if test "$zstd" = "yes" ; then 7631 echo "CONFIG_ZSTD=y" >> $config_host_mak 7632fi 7633 7634if test "$libiscsi" = "yes" ; then 7635 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 7636 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 7637 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 7638fi 7639 7640if test "$libnfs" = "yes" ; then 7641 echo "CONFIG_LIBNFS=m" >> $config_host_mak 7642 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 7643fi 7644 7645if test "$seccomp" = "yes"; then 7646 echo "CONFIG_SECCOMP=y" >> $config_host_mak 7647 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 7648 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 7649fi 7650 7651# XXX: suppress that 7652if [ "$bsd" = "yes" ] ; then 7653 echo "CONFIG_BSD=y" >> $config_host_mak 7654fi 7655 7656if test "$localtime_r" = "yes" ; then 7657 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 7658fi 7659if test "$qom_cast_debug" = "yes" ; then 7660 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 7661fi 7662if test "$rbd" = "yes" ; then 7663 echo "CONFIG_RBD=m" >> $config_host_mak 7664 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 7665 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 7666fi 7667 7668echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 7669if test "$coroutine_pool" = "yes" ; then 7670 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 7671else 7672 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 7673fi 7674 7675if test "$debug_stack_usage" = "yes" ; then 7676 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 7677fi 7678 7679if test "$crypto_afalg" = "yes" ; then 7680 echo "CONFIG_AF_ALG=y" >> $config_host_mak 7681fi 7682 7683if test "$open_by_handle_at" = "yes" ; then 7684 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 7685fi 7686 7687if test "$linux_magic_h" = "yes" ; then 7688 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 7689fi 7690 7691if test "$pragma_diagnostic_available" = "yes" ; then 7692 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=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 "$fuzzing" = "yes" ; then 7925 if test "$have_fuzzer" = "yes"; then 7926 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer" 7927 FUZZ_CFLAGS=" -fsanitize=address,fuzzer" 7928 CFLAGS=" -fsanitize=address,fuzzer-no-link" 7929 else 7930 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer" 7931 exit 1 7932 fi 7933fi 7934 7935if test "$plugins" = "yes" ; then 7936 echo "CONFIG_PLUGIN=y" >> $config_host_mak 7937 LIBS="-ldl $LIBS" 7938 # Copy the export object list to the build dir 7939 if test "$ld_dynamic_list" = "yes" ; then 7940 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 7941 ld_symbols=qemu-plugins-ld.symbols 7942 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 7943 elif test "$ld_exported_symbols_list" = "yes" ; then 7944 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 7945 ld64_symbols=qemu-plugins-ld64.symbols 7946 echo "# Automatically generated by configure - do not modify" > $ld64_symbols 7947 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 7948 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 7949 else 7950 error_exit \ 7951 "If \$plugins=yes, either \$ld_dynamic_list or " \ 7952 "\$ld_exported_symbols_list should have been set to 'yes'." 7953 fi 7954fi 7955 7956if test -n "$gdb_bin" ; then 7957 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 7958fi 7959 7960if test "$secret_keyring" = "yes" ; then 7961 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 7962 if test "$have_keyutils" = "yes" ; then 7963 echo "CONFIG_TEST_SECRET_KEYRING=y" >> $config_host_mak 7964 fi 7965fi 7966 7967if test "$tcg_interpreter" = "yes"; then 7968 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 7969elif test "$ARCH" = "sparc64" ; then 7970 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 7971elif test "$ARCH" = "s390x" ; then 7972 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 7973elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then 7974 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 7975elif test "$ARCH" = "ppc64" ; then 7976 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 7977elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then 7978 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES" 7979else 7980 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 7981fi 7982 7983echo "HELPERS=$helpers" >> $config_host_mak 7984echo "TOOLS=$tools" >> $config_host_mak 7985echo "ROMS=$roms" >> $config_host_mak 7986echo "MAKE=$make" >> $config_host_mak 7987echo "INSTALL=$install" >> $config_host_mak 7988echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 7989echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 7990echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 7991echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 7992echo "PYTHON=$python" >> $config_host_mak 7993echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak 7994echo "SPHINX_WERROR=$sphinx_werror" >> $config_host_mak 7995echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 7996echo "EFI_AARCH64=$efi_aarch64" >> $config_host_mak 7997echo "PYTHON_YAML=$python_yaml" >> $config_host_mak 7998echo "CC=$cc" >> $config_host_mak 7999if $iasl -h > /dev/null 2>&1; then 8000 echo "IASL=$iasl" >> $config_host_mak 8001fi 8002echo "HOST_CC=$host_cc" >> $config_host_mak 8003echo "CXX=$cxx" >> $config_host_mak 8004echo "OBJCC=$objcc" >> $config_host_mak 8005echo "AR=$ar" >> $config_host_mak 8006echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 8007echo "AS=$as" >> $config_host_mak 8008echo "CCAS=$ccas" >> $config_host_mak 8009echo "CPP=$cpp" >> $config_host_mak 8010echo "OBJCOPY=$objcopy" >> $config_host_mak 8011echo "LD=$ld" >> $config_host_mak 8012echo "RANLIB=$ranlib" >> $config_host_mak 8013echo "NM=$nm" >> $config_host_mak 8014echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 8015echo "WINDRES=$windres" >> $config_host_mak 8016echo "CFLAGS=$CFLAGS" >> $config_host_mak 8017echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 8018echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 8019echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 8020echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 8021if test "$sparse" = "yes" ; then 8022 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 8023 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 8024 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 8025 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 8026 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 8027fi 8028echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 8029echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 8030echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 8031echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 8032echo "LIBS+=$LIBS" >> $config_host_mak 8033echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 8034echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 8035echo "EXESUF=$EXESUF" >> $config_host_mak 8036echo "DSOSUF=$DSOSUF" >> $config_host_mak 8037echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 8038echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 8039echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 8040echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 8041echo "POD2MAN=$POD2MAN" >> $config_host_mak 8042if test "$gcov" = "yes" ; then 8043 echo "CONFIG_GCOV=y" >> $config_host_mak 8044 echo "GCOV=$gcov_tool" >> $config_host_mak 8045fi 8046 8047if test "$libudev" != "no"; then 8048 echo "CONFIG_LIBUDEV=y" >> $config_host_mak 8049 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak 8050fi 8051if test "$fuzzing" != "no"; then 8052 echo "CONFIG_FUZZ=y" >> $config_host_mak 8053 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak 8054 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak 8055fi 8056 8057if test "$edk2_blobs" = "yes" ; then 8058 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak 8059fi 8060 8061if test "$rng_none" = "yes"; then 8062 echo "CONFIG_RNG_NONE=y" >> $config_host_mak 8063fi 8064 8065# use included Linux headers 8066if test "$linux" = "yes" ; then 8067 mkdir -p linux-headers 8068 case "$cpu" in 8069 i386|x86_64|x32) 8070 linux_arch=x86 8071 ;; 8072 ppc|ppc64|ppc64le) 8073 linux_arch=powerpc 8074 ;; 8075 s390x) 8076 linux_arch=s390 8077 ;; 8078 aarch64) 8079 linux_arch=arm64 8080 ;; 8081 mips64) 8082 linux_arch=mips 8083 ;; 8084 *) 8085 # For most CPUs the kernel architecture name and QEMU CPU name match. 8086 linux_arch="$cpu" 8087 ;; 8088 esac 8089 # For non-KVM architectures we will not have asm headers 8090 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 8091 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 8092 fi 8093fi 8094 8095for target in $target_list; do 8096target_dir="$target" 8097config_target_mak=$target_dir/config-target.mak 8098target_name=$(echo $target | cut -d '-' -f 1) 8099target_aligned_only="no" 8100case "$target_name" in 8101 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb) 8102 target_aligned_only="yes" 8103 ;; 8104esac 8105target_bigendian="no" 8106case "$target_name" in 8107 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 8108 target_bigendian="yes" 8109 ;; 8110esac 8111target_softmmu="no" 8112target_user_only="no" 8113target_linux_user="no" 8114target_bsd_user="no" 8115case "$target" in 8116 ${target_name}-softmmu) 8117 target_softmmu="yes" 8118 ;; 8119 ${target_name}-linux-user) 8120 target_user_only="yes" 8121 target_linux_user="yes" 8122 ;; 8123 ${target_name}-bsd-user) 8124 target_user_only="yes" 8125 target_bsd_user="yes" 8126 ;; 8127 *) 8128 error_exit "Target '$target' not recognised" 8129 exit 1 8130 ;; 8131esac 8132 8133mkdir -p $target_dir 8134echo "# Automatically generated by configure - do not modify" > $config_target_mak 8135 8136bflt="no" 8137mttcg="no" 8138interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 8139gdb_xml_files="" 8140 8141TARGET_ARCH="$target_name" 8142TARGET_BASE_ARCH="" 8143TARGET_ABI_DIR="" 8144 8145case "$target_name" in 8146 i386) 8147 mttcg="yes" 8148 gdb_xml_files="i386-32bit.xml" 8149 TARGET_SYSTBL_ABI=i386 8150 ;; 8151 x86_64) 8152 TARGET_BASE_ARCH=i386 8153 TARGET_SYSTBL_ABI=common,64 8154 mttcg="yes" 8155 gdb_xml_files="i386-64bit.xml" 8156 ;; 8157 alpha) 8158 mttcg="yes" 8159 TARGET_SYSTBL_ABI=common 8160 ;; 8161 arm|armeb) 8162 TARGET_ARCH=arm 8163 TARGET_SYSTBL_ABI=common,oabi 8164 bflt="yes" 8165 mttcg="yes" 8166 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml" 8167 ;; 8168 aarch64|aarch64_be) 8169 TARGET_ARCH=aarch64 8170 TARGET_BASE_ARCH=arm 8171 bflt="yes" 8172 mttcg="yes" 8173 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" 8174 ;; 8175 cris) 8176 ;; 8177 hppa) 8178 mttcg="yes" 8179 TARGET_SYSTBL_ABI=common,32 8180 ;; 8181 lm32) 8182 ;; 8183 m68k) 8184 bflt="yes" 8185 gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml" 8186 TARGET_SYSTBL_ABI=common 8187 ;; 8188 microblaze|microblazeel) 8189 TARGET_ARCH=microblaze 8190 TARGET_SYSTBL_ABI=common 8191 bflt="yes" 8192 echo "TARGET_ABI32=y" >> $config_target_mak 8193 ;; 8194 mips|mipsel) 8195 mttcg="yes" 8196 TARGET_ARCH=mips 8197 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 8198 TARGET_SYSTBL_ABI=o32 8199 ;; 8200 mipsn32|mipsn32el) 8201 mttcg="yes" 8202 TARGET_ARCH=mips64 8203 TARGET_BASE_ARCH=mips 8204 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 8205 echo "TARGET_ABI32=y" >> $config_target_mak 8206 TARGET_SYSTBL_ABI=n32 8207 ;; 8208 mips64|mips64el) 8209 mttcg="no" 8210 TARGET_ARCH=mips64 8211 TARGET_BASE_ARCH=mips 8212 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 8213 TARGET_SYSTBL_ABI=n64 8214 ;; 8215 moxie) 8216 ;; 8217 nios2) 8218 ;; 8219 or1k) 8220 TARGET_ARCH=openrisc 8221 TARGET_BASE_ARCH=openrisc 8222 ;; 8223 ppc) 8224 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 8225 TARGET_SYSTBL_ABI=common,nospu,32 8226 ;; 8227 ppc64) 8228 TARGET_BASE_ARCH=ppc 8229 TARGET_ABI_DIR=ppc 8230 TARGET_SYSTBL_ABI=common,nospu,64 8231 mttcg=yes 8232 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 8233 ;; 8234 ppc64le) 8235 TARGET_ARCH=ppc64 8236 TARGET_BASE_ARCH=ppc 8237 TARGET_ABI_DIR=ppc 8238 TARGET_SYSTBL_ABI=common,nospu,64 8239 mttcg=yes 8240 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 8241 ;; 8242 ppc64abi32) 8243 TARGET_ARCH=ppc64 8244 TARGET_BASE_ARCH=ppc 8245 TARGET_ABI_DIR=ppc 8246 TARGET_SYSTBL_ABI=common,nospu,32 8247 echo "TARGET_ABI32=y" >> $config_target_mak 8248 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 8249 ;; 8250 riscv32) 8251 TARGET_BASE_ARCH=riscv 8252 TARGET_ABI_DIR=riscv 8253 mttcg=yes 8254 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml" 8255 ;; 8256 riscv64) 8257 TARGET_BASE_ARCH=riscv 8258 TARGET_ABI_DIR=riscv 8259 mttcg=yes 8260 gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml" 8261 ;; 8262 rx) 8263 TARGET_ARCH=rx 8264 bflt="yes" 8265 target_compiler=$cross_cc_rx 8266 gdb_xml_files="rx-core.xml" 8267 ;; 8268 sh4|sh4eb) 8269 TARGET_ARCH=sh4 8270 TARGET_SYSTBL_ABI=common 8271 bflt="yes" 8272 ;; 8273 sparc) 8274 TARGET_SYSTBL_ABI=common,32 8275 ;; 8276 sparc64) 8277 TARGET_BASE_ARCH=sparc 8278 TARGET_SYSTBL_ABI=common,64 8279 ;; 8280 sparc32plus) 8281 TARGET_ARCH=sparc64 8282 TARGET_BASE_ARCH=sparc 8283 TARGET_ABI_DIR=sparc 8284 TARGET_SYSTBL_ABI=common,32 8285 echo "TARGET_ABI32=y" >> $config_target_mak 8286 ;; 8287 s390x) 8288 TARGET_SYSTBL_ABI=common,64 8289 mttcg=yes 8290 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 8291 ;; 8292 tilegx) 8293 ;; 8294 tricore) 8295 ;; 8296 unicore32) 8297 ;; 8298 xtensa|xtensaeb) 8299 TARGET_ARCH=xtensa 8300 TARGET_SYSTBL_ABI=common 8301 bflt="yes" 8302 mttcg="yes" 8303 ;; 8304 *) 8305 error_exit "Unsupported target CPU" 8306 ;; 8307esac 8308# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 8309if [ "$TARGET_BASE_ARCH" = "" ]; then 8310 TARGET_BASE_ARCH=$TARGET_ARCH 8311fi 8312 8313symlink "$source_path/Makefile.target" "$target_dir/Makefile" 8314 8315upper() { 8316 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 8317} 8318 8319target_arch_name="$(upper $TARGET_ARCH)" 8320echo "TARGET_$target_arch_name=y" >> $config_target_mak 8321echo "TARGET_NAME=$target_name" >> $config_target_mak 8322echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 8323if [ "$TARGET_ABI_DIR" = "" ]; then 8324 TARGET_ABI_DIR=$TARGET_ARCH 8325fi 8326echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 8327if [ "$HOST_VARIANT_DIR" != "" ]; then 8328 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 8329fi 8330if [ "$TARGET_SYSTBL_ABI" != "" ]; then 8331 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak 8332fi 8333 8334if supported_xen_target $target; then 8335 echo "CONFIG_XEN=y" >> $config_target_mak 8336 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak 8337 if test "$xen_pci_passthrough" = yes; then 8338 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 8339 fi 8340else 8341 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak 8342fi 8343if supported_kvm_target $target; then 8344 echo "CONFIG_KVM=y" >> $config_target_mak 8345 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak 8346else 8347 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak 8348fi 8349if supported_hax_target $target; then 8350 echo "CONFIG_HAX=y" >> $config_target_mak 8351fi 8352if supported_hvf_target $target; then 8353 echo "CONFIG_HVF=y" >> $config_target_mak 8354fi 8355if supported_whpx_target $target; then 8356 echo "CONFIG_WHPX=y" >> $config_target_mak 8357fi 8358if test "$target_aligned_only" = "yes" ; then 8359 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak 8360fi 8361if test "$target_bigendian" = "yes" ; then 8362 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 8363fi 8364if test "$target_softmmu" = "yes" ; then 8365 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 8366 if test "$mttcg" = "yes" ; then 8367 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 8368 fi 8369fi 8370if test "$target_user_only" = "yes" ; then 8371 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 8372 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 8373fi 8374if test "$target_linux_user" = "yes" ; then 8375 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 8376fi 8377list="" 8378if test ! -z "$gdb_xml_files" ; then 8379 for x in $gdb_xml_files; do 8380 list="$list $source_path/gdb-xml/$x" 8381 done 8382 echo "TARGET_XML_FILES=$list" >> $config_target_mak 8383fi 8384 8385if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then 8386 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 8387fi 8388if test "$target_bsd_user" = "yes" ; then 8389 echo "CONFIG_BSD_USER=y" >> $config_target_mak 8390fi 8391 8392 8393# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets 8394 8395cflags="" 8396ldflags="" 8397 8398disas_config() { 8399 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 8400 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 8401} 8402 8403for i in $ARCH $TARGET_BASE_ARCH ; do 8404 case "$i" in 8405 alpha) 8406 disas_config "ALPHA" 8407 ;; 8408 aarch64) 8409 if test -n "${cxx}"; then 8410 disas_config "ARM_A64" 8411 fi 8412 ;; 8413 arm) 8414 disas_config "ARM" 8415 if test -n "${cxx}"; then 8416 disas_config "ARM_A64" 8417 fi 8418 ;; 8419 cris) 8420 disas_config "CRIS" 8421 ;; 8422 hppa) 8423 disas_config "HPPA" 8424 ;; 8425 i386|x86_64|x32) 8426 disas_config "I386" 8427 ;; 8428 lm32) 8429 disas_config "LM32" 8430 ;; 8431 m68k) 8432 disas_config "M68K" 8433 ;; 8434 microblaze*) 8435 disas_config "MICROBLAZE" 8436 ;; 8437 mips*) 8438 disas_config "MIPS" 8439 if test -n "${cxx}"; then 8440 disas_config "NANOMIPS" 8441 fi 8442 ;; 8443 moxie*) 8444 disas_config "MOXIE" 8445 ;; 8446 nios2) 8447 disas_config "NIOS2" 8448 ;; 8449 or1k) 8450 disas_config "OPENRISC" 8451 ;; 8452 ppc*) 8453 disas_config "PPC" 8454 ;; 8455 riscv*) 8456 disas_config "RISCV" 8457 ;; 8458 rx) 8459 disas_config "RX" 8460 ;; 8461 s390*) 8462 disas_config "S390" 8463 ;; 8464 sh4) 8465 disas_config "SH4" 8466 ;; 8467 sparc*) 8468 disas_config "SPARC" 8469 ;; 8470 xtensa*) 8471 disas_config "XTENSA" 8472 ;; 8473 esac 8474done 8475if test "$tcg_interpreter" = "yes" ; then 8476 disas_config "TCI" 8477fi 8478 8479case "$ARCH" in 8480alpha) 8481 # Ensure there's only a single GP 8482 cflags="-msmall-data $cflags" 8483;; 8484esac 8485 8486if test "$gprof" = "yes" ; then 8487 if test "$target_linux_user" = "yes" ; then 8488 cflags="-p $cflags" 8489 ldflags="-p $ldflags" 8490 fi 8491 if test "$target_softmmu" = "yes" ; then 8492 ldflags="-p $ldflags" 8493 echo "GPROF_CFLAGS=-p" >> $config_target_mak 8494 fi 8495fi 8496 8497# Newer kernels on s390 check for an S390_PGSTE program header and 8498# enable the pgste page table extensions in that case. This makes 8499# the vm.allocate_pgste sysctl unnecessary. We enable this program 8500# header if 8501# - we build on s390x 8502# - we build the system emulation for s390x (qemu-system-s390x) 8503# - KVM is enabled 8504# - the linker supports --s390-pgste 8505if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \ 8506 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then 8507 if ld_has --s390-pgste ; then 8508 ldflags="-Wl,--s390-pgste $ldflags" 8509 fi 8510fi 8511 8512echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak 8513echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 8514 8515done # for target in $targets 8516 8517echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak 8518echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak 8519 8520if [ "$fdt" = "git" ]; then 8521 echo "config-host.h: dtc/all" >> $config_host_mak 8522fi 8523if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 8524 echo "config-host.h: capstone/all" >> $config_host_mak 8525fi 8526if test -n "$LIBCAPSTONE"; then 8527 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 8528fi 8529 8530if test "$numa" = "yes"; then 8531 echo "CONFIG_NUMA=y" >> $config_host_mak 8532fi 8533 8534if test "$ccache_cpp2" = "yes"; then 8535 echo "export CCACHE_CPP2=y" >> $config_host_mak 8536fi 8537 8538if test "$safe_stack" = "yes"; then 8539 echo "CONFIG_SAFESTACK=y" >> $config_host_mak 8540fi 8541 8542# If we're using a separate build tree, set it up now. 8543# DIRS are directories which we simply mkdir in the build tree; 8544# LINKS are things to symlink back into the source tree 8545# (these can be both files and directories). 8546# Caution: do not add files or directories here using wildcards. This 8547# will result in problems later if a new file matching the wildcard is 8548# added to the source tree -- nothing will cause configure to be rerun 8549# so the build tree will be missing the link back to the new file, and 8550# tests might fail. Prefer to keep the relevant files in their own 8551# directory and symlink the directory instead. 8552DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" 8553DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 8554DIRS="$DIRS docs docs/interop fsdev scsi" 8555DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 8556DIRS="$DIRS roms/seabios" 8557LINKS="Makefile" 8558LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile" 8559LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile" 8560LINKS="$LINKS tests/plugin/Makefile" 8561LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps" 8562LINKS="$LINKS pc-bios/s390-ccw/Makefile" 8563LINKS="$LINKS roms/seabios/Makefile" 8564LINKS="$LINKS pc-bios/qemu-icon.bmp" 8565LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 8566LINKS="$LINKS tests/acceptance tests/data" 8567LINKS="$LINKS tests/qemu-iotests/check" 8568LINKS="$LINKS python" 8569for bios_file in \ 8570 $source_path/pc-bios/*.bin \ 8571 $source_path/pc-bios/*.lid \ 8572 $source_path/pc-bios/*.rom \ 8573 $source_path/pc-bios/*.dtb \ 8574 $source_path/pc-bios/*.img \ 8575 $source_path/pc-bios/openbios-* \ 8576 $source_path/pc-bios/u-boot.* \ 8577 $source_path/pc-bios/edk2-*.fd.bz2 \ 8578 $source_path/pc-bios/palcode-* 8579do 8580 LINKS="$LINKS pc-bios/$(basename $bios_file)" 8581done 8582mkdir -p $DIRS 8583for f in $LINKS ; do 8584 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 8585 symlink "$source_path/$f" "$f" 8586 fi 8587done 8588 8589(for i in $cross_cc_vars; do 8590 export $i 8591done 8592export target_list source_path use_containers 8593$source_path/tests/tcg/configure.sh) 8594 8595# temporary config to build submodules 8596for rom in seabios; do 8597 config_mak=roms/$rom/config.mak 8598 echo "# Automatically generated by configure - do not modify" > $config_mak 8599 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 8600 echo "AS=$as" >> $config_mak 8601 echo "CCAS=$ccas" >> $config_mak 8602 echo "CC=$cc" >> $config_mak 8603 echo "BCC=bcc" >> $config_mak 8604 echo "CPP=$cpp" >> $config_mak 8605 echo "OBJCOPY=objcopy" >> $config_mak 8606 echo "IASL=$iasl" >> $config_mak 8607 echo "LD=$ld" >> $config_mak 8608 echo "RANLIB=$ranlib" >> $config_mak 8609done 8610 8611# set up qemu-iotests in this build directory 8612iotests_common_env="tests/qemu-iotests/common.env" 8613 8614echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 8615echo >> "$iotests_common_env" 8616echo "export PYTHON='$python'" >> "$iotests_common_env" 8617 8618# Save the configure command line for later reuse. 8619cat <<EOD >config.status 8620#!/bin/sh 8621# Generated by configure. 8622# Run this file to recreate the current configuration. 8623# Compiler output produced by configure, useful for debugging 8624# configure, is in config.log if it exists. 8625EOD 8626 8627preserve_env() { 8628 envname=$1 8629 8630 eval envval=\$$envname 8631 8632 if test -n "$envval" 8633 then 8634 echo "$envname='$envval'" >> config.status 8635 echo "export $envname" >> config.status 8636 else 8637 echo "unset $envname" >> config.status 8638 fi 8639} 8640 8641# Preserve various env variables that influence what 8642# features/build target configure will detect 8643preserve_env AR 8644preserve_env AS 8645preserve_env CC 8646preserve_env CPP 8647preserve_env CXX 8648preserve_env INSTALL 8649preserve_env LD 8650preserve_env LD_LIBRARY_PATH 8651preserve_env LIBTOOL 8652preserve_env MAKE 8653preserve_env NM 8654preserve_env OBJCOPY 8655preserve_env PATH 8656preserve_env PKG_CONFIG 8657preserve_env PKG_CONFIG_LIBDIR 8658preserve_env PKG_CONFIG_PATH 8659preserve_env PYTHON 8660preserve_env SDL2_CONFIG 8661preserve_env SMBD 8662preserve_env STRIP 8663preserve_env WINDRES 8664 8665printf "exec" >>config.status 8666printf " '%s'" "$0" "$@" >>config.status 8667echo ' "$@"' >>config.status 8668chmod +x config.status 8669 8670rm -r "$TMPDIR1" 8671