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 5157cmpxchg128=no 5158if test "$int128" = yes -a "$atomic128" = no; then 5159 cat > $TMPC << EOF 5160int main(void) 5161{ 5162 unsigned __int128 x = 0, y = 0; 5163 __sync_val_compare_and_swap_16(&x, y, x); 5164 return 0; 5165} 5166EOF 5167 if compile_prog "" "" ; then 5168 cmpxchg128=yes 5169 fi 5170fi 5171 5172######################################### 5173# See if 64-bit atomic operations are supported. 5174# Note that without __atomic builtins, we can only 5175# assume atomic loads/stores max at pointer size. 5176 5177cat > $TMPC << EOF 5178#include <stdint.h> 5179int main(void) 5180{ 5181 uint64_t x = 0, y = 0; 5182#ifdef __ATOMIC_RELAXED 5183 y = __atomic_load_8(&x, 0); 5184 __atomic_store_8(&x, y, 0); 5185 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 5186 __atomic_exchange_8(&x, y, 0); 5187 __atomic_fetch_add_8(&x, y, 0); 5188#else 5189 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5190 __sync_lock_test_and_set(&x, y); 5191 __sync_val_compare_and_swap(&x, y, 0); 5192 __sync_fetch_and_add(&x, y); 5193#endif 5194 return 0; 5195} 5196EOF 5197if compile_prog "" "" ; then 5198 atomic64=yes 5199fi 5200 5201######################################## 5202# See if 16-byte vector operations are supported. 5203# Even without a vector unit the compiler may expand these. 5204# There is a bug in old GCC for PPC that crashes here. 5205# Unfortunately it's the system compiler for Centos 7. 5206 5207cat > $TMPC << EOF 5208typedef unsigned char U1 __attribute__((vector_size(16))); 5209typedef unsigned short U2 __attribute__((vector_size(16))); 5210typedef unsigned int U4 __attribute__((vector_size(16))); 5211typedef unsigned long long U8 __attribute__((vector_size(16))); 5212typedef signed char S1 __attribute__((vector_size(16))); 5213typedef signed short S2 __attribute__((vector_size(16))); 5214typedef signed int S4 __attribute__((vector_size(16))); 5215typedef signed long long S8 __attribute__((vector_size(16))); 5216static U1 a1, b1; 5217static U2 a2, b2; 5218static U4 a4, b4; 5219static U8 a8, b8; 5220static S1 c1; 5221static S2 c2; 5222static S4 c4; 5223static S8 c8; 5224static int i; 5225void helper(void *d, void *a, int shift, int i); 5226void helper(void *d, void *a, int shift, int i) 5227{ 5228 *(U1 *)(d + i) = *(U1 *)(a + i) << shift; 5229 *(U2 *)(d + i) = *(U2 *)(a + i) << shift; 5230 *(U4 *)(d + i) = *(U4 *)(a + i) << shift; 5231 *(U8 *)(d + i) = *(U8 *)(a + i) << shift; 5232} 5233int main(void) 5234{ 5235 a1 += b1; a2 += b2; a4 += b4; a8 += b8; 5236 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8; 5237 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8; 5238 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8; 5239 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8; 5240 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8; 5241 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i; 5242 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i; 5243 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i; 5244 return 0; 5245} 5246EOF 5247 5248vector16=no 5249if compile_prog "" "" ; then 5250 vector16=yes 5251fi 5252 5253######################################## 5254# check if getauxval is available. 5255 5256getauxval=no 5257cat > $TMPC << EOF 5258#include <sys/auxv.h> 5259int main(void) { 5260 return getauxval(AT_HWCAP) == 0; 5261} 5262EOF 5263if compile_prog "" "" ; then 5264 getauxval=yes 5265fi 5266 5267######################################## 5268# check if ccache is interfering with 5269# semantic analysis of macros 5270 5271unset CCACHE_CPP2 5272ccache_cpp2=no 5273cat > $TMPC << EOF 5274static const int Z = 1; 5275#define fn() ({ Z; }) 5276#define TAUT(X) ((X) == Z) 5277#define PAREN(X, Y) (X == Y) 5278#define ID(X) (X) 5279int main(int argc, char *argv[]) 5280{ 5281 int x = 0, y = 0; 5282 x = ID(x); 5283 x = fn(); 5284 fn(); 5285 if (PAREN(x, y)) return 0; 5286 if (TAUT(Z)) return 0; 5287 return 0; 5288} 5289EOF 5290 5291if ! compile_object "-Werror"; then 5292 ccache_cpp2=yes 5293fi 5294 5295################################################# 5296# clang does not support glibc + FORTIFY_SOURCE. 5297 5298if test "$fortify_source" != "no"; then 5299 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5300 fortify_source="no"; 5301 elif test -n "$cxx" && has $cxx && 5302 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5303 fortify_source="no"; 5304 else 5305 fortify_source="yes" 5306 fi 5307fi 5308 5309############################################### 5310# Check if copy_file_range is provided by glibc 5311have_copy_file_range=no 5312cat > $TMPC << EOF 5313#include <unistd.h> 5314int main(void) { 5315 copy_file_range(0, NULL, 0, NULL, 0, 0); 5316 return 0; 5317} 5318EOF 5319if compile_prog "" "" ; then 5320 have_copy_file_range=yes 5321fi 5322 5323########################################## 5324# check if struct fsxattr is available via linux/fs.h 5325 5326have_fsxattr=no 5327cat > $TMPC << EOF 5328#include <linux/fs.h> 5329struct fsxattr foo; 5330int main(void) { 5331 return 0; 5332} 5333EOF 5334if compile_prog "" "" ; then 5335 have_fsxattr=yes 5336fi 5337 5338########################################## 5339# check for usable membarrier system call 5340if test "$membarrier" = "yes"; then 5341 have_membarrier=no 5342 if test "$mingw32" = "yes" ; then 5343 have_membarrier=yes 5344 elif test "$linux" = "yes" ; then 5345 cat > $TMPC << EOF 5346 #include <linux/membarrier.h> 5347 #include <sys/syscall.h> 5348 #include <unistd.h> 5349 #include <stdlib.h> 5350 int main(void) { 5351 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5352 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5353 exit(0); 5354 } 5355EOF 5356 if compile_prog "" "" ; then 5357 have_membarrier=yes 5358 fi 5359 fi 5360 if test "$have_membarrier" = "no"; then 5361 feature_not_found "membarrier" "membarrier system call not available" 5362 fi 5363else 5364 # Do not enable it by default even for Mingw32, because it doesn't 5365 # work on Wine. 5366 membarrier=no 5367fi 5368 5369########################################## 5370# check if rtnetlink.h exists and is useful 5371have_rtnetlink=no 5372cat > $TMPC << EOF 5373#include <linux/rtnetlink.h> 5374int main(void) { 5375 return IFLA_PROTO_DOWN; 5376} 5377EOF 5378if compile_prog "" "" ; then 5379 have_rtnetlink=yes 5380fi 5381 5382########################################## 5383# check for usable AF_VSOCK environment 5384have_af_vsock=no 5385cat > $TMPC << EOF 5386#include <errno.h> 5387#include <sys/types.h> 5388#include <sys/socket.h> 5389#if !defined(AF_VSOCK) 5390# error missing AF_VSOCK flag 5391#endif 5392#include <linux/vm_sockets.h> 5393int main(void) { 5394 int sock, ret; 5395 struct sockaddr_vm svm; 5396 socklen_t len = sizeof(svm); 5397 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5398 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5399 if ((ret == -1) && (errno == ENOTCONN)) { 5400 return 0; 5401 } 5402 return -1; 5403} 5404EOF 5405if compile_prog "" "" ; then 5406 have_af_vsock=yes 5407fi 5408 5409########################################## 5410# check for usable AF_ALG environment 5411hava_afalg=no 5412cat > $TMPC << EOF 5413#include <errno.h> 5414#include <sys/types.h> 5415#include <sys/socket.h> 5416#include <linux/if_alg.h> 5417int main(void) { 5418 int sock; 5419 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 5420 return sock; 5421} 5422EOF 5423if compile_prog "" "" ; then 5424 have_afalg=yes 5425fi 5426if test "$crypto_afalg" = "yes" 5427then 5428 if test "$have_afalg" != "yes" 5429 then 5430 error_exit "AF_ALG requested but could not be detected" 5431 fi 5432fi 5433 5434 5435################################################# 5436# Check to see if we have the Hypervisor framework 5437if [ "$darwin" = "yes" ] ; then 5438 cat > $TMPC << EOF 5439#include <Hypervisor/hv.h> 5440int main() { return 0;} 5441EOF 5442 if ! compile_object ""; then 5443 hvf='no' 5444 else 5445 hvf='yes' 5446 LDFLAGS="-framework Hypervisor $LDFLAGS" 5447 fi 5448fi 5449 5450################################################# 5451# Sparc implicitly links with --relax, which is 5452# incompatible with -r, so --no-relax should be 5453# given. It does no harm to give it on other 5454# platforms too. 5455 5456# Note: the prototype is needed since QEMU_CFLAGS 5457# contains -Wmissing-prototypes 5458cat > $TMPC << EOF 5459extern int foo(void); 5460int foo(void) { return 0; } 5461EOF 5462if ! compile_object ""; then 5463 error_exit "Failed to compile object file for LD_REL_FLAGS test" 5464fi 5465for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 5466 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 5467 LD_REL_FLAGS=$i 5468 break 5469 fi 5470done 5471if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 5472 feature_not_found "modules" "Cannot find how to build relocatable objects" 5473fi 5474 5475########################################## 5476# check for sysmacros.h 5477 5478have_sysmacros=no 5479cat > $TMPC << EOF 5480#include <sys/sysmacros.h> 5481int main(void) { 5482 return makedev(0, 0); 5483} 5484EOF 5485if compile_prog "" "" ; then 5486 have_sysmacros=yes 5487fi 5488 5489########################################## 5490# Veritas HyperScale block driver VxHS 5491# Check if libvxhs is installed 5492 5493if test "$vxhs" != "no" ; then 5494 cat > $TMPC <<EOF 5495#include <stdint.h> 5496#include <qnio/qnio_api.h> 5497 5498void *vxhs_callback; 5499 5500int main(void) { 5501 iio_init(QNIO_VERSION, vxhs_callback); 5502 return 0; 5503} 5504EOF 5505 vxhs_libs="-lvxhs -lssl" 5506 if compile_prog "" "$vxhs_libs" ; then 5507 vxhs=yes 5508 else 5509 if test "$vxhs" = "yes" ; then 5510 feature_not_found "vxhs block device" "Install libvxhs See github" 5511 fi 5512 vxhs=no 5513 fi 5514fi 5515 5516########################################## 5517# check for _Static_assert() 5518 5519have_static_assert=no 5520cat > $TMPC << EOF 5521_Static_assert(1, "success"); 5522int main(void) { 5523 return 0; 5524} 5525EOF 5526if compile_prog "" "" ; then 5527 have_static_assert=yes 5528fi 5529 5530########################################## 5531# check for utmpx.h, it is missing e.g. on OpenBSD 5532 5533have_utmpx=no 5534cat > $TMPC << EOF 5535#include <utmpx.h> 5536struct utmpx user_info; 5537int main(void) { 5538 return 0; 5539} 5540EOF 5541if compile_prog "" "" ; then 5542 have_utmpx=yes 5543fi 5544 5545########################################## 5546# checks for sanitizers 5547 5548have_asan=no 5549have_ubsan=no 5550have_asan_iface_h=no 5551have_asan_iface_fiber=no 5552 5553if test "$sanitizers" = "yes" ; then 5554 write_c_skeleton 5555 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 5556 have_asan=yes 5557 fi 5558 5559 # we could use a simple skeleton for flags checks, but this also 5560 # detect the static linking issue of ubsan, see also: 5561 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 5562 cat > $TMPC << EOF 5563#include <stdlib.h> 5564int main(void) { 5565 void *tmp = malloc(10); 5566 return *(int *)(tmp + 2); 5567} 5568EOF 5569 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 5570 have_ubsan=yes 5571 fi 5572 5573 if check_include "sanitizer/asan_interface.h" ; then 5574 have_asan_iface_h=yes 5575 fi 5576 5577 cat > $TMPC << EOF 5578#include <sanitizer/asan_interface.h> 5579int main(void) { 5580 __sanitizer_start_switch_fiber(0, 0, 0); 5581 return 0; 5582} 5583EOF 5584 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 5585 have_asan_iface_fiber=yes 5586 fi 5587fi 5588 5589########################################## 5590# Docker and cross-compiler support 5591# 5592# This is specifically for building test 5593# cases for foreign architectures, not 5594# cross-compiling QEMU itself. 5595 5596if has "docker"; then 5597 docker=$($python $source_path/tests/docker/docker.py probe) 5598fi 5599 5600########################################## 5601# check for libpmem 5602 5603if test "$libpmem" != "no"; then 5604 if $pkg_config --exists "libpmem"; then 5605 libpmem="yes" 5606 libpmem_libs=$($pkg_config --libs libpmem) 5607 libpmem_cflags=$($pkg_config --cflags libpmem) 5608 libs_softmmu="$libs_softmmu $libpmem_libs" 5609 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" 5610 else 5611 if test "$libpmem" = "yes" ; then 5612 feature_not_found "libpmem" "Install nvml or pmdk" 5613 fi 5614 libpmem="no" 5615 fi 5616fi 5617 5618########################################## 5619# End of CC checks 5620# After here, no more $cc or $ld runs 5621 5622write_c_skeleton 5623 5624if test "$gcov" = "yes" ; then 5625 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS" 5626 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS" 5627elif test "$fortify_source" = "yes" ; then 5628 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 5629elif test "$debug" = "no"; then 5630 CFLAGS="-O2 $CFLAGS" 5631fi 5632 5633if test "$have_asan" = "yes"; then 5634 CFLAGS="-fsanitize=address $CFLAGS" 5635 if test "$have_asan_iface_h" = "no" ; then 5636 echo "ASAN build enabled, but ASAN header missing." \ 5637 "Without code annotation, the report may be inferior." 5638 elif test "$have_asan_iface_fiber" = "no" ; then 5639 echo "ASAN build enabled, but ASAN header is too old." \ 5640 "Without code annotation, the report may be inferior." 5641 fi 5642fi 5643if test "$have_ubsan" = "yes"; then 5644 CFLAGS="-fsanitize=undefined $CFLAGS" 5645fi 5646 5647########################################## 5648# Do we have libnfs 5649if test "$libnfs" != "no" ; then 5650 if $pkg_config --atleast-version=1.9.3 libnfs; then 5651 libnfs="yes" 5652 libnfs_libs=$($pkg_config --libs libnfs) 5653 else 5654 if test "$libnfs" = "yes" ; then 5655 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 5656 fi 5657 libnfs="no" 5658 fi 5659fi 5660 5661# Now we've finished running tests it's OK to add -Werror to the compiler flags 5662if test "$werror" = "yes"; then 5663 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 5664fi 5665 5666if test "$solaris" = "no" ; then 5667 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 5668 LDFLAGS="-Wl,--warn-common $LDFLAGS" 5669 fi 5670fi 5671 5672# test if pod2man has --utf8 option 5673if pod2man --help | grep -q utf8; then 5674 POD2MAN="pod2man --utf8" 5675else 5676 POD2MAN="pod2man" 5677fi 5678 5679# Use ASLR, no-SEH and DEP if available 5680if test "$mingw32" = "yes" ; then 5681 for flag in --dynamicbase --no-seh --nxcompat; do 5682 if ld_has $flag ; then 5683 LDFLAGS="-Wl,$flag $LDFLAGS" 5684 fi 5685 done 5686fi 5687 5688qemu_confdir=$sysconfdir$confsuffix 5689qemu_moddir=$libdir$confsuffix 5690qemu_datadir=$datadir$confsuffix 5691qemu_localedir="$datadir/locale" 5692 5693# We can only support ivshmem if we have eventfd 5694if [ "$eventfd" = "yes" ]; then 5695 ivshmem=yes 5696fi 5697 5698tools="" 5699if test "$want_tools" = "yes" ; then 5700 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools" 5701 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 5702 tools="qemu-nbd\$(EXESUF) $tools" 5703 fi 5704 if [ "$ivshmem" = "yes" ]; then 5705 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 5706 fi 5707 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then 5708 tools="elf2dmp $tools" 5709 fi 5710fi 5711if test "$softmmu" = yes ; then 5712 if test "$linux" = yes; then 5713 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then 5714 virtfs=yes 5715 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 5716 else 5717 if test "$virtfs" = yes; then 5718 error_exit "VirtFS requires libcap devel and libattr devel" 5719 fi 5720 virtfs=no 5721 fi 5722 if test "$mpath" != no && test "$mpathpersist" = yes ; then 5723 mpath=yes 5724 else 5725 if test "$mpath" = yes; then 5726 error_exit "Multipath requires libmpathpersist devel" 5727 fi 5728 mpath=no 5729 fi 5730 tools="$tools scsi/qemu-pr-helper\$(EXESUF)" 5731 else 5732 if test "$virtfs" = yes; then 5733 error_exit "VirtFS is supported only on Linux" 5734 fi 5735 virtfs=no 5736 if test "$mpath" = yes; then 5737 error_exit "Multipath is supported only on Linux" 5738 fi 5739 mpath=no 5740 fi 5741 if test "$xkbcommon" = "yes"; then 5742 tools="qemu-keymap\$(EXESUF) $tools" 5743 fi 5744fi 5745 5746# Probe for guest agent support/options 5747 5748if [ "$guest_agent" != "no" ]; then 5749 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 5750 tools="qemu-ga $tools" 5751 guest_agent=yes 5752 elif [ "$guest_agent" != yes ]; then 5753 guest_agent=no 5754 else 5755 error_exit "Guest agent is not supported on this platform" 5756 fi 5757fi 5758 5759# Guest agent Window MSI package 5760 5761if test "$guest_agent" != yes; then 5762 if test "$guest_agent_msi" = yes; then 5763 error_exit "MSI guest agent package requires guest agent enabled" 5764 fi 5765 guest_agent_msi=no 5766elif test "$mingw32" != "yes"; then 5767 if test "$guest_agent_msi" = "yes"; then 5768 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 5769 fi 5770 guest_agent_msi=no 5771elif ! has wixl; then 5772 if test "$guest_agent_msi" = "yes"; then 5773 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 5774 fi 5775 guest_agent_msi=no 5776else 5777 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 5778 # disabled explicitly 5779 if test "$guest_agent_msi" != "no"; then 5780 guest_agent_msi=yes 5781 fi 5782fi 5783 5784if test "$guest_agent_msi" = "yes"; then 5785 if test "$guest_agent_with_vss" = "yes"; then 5786 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 5787 fi 5788 5789 if test "$QEMU_GA_MANUFACTURER" = ""; then 5790 QEMU_GA_MANUFACTURER=QEMU 5791 fi 5792 5793 if test "$QEMU_GA_DISTRO" = ""; then 5794 QEMU_GA_DISTRO=Linux 5795 fi 5796 5797 if test "$QEMU_GA_VERSION" = ""; then 5798 QEMU_GA_VERSION=$(cat $source_path/VERSION) 5799 fi 5800 5801 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 5802 5803 case "$cpu" in 5804 x86_64) 5805 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 5806 ;; 5807 i386) 5808 QEMU_GA_MSI_ARCH="-D Arch=32" 5809 ;; 5810 *) 5811 error_exit "CPU $cpu not supported for building installation package" 5812 ;; 5813 esac 5814fi 5815 5816# Mac OS X ships with a broken assembler 5817roms= 5818if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ 5819 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ 5820 "$softmmu" = yes ; then 5821 # Different host OS linkers have different ideas about the name of the ELF 5822 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 5823 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 5824 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 5825 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 5826 ld_i386_emulation="$emu" 5827 roms="optionrom" 5828 break 5829 fi 5830 done 5831fi 5832if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then 5833 roms="$roms spapr-rtas" 5834fi 5835 5836if test "$cpu" = "s390x" ; then 5837 roms="$roms s390-ccw" 5838fi 5839 5840# Probe for the need for relocating the user-only binary. 5841if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 5842 textseg_addr= 5843 case "$cpu" in 5844 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 5845 # ??? Rationale for choosing this address 5846 textseg_addr=0x60000000 5847 ;; 5848 mips) 5849 # A 256M aligned address, high in the address space, with enough 5850 # room for the code_gen_buffer above it before the stack. 5851 textseg_addr=0x60000000 5852 ;; 5853 esac 5854 if [ -n "$textseg_addr" ]; then 5855 cat > $TMPC <<EOF 5856 int main(void) { return 0; } 5857EOF 5858 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 5859 if ! compile_prog "" "$textseg_ldflags"; then 5860 # In case ld does not support -Ttext-segment, edit the default linker 5861 # script via sed to set the .text start addr. This is needed on FreeBSD 5862 # at least. 5863 if ! $ld --verbose >/dev/null 2>&1; then 5864 error_exit \ 5865 "We need to link the QEMU user mode binaries at a" \ 5866 "specific text address. Unfortunately your linker" \ 5867 "doesn't support either the -Ttext-segment option or" \ 5868 "printing the default linker script with --verbose." \ 5869 "If you don't want the user mode binaries, pass the" \ 5870 "--disable-user option to configure." 5871 fi 5872 5873 $ld --verbose | sed \ 5874 -e '1,/==================================================/d' \ 5875 -e '/==================================================/,$d' \ 5876 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 5877 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 5878 textseg_ldflags="-Wl,-T../config-host.ld" 5879 fi 5880 fi 5881fi 5882 5883# Check that the C++ compiler exists and works with the C compiler. 5884# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 5885if has $cxx; then 5886 cat > $TMPC <<EOF 5887int c_function(void); 5888int main(void) { return c_function(); } 5889EOF 5890 5891 compile_object 5892 5893 cat > $TMPCXX <<EOF 5894extern "C" { 5895 int c_function(void); 5896} 5897int c_function(void) { return 42; } 5898EOF 5899 5900 update_cxxflags 5901 5902 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then 5903 # C++ compiler $cxx works ok with C compiler $cc 5904 : 5905 else 5906 echo "C++ compiler $cxx does not work with C compiler $cc" 5907 echo "Disabling C++ specific optional code" 5908 cxx= 5909 fi 5910else 5911 echo "No C++ compiler available; disabling C++ specific optional code" 5912 cxx= 5913fi 5914 5915echo_version() { 5916 if test "$1" = "yes" ; then 5917 echo "($2)" 5918 fi 5919} 5920 5921# prepend pixman and ftd flags after all config tests are done 5922QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 5923QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 5924libs_softmmu="$pixman_libs $libs_softmmu" 5925 5926echo "Install prefix $prefix" 5927echo "BIOS directory $(eval echo $qemu_datadir)" 5928echo "firmware path $(eval echo $firmwarepath)" 5929echo "binary directory $(eval echo $bindir)" 5930echo "library directory $(eval echo $libdir)" 5931echo "module directory $(eval echo $qemu_moddir)" 5932echo "libexec directory $(eval echo $libexecdir)" 5933echo "include directory $(eval echo $includedir)" 5934echo "config directory $(eval echo $sysconfdir)" 5935if test "$mingw32" = "no" ; then 5936echo "local state directory $(eval echo $local_statedir)" 5937echo "Manual directory $(eval echo $mandir)" 5938echo "ELF interp prefix $interp_prefix" 5939else 5940echo "local state directory queried at runtime" 5941echo "Windows SDK $win_sdk" 5942fi 5943echo "Source path $source_path" 5944echo "GIT binary $git" 5945echo "GIT submodules $git_submodules" 5946echo "C compiler $cc" 5947echo "Host C compiler $host_cc" 5948echo "C++ compiler $cxx" 5949echo "Objective-C compiler $objcc" 5950echo "ARFLAGS $ARFLAGS" 5951echo "CFLAGS $CFLAGS" 5952echo "QEMU_CFLAGS $QEMU_CFLAGS" 5953echo "LDFLAGS $LDFLAGS" 5954echo "QEMU_LDFLAGS $QEMU_LDFLAGS" 5955echo "make $make" 5956echo "install $install" 5957echo "python $python" 5958if test "$slirp" = "yes" ; then 5959 echo "smbd $smbd" 5960fi 5961echo "module support $modules" 5962echo "host CPU $cpu" 5963echo "host big endian $bigendian" 5964echo "target list $target_list" 5965echo "gprof enabled $gprof" 5966echo "sparse enabled $sparse" 5967echo "strip binaries $strip_opt" 5968echo "profiler $profiler" 5969echo "static build $static" 5970if test "$darwin" = "yes" ; then 5971 echo "Cocoa support $cocoa" 5972fi 5973echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 5974echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 5975echo "GTK GL support $gtk_gl" 5976echo "VTE support $vte $(echo_version $vte $vteversion)" 5977echo "TLS priority $tls_priority" 5978echo "GNUTLS support $gnutls" 5979echo "GNUTLS rnd $gnutls_rnd" 5980echo "libgcrypt $gcrypt" 5981echo "libgcrypt kdf $gcrypt_kdf" 5982echo "nettle $nettle $(echo_version $nettle $nettle_version)" 5983echo "nettle kdf $nettle_kdf" 5984echo "libtasn1 $tasn1" 5985echo "curses support $curses" 5986echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)" 5987echo "curl support $curl" 5988echo "mingw32 support $mingw32" 5989echo "Audio drivers $audio_drv_list" 5990echo "Block whitelist (rw) $block_drv_rw_whitelist" 5991echo "Block whitelist (ro) $block_drv_ro_whitelist" 5992echo "VirtFS support $virtfs" 5993echo "Multipath support $mpath" 5994echo "VNC support $vnc" 5995if test "$vnc" = "yes" ; then 5996 echo "VNC SASL support $vnc_sasl" 5997 echo "VNC JPEG support $vnc_jpeg" 5998 echo "VNC PNG support $vnc_png" 5999fi 6000if test -n "$sparc_cpu"; then 6001 echo "Target Sparc Arch $sparc_cpu" 6002fi 6003echo "xen support $xen" 6004if test "$xen" = "yes" ; then 6005 echo "xen ctrl version $xen_ctrl_version" 6006 echo "pv dom build $xen_pv_domain_build" 6007fi 6008echo "brlapi support $brlapi" 6009echo "bluez support $bluez" 6010echo "Documentation $docs" 6011echo "PIE $pie" 6012echo "vde support $vde" 6013echo "netmap support $netmap" 6014echo "Linux AIO support $linux_aio" 6015echo "ATTR/XATTR support $attr" 6016echo "Install blobs $blobs" 6017echo "KVM support $kvm" 6018echo "HAX support $hax" 6019echo "HVF support $hvf" 6020echo "WHPX support $whpx" 6021echo "TCG support $tcg" 6022if test "$tcg" = "yes" ; then 6023 echo "TCG debug enabled $debug_tcg" 6024 echo "TCG interpreter $tcg_interpreter" 6025fi 6026echo "malloc trim support $malloc_trim" 6027echo "RDMA support $rdma" 6028echo "PVRDMA support $pvrdma" 6029echo "fdt support $fdt" 6030echo "membarrier $membarrier" 6031echo "preadv support $preadv" 6032echo "fdatasync $fdatasync" 6033echo "madvise $madvise" 6034echo "posix_madvise $posix_madvise" 6035echo "posix_memalign $posix_memalign" 6036echo "libcap-ng support $cap_ng" 6037echo "vhost-net support $vhost_net" 6038echo "vhost-crypto support $vhost_crypto" 6039echo "vhost-scsi support $vhost_scsi" 6040echo "vhost-vsock support $vhost_vsock" 6041echo "vhost-user support $vhost_user" 6042echo "Trace backends $trace_backends" 6043if have_backend "simple"; then 6044echo "Trace output file $trace_file-<pid>" 6045fi 6046echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 6047echo "rbd support $rbd" 6048echo "xfsctl support $xfs" 6049echo "smartcard support $smartcard" 6050echo "libusb $libusb" 6051echo "usb net redir $usb_redir" 6052echo "OpenGL support $opengl" 6053echo "OpenGL dmabufs $opengl_dmabuf" 6054echo "libiscsi support $libiscsi" 6055echo "libnfs support $libnfs" 6056echo "build guest agent $guest_agent" 6057echo "QGA VSS support $guest_agent_with_vss" 6058echo "QGA w32 disk info $guest_agent_ntddscsi" 6059echo "QGA MSI support $guest_agent_msi" 6060echo "seccomp support $seccomp" 6061echo "coroutine backend $coroutine" 6062echo "coroutine pool $coroutine_pool" 6063echo "debug stack usage $debug_stack_usage" 6064echo "mutex debugging $debug_mutex" 6065echo "crypto afalg $crypto_afalg" 6066echo "GlusterFS support $glusterfs" 6067echo "gcov $gcov_tool" 6068echo "gcov enabled $gcov" 6069echo "TPM support $tpm" 6070echo "libssh2 support $libssh2" 6071echo "TPM passthrough $tpm_passthrough" 6072echo "TPM emulator $tpm_emulator" 6073echo "QOM debugging $qom_cast_debug" 6074echo "Live block migration $live_block_migration" 6075echo "lzo support $lzo" 6076echo "snappy support $snappy" 6077echo "bzip2 support $bzip2" 6078echo "NUMA host support $numa" 6079echo "libxml2 $libxml2" 6080echo "tcmalloc support $tcmalloc" 6081echo "jemalloc support $jemalloc" 6082echo "avx2 optimization $avx2_opt" 6083echo "replication support $replication" 6084echo "VxHS block device $vxhs" 6085echo "capstone $capstone" 6086echo "docker $docker" 6087echo "libpmem support $libpmem" 6088 6089if test "$sdl_too_old" = "yes"; then 6090echo "-> Your SDL version is too old - please upgrade to have SDL support" 6091fi 6092 6093if test "$sdlabi" = "1.2"; then 6094 echo 6095 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in" 6096 echo "WARNING: future releases. Please switch to using SDL 2.0" 6097fi 6098 6099if test "$supported_cpu" = "no"; then 6100 echo 6101 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 6102 echo 6103 echo "CPU host architecture $cpu support is not currently maintained." 6104 echo "The QEMU project intends to remove support for this host CPU in" 6105 echo "a future release if nobody volunteers to maintain it and to" 6106 echo "provide a build host for our continuous integration setup." 6107 echo "configure has succeeded and you can continue to build, but" 6108 echo "if you care about QEMU on this platform you should contact" 6109 echo "us upstream at qemu-devel@nongnu.org." 6110fi 6111 6112if test "$supported_os" = "no"; then 6113 echo 6114 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 6115 echo 6116 echo "Host OS $targetos support is not currently maintained." 6117 echo "The QEMU project intends to remove support for this host OS in" 6118 echo "a future release if nobody volunteers to maintain it and to" 6119 echo "provide a build host for our continuous integration setup." 6120 echo "configure has succeeded and you can continue to build, but" 6121 echo "if you care about QEMU on this platform you should contact" 6122 echo "us upstream at qemu-devel@nongnu.org." 6123fi 6124 6125config_host_mak="config-host.mak" 6126 6127echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 6128 6129echo "# Automatically generated by configure - do not modify" > $config_host_mak 6130echo >> $config_host_mak 6131 6132echo all: >> $config_host_mak 6133echo "prefix=$prefix" >> $config_host_mak 6134echo "bindir=$bindir" >> $config_host_mak 6135echo "libdir=$libdir" >> $config_host_mak 6136echo "libexecdir=$libexecdir" >> $config_host_mak 6137echo "includedir=$includedir" >> $config_host_mak 6138echo "mandir=$mandir" >> $config_host_mak 6139echo "sysconfdir=$sysconfdir" >> $config_host_mak 6140echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 6141echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 6142echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6143echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 6144echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 6145if test "$mingw32" = "no" ; then 6146 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 6147fi 6148echo "qemu_helperdir=$libexecdir" >> $config_host_mak 6149echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 6150echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 6151echo "GIT=$git" >> $config_host_mak 6152echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6153echo "GIT_UPDATE=$git_update" >> $config_host_mak 6154 6155echo "ARCH=$ARCH" >> $config_host_mak 6156 6157if test "$debug_tcg" = "yes" ; then 6158 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6159fi 6160if test "$strip_opt" = "yes" ; then 6161 echo "STRIP=${strip}" >> $config_host_mak 6162fi 6163if test "$bigendian" = "yes" ; then 6164 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6165fi 6166if test "$mingw32" = "yes" ; then 6167 echo "CONFIG_WIN32=y" >> $config_host_mak 6168 rc_version=$(cat $source_path/VERSION) 6169 version_major=${rc_version%%.*} 6170 rc_version=${rc_version#*.} 6171 version_minor=${rc_version%%.*} 6172 rc_version=${rc_version#*.} 6173 version_subminor=${rc_version%%.*} 6174 version_micro=0 6175 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6176 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6177 if test "$guest_agent_with_vss" = "yes" ; then 6178 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6179 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6180 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6181 fi 6182 if test "$guest_agent_ntddscsi" = "yes" ; then 6183 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak 6184 fi 6185 if test "$guest_agent_msi" = "yes"; then 6186 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6187 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6188 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6189 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6190 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6191 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6192 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6193 fi 6194else 6195 echo "CONFIG_POSIX=y" >> $config_host_mak 6196fi 6197 6198if test "$linux" = "yes" ; then 6199 echo "CONFIG_LINUX=y" >> $config_host_mak 6200fi 6201 6202if test "$darwin" = "yes" ; then 6203 echo "CONFIG_DARWIN=y" >> $config_host_mak 6204fi 6205 6206if test "$solaris" = "yes" ; then 6207 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6208fi 6209if test "$haiku" = "yes" ; then 6210 echo "CONFIG_HAIKU=y" >> $config_host_mak 6211fi 6212if test "$static" = "yes" ; then 6213 echo "CONFIG_STATIC=y" >> $config_host_mak 6214fi 6215if test "$profiler" = "yes" ; then 6216 echo "CONFIG_PROFILER=y" >> $config_host_mak 6217fi 6218if test "$slirp" = "yes" ; then 6219 echo "CONFIG_SLIRP=y" >> $config_host_mak 6220 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6221fi 6222if test "$vde" = "yes" ; then 6223 echo "CONFIG_VDE=y" >> $config_host_mak 6224 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 6225fi 6226if test "$netmap" = "yes" ; then 6227 echo "CONFIG_NETMAP=y" >> $config_host_mak 6228fi 6229if test "$l2tpv3" = "yes" ; then 6230 echo "CONFIG_L2TPV3=y" >> $config_host_mak 6231fi 6232if test "$cap_ng" = "yes" ; then 6233 echo "CONFIG_LIBCAP=y" >> $config_host_mak 6234fi 6235echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 6236for drv in $audio_drv_list; do 6237 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6238 case "$drv" in 6239 alsa | oss | pa | sdl) 6240 echo "$def=m" >> $config_host_mak ;; 6241 *) 6242 echo "$def=y" >> $config_host_mak ;; 6243 esac 6244done 6245echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6246echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6247echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6248echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6249echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6250if test "$audio_pt_int" = "yes" ; then 6251 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 6252fi 6253if test "$audio_win_int" = "yes" ; then 6254 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6255fi 6256echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6257echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6258if test "$vnc" = "yes" ; then 6259 echo "CONFIG_VNC=y" >> $config_host_mak 6260fi 6261if test "$vnc_sasl" = "yes" ; then 6262 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 6263fi 6264if test "$vnc_jpeg" = "yes" ; then 6265 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 6266fi 6267if test "$vnc_png" = "yes" ; then 6268 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 6269fi 6270if test "$xkbcommon" = "yes" ; then 6271 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 6272 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 6273fi 6274if test "$fnmatch" = "yes" ; then 6275 echo "CONFIG_FNMATCH=y" >> $config_host_mak 6276fi 6277if test "$xfs" = "yes" ; then 6278 echo "CONFIG_XFS=y" >> $config_host_mak 6279fi 6280qemu_version=$(head $source_path/VERSION) 6281echo "VERSION=$qemu_version" >>$config_host_mak 6282echo "PKGVERSION=$pkgversion" >>$config_host_mak 6283echo "SRC_PATH=$source_path" >> $config_host_mak 6284echo "TARGET_DIRS=$target_list" >> $config_host_mak 6285if [ "$docs" = "yes" ] ; then 6286 echo "BUILD_DOCS=yes" >> $config_host_mak 6287fi 6288if test "$modules" = "yes"; then 6289 # $shacmd can generate a hash started with digit, which the compiler doesn't 6290 # like as an symbol. So prefix it with an underscore 6291 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6292 echo "CONFIG_MODULES=y" >> $config_host_mak 6293fi 6294if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then 6295 echo "CONFIG_X11=y" >> $config_host_mak 6296 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6297 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6298fi 6299if test "$sdl" = "yes" ; then 6300 echo "CONFIG_SDL=m" >> $config_host_mak 6301 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak 6302 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 6303 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 6304fi 6305if test "$cocoa" = "yes" ; then 6306 echo "CONFIG_COCOA=y" >> $config_host_mak 6307fi 6308if test "$curses" = "yes" ; then 6309 echo "CONFIG_CURSES=m" >> $config_host_mak 6310 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 6311 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 6312fi 6313if test "$pipe2" = "yes" ; then 6314 echo "CONFIG_PIPE2=y" >> $config_host_mak 6315fi 6316if test "$accept4" = "yes" ; then 6317 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 6318fi 6319if test "$splice" = "yes" ; then 6320 echo "CONFIG_SPLICE=y" >> $config_host_mak 6321fi 6322if test "$eventfd" = "yes" ; then 6323 echo "CONFIG_EVENTFD=y" >> $config_host_mak 6324fi 6325if test "$memfd" = "yes" ; then 6326 echo "CONFIG_MEMFD=y" >> $config_host_mak 6327fi 6328if test "$fallocate" = "yes" ; then 6329 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6330fi 6331if test "$fallocate_punch_hole" = "yes" ; then 6332 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 6333fi 6334if test "$fallocate_zero_range" = "yes" ; then 6335 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6336fi 6337if test "$posix_fallocate" = "yes" ; then 6338 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6339fi 6340if test "$sync_file_range" = "yes" ; then 6341 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6342fi 6343if test "$fiemap" = "yes" ; then 6344 echo "CONFIG_FIEMAP=y" >> $config_host_mak 6345fi 6346if test "$dup3" = "yes" ; then 6347 echo "CONFIG_DUP3=y" >> $config_host_mak 6348fi 6349if test "$ppoll" = "yes" ; then 6350 echo "CONFIG_PPOLL=y" >> $config_host_mak 6351fi 6352if test "$prctl_pr_set_timerslack" = "yes" ; then 6353 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6354fi 6355if test "$epoll" = "yes" ; then 6356 echo "CONFIG_EPOLL=y" >> $config_host_mak 6357fi 6358if test "$epoll_create1" = "yes" ; then 6359 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 6360fi 6361if test "$sendfile" = "yes" ; then 6362 echo "CONFIG_SENDFILE=y" >> $config_host_mak 6363fi 6364if test "$timerfd" = "yes" ; then 6365 echo "CONFIG_TIMERFD=y" >> $config_host_mak 6366fi 6367if test "$setns" = "yes" ; then 6368 echo "CONFIG_SETNS=y" >> $config_host_mak 6369fi 6370if test "$clock_adjtime" = "yes" ; then 6371 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 6372fi 6373if test "$syncfs" = "yes" ; then 6374 echo "CONFIG_SYNCFS=y" >> $config_host_mak 6375fi 6376if test "$inotify" = "yes" ; then 6377 echo "CONFIG_INOTIFY=y" >> $config_host_mak 6378fi 6379if test "$inotify1" = "yes" ; then 6380 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6381fi 6382if test "$sem_timedwait" = "yes" ; then 6383 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6384fi 6385if test "$strchrnul" = "yes" ; then 6386 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 6387fi 6388if test "$byteswap_h" = "yes" ; then 6389 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 6390fi 6391if test "$bswap_h" = "yes" ; then 6392 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 6393fi 6394if test "$curl" = "yes" ; then 6395 echo "CONFIG_CURL=m" >> $config_host_mak 6396 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 6397 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6398fi 6399if test "$brlapi" = "yes" ; then 6400 echo "CONFIG_BRLAPI=y" >> $config_host_mak 6401 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 6402fi 6403if test "$bluez" = "yes" ; then 6404 echo "CONFIG_BLUEZ=y" >> $config_host_mak 6405 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 6406fi 6407if test "$gtk" = "yes" ; then 6408 echo "CONFIG_GTK=m" >> $config_host_mak 6409 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6410 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6411 if test "$gtk_gl" = "yes" ; then 6412 echo "CONFIG_GTK_GL=y" >> $config_host_mak 6413 fi 6414fi 6415echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6416if test "$gnutls" = "yes" ; then 6417 echo "CONFIG_GNUTLS=y" >> $config_host_mak 6418fi 6419if test "$gnutls_rnd" = "yes" ; then 6420 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak 6421fi 6422if test "$gcrypt" = "yes" ; then 6423 echo "CONFIG_GCRYPT=y" >> $config_host_mak 6424 if test "$gcrypt_hmac" = "yes" ; then 6425 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 6426 fi 6427 if test "$gcrypt_kdf" = "yes" ; then 6428 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak 6429 fi 6430fi 6431if test "$nettle" = "yes" ; then 6432 echo "CONFIG_NETTLE=y" >> $config_host_mak 6433 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6434 if test "$nettle_kdf" = "yes" ; then 6435 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak 6436 fi 6437fi 6438if test "$tasn1" = "yes" ; then 6439 echo "CONFIG_TASN1=y" >> $config_host_mak 6440fi 6441if test "$have_ifaddrs_h" = "yes" ; then 6442 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 6443fi 6444if test "$have_broken_size_max" = "yes" ; then 6445 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 6446fi 6447 6448# Work around a system header bug with some kernel/XFS header 6449# versions where they both try to define 'struct fsxattr': 6450# xfs headers will not try to redefine structs from linux headers 6451# if this macro is set. 6452if test "$have_fsxattr" = "yes" ; then 6453 echo "HAVE_FSXATTR=y" >> $config_host_mak 6454fi 6455if test "$have_copy_file_range" = "yes" ; then 6456 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 6457fi 6458if test "$vte" = "yes" ; then 6459 echo "CONFIG_VTE=y" >> $config_host_mak 6460 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 6461 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 6462fi 6463if test "$virglrenderer" = "yes" ; then 6464 echo "CONFIG_VIRGL=y" >> $config_host_mak 6465 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 6466 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 6467fi 6468if test "$xen" = "yes" ; then 6469 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 6470 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 6471 if test "$xen_pv_domain_build" = "yes" ; then 6472 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak 6473 fi 6474fi 6475if test "$linux_aio" = "yes" ; then 6476 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 6477fi 6478if test "$attr" = "yes" ; then 6479 echo "CONFIG_ATTR=y" >> $config_host_mak 6480fi 6481if test "$libattr" = "yes" ; then 6482 echo "CONFIG_LIBATTR=y" >> $config_host_mak 6483fi 6484if test "$virtfs" = "yes" ; then 6485 echo "CONFIG_VIRTFS=y" >> $config_host_mak 6486fi 6487if test "$mpath" = "yes" ; then 6488 echo "CONFIG_MPATH=y" >> $config_host_mak 6489 if test "$mpathpersist_new_api" = "yes"; then 6490 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 6491 fi 6492fi 6493if test "$vhost_scsi" = "yes" ; then 6494 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 6495fi 6496if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then 6497 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak 6498fi 6499if test "$vhost_crypto" = "yes" ; then 6500 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 6501fi 6502if test "$vhost_vsock" = "yes" ; then 6503 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 6504fi 6505if test "$vhost_user" = "yes" ; then 6506 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 6507fi 6508if test "$blobs" = "yes" ; then 6509 echo "INSTALL_BLOBS=yes" >> $config_host_mak 6510fi 6511if test "$iovec" = "yes" ; then 6512 echo "CONFIG_IOVEC=y" >> $config_host_mak 6513fi 6514if test "$preadv" = "yes" ; then 6515 echo "CONFIG_PREADV=y" >> $config_host_mak 6516fi 6517if test "$fdt" != "no" ; then 6518 echo "CONFIG_FDT=y" >> $config_host_mak 6519fi 6520if test "$membarrier" = "yes" ; then 6521 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 6522fi 6523if test "$signalfd" = "yes" ; then 6524 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 6525fi 6526if test "$tcg" = "yes"; then 6527 echo "CONFIG_TCG=y" >> $config_host_mak 6528 if test "$tcg_interpreter" = "yes" ; then 6529 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 6530 fi 6531fi 6532if test "$fdatasync" = "yes" ; then 6533 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 6534fi 6535if test "$madvise" = "yes" ; then 6536 echo "CONFIG_MADVISE=y" >> $config_host_mak 6537fi 6538if test "$posix_madvise" = "yes" ; then 6539 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 6540fi 6541if test "$posix_memalign" = "yes" ; then 6542 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 6543fi 6544 6545if test "$spice" = "yes" ; then 6546 echo "CONFIG_SPICE=y" >> $config_host_mak 6547fi 6548 6549if test "$smartcard" = "yes" ; then 6550 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 6551 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 6552 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 6553fi 6554 6555if test "$libusb" = "yes" ; then 6556 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 6557 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 6558 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 6559fi 6560 6561if test "$usb_redir" = "yes" ; then 6562 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 6563 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 6564 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 6565fi 6566 6567if test "$opengl" = "yes" ; then 6568 echo "CONFIG_OPENGL=y" >> $config_host_mak 6569 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 6570 if test "$opengl_dmabuf" = "yes" ; then 6571 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 6572 fi 6573fi 6574 6575if test "$malloc_trim" = "yes" ; then 6576 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 6577fi 6578 6579if test "$avx2_opt" = "yes" ; then 6580 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 6581fi 6582 6583if test "$lzo" = "yes" ; then 6584 echo "CONFIG_LZO=y" >> $config_host_mak 6585fi 6586 6587if test "$snappy" = "yes" ; then 6588 echo "CONFIG_SNAPPY=y" >> $config_host_mak 6589fi 6590 6591if test "$bzip2" = "yes" ; then 6592 echo "CONFIG_BZIP2=y" >> $config_host_mak 6593 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 6594fi 6595 6596if test "$libiscsi" = "yes" ; then 6597 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 6598 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 6599 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 6600fi 6601 6602if test "$libnfs" = "yes" ; then 6603 echo "CONFIG_LIBNFS=m" >> $config_host_mak 6604 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 6605fi 6606 6607if test "$seccomp" = "yes"; then 6608 echo "CONFIG_SECCOMP=y" >> $config_host_mak 6609 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 6610 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 6611fi 6612 6613# XXX: suppress that 6614if [ "$bsd" = "yes" ] ; then 6615 echo "CONFIG_BSD=y" >> $config_host_mak 6616fi 6617 6618if test "$localtime_r" = "yes" ; then 6619 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 6620fi 6621if test "$qom_cast_debug" = "yes" ; then 6622 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 6623fi 6624if test "$rbd" = "yes" ; then 6625 echo "CONFIG_RBD=m" >> $config_host_mak 6626 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 6627 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 6628fi 6629 6630echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 6631if test "$coroutine_pool" = "yes" ; then 6632 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 6633else 6634 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 6635fi 6636 6637if test "$debug_stack_usage" = "yes" ; then 6638 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 6639fi 6640 6641if test "$crypto_afalg" = "yes" ; then 6642 echo "CONFIG_AF_ALG=y" >> $config_host_mak 6643fi 6644 6645if test "$open_by_handle_at" = "yes" ; then 6646 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 6647fi 6648 6649if test "$linux_magic_h" = "yes" ; then 6650 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 6651fi 6652 6653if test "$pragma_diagnostic_available" = "yes" ; then 6654 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 6655fi 6656 6657if test "$valgrind_h" = "yes" ; then 6658 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 6659fi 6660 6661if test "$have_asan_iface_fiber" = "yes" ; then 6662 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 6663fi 6664 6665if test "$has_environ" = "yes" ; then 6666 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 6667fi 6668 6669if test "$cpuid_h" = "yes" ; then 6670 echo "CONFIG_CPUID_H=y" >> $config_host_mak 6671fi 6672 6673if test "$int128" = "yes" ; then 6674 echo "CONFIG_INT128=y" >> $config_host_mak 6675fi 6676 6677if test "$atomic128" = "yes" ; then 6678 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 6679fi 6680 6681if test "$cmpxchg128" = "yes" ; then 6682 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 6683fi 6684 6685if test "$atomic64" = "yes" ; then 6686 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 6687fi 6688 6689if test "$vector16" = "yes" ; then 6690 echo "CONFIG_VECTOR16=y" >> $config_host_mak 6691fi 6692 6693if test "$getauxval" = "yes" ; then 6694 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 6695fi 6696 6697if test "$glusterfs" = "yes" ; then 6698 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 6699 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 6700 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 6701fi 6702 6703if test "$glusterfs_xlator_opt" = "yes" ; then 6704 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 6705fi 6706 6707if test "$glusterfs_discard" = "yes" ; then 6708 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 6709fi 6710 6711if test "$glusterfs_fallocate" = "yes" ; then 6712 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 6713fi 6714 6715if test "$glusterfs_zerofill" = "yes" ; then 6716 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 6717fi 6718 6719if test "$libssh2" = "yes" ; then 6720 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 6721 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 6722 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 6723fi 6724 6725if test "$live_block_migration" = "yes" ; then 6726 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 6727fi 6728 6729if test "$tpm" = "yes"; then 6730 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 6731 # TPM passthrough support? 6732 if test "$tpm_passthrough" = "yes"; then 6733 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 6734 fi 6735 # TPM emulator support? 6736 if test "$tpm_emulator" = "yes"; then 6737 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak 6738 fi 6739fi 6740 6741echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 6742if have_backend "nop"; then 6743 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 6744fi 6745if have_backend "simple"; then 6746 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 6747 # Set the appropriate trace file. 6748 trace_file="\"$trace_file-\" FMT_pid" 6749fi 6750if have_backend "log"; then 6751 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 6752fi 6753if have_backend "ust"; then 6754 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 6755fi 6756if have_backend "dtrace"; then 6757 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 6758 if test "$trace_backend_stap" = "yes" ; then 6759 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 6760 fi 6761fi 6762if have_backend "ftrace"; then 6763 if test "$linux" = "yes" ; then 6764 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 6765 else 6766 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 6767 fi 6768fi 6769if have_backend "syslog"; then 6770 if test "$posix_syslog" = "yes" ; then 6771 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 6772 else 6773 feature_not_found "syslog(trace backend)" "syslog not available" 6774 fi 6775fi 6776echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 6777 6778if test "$rdma" = "yes" ; then 6779 echo "CONFIG_RDMA=y" >> $config_host_mak 6780 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 6781fi 6782 6783if test "$pvrdma" = "yes" ; then 6784 echo "CONFIG_PVRDMA=y" >> $config_host_mak 6785fi 6786 6787if test "$have_rtnetlink" = "yes" ; then 6788 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 6789fi 6790 6791if test "$libxml2" = "yes" ; then 6792 echo "CONFIG_LIBXML2=y" >> $config_host_mak 6793 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 6794 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 6795fi 6796 6797if test "$replication" = "yes" ; then 6798 echo "CONFIG_REPLICATION=y" >> $config_host_mak 6799fi 6800 6801if test "$have_af_vsock" = "yes" ; then 6802 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 6803fi 6804 6805if test "$have_sysmacros" = "yes" ; then 6806 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 6807fi 6808 6809if test "$have_static_assert" = "yes" ; then 6810 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 6811fi 6812 6813if test "$have_utmpx" = "yes" ; then 6814 echo "HAVE_UTMPX=y" >> $config_host_mak 6815fi 6816 6817if test "$ivshmem" = "yes" ; then 6818 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 6819fi 6820if test "$capstone" != "no" ; then 6821 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 6822fi 6823if test "$debug_mutex" = "yes" ; then 6824 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 6825fi 6826 6827# Hold two types of flag: 6828# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 6829# a thread we have a handle to 6830# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular 6831# platform 6832if test "$pthread_setname_np" = "yes" ; then 6833 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6834 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak 6835fi 6836 6837if test "$vxhs" = "yes" ; then 6838 echo "CONFIG_VXHS=y" >> $config_host_mak 6839 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 6840fi 6841 6842if test "$libpmem" = "yes" ; then 6843 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 6844fi 6845 6846if test "$tcg_interpreter" = "yes"; then 6847 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 6848elif test "$ARCH" = "sparc64" ; then 6849 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 6850elif test "$ARCH" = "s390x" ; then 6851 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 6852elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then 6853 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 6854elif test "$ARCH" = "ppc64" ; then 6855 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 6856else 6857 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 6858fi 6859QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES" 6860 6861echo "TOOLS=$tools" >> $config_host_mak 6862echo "ROMS=$roms" >> $config_host_mak 6863echo "MAKE=$make" >> $config_host_mak 6864echo "INSTALL=$install" >> $config_host_mak 6865echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 6866echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 6867echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 6868echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 6869echo "PYTHON=$python" >> $config_host_mak 6870echo "CC=$cc" >> $config_host_mak 6871if $iasl -h > /dev/null 2>&1; then 6872 echo "IASL=$iasl" >> $config_host_mak 6873fi 6874echo "HOST_CC=$host_cc" >> $config_host_mak 6875echo "CXX=$cxx" >> $config_host_mak 6876echo "OBJCC=$objcc" >> $config_host_mak 6877echo "AR=$ar" >> $config_host_mak 6878echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 6879echo "AS=$as" >> $config_host_mak 6880echo "CCAS=$ccas" >> $config_host_mak 6881echo "CPP=$cpp" >> $config_host_mak 6882echo "OBJCOPY=$objcopy" >> $config_host_mak 6883echo "LD=$ld" >> $config_host_mak 6884echo "RANLIB=$ranlib" >> $config_host_mak 6885echo "NM=$nm" >> $config_host_mak 6886echo "WINDRES=$windres" >> $config_host_mak 6887echo "CFLAGS=$CFLAGS" >> $config_host_mak 6888echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 6889echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 6890echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 6891echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 6892if test "$sparse" = "yes" ; then 6893 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 6894 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 6895 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 6896 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 6897 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 6898fi 6899if test "$cross_prefix" != ""; then 6900 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 6901else 6902 echo "AUTOCONF_HOST := " >> $config_host_mak 6903fi 6904echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 6905echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 6906echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 6907echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 6908echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 6909echo "LIBS+=$LIBS" >> $config_host_mak 6910echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 6911echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 6912echo "EXESUF=$EXESUF" >> $config_host_mak 6913echo "DSOSUF=$DSOSUF" >> $config_host_mak 6914echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 6915echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 6916echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 6917echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 6918echo "POD2MAN=$POD2MAN" >> $config_host_mak 6919echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak 6920if test "$gcov" = "yes" ; then 6921 echo "CONFIG_GCOV=y" >> $config_host_mak 6922 echo "GCOV=$gcov_tool" >> $config_host_mak 6923fi 6924 6925if test "$docker" != "no"; then 6926 echo "HAVE_USER_DOCKER=y" >> $config_host_mak 6927fi 6928 6929# use included Linux headers 6930if test "$linux" = "yes" ; then 6931 mkdir -p linux-headers 6932 case "$cpu" in 6933 i386|x86_64|x32) 6934 linux_arch=x86 6935 ;; 6936 ppc|ppc64) 6937 linux_arch=powerpc 6938 ;; 6939 s390x) 6940 linux_arch=s390 6941 ;; 6942 aarch64) 6943 linux_arch=arm64 6944 ;; 6945 mips64) 6946 linux_arch=mips 6947 ;; 6948 *) 6949 # For most CPUs the kernel architecture name and QEMU CPU name match. 6950 linux_arch="$cpu" 6951 ;; 6952 esac 6953 # For non-KVM architectures we will not have asm headers 6954 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 6955 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 6956 fi 6957fi 6958 6959for target in $target_list; do 6960target_dir="$target" 6961config_target_mak=$target_dir/config-target.mak 6962target_name=$(echo $target | cut -d '-' -f 1) 6963target_bigendian="no" 6964 6965case "$target_name" in 6966 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 6967 target_bigendian=yes 6968 ;; 6969esac 6970target_softmmu="no" 6971target_user_only="no" 6972target_linux_user="no" 6973target_bsd_user="no" 6974case "$target" in 6975 ${target_name}-softmmu) 6976 target_softmmu="yes" 6977 ;; 6978 ${target_name}-linux-user) 6979 target_user_only="yes" 6980 target_linux_user="yes" 6981 ;; 6982 ${target_name}-bsd-user) 6983 target_user_only="yes" 6984 target_bsd_user="yes" 6985 ;; 6986 *) 6987 error_exit "Target '$target' not recognised" 6988 exit 1 6989 ;; 6990esac 6991 6992target_compiler="" 6993target_compiler_static="" 6994target_compiler_cflags="" 6995 6996mkdir -p $target_dir 6997echo "# Automatically generated by configure - do not modify" > $config_target_mak 6998 6999bflt="no" 7000mttcg="no" 7001interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 7002gdb_xml_files="" 7003 7004TARGET_ARCH="$target_name" 7005TARGET_BASE_ARCH="" 7006TARGET_ABI_DIR="" 7007 7008case "$target_name" in 7009 i386) 7010 mttcg="yes" 7011 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml" 7012 target_compiler=$cross_cc_i386 7013 target_compiler_cflags=$cross_cc_ccflags_i386 7014 ;; 7015 x86_64) 7016 TARGET_BASE_ARCH=i386 7017 mttcg="yes" 7018 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml" 7019 target_compiler=$cross_cc_x86_64 7020 ;; 7021 alpha) 7022 mttcg="yes" 7023 target_compiler=$cross_cc_alpha 7024 ;; 7025 arm|armeb) 7026 TARGET_ARCH=arm 7027 bflt="yes" 7028 mttcg="yes" 7029 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7030 target_compiler=$cross_cc_arm 7031 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7032 ;; 7033 aarch64|aarch64_be) 7034 TARGET_ARCH=aarch64 7035 TARGET_BASE_ARCH=arm 7036 bflt="yes" 7037 mttcg="yes" 7038 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7039 target_compiler=$cross_cc_aarch64 7040 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7041 ;; 7042 cris) 7043 target_compiler=$cross_cc_cris 7044 ;; 7045 hppa) 7046 mttcg="yes" 7047 target_compiler=$cross_cc_hppa 7048 ;; 7049 lm32) 7050 target_compiler=$cross_cc_lm32 7051 ;; 7052 m68k) 7053 bflt="yes" 7054 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml" 7055 target_compiler=$cross_cc_m68k 7056 ;; 7057 microblaze|microblazeel) 7058 TARGET_ARCH=microblaze 7059 bflt="yes" 7060 echo "TARGET_ABI32=y" >> $config_target_mak 7061 target_compiler=$cross_cc_microblaze 7062 ;; 7063 mips|mipsel) 7064 TARGET_ARCH=mips 7065 target_compiler=$cross_cc_mips 7066 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 7067 ;; 7068 mipsn32|mipsn32el) 7069 TARGET_ARCH=mips64 7070 TARGET_BASE_ARCH=mips 7071 target_compiler=$cross_cc_mipsn32 7072 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 7073 echo "TARGET_ABI32=y" >> $config_target_mak 7074 ;; 7075 mips64|mips64el) 7076 TARGET_ARCH=mips64 7077 TARGET_BASE_ARCH=mips 7078 target_compiler=$cross_cc_mips64 7079 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 7080 ;; 7081 moxie) 7082 target_compiler=$cross_cc_moxie 7083 ;; 7084 nios2) 7085 target_compiler=$cross_cc_nios2 7086 ;; 7087 or1k) 7088 target_compiler=$cross_cc_or1k 7089 TARGET_ARCH=openrisc 7090 TARGET_BASE_ARCH=openrisc 7091 ;; 7092 ppc) 7093 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 7094 target_compiler=$cross_cc_powerpc 7095 ;; 7096 ppc64) 7097 TARGET_BASE_ARCH=ppc 7098 TARGET_ABI_DIR=ppc 7099 mttcg=yes 7100 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7101 target_compiler=$cross_cc_ppc64 7102 ;; 7103 ppc64le) 7104 TARGET_ARCH=ppc64 7105 TARGET_BASE_ARCH=ppc 7106 TARGET_ABI_DIR=ppc 7107 mttcg=yes 7108 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7109 target_compiler=$cross_cc_ppc64le 7110 ;; 7111 ppc64abi32) 7112 TARGET_ARCH=ppc64 7113 TARGET_BASE_ARCH=ppc 7114 TARGET_ABI_DIR=ppc 7115 echo "TARGET_ABI32=y" >> $config_target_mak 7116 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7117 target_compiler=$cross_cc_ppc64abi32 7118 ;; 7119 riscv32) 7120 TARGET_BASE_ARCH=riscv 7121 TARGET_ABI_DIR=riscv 7122 mttcg=yes 7123 target_compiler=$cross_cc_riscv32 7124 ;; 7125 riscv64) 7126 TARGET_BASE_ARCH=riscv 7127 TARGET_ABI_DIR=riscv 7128 mttcg=yes 7129 target_compiler=$cross_cc_riscv64 7130 ;; 7131 sh4|sh4eb) 7132 TARGET_ARCH=sh4 7133 bflt="yes" 7134 target_compiler=$cross_cc_sh4 7135 ;; 7136 sparc) 7137 target_compiler=$cross_cc_sparc 7138 ;; 7139 sparc64) 7140 TARGET_BASE_ARCH=sparc 7141 target_compiler=$cross_cc_sparc64 7142 ;; 7143 sparc32plus) 7144 TARGET_ARCH=sparc64 7145 TARGET_BASE_ARCH=sparc 7146 TARGET_ABI_DIR=sparc 7147 target_compiler=$cross_cc_sparc32plus 7148 echo "TARGET_ABI32=y" >> $config_target_mak 7149 ;; 7150 s390x) 7151 mttcg=yes 7152 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 7153 target_compiler=$cross_cc_s390x 7154 ;; 7155 tilegx) 7156 target_compiler=$cross_cc_tilegx 7157 ;; 7158 tricore) 7159 target_compiler=$cross_cc_tricore 7160 ;; 7161 unicore32) 7162 target_compiler=$cross_cc_unicore32 7163 ;; 7164 xtensa|xtensaeb) 7165 TARGET_ARCH=xtensa 7166 mttcg="yes" 7167 target_compiler=$cross_cc_xtensa 7168 ;; 7169 *) 7170 error_exit "Unsupported target CPU" 7171 ;; 7172esac 7173# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 7174if [ "$TARGET_BASE_ARCH" = "" ]; then 7175 TARGET_BASE_ARCH=$TARGET_ARCH 7176fi 7177 7178# Do we have a cross compiler for this target? 7179if has $target_compiler; then 7180 7181 write_c_skeleton 7182 7183 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then 7184 # For host systems we might get away with building without -static 7185 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then 7186 target_compiler="" 7187 else 7188 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7189 target_compiler_static="n" 7190 fi 7191 else 7192 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7193 target_compiler_static="y" 7194 fi 7195else 7196 target_compiler="" 7197fi 7198 7199symlink "$source_path/Makefile.target" "$target_dir/Makefile" 7200 7201upper() { 7202 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 7203} 7204 7205target_arch_name="$(upper $TARGET_ARCH)" 7206echo "TARGET_$target_arch_name=y" >> $config_target_mak 7207echo "TARGET_NAME=$target_name" >> $config_target_mak 7208echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 7209if [ "$TARGET_ABI_DIR" = "" ]; then 7210 TARGET_ABI_DIR=$TARGET_ARCH 7211fi 7212echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 7213if [ "$HOST_VARIANT_DIR" != "" ]; then 7214 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 7215fi 7216 7217if supported_xen_target $target; then 7218 echo "CONFIG_XEN=y" >> $config_target_mak 7219 if test "$xen_pci_passthrough" = yes; then 7220 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 7221 fi 7222fi 7223if supported_kvm_target $target; then 7224 echo "CONFIG_KVM=y" >> $config_target_mak 7225 if test "$vhost_net" = "yes" ; then 7226 echo "CONFIG_VHOST_NET=y" >> $config_target_mak 7227 if test "$vhost_user" = "yes" ; then 7228 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak 7229 fi 7230 fi 7231fi 7232if supported_hax_target $target; then 7233 echo "CONFIG_HAX=y" >> $config_target_mak 7234fi 7235if supported_hvf_target $target; then 7236 echo "CONFIG_HVF=y" >> $config_target_mak 7237fi 7238if supported_whpx_target $target; then 7239 echo "CONFIG_WHPX=y" >> $config_target_mak 7240fi 7241if test "$target_bigendian" = "yes" ; then 7242 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 7243fi 7244if test "$target_softmmu" = "yes" ; then 7245 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 7246 if test "$mttcg" = "yes" ; then 7247 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 7248 fi 7249fi 7250if test "$target_user_only" = "yes" ; then 7251 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 7252 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 7253fi 7254if test "$target_linux_user" = "yes" ; then 7255 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 7256fi 7257list="" 7258if test ! -z "$gdb_xml_files" ; then 7259 for x in $gdb_xml_files; do 7260 list="$list $source_path/gdb-xml/$x" 7261 done 7262 echo "TARGET_XML_FILES=$list" >> $config_target_mak 7263fi 7264 7265if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then 7266 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 7267fi 7268if test "$target_bsd_user" = "yes" ; then 7269 echo "CONFIG_BSD_USER=y" >> $config_target_mak 7270fi 7271 7272if test -n "$target_compiler"; then 7273 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak 7274 7275 if test -n "$target_compiler_static"; then 7276 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak 7277 fi 7278 7279 if test -n "$target_compiler_cflags"; then 7280 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak 7281 fi 7282fi 7283 7284 7285# generate QEMU_CFLAGS/LDFLAGS for targets 7286 7287cflags="" 7288ldflags="" 7289 7290disas_config() { 7291 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 7292 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 7293} 7294 7295for i in $ARCH $TARGET_BASE_ARCH ; do 7296 case "$i" in 7297 alpha) 7298 disas_config "ALPHA" 7299 ;; 7300 aarch64) 7301 if test -n "${cxx}"; then 7302 disas_config "ARM_A64" 7303 fi 7304 ;; 7305 arm) 7306 disas_config "ARM" 7307 if test -n "${cxx}"; then 7308 disas_config "ARM_A64" 7309 fi 7310 ;; 7311 cris) 7312 disas_config "CRIS" 7313 ;; 7314 hppa) 7315 disas_config "HPPA" 7316 ;; 7317 i386|x86_64|x32) 7318 disas_config "I386" 7319 ;; 7320 lm32) 7321 disas_config "LM32" 7322 ;; 7323 m68k) 7324 disas_config "M68K" 7325 ;; 7326 microblaze*) 7327 disas_config "MICROBLAZE" 7328 ;; 7329 mips*) 7330 disas_config "MIPS" 7331 ;; 7332 moxie*) 7333 disas_config "MOXIE" 7334 ;; 7335 nios2) 7336 disas_config "NIOS2" 7337 ;; 7338 or1k) 7339 disas_config "OPENRISC" 7340 ;; 7341 ppc*) 7342 disas_config "PPC" 7343 ;; 7344 riscv) 7345 disas_config "RISCV" 7346 ;; 7347 s390*) 7348 disas_config "S390" 7349 ;; 7350 sh4) 7351 disas_config "SH4" 7352 ;; 7353 sparc*) 7354 disas_config "SPARC" 7355 ;; 7356 xtensa*) 7357 disas_config "XTENSA" 7358 ;; 7359 esac 7360done 7361if test "$tcg_interpreter" = "yes" ; then 7362 disas_config "TCI" 7363fi 7364 7365case "$ARCH" in 7366alpha) 7367 # Ensure there's only a single GP 7368 cflags="-msmall-data $cflags" 7369;; 7370esac 7371 7372if test "$gprof" = "yes" ; then 7373 echo "TARGET_GPROF=yes" >> $config_target_mak 7374 if test "$target_linux_user" = "yes" ; then 7375 cflags="-p $cflags" 7376 ldflags="-p $ldflags" 7377 fi 7378 if test "$target_softmmu" = "yes" ; then 7379 ldflags="-p $ldflags" 7380 echo "GPROF_CFLAGS=-p" >> $config_target_mak 7381 fi 7382fi 7383 7384if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then 7385 ldflags="$ldflags $textseg_ldflags" 7386fi 7387 7388# Newer kernels on s390 check for an S390_PGSTE program header and 7389# enable the pgste page table extensions in that case. This makes 7390# the vm.allocate_pgste sysctl unnecessary. We enable this program 7391# header if 7392# - we build on s390x 7393# - we build the system emulation for s390x (qemu-system-s390x) 7394# - KVM is enabled 7395# - the linker supports --s390-pgste 7396if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then 7397 if ld_has --s390-pgste ; then 7398 ldflags="-Wl,--s390-pgste $ldflags" 7399 fi 7400fi 7401 7402echo "LDFLAGS+=$ldflags" >> $config_target_mak 7403echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 7404 7405done # for target in $targets 7406 7407if test -n "$enabled_cross_compilers"; then 7408 echo 7409 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers" 7410fi 7411 7412if [ "$fdt" = "git" ]; then 7413 echo "config-host.h: subdir-dtc" >> $config_host_mak 7414fi 7415if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 7416 echo "config-host.h: subdir-capstone" >> $config_host_mak 7417fi 7418if test -n "$LIBCAPSTONE"; then 7419 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 7420fi 7421 7422if test "$numa" = "yes"; then 7423 echo "CONFIG_NUMA=y" >> $config_host_mak 7424fi 7425 7426if test "$ccache_cpp2" = "yes"; then 7427 echo "export CCACHE_CPP2=y" >> $config_host_mak 7428fi 7429 7430# build tree in object directory in case the source is not in the current directory 7431DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm" 7432DIRS="$DIRS tests/fp" 7433DIRS="$DIRS docs docs/interop fsdev scsi" 7434DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 7435DIRS="$DIRS roms/seabios roms/vgabios" 7436FILES="Makefile tests/tcg/Makefile qdict-test-data.txt" 7437FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 7438FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 7439FILES="$FILES tests/fp/Makefile" 7440FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps" 7441FILES="$FILES pc-bios/spapr-rtas/Makefile" 7442FILES="$FILES pc-bios/s390-ccw/Makefile" 7443FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile" 7444FILES="$FILES pc-bios/qemu-icon.bmp" 7445FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit 7446for bios_file in \ 7447 $source_path/pc-bios/*.bin \ 7448 $source_path/pc-bios/*.lid \ 7449 $source_path/pc-bios/*.aml \ 7450 $source_path/pc-bios/*.rom \ 7451 $source_path/pc-bios/*.dtb \ 7452 $source_path/pc-bios/*.img \ 7453 $source_path/pc-bios/openbios-* \ 7454 $source_path/pc-bios/u-boot.* \ 7455 $source_path/pc-bios/palcode-* 7456do 7457 FILES="$FILES pc-bios/$(basename $bios_file)" 7458done 7459for test_file in $(find $source_path/tests/acpi-test-data -type f) 7460do 7461 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')" 7462done 7463for test_file in $(find $source_path/tests/hex-loader-check-data -type f) 7464do 7465 FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')" 7466done 7467mkdir -p $DIRS 7468for f in $FILES ; do 7469 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 7470 symlink "$source_path/$f" "$f" 7471 fi 7472done 7473 7474# temporary config to build submodules 7475for rom in seabios vgabios ; do 7476 config_mak=roms/$rom/config.mak 7477 echo "# Automatically generated by configure - do not modify" > $config_mak 7478 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 7479 echo "AS=$as" >> $config_mak 7480 echo "CCAS=$ccas" >> $config_mak 7481 echo "CC=$cc" >> $config_mak 7482 echo "BCC=bcc" >> $config_mak 7483 echo "CPP=$cpp" >> $config_mak 7484 echo "OBJCOPY=objcopy" >> $config_mak 7485 echo "IASL=$iasl" >> $config_mak 7486 echo "LD=$ld" >> $config_mak 7487 echo "RANLIB=$ranlib" >> $config_mak 7488done 7489 7490# set up tests data directory 7491for tests_subdir in acceptance data; do 7492 if [ ! -e tests/$tests_subdir ]; then 7493 symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir 7494 fi 7495done 7496 7497# set up qemu-iotests in this build directory 7498iotests_common_env="tests/qemu-iotests/common.env" 7499iotests_check="tests/qemu-iotests/check" 7500 7501echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 7502echo >> "$iotests_common_env" 7503echo "export PYTHON='$python'" >> "$iotests_common_env" 7504 7505if [ ! -e "$iotests_check" ]; then 7506 symlink "$source_path/$iotests_check" "$iotests_check" 7507fi 7508 7509# Save the configure command line for later reuse. 7510cat <<EOD >config.status 7511#!/bin/sh 7512# Generated by configure. 7513# Run this file to recreate the current configuration. 7514# Compiler output produced by configure, useful for debugging 7515# configure, is in config.log if it exists. 7516EOD 7517 7518preserve_env() { 7519 envname=$1 7520 7521 eval envval=\$$envname 7522 7523 if test -n "$envval" 7524 then 7525 echo "$envname='$envval'" >> config.status 7526 echo "export $envname" >> config.status 7527 else 7528 echo "unset $envname" >> config.status 7529 fi 7530} 7531 7532# Preserve various env variables that influence what 7533# features/build target configure will detect 7534preserve_env AR 7535preserve_env AS 7536preserve_env CC 7537preserve_env CPP 7538preserve_env CXX 7539preserve_env INSTALL 7540preserve_env LD 7541preserve_env LD_LIBRARY_PATH 7542preserve_env LIBTOOL 7543preserve_env MAKE 7544preserve_env NM 7545preserve_env OBJCOPY 7546preserve_env PATH 7547preserve_env PKG_CONFIG 7548preserve_env PKG_CONFIG_LIBDIR 7549preserve_env PKG_CONFIG_PATH 7550preserve_env PYTHON 7551preserve_env SDL_CONFIG 7552preserve_env SDL2_CONFIG 7553preserve_env SMBD 7554preserve_env STRIP 7555preserve_env WINDRES 7556 7557printf "exec" >>config.status 7558printf " '%s'" "$0" "$@" >>config.status 7559echo ' "$@"' >>config.status 7560chmod +x config.status 7561 7562rm -r "$TMPDIR1" 7563