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