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