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