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 4113gbm="no" 4114if $pkg_config gbm; then 4115 gbm_cflags="$($pkg_config --cflags gbm)" 4116 gbm_libs="$($pkg_config --libs gbm)" 4117 gbm="yes" 4118fi 4119 4120if test "$opengl" != "no" ; then 4121 opengl_pkgs="epoxy gbm" 4122 if $pkg_config $opengl_pkgs; then 4123 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 4124 opengl_libs="$($pkg_config --libs $opengl_pkgs)" 4125 opengl=yes 4126 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 4127 gtk_gl="yes" 4128 fi 4129 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" 4130 else 4131 if test "$opengl" = "yes" ; then 4132 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 4133 fi 4134 opengl_cflags="" 4135 opengl_libs="" 4136 opengl=no 4137 fi 4138fi 4139 4140if test "$opengl" = "yes"; then 4141 cat > $TMPC << EOF 4142#include <epoxy/egl.h> 4143#ifndef EGL_MESA_image_dma_buf_export 4144# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 4145#endif 4146int main(void) { return 0; } 4147EOF 4148 if compile_prog "" "" ; then 4149 opengl_dmabuf=yes 4150 fi 4151fi 4152 4153if test "$opengl" = "yes" && test "$have_x11" = "yes"; then 4154 for target in $target_list; do 4155 case $target in 4156 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL 4157 need_x11=yes 4158 ;; 4159 esac 4160 done 4161fi 4162 4163########################################## 4164# libxml2 probe 4165if test "$libxml2" != "no" ; then 4166 if $pkg_config --exists libxml-2.0; then 4167 libxml2="yes" 4168 libxml2_cflags=$($pkg_config --cflags libxml-2.0) 4169 libxml2_libs=$($pkg_config --libs libxml-2.0) 4170 else 4171 if test "$libxml2" = "yes"; then 4172 feature_not_found "libxml2" "Install libxml2 devel" 4173 fi 4174 libxml2="no" 4175 fi 4176fi 4177 4178########################################## 4179# glusterfs probe 4180if test "$glusterfs" != "no" ; then 4181 if $pkg_config --atleast-version=3 glusterfs-api; then 4182 glusterfs="yes" 4183 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 4184 glusterfs_libs=$($pkg_config --libs glusterfs-api) 4185 if $pkg_config --atleast-version=4 glusterfs-api; then 4186 glusterfs_xlator_opt="yes" 4187 fi 4188 if $pkg_config --atleast-version=5 glusterfs-api; then 4189 glusterfs_discard="yes" 4190 fi 4191 if $pkg_config --atleast-version=6 glusterfs-api; then 4192 glusterfs_fallocate="yes" 4193 glusterfs_zerofill="yes" 4194 fi 4195 cat > $TMPC << EOF 4196#include <glusterfs/api/glfs.h> 4197 4198int 4199main(void) 4200{ 4201 /* new glfs_ftruncate() passes two additional args */ 4202 return glfs_ftruncate(NULL, 0, NULL, NULL); 4203} 4204EOF 4205 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4206 glusterfs_ftruncate_has_stat="yes" 4207 fi 4208 cat > $TMPC << EOF 4209#include <glusterfs/api/glfs.h> 4210 4211/* new glfs_io_cbk() passes two additional glfs_stat structs */ 4212static void 4213glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data) 4214{} 4215 4216int 4217main(void) 4218{ 4219 glfs_io_cbk iocb = &glusterfs_iocb; 4220 iocb(NULL, 0 , NULL, NULL, NULL); 4221 return 0; 4222} 4223EOF 4224 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4225 glusterfs_iocb_has_stat="yes" 4226 fi 4227 else 4228 if test "$glusterfs" = "yes" ; then 4229 feature_not_found "GlusterFS backend support" \ 4230 "Install glusterfs-api devel >= 3" 4231 fi 4232 glusterfs="no" 4233 fi 4234fi 4235 4236# Check for inotify functions when we are building linux-user 4237# emulator. This is done because older glibc versions don't 4238# have syscall stubs for these implemented. In that case we 4239# don't provide them even if kernel supports them. 4240# 4241inotify=no 4242cat > $TMPC << EOF 4243#include <sys/inotify.h> 4244 4245int 4246main(void) 4247{ 4248 /* try to start inotify */ 4249 return inotify_init(); 4250} 4251EOF 4252if compile_prog "" "" ; then 4253 inotify=yes 4254fi 4255 4256inotify1=no 4257cat > $TMPC << EOF 4258#include <sys/inotify.h> 4259 4260int 4261main(void) 4262{ 4263 /* try to start inotify */ 4264 return inotify_init1(0); 4265} 4266EOF 4267if compile_prog "" "" ; then 4268 inotify1=yes 4269fi 4270 4271# check if pipe2 is there 4272pipe2=no 4273cat > $TMPC << EOF 4274#include <unistd.h> 4275#include <fcntl.h> 4276 4277int main(void) 4278{ 4279 int pipefd[2]; 4280 return pipe2(pipefd, O_CLOEXEC); 4281} 4282EOF 4283if compile_prog "" "" ; then 4284 pipe2=yes 4285fi 4286 4287# check if accept4 is there 4288accept4=no 4289cat > $TMPC << EOF 4290#include <sys/socket.h> 4291#include <stddef.h> 4292 4293int main(void) 4294{ 4295 accept4(0, NULL, NULL, SOCK_CLOEXEC); 4296 return 0; 4297} 4298EOF 4299if compile_prog "" "" ; then 4300 accept4=yes 4301fi 4302 4303# check if tee/splice is there. vmsplice was added same time. 4304splice=no 4305cat > $TMPC << EOF 4306#include <unistd.h> 4307#include <fcntl.h> 4308#include <limits.h> 4309 4310int main(void) 4311{ 4312 int len, fd = 0; 4313 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 4314 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 4315 return 0; 4316} 4317EOF 4318if compile_prog "" "" ; then 4319 splice=yes 4320fi 4321 4322########################################## 4323# libnuma probe 4324 4325if test "$numa" != "no" ; then 4326 cat > $TMPC << EOF 4327#include <numa.h> 4328int main(void) { return numa_available(); } 4329EOF 4330 4331 if compile_prog "" "-lnuma" ; then 4332 numa=yes 4333 libs_softmmu="-lnuma $libs_softmmu" 4334 else 4335 if test "$numa" = "yes" ; then 4336 feature_not_found "numa" "install numactl devel" 4337 fi 4338 numa=no 4339 fi 4340fi 4341 4342if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 4343 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 4344 exit 1 4345fi 4346 4347# Even if malloc_trim() is available, these non-libc memory allocators 4348# do not support it. 4349if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then 4350 if test "$malloc_trim" = "yes" ; then 4351 echo "Disabling malloc_trim with non-libc memory allocator" 4352 fi 4353 malloc_trim="no" 4354fi 4355 4356####################################### 4357# malloc_trim 4358 4359if test "$malloc_trim" != "no" ; then 4360 cat > $TMPC << EOF 4361#include <malloc.h> 4362int main(void) { malloc_trim(0); return 0; } 4363EOF 4364 if compile_prog "" "" ; then 4365 malloc_trim="yes" 4366 else 4367 malloc_trim="no" 4368 fi 4369fi 4370 4371########################################## 4372# tcmalloc probe 4373 4374if test "$tcmalloc" = "yes" ; then 4375 cat > $TMPC << EOF 4376#include <stdlib.h> 4377int main(void) { malloc(1); return 0; } 4378EOF 4379 4380 if compile_prog "" "-ltcmalloc" ; then 4381 LIBS="-ltcmalloc $LIBS" 4382 else 4383 feature_not_found "tcmalloc" "install gperftools devel" 4384 fi 4385fi 4386 4387########################################## 4388# jemalloc probe 4389 4390if test "$jemalloc" = "yes" ; then 4391 cat > $TMPC << EOF 4392#include <stdlib.h> 4393int main(void) { malloc(1); return 0; } 4394EOF 4395 4396 if compile_prog "" "-ljemalloc" ; then 4397 LIBS="-ljemalloc $LIBS" 4398 else 4399 feature_not_found "jemalloc" "install jemalloc devel" 4400 fi 4401fi 4402 4403########################################## 4404# signalfd probe 4405signalfd="no" 4406cat > $TMPC << EOF 4407#include <unistd.h> 4408#include <sys/syscall.h> 4409#include <signal.h> 4410int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4411EOF 4412 4413if compile_prog "" "" ; then 4414 signalfd=yes 4415fi 4416 4417# check if optreset global is declared by <getopt.h> 4418optreset="no" 4419cat > $TMPC << EOF 4420#include <getopt.h> 4421int main(void) { return optreset; } 4422EOF 4423 4424if compile_prog "" "" ; then 4425 optreset=yes 4426fi 4427 4428# check if eventfd is supported 4429eventfd=no 4430cat > $TMPC << EOF 4431#include <sys/eventfd.h> 4432 4433int main(void) 4434{ 4435 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4436} 4437EOF 4438if compile_prog "" "" ; then 4439 eventfd=yes 4440fi 4441 4442# check if memfd is supported 4443memfd=no 4444cat > $TMPC << EOF 4445#include <sys/mman.h> 4446 4447int main(void) 4448{ 4449 return memfd_create("foo", MFD_ALLOW_SEALING); 4450} 4451EOF 4452if compile_prog "" "" ; then 4453 memfd=yes 4454fi 4455 4456# check for usbfs 4457have_usbfs=no 4458if test "$linux_user" = "yes"; then 4459 cat > $TMPC << EOF 4460#include <linux/usbdevice_fs.h> 4461 4462#ifndef USBDEVFS_GET_CAPABILITIES 4463#error "USBDEVFS_GET_CAPABILITIES undefined" 4464#endif 4465 4466#ifndef USBDEVFS_DISCONNECT_CLAIM 4467#error "USBDEVFS_DISCONNECT_CLAIM undefined" 4468#endif 4469 4470int main(void) 4471{ 4472 return 0; 4473} 4474EOF 4475 if compile_prog "" ""; then 4476 have_usbfs=yes 4477 fi 4478fi 4479 4480# check for fallocate 4481fallocate=no 4482cat > $TMPC << EOF 4483#include <fcntl.h> 4484 4485int main(void) 4486{ 4487 fallocate(0, 0, 0, 0); 4488 return 0; 4489} 4490EOF 4491if compile_prog "" "" ; then 4492 fallocate=yes 4493fi 4494 4495# check for fallocate hole punching 4496fallocate_punch_hole=no 4497cat > $TMPC << EOF 4498#include <fcntl.h> 4499#include <linux/falloc.h> 4500 4501int main(void) 4502{ 4503 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4504 return 0; 4505} 4506EOF 4507if compile_prog "" "" ; then 4508 fallocate_punch_hole=yes 4509fi 4510 4511# check that fallocate supports range zeroing inside the file 4512fallocate_zero_range=no 4513cat > $TMPC << EOF 4514#include <fcntl.h> 4515#include <linux/falloc.h> 4516 4517int main(void) 4518{ 4519 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4520 return 0; 4521} 4522EOF 4523if compile_prog "" "" ; then 4524 fallocate_zero_range=yes 4525fi 4526 4527# check for posix_fallocate 4528posix_fallocate=no 4529cat > $TMPC << EOF 4530#include <fcntl.h> 4531 4532int main(void) 4533{ 4534 posix_fallocate(0, 0, 0); 4535 return 0; 4536} 4537EOF 4538if compile_prog "" "" ; then 4539 posix_fallocate=yes 4540fi 4541 4542# check for sync_file_range 4543sync_file_range=no 4544cat > $TMPC << EOF 4545#include <fcntl.h> 4546 4547int main(void) 4548{ 4549 sync_file_range(0, 0, 0, 0); 4550 return 0; 4551} 4552EOF 4553if compile_prog "" "" ; then 4554 sync_file_range=yes 4555fi 4556 4557# check for linux/fiemap.h and FS_IOC_FIEMAP 4558fiemap=no 4559cat > $TMPC << EOF 4560#include <sys/ioctl.h> 4561#include <linux/fs.h> 4562#include <linux/fiemap.h> 4563 4564int main(void) 4565{ 4566 ioctl(0, FS_IOC_FIEMAP, 0); 4567 return 0; 4568} 4569EOF 4570if compile_prog "" "" ; then 4571 fiemap=yes 4572fi 4573 4574# check for dup3 4575dup3=no 4576cat > $TMPC << EOF 4577#include <unistd.h> 4578 4579int main(void) 4580{ 4581 dup3(0, 0, 0); 4582 return 0; 4583} 4584EOF 4585if compile_prog "" "" ; then 4586 dup3=yes 4587fi 4588 4589# check for ppoll support 4590ppoll=no 4591cat > $TMPC << EOF 4592#include <poll.h> 4593 4594int main(void) 4595{ 4596 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 4597 ppoll(&pfd, 1, 0, 0); 4598 return 0; 4599} 4600EOF 4601if compile_prog "" "" ; then 4602 ppoll=yes 4603fi 4604 4605# check for prctl(PR_SET_TIMERSLACK , ... ) support 4606prctl_pr_set_timerslack=no 4607cat > $TMPC << EOF 4608#include <sys/prctl.h> 4609 4610int main(void) 4611{ 4612 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4613 return 0; 4614} 4615EOF 4616if compile_prog "" "" ; then 4617 prctl_pr_set_timerslack=yes 4618fi 4619 4620# check for epoll support 4621epoll=no 4622cat > $TMPC << EOF 4623#include <sys/epoll.h> 4624 4625int main(void) 4626{ 4627 epoll_create(0); 4628 return 0; 4629} 4630EOF 4631if compile_prog "" "" ; then 4632 epoll=yes 4633fi 4634 4635# epoll_create1 is a later addition 4636# so we must check separately for its presence 4637epoll_create1=no 4638cat > $TMPC << EOF 4639#include <sys/epoll.h> 4640 4641int main(void) 4642{ 4643 /* Note that we use epoll_create1 as a value, not as 4644 * a function being called. This is necessary so that on 4645 * old SPARC glibc versions where the function was present in 4646 * the library but not declared in the header file we will 4647 * fail the configure check. (Otherwise we will get a compiler 4648 * warning but not an error, and will proceed to fail the 4649 * qemu compile where we compile with -Werror.) 4650 */ 4651 return (int)(uintptr_t)&epoll_create1; 4652} 4653EOF 4654if compile_prog "" "" ; then 4655 epoll_create1=yes 4656fi 4657 4658# check for sendfile support 4659sendfile=no 4660cat > $TMPC << EOF 4661#include <sys/sendfile.h> 4662 4663int main(void) 4664{ 4665 return sendfile(0, 0, 0, 0); 4666} 4667EOF 4668if compile_prog "" "" ; then 4669 sendfile=yes 4670fi 4671 4672# check for timerfd support (glibc 2.8 and newer) 4673timerfd=no 4674cat > $TMPC << EOF 4675#include <sys/timerfd.h> 4676 4677int main(void) 4678{ 4679 return(timerfd_create(CLOCK_REALTIME, 0)); 4680} 4681EOF 4682if compile_prog "" "" ; then 4683 timerfd=yes 4684fi 4685 4686# check for setns and unshare support 4687setns=no 4688cat > $TMPC << EOF 4689#include <sched.h> 4690 4691int main(void) 4692{ 4693 int ret; 4694 ret = setns(0, 0); 4695 ret = unshare(0); 4696 return ret; 4697} 4698EOF 4699if compile_prog "" "" ; then 4700 setns=yes 4701fi 4702 4703# clock_adjtime probe 4704clock_adjtime=no 4705cat > $TMPC <<EOF 4706#include <time.h> 4707 4708int main(void) 4709{ 4710 return clock_adjtime(0, 0); 4711} 4712EOF 4713clock_adjtime=no 4714if compile_prog "" "" ; then 4715 clock_adjtime=yes 4716fi 4717 4718# syncfs probe 4719syncfs=no 4720cat > $TMPC <<EOF 4721#include <unistd.h> 4722 4723int main(void) 4724{ 4725 return syncfs(0); 4726} 4727EOF 4728syncfs=no 4729if compile_prog "" "" ; then 4730 syncfs=yes 4731fi 4732 4733# Check we have a new enough version of sphinx-build 4734has_sphinx_build() { 4735 # This is a bit awkward but works: create a trivial document and 4736 # try to run it with our configuration file (which enforces a 4737 # version requirement). This will fail if either 4738 # sphinx-build doesn't exist at all or if it is too old. 4739 mkdir -p "$TMPDIR1/sphinx" 4740 touch "$TMPDIR1/sphinx/index.rst" 4741 sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1 4742} 4743 4744# Check if tools are available to build documentation. 4745if test "$docs" != "no" ; then 4746 if has makeinfo && has pod2man && has_sphinx_build; then 4747 docs=yes 4748 else 4749 if test "$docs" = "yes" ; then 4750 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx" 4751 fi 4752 docs=no 4753 fi 4754fi 4755 4756# Search for bswap_32 function 4757byteswap_h=no 4758cat > $TMPC << EOF 4759#include <byteswap.h> 4760int main(void) { return bswap_32(0); } 4761EOF 4762if compile_prog "" "" ; then 4763 byteswap_h=yes 4764fi 4765 4766# Search for bswap32 function 4767bswap_h=no 4768cat > $TMPC << EOF 4769#include <sys/endian.h> 4770#include <sys/types.h> 4771#include <machine/bswap.h> 4772int main(void) { return bswap32(0); } 4773EOF 4774if compile_prog "" "" ; then 4775 bswap_h=yes 4776fi 4777 4778########################################## 4779# Do we have libiscsi >= 1.9.0 4780if test "$libiscsi" != "no" ; then 4781 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4782 libiscsi="yes" 4783 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4784 libiscsi_libs=$($pkg_config --libs libiscsi) 4785 else 4786 if test "$libiscsi" = "yes" ; then 4787 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4788 fi 4789 libiscsi="no" 4790 fi 4791fi 4792 4793########################################## 4794# Do we need libm 4795cat > $TMPC << EOF 4796#include <math.h> 4797int main(int argc, char **argv) { return isnan(sin((double)argc)); } 4798EOF 4799if compile_prog "" "" ; then 4800 : 4801elif compile_prog "" "-lm" ; then 4802 LIBS="-lm $LIBS" 4803 libs_qga="-lm $libs_qga" 4804else 4805 error_exit "libm check failed" 4806fi 4807 4808########################################## 4809# Do we need librt 4810# uClibc provides 2 versions of clock_gettime(), one with realtime 4811# support and one without. This means that the clock_gettime() don't 4812# need -lrt. We still need it for timer_create() so we check for this 4813# function in addition. 4814cat > $TMPC <<EOF 4815#include <signal.h> 4816#include <time.h> 4817int main(void) { 4818 timer_create(CLOCK_REALTIME, NULL, NULL); 4819 return clock_gettime(CLOCK_REALTIME, NULL); 4820} 4821EOF 4822 4823if compile_prog "" "" ; then 4824 : 4825# we need pthread for static linking. use previous pthread test result 4826elif compile_prog "" "$pthread_lib -lrt" ; then 4827 LIBS="$LIBS -lrt" 4828 libs_qga="$libs_qga -lrt" 4829fi 4830 4831# Check whether we need to link libutil for openpty() 4832cat > $TMPC << EOF 4833extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 4834int main(void) { return openpty(0, 0, 0, 0, 0); } 4835EOF 4836 4837if ! compile_prog "" "" ; then 4838 if compile_prog "" "-lutil" ; then 4839 libs_softmmu="-lutil $libs_softmmu" 4840 libs_tools="-lutil $libs_tools" 4841 fi 4842fi 4843 4844########################################## 4845# spice probe 4846if test "$spice" != "no" ; then 4847 cat > $TMPC << EOF 4848#include <spice.h> 4849int main(void) { spice_server_new(); return 0; } 4850EOF 4851 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4852 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4853 if $pkg_config --atleast-version=0.12.5 spice-server && \ 4854 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4855 compile_prog "$spice_cflags" "$spice_libs" ; then 4856 spice="yes" 4857 libs_softmmu="$libs_softmmu $spice_libs" 4858 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 4859 spice_protocol_version=$($pkg_config --modversion spice-protocol) 4860 spice_server_version=$($pkg_config --modversion spice-server) 4861 else 4862 if test "$spice" = "yes" ; then 4863 feature_not_found "spice" \ 4864 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 4865 fi 4866 spice="no" 4867 fi 4868fi 4869 4870# check for smartcard support 4871if test "$smartcard" != "no"; then 4872 if $pkg_config --atleast-version=2.5.1 libcacard; then 4873 libcacard_cflags=$($pkg_config --cflags libcacard) 4874 libcacard_libs=$($pkg_config --libs libcacard) 4875 smartcard="yes" 4876 else 4877 if test "$smartcard" = "yes"; then 4878 feature_not_found "smartcard" "Install libcacard devel" 4879 fi 4880 smartcard="no" 4881 fi 4882fi 4883 4884# check for libusb 4885if test "$libusb" != "no" ; then 4886 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 4887 libusb="yes" 4888 libusb_cflags=$($pkg_config --cflags libusb-1.0) 4889 libusb_libs=$($pkg_config --libs libusb-1.0) 4890 else 4891 if test "$libusb" = "yes"; then 4892 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 4893 fi 4894 libusb="no" 4895 fi 4896fi 4897 4898# check for usbredirparser for usb network redirection support 4899if test "$usb_redir" != "no" ; then 4900 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 4901 usb_redir="yes" 4902 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4903 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 4904 else 4905 if test "$usb_redir" = "yes"; then 4906 feature_not_found "usb-redir" "Install usbredir devel" 4907 fi 4908 usb_redir="no" 4909 fi 4910fi 4911 4912########################################## 4913# check if we have VSS SDK headers for win 4914 4915if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 4916 test "$vss_win32_sdk" != "no" ; then 4917 case "$vss_win32_sdk" in 4918 "") vss_win32_include="-isystem $source_path" ;; 4919 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4920 # handle path with spaces. So we symlink the headers into ".sdk/vss". 4921 vss_win32_include="-isystem $source_path/.sdk/vss" 4922 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4923 ;; 4924 *) vss_win32_include="-isystem $vss_win32_sdk" 4925 esac 4926 cat > $TMPC << EOF 4927#define __MIDL_user_allocate_free_DEFINED__ 4928#include <inc/win2003/vss.h> 4929int main(void) { return VSS_CTX_BACKUP; } 4930EOF 4931 if compile_prog "$vss_win32_include" "" ; then 4932 guest_agent_with_vss="yes" 4933 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4934 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4935 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4936 else 4937 if test "$vss_win32_sdk" != "" ; then 4938 echo "ERROR: Please download and install Microsoft VSS SDK:" 4939 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4940 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4941 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4942 echo "ERROR: The headers are extracted in the directory \`inc'." 4943 feature_not_found "VSS support" 4944 fi 4945 guest_agent_with_vss="no" 4946 fi 4947fi 4948 4949########################################## 4950# lookup Windows platform SDK (if not specified) 4951# The SDK is needed only to build .tlb (type library) file of guest agent 4952# VSS provider from the source. It is usually unnecessary because the 4953# pre-compiled .tlb file is included. 4954 4955if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 4956 test "$guest_agent_with_vss" = "yes" ; then 4957 if test -z "$win_sdk"; then 4958 programfiles="$PROGRAMFILES" 4959 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4960 if test -n "$programfiles"; then 4961 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4962 else 4963 feature_not_found "Windows SDK" 4964 fi 4965 elif test "$win_sdk" = "no"; then 4966 win_sdk="" 4967 fi 4968fi 4969 4970########################################## 4971# check if mingw environment provides a recent ntddscsi.h 4972if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 4973 cat > $TMPC << EOF 4974#include <windows.h> 4975#include <ntddscsi.h> 4976int main(void) { 4977#if !defined(IOCTL_SCSI_GET_ADDRESS) 4978#error Missing required ioctl definitions 4979#endif 4980 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4981 return addr.Lun; 4982} 4983EOF 4984 if compile_prog "" "" ; then 4985 guest_agent_ntddscsi=yes 4986 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 4987 fi 4988fi 4989 4990########################################## 4991# virgl renderer probe 4992 4993if test "$virglrenderer" != "no" ; then 4994 cat > $TMPC << EOF 4995#include <virglrenderer.h> 4996int main(void) { virgl_renderer_poll(); return 0; } 4997EOF 4998 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4999 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 5000 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 5001 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 5002 compile_prog "$virgl_cflags" "$virgl_libs" ; then 5003 virglrenderer="yes" 5004 else 5005 if test "$virglrenderer" = "yes" ; then 5006 feature_not_found "virglrenderer" 5007 fi 5008 virglrenderer="no" 5009 fi 5010fi 5011 5012########################################## 5013# capstone 5014 5015case "$capstone" in 5016 "" | yes) 5017 if $pkg_config capstone; then 5018 capstone=system 5019 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5020 capstone=git 5021 elif test -e "${source_path}/capstone/Makefile" ; then 5022 capstone=internal 5023 elif test -z "$capstone" ; then 5024 capstone=no 5025 else 5026 feature_not_found "capstone" "Install capstone devel or git submodule" 5027 fi 5028 ;; 5029 5030 system) 5031 if ! $pkg_config capstone; then 5032 feature_not_found "capstone" "Install capstone devel" 5033 fi 5034 ;; 5035esac 5036 5037case "$capstone" in 5038 git | internal) 5039 if test "$capstone" = git; then 5040 git_submodules="${git_submodules} capstone" 5041 fi 5042 mkdir -p capstone 5043 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include" 5044 if test "$mingw32" = "yes"; then 5045 LIBCAPSTONE=capstone.lib 5046 else 5047 LIBCAPSTONE=libcapstone.a 5048 fi 5049 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS" 5050 ;; 5051 5052 system) 5053 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" 5054 LIBS="$($pkg_config --libs capstone) $LIBS" 5055 ;; 5056 5057 no) 5058 ;; 5059 *) 5060 error_exit "Unknown state for capstone: $capstone" 5061 ;; 5062esac 5063 5064########################################## 5065# check if we have fdatasync 5066 5067fdatasync=no 5068cat > $TMPC << EOF 5069#include <unistd.h> 5070int main(void) { 5071#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 5072return fdatasync(0); 5073#else 5074#error Not supported 5075#endif 5076} 5077EOF 5078if compile_prog "" "" ; then 5079 fdatasync=yes 5080fi 5081 5082########################################## 5083# check if we have madvise 5084 5085madvise=no 5086cat > $TMPC << EOF 5087#include <sys/types.h> 5088#include <sys/mman.h> 5089#include <stddef.h> 5090int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 5091EOF 5092if compile_prog "" "" ; then 5093 madvise=yes 5094fi 5095 5096########################################## 5097# check if we have posix_madvise 5098 5099posix_madvise=no 5100cat > $TMPC << EOF 5101#include <sys/mman.h> 5102#include <stddef.h> 5103int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 5104EOF 5105if compile_prog "" "" ; then 5106 posix_madvise=yes 5107fi 5108 5109########################################## 5110# check if we have posix_memalign() 5111 5112posix_memalign=no 5113cat > $TMPC << EOF 5114#include <stdlib.h> 5115int main(void) { 5116 void *p; 5117 return posix_memalign(&p, 8, 8); 5118} 5119EOF 5120if compile_prog "" "" ; then 5121 posix_memalign=yes 5122fi 5123 5124########################################## 5125# check if we have posix_syslog 5126 5127posix_syslog=no 5128cat > $TMPC << EOF 5129#include <syslog.h> 5130int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 5131EOF 5132if compile_prog "" "" ; then 5133 posix_syslog=yes 5134fi 5135 5136########################################## 5137# check if we have sem_timedwait 5138 5139sem_timedwait=no 5140cat > $TMPC << EOF 5141#include <semaphore.h> 5142int main(void) { return sem_timedwait(0, 0); } 5143EOF 5144if compile_prog "" "" ; then 5145 sem_timedwait=yes 5146fi 5147 5148########################################## 5149# check if we have strchrnul 5150 5151strchrnul=no 5152cat > $TMPC << EOF 5153#include <string.h> 5154int main(void); 5155// Use a haystack that the compiler shouldn't be able to constant fold 5156char *haystack = (char*)&main; 5157int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 5158EOF 5159if compile_prog "" "" ; then 5160 strchrnul=yes 5161fi 5162 5163########################################## 5164# check if trace backend exists 5165 5166$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 5167if test "$?" -ne 0 ; then 5168 error_exit "invalid trace backends" \ 5169 "Please choose supported trace backends." 5170fi 5171 5172########################################## 5173# For 'ust' backend, test if ust headers are present 5174if have_backend "ust"; then 5175 cat > $TMPC << EOF 5176#include <lttng/tracepoint.h> 5177int main(void) { return 0; } 5178EOF 5179 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 5180 if $pkg_config lttng-ust --exists; then 5181 lttng_ust_libs=$($pkg_config --libs lttng-ust) 5182 else 5183 lttng_ust_libs="-llttng-ust -ldl" 5184 fi 5185 if $pkg_config liburcu-bp --exists; then 5186 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 5187 else 5188 urcu_bp_libs="-lurcu-bp" 5189 fi 5190 5191 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 5192 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 5193 else 5194 error_exit "Trace backend 'ust' missing lttng-ust header files" 5195 fi 5196fi 5197 5198########################################## 5199# For 'dtrace' backend, test if 'dtrace' command is present 5200if have_backend "dtrace"; then 5201 if ! has 'dtrace' ; then 5202 error_exit "dtrace command is not found in PATH $PATH" 5203 fi 5204 trace_backend_stap="no" 5205 if has 'stap' ; then 5206 trace_backend_stap="yes" 5207 fi 5208fi 5209 5210########################################## 5211# check and set a backend for coroutine 5212 5213# We prefer ucontext, but it's not always possible. The fallback 5214# is sigcontext. On Windows the only valid backend is the Windows 5215# specific one. 5216 5217ucontext_works=no 5218if test "$darwin" != "yes"; then 5219 cat > $TMPC << EOF 5220#include <ucontext.h> 5221#ifdef __stub_makecontext 5222#error Ignoring glibc stub makecontext which will always fail 5223#endif 5224int main(void) { makecontext(0, 0, 0); return 0; } 5225EOF 5226 if compile_prog "" "" ; then 5227 ucontext_works=yes 5228 fi 5229fi 5230 5231if test "$coroutine" = ""; then 5232 if test "$mingw32" = "yes"; then 5233 coroutine=win32 5234 elif test "$ucontext_works" = "yes"; then 5235 coroutine=ucontext 5236 else 5237 coroutine=sigaltstack 5238 fi 5239else 5240 case $coroutine in 5241 windows) 5242 if test "$mingw32" != "yes"; then 5243 error_exit "'windows' coroutine backend only valid for Windows" 5244 fi 5245 # Unfortunately the user visible backend name doesn't match the 5246 # coroutine-*.c filename for this case, so we have to adjust it here. 5247 coroutine=win32 5248 ;; 5249 ucontext) 5250 if test "$ucontext_works" != "yes"; then 5251 feature_not_found "ucontext" 5252 fi 5253 ;; 5254 sigaltstack) 5255 if test "$mingw32" = "yes"; then 5256 error_exit "only the 'windows' coroutine backend is valid for Windows" 5257 fi 5258 ;; 5259 *) 5260 error_exit "unknown coroutine backend $coroutine" 5261 ;; 5262 esac 5263fi 5264 5265if test "$coroutine_pool" = ""; then 5266 coroutine_pool=yes 5267fi 5268 5269if test "$debug_stack_usage" = "yes"; then 5270 if test "$coroutine_pool" = "yes"; then 5271 echo "WARN: disabling coroutine pool for stack usage debugging" 5272 coroutine_pool=no 5273 fi 5274fi 5275 5276 5277########################################## 5278# check if we have open_by_handle_at 5279 5280open_by_handle_at=no 5281cat > $TMPC << EOF 5282#include <fcntl.h> 5283#if !defined(AT_EMPTY_PATH) 5284# error missing definition 5285#else 5286int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 5287#endif 5288EOF 5289if compile_prog "" "" ; then 5290 open_by_handle_at=yes 5291fi 5292 5293######################################## 5294# check if we have linux/magic.h 5295 5296linux_magic_h=no 5297cat > $TMPC << EOF 5298#include <linux/magic.h> 5299int main(void) { 5300 return 0; 5301} 5302EOF 5303if compile_prog "" "" ; then 5304 linux_magic_h=yes 5305fi 5306 5307######################################## 5308# check whether we can disable warning option with a pragma (this is needed 5309# to silence warnings in the headers of some versions of external libraries). 5310# This test has to be compiled with -Werror as otherwise an unknown pragma is 5311# only a warning. 5312# 5313# If we can't selectively disable warning in the code, disable -Werror so that 5314# the build doesn't fail anyway. 5315 5316pragma_disable_unused_but_set=no 5317cat > $TMPC << EOF 5318#pragma GCC diagnostic push 5319#pragma GCC diagnostic ignored "-Wstrict-prototypes" 5320#pragma GCC diagnostic pop 5321 5322int main(void) { 5323 return 0; 5324} 5325EOF 5326if compile_prog "-Werror" "" ; then 5327 pragma_diagnostic_available=yes 5328else 5329 werror=no 5330fi 5331 5332######################################## 5333# check if we have valgrind/valgrind.h 5334 5335valgrind_h=no 5336cat > $TMPC << EOF 5337#include <valgrind/valgrind.h> 5338int main(void) { 5339 return 0; 5340} 5341EOF 5342if compile_prog "" "" ; then 5343 valgrind_h=yes 5344fi 5345 5346######################################## 5347# check if environ is declared 5348 5349has_environ=no 5350cat > $TMPC << EOF 5351#include <unistd.h> 5352int main(void) { 5353 environ = 0; 5354 return 0; 5355} 5356EOF 5357if compile_prog "" "" ; then 5358 has_environ=yes 5359fi 5360 5361######################################## 5362# check if cpuid.h is usable. 5363 5364cat > $TMPC << EOF 5365#include <cpuid.h> 5366int main(void) { 5367 unsigned a, b, c, d; 5368 int max = __get_cpuid_max(0, 0); 5369 5370 if (max >= 1) { 5371 __cpuid(1, a, b, c, d); 5372 } 5373 5374 if (max >= 7) { 5375 __cpuid_count(7, 0, a, b, c, d); 5376 } 5377 5378 return 0; 5379} 5380EOF 5381if compile_prog "" "" ; then 5382 cpuid_h=yes 5383fi 5384 5385########################################## 5386# avx2 optimization requirement check 5387# 5388# There is no point enabling this if cpuid.h is not usable, 5389# since we won't be able to select the new routines. 5390 5391if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 5392 cat > $TMPC << EOF 5393#pragma GCC push_options 5394#pragma GCC target("avx2") 5395#include <cpuid.h> 5396#include <immintrin.h> 5397static int bar(void *a) { 5398 __m256i x = *(__m256i *)a; 5399 return _mm256_testz_si256(x, x); 5400} 5401int main(int argc, char *argv[]) { return bar(argv[0]); } 5402EOF 5403 if compile_object "" ; then 5404 avx2_opt="yes" 5405 else 5406 avx2_opt="no" 5407 fi 5408fi 5409 5410######################################## 5411# check if __[u]int128_t is usable. 5412 5413int128=no 5414cat > $TMPC << EOF 5415__int128_t a; 5416__uint128_t b; 5417int main (void) { 5418 a = a + b; 5419 b = a * b; 5420 a = a * a; 5421 return 0; 5422} 5423EOF 5424if compile_prog "" "" ; then 5425 int128=yes 5426fi 5427 5428######################################### 5429# See if 128-bit atomic operations are supported. 5430 5431atomic128=no 5432if test "$int128" = "yes"; then 5433 cat > $TMPC << EOF 5434int main(void) 5435{ 5436 unsigned __int128 x = 0, y = 0; 5437 y = __atomic_load_16(&x, 0); 5438 __atomic_store_16(&x, y, 0); 5439 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5440 return 0; 5441} 5442EOF 5443 if compile_prog "" "" ; then 5444 atomic128=yes 5445 fi 5446fi 5447 5448cmpxchg128=no 5449if test "$int128" = yes && test "$atomic128" = no; then 5450 cat > $TMPC << EOF 5451int main(void) 5452{ 5453 unsigned __int128 x = 0, y = 0; 5454 __sync_val_compare_and_swap_16(&x, y, x); 5455 return 0; 5456} 5457EOF 5458 if compile_prog "" "" ; then 5459 cmpxchg128=yes 5460 fi 5461fi 5462 5463######################################### 5464# See if 64-bit atomic operations are supported. 5465# Note that without __atomic builtins, we can only 5466# assume atomic loads/stores max at pointer size. 5467 5468cat > $TMPC << EOF 5469#include <stdint.h> 5470int main(void) 5471{ 5472 uint64_t x = 0, y = 0; 5473#ifdef __ATOMIC_RELAXED 5474 y = __atomic_load_8(&x, 0); 5475 __atomic_store_8(&x, y, 0); 5476 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 5477 __atomic_exchange_8(&x, y, 0); 5478 __atomic_fetch_add_8(&x, y, 0); 5479#else 5480 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5481 __sync_lock_test_and_set(&x, y); 5482 __sync_val_compare_and_swap(&x, y, 0); 5483 __sync_fetch_and_add(&x, y); 5484#endif 5485 return 0; 5486} 5487EOF 5488if compile_prog "" "" ; then 5489 atomic64=yes 5490fi 5491 5492######################################## 5493# See if 16-byte vector operations are supported. 5494# Even without a vector unit the compiler may expand these. 5495# There is a bug in old GCC for PPC that crashes here. 5496# Unfortunately it's the system compiler for Centos 7. 5497 5498cat > $TMPC << EOF 5499typedef unsigned char U1 __attribute__((vector_size(16))); 5500typedef unsigned short U2 __attribute__((vector_size(16))); 5501typedef unsigned int U4 __attribute__((vector_size(16))); 5502typedef unsigned long long U8 __attribute__((vector_size(16))); 5503typedef signed char S1 __attribute__((vector_size(16))); 5504typedef signed short S2 __attribute__((vector_size(16))); 5505typedef signed int S4 __attribute__((vector_size(16))); 5506typedef signed long long S8 __attribute__((vector_size(16))); 5507static U1 a1, b1; 5508static U2 a2, b2; 5509static U4 a4, b4; 5510static U8 a8, b8; 5511static S1 c1; 5512static S2 c2; 5513static S4 c4; 5514static S8 c8; 5515static int i; 5516void helper(void *d, void *a, int shift, int i); 5517void helper(void *d, void *a, int shift, int i) 5518{ 5519 *(U1 *)(d + i) = *(U1 *)(a + i) << shift; 5520 *(U2 *)(d + i) = *(U2 *)(a + i) << shift; 5521 *(U4 *)(d + i) = *(U4 *)(a + i) << shift; 5522 *(U8 *)(d + i) = *(U8 *)(a + i) << shift; 5523} 5524int main(void) 5525{ 5526 a1 += b1; a2 += b2; a4 += b4; a8 += b8; 5527 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8; 5528 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8; 5529 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8; 5530 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8; 5531 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8; 5532 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i; 5533 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i; 5534 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i; 5535 return 0; 5536} 5537EOF 5538 5539vector16=no 5540if compile_prog "" "" ; then 5541 vector16=yes 5542fi 5543 5544######################################## 5545# check if getauxval is available. 5546 5547getauxval=no 5548cat > $TMPC << EOF 5549#include <sys/auxv.h> 5550int main(void) { 5551 return getauxval(AT_HWCAP) == 0; 5552} 5553EOF 5554if compile_prog "" "" ; then 5555 getauxval=yes 5556fi 5557 5558######################################## 5559# check if ccache is interfering with 5560# semantic analysis of macros 5561 5562unset CCACHE_CPP2 5563ccache_cpp2=no 5564cat > $TMPC << EOF 5565static const int Z = 1; 5566#define fn() ({ Z; }) 5567#define TAUT(X) ((X) == Z) 5568#define PAREN(X, Y) (X == Y) 5569#define ID(X) (X) 5570int main(int argc, char *argv[]) 5571{ 5572 int x = 0, y = 0; 5573 x = ID(x); 5574 x = fn(); 5575 fn(); 5576 if (PAREN(x, y)) return 0; 5577 if (TAUT(Z)) return 0; 5578 return 0; 5579} 5580EOF 5581 5582if ! compile_object "-Werror"; then 5583 ccache_cpp2=yes 5584fi 5585 5586################################################# 5587# clang does not support glibc + FORTIFY_SOURCE. 5588 5589if test "$fortify_source" != "no"; then 5590 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5591 fortify_source="no"; 5592 elif test -n "$cxx" && has $cxx && 5593 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5594 fortify_source="no"; 5595 else 5596 fortify_source="yes" 5597 fi 5598fi 5599 5600############################################### 5601# Check if copy_file_range is provided by glibc 5602have_copy_file_range=no 5603cat > $TMPC << EOF 5604#include <unistd.h> 5605int main(void) { 5606 copy_file_range(0, NULL, 0, NULL, 0, 0); 5607 return 0; 5608} 5609EOF 5610if compile_prog "" "" ; then 5611 have_copy_file_range=yes 5612fi 5613 5614########################################## 5615# check if struct fsxattr is available via linux/fs.h 5616 5617have_fsxattr=no 5618cat > $TMPC << EOF 5619#include <linux/fs.h> 5620struct fsxattr foo; 5621int main(void) { 5622 return 0; 5623} 5624EOF 5625if compile_prog "" "" ; then 5626 have_fsxattr=yes 5627fi 5628 5629########################################## 5630# check for usable membarrier system call 5631if test "$membarrier" = "yes"; then 5632 have_membarrier=no 5633 if test "$mingw32" = "yes" ; then 5634 have_membarrier=yes 5635 elif test "$linux" = "yes" ; then 5636 cat > $TMPC << EOF 5637 #include <linux/membarrier.h> 5638 #include <sys/syscall.h> 5639 #include <unistd.h> 5640 #include <stdlib.h> 5641 int main(void) { 5642 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5643 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5644 exit(0); 5645 } 5646EOF 5647 if compile_prog "" "" ; then 5648 have_membarrier=yes 5649 fi 5650 fi 5651 if test "$have_membarrier" = "no"; then 5652 feature_not_found "membarrier" "membarrier system call not available" 5653 fi 5654else 5655 # Do not enable it by default even for Mingw32, because it doesn't 5656 # work on Wine. 5657 membarrier=no 5658fi 5659 5660########################################## 5661# check if rtnetlink.h exists and is useful 5662have_rtnetlink=no 5663cat > $TMPC << EOF 5664#include <linux/rtnetlink.h> 5665int main(void) { 5666 return IFLA_PROTO_DOWN; 5667} 5668EOF 5669if compile_prog "" "" ; then 5670 have_rtnetlink=yes 5671fi 5672 5673########################################## 5674# check for usable AF_VSOCK environment 5675have_af_vsock=no 5676cat > $TMPC << EOF 5677#include <errno.h> 5678#include <sys/types.h> 5679#include <sys/socket.h> 5680#if !defined(AF_VSOCK) 5681# error missing AF_VSOCK flag 5682#endif 5683#include <linux/vm_sockets.h> 5684int main(void) { 5685 int sock, ret; 5686 struct sockaddr_vm svm; 5687 socklen_t len = sizeof(svm); 5688 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5689 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5690 if ((ret == -1) && (errno == ENOTCONN)) { 5691 return 0; 5692 } 5693 return -1; 5694} 5695EOF 5696if compile_prog "" "" ; then 5697 have_af_vsock=yes 5698fi 5699 5700########################################## 5701# check for usable AF_ALG environment 5702hava_afalg=no 5703cat > $TMPC << EOF 5704#include <errno.h> 5705#include <sys/types.h> 5706#include <sys/socket.h> 5707#include <linux/if_alg.h> 5708int main(void) { 5709 int sock; 5710 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 5711 return sock; 5712} 5713EOF 5714if compile_prog "" "" ; then 5715 have_afalg=yes 5716fi 5717if test "$crypto_afalg" = "yes" 5718then 5719 if test "$have_afalg" != "yes" 5720 then 5721 error_exit "AF_ALG requested but could not be detected" 5722 fi 5723fi 5724 5725 5726################################################# 5727# Check to see if we have the Hypervisor framework 5728if [ "$darwin" = "yes" ] ; then 5729 cat > $TMPC << EOF 5730#include <Hypervisor/hv.h> 5731int main() { return 0;} 5732EOF 5733 if ! compile_object ""; then 5734 hvf='no' 5735 else 5736 hvf='yes' 5737 LDFLAGS="-framework Hypervisor $LDFLAGS" 5738 fi 5739fi 5740 5741################################################# 5742# Sparc implicitly links with --relax, which is 5743# incompatible with -r, so --no-relax should be 5744# given. It does no harm to give it on other 5745# platforms too. 5746 5747# Note: the prototype is needed since QEMU_CFLAGS 5748# contains -Wmissing-prototypes 5749cat > $TMPC << EOF 5750extern int foo(void); 5751int foo(void) { return 0; } 5752EOF 5753if ! compile_object ""; then 5754 error_exit "Failed to compile object file for LD_REL_FLAGS test" 5755fi 5756for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 5757 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 5758 LD_REL_FLAGS=$i 5759 break 5760 fi 5761done 5762if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 5763 feature_not_found "modules" "Cannot find how to build relocatable objects" 5764fi 5765 5766########################################## 5767# check for sysmacros.h 5768 5769have_sysmacros=no 5770cat > $TMPC << EOF 5771#include <sys/sysmacros.h> 5772int main(void) { 5773 return makedev(0, 0); 5774} 5775EOF 5776if compile_prog "" "" ; then 5777 have_sysmacros=yes 5778fi 5779 5780########################################## 5781# Veritas HyperScale block driver VxHS 5782# Check if libvxhs is installed 5783 5784if test "$vxhs" != "no" ; then 5785 cat > $TMPC <<EOF 5786#include <stdint.h> 5787#include <qnio/qnio_api.h> 5788 5789void *vxhs_callback; 5790 5791int main(void) { 5792 iio_init(QNIO_VERSION, vxhs_callback); 5793 return 0; 5794} 5795EOF 5796 vxhs_libs="-lvxhs -lssl" 5797 if compile_prog "" "$vxhs_libs" ; then 5798 vxhs=yes 5799 else 5800 if test "$vxhs" = "yes" ; then 5801 feature_not_found "vxhs block device" "Install libvxhs See github" 5802 fi 5803 vxhs=no 5804 fi 5805fi 5806 5807########################################## 5808# check for _Static_assert() 5809 5810have_static_assert=no 5811cat > $TMPC << EOF 5812_Static_assert(1, "success"); 5813int main(void) { 5814 return 0; 5815} 5816EOF 5817if compile_prog "" "" ; then 5818 have_static_assert=yes 5819fi 5820 5821########################################## 5822# check for utmpx.h, it is missing e.g. on OpenBSD 5823 5824have_utmpx=no 5825cat > $TMPC << EOF 5826#include <utmpx.h> 5827struct utmpx user_info; 5828int main(void) { 5829 return 0; 5830} 5831EOF 5832if compile_prog "" "" ; then 5833 have_utmpx=yes 5834fi 5835 5836########################################## 5837# check for getrandom() 5838 5839have_getrandom=no 5840cat > $TMPC << EOF 5841#include <sys/random.h> 5842int main(void) { 5843 return getrandom(0, 0, GRND_NONBLOCK); 5844} 5845EOF 5846if compile_prog "" "" ; then 5847 have_getrandom=yes 5848fi 5849 5850########################################## 5851# checks for sanitizers 5852 5853have_asan=no 5854have_ubsan=no 5855have_asan_iface_h=no 5856have_asan_iface_fiber=no 5857 5858if test "$sanitizers" = "yes" ; then 5859 write_c_skeleton 5860 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 5861 have_asan=yes 5862 fi 5863 5864 # we could use a simple skeleton for flags checks, but this also 5865 # detect the static linking issue of ubsan, see also: 5866 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 5867 cat > $TMPC << EOF 5868#include <stdlib.h> 5869int main(void) { 5870 void *tmp = malloc(10); 5871 return *(int *)(tmp + 2); 5872} 5873EOF 5874 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 5875 have_ubsan=yes 5876 fi 5877 5878 if check_include "sanitizer/asan_interface.h" ; then 5879 have_asan_iface_h=yes 5880 fi 5881 5882 cat > $TMPC << EOF 5883#include <sanitizer/asan_interface.h> 5884int main(void) { 5885 __sanitizer_start_switch_fiber(0, 0, 0); 5886 return 0; 5887} 5888EOF 5889 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 5890 have_asan_iface_fiber=yes 5891 fi 5892fi 5893 5894########################################## 5895# Docker and cross-compiler support 5896# 5897# This is specifically for building test 5898# cases for foreign architectures, not 5899# cross-compiling QEMU itself. 5900 5901if has "docker"; then 5902 docker=$($python $source_path/tests/docker/docker.py probe) 5903fi 5904 5905########################################## 5906# check for libpmem 5907 5908if test "$libpmem" != "no"; then 5909 if $pkg_config --exists "libpmem"; then 5910 libpmem="yes" 5911 libpmem_libs=$($pkg_config --libs libpmem) 5912 libpmem_cflags=$($pkg_config --cflags libpmem) 5913 libs_softmmu="$libs_softmmu $libpmem_libs" 5914 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" 5915 else 5916 if test "$libpmem" = "yes" ; then 5917 feature_not_found "libpmem" "Install nvml or pmdk" 5918 fi 5919 libpmem="no" 5920 fi 5921fi 5922 5923########################################## 5924# check for slirp 5925 5926case "$slirp" in 5927 "" | yes) 5928 if $pkg_config slirp; then 5929 slirp=system 5930 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5931 slirp=git 5932 elif test -e "${source_path}/slirp/Makefile" ; then 5933 slirp=internal 5934 elif test -z "$slirp" ; then 5935 slirp=no 5936 else 5937 feature_not_found "slirp" "Install slirp devel or git submodule" 5938 fi 5939 ;; 5940 5941 system) 5942 if ! $pkg_config slirp; then 5943 feature_not_found "slirp" "Install slirp devel" 5944 fi 5945 ;; 5946esac 5947 5948case "$slirp" in 5949 git | internal) 5950 if test "$slirp" = git; then 5951 git_submodules="${git_submodules} slirp" 5952 fi 5953 mkdir -p slirp 5954 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src" 5955 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp" 5956 ;; 5957 5958 system) 5959 slirp_version=$($pkg_config --modversion slirp 2>/dev/null) 5960 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null) 5961 slirp_libs=$($pkg_config --libs slirp 2>/dev/null) 5962 ;; 5963 5964 no) 5965 ;; 5966 *) 5967 error_exit "Unknown state for slirp: $slirp" 5968 ;; 5969esac 5970 5971 5972########################################## 5973# End of CC checks 5974# After here, no more $cc or $ld runs 5975 5976write_c_skeleton 5977 5978if test "$gcov" = "yes" ; then 5979 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS" 5980 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS" 5981elif test "$fortify_source" = "yes" ; then 5982 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 5983elif test "$debug" = "no"; then 5984 CFLAGS="-O2 $CFLAGS" 5985fi 5986 5987if test "$have_asan" = "yes"; then 5988 CFLAGS="-fsanitize=address $CFLAGS" 5989 if test "$have_asan_iface_h" = "no" ; then 5990 echo "ASAN build enabled, but ASAN header missing." \ 5991 "Without code annotation, the report may be inferior." 5992 elif test "$have_asan_iface_fiber" = "no" ; then 5993 echo "ASAN build enabled, but ASAN header is too old." \ 5994 "Without code annotation, the report may be inferior." 5995 fi 5996fi 5997if test "$have_ubsan" = "yes"; then 5998 CFLAGS="-fsanitize=undefined $CFLAGS" 5999fi 6000 6001########################################## 6002# Do we have libnfs 6003if test "$libnfs" != "no" ; then 6004 if $pkg_config --atleast-version=1.9.3 libnfs; then 6005 libnfs="yes" 6006 libnfs_libs=$($pkg_config --libs libnfs) 6007 else 6008 if test "$libnfs" = "yes" ; then 6009 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 6010 fi 6011 libnfs="no" 6012 fi 6013fi 6014 6015########################################## 6016# Do we have libudev 6017if test "$libudev" != "no" ; then 6018 if $pkg_config libudev && test "$static" != "yes"; then 6019 libudev="yes" 6020 libudev_libs=$($pkg_config --libs libudev) 6021 else 6022 libudev="no" 6023 fi 6024fi 6025 6026# Now we've finished running tests it's OK to add -Werror to the compiler flags 6027if test "$werror" = "yes"; then 6028 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 6029fi 6030 6031if test "$solaris" = "no" ; then 6032 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 6033 LDFLAGS="-Wl,--warn-common $LDFLAGS" 6034 fi 6035fi 6036 6037# test if pod2man has --utf8 option 6038if pod2man --help | grep -q utf8; then 6039 POD2MAN="pod2man --utf8" 6040else 6041 POD2MAN="pod2man" 6042fi 6043 6044# Use ASLR, no-SEH and DEP if available 6045if test "$mingw32" = "yes" ; then 6046 for flag in --dynamicbase --no-seh --nxcompat; do 6047 if ld_has $flag ; then 6048 LDFLAGS="-Wl,$flag $LDFLAGS" 6049 fi 6050 done 6051fi 6052 6053# Disable OpenBSD W^X if available 6054if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then 6055 cat > $TMPC <<EOF 6056 int main(void) { return 0; } 6057EOF 6058 wx_ldflags="-Wl,-z,wxneeded" 6059 if compile_prog "" "$wx_ldflags"; then 6060 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags" 6061 fi 6062fi 6063 6064qemu_confdir=$sysconfdir$confsuffix 6065qemu_moddir=$libdir$confsuffix 6066qemu_datadir=$datadir$confsuffix 6067qemu_localedir="$datadir/locale" 6068qemu_icondir="$datadir/icons" 6069qemu_desktopdir="$datadir/applications" 6070 6071# We can only support ivshmem if we have eventfd 6072if [ "$eventfd" = "yes" ]; then 6073 ivshmem=yes 6074fi 6075 6076tools="" 6077if test "$want_tools" = "yes" ; then 6078 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools" 6079 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 6080 tools="qemu-nbd\$(EXESUF) $tools" 6081 fi 6082 if [ "$ivshmem" = "yes" ]; then 6083 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 6084 fi 6085 if [ "$curl" = "yes" ]; then 6086 tools="elf2dmp\$(EXESUF) $tools" 6087 fi 6088fi 6089if test "$softmmu" = yes ; then 6090 if test "$linux" = yes; then 6091 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then 6092 virtfs=yes 6093 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 6094 else 6095 if test "$virtfs" = yes; then 6096 error_exit "VirtFS requires libcap devel and libattr devel" 6097 fi 6098 virtfs=no 6099 fi 6100 if test "$mpath" != no && test "$mpathpersist" = yes ; then 6101 mpath=yes 6102 else 6103 if test "$mpath" = yes; then 6104 error_exit "Multipath requires libmpathpersist devel" 6105 fi 6106 mpath=no 6107 fi 6108 tools="$tools scsi/qemu-pr-helper\$(EXESUF)" 6109 else 6110 if test "$virtfs" = yes; then 6111 error_exit "VirtFS is supported only on Linux" 6112 fi 6113 virtfs=no 6114 if test "$mpath" = yes; then 6115 error_exit "Multipath is supported only on Linux" 6116 fi 6117 mpath=no 6118 fi 6119 if test "$xkbcommon" = "yes"; then 6120 tools="qemu-keymap\$(EXESUF) $tools" 6121 fi 6122fi 6123 6124# Probe for guest agent support/options 6125 6126if [ "$guest_agent" != "no" ]; then 6127 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 6128 guest_agent=no 6129 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 6130 tools="qemu-ga $tools" 6131 guest_agent=yes 6132 elif [ "$guest_agent" != yes ]; then 6133 guest_agent=no 6134 else 6135 error_exit "Guest agent is not supported on this platform" 6136 fi 6137fi 6138 6139# Guest agent Window MSI package 6140 6141if test "$guest_agent" != yes; then 6142 if test "$guest_agent_msi" = yes; then 6143 error_exit "MSI guest agent package requires guest agent enabled" 6144 fi 6145 guest_agent_msi=no 6146elif test "$mingw32" != "yes"; then 6147 if test "$guest_agent_msi" = "yes"; then 6148 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 6149 fi 6150 guest_agent_msi=no 6151elif ! has wixl; then 6152 if test "$guest_agent_msi" = "yes"; then 6153 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 6154 fi 6155 guest_agent_msi=no 6156else 6157 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 6158 # disabled explicitly 6159 if test "$guest_agent_msi" != "no"; then 6160 guest_agent_msi=yes 6161 fi 6162fi 6163 6164if test "$guest_agent_msi" = "yes"; then 6165 if test "$guest_agent_with_vss" = "yes"; then 6166 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 6167 fi 6168 6169 if test "$QEMU_GA_MANUFACTURER" = ""; then 6170 QEMU_GA_MANUFACTURER=QEMU 6171 fi 6172 6173 if test "$QEMU_GA_DISTRO" = ""; then 6174 QEMU_GA_DISTRO=Linux 6175 fi 6176 6177 if test "$QEMU_GA_VERSION" = ""; then 6178 QEMU_GA_VERSION=$(cat $source_path/VERSION) 6179 fi 6180 6181 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 6182 6183 case "$cpu" in 6184 x86_64) 6185 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 6186 ;; 6187 i386) 6188 QEMU_GA_MSI_ARCH="-D Arch=32" 6189 ;; 6190 *) 6191 error_exit "CPU $cpu not supported for building installation package" 6192 ;; 6193 esac 6194fi 6195 6196# Mac OS X ships with a broken assembler 6197roms= 6198if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 6199 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 6200 test "$softmmu" = yes ; then 6201 # Different host OS linkers have different ideas about the name of the ELF 6202 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 6203 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 6204 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 6205 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 6206 ld_i386_emulation="$emu" 6207 roms="optionrom" 6208 break 6209 fi 6210 done 6211fi 6212if test "$ARCH" = "ppc64" && test "$targetos" != "Darwin" ; then 6213 roms="$roms spapr-rtas" 6214fi 6215 6216# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 6217if test "$cpu" = "s390x" ; then 6218 write_c_skeleton 6219 if compile_prog "-march=z900" ""; then 6220 roms="$roms s390-ccw" 6221 fi 6222fi 6223 6224# Probe for the need for relocating the user-only binary. 6225if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 6226 textseg_addr= 6227 case "$cpu" in 6228 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 6229 # ??? Rationale for choosing this address 6230 textseg_addr=0x60000000 6231 ;; 6232 mips) 6233 # A 256M aligned address, high in the address space, with enough 6234 # room for the code_gen_buffer above it before the stack. 6235 textseg_addr=0x60000000 6236 ;; 6237 esac 6238 if [ -n "$textseg_addr" ]; then 6239 cat > $TMPC <<EOF 6240 int main(void) { return 0; } 6241EOF 6242 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 6243 if ! compile_prog "" "$textseg_ldflags"; then 6244 # In case ld does not support -Ttext-segment, edit the default linker 6245 # script via sed to set the .text start addr. This is needed on FreeBSD 6246 # at least. 6247 if ! $ld --verbose >/dev/null 2>&1; then 6248 error_exit \ 6249 "We need to link the QEMU user mode binaries at a" \ 6250 "specific text address. Unfortunately your linker" \ 6251 "doesn't support either the -Ttext-segment option or" \ 6252 "printing the default linker script with --verbose." \ 6253 "If you don't want the user mode binaries, pass the" \ 6254 "--disable-user option to configure." 6255 fi 6256 6257 $ld --verbose | sed \ 6258 -e '1,/==================================================/d' \ 6259 -e '/==================================================/,$d' \ 6260 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 6261 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 6262 textseg_ldflags="-Wl,-T../config-host.ld" 6263 fi 6264 fi 6265fi 6266 6267# Check that the C++ compiler exists and works with the C compiler. 6268# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 6269if has $cxx; then 6270 cat > $TMPC <<EOF 6271int c_function(void); 6272int main(void) { return c_function(); } 6273EOF 6274 6275 compile_object 6276 6277 cat > $TMPCXX <<EOF 6278extern "C" { 6279 int c_function(void); 6280} 6281int c_function(void) { return 42; } 6282EOF 6283 6284 update_cxxflags 6285 6286 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then 6287 # C++ compiler $cxx works ok with C compiler $cc 6288 : 6289 else 6290 echo "C++ compiler $cxx does not work with C compiler $cc" 6291 echo "Disabling C++ specific optional code" 6292 cxx= 6293 fi 6294else 6295 echo "No C++ compiler available; disabling C++ specific optional code" 6296 cxx= 6297fi 6298 6299echo_version() { 6300 if test "$1" = "yes" ; then 6301 echo "($2)" 6302 fi 6303} 6304 6305# prepend pixman and ftd flags after all config tests are done 6306QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 6307QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 6308libs_softmmu="$pixman_libs $libs_softmmu" 6309 6310echo "Install prefix $prefix" 6311echo "BIOS directory $(eval echo $qemu_datadir)" 6312echo "firmware path $(eval echo $firmwarepath)" 6313echo "binary directory $(eval echo $bindir)" 6314echo "library directory $(eval echo $libdir)" 6315echo "module directory $(eval echo $qemu_moddir)" 6316echo "libexec directory $(eval echo $libexecdir)" 6317echo "include directory $(eval echo $includedir)" 6318echo "config directory $(eval echo $sysconfdir)" 6319if test "$mingw32" = "no" ; then 6320echo "local state directory $(eval echo $local_statedir)" 6321echo "Manual directory $(eval echo $mandir)" 6322echo "ELF interp prefix $interp_prefix" 6323else 6324echo "local state directory queried at runtime" 6325echo "Windows SDK $win_sdk" 6326fi 6327echo "Source path $source_path" 6328echo "GIT binary $git" 6329echo "GIT submodules $git_submodules" 6330echo "C compiler $cc" 6331echo "Host C compiler $host_cc" 6332echo "C++ compiler $cxx" 6333echo "Objective-C compiler $objcc" 6334echo "ARFLAGS $ARFLAGS" 6335echo "CFLAGS $CFLAGS" 6336echo "QEMU_CFLAGS $QEMU_CFLAGS" 6337echo "LDFLAGS $LDFLAGS" 6338echo "QEMU_LDFLAGS $QEMU_LDFLAGS" 6339echo "make $make" 6340echo "install $install" 6341echo "python $python ($python_version)" 6342echo "slirp support $slirp $(echo_version $slirp $slirp_version)" 6343if test "$slirp" != "no" ; then 6344 echo "smbd $smbd" 6345fi 6346echo "module support $modules" 6347echo "host CPU $cpu" 6348echo "host big endian $bigendian" 6349echo "target list $target_list" 6350echo "gprof enabled $gprof" 6351echo "sparse enabled $sparse" 6352echo "strip binaries $strip_opt" 6353echo "profiler $profiler" 6354echo "static build $static" 6355if test "$darwin" = "yes" ; then 6356 echo "Cocoa support $cocoa" 6357fi 6358echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 6359echo "SDL image support $sdl_image" 6360echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 6361echo "GTK GL support $gtk_gl" 6362echo "VTE support $vte $(echo_version $vte $vteversion)" 6363echo "TLS priority $tls_priority" 6364echo "GNUTLS support $gnutls" 6365echo "libgcrypt $gcrypt" 6366echo "nettle $nettle $(echo_version $nettle $nettle_version)" 6367echo "libtasn1 $tasn1" 6368echo "PAM $auth_pam" 6369echo "iconv support $iconv" 6370echo "curses support $curses" 6371echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)" 6372echo "curl support $curl" 6373echo "mingw32 support $mingw32" 6374echo "Audio drivers $audio_drv_list" 6375echo "Block whitelist (rw) $block_drv_rw_whitelist" 6376echo "Block whitelist (ro) $block_drv_ro_whitelist" 6377echo "VirtFS support $virtfs" 6378echo "Multipath support $mpath" 6379echo "VNC support $vnc" 6380if test "$vnc" = "yes" ; then 6381 echo "VNC SASL support $vnc_sasl" 6382 echo "VNC JPEG support $vnc_jpeg" 6383 echo "VNC PNG support $vnc_png" 6384fi 6385if test -n "$sparc_cpu"; then 6386 echo "Target Sparc Arch $sparc_cpu" 6387fi 6388echo "xen support $xen" 6389if test "$xen" = "yes" ; then 6390 echo "xen ctrl version $xen_ctrl_version" 6391fi 6392echo "brlapi support $brlapi" 6393echo "bluez support $bluez" 6394echo "Documentation $docs" 6395echo "PIE $pie" 6396echo "vde support $vde" 6397echo "netmap support $netmap" 6398echo "Linux AIO support $linux_aio" 6399echo "ATTR/XATTR support $attr" 6400echo "Install blobs $blobs" 6401echo "KVM support $kvm" 6402echo "HAX support $hax" 6403echo "HVF support $hvf" 6404echo "WHPX support $whpx" 6405echo "TCG support $tcg" 6406if test "$tcg" = "yes" ; then 6407 echo "TCG debug enabled $debug_tcg" 6408 echo "TCG interpreter $tcg_interpreter" 6409fi 6410echo "malloc trim support $malloc_trim" 6411echo "RDMA support $rdma" 6412echo "PVRDMA support $pvrdma" 6413echo "fdt support $fdt" 6414echo "membarrier $membarrier" 6415echo "preadv support $preadv" 6416echo "fdatasync $fdatasync" 6417echo "madvise $madvise" 6418echo "posix_madvise $posix_madvise" 6419echo "posix_memalign $posix_memalign" 6420echo "libcap-ng support $cap_ng" 6421echo "vhost-net support $vhost_net" 6422echo "vhost-crypto support $vhost_crypto" 6423echo "vhost-scsi support $vhost_scsi" 6424echo "vhost-vsock support $vhost_vsock" 6425echo "vhost-user support $vhost_user" 6426echo "Trace backends $trace_backends" 6427if have_backend "simple"; then 6428echo "Trace output file $trace_file-<pid>" 6429fi 6430echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 6431echo "rbd support $rbd" 6432echo "xfsctl support $xfs" 6433echo "smartcard support $smartcard" 6434echo "libusb $libusb" 6435echo "usb net redir $usb_redir" 6436echo "OpenGL support $opengl" 6437echo "OpenGL dmabufs $opengl_dmabuf" 6438echo "libiscsi support $libiscsi" 6439echo "libnfs support $libnfs" 6440echo "build guest agent $guest_agent" 6441echo "QGA VSS support $guest_agent_with_vss" 6442echo "QGA w32 disk info $guest_agent_ntddscsi" 6443echo "QGA MSI support $guest_agent_msi" 6444echo "seccomp support $seccomp" 6445echo "coroutine backend $coroutine" 6446echo "coroutine pool $coroutine_pool" 6447echo "debug stack usage $debug_stack_usage" 6448echo "mutex debugging $debug_mutex" 6449echo "crypto afalg $crypto_afalg" 6450echo "GlusterFS support $glusterfs" 6451echo "gcov $gcov_tool" 6452echo "gcov enabled $gcov" 6453echo "TPM support $tpm" 6454echo "libssh2 support $libssh2" 6455echo "QOM debugging $qom_cast_debug" 6456echo "Live block migration $live_block_migration" 6457echo "lzo support $lzo" 6458echo "snappy support $snappy" 6459echo "bzip2 support $bzip2" 6460echo "lzfse support $lzfse" 6461echo "NUMA host support $numa" 6462echo "libxml2 $libxml2" 6463echo "tcmalloc support $tcmalloc" 6464echo "jemalloc support $jemalloc" 6465echo "avx2 optimization $avx2_opt" 6466echo "replication support $replication" 6467echo "VxHS block device $vxhs" 6468echo "bochs support $bochs" 6469echo "cloop support $cloop" 6470echo "dmg support $dmg" 6471echo "qcow v1 support $qcow1" 6472echo "vdi support $vdi" 6473echo "vvfat support $vvfat" 6474echo "qed support $qed" 6475echo "parallels support $parallels" 6476echo "sheepdog support $sheepdog" 6477echo "capstone $capstone" 6478echo "docker $docker" 6479echo "libpmem support $libpmem" 6480echo "libudev $libudev" 6481echo "default devices $default_devices" 6482 6483if test "$supported_cpu" = "no"; then 6484 echo 6485 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 6486 echo 6487 echo "CPU host architecture $cpu support is not currently maintained." 6488 echo "The QEMU project intends to remove support for this host CPU in" 6489 echo "a future release if nobody volunteers to maintain it and to" 6490 echo "provide a build host for our continuous integration setup." 6491 echo "configure has succeeded and you can continue to build, but" 6492 echo "if you care about QEMU on this platform you should contact" 6493 echo "us upstream at qemu-devel@nongnu.org." 6494fi 6495 6496if test "$supported_os" = "no"; then 6497 echo 6498 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 6499 echo 6500 echo "Host OS $targetos support is not currently maintained." 6501 echo "The QEMU project intends to remove support for this host OS in" 6502 echo "a future release if nobody volunteers to maintain it and to" 6503 echo "provide a build host for our continuous integration setup." 6504 echo "configure has succeeded and you can continue to build, but" 6505 echo "if you care about QEMU on this platform you should contact" 6506 echo "us upstream at qemu-devel@nongnu.org." 6507fi 6508 6509config_host_mak="config-host.mak" 6510 6511echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 6512 6513echo "# Automatically generated by configure - do not modify" > $config_host_mak 6514echo >> $config_host_mak 6515 6516echo all: >> $config_host_mak 6517echo "prefix=$prefix" >> $config_host_mak 6518echo "bindir=$bindir" >> $config_host_mak 6519echo "libdir=$libdir" >> $config_host_mak 6520echo "libexecdir=$libexecdir" >> $config_host_mak 6521echo "includedir=$includedir" >> $config_host_mak 6522echo "mandir=$mandir" >> $config_host_mak 6523echo "sysconfdir=$sysconfdir" >> $config_host_mak 6524echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 6525echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 6526echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6527echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 6528echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 6529if test "$mingw32" = "no" ; then 6530 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 6531fi 6532echo "qemu_helperdir=$libexecdir" >> $config_host_mak 6533echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 6534echo "qemu_icondir=$qemu_icondir" >> $config_host_mak 6535echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak 6536echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 6537echo "GIT=$git" >> $config_host_mak 6538echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6539echo "GIT_UPDATE=$git_update" >> $config_host_mak 6540 6541echo "ARCH=$ARCH" >> $config_host_mak 6542 6543if test "$default_devices" = "yes" ; then 6544 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak 6545else 6546 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak 6547fi 6548if test "$debug_tcg" = "yes" ; then 6549 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6550fi 6551if test "$strip_opt" = "yes" ; then 6552 echo "STRIP=${strip}" >> $config_host_mak 6553fi 6554if test "$bigendian" = "yes" ; then 6555 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6556fi 6557if test "$mingw32" = "yes" ; then 6558 echo "CONFIG_WIN32=y" >> $config_host_mak 6559 rc_version=$(cat $source_path/VERSION) 6560 version_major=${rc_version%%.*} 6561 rc_version=${rc_version#*.} 6562 version_minor=${rc_version%%.*} 6563 rc_version=${rc_version#*.} 6564 version_subminor=${rc_version%%.*} 6565 version_micro=0 6566 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6567 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6568 if test "$guest_agent_with_vss" = "yes" ; then 6569 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6570 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6571 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6572 fi 6573 if test "$guest_agent_ntddscsi" = "yes" ; then 6574 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 6575 fi 6576 if test "$guest_agent_msi" = "yes"; then 6577 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6578 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6579 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6580 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6581 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6582 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6583 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6584 fi 6585else 6586 echo "CONFIG_POSIX=y" >> $config_host_mak 6587fi 6588 6589if test "$linux" = "yes" ; then 6590 echo "CONFIG_LINUX=y" >> $config_host_mak 6591fi 6592 6593if test "$darwin" = "yes" ; then 6594 echo "CONFIG_DARWIN=y" >> $config_host_mak 6595fi 6596 6597if test "$solaris" = "yes" ; then 6598 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6599fi 6600if test "$haiku" = "yes" ; then 6601 echo "CONFIG_HAIKU=y" >> $config_host_mak 6602fi 6603if test "$static" = "yes" ; then 6604 echo "CONFIG_STATIC=y" >> $config_host_mak 6605fi 6606if test "$profiler" = "yes" ; then 6607 echo "CONFIG_PROFILER=y" >> $config_host_mak 6608fi 6609if test "$slirp" != "no"; then 6610 echo "CONFIG_SLIRP=y" >> $config_host_mak 6611 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6612 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak 6613 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak 6614fi 6615if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then 6616 echo "config-host.h: subdir-slirp" >> $config_host_mak 6617fi 6618if test "$vde" = "yes" ; then 6619 echo "CONFIG_VDE=y" >> $config_host_mak 6620 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 6621fi 6622if test "$netmap" = "yes" ; then 6623 echo "CONFIG_NETMAP=y" >> $config_host_mak 6624fi 6625if test "$l2tpv3" = "yes" ; then 6626 echo "CONFIG_L2TPV3=y" >> $config_host_mak 6627fi 6628if test "$cap_ng" = "yes" ; then 6629 echo "CONFIG_LIBCAP=y" >> $config_host_mak 6630fi 6631echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 6632for drv in $audio_drv_list; do 6633 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6634 case "$drv" in 6635 alsa | oss | pa | sdl) 6636 echo "$def=m" >> $config_host_mak ;; 6637 *) 6638 echo "$def=y" >> $config_host_mak ;; 6639 esac 6640done 6641echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6642echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6643echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6644echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6645echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6646if test "$audio_pt_int" = "yes" ; then 6647 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 6648fi 6649if test "$audio_win_int" = "yes" ; then 6650 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6651fi 6652echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6653echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6654if test "$vnc" = "yes" ; then 6655 echo "CONFIG_VNC=y" >> $config_host_mak 6656fi 6657if test "$vnc_sasl" = "yes" ; then 6658 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 6659fi 6660if test "$vnc_jpeg" = "yes" ; then 6661 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 6662fi 6663if test "$vnc_png" = "yes" ; then 6664 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 6665fi 6666if test "$xkbcommon" = "yes" ; then 6667 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 6668 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 6669fi 6670if test "$xfs" = "yes" ; then 6671 echo "CONFIG_XFS=y" >> $config_host_mak 6672fi 6673qemu_version=$(head $source_path/VERSION) 6674echo "VERSION=$qemu_version" >>$config_host_mak 6675echo "PKGVERSION=$pkgversion" >>$config_host_mak 6676echo "SRC_PATH=$source_path" >> $config_host_mak 6677echo "TARGET_DIRS=$target_list" >> $config_host_mak 6678if [ "$docs" = "yes" ] ; then 6679 echo "BUILD_DOCS=yes" >> $config_host_mak 6680fi 6681if test "$modules" = "yes"; then 6682 # $shacmd can generate a hash started with digit, which the compiler doesn't 6683 # like as an symbol. So prefix it with an underscore 6684 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6685 echo "CONFIG_MODULES=y" >> $config_host_mak 6686fi 6687if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then 6688 echo "CONFIG_X11=y" >> $config_host_mak 6689 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6690 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6691fi 6692if test "$sdl" = "yes" ; then 6693 echo "CONFIG_SDL=m" >> $config_host_mak 6694 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 6695 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 6696 if test "$sdl_image" = "yes" ; then 6697 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak 6698 fi 6699fi 6700if test "$cocoa" = "yes" ; then 6701 echo "CONFIG_COCOA=y" >> $config_host_mak 6702fi 6703if test "$iconv" = "yes" ; then 6704 echo "CONFIG_ICONV=y" >> $config_host_mak 6705 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak 6706 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak 6707fi 6708if test "$curses" = "yes" ; then 6709 echo "CONFIG_CURSES=m" >> $config_host_mak 6710 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 6711 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 6712fi 6713if test "$pipe2" = "yes" ; then 6714 echo "CONFIG_PIPE2=y" >> $config_host_mak 6715fi 6716if test "$accept4" = "yes" ; then 6717 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 6718fi 6719if test "$splice" = "yes" ; then 6720 echo "CONFIG_SPLICE=y" >> $config_host_mak 6721fi 6722if test "$eventfd" = "yes" ; then 6723 echo "CONFIG_EVENTFD=y" >> $config_host_mak 6724fi 6725if test "$memfd" = "yes" ; then 6726 echo "CONFIG_MEMFD=y" >> $config_host_mak 6727fi 6728if test "$have_usbfs" = "yes" ; then 6729 echo "CONFIG_USBFS=y" >> $config_host_mak 6730fi 6731if test "$fallocate" = "yes" ; then 6732 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6733fi 6734if test "$fallocate_punch_hole" = "yes" ; then 6735 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 6736fi 6737if test "$fallocate_zero_range" = "yes" ; then 6738 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6739fi 6740if test "$posix_fallocate" = "yes" ; then 6741 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6742fi 6743if test "$sync_file_range" = "yes" ; then 6744 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6745fi 6746if test "$fiemap" = "yes" ; then 6747 echo "CONFIG_FIEMAP=y" >> $config_host_mak 6748fi 6749if test "$dup3" = "yes" ; then 6750 echo "CONFIG_DUP3=y" >> $config_host_mak 6751fi 6752if test "$ppoll" = "yes" ; then 6753 echo "CONFIG_PPOLL=y" >> $config_host_mak 6754fi 6755if test "$prctl_pr_set_timerslack" = "yes" ; then 6756 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6757fi 6758if test "$epoll" = "yes" ; then 6759 echo "CONFIG_EPOLL=y" >> $config_host_mak 6760fi 6761if test "$epoll_create1" = "yes" ; then 6762 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 6763fi 6764if test "$sendfile" = "yes" ; then 6765 echo "CONFIG_SENDFILE=y" >> $config_host_mak 6766fi 6767if test "$timerfd" = "yes" ; then 6768 echo "CONFIG_TIMERFD=y" >> $config_host_mak 6769fi 6770if test "$setns" = "yes" ; then 6771 echo "CONFIG_SETNS=y" >> $config_host_mak 6772fi 6773if test "$clock_adjtime" = "yes" ; then 6774 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 6775fi 6776if test "$syncfs" = "yes" ; then 6777 echo "CONFIG_SYNCFS=y" >> $config_host_mak 6778fi 6779if test "$inotify" = "yes" ; then 6780 echo "CONFIG_INOTIFY=y" >> $config_host_mak 6781fi 6782if test "$inotify1" = "yes" ; then 6783 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6784fi 6785if test "$sem_timedwait" = "yes" ; then 6786 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6787fi 6788if test "$strchrnul" = "yes" ; then 6789 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 6790fi 6791if test "$byteswap_h" = "yes" ; then 6792 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 6793fi 6794if test "$bswap_h" = "yes" ; then 6795 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 6796fi 6797if test "$curl" = "yes" ; then 6798 echo "CONFIG_CURL=m" >> $config_host_mak 6799 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 6800 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6801fi 6802if test "$brlapi" = "yes" ; then 6803 echo "CONFIG_BRLAPI=y" >> $config_host_mak 6804 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 6805fi 6806if test "$bluez" = "yes" ; then 6807 echo "CONFIG_BLUEZ=y" >> $config_host_mak 6808 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 6809fi 6810if test "$gtk" = "yes" ; then 6811 echo "CONFIG_GTK=m" >> $config_host_mak 6812 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6813 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6814 if test "$gtk_gl" = "yes" ; then 6815 echo "CONFIG_GTK_GL=y" >> $config_host_mak 6816 fi 6817fi 6818if test "$gio" = "yes" ; then 6819 echo "CONFIG_GIO=y" >> $config_host_mak 6820 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 6821 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 6822fi 6823echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6824if test "$gnutls" = "yes" ; then 6825 echo "CONFIG_GNUTLS=y" >> $config_host_mak 6826fi 6827if test "$gcrypt" = "yes" ; then 6828 echo "CONFIG_GCRYPT=y" >> $config_host_mak 6829 if test "$gcrypt_hmac" = "yes" ; then 6830 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 6831 fi 6832fi 6833if test "$nettle" = "yes" ; then 6834 echo "CONFIG_NETTLE=y" >> $config_host_mak 6835 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6836fi 6837if test "$tasn1" = "yes" ; then 6838 echo "CONFIG_TASN1=y" >> $config_host_mak 6839fi 6840if test "$auth_pam" = "yes" ; then 6841 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 6842fi 6843if test "$have_ifaddrs_h" = "yes" ; then 6844 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 6845fi 6846if test "$have_broken_size_max" = "yes" ; then 6847 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 6848fi 6849 6850# Work around a system header bug with some kernel/XFS header 6851# versions where they both try to define 'struct fsxattr': 6852# xfs headers will not try to redefine structs from linux headers 6853# if this macro is set. 6854if test "$have_fsxattr" = "yes" ; then 6855 echo "HAVE_FSXATTR=y" >> $config_host_mak 6856fi 6857if test "$have_copy_file_range" = "yes" ; then 6858 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 6859fi 6860if test "$vte" = "yes" ; then 6861 echo "CONFIG_VTE=y" >> $config_host_mak 6862 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 6863 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 6864fi 6865if test "$virglrenderer" = "yes" ; then 6866 echo "CONFIG_VIRGL=y" >> $config_host_mak 6867 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 6868 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 6869fi 6870if test "$xen" = "yes" ; then 6871 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 6872 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 6873fi 6874if test "$linux_aio" = "yes" ; then 6875 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 6876fi 6877if test "$attr" = "yes" ; then 6878 echo "CONFIG_ATTR=y" >> $config_host_mak 6879fi 6880if test "$libattr" = "yes" ; then 6881 echo "CONFIG_LIBATTR=y" >> $config_host_mak 6882fi 6883if test "$virtfs" = "yes" ; then 6884 echo "CONFIG_VIRTFS=y" >> $config_host_mak 6885fi 6886if test "$mpath" = "yes" ; then 6887 echo "CONFIG_MPATH=y" >> $config_host_mak 6888 if test "$mpathpersist_new_api" = "yes"; then 6889 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 6890 fi 6891fi 6892if test "$vhost_scsi" = "yes" ; then 6893 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 6894fi 6895if test "$vhost_net" = "yes" ; then 6896 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 6897fi 6898if test "$vhost_net_user" = "yes" ; then 6899 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 6900fi 6901if test "$vhost_crypto" = "yes" ; then 6902 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 6903fi 6904if test "$vhost_vsock" = "yes" ; then 6905 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 6906fi 6907if test "$vhost_kernel" = "yes" ; then 6908 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 6909fi 6910if test "$vhost_user" = "yes" ; then 6911 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 6912fi 6913if test "$blobs" = "yes" ; then 6914 echo "INSTALL_BLOBS=yes" >> $config_host_mak 6915fi 6916if test "$iovec" = "yes" ; then 6917 echo "CONFIG_IOVEC=y" >> $config_host_mak 6918fi 6919if test "$preadv" = "yes" ; then 6920 echo "CONFIG_PREADV=y" >> $config_host_mak 6921fi 6922if test "$fdt" != "no" ; then 6923 echo "CONFIG_FDT=y" >> $config_host_mak 6924fi 6925if test "$membarrier" = "yes" ; then 6926 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 6927fi 6928if test "$signalfd" = "yes" ; then 6929 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 6930fi 6931if test "$optreset" = "yes" ; then 6932 echo "HAVE_OPTRESET=y" >> $config_host_mak 6933fi 6934if test "$tcg" = "yes"; then 6935 echo "CONFIG_TCG=y" >> $config_host_mak 6936 if test "$tcg_interpreter" = "yes" ; then 6937 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 6938 fi 6939fi 6940if test "$fdatasync" = "yes" ; then 6941 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 6942fi 6943if test "$madvise" = "yes" ; then 6944 echo "CONFIG_MADVISE=y" >> $config_host_mak 6945fi 6946if test "$posix_madvise" = "yes" ; then 6947 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 6948fi 6949if test "$posix_memalign" = "yes" ; then 6950 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 6951fi 6952 6953if test "$spice" = "yes" ; then 6954 echo "CONFIG_SPICE=y" >> $config_host_mak 6955fi 6956 6957if test "$smartcard" = "yes" ; then 6958 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 6959 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 6960 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 6961fi 6962 6963if test "$libusb" = "yes" ; then 6964 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 6965 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 6966 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 6967fi 6968 6969if test "$usb_redir" = "yes" ; then 6970 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 6971 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 6972 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 6973fi 6974 6975if test "$opengl" = "yes" ; then 6976 echo "CONFIG_OPENGL=y" >> $config_host_mak 6977 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 6978 if test "$opengl_dmabuf" = "yes" ; then 6979 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 6980 fi 6981fi 6982 6983if test "$gbm" = "yes" ; then 6984 echo "CONFIG_GBM=y" >> $config_host_mak 6985 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 6986 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 6987fi 6988 6989 6990if test "$malloc_trim" = "yes" ; then 6991 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 6992fi 6993 6994if test "$avx2_opt" = "yes" ; then 6995 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 6996fi 6997 6998if test "$lzo" = "yes" ; then 6999 echo "CONFIG_LZO=y" >> $config_host_mak 7000fi 7001 7002if test "$snappy" = "yes" ; then 7003 echo "CONFIG_SNAPPY=y" >> $config_host_mak 7004fi 7005 7006if test "$bzip2" = "yes" ; then 7007 echo "CONFIG_BZIP2=y" >> $config_host_mak 7008 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 7009fi 7010 7011if test "$lzfse" = "yes" ; then 7012 echo "CONFIG_LZFSE=y" >> $config_host_mak 7013 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak 7014fi 7015 7016if test "$libiscsi" = "yes" ; then 7017 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 7018 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 7019 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 7020fi 7021 7022if test "$libnfs" = "yes" ; then 7023 echo "CONFIG_LIBNFS=m" >> $config_host_mak 7024 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 7025fi 7026 7027if test "$seccomp" = "yes"; then 7028 echo "CONFIG_SECCOMP=y" >> $config_host_mak 7029 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 7030 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 7031fi 7032 7033# XXX: suppress that 7034if [ "$bsd" = "yes" ] ; then 7035 echo "CONFIG_BSD=y" >> $config_host_mak 7036fi 7037 7038if test "$localtime_r" = "yes" ; then 7039 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 7040fi 7041if test "$qom_cast_debug" = "yes" ; then 7042 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 7043fi 7044if test "$rbd" = "yes" ; then 7045 echo "CONFIG_RBD=m" >> $config_host_mak 7046 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 7047 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 7048fi 7049 7050echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 7051if test "$coroutine_pool" = "yes" ; then 7052 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 7053else 7054 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 7055fi 7056 7057if test "$debug_stack_usage" = "yes" ; then 7058 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 7059fi 7060 7061if test "$crypto_afalg" = "yes" ; then 7062 echo "CONFIG_AF_ALG=y" >> $config_host_mak 7063fi 7064 7065if test "$open_by_handle_at" = "yes" ; then 7066 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 7067fi 7068 7069if test "$linux_magic_h" = "yes" ; then 7070 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 7071fi 7072 7073if test "$pragma_diagnostic_available" = "yes" ; then 7074 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 7075fi 7076 7077if test "$valgrind_h" = "yes" ; then 7078 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 7079fi 7080 7081if test "$have_asan_iface_fiber" = "yes" ; then 7082 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 7083fi 7084 7085if test "$has_environ" = "yes" ; then 7086 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 7087fi 7088 7089if test "$cpuid_h" = "yes" ; then 7090 echo "CONFIG_CPUID_H=y" >> $config_host_mak 7091fi 7092 7093if test "$int128" = "yes" ; then 7094 echo "CONFIG_INT128=y" >> $config_host_mak 7095fi 7096 7097if test "$atomic128" = "yes" ; then 7098 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 7099fi 7100 7101if test "$cmpxchg128" = "yes" ; then 7102 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 7103fi 7104 7105if test "$atomic64" = "yes" ; then 7106 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 7107fi 7108 7109if test "$vector16" = "yes" ; then 7110 echo "CONFIG_VECTOR16=y" >> $config_host_mak 7111fi 7112 7113if test "$getauxval" = "yes" ; then 7114 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 7115fi 7116 7117if test "$glusterfs" = "yes" ; then 7118 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 7119 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 7120 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 7121fi 7122 7123if test "$glusterfs_xlator_opt" = "yes" ; then 7124 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 7125fi 7126 7127if test "$glusterfs_discard" = "yes" ; then 7128 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 7129fi 7130 7131if test "$glusterfs_fallocate" = "yes" ; then 7132 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 7133fi 7134 7135if test "$glusterfs_zerofill" = "yes" ; then 7136 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 7137fi 7138 7139if test "$glusterfs_ftruncate_has_stat" = "yes" ; then 7140 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak 7141fi 7142 7143if test "$glusterfs_iocb_has_stat" = "yes" ; then 7144 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak 7145fi 7146 7147if test "$libssh2" = "yes" ; then 7148 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 7149 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 7150 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 7151fi 7152 7153if test "$live_block_migration" = "yes" ; then 7154 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 7155fi 7156 7157if test "$tpm" = "yes"; then 7158 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 7159fi 7160 7161echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 7162if have_backend "nop"; then 7163 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 7164fi 7165if have_backend "simple"; then 7166 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 7167 # Set the appropriate trace file. 7168 trace_file="\"$trace_file-\" FMT_pid" 7169fi 7170if have_backend "log"; then 7171 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 7172fi 7173if have_backend "ust"; then 7174 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 7175fi 7176if have_backend "dtrace"; then 7177 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 7178 if test "$trace_backend_stap" = "yes" ; then 7179 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 7180 fi 7181fi 7182if have_backend "ftrace"; then 7183 if test "$linux" = "yes" ; then 7184 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 7185 else 7186 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 7187 fi 7188fi 7189if have_backend "syslog"; then 7190 if test "$posix_syslog" = "yes" ; then 7191 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 7192 else 7193 feature_not_found "syslog(trace backend)" "syslog not available" 7194 fi 7195fi 7196echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 7197 7198if test "$rdma" = "yes" ; then 7199 echo "CONFIG_RDMA=y" >> $config_host_mak 7200 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 7201fi 7202 7203if test "$pvrdma" = "yes" ; then 7204 echo "CONFIG_PVRDMA=y" >> $config_host_mak 7205fi 7206 7207if test "$have_rtnetlink" = "yes" ; then 7208 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 7209fi 7210 7211if test "$libxml2" = "yes" ; then 7212 echo "CONFIG_LIBXML2=y" >> $config_host_mak 7213 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 7214 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 7215fi 7216 7217if test "$replication" = "yes" ; then 7218 echo "CONFIG_REPLICATION=y" >> $config_host_mak 7219fi 7220 7221if test "$have_af_vsock" = "yes" ; then 7222 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 7223fi 7224 7225if test "$have_sysmacros" = "yes" ; then 7226 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 7227fi 7228 7229if test "$have_static_assert" = "yes" ; then 7230 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 7231fi 7232 7233if test "$have_utmpx" = "yes" ; then 7234 echo "HAVE_UTMPX=y" >> $config_host_mak 7235fi 7236if test "$have_getrandom" = "yes" ; then 7237 echo "CONFIG_GETRANDOM=y" >> $config_host_mak 7238fi 7239if test "$ivshmem" = "yes" ; then 7240 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 7241fi 7242if test "$capstone" != "no" ; then 7243 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 7244fi 7245if test "$debug_mutex" = "yes" ; then 7246 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 7247fi 7248 7249# Hold two types of flag: 7250# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 7251# a thread we have a handle to 7252# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 7253# platform 7254if test "$pthread_setname_np_w_tid" = "yes" ; then 7255 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7256 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 7257elif test "$pthread_setname_np_wo_tid" = "yes" ; then 7258 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7259 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 7260fi 7261 7262if test "$vxhs" = "yes" ; then 7263 echo "CONFIG_VXHS=y" >> $config_host_mak 7264 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 7265fi 7266 7267if test "$libpmem" = "yes" ; then 7268 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 7269fi 7270 7271if test "$bochs" = "yes" ; then 7272 echo "CONFIG_BOCHS=y" >> $config_host_mak 7273fi 7274if test "$cloop" = "yes" ; then 7275 echo "CONFIG_CLOOP=y" >> $config_host_mak 7276fi 7277if test "$dmg" = "yes" ; then 7278 echo "CONFIG_DMG=y" >> $config_host_mak 7279fi 7280if test "$qcow1" = "yes" ; then 7281 echo "CONFIG_QCOW1=y" >> $config_host_mak 7282fi 7283if test "$vdi" = "yes" ; then 7284 echo "CONFIG_VDI=y" >> $config_host_mak 7285fi 7286if test "$vvfat" = "yes" ; then 7287 echo "CONFIG_VVFAT=y" >> $config_host_mak 7288fi 7289if test "$qed" = "yes" ; then 7290 echo "CONFIG_QED=y" >> $config_host_mak 7291fi 7292if test "$parallels" = "yes" ; then 7293 echo "CONFIG_PARALLELS=y" >> $config_host_mak 7294fi 7295if test "$sheepdog" = "yes" ; then 7296 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 7297fi 7298 7299if test "$tcg_interpreter" = "yes"; then 7300 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 7301elif test "$ARCH" = "sparc64" ; then 7302 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 7303elif test "$ARCH" = "s390x" ; then 7304 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 7305elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then 7306 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 7307elif test "$ARCH" = "ppc64" ; then 7308 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 7309elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then 7310 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES" 7311else 7312 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 7313fi 7314QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES" 7315 7316echo "TOOLS=$tools" >> $config_host_mak 7317echo "ROMS=$roms" >> $config_host_mak 7318echo "MAKE=$make" >> $config_host_mak 7319echo "INSTALL=$install" >> $config_host_mak 7320echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 7321echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 7322echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 7323echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 7324echo "PYTHON=$python" >> $config_host_mak 7325echo "PYTHON_VERSION=$python_version" >> $config_host_mak 7326echo "CC=$cc" >> $config_host_mak 7327if $iasl -h > /dev/null 2>&1; then 7328 echo "IASL=$iasl" >> $config_host_mak 7329fi 7330echo "HOST_CC=$host_cc" >> $config_host_mak 7331echo "CXX=$cxx" >> $config_host_mak 7332echo "OBJCC=$objcc" >> $config_host_mak 7333echo "AR=$ar" >> $config_host_mak 7334echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 7335echo "AS=$as" >> $config_host_mak 7336echo "CCAS=$ccas" >> $config_host_mak 7337echo "CPP=$cpp" >> $config_host_mak 7338echo "OBJCOPY=$objcopy" >> $config_host_mak 7339echo "LD=$ld" >> $config_host_mak 7340echo "RANLIB=$ranlib" >> $config_host_mak 7341echo "NM=$nm" >> $config_host_mak 7342echo "WINDRES=$windres" >> $config_host_mak 7343echo "CFLAGS=$CFLAGS" >> $config_host_mak 7344echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 7345echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 7346echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 7347echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 7348if test "$sparse" = "yes" ; then 7349 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 7350 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 7351 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 7352 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 7353 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 7354fi 7355if test "$cross_prefix" != ""; then 7356 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 7357else 7358 echo "AUTOCONF_HOST := " >> $config_host_mak 7359fi 7360echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 7361echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 7362echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 7363echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 7364echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 7365echo "LIBS+=$LIBS" >> $config_host_mak 7366echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 7367echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 7368echo "EXESUF=$EXESUF" >> $config_host_mak 7369echo "DSOSUF=$DSOSUF" >> $config_host_mak 7370echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 7371echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 7372echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 7373echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 7374echo "POD2MAN=$POD2MAN" >> $config_host_mak 7375if test "$gcov" = "yes" ; then 7376 echo "CONFIG_GCOV=y" >> $config_host_mak 7377 echo "GCOV=$gcov_tool" >> $config_host_mak 7378fi 7379 7380if test "$docker" != "no"; then 7381 echo "HAVE_USER_DOCKER=y" >> $config_host_mak 7382fi 7383 7384if test "$libudev" != "no"; then 7385 echo "CONFIG_LIBUDEV=y" >> $config_host_mak 7386 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak 7387fi 7388 7389# use included Linux headers 7390if test "$linux" = "yes" ; then 7391 mkdir -p linux-headers 7392 case "$cpu" in 7393 i386|x86_64|x32) 7394 linux_arch=x86 7395 ;; 7396 ppc|ppc64|ppc64le) 7397 linux_arch=powerpc 7398 ;; 7399 s390x) 7400 linux_arch=s390 7401 ;; 7402 aarch64) 7403 linux_arch=arm64 7404 ;; 7405 mips64) 7406 linux_arch=mips 7407 ;; 7408 *) 7409 # For most CPUs the kernel architecture name and QEMU CPU name match. 7410 linux_arch="$cpu" 7411 ;; 7412 esac 7413 # For non-KVM architectures we will not have asm headers 7414 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 7415 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 7416 fi 7417fi 7418 7419for target in $target_list; do 7420target_dir="$target" 7421config_target_mak=$target_dir/config-target.mak 7422target_name=$(echo $target | cut -d '-' -f 1) 7423target_bigendian="no" 7424 7425case "$target_name" in 7426 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 7427 target_bigendian=yes 7428 ;; 7429esac 7430target_softmmu="no" 7431target_user_only="no" 7432target_linux_user="no" 7433target_bsd_user="no" 7434case "$target" in 7435 ${target_name}-softmmu) 7436 target_softmmu="yes" 7437 ;; 7438 ${target_name}-linux-user) 7439 target_user_only="yes" 7440 target_linux_user="yes" 7441 ;; 7442 ${target_name}-bsd-user) 7443 target_user_only="yes" 7444 target_bsd_user="yes" 7445 ;; 7446 *) 7447 error_exit "Target '$target' not recognised" 7448 exit 1 7449 ;; 7450esac 7451 7452target_compiler="" 7453target_compiler_static="" 7454target_compiler_cflags="" 7455 7456mkdir -p $target_dir 7457echo "# Automatically generated by configure - do not modify" > $config_target_mak 7458 7459bflt="no" 7460mttcg="no" 7461interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 7462gdb_xml_files="" 7463 7464TARGET_ARCH="$target_name" 7465TARGET_BASE_ARCH="" 7466TARGET_ABI_DIR="" 7467 7468case "$target_name" in 7469 i386) 7470 mttcg="yes" 7471 gdb_xml_files="i386-32bit.xml" 7472 target_compiler=$cross_cc_i386 7473 target_compiler_cflags=$cross_cc_ccflags_i386 7474 ;; 7475 x86_64) 7476 TARGET_BASE_ARCH=i386 7477 mttcg="yes" 7478 gdb_xml_files="i386-64bit.xml" 7479 target_compiler=$cross_cc_x86_64 7480 ;; 7481 alpha) 7482 mttcg="yes" 7483 target_compiler=$cross_cc_alpha 7484 ;; 7485 arm|armeb) 7486 TARGET_ARCH=arm 7487 bflt="yes" 7488 mttcg="yes" 7489 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7490 target_compiler=$cross_cc_arm 7491 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7492 ;; 7493 aarch64|aarch64_be) 7494 TARGET_ARCH=aarch64 7495 TARGET_BASE_ARCH=arm 7496 bflt="yes" 7497 mttcg="yes" 7498 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7499 target_compiler=$cross_cc_aarch64 7500 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7501 ;; 7502 cris) 7503 target_compiler=$cross_cc_cris 7504 ;; 7505 hppa) 7506 mttcg="yes" 7507 target_compiler=$cross_cc_hppa 7508 ;; 7509 lm32) 7510 target_compiler=$cross_cc_lm32 7511 ;; 7512 m68k) 7513 bflt="yes" 7514 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml" 7515 target_compiler=$cross_cc_m68k 7516 ;; 7517 microblaze|microblazeel) 7518 TARGET_ARCH=microblaze 7519 bflt="yes" 7520 echo "TARGET_ABI32=y" >> $config_target_mak 7521 target_compiler=$cross_cc_microblaze 7522 ;; 7523 mips|mipsel) 7524 mttcg="yes" 7525 TARGET_ARCH=mips 7526 target_compiler=$cross_cc_mips 7527 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 7528 ;; 7529 mipsn32|mipsn32el) 7530 mttcg="yes" 7531 TARGET_ARCH=mips64 7532 TARGET_BASE_ARCH=mips 7533 target_compiler=$cross_cc_mipsn32 7534 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 7535 echo "TARGET_ABI32=y" >> $config_target_mak 7536 ;; 7537 mips64|mips64el) 7538 mttcg="yes" 7539 TARGET_ARCH=mips64 7540 TARGET_BASE_ARCH=mips 7541 target_compiler=$cross_cc_mips64 7542 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 7543 ;; 7544 moxie) 7545 target_compiler=$cross_cc_moxie 7546 ;; 7547 nios2) 7548 target_compiler=$cross_cc_nios2 7549 ;; 7550 or1k) 7551 target_compiler=$cross_cc_or1k 7552 TARGET_ARCH=openrisc 7553 TARGET_BASE_ARCH=openrisc 7554 ;; 7555 ppc) 7556 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 7557 target_compiler=$cross_cc_ppc 7558 target_compiler_cflags="$cross_cc_cflags_ppc" 7559 ;; 7560 ppc64) 7561 TARGET_BASE_ARCH=ppc 7562 TARGET_ABI_DIR=ppc 7563 mttcg=yes 7564 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7565 target_compiler=$cross_cc_ppc64 7566 target_compiler_cflags="$cross_cc_cflags_ppc64" 7567 ;; 7568 ppc64le) 7569 TARGET_ARCH=ppc64 7570 TARGET_BASE_ARCH=ppc 7571 TARGET_ABI_DIR=ppc 7572 mttcg=yes 7573 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7574 target_compiler=$cross_cc_ppc64le 7575 ;; 7576 ppc64abi32) 7577 TARGET_ARCH=ppc64 7578 TARGET_BASE_ARCH=ppc 7579 TARGET_ABI_DIR=ppc 7580 echo "TARGET_ABI32=y" >> $config_target_mak 7581 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7582 target_compiler=$cross_cc_ppc64abi32 7583 ;; 7584 riscv32) 7585 TARGET_BASE_ARCH=riscv 7586 TARGET_ABI_DIR=riscv 7587 mttcg=yes 7588 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-32bit-csr.xml" 7589 target_compiler=$cross_cc_riscv32 7590 ;; 7591 riscv64) 7592 TARGET_BASE_ARCH=riscv 7593 TARGET_ABI_DIR=riscv 7594 mttcg=yes 7595 gdb_xml_files="riscv-64bit-cpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml" 7596 target_compiler=$cross_cc_riscv64 7597 ;; 7598 sh4|sh4eb) 7599 TARGET_ARCH=sh4 7600 bflt="yes" 7601 target_compiler=$cross_cc_sh4 7602 ;; 7603 sparc) 7604 target_compiler=$cross_cc_sparc 7605 ;; 7606 sparc64) 7607 TARGET_BASE_ARCH=sparc 7608 target_compiler=$cross_cc_sparc64 7609 ;; 7610 sparc32plus) 7611 TARGET_ARCH=sparc64 7612 TARGET_BASE_ARCH=sparc 7613 TARGET_ABI_DIR=sparc 7614 target_compiler=$cross_cc_sparc32plus 7615 echo "TARGET_ABI32=y" >> $config_target_mak 7616 ;; 7617 s390x) 7618 mttcg=yes 7619 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 7620 target_compiler=$cross_cc_s390x 7621 ;; 7622 tilegx) 7623 target_compiler=$cross_cc_tilegx 7624 ;; 7625 tricore) 7626 target_compiler=$cross_cc_tricore 7627 ;; 7628 unicore32) 7629 target_compiler=$cross_cc_unicore32 7630 ;; 7631 xtensa|xtensaeb) 7632 TARGET_ARCH=xtensa 7633 bflt="yes" 7634 mttcg="yes" 7635 target_compiler=$cross_cc_xtensa 7636 ;; 7637 *) 7638 error_exit "Unsupported target CPU" 7639 ;; 7640esac 7641# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 7642if [ "$TARGET_BASE_ARCH" = "" ]; then 7643 TARGET_BASE_ARCH=$TARGET_ARCH 7644fi 7645 7646# Do we have a cross compiler for this target? 7647if has $target_compiler; then 7648 7649 write_c_skeleton 7650 7651 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then 7652 # For host systems we might get away with building without -static 7653 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then 7654 target_compiler="" 7655 else 7656 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7657 target_compiler_static="n" 7658 fi 7659 else 7660 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7661 target_compiler_static="y" 7662 fi 7663else 7664 target_compiler="" 7665fi 7666 7667symlink "$source_path/Makefile.target" "$target_dir/Makefile" 7668 7669upper() { 7670 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 7671} 7672 7673target_arch_name="$(upper $TARGET_ARCH)" 7674echo "TARGET_$target_arch_name=y" >> $config_target_mak 7675echo "TARGET_NAME=$target_name" >> $config_target_mak 7676echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 7677if [ "$TARGET_ABI_DIR" = "" ]; then 7678 TARGET_ABI_DIR=$TARGET_ARCH 7679fi 7680echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 7681if [ "$HOST_VARIANT_DIR" != "" ]; then 7682 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 7683fi 7684 7685if supported_xen_target $target; then 7686 echo "CONFIG_XEN=y" >> $config_target_mak 7687 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak 7688 if test "$xen_pci_passthrough" = yes; then 7689 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 7690 fi 7691else 7692 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak 7693fi 7694if supported_kvm_target $target; then 7695 echo "CONFIG_KVM=y" >> $config_target_mak 7696 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak 7697else 7698 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak 7699fi 7700if supported_hax_target $target; then 7701 echo "CONFIG_HAX=y" >> $config_target_mak 7702fi 7703if supported_hvf_target $target; then 7704 echo "CONFIG_HVF=y" >> $config_target_mak 7705fi 7706if supported_whpx_target $target; then 7707 echo "CONFIG_WHPX=y" >> $config_target_mak 7708fi 7709if test "$target_bigendian" = "yes" ; then 7710 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 7711fi 7712if test "$target_softmmu" = "yes" ; then 7713 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 7714 if test "$mttcg" = "yes" ; then 7715 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 7716 fi 7717fi 7718if test "$target_user_only" = "yes" ; then 7719 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 7720 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 7721fi 7722if test "$target_linux_user" = "yes" ; then 7723 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 7724fi 7725list="" 7726if test ! -z "$gdb_xml_files" ; then 7727 for x in $gdb_xml_files; do 7728 list="$list $source_path/gdb-xml/$x" 7729 done 7730 echo "TARGET_XML_FILES=$list" >> $config_target_mak 7731fi 7732 7733if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then 7734 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 7735fi 7736if test "$target_bsd_user" = "yes" ; then 7737 echo "CONFIG_BSD_USER=y" >> $config_target_mak 7738fi 7739 7740if test -n "$target_compiler"; then 7741 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak 7742 7743 if test -n "$target_compiler_static"; then 7744 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak 7745 fi 7746 7747 if test -n "$target_compiler_cflags"; then 7748 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak 7749 fi 7750fi 7751 7752 7753# generate QEMU_CFLAGS/LDFLAGS for targets 7754 7755cflags="" 7756ldflags="" 7757 7758disas_config() { 7759 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 7760 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 7761} 7762 7763for i in $ARCH $TARGET_BASE_ARCH ; do 7764 case "$i" in 7765 alpha) 7766 disas_config "ALPHA" 7767 ;; 7768 aarch64) 7769 if test -n "${cxx}"; then 7770 disas_config "ARM_A64" 7771 fi 7772 ;; 7773 arm) 7774 disas_config "ARM" 7775 if test -n "${cxx}"; then 7776 disas_config "ARM_A64" 7777 fi 7778 ;; 7779 cris) 7780 disas_config "CRIS" 7781 ;; 7782 hppa) 7783 disas_config "HPPA" 7784 ;; 7785 i386|x86_64|x32) 7786 disas_config "I386" 7787 ;; 7788 lm32) 7789 disas_config "LM32" 7790 ;; 7791 m68k) 7792 disas_config "M68K" 7793 ;; 7794 microblaze*) 7795 disas_config "MICROBLAZE" 7796 ;; 7797 mips*) 7798 disas_config "MIPS" 7799 if test -n "${cxx}"; then 7800 disas_config "NANOMIPS" 7801 fi 7802 ;; 7803 moxie*) 7804 disas_config "MOXIE" 7805 ;; 7806 nios2) 7807 disas_config "NIOS2" 7808 ;; 7809 or1k) 7810 disas_config "OPENRISC" 7811 ;; 7812 ppc*) 7813 disas_config "PPC" 7814 ;; 7815 riscv*) 7816 disas_config "RISCV" 7817 ;; 7818 s390*) 7819 disas_config "S390" 7820 ;; 7821 sh4) 7822 disas_config "SH4" 7823 ;; 7824 sparc*) 7825 disas_config "SPARC" 7826 ;; 7827 xtensa*) 7828 disas_config "XTENSA" 7829 ;; 7830 esac 7831done 7832if test "$tcg_interpreter" = "yes" ; then 7833 disas_config "TCI" 7834fi 7835 7836case "$ARCH" in 7837alpha) 7838 # Ensure there's only a single GP 7839 cflags="-msmall-data $cflags" 7840;; 7841esac 7842 7843if test "$gprof" = "yes" ; then 7844 echo "TARGET_GPROF=y" >> $config_target_mak 7845 if test "$target_linux_user" = "yes" ; then 7846 cflags="-p $cflags" 7847 ldflags="-p $ldflags" 7848 fi 7849 if test "$target_softmmu" = "yes" ; then 7850 ldflags="-p $ldflags" 7851 echo "GPROF_CFLAGS=-p" >> $config_target_mak 7852 fi 7853fi 7854 7855if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then 7856 ldflags="$ldflags $textseg_ldflags" 7857fi 7858 7859# Newer kernels on s390 check for an S390_PGSTE program header and 7860# enable the pgste page table extensions in that case. This makes 7861# the vm.allocate_pgste sysctl unnecessary. We enable this program 7862# header if 7863# - we build on s390x 7864# - we build the system emulation for s390x (qemu-system-s390x) 7865# - KVM is enabled 7866# - the linker supports --s390-pgste 7867if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \ 7868 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then 7869 if ld_has --s390-pgste ; then 7870 ldflags="-Wl,--s390-pgste $ldflags" 7871 fi 7872fi 7873 7874echo "LDFLAGS+=$ldflags" >> $config_target_mak 7875echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 7876 7877done # for target in $targets 7878 7879echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak 7880echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak 7881 7882if test -n "$enabled_cross_compilers"; then 7883 echo 7884 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers" 7885fi 7886 7887if [ "$fdt" = "git" ]; then 7888 echo "config-host.h: subdir-dtc" >> $config_host_mak 7889fi 7890if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 7891 echo "config-host.h: subdir-capstone" >> $config_host_mak 7892fi 7893if test -n "$LIBCAPSTONE"; then 7894 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 7895fi 7896 7897if test "$numa" = "yes"; then 7898 echo "CONFIG_NUMA=y" >> $config_host_mak 7899fi 7900 7901if test "$ccache_cpp2" = "yes"; then 7902 echo "export CCACHE_CPP2=y" >> $config_host_mak 7903fi 7904 7905# If we're using a separate build tree, set it up now. 7906# DIRS are directories which we simply mkdir in the build tree; 7907# LINKS are things to symlink back into the source tree 7908# (these can be both files and directories). 7909# Caution: do not add files or directories here using wildcards. This 7910# will result in problems later if a new file matching the wildcard is 7911# added to the source tree -- nothing will cause configure to be rerun 7912# so the build tree will be missing the link back to the new file, and 7913# tests might fail. Prefer to keep the relevant files in their own 7914# directory and symlink the directory instead. 7915DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm" 7916DIRS="$DIRS tests/fp tests/qgraph" 7917DIRS="$DIRS docs docs/interop fsdev scsi" 7918DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 7919DIRS="$DIRS roms/seabios roms/vgabios" 7920LINKS="Makefile tests/tcg/Makefile" 7921LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 7922LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 7923LINKS="$LINKS tests/fp/Makefile" 7924LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps" 7925LINKS="$LINKS pc-bios/spapr-rtas/Makefile" 7926LINKS="$LINKS pc-bios/s390-ccw/Makefile" 7927LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile" 7928LINKS="$LINKS pc-bios/qemu-icon.bmp" 7929LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 7930LINKS="$LINKS tests/acceptance tests/data" 7931LINKS="$LINKS tests/qemu-iotests/check" 7932LINKS="$LINKS python" 7933for bios_file in \ 7934 $source_path/pc-bios/*.bin \ 7935 $source_path/pc-bios/*.lid \ 7936 $source_path/pc-bios/*.rom \ 7937 $source_path/pc-bios/*.dtb \ 7938 $source_path/pc-bios/*.img \ 7939 $source_path/pc-bios/openbios-* \ 7940 $source_path/pc-bios/u-boot.* \ 7941 $source_path/pc-bios/edk2-*.fd.bz2 \ 7942 $source_path/pc-bios/palcode-* 7943do 7944 LINKS="$LINKS pc-bios/$(basename $bios_file)" 7945done 7946mkdir -p $DIRS 7947for f in $LINKS ; do 7948 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 7949 symlink "$source_path/$f" "$f" 7950 fi 7951done 7952 7953# temporary config to build submodules 7954for rom in seabios vgabios ; do 7955 config_mak=roms/$rom/config.mak 7956 echo "# Automatically generated by configure - do not modify" > $config_mak 7957 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 7958 echo "AS=$as" >> $config_mak 7959 echo "CCAS=$ccas" >> $config_mak 7960 echo "CC=$cc" >> $config_mak 7961 echo "BCC=bcc" >> $config_mak 7962 echo "CPP=$cpp" >> $config_mak 7963 echo "OBJCOPY=objcopy" >> $config_mak 7964 echo "IASL=$iasl" >> $config_mak 7965 echo "LD=$ld" >> $config_mak 7966 echo "RANLIB=$ranlib" >> $config_mak 7967done 7968 7969# set up qemu-iotests in this build directory 7970iotests_common_env="tests/qemu-iotests/common.env" 7971 7972echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 7973echo >> "$iotests_common_env" 7974echo "export PYTHON='$python'" >> "$iotests_common_env" 7975 7976# Save the configure command line for later reuse. 7977cat <<EOD >config.status 7978#!/bin/sh 7979# Generated by configure. 7980# Run this file to recreate the current configuration. 7981# Compiler output produced by configure, useful for debugging 7982# configure, is in config.log if it exists. 7983EOD 7984 7985preserve_env() { 7986 envname=$1 7987 7988 eval envval=\$$envname 7989 7990 if test -n "$envval" 7991 then 7992 echo "$envname='$envval'" >> config.status 7993 echo "export $envname" >> config.status 7994 else 7995 echo "unset $envname" >> config.status 7996 fi 7997} 7998 7999# Preserve various env variables that influence what 8000# features/build target configure will detect 8001preserve_env AR 8002preserve_env AS 8003preserve_env CC 8004preserve_env CPP 8005preserve_env CXX 8006preserve_env INSTALL 8007preserve_env LD 8008preserve_env LD_LIBRARY_PATH 8009preserve_env LIBTOOL 8010preserve_env MAKE 8011preserve_env NM 8012preserve_env OBJCOPY 8013preserve_env PATH 8014preserve_env PKG_CONFIG 8015preserve_env PKG_CONFIG_LIBDIR 8016preserve_env PKG_CONFIG_PATH 8017preserve_env PYTHON 8018preserve_env SDL_CONFIG 8019preserve_env SDL2_CONFIG 8020preserve_env SMBD 8021preserve_env STRIP 8022preserve_env WINDRES 8023 8024printf "exec" >>config.status 8025printf " '%s'" "$0" "$@" >>config.status 8026echo ' "$@"' >>config.status 8027chmod +x config.status 8028 8029rm -r "$TMPDIR1" 8030