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