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