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