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