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