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