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