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# g_test_trap_subprocess added in 2.38. Used by some tests. 3535glib_subprocess=yes 3536if ! $pkg_config --atleast-version=2.38 glib-2.0; then 3537 glib_subprocess=no 3538fi 3539 3540# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 3541cat > $TMPC << EOF 3542#include <glib.h> 3543int main(void) { return 0; } 3544EOF 3545if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3546 if cc_has_warning_flag "-Wno-unknown-attributes"; then 3547 glib_cflags="-Wno-unknown-attributes $glib_cflags" 3548 CFLAGS="-Wno-unknown-attributes $CFLAGS" 3549 fi 3550fi 3551 3552########################################## 3553# SHA command probe for modules 3554if test "$modules" = yes; then 3555 shacmd_probe="sha1sum sha1 shasum" 3556 for c in $shacmd_probe; do 3557 if has $c; then 3558 shacmd="$c" 3559 break 3560 fi 3561 done 3562 if test "$shacmd" = ""; then 3563 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 3564 fi 3565fi 3566 3567########################################## 3568# pixman support probe 3569 3570if test "$want_tools" = "no" -a "$softmmu" = "no"; then 3571 pixman_cflags= 3572 pixman_libs= 3573elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then 3574 pixman_cflags=$($pkg_config --cflags pixman-1) 3575 pixman_libs=$($pkg_config --libs pixman-1) 3576else 3577 error_exit "pixman >= 0.21.8 not present." \ 3578 "Please install the pixman devel package." 3579fi 3580 3581########################################## 3582# libmpathpersist probe 3583 3584if test "$mpath" != "no" ; then 3585 # probe for the new API 3586 cat > $TMPC <<EOF 3587#include <libudev.h> 3588#include <mpath_persist.h> 3589unsigned mpath_mx_alloc_len = 1024; 3590int logsink; 3591static struct config *multipath_conf; 3592extern struct udev *udev; 3593extern struct config *get_multipath_config(void); 3594extern void put_multipath_config(struct config *conf); 3595struct udev *udev; 3596struct config *get_multipath_config(void) { return multipath_conf; } 3597void put_multipath_config(struct config *conf) { } 3598 3599int main(void) { 3600 udev = udev_new(); 3601 multipath_conf = mpath_lib_init(); 3602 return 0; 3603} 3604EOF 3605 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3606 mpathpersist=yes 3607 mpathpersist_new_api=yes 3608 else 3609 # probe for the old API 3610 cat > $TMPC <<EOF 3611#include <libudev.h> 3612#include <mpath_persist.h> 3613unsigned mpath_mx_alloc_len = 1024; 3614int logsink; 3615int main(void) { 3616 struct udev *udev = udev_new(); 3617 mpath_lib_init(udev); 3618 return 0; 3619} 3620EOF 3621 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3622 mpathpersist=yes 3623 mpathpersist_new_api=no 3624 else 3625 mpathpersist=no 3626 fi 3627 fi 3628else 3629 mpathpersist=no 3630fi 3631 3632########################################## 3633# libcap probe 3634 3635if test "$cap" != "no" ; then 3636 cat > $TMPC <<EOF 3637#include <stdio.h> 3638#include <sys/capability.h> 3639int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; } 3640EOF 3641 if compile_prog "" "-lcap" ; then 3642 cap=yes 3643 else 3644 cap=no 3645 fi 3646fi 3647 3648########################################## 3649# pthread probe 3650PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 3651 3652pthread=no 3653cat > $TMPC << EOF 3654#include <pthread.h> 3655static void *f(void *p) { return NULL; } 3656int main(void) { 3657 pthread_t thread; 3658 pthread_create(&thread, 0, f, 0); 3659 return 0; 3660} 3661EOF 3662if compile_prog "" "" ; then 3663 pthread=yes 3664else 3665 for pthread_lib in $PTHREADLIBS_LIST; do 3666 if compile_prog "" "$pthread_lib" ; then 3667 pthread=yes 3668 found=no 3669 for lib_entry in $LIBS; do 3670 if test "$lib_entry" = "$pthread_lib"; then 3671 found=yes 3672 break 3673 fi 3674 done 3675 if test "$found" = "no"; then 3676 LIBS="$pthread_lib $LIBS" 3677 libs_qga="$pthread_lib $libs_qga" 3678 fi 3679 PTHREAD_LIB="$pthread_lib" 3680 break 3681 fi 3682 done 3683fi 3684 3685if test "$mingw32" != yes -a "$pthread" = no; then 3686 error_exit "pthread check failed" \ 3687 "Make sure to have the pthread libs and headers installed." 3688fi 3689 3690# check for pthread_setname_np 3691pthread_setname_np=no 3692cat > $TMPC << EOF 3693#include <pthread.h> 3694 3695static void *f(void *p) { return NULL; } 3696int main(void) 3697{ 3698 pthread_t thread; 3699 pthread_create(&thread, 0, f, 0); 3700 pthread_setname_np(thread, "QEMU"); 3701 return 0; 3702} 3703EOF 3704if compile_prog "" "$pthread_lib" ; then 3705 pthread_setname_np=yes 3706fi 3707 3708########################################## 3709# rbd probe 3710if test "$rbd" != "no" ; then 3711 cat > $TMPC <<EOF 3712#include <stdio.h> 3713#include <rbd/librbd.h> 3714int main(void) { 3715 rados_t cluster; 3716 rados_create(&cluster, NULL); 3717 return 0; 3718} 3719EOF 3720 rbd_libs="-lrbd -lrados" 3721 if compile_prog "" "$rbd_libs" ; then 3722 rbd=yes 3723 else 3724 if test "$rbd" = "yes" ; then 3725 feature_not_found "rados block device" "Install librbd/ceph devel" 3726 fi 3727 rbd=no 3728 fi 3729fi 3730 3731########################################## 3732# libssh2 probe 3733min_libssh2_version=1.2.8 3734if test "$libssh2" != "no" ; then 3735 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then 3736 libssh2_cflags=$($pkg_config libssh2 --cflags) 3737 libssh2_libs=$($pkg_config libssh2 --libs) 3738 libssh2=yes 3739 else 3740 if test "$libssh2" = "yes" ; then 3741 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2" 3742 fi 3743 libssh2=no 3744 fi 3745fi 3746 3747########################################## 3748# libssh2_sftp_fsync probe 3749 3750if test "$libssh2" = "yes"; then 3751 cat > $TMPC <<EOF 3752#include <stdio.h> 3753#include <libssh2.h> 3754#include <libssh2_sftp.h> 3755int main(void) { 3756 LIBSSH2_SESSION *session; 3757 LIBSSH2_SFTP *sftp; 3758 LIBSSH2_SFTP_HANDLE *sftp_handle; 3759 session = libssh2_session_init (); 3760 sftp = libssh2_sftp_init (session); 3761 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0); 3762 libssh2_sftp_fsync (sftp_handle); 3763 return 0; 3764} 3765EOF 3766 # libssh2_cflags/libssh2_libs defined in previous test. 3767 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then 3768 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS" 3769 fi 3770fi 3771 3772########################################## 3773# linux-aio probe 3774 3775if test "$linux_aio" != "no" ; then 3776 cat > $TMPC <<EOF 3777#include <libaio.h> 3778#include <sys/eventfd.h> 3779#include <stddef.h> 3780int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 3781EOF 3782 if compile_prog "" "-laio" ; then 3783 linux_aio=yes 3784 else 3785 if test "$linux_aio" = "yes" ; then 3786 feature_not_found "linux AIO" "Install libaio devel" 3787 fi 3788 linux_aio=no 3789 fi 3790fi 3791 3792########################################## 3793# TPM passthrough is only on x86 Linux 3794 3795if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then 3796 tpm_passthrough=$tpm 3797else 3798 tpm_passthrough=no 3799fi 3800 3801# TPM emulator is for all posix systems 3802if test "$mingw32" != "yes"; then 3803 tpm_emulator=$tpm 3804else 3805 tpm_emulator=no 3806fi 3807########################################## 3808# attr probe 3809 3810if test "$attr" != "no" ; then 3811 cat > $TMPC <<EOF 3812#include <stdio.h> 3813#include <sys/types.h> 3814#ifdef CONFIG_LIBATTR 3815#include <attr/xattr.h> 3816#else 3817#include <sys/xattr.h> 3818#endif 3819int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 3820EOF 3821 if compile_prog "" "" ; then 3822 attr=yes 3823 # Older distros have <attr/xattr.h>, and need -lattr: 3824 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 3825 attr=yes 3826 LIBS="-lattr $LIBS" 3827 libattr=yes 3828 else 3829 if test "$attr" = "yes" ; then 3830 feature_not_found "ATTR" "Install libc6 or libattr devel" 3831 fi 3832 attr=no 3833 fi 3834fi 3835 3836########################################## 3837# iovec probe 3838cat > $TMPC <<EOF 3839#include <sys/types.h> 3840#include <sys/uio.h> 3841#include <unistd.h> 3842int main(void) { return sizeof(struct iovec); } 3843EOF 3844iovec=no 3845if compile_prog "" "" ; then 3846 iovec=yes 3847fi 3848 3849########################################## 3850# preadv probe 3851cat > $TMPC <<EOF 3852#include <sys/types.h> 3853#include <sys/uio.h> 3854#include <unistd.h> 3855int main(void) { return preadv(0, 0, 0, 0); } 3856EOF 3857preadv=no 3858if compile_prog "" "" ; then 3859 preadv=yes 3860fi 3861 3862########################################## 3863# fdt probe 3864# fdt support is mandatory for at least some target architectures, 3865# so insist on it if we're building those system emulators. 3866fdt_required=no 3867for target in $target_list; do 3868 case $target in 3869 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu) 3870 fdt_required=yes 3871 ;; 3872 esac 3873done 3874 3875if test "$fdt_required" = "yes"; then 3876 if test "$fdt" = "no"; then 3877 error_exit "fdt disabled but some requested targets require it." \ 3878 "You can turn off fdt only if you also disable all the system emulation" \ 3879 "targets which need it (by specifying a cut down --target-list)." 3880 fi 3881 fdt=yes 3882fi 3883 3884if test "$fdt" != "no" ; then 3885 fdt_libs="-lfdt" 3886 # explicitly check for libfdt_env.h as it is missing in some stable installs 3887 # and test for required functions to make sure we are on a version >= 1.4.2 3888 cat > $TMPC << EOF 3889#include <libfdt.h> 3890#include <libfdt_env.h> 3891int main(void) { fdt_first_subnode(0, 0); return 0; } 3892EOF 3893 if compile_prog "" "$fdt_libs" ; then 3894 # system DTC is good - use it 3895 fdt=system 3896 else 3897 # have GIT checkout, so activate dtc submodule 3898 if test -e "${source_path}/.git" ; then 3899 git_submodules="${git_submodules} dtc" 3900 fi 3901 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then 3902 fdt=git 3903 mkdir -p dtc 3904 if [ "$pwd_is_source_path" != "y" ] ; then 3905 symlink "$source_path/dtc/Makefile" "dtc/Makefile" 3906 symlink "$source_path/dtc/scripts" "dtc/scripts" 3907 fi 3908 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt" 3909 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt" 3910 fdt_libs="$fdt_libs" 3911 elif test "$fdt" = "yes" ; then 3912 # Not a git build & no libfdt found, prompt for system install 3913 error_exit "DTC (libfdt) version >= 1.4.2 not present." \ 3914 "Please install the DTC (libfdt) devel package" 3915 else 3916 # don't have and don't want 3917 fdt_libs= 3918 fdt=no 3919 fi 3920 fi 3921fi 3922 3923libs_softmmu="$libs_softmmu $fdt_libs" 3924 3925########################################## 3926# opengl probe (for sdl2, gtk, milkymist-tmu2) 3927 3928if test "$opengl" != "no" ; then 3929 opengl_pkgs="epoxy gbm" 3930 if $pkg_config $opengl_pkgs; then 3931 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 3932 opengl_libs="$($pkg_config --libs $opengl_pkgs)" 3933 opengl=yes 3934 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 3935 gtk_gl="yes" 3936 fi 3937 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" 3938 else 3939 if test "$opengl" = "yes" ; then 3940 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 3941 fi 3942 opengl_cflags="" 3943 opengl_libs="" 3944 opengl=no 3945 fi 3946fi 3947 3948if test "$opengl" = "yes"; then 3949 cat > $TMPC << EOF 3950#include <epoxy/egl.h> 3951#ifndef EGL_MESA_image_dma_buf_export 3952# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 3953#endif 3954int main(void) { return 0; } 3955EOF 3956 if compile_prog "" "" ; then 3957 opengl_dmabuf=yes 3958 fi 3959fi 3960 3961########################################## 3962# libxml2 probe 3963if test "$libxml2" != "no" ; then 3964 if $pkg_config --exists libxml-2.0; then 3965 libxml2="yes" 3966 libxml2_cflags=$($pkg_config --cflags libxml-2.0) 3967 libxml2_libs=$($pkg_config --libs libxml-2.0) 3968 else 3969 if test "$libxml2" = "yes"; then 3970 feature_not_found "libxml2" "Install libxml2 devel" 3971 fi 3972 libxml2="no" 3973 fi 3974fi 3975 3976########################################## 3977# glusterfs probe 3978if test "$glusterfs" != "no" ; then 3979 if $pkg_config --atleast-version=3 glusterfs-api; then 3980 glusterfs="yes" 3981 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 3982 glusterfs_libs=$($pkg_config --libs glusterfs-api) 3983 if $pkg_config --atleast-version=4 glusterfs-api; then 3984 glusterfs_xlator_opt="yes" 3985 fi 3986 if $pkg_config --atleast-version=5 glusterfs-api; then 3987 glusterfs_discard="yes" 3988 fi 3989 if $pkg_config --atleast-version=6 glusterfs-api; then 3990 glusterfs_fallocate="yes" 3991 glusterfs_zerofill="yes" 3992 fi 3993 else 3994 if test "$glusterfs" = "yes" ; then 3995 feature_not_found "GlusterFS backend support" \ 3996 "Install glusterfs-api devel >= 3" 3997 fi 3998 glusterfs="no" 3999 fi 4000fi 4001 4002# Check for inotify functions when we are building linux-user 4003# emulator. This is done because older glibc versions don't 4004# have syscall stubs for these implemented. In that case we 4005# don't provide them even if kernel supports them. 4006# 4007inotify=no 4008cat > $TMPC << EOF 4009#include <sys/inotify.h> 4010 4011int 4012main(void) 4013{ 4014 /* try to start inotify */ 4015 return inotify_init(); 4016} 4017EOF 4018if compile_prog "" "" ; then 4019 inotify=yes 4020fi 4021 4022inotify1=no 4023cat > $TMPC << EOF 4024#include <sys/inotify.h> 4025 4026int 4027main(void) 4028{ 4029 /* try to start inotify */ 4030 return inotify_init1(0); 4031} 4032EOF 4033if compile_prog "" "" ; then 4034 inotify1=yes 4035fi 4036 4037# check if pipe2 is there 4038pipe2=no 4039cat > $TMPC << EOF 4040#include <unistd.h> 4041#include <fcntl.h> 4042 4043int main(void) 4044{ 4045 int pipefd[2]; 4046 return pipe2(pipefd, O_CLOEXEC); 4047} 4048EOF 4049if compile_prog "" "" ; then 4050 pipe2=yes 4051fi 4052 4053# check if accept4 is there 4054accept4=no 4055cat > $TMPC << EOF 4056#include <sys/socket.h> 4057#include <stddef.h> 4058 4059int main(void) 4060{ 4061 accept4(0, NULL, NULL, SOCK_CLOEXEC); 4062 return 0; 4063} 4064EOF 4065if compile_prog "" "" ; then 4066 accept4=yes 4067fi 4068 4069# check if tee/splice is there. vmsplice was added same time. 4070splice=no 4071cat > $TMPC << EOF 4072#include <unistd.h> 4073#include <fcntl.h> 4074#include <limits.h> 4075 4076int main(void) 4077{ 4078 int len, fd = 0; 4079 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 4080 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 4081 return 0; 4082} 4083EOF 4084if compile_prog "" "" ; then 4085 splice=yes 4086fi 4087 4088########################################## 4089# libnuma probe 4090 4091if test "$numa" != "no" ; then 4092 cat > $TMPC << EOF 4093#include <numa.h> 4094int main(void) { return numa_available(); } 4095EOF 4096 4097 if compile_prog "" "-lnuma" ; then 4098 numa=yes 4099 libs_softmmu="-lnuma $libs_softmmu" 4100 else 4101 if test "$numa" = "yes" ; then 4102 feature_not_found "numa" "install numactl devel" 4103 fi 4104 numa=no 4105 fi 4106fi 4107 4108if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 4109 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 4110 exit 1 4111fi 4112 4113# Even if malloc_trim() is available, these non-libc memory allocators 4114# do not support it. 4115if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then 4116 if test "$malloc_trim" = "yes" ; then 4117 echo "Disabling malloc_trim with non-libc memory allocator" 4118 fi 4119 malloc_trim="no" 4120fi 4121 4122####################################### 4123# malloc_trim 4124 4125if test "$malloc_trim" != "no" ; then 4126 cat > $TMPC << EOF 4127#include <malloc.h> 4128int main(void) { malloc_trim(0); return 0; } 4129EOF 4130 if compile_prog "" "" ; then 4131 malloc_trim="yes" 4132 else 4133 malloc_trim="no" 4134 fi 4135fi 4136 4137########################################## 4138# tcmalloc probe 4139 4140if test "$tcmalloc" = "yes" ; then 4141 cat > $TMPC << EOF 4142#include <stdlib.h> 4143int main(void) { malloc(1); return 0; } 4144EOF 4145 4146 if compile_prog "" "-ltcmalloc" ; then 4147 LIBS="-ltcmalloc $LIBS" 4148 else 4149 feature_not_found "tcmalloc" "install gperftools devel" 4150 fi 4151fi 4152 4153########################################## 4154# jemalloc probe 4155 4156if test "$jemalloc" = "yes" ; then 4157 cat > $TMPC << EOF 4158#include <stdlib.h> 4159int main(void) { malloc(1); return 0; } 4160EOF 4161 4162 if compile_prog "" "-ljemalloc" ; then 4163 LIBS="-ljemalloc $LIBS" 4164 else 4165 feature_not_found "jemalloc" "install jemalloc devel" 4166 fi 4167fi 4168 4169########################################## 4170# signalfd probe 4171signalfd="no" 4172cat > $TMPC << EOF 4173#include <unistd.h> 4174#include <sys/syscall.h> 4175#include <signal.h> 4176int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4177EOF 4178 4179if compile_prog "" "" ; then 4180 signalfd=yes 4181fi 4182 4183# check if eventfd is supported 4184eventfd=no 4185cat > $TMPC << EOF 4186#include <sys/eventfd.h> 4187 4188int main(void) 4189{ 4190 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4191} 4192EOF 4193if compile_prog "" "" ; then 4194 eventfd=yes 4195fi 4196 4197# check if memfd is supported 4198memfd=no 4199cat > $TMPC << EOF 4200#include <sys/mman.h> 4201 4202int main(void) 4203{ 4204 return memfd_create("foo", MFD_ALLOW_SEALING); 4205} 4206EOF 4207if compile_prog "" "" ; then 4208 memfd=yes 4209fi 4210 4211 4212 4213# check for fallocate 4214fallocate=no 4215cat > $TMPC << EOF 4216#include <fcntl.h> 4217 4218int main(void) 4219{ 4220 fallocate(0, 0, 0, 0); 4221 return 0; 4222} 4223EOF 4224if compile_prog "" "" ; then 4225 fallocate=yes 4226fi 4227 4228# check for fallocate hole punching 4229fallocate_punch_hole=no 4230cat > $TMPC << EOF 4231#include <fcntl.h> 4232#include <linux/falloc.h> 4233 4234int main(void) 4235{ 4236 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4237 return 0; 4238} 4239EOF 4240if compile_prog "" "" ; then 4241 fallocate_punch_hole=yes 4242fi 4243 4244# check that fallocate supports range zeroing inside the file 4245fallocate_zero_range=no 4246cat > $TMPC << EOF 4247#include <fcntl.h> 4248#include <linux/falloc.h> 4249 4250int main(void) 4251{ 4252 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4253 return 0; 4254} 4255EOF 4256if compile_prog "" "" ; then 4257 fallocate_zero_range=yes 4258fi 4259 4260# check for posix_fallocate 4261posix_fallocate=no 4262cat > $TMPC << EOF 4263#include <fcntl.h> 4264 4265int main(void) 4266{ 4267 posix_fallocate(0, 0, 0); 4268 return 0; 4269} 4270EOF 4271if compile_prog "" "" ; then 4272 posix_fallocate=yes 4273fi 4274 4275# check for sync_file_range 4276sync_file_range=no 4277cat > $TMPC << EOF 4278#include <fcntl.h> 4279 4280int main(void) 4281{ 4282 sync_file_range(0, 0, 0, 0); 4283 return 0; 4284} 4285EOF 4286if compile_prog "" "" ; then 4287 sync_file_range=yes 4288fi 4289 4290# check for linux/fiemap.h and FS_IOC_FIEMAP 4291fiemap=no 4292cat > $TMPC << EOF 4293#include <sys/ioctl.h> 4294#include <linux/fs.h> 4295#include <linux/fiemap.h> 4296 4297int main(void) 4298{ 4299 ioctl(0, FS_IOC_FIEMAP, 0); 4300 return 0; 4301} 4302EOF 4303if compile_prog "" "" ; then 4304 fiemap=yes 4305fi 4306 4307# check for dup3 4308dup3=no 4309cat > $TMPC << EOF 4310#include <unistd.h> 4311 4312int main(void) 4313{ 4314 dup3(0, 0, 0); 4315 return 0; 4316} 4317EOF 4318if compile_prog "" "" ; then 4319 dup3=yes 4320fi 4321 4322# check for ppoll support 4323ppoll=no 4324cat > $TMPC << EOF 4325#include <poll.h> 4326 4327int main(void) 4328{ 4329 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 4330 ppoll(&pfd, 1, 0, 0); 4331 return 0; 4332} 4333EOF 4334if compile_prog "" "" ; then 4335 ppoll=yes 4336fi 4337 4338# check for prctl(PR_SET_TIMERSLACK , ... ) support 4339prctl_pr_set_timerslack=no 4340cat > $TMPC << EOF 4341#include <sys/prctl.h> 4342 4343int main(void) 4344{ 4345 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4346 return 0; 4347} 4348EOF 4349if compile_prog "" "" ; then 4350 prctl_pr_set_timerslack=yes 4351fi 4352 4353# check for epoll support 4354epoll=no 4355cat > $TMPC << EOF 4356#include <sys/epoll.h> 4357 4358int main(void) 4359{ 4360 epoll_create(0); 4361 return 0; 4362} 4363EOF 4364if compile_prog "" "" ; then 4365 epoll=yes 4366fi 4367 4368# epoll_create1 is a later addition 4369# so we must check separately for its presence 4370epoll_create1=no 4371cat > $TMPC << EOF 4372#include <sys/epoll.h> 4373 4374int main(void) 4375{ 4376 /* Note that we use epoll_create1 as a value, not as 4377 * a function being called. This is necessary so that on 4378 * old SPARC glibc versions where the function was present in 4379 * the library but not declared in the header file we will 4380 * fail the configure check. (Otherwise we will get a compiler 4381 * warning but not an error, and will proceed to fail the 4382 * qemu compile where we compile with -Werror.) 4383 */ 4384 return (int)(uintptr_t)&epoll_create1; 4385} 4386EOF 4387if compile_prog "" "" ; then 4388 epoll_create1=yes 4389fi 4390 4391# check for sendfile support 4392sendfile=no 4393cat > $TMPC << EOF 4394#include <sys/sendfile.h> 4395 4396int main(void) 4397{ 4398 return sendfile(0, 0, 0, 0); 4399} 4400EOF 4401if compile_prog "" "" ; then 4402 sendfile=yes 4403fi 4404 4405# check for timerfd support (glibc 2.8 and newer) 4406timerfd=no 4407cat > $TMPC << EOF 4408#include <sys/timerfd.h> 4409 4410int main(void) 4411{ 4412 return(timerfd_create(CLOCK_REALTIME, 0)); 4413} 4414EOF 4415if compile_prog "" "" ; then 4416 timerfd=yes 4417fi 4418 4419# check for setns and unshare support 4420setns=no 4421cat > $TMPC << EOF 4422#include <sched.h> 4423 4424int main(void) 4425{ 4426 int ret; 4427 ret = setns(0, 0); 4428 ret = unshare(0); 4429 return ret; 4430} 4431EOF 4432if compile_prog "" "" ; then 4433 setns=yes 4434fi 4435 4436# clock_adjtime probe 4437clock_adjtime=no 4438cat > $TMPC <<EOF 4439#include <time.h> 4440 4441int main(void) 4442{ 4443 return clock_adjtime(0, 0); 4444} 4445EOF 4446clock_adjtime=no 4447if compile_prog "" "" ; then 4448 clock_adjtime=yes 4449fi 4450 4451# syncfs probe 4452syncfs=no 4453cat > $TMPC <<EOF 4454#include <unistd.h> 4455 4456int main(void) 4457{ 4458 return syncfs(0); 4459} 4460EOF 4461syncfs=no 4462if compile_prog "" "" ; then 4463 syncfs=yes 4464fi 4465 4466# Check if tools are available to build documentation. 4467if test "$docs" != "no" ; then 4468 if has makeinfo && has pod2man; then 4469 docs=yes 4470 else 4471 if test "$docs" = "yes" ; then 4472 feature_not_found "docs" "Install texinfo and Perl/perl-podlators" 4473 fi 4474 docs=no 4475 fi 4476fi 4477 4478# Search for bswap_32 function 4479byteswap_h=no 4480cat > $TMPC << EOF 4481#include <byteswap.h> 4482int main(void) { return bswap_32(0); } 4483EOF 4484if compile_prog "" "" ; then 4485 byteswap_h=yes 4486fi 4487 4488# Search for bswap32 function 4489bswap_h=no 4490cat > $TMPC << EOF 4491#include <sys/endian.h> 4492#include <sys/types.h> 4493#include <machine/bswap.h> 4494int main(void) { return bswap32(0); } 4495EOF 4496if compile_prog "" "" ; then 4497 bswap_h=yes 4498fi 4499 4500########################################## 4501# Do we have libiscsi >= 1.9.0 4502if test "$libiscsi" != "no" ; then 4503 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4504 libiscsi="yes" 4505 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4506 libiscsi_libs=$($pkg_config --libs libiscsi) 4507 else 4508 if test "$libiscsi" = "yes" ; then 4509 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4510 fi 4511 libiscsi="no" 4512 fi 4513fi 4514 4515########################################## 4516# Do we need libm 4517cat > $TMPC << EOF 4518#include <math.h> 4519int main(int argc, char **argv) { return isnan(sin((double)argc)); } 4520EOF 4521if compile_prog "" "" ; then 4522 : 4523elif compile_prog "" "-lm" ; then 4524 LIBS="-lm $LIBS" 4525 libs_qga="-lm $libs_qga" 4526else 4527 error_exit "libm check failed" 4528fi 4529 4530########################################## 4531# Do we need librt 4532# uClibc provides 2 versions of clock_gettime(), one with realtime 4533# support and one without. This means that the clock_gettime() don't 4534# need -lrt. We still need it for timer_create() so we check for this 4535# function in addition. 4536cat > $TMPC <<EOF 4537#include <signal.h> 4538#include <time.h> 4539int main(void) { 4540 timer_create(CLOCK_REALTIME, NULL, NULL); 4541 return clock_gettime(CLOCK_REALTIME, NULL); 4542} 4543EOF 4544 4545if compile_prog "" "" ; then 4546 : 4547# we need pthread for static linking. use previous pthread test result 4548elif compile_prog "" "$pthread_lib -lrt" ; then 4549 LIBS="$LIBS -lrt" 4550 libs_qga="$libs_qga -lrt" 4551fi 4552 4553if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \ 4554 "$haiku" != "yes" ; then 4555 libs_softmmu="-lutil $libs_softmmu" 4556fi 4557 4558########################################## 4559# spice probe 4560if test "$spice" != "no" ; then 4561 cat > $TMPC << EOF 4562#include <spice.h> 4563int main(void) { spice_server_new(); return 0; } 4564EOF 4565 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4566 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4567 if $pkg_config --atleast-version=0.12.0 spice-server && \ 4568 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4569 compile_prog "$spice_cflags" "$spice_libs" ; then 4570 spice="yes" 4571 libs_softmmu="$libs_softmmu $spice_libs" 4572 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 4573 spice_protocol_version=$($pkg_config --modversion spice-protocol) 4574 spice_server_version=$($pkg_config --modversion spice-server) 4575 else 4576 if test "$spice" = "yes" ; then 4577 feature_not_found "spice" \ 4578 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel" 4579 fi 4580 spice="no" 4581 fi 4582fi 4583 4584# check for smartcard support 4585if test "$smartcard" != "no"; then 4586 if $pkg_config --atleast-version=2.5.1 libcacard; then 4587 libcacard_cflags=$($pkg_config --cflags libcacard) 4588 libcacard_libs=$($pkg_config --libs libcacard) 4589 smartcard="yes" 4590 else 4591 if test "$smartcard" = "yes"; then 4592 feature_not_found "smartcard" "Install libcacard devel" 4593 fi 4594 smartcard="no" 4595 fi 4596fi 4597 4598# check for libusb 4599if test "$libusb" != "no" ; then 4600 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 4601 libusb="yes" 4602 libusb_cflags=$($pkg_config --cflags libusb-1.0) 4603 libusb_libs=$($pkg_config --libs libusb-1.0) 4604 else 4605 if test "$libusb" = "yes"; then 4606 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 4607 fi 4608 libusb="no" 4609 fi 4610fi 4611 4612# check for usbredirparser for usb network redirection support 4613if test "$usb_redir" != "no" ; then 4614 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 4615 usb_redir="yes" 4616 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4617 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 4618 else 4619 if test "$usb_redir" = "yes"; then 4620 feature_not_found "usb-redir" "Install usbredir devel" 4621 fi 4622 usb_redir="no" 4623 fi 4624fi 4625 4626########################################## 4627# check if we have VSS SDK headers for win 4628 4629if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then 4630 case "$vss_win32_sdk" in 4631 "") vss_win32_include="-isystem $source_path" ;; 4632 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4633 # handle path with spaces. So we symlink the headers into ".sdk/vss". 4634 vss_win32_include="-isystem $source_path/.sdk/vss" 4635 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4636 ;; 4637 *) vss_win32_include="-isystem $vss_win32_sdk" 4638 esac 4639 cat > $TMPC << EOF 4640#define __MIDL_user_allocate_free_DEFINED__ 4641#include <inc/win2003/vss.h> 4642int main(void) { return VSS_CTX_BACKUP; } 4643EOF 4644 if compile_prog "$vss_win32_include" "" ; then 4645 guest_agent_with_vss="yes" 4646 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4647 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4648 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4649 else 4650 if test "$vss_win32_sdk" != "" ; then 4651 echo "ERROR: Please download and install Microsoft VSS SDK:" 4652 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4653 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4654 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4655 echo "ERROR: The headers are extracted in the directory \`inc'." 4656 feature_not_found "VSS support" 4657 fi 4658 guest_agent_with_vss="no" 4659 fi 4660fi 4661 4662########################################## 4663# lookup Windows platform SDK (if not specified) 4664# The SDK is needed only to build .tlb (type library) file of guest agent 4665# VSS provider from the source. It is usually unnecessary because the 4666# pre-compiled .tlb file is included. 4667 4668if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then 4669 if test -z "$win_sdk"; then 4670 programfiles="$PROGRAMFILES" 4671 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4672 if test -n "$programfiles"; then 4673 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4674 else 4675 feature_not_found "Windows SDK" 4676 fi 4677 elif test "$win_sdk" = "no"; then 4678 win_sdk="" 4679 fi 4680fi 4681 4682########################################## 4683# check if mingw environment provides a recent ntddscsi.h 4684if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then 4685 cat > $TMPC << EOF 4686#include <windows.h> 4687#include <ntddscsi.h> 4688int main(void) { 4689#if !defined(IOCTL_SCSI_GET_ADDRESS) 4690#error Missing required ioctl definitions 4691#endif 4692 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4693 return addr.Lun; 4694} 4695EOF 4696 if compile_prog "" "" ; then 4697 guest_agent_ntddscsi=yes 4698 libs_qga="-lsetupapi $libs_qga" 4699 fi 4700fi 4701 4702########################################## 4703# virgl renderer probe 4704 4705if test "$virglrenderer" != "no" ; then 4706 cat > $TMPC << EOF 4707#include <virglrenderer.h> 4708int main(void) { virgl_renderer_poll(); return 0; } 4709EOF 4710 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4711 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 4712 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 4713 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4714 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4715 virglrenderer="yes" 4716 else 4717 if test "$virglrenderer" = "yes" ; then 4718 feature_not_found "virglrenderer" 4719 fi 4720 virglrenderer="no" 4721 fi 4722fi 4723 4724########################################## 4725# capstone 4726 4727case "$capstone" in 4728 "" | yes) 4729 if $pkg_config capstone; then 4730 capstone=system 4731 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then 4732 capstone=git 4733 elif test -e "${source_path}/capstone/Makefile" ; then 4734 capstone=internal 4735 elif test -z "$capstone" ; then 4736 capstone=no 4737 else 4738 feature_not_found "capstone" "Install capstone devel or git submodule" 4739 fi 4740 ;; 4741 4742 system) 4743 if ! $pkg_config capstone; then 4744 feature_not_found "capstone" "Install capstone devel" 4745 fi 4746 ;; 4747esac 4748 4749case "$capstone" in 4750 git | internal) 4751 if test "$capstone" = git; then 4752 git_submodules="${git_submodules} capstone" 4753 fi 4754 mkdir -p capstone 4755 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include" 4756 if test "$mingw32" = "yes"; then 4757 LIBCAPSTONE=capstone.lib 4758 else 4759 LIBCAPSTONE=libcapstone.a 4760 fi 4761 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS" 4762 ;; 4763 4764 system) 4765 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" 4766 LIBS="$($pkg_config --libs capstone) $LIBS" 4767 ;; 4768 4769 no) 4770 ;; 4771 *) 4772 error_exit "Unknown state for capstone: $capstone" 4773 ;; 4774esac 4775 4776########################################## 4777# check if we have fdatasync 4778 4779fdatasync=no 4780cat > $TMPC << EOF 4781#include <unistd.h> 4782int main(void) { 4783#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4784return fdatasync(0); 4785#else 4786#error Not supported 4787#endif 4788} 4789EOF 4790if compile_prog "" "" ; then 4791 fdatasync=yes 4792fi 4793 4794########################################## 4795# check if we have madvise 4796 4797madvise=no 4798cat > $TMPC << EOF 4799#include <sys/types.h> 4800#include <sys/mman.h> 4801#include <stddef.h> 4802int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4803EOF 4804if compile_prog "" "" ; then 4805 madvise=yes 4806fi 4807 4808########################################## 4809# check if we have posix_madvise 4810 4811posix_madvise=no 4812cat > $TMPC << EOF 4813#include <sys/mman.h> 4814#include <stddef.h> 4815int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4816EOF 4817if compile_prog "" "" ; then 4818 posix_madvise=yes 4819fi 4820 4821########################################## 4822# check if we have posix_memalign() 4823 4824posix_memalign=no 4825cat > $TMPC << EOF 4826#include <stdlib.h> 4827int main(void) { 4828 void *p; 4829 return posix_memalign(&p, 8, 8); 4830} 4831EOF 4832if compile_prog "" "" ; then 4833 posix_memalign=yes 4834fi 4835 4836########################################## 4837# check if we have posix_syslog 4838 4839posix_syslog=no 4840cat > $TMPC << EOF 4841#include <syslog.h> 4842int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 4843EOF 4844if compile_prog "" "" ; then 4845 posix_syslog=yes 4846fi 4847 4848########################################## 4849# check if we have sem_timedwait 4850 4851sem_timedwait=no 4852cat > $TMPC << EOF 4853#include <semaphore.h> 4854int main(void) { return sem_timedwait(0, 0); } 4855EOF 4856if compile_prog "" "" ; then 4857 sem_timedwait=yes 4858fi 4859 4860########################################## 4861# check if we have strchrnul 4862 4863strchrnul=no 4864cat > $TMPC << EOF 4865#include <string.h> 4866int main(void); 4867// Use a haystack that the compiler shouldn't be able to constant fold 4868char *haystack = (char*)&main; 4869int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 4870EOF 4871if compile_prog "" "" ; then 4872 strchrnul=yes 4873fi 4874 4875########################################## 4876# check if trace backend exists 4877 4878$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4879if test "$?" -ne 0 ; then 4880 error_exit "invalid trace backends" \ 4881 "Please choose supported trace backends." 4882fi 4883 4884########################################## 4885# For 'ust' backend, test if ust headers are present 4886if have_backend "ust"; then 4887 cat > $TMPC << EOF 4888#include <lttng/tracepoint.h> 4889int main(void) { return 0; } 4890EOF 4891 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 4892 if $pkg_config lttng-ust --exists; then 4893 lttng_ust_libs=$($pkg_config --libs lttng-ust) 4894 else 4895 lttng_ust_libs="-llttng-ust -ldl" 4896 fi 4897 if $pkg_config liburcu-bp --exists; then 4898 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 4899 else 4900 urcu_bp_libs="-lurcu-bp" 4901 fi 4902 4903 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 4904 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 4905 else 4906 error_exit "Trace backend 'ust' missing lttng-ust header files" 4907 fi 4908fi 4909 4910########################################## 4911# For 'dtrace' backend, test if 'dtrace' command is present 4912if have_backend "dtrace"; then 4913 if ! has 'dtrace' ; then 4914 error_exit "dtrace command is not found in PATH $PATH" 4915 fi 4916 trace_backend_stap="no" 4917 if has 'stap' ; then 4918 trace_backend_stap="yes" 4919 fi 4920fi 4921 4922########################################## 4923# check and set a backend for coroutine 4924 4925# We prefer ucontext, but it's not always possible. The fallback 4926# is sigcontext. On Windows the only valid backend is the Windows 4927# specific one. 4928 4929ucontext_works=no 4930if test "$darwin" != "yes"; then 4931 cat > $TMPC << EOF 4932#include <ucontext.h> 4933#ifdef __stub_makecontext 4934#error Ignoring glibc stub makecontext which will always fail 4935#endif 4936int main(void) { makecontext(0, 0, 0); return 0; } 4937EOF 4938 if compile_prog "" "" ; then 4939 ucontext_works=yes 4940 fi 4941fi 4942 4943if test "$coroutine" = ""; then 4944 if test "$mingw32" = "yes"; then 4945 coroutine=win32 4946 elif test "$ucontext_works" = "yes"; then 4947 coroutine=ucontext 4948 else 4949 coroutine=sigaltstack 4950 fi 4951else 4952 case $coroutine in 4953 windows) 4954 if test "$mingw32" != "yes"; then 4955 error_exit "'windows' coroutine backend only valid for Windows" 4956 fi 4957 # Unfortunately the user visible backend name doesn't match the 4958 # coroutine-*.c filename for this case, so we have to adjust it here. 4959 coroutine=win32 4960 ;; 4961 ucontext) 4962 if test "$ucontext_works" != "yes"; then 4963 feature_not_found "ucontext" 4964 fi 4965 ;; 4966 sigaltstack) 4967 if test "$mingw32" = "yes"; then 4968 error_exit "only the 'windows' coroutine backend is valid for Windows" 4969 fi 4970 ;; 4971 *) 4972 error_exit "unknown coroutine backend $coroutine" 4973 ;; 4974 esac 4975fi 4976 4977if test "$coroutine_pool" = ""; then 4978 coroutine_pool=yes 4979fi 4980 4981if test "$debug_stack_usage" = "yes"; then 4982 if test "$coroutine_pool" = "yes"; then 4983 echo "WARN: disabling coroutine pool for stack usage debugging" 4984 coroutine_pool=no 4985 fi 4986fi 4987 4988 4989########################################## 4990# check if we have open_by_handle_at 4991 4992open_by_handle_at=no 4993cat > $TMPC << EOF 4994#include <fcntl.h> 4995#if !defined(AT_EMPTY_PATH) 4996# error missing definition 4997#else 4998int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 4999#endif 5000EOF 5001if compile_prog "" "" ; then 5002 open_by_handle_at=yes 5003fi 5004 5005######################################## 5006# check if we have linux/magic.h 5007 5008linux_magic_h=no 5009cat > $TMPC << EOF 5010#include <linux/magic.h> 5011int main(void) { 5012 return 0; 5013} 5014EOF 5015if compile_prog "" "" ; then 5016 linux_magic_h=yes 5017fi 5018 5019######################################## 5020# check whether we can disable warning option with a pragma (this is needed 5021# to silence warnings in the headers of some versions of external libraries). 5022# This test has to be compiled with -Werror as otherwise an unknown pragma is 5023# only a warning. 5024# 5025# If we can't selectively disable warning in the code, disable -Werror so that 5026# the build doesn't fail anyway. 5027 5028pragma_disable_unused_but_set=no 5029cat > $TMPC << EOF 5030#pragma GCC diagnostic push 5031#pragma GCC diagnostic ignored "-Wstrict-prototypes" 5032#pragma GCC diagnostic pop 5033 5034int main(void) { 5035 return 0; 5036} 5037EOF 5038if compile_prog "-Werror" "" ; then 5039 pragma_diagnostic_available=yes 5040else 5041 werror=no 5042fi 5043 5044######################################## 5045# check if we have valgrind/valgrind.h 5046 5047valgrind_h=no 5048cat > $TMPC << EOF 5049#include <valgrind/valgrind.h> 5050int main(void) { 5051 return 0; 5052} 5053EOF 5054if compile_prog "" "" ; then 5055 valgrind_h=yes 5056fi 5057 5058######################################## 5059# check if environ is declared 5060 5061has_environ=no 5062cat > $TMPC << EOF 5063#include <unistd.h> 5064int main(void) { 5065 environ = 0; 5066 return 0; 5067} 5068EOF 5069if compile_prog "" "" ; then 5070 has_environ=yes 5071fi 5072 5073######################################## 5074# check if cpuid.h is usable. 5075 5076cat > $TMPC << EOF 5077#include <cpuid.h> 5078int main(void) { 5079 unsigned a, b, c, d; 5080 int max = __get_cpuid_max(0, 0); 5081 5082 if (max >= 1) { 5083 __cpuid(1, a, b, c, d); 5084 } 5085 5086 if (max >= 7) { 5087 __cpuid_count(7, 0, a, b, c, d); 5088 } 5089 5090 return 0; 5091} 5092EOF 5093if compile_prog "" "" ; then 5094 cpuid_h=yes 5095fi 5096 5097########################################## 5098# avx2 optimization requirement check 5099# 5100# There is no point enabling this if cpuid.h is not usable, 5101# since we won't be able to select the new routines. 5102 5103if test $cpuid_h = yes; then 5104 cat > $TMPC << EOF 5105#pragma GCC push_options 5106#pragma GCC target("avx2") 5107#include <cpuid.h> 5108#include <immintrin.h> 5109static int bar(void *a) { 5110 __m256i x = *(__m256i *)a; 5111 return _mm256_testz_si256(x, x); 5112} 5113int main(int argc, char *argv[]) { return bar(argv[0]); } 5114EOF 5115 if compile_object "" ; then 5116 avx2_opt="yes" 5117 fi 5118fi 5119 5120######################################## 5121# check if __[u]int128_t is usable. 5122 5123int128=no 5124cat > $TMPC << EOF 5125#if defined(__clang_major__) && defined(__clang_minor__) 5126# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2)) 5127# error __int128_t does not work in CLANG before 3.2 5128# endif 5129#endif 5130__int128_t a; 5131__uint128_t b; 5132int main (void) { 5133 a = a + b; 5134 b = a * b; 5135 a = a * a; 5136 return 0; 5137} 5138EOF 5139if compile_prog "" "" ; then 5140 int128=yes 5141fi 5142 5143######################################### 5144# See if 128-bit atomic operations are supported. 5145 5146atomic128=no 5147if test "$int128" = "yes"; then 5148 cat > $TMPC << EOF 5149int main(void) 5150{ 5151 unsigned __int128 x = 0, y = 0; 5152 y = __atomic_load_16(&x, 0); 5153 __atomic_store_16(&x, y, 0); 5154 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5155 return 0; 5156} 5157EOF 5158 if compile_prog "" "" ; then 5159 atomic128=yes 5160 fi 5161fi 5162 5163######################################### 5164# See if 64-bit atomic operations are supported. 5165# Note that without __atomic builtins, we can only 5166# assume atomic loads/stores max at pointer size. 5167 5168cat > $TMPC << EOF 5169#include <stdint.h> 5170int main(void) 5171{ 5172 uint64_t x = 0, y = 0; 5173#ifdef __ATOMIC_RELAXED 5174 y = __atomic_load_8(&x, 0); 5175 __atomic_store_8(&x, y, 0); 5176 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 5177 __atomic_exchange_8(&x, y, 0); 5178 __atomic_fetch_add_8(&x, y, 0); 5179#else 5180 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5181 __sync_lock_test_and_set(&x, y); 5182 __sync_val_compare_and_swap(&x, y, 0); 5183 __sync_fetch_and_add(&x, y); 5184#endif 5185 return 0; 5186} 5187EOF 5188if compile_prog "" "" ; then 5189 atomic64=yes 5190fi 5191 5192######################################## 5193# See if 16-byte vector operations are supported. 5194# Even without a vector unit the compiler may expand these. 5195# There is a bug in old GCC for PPC that crashes here. 5196# Unfortunately it's the system compiler for Centos 7. 5197 5198cat > $TMPC << EOF 5199typedef unsigned char U1 __attribute__((vector_size(16))); 5200typedef unsigned short U2 __attribute__((vector_size(16))); 5201typedef unsigned int U4 __attribute__((vector_size(16))); 5202typedef unsigned long long U8 __attribute__((vector_size(16))); 5203typedef signed char S1 __attribute__((vector_size(16))); 5204typedef signed short S2 __attribute__((vector_size(16))); 5205typedef signed int S4 __attribute__((vector_size(16))); 5206typedef signed long long S8 __attribute__((vector_size(16))); 5207static U1 a1, b1; 5208static U2 a2, b2; 5209static U4 a4, b4; 5210static U8 a8, b8; 5211static S1 c1; 5212static S2 c2; 5213static S4 c4; 5214static S8 c8; 5215static int i; 5216void helper(void *d, void *a, int shift, int i); 5217void helper(void *d, void *a, int shift, int i) 5218{ 5219 *(U1 *)(d + i) = *(U1 *)(a + i) << shift; 5220 *(U2 *)(d + i) = *(U2 *)(a + i) << shift; 5221 *(U4 *)(d + i) = *(U4 *)(a + i) << shift; 5222 *(U8 *)(d + i) = *(U8 *)(a + i) << shift; 5223} 5224int main(void) 5225{ 5226 a1 += b1; a2 += b2; a4 += b4; a8 += b8; 5227 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8; 5228 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8; 5229 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8; 5230 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8; 5231 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8; 5232 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i; 5233 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i; 5234 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i; 5235 return 0; 5236} 5237EOF 5238 5239vector16=no 5240if compile_prog "" "" ; then 5241 vector16=yes 5242fi 5243 5244######################################## 5245# check if getauxval is available. 5246 5247getauxval=no 5248cat > $TMPC << EOF 5249#include <sys/auxv.h> 5250int main(void) { 5251 return getauxval(AT_HWCAP) == 0; 5252} 5253EOF 5254if compile_prog "" "" ; then 5255 getauxval=yes 5256fi 5257 5258######################################## 5259# check if ccache is interfering with 5260# semantic analysis of macros 5261 5262unset CCACHE_CPP2 5263ccache_cpp2=no 5264cat > $TMPC << EOF 5265static const int Z = 1; 5266#define fn() ({ Z; }) 5267#define TAUT(X) ((X) == Z) 5268#define PAREN(X, Y) (X == Y) 5269#define ID(X) (X) 5270int main(int argc, char *argv[]) 5271{ 5272 int x = 0, y = 0; 5273 x = ID(x); 5274 x = fn(); 5275 fn(); 5276 if (PAREN(x, y)) return 0; 5277 if (TAUT(Z)) return 0; 5278 return 0; 5279} 5280EOF 5281 5282if ! compile_object "-Werror"; then 5283 ccache_cpp2=yes 5284fi 5285 5286################################################# 5287# clang does not support glibc + FORTIFY_SOURCE. 5288 5289if test "$fortify_source" != "no"; then 5290 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5291 fortify_source="no"; 5292 elif test -n "$cxx" && has $cxx && 5293 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5294 fortify_source="no"; 5295 else 5296 fortify_source="yes" 5297 fi 5298fi 5299 5300############################################### 5301# Check if copy_file_range is provided by glibc 5302have_copy_file_range=no 5303cat > $TMPC << EOF 5304#include <unistd.h> 5305int main(void) { 5306 copy_file_range(0, NULL, 0, NULL, 0, 0); 5307 return 0; 5308} 5309EOF 5310if compile_prog "" "" ; then 5311 have_copy_file_range=yes 5312fi 5313 5314########################################## 5315# check if struct fsxattr is available via linux/fs.h 5316 5317have_fsxattr=no 5318cat > $TMPC << EOF 5319#include <linux/fs.h> 5320struct fsxattr foo; 5321int main(void) { 5322 return 0; 5323} 5324EOF 5325if compile_prog "" "" ; then 5326 have_fsxattr=yes 5327fi 5328 5329########################################## 5330# check for usable membarrier system call 5331if test "$membarrier" = "yes"; then 5332 have_membarrier=no 5333 if test "$mingw32" = "yes" ; then 5334 have_membarrier=yes 5335 elif test "$linux" = "yes" ; then 5336 cat > $TMPC << EOF 5337 #include <linux/membarrier.h> 5338 #include <sys/syscall.h> 5339 #include <unistd.h> 5340 #include <stdlib.h> 5341 int main(void) { 5342 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5343 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5344 exit(0); 5345 } 5346EOF 5347 if compile_prog "" "" ; then 5348 have_membarrier=yes 5349 fi 5350 fi 5351 if test "$have_membarrier" = "no"; then 5352 feature_not_found "membarrier" "membarrier system call not available" 5353 fi 5354else 5355 # Do not enable it by default even for Mingw32, because it doesn't 5356 # work on Wine. 5357 membarrier=no 5358fi 5359 5360########################################## 5361# check if rtnetlink.h exists and is useful 5362have_rtnetlink=no 5363cat > $TMPC << EOF 5364#include <linux/rtnetlink.h> 5365int main(void) { 5366 return IFLA_PROTO_DOWN; 5367} 5368EOF 5369if compile_prog "" "" ; then 5370 have_rtnetlink=yes 5371fi 5372 5373########################################## 5374# check for usable AF_VSOCK environment 5375have_af_vsock=no 5376cat > $TMPC << EOF 5377#include <errno.h> 5378#include <sys/types.h> 5379#include <sys/socket.h> 5380#if !defined(AF_VSOCK) 5381# error missing AF_VSOCK flag 5382#endif 5383#include <linux/vm_sockets.h> 5384int main(void) { 5385 int sock, ret; 5386 struct sockaddr_vm svm; 5387 socklen_t len = sizeof(svm); 5388 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5389 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5390 if ((ret == -1) && (errno == ENOTCONN)) { 5391 return 0; 5392 } 5393 return -1; 5394} 5395EOF 5396if compile_prog "" "" ; then 5397 have_af_vsock=yes 5398fi 5399 5400########################################## 5401# check for usable AF_ALG environment 5402hava_afalg=no 5403cat > $TMPC << EOF 5404#include <errno.h> 5405#include <sys/types.h> 5406#include <sys/socket.h> 5407#include <linux/if_alg.h> 5408int main(void) { 5409 int sock; 5410 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 5411 return sock; 5412} 5413EOF 5414if compile_prog "" "" ; then 5415 have_afalg=yes 5416fi 5417if test "$crypto_afalg" = "yes" 5418then 5419 if test "$have_afalg" != "yes" 5420 then 5421 error_exit "AF_ALG requested but could not be detected" 5422 fi 5423fi 5424 5425 5426################################################# 5427# Check to see if we have the Hypervisor framework 5428if [ "$darwin" = "yes" ] ; then 5429 cat > $TMPC << EOF 5430#include <Hypervisor/hv.h> 5431int main() { return 0;} 5432EOF 5433 if ! compile_object ""; then 5434 hvf='no' 5435 else 5436 hvf='yes' 5437 LDFLAGS="-framework Hypervisor $LDFLAGS" 5438 fi 5439fi 5440 5441################################################# 5442# Sparc implicitly links with --relax, which is 5443# incompatible with -r, so --no-relax should be 5444# given. It does no harm to give it on other 5445# platforms too. 5446 5447# Note: the prototype is needed since QEMU_CFLAGS 5448# contains -Wmissing-prototypes 5449cat > $TMPC << EOF 5450extern int foo(void); 5451int foo(void) { return 0; } 5452EOF 5453if ! compile_object ""; then 5454 error_exit "Failed to compile object file for LD_REL_FLAGS test" 5455fi 5456for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 5457 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 5458 LD_REL_FLAGS=$i 5459 break 5460 fi 5461done 5462if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 5463 feature_not_found "modules" "Cannot find how to build relocatable objects" 5464fi 5465 5466########################################## 5467# check for sysmacros.h 5468 5469have_sysmacros=no 5470cat > $TMPC << EOF 5471#include <sys/sysmacros.h> 5472int main(void) { 5473 return makedev(0, 0); 5474} 5475EOF 5476if compile_prog "" "" ; then 5477 have_sysmacros=yes 5478fi 5479 5480########################################## 5481# Veritas HyperScale block driver VxHS 5482# Check if libvxhs is installed 5483 5484if test "$vxhs" != "no" ; then 5485 cat > $TMPC <<EOF 5486#include <stdint.h> 5487#include <qnio/qnio_api.h> 5488 5489void *vxhs_callback; 5490 5491int main(void) { 5492 iio_init(QNIO_VERSION, vxhs_callback); 5493 return 0; 5494} 5495EOF 5496 vxhs_libs="-lvxhs -lssl" 5497 if compile_prog "" "$vxhs_libs" ; then 5498 vxhs=yes 5499 else 5500 if test "$vxhs" = "yes" ; then 5501 feature_not_found "vxhs block device" "Install libvxhs See github" 5502 fi 5503 vxhs=no 5504 fi 5505fi 5506 5507########################################## 5508# check for _Static_assert() 5509 5510have_static_assert=no 5511cat > $TMPC << EOF 5512_Static_assert(1, "success"); 5513int main(void) { 5514 return 0; 5515} 5516EOF 5517if compile_prog "" "" ; then 5518 have_static_assert=yes 5519fi 5520 5521########################################## 5522# check for utmpx.h, it is missing e.g. on OpenBSD 5523 5524have_utmpx=no 5525cat > $TMPC << EOF 5526#include <utmpx.h> 5527struct utmpx user_info; 5528int main(void) { 5529 return 0; 5530} 5531EOF 5532if compile_prog "" "" ; then 5533 have_utmpx=yes 5534fi 5535 5536########################################## 5537# checks for sanitizers 5538 5539have_asan=no 5540have_ubsan=no 5541have_asan_iface_h=no 5542have_asan_iface_fiber=no 5543 5544if test "$sanitizers" = "yes" ; then 5545 write_c_skeleton 5546 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 5547 have_asan=yes 5548 fi 5549 5550 # we could use a simple skeleton for flags checks, but this also 5551 # detect the static linking issue of ubsan, see also: 5552 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 5553 cat > $TMPC << EOF 5554#include <stdlib.h> 5555int main(void) { 5556 void *tmp = malloc(10); 5557 return *(int *)(tmp + 2); 5558} 5559EOF 5560 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 5561 have_ubsan=yes 5562 fi 5563 5564 if check_include "sanitizer/asan_interface.h" ; then 5565 have_asan_iface_h=yes 5566 fi 5567 5568 cat > $TMPC << EOF 5569#include <sanitizer/asan_interface.h> 5570int main(void) { 5571 __sanitizer_start_switch_fiber(0, 0, 0); 5572 return 0; 5573} 5574EOF 5575 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 5576 have_asan_iface_fiber=yes 5577 fi 5578fi 5579 5580########################################## 5581# Docker and cross-compiler support 5582# 5583# This is specifically for building test 5584# cases for foreign architectures, not 5585# cross-compiling QEMU itself. 5586 5587if has "docker"; then 5588 docker=$($python $source_path/tests/docker/docker.py probe) 5589fi 5590 5591########################################## 5592# check for libpmem 5593 5594if test "$libpmem" != "no"; then 5595 if $pkg_config --exists "libpmem"; then 5596 libpmem="yes" 5597 libpmem_libs=$($pkg_config --libs libpmem) 5598 libpmem_cflags=$($pkg_config --cflags libpmem) 5599 libs_softmmu="$libs_softmmu $libpmem_libs" 5600 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" 5601 else 5602 if test "$libpmem" = "yes" ; then 5603 feature_not_found "libpmem" "Install nvml or pmdk" 5604 fi 5605 libpmem="no" 5606 fi 5607fi 5608 5609########################################## 5610# End of CC checks 5611# After here, no more $cc or $ld runs 5612 5613write_c_skeleton 5614 5615if test "$gcov" = "yes" ; then 5616 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS" 5617 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS" 5618elif test "$fortify_source" = "yes" ; then 5619 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 5620elif test "$debug" = "no"; then 5621 CFLAGS="-O2 $CFLAGS" 5622fi 5623 5624if test "$have_asan" = "yes"; then 5625 CFLAGS="-fsanitize=address $CFLAGS" 5626 if test "$have_asan_iface_h" = "no" ; then 5627 echo "ASAN build enabled, but ASAN header missing." \ 5628 "Without code annotation, the report may be inferior." 5629 elif test "$have_asan_iface_fiber" = "no" ; then 5630 echo "ASAN build enabled, but ASAN header is too old." \ 5631 "Without code annotation, the report may be inferior." 5632 fi 5633fi 5634if test "$have_ubsan" = "yes"; then 5635 CFLAGS="-fsanitize=undefined $CFLAGS" 5636fi 5637 5638########################################## 5639# Do we have libnfs 5640if test "$libnfs" != "no" ; then 5641 if $pkg_config --atleast-version=1.9.3 libnfs; then 5642 libnfs="yes" 5643 libnfs_libs=$($pkg_config --libs libnfs) 5644 else 5645 if test "$libnfs" = "yes" ; then 5646 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 5647 fi 5648 libnfs="no" 5649 fi 5650fi 5651 5652# Now we've finished running tests it's OK to add -Werror to the compiler flags 5653if test "$werror" = "yes"; then 5654 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 5655fi 5656 5657if test "$solaris" = "no" ; then 5658 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 5659 LDFLAGS="-Wl,--warn-common $LDFLAGS" 5660 fi 5661fi 5662 5663# test if pod2man has --utf8 option 5664if pod2man --help | grep -q utf8; then 5665 POD2MAN="pod2man --utf8" 5666else 5667 POD2MAN="pod2man" 5668fi 5669 5670# Use ASLR, no-SEH and DEP if available 5671if test "$mingw32" = "yes" ; then 5672 for flag in --dynamicbase --no-seh --nxcompat; do 5673 if ld_has $flag ; then 5674 LDFLAGS="-Wl,$flag $LDFLAGS" 5675 fi 5676 done 5677fi 5678 5679qemu_confdir=$sysconfdir$confsuffix 5680qemu_moddir=$libdir$confsuffix 5681qemu_datadir=$datadir$confsuffix 5682qemu_localedir="$datadir/locale" 5683 5684# We can only support ivshmem if we have eventfd 5685if [ "$eventfd" = "yes" ]; then 5686 ivshmem=yes 5687fi 5688 5689tools="" 5690if test "$want_tools" = "yes" ; then 5691 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools" 5692 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 5693 tools="qemu-nbd\$(EXESUF) $tools" 5694 fi 5695 if [ "$ivshmem" = "yes" ]; then 5696 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 5697 fi 5698 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then 5699 tools="elf2dmp $tools" 5700 fi 5701fi 5702if test "$softmmu" = yes ; then 5703 if test "$linux" = yes; then 5704 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then 5705 virtfs=yes 5706 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 5707 else 5708 if test "$virtfs" = yes; then 5709 error_exit "VirtFS requires libcap devel and libattr devel" 5710 fi 5711 virtfs=no 5712 fi 5713 if test "$mpath" != no && test "$mpathpersist" = yes ; then 5714 mpath=yes 5715 else 5716 if test "$mpath" = yes; then 5717 error_exit "Multipath requires libmpathpersist devel" 5718 fi 5719 mpath=no 5720 fi 5721 tools="$tools scsi/qemu-pr-helper\$(EXESUF)" 5722 else 5723 if test "$virtfs" = yes; then 5724 error_exit "VirtFS is supported only on Linux" 5725 fi 5726 virtfs=no 5727 if test "$mpath" = yes; then 5728 error_exit "Multipath is supported only on Linux" 5729 fi 5730 mpath=no 5731 fi 5732 if test "$xkbcommon" = "yes"; then 5733 tools="qemu-keymap\$(EXESUF) $tools" 5734 fi 5735fi 5736 5737# Probe for guest agent support/options 5738 5739if [ "$guest_agent" != "no" ]; then 5740 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 5741 tools="qemu-ga $tools" 5742 guest_agent=yes 5743 elif [ "$guest_agent" != yes ]; then 5744 guest_agent=no 5745 else 5746 error_exit "Guest agent is not supported on this platform" 5747 fi 5748fi 5749 5750# Guest agent Window MSI package 5751 5752if test "$guest_agent" != yes; then 5753 if test "$guest_agent_msi" = yes; then 5754 error_exit "MSI guest agent package requires guest agent enabled" 5755 fi 5756 guest_agent_msi=no 5757elif test "$mingw32" != "yes"; then 5758 if test "$guest_agent_msi" = "yes"; then 5759 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 5760 fi 5761 guest_agent_msi=no 5762elif ! has wixl; then 5763 if test "$guest_agent_msi" = "yes"; then 5764 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 5765 fi 5766 guest_agent_msi=no 5767else 5768 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 5769 # disabled explicitly 5770 if test "$guest_agent_msi" != "no"; then 5771 guest_agent_msi=yes 5772 fi 5773fi 5774 5775if test "$guest_agent_msi" = "yes"; then 5776 if test "$guest_agent_with_vss" = "yes"; then 5777 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 5778 fi 5779 5780 if test "$QEMU_GA_MANUFACTURER" = ""; then 5781 QEMU_GA_MANUFACTURER=QEMU 5782 fi 5783 5784 if test "$QEMU_GA_DISTRO" = ""; then 5785 QEMU_GA_DISTRO=Linux 5786 fi 5787 5788 if test "$QEMU_GA_VERSION" = ""; then 5789 QEMU_GA_VERSION=$(cat $source_path/VERSION) 5790 fi 5791 5792 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 5793 5794 case "$cpu" in 5795 x86_64) 5796 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 5797 ;; 5798 i386) 5799 QEMU_GA_MSI_ARCH="-D Arch=32" 5800 ;; 5801 *) 5802 error_exit "CPU $cpu not supported for building installation package" 5803 ;; 5804 esac 5805fi 5806 5807# Mac OS X ships with a broken assembler 5808roms= 5809if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ 5810 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ 5811 "$softmmu" = yes ; then 5812 # Different host OS linkers have different ideas about the name of the ELF 5813 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 5814 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 5815 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 5816 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 5817 ld_i386_emulation="$emu" 5818 roms="optionrom" 5819 break 5820 fi 5821 done 5822fi 5823if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then 5824 roms="$roms spapr-rtas" 5825fi 5826 5827if test "$cpu" = "s390x" ; then 5828 roms="$roms s390-ccw" 5829fi 5830 5831# Probe for the need for relocating the user-only binary. 5832if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 5833 textseg_addr= 5834 case "$cpu" in 5835 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 5836 # ??? Rationale for choosing this address 5837 textseg_addr=0x60000000 5838 ;; 5839 mips) 5840 # A 256M aligned address, high in the address space, with enough 5841 # room for the code_gen_buffer above it before the stack. 5842 textseg_addr=0x60000000 5843 ;; 5844 esac 5845 if [ -n "$textseg_addr" ]; then 5846 cat > $TMPC <<EOF 5847 int main(void) { return 0; } 5848EOF 5849 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 5850 if ! compile_prog "" "$textseg_ldflags"; then 5851 # In case ld does not support -Ttext-segment, edit the default linker 5852 # script via sed to set the .text start addr. This is needed on FreeBSD 5853 # at least. 5854 if ! $ld --verbose >/dev/null 2>&1; then 5855 error_exit \ 5856 "We need to link the QEMU user mode binaries at a" \ 5857 "specific text address. Unfortunately your linker" \ 5858 "doesn't support either the -Ttext-segment option or" \ 5859 "printing the default linker script with --verbose." \ 5860 "If you don't want the user mode binaries, pass the" \ 5861 "--disable-user option to configure." 5862 fi 5863 5864 $ld --verbose | sed \ 5865 -e '1,/==================================================/d' \ 5866 -e '/==================================================/,$d' \ 5867 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 5868 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 5869 textseg_ldflags="-Wl,-T../config-host.ld" 5870 fi 5871 fi 5872fi 5873 5874# Check that the C++ compiler exists and works with the C compiler. 5875# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 5876if has $cxx; then 5877 cat > $TMPC <<EOF 5878int c_function(void); 5879int main(void) { return c_function(); } 5880EOF 5881 5882 compile_object 5883 5884 cat > $TMPCXX <<EOF 5885extern "C" { 5886 int c_function(void); 5887} 5888int c_function(void) { return 42; } 5889EOF 5890 5891 update_cxxflags 5892 5893 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then 5894 # C++ compiler $cxx works ok with C compiler $cc 5895 : 5896 else 5897 echo "C++ compiler $cxx does not work with C compiler $cc" 5898 echo "Disabling C++ specific optional code" 5899 cxx= 5900 fi 5901else 5902 echo "No C++ compiler available; disabling C++ specific optional code" 5903 cxx= 5904fi 5905 5906echo_version() { 5907 if test "$1" = "yes" ; then 5908 echo "($2)" 5909 fi 5910} 5911 5912# prepend pixman and ftd flags after all config tests are done 5913QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 5914QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 5915libs_softmmu="$pixman_libs $libs_softmmu" 5916 5917echo "Install prefix $prefix" 5918echo "BIOS directory $(eval echo $qemu_datadir)" 5919echo "firmware path $(eval echo $firmwarepath)" 5920echo "binary directory $(eval echo $bindir)" 5921echo "library directory $(eval echo $libdir)" 5922echo "module directory $(eval echo $qemu_moddir)" 5923echo "libexec directory $(eval echo $libexecdir)" 5924echo "include directory $(eval echo $includedir)" 5925echo "config directory $(eval echo $sysconfdir)" 5926if test "$mingw32" = "no" ; then 5927echo "local state directory $(eval echo $local_statedir)" 5928echo "Manual directory $(eval echo $mandir)" 5929echo "ELF interp prefix $interp_prefix" 5930else 5931echo "local state directory queried at runtime" 5932echo "Windows SDK $win_sdk" 5933fi 5934echo "Source path $source_path" 5935echo "GIT binary $git" 5936echo "GIT submodules $git_submodules" 5937echo "C compiler $cc" 5938echo "Host C compiler $host_cc" 5939echo "C++ compiler $cxx" 5940echo "Objective-C compiler $objcc" 5941echo "ARFLAGS $ARFLAGS" 5942echo "CFLAGS $CFLAGS" 5943echo "QEMU_CFLAGS $QEMU_CFLAGS" 5944echo "LDFLAGS $LDFLAGS" 5945echo "QEMU_LDFLAGS $QEMU_LDFLAGS" 5946echo "make $make" 5947echo "install $install" 5948echo "python $python" 5949if test "$slirp" = "yes" ; then 5950 echo "smbd $smbd" 5951fi 5952echo "module support $modules" 5953echo "host CPU $cpu" 5954echo "host big endian $bigendian" 5955echo "target list $target_list" 5956echo "gprof enabled $gprof" 5957echo "sparse enabled $sparse" 5958echo "strip binaries $strip_opt" 5959echo "profiler $profiler" 5960echo "static build $static" 5961if test "$darwin" = "yes" ; then 5962 echo "Cocoa support $cocoa" 5963fi 5964echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 5965echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 5966echo "GTK GL support $gtk_gl" 5967echo "VTE support $vte $(echo_version $vte $vteversion)" 5968echo "TLS priority $tls_priority" 5969echo "GNUTLS support $gnutls" 5970echo "GNUTLS rnd $gnutls_rnd" 5971echo "libgcrypt $gcrypt" 5972echo "libgcrypt kdf $gcrypt_kdf" 5973echo "nettle $nettle $(echo_version $nettle $nettle_version)" 5974echo "nettle kdf $nettle_kdf" 5975echo "libtasn1 $tasn1" 5976echo "curses support $curses" 5977echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)" 5978echo "curl support $curl" 5979echo "mingw32 support $mingw32" 5980echo "Audio drivers $audio_drv_list" 5981echo "Block whitelist (rw) $block_drv_rw_whitelist" 5982echo "Block whitelist (ro) $block_drv_ro_whitelist" 5983echo "VirtFS support $virtfs" 5984echo "Multipath support $mpath" 5985echo "VNC support $vnc" 5986if test "$vnc" = "yes" ; then 5987 echo "VNC SASL support $vnc_sasl" 5988 echo "VNC JPEG support $vnc_jpeg" 5989 echo "VNC PNG support $vnc_png" 5990fi 5991if test -n "$sparc_cpu"; then 5992 echo "Target Sparc Arch $sparc_cpu" 5993fi 5994echo "xen support $xen" 5995if test "$xen" = "yes" ; then 5996 echo "xen ctrl version $xen_ctrl_version" 5997 echo "pv dom build $xen_pv_domain_build" 5998fi 5999echo "brlapi support $brlapi" 6000echo "bluez support $bluez" 6001echo "Documentation $docs" 6002echo "PIE $pie" 6003echo "vde support $vde" 6004echo "netmap support $netmap" 6005echo "Linux AIO support $linux_aio" 6006echo "ATTR/XATTR support $attr" 6007echo "Install blobs $blobs" 6008echo "KVM support $kvm" 6009echo "HAX support $hax" 6010echo "HVF support $hvf" 6011echo "WHPX support $whpx" 6012echo "TCG support $tcg" 6013if test "$tcg" = "yes" ; then 6014 echo "TCG debug enabled $debug_tcg" 6015 echo "TCG interpreter $tcg_interpreter" 6016fi 6017echo "malloc trim support $malloc_trim" 6018echo "RDMA support $rdma" 6019echo "PVRDMA support $pvrdma" 6020echo "fdt support $fdt" 6021echo "membarrier $membarrier" 6022echo "preadv support $preadv" 6023echo "fdatasync $fdatasync" 6024echo "madvise $madvise" 6025echo "posix_madvise $posix_madvise" 6026echo "posix_memalign $posix_memalign" 6027echo "libcap-ng support $cap_ng" 6028echo "vhost-net support $vhost_net" 6029echo "vhost-crypto support $vhost_crypto" 6030echo "vhost-scsi support $vhost_scsi" 6031echo "vhost-vsock support $vhost_vsock" 6032echo "vhost-user support $vhost_user" 6033echo "Trace backends $trace_backends" 6034if have_backend "simple"; then 6035echo "Trace output file $trace_file-<pid>" 6036fi 6037echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 6038echo "rbd support $rbd" 6039echo "xfsctl support $xfs" 6040echo "smartcard support $smartcard" 6041echo "libusb $libusb" 6042echo "usb net redir $usb_redir" 6043echo "OpenGL support $opengl" 6044echo "OpenGL dmabufs $opengl_dmabuf" 6045echo "libiscsi support $libiscsi" 6046echo "libnfs support $libnfs" 6047echo "build guest agent $guest_agent" 6048echo "QGA VSS support $guest_agent_with_vss" 6049echo "QGA w32 disk info $guest_agent_ntddscsi" 6050echo "QGA MSI support $guest_agent_msi" 6051echo "seccomp support $seccomp" 6052echo "coroutine backend $coroutine" 6053echo "coroutine pool $coroutine_pool" 6054echo "debug stack usage $debug_stack_usage" 6055echo "mutex debugging $debug_mutex" 6056echo "crypto afalg $crypto_afalg" 6057echo "GlusterFS support $glusterfs" 6058echo "gcov $gcov_tool" 6059echo "gcov enabled $gcov" 6060echo "TPM support $tpm" 6061echo "libssh2 support $libssh2" 6062echo "TPM passthrough $tpm_passthrough" 6063echo "TPM emulator $tpm_emulator" 6064echo "QOM debugging $qom_cast_debug" 6065echo "Live block migration $live_block_migration" 6066echo "lzo support $lzo" 6067echo "snappy support $snappy" 6068echo "bzip2 support $bzip2" 6069echo "NUMA host support $numa" 6070echo "libxml2 $libxml2" 6071echo "tcmalloc support $tcmalloc" 6072echo "jemalloc support $jemalloc" 6073echo "avx2 optimization $avx2_opt" 6074echo "replication support $replication" 6075echo "VxHS block device $vxhs" 6076echo "capstone $capstone" 6077echo "docker $docker" 6078echo "libpmem support $libpmem" 6079 6080if test "$sdl_too_old" = "yes"; then 6081echo "-> Your SDL version is too old - please upgrade to have SDL support" 6082fi 6083 6084if test "$sdlabi" = "1.2"; then 6085 echo 6086 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in" 6087 echo "WARNING: future releases. Please switch to using SDL 2.0" 6088fi 6089 6090if test "$supported_cpu" = "no"; then 6091 echo 6092 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 6093 echo 6094 echo "CPU host architecture $cpu support is not currently maintained." 6095 echo "The QEMU project intends to remove support for this host CPU in" 6096 echo "a future release if nobody volunteers to maintain it and to" 6097 echo "provide a build host for our continuous integration setup." 6098 echo "configure has succeeded and you can continue to build, but" 6099 echo "if you care about QEMU on this platform you should contact" 6100 echo "us upstream at qemu-devel@nongnu.org." 6101fi 6102 6103if test "$supported_os" = "no"; then 6104 echo 6105 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 6106 echo 6107 echo "Host OS $targetos support is not currently maintained." 6108 echo "The QEMU project intends to remove support for this host OS in" 6109 echo "a future release if nobody volunteers to maintain it and to" 6110 echo "provide a build host for our continuous integration setup." 6111 echo "configure has succeeded and you can continue to build, but" 6112 echo "if you care about QEMU on this platform you should contact" 6113 echo "us upstream at qemu-devel@nongnu.org." 6114fi 6115 6116config_host_mak="config-host.mak" 6117 6118echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 6119 6120echo "# Automatically generated by configure - do not modify" > $config_host_mak 6121echo >> $config_host_mak 6122 6123echo all: >> $config_host_mak 6124echo "prefix=$prefix" >> $config_host_mak 6125echo "bindir=$bindir" >> $config_host_mak 6126echo "libdir=$libdir" >> $config_host_mak 6127echo "libexecdir=$libexecdir" >> $config_host_mak 6128echo "includedir=$includedir" >> $config_host_mak 6129echo "mandir=$mandir" >> $config_host_mak 6130echo "sysconfdir=$sysconfdir" >> $config_host_mak 6131echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 6132echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 6133echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6134echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 6135echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 6136if test "$mingw32" = "no" ; then 6137 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 6138fi 6139echo "qemu_helperdir=$libexecdir" >> $config_host_mak 6140echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 6141echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 6142echo "GIT=$git" >> $config_host_mak 6143echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6144echo "GIT_UPDATE=$git_update" >> $config_host_mak 6145 6146echo "ARCH=$ARCH" >> $config_host_mak 6147 6148if test "$debug_tcg" = "yes" ; then 6149 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6150fi 6151if test "$strip_opt" = "yes" ; then 6152 echo "STRIP=${strip}" >> $config_host_mak 6153fi 6154if test "$bigendian" = "yes" ; then 6155 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6156fi 6157if test "$mingw32" = "yes" ; then 6158 echo "CONFIG_WIN32=y" >> $config_host_mak 6159 rc_version=$(cat $source_path/VERSION) 6160 version_major=${rc_version%%.*} 6161 rc_version=${rc_version#*.} 6162 version_minor=${rc_version%%.*} 6163 rc_version=${rc_version#*.} 6164 version_subminor=${rc_version%%.*} 6165 version_micro=0 6166 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6167 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6168 if test "$guest_agent_with_vss" = "yes" ; then 6169 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6170 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6171 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6172 fi 6173 if test "$guest_agent_ntddscsi" = "yes" ; then 6174 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak 6175 fi 6176 if test "$guest_agent_msi" = "yes"; then 6177 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6178 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6179 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6180 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6181 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6182 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6183 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6184 fi 6185else 6186 echo "CONFIG_POSIX=y" >> $config_host_mak 6187fi 6188 6189if test "$linux" = "yes" ; then 6190 echo "CONFIG_LINUX=y" >> $config_host_mak 6191fi 6192 6193if test "$darwin" = "yes" ; then 6194 echo "CONFIG_DARWIN=y" >> $config_host_mak 6195fi 6196 6197if test "$solaris" = "yes" ; then 6198 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6199fi 6200if test "$haiku" = "yes" ; then 6201 echo "CONFIG_HAIKU=y" >> $config_host_mak 6202fi 6203if test "$static" = "yes" ; then 6204 echo "CONFIG_STATIC=y" >> $config_host_mak 6205fi 6206if test "$profiler" = "yes" ; then 6207 echo "CONFIG_PROFILER=y" >> $config_host_mak 6208fi 6209if test "$slirp" = "yes" ; then 6210 echo "CONFIG_SLIRP=y" >> $config_host_mak 6211 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6212fi 6213if test "$vde" = "yes" ; then 6214 echo "CONFIG_VDE=y" >> $config_host_mak 6215 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 6216fi 6217if test "$netmap" = "yes" ; then 6218 echo "CONFIG_NETMAP=y" >> $config_host_mak 6219fi 6220if test "$l2tpv3" = "yes" ; then 6221 echo "CONFIG_L2TPV3=y" >> $config_host_mak 6222fi 6223if test "$cap_ng" = "yes" ; then 6224 echo "CONFIG_LIBCAP=y" >> $config_host_mak 6225fi 6226echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 6227for drv in $audio_drv_list; do 6228 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6229 case "$drv" in 6230 alsa | oss | pa | sdl) 6231 echo "$def=m" >> $config_host_mak ;; 6232 *) 6233 echo "$def=y" >> $config_host_mak ;; 6234 esac 6235done 6236echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6237echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6238echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6239echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6240echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6241if test "$audio_pt_int" = "yes" ; then 6242 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 6243fi 6244if test "$audio_win_int" = "yes" ; then 6245 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6246fi 6247echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6248echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6249if test "$vnc" = "yes" ; then 6250 echo "CONFIG_VNC=y" >> $config_host_mak 6251fi 6252if test "$vnc_sasl" = "yes" ; then 6253 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 6254fi 6255if test "$vnc_jpeg" = "yes" ; then 6256 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 6257fi 6258if test "$vnc_png" = "yes" ; then 6259 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 6260fi 6261if test "$xkbcommon" = "yes" ; then 6262 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 6263 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 6264fi 6265if test "$fnmatch" = "yes" ; then 6266 echo "CONFIG_FNMATCH=y" >> $config_host_mak 6267fi 6268if test "$xfs" = "yes" ; then 6269 echo "CONFIG_XFS=y" >> $config_host_mak 6270fi 6271qemu_version=$(head $source_path/VERSION) 6272echo "VERSION=$qemu_version" >>$config_host_mak 6273echo "PKGVERSION=$pkgversion" >>$config_host_mak 6274echo "SRC_PATH=$source_path" >> $config_host_mak 6275echo "TARGET_DIRS=$target_list" >> $config_host_mak 6276if [ "$docs" = "yes" ] ; then 6277 echo "BUILD_DOCS=yes" >> $config_host_mak 6278fi 6279if test "$modules" = "yes"; then 6280 # $shacmd can generate a hash started with digit, which the compiler doesn't 6281 # like as an symbol. So prefix it with an underscore 6282 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6283 echo "CONFIG_MODULES=y" >> $config_host_mak 6284fi 6285if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then 6286 echo "CONFIG_X11=y" >> $config_host_mak 6287 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6288 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6289fi 6290if test "$sdl" = "yes" ; then 6291 echo "CONFIG_SDL=m" >> $config_host_mak 6292 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak 6293 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 6294 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 6295fi 6296if test "$cocoa" = "yes" ; then 6297 echo "CONFIG_COCOA=y" >> $config_host_mak 6298fi 6299if test "$curses" = "yes" ; then 6300 echo "CONFIG_CURSES=m" >> $config_host_mak 6301 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 6302 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 6303fi 6304if test "$pipe2" = "yes" ; then 6305 echo "CONFIG_PIPE2=y" >> $config_host_mak 6306fi 6307if test "$accept4" = "yes" ; then 6308 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 6309fi 6310if test "$splice" = "yes" ; then 6311 echo "CONFIG_SPLICE=y" >> $config_host_mak 6312fi 6313if test "$eventfd" = "yes" ; then 6314 echo "CONFIG_EVENTFD=y" >> $config_host_mak 6315fi 6316if test "$memfd" = "yes" ; then 6317 echo "CONFIG_MEMFD=y" >> $config_host_mak 6318fi 6319if test "$fallocate" = "yes" ; then 6320 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6321fi 6322if test "$fallocate_punch_hole" = "yes" ; then 6323 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 6324fi 6325if test "$fallocate_zero_range" = "yes" ; then 6326 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6327fi 6328if test "$posix_fallocate" = "yes" ; then 6329 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6330fi 6331if test "$sync_file_range" = "yes" ; then 6332 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6333fi 6334if test "$fiemap" = "yes" ; then 6335 echo "CONFIG_FIEMAP=y" >> $config_host_mak 6336fi 6337if test "$dup3" = "yes" ; then 6338 echo "CONFIG_DUP3=y" >> $config_host_mak 6339fi 6340if test "$ppoll" = "yes" ; then 6341 echo "CONFIG_PPOLL=y" >> $config_host_mak 6342fi 6343if test "$prctl_pr_set_timerslack" = "yes" ; then 6344 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6345fi 6346if test "$epoll" = "yes" ; then 6347 echo "CONFIG_EPOLL=y" >> $config_host_mak 6348fi 6349if test "$epoll_create1" = "yes" ; then 6350 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 6351fi 6352if test "$sendfile" = "yes" ; then 6353 echo "CONFIG_SENDFILE=y" >> $config_host_mak 6354fi 6355if test "$timerfd" = "yes" ; then 6356 echo "CONFIG_TIMERFD=y" >> $config_host_mak 6357fi 6358if test "$setns" = "yes" ; then 6359 echo "CONFIG_SETNS=y" >> $config_host_mak 6360fi 6361if test "$clock_adjtime" = "yes" ; then 6362 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 6363fi 6364if test "$syncfs" = "yes" ; then 6365 echo "CONFIG_SYNCFS=y" >> $config_host_mak 6366fi 6367if test "$inotify" = "yes" ; then 6368 echo "CONFIG_INOTIFY=y" >> $config_host_mak 6369fi 6370if test "$inotify1" = "yes" ; then 6371 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6372fi 6373if test "$sem_timedwait" = "yes" ; then 6374 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6375fi 6376if test "$strchrnul" = "yes" ; then 6377 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 6378fi 6379if test "$byteswap_h" = "yes" ; then 6380 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 6381fi 6382if test "$bswap_h" = "yes" ; then 6383 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 6384fi 6385if test "$curl" = "yes" ; then 6386 echo "CONFIG_CURL=m" >> $config_host_mak 6387 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 6388 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6389fi 6390if test "$brlapi" = "yes" ; then 6391 echo "CONFIG_BRLAPI=y" >> $config_host_mak 6392 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 6393fi 6394if test "$bluez" = "yes" ; then 6395 echo "CONFIG_BLUEZ=y" >> $config_host_mak 6396 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 6397fi 6398if test "$gtk" = "yes" ; then 6399 echo "CONFIG_GTK=m" >> $config_host_mak 6400 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6401 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6402 if test "$gtk_gl" = "yes" ; then 6403 echo "CONFIG_GTK_GL=y" >> $config_host_mak 6404 fi 6405fi 6406echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6407if test "$gnutls" = "yes" ; then 6408 echo "CONFIG_GNUTLS=y" >> $config_host_mak 6409fi 6410if test "$gnutls_rnd" = "yes" ; then 6411 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak 6412fi 6413if test "$gcrypt" = "yes" ; then 6414 echo "CONFIG_GCRYPT=y" >> $config_host_mak 6415 if test "$gcrypt_hmac" = "yes" ; then 6416 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 6417 fi 6418 if test "$gcrypt_kdf" = "yes" ; then 6419 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak 6420 fi 6421fi 6422if test "$nettle" = "yes" ; then 6423 echo "CONFIG_NETTLE=y" >> $config_host_mak 6424 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6425 if test "$nettle_kdf" = "yes" ; then 6426 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak 6427 fi 6428fi 6429if test "$tasn1" = "yes" ; then 6430 echo "CONFIG_TASN1=y" >> $config_host_mak 6431fi 6432if test "$have_ifaddrs_h" = "yes" ; then 6433 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 6434fi 6435if test "$have_broken_size_max" = "yes" ; then 6436 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 6437fi 6438 6439# Work around a system header bug with some kernel/XFS header 6440# versions where they both try to define 'struct fsxattr': 6441# xfs headers will not try to redefine structs from linux headers 6442# if this macro is set. 6443if test "$have_fsxattr" = "yes" ; then 6444 echo "HAVE_FSXATTR=y" >> $config_host_mak 6445fi 6446if test "$have_copy_file_range" = "yes" ; then 6447 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 6448fi 6449if test "$vte" = "yes" ; then 6450 echo "CONFIG_VTE=y" >> $config_host_mak 6451 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 6452 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 6453fi 6454if test "$virglrenderer" = "yes" ; then 6455 echo "CONFIG_VIRGL=y" >> $config_host_mak 6456 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 6457 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 6458fi 6459if test "$xen" = "yes" ; then 6460 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 6461 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 6462 if test "$xen_pv_domain_build" = "yes" ; then 6463 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak 6464 fi 6465fi 6466if test "$linux_aio" = "yes" ; then 6467 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 6468fi 6469if test "$attr" = "yes" ; then 6470 echo "CONFIG_ATTR=y" >> $config_host_mak 6471fi 6472if test "$libattr" = "yes" ; then 6473 echo "CONFIG_LIBATTR=y" >> $config_host_mak 6474fi 6475if test "$virtfs" = "yes" ; then 6476 echo "CONFIG_VIRTFS=y" >> $config_host_mak 6477fi 6478if test "$mpath" = "yes" ; then 6479 echo "CONFIG_MPATH=y" >> $config_host_mak 6480 if test "$mpathpersist_new_api" = "yes"; then 6481 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 6482 fi 6483fi 6484if test "$vhost_scsi" = "yes" ; then 6485 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 6486fi 6487if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then 6488 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak 6489fi 6490if test "$vhost_crypto" = "yes" ; then 6491 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 6492fi 6493if test "$vhost_vsock" = "yes" ; then 6494 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 6495fi 6496if test "$vhost_user" = "yes" ; then 6497 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 6498fi 6499if test "$blobs" = "yes" ; then 6500 echo "INSTALL_BLOBS=yes" >> $config_host_mak 6501fi 6502if test "$iovec" = "yes" ; then 6503 echo "CONFIG_IOVEC=y" >> $config_host_mak 6504fi 6505if test "$preadv" = "yes" ; then 6506 echo "CONFIG_PREADV=y" >> $config_host_mak 6507fi 6508if test "$fdt" != "no" ; then 6509 echo "CONFIG_FDT=y" >> $config_host_mak 6510fi 6511if test "$membarrier" = "yes" ; then 6512 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 6513fi 6514if test "$signalfd" = "yes" ; then 6515 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 6516fi 6517if test "$tcg" = "yes"; then 6518 echo "CONFIG_TCG=y" >> $config_host_mak 6519 if test "$tcg_interpreter" = "yes" ; then 6520 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 6521 fi 6522fi 6523if test "$fdatasync" = "yes" ; then 6524 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 6525fi 6526if test "$madvise" = "yes" ; then 6527 echo "CONFIG_MADVISE=y" >> $config_host_mak 6528fi 6529if test "$posix_madvise" = "yes" ; then 6530 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 6531fi 6532if test "$posix_memalign" = "yes" ; then 6533 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 6534fi 6535 6536if test "$spice" = "yes" ; then 6537 echo "CONFIG_SPICE=y" >> $config_host_mak 6538fi 6539 6540if test "$smartcard" = "yes" ; then 6541 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 6542 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 6543 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 6544fi 6545 6546if test "$libusb" = "yes" ; then 6547 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 6548 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 6549 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 6550fi 6551 6552if test "$usb_redir" = "yes" ; then 6553 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 6554 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 6555 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 6556fi 6557 6558if test "$opengl" = "yes" ; then 6559 echo "CONFIG_OPENGL=y" >> $config_host_mak 6560 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 6561 if test "$opengl_dmabuf" = "yes" ; then 6562 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 6563 fi 6564fi 6565 6566if test "$malloc_trim" = "yes" ; then 6567 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 6568fi 6569 6570if test "$avx2_opt" = "yes" ; then 6571 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 6572fi 6573 6574if test "$lzo" = "yes" ; then 6575 echo "CONFIG_LZO=y" >> $config_host_mak 6576fi 6577 6578if test "$snappy" = "yes" ; then 6579 echo "CONFIG_SNAPPY=y" >> $config_host_mak 6580fi 6581 6582if test "$bzip2" = "yes" ; then 6583 echo "CONFIG_BZIP2=y" >> $config_host_mak 6584 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 6585fi 6586 6587if test "$libiscsi" = "yes" ; then 6588 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 6589 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 6590 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 6591fi 6592 6593if test "$libnfs" = "yes" ; then 6594 echo "CONFIG_LIBNFS=m" >> $config_host_mak 6595 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 6596fi 6597 6598if test "$seccomp" = "yes"; then 6599 echo "CONFIG_SECCOMP=y" >> $config_host_mak 6600 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 6601 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 6602fi 6603 6604# XXX: suppress that 6605if [ "$bsd" = "yes" ] ; then 6606 echo "CONFIG_BSD=y" >> $config_host_mak 6607fi 6608 6609if test "$localtime_r" = "yes" ; then 6610 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 6611fi 6612if test "$qom_cast_debug" = "yes" ; then 6613 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 6614fi 6615if test "$rbd" = "yes" ; then 6616 echo "CONFIG_RBD=m" >> $config_host_mak 6617 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 6618 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 6619fi 6620 6621echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 6622if test "$coroutine_pool" = "yes" ; then 6623 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 6624else 6625 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 6626fi 6627 6628if test "$debug_stack_usage" = "yes" ; then 6629 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 6630fi 6631 6632if test "$crypto_afalg" = "yes" ; then 6633 echo "CONFIG_AF_ALG=y" >> $config_host_mak 6634fi 6635 6636if test "$open_by_handle_at" = "yes" ; then 6637 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 6638fi 6639 6640if test "$linux_magic_h" = "yes" ; then 6641 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 6642fi 6643 6644if test "$pragma_diagnostic_available" = "yes" ; then 6645 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 6646fi 6647 6648if test "$valgrind_h" = "yes" ; then 6649 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 6650fi 6651 6652if test "$have_asan_iface_fiber" = "yes" ; then 6653 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 6654fi 6655 6656if test "$has_environ" = "yes" ; then 6657 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 6658fi 6659 6660if test "$cpuid_h" = "yes" ; then 6661 echo "CONFIG_CPUID_H=y" >> $config_host_mak 6662fi 6663 6664if test "$int128" = "yes" ; then 6665 echo "CONFIG_INT128=y" >> $config_host_mak 6666fi 6667 6668if test "$atomic128" = "yes" ; then 6669 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 6670fi 6671 6672if test "$atomic64" = "yes" ; then 6673 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 6674fi 6675 6676if test "$vector16" = "yes" ; then 6677 echo "CONFIG_VECTOR16=y" >> $config_host_mak 6678fi 6679 6680if test "$getauxval" = "yes" ; then 6681 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 6682fi 6683 6684if test "$glusterfs" = "yes" ; then 6685 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 6686 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 6687 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 6688fi 6689 6690if test "$glusterfs_xlator_opt" = "yes" ; then 6691 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 6692fi 6693 6694if test "$glusterfs_discard" = "yes" ; then 6695 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 6696fi 6697 6698if test "$glusterfs_fallocate" = "yes" ; then 6699 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 6700fi 6701 6702if test "$glusterfs_zerofill" = "yes" ; then 6703 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 6704fi 6705 6706if test "$libssh2" = "yes" ; then 6707 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 6708 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 6709 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 6710fi 6711 6712if test "$live_block_migration" = "yes" ; then 6713 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 6714fi 6715 6716if test "$tpm" = "yes"; then 6717 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 6718 # TPM passthrough support? 6719 if test "$tpm_passthrough" = "yes"; then 6720 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 6721 fi 6722 # TPM emulator support? 6723 if test "$tpm_emulator" = "yes"; then 6724 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak 6725 fi 6726fi 6727 6728echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 6729if have_backend "nop"; then 6730 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 6731fi 6732if have_backend "simple"; then 6733 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 6734 # Set the appropriate trace file. 6735 trace_file="\"$trace_file-\" FMT_pid" 6736fi 6737if have_backend "log"; then 6738 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 6739fi 6740if have_backend "ust"; then 6741 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 6742fi 6743if have_backend "dtrace"; then 6744 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 6745 if test "$trace_backend_stap" = "yes" ; then 6746 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 6747 fi 6748fi 6749if have_backend "ftrace"; then 6750 if test "$linux" = "yes" ; then 6751 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 6752 else 6753 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 6754 fi 6755fi 6756if have_backend "syslog"; then 6757 if test "$posix_syslog" = "yes" ; then 6758 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 6759 else 6760 feature_not_found "syslog(trace backend)" "syslog not available" 6761 fi 6762fi 6763echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 6764 6765if test "$rdma" = "yes" ; then 6766 echo "CONFIG_RDMA=y" >> $config_host_mak 6767 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 6768fi 6769 6770if test "$pvrdma" = "yes" ; then 6771 echo "CONFIG_PVRDMA=y" >> $config_host_mak 6772fi 6773 6774if test "$have_rtnetlink" = "yes" ; then 6775 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 6776fi 6777 6778if test "$libxml2" = "yes" ; then 6779 echo "CONFIG_LIBXML2=y" >> $config_host_mak 6780 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 6781 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 6782fi 6783 6784if test "$replication" = "yes" ; then 6785 echo "CONFIG_REPLICATION=y" >> $config_host_mak 6786fi 6787 6788if test "$have_af_vsock" = "yes" ; then 6789 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 6790fi 6791 6792if test "$have_sysmacros" = "yes" ; then 6793 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 6794fi 6795 6796if test "$have_static_assert" = "yes" ; then 6797 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 6798fi 6799 6800if test "$have_utmpx" = "yes" ; then 6801 echo "HAVE_UTMPX=y" >> $config_host_mak 6802fi 6803 6804if test "$ivshmem" = "yes" ; then 6805 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 6806fi 6807if test "$capstone" != "no" ; then 6808 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 6809fi 6810if test "$debug_mutex" = "yes" ; then 6811 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 6812fi 6813 6814# Hold two types of flag: 6815# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 6816# a thread we have a handle to 6817# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular 6818# platform 6819if test "$pthread_setname_np" = "yes" ; then 6820 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6821 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak 6822fi 6823 6824if test "$vxhs" = "yes" ; then 6825 echo "CONFIG_VXHS=y" >> $config_host_mak 6826 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 6827fi 6828 6829if test "$libpmem" = "yes" ; then 6830 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 6831fi 6832 6833if test "$tcg_interpreter" = "yes"; then 6834 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 6835elif test "$ARCH" = "sparc64" ; then 6836 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 6837elif test "$ARCH" = "s390x" ; then 6838 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 6839elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then 6840 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 6841elif test "$ARCH" = "ppc64" ; then 6842 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 6843else 6844 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 6845fi 6846QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES" 6847 6848echo "TOOLS=$tools" >> $config_host_mak 6849echo "ROMS=$roms" >> $config_host_mak 6850echo "MAKE=$make" >> $config_host_mak 6851echo "INSTALL=$install" >> $config_host_mak 6852echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 6853echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 6854echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 6855echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 6856echo "PYTHON=$python" >> $config_host_mak 6857echo "CC=$cc" >> $config_host_mak 6858if $iasl -h > /dev/null 2>&1; then 6859 echo "IASL=$iasl" >> $config_host_mak 6860fi 6861echo "HOST_CC=$host_cc" >> $config_host_mak 6862echo "CXX=$cxx" >> $config_host_mak 6863echo "OBJCC=$objcc" >> $config_host_mak 6864echo "AR=$ar" >> $config_host_mak 6865echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 6866echo "AS=$as" >> $config_host_mak 6867echo "CCAS=$ccas" >> $config_host_mak 6868echo "CPP=$cpp" >> $config_host_mak 6869echo "OBJCOPY=$objcopy" >> $config_host_mak 6870echo "LD=$ld" >> $config_host_mak 6871echo "RANLIB=$ranlib" >> $config_host_mak 6872echo "NM=$nm" >> $config_host_mak 6873echo "WINDRES=$windres" >> $config_host_mak 6874echo "CFLAGS=$CFLAGS" >> $config_host_mak 6875echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 6876echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 6877echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 6878echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 6879if test "$sparse" = "yes" ; then 6880 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 6881 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 6882 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 6883 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 6884 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 6885fi 6886if test "$cross_prefix" != ""; then 6887 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 6888else 6889 echo "AUTOCONF_HOST := " >> $config_host_mak 6890fi 6891echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 6892echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 6893echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 6894echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 6895echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 6896echo "LIBS+=$LIBS" >> $config_host_mak 6897echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 6898echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 6899echo "EXESUF=$EXESUF" >> $config_host_mak 6900echo "DSOSUF=$DSOSUF" >> $config_host_mak 6901echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 6902echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 6903echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 6904echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 6905echo "POD2MAN=$POD2MAN" >> $config_host_mak 6906echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak 6907if test "$gcov" = "yes" ; then 6908 echo "CONFIG_GCOV=y" >> $config_host_mak 6909 echo "GCOV=$gcov_tool" >> $config_host_mak 6910fi 6911 6912if test "$docker" != "no"; then 6913 echo "HAVE_USER_DOCKER=y" >> $config_host_mak 6914fi 6915 6916# use included Linux headers 6917if test "$linux" = "yes" ; then 6918 mkdir -p linux-headers 6919 case "$cpu" in 6920 i386|x86_64|x32) 6921 linux_arch=x86 6922 ;; 6923 ppc|ppc64) 6924 linux_arch=powerpc 6925 ;; 6926 s390x) 6927 linux_arch=s390 6928 ;; 6929 aarch64) 6930 linux_arch=arm64 6931 ;; 6932 mips64) 6933 linux_arch=mips 6934 ;; 6935 *) 6936 # For most CPUs the kernel architecture name and QEMU CPU name match. 6937 linux_arch="$cpu" 6938 ;; 6939 esac 6940 # For non-KVM architectures we will not have asm headers 6941 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 6942 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 6943 fi 6944fi 6945 6946for target in $target_list; do 6947target_dir="$target" 6948config_target_mak=$target_dir/config-target.mak 6949target_name=$(echo $target | cut -d '-' -f 1) 6950target_bigendian="no" 6951 6952case "$target_name" in 6953 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 6954 target_bigendian=yes 6955 ;; 6956esac 6957target_softmmu="no" 6958target_user_only="no" 6959target_linux_user="no" 6960target_bsd_user="no" 6961case "$target" in 6962 ${target_name}-softmmu) 6963 target_softmmu="yes" 6964 ;; 6965 ${target_name}-linux-user) 6966 target_user_only="yes" 6967 target_linux_user="yes" 6968 ;; 6969 ${target_name}-bsd-user) 6970 target_user_only="yes" 6971 target_bsd_user="yes" 6972 ;; 6973 *) 6974 error_exit "Target '$target' not recognised" 6975 exit 1 6976 ;; 6977esac 6978 6979target_compiler="" 6980target_compiler_static="" 6981target_compiler_cflags="" 6982 6983mkdir -p $target_dir 6984echo "# Automatically generated by configure - do not modify" > $config_target_mak 6985 6986bflt="no" 6987mttcg="no" 6988interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 6989gdb_xml_files="" 6990 6991TARGET_ARCH="$target_name" 6992TARGET_BASE_ARCH="" 6993TARGET_ABI_DIR="" 6994 6995case "$target_name" in 6996 i386) 6997 mttcg="yes" 6998 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml" 6999 target_compiler=$cross_cc_i386 7000 target_compiler_cflags=$cross_cc_ccflags_i386 7001 ;; 7002 x86_64) 7003 TARGET_BASE_ARCH=i386 7004 mttcg="yes" 7005 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml" 7006 target_compiler=$cross_cc_x86_64 7007 ;; 7008 alpha) 7009 mttcg="yes" 7010 target_compiler=$cross_cc_alpha 7011 ;; 7012 arm|armeb) 7013 TARGET_ARCH=arm 7014 bflt="yes" 7015 mttcg="yes" 7016 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7017 target_compiler=$cross_cc_arm 7018 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7019 ;; 7020 aarch64|aarch64_be) 7021 TARGET_ARCH=aarch64 7022 TARGET_BASE_ARCH=arm 7023 bflt="yes" 7024 mttcg="yes" 7025 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7026 target_compiler=$cross_cc_aarch64 7027 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7028 ;; 7029 cris) 7030 target_compiler=$cross_cc_cris 7031 ;; 7032 hppa) 7033 mttcg="yes" 7034 target_compiler=$cross_cc_hppa 7035 ;; 7036 lm32) 7037 target_compiler=$cross_cc_lm32 7038 ;; 7039 m68k) 7040 bflt="yes" 7041 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml" 7042 target_compiler=$cross_cc_m68k 7043 ;; 7044 microblaze|microblazeel) 7045 TARGET_ARCH=microblaze 7046 bflt="yes" 7047 echo "TARGET_ABI32=y" >> $config_target_mak 7048 target_compiler=$cross_cc_microblaze 7049 ;; 7050 mips|mipsel) 7051 TARGET_ARCH=mips 7052 target_compiler=$cross_cc_mips 7053 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 7054 ;; 7055 mipsn32|mipsn32el) 7056 TARGET_ARCH=mips64 7057 TARGET_BASE_ARCH=mips 7058 target_compiler=$cross_cc_mipsn32 7059 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 7060 echo "TARGET_ABI32=y" >> $config_target_mak 7061 ;; 7062 mips64|mips64el) 7063 TARGET_ARCH=mips64 7064 TARGET_BASE_ARCH=mips 7065 target_compiler=$cross_cc_mips64 7066 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 7067 ;; 7068 moxie) 7069 target_compiler=$cross_cc_moxie 7070 ;; 7071 nios2) 7072 target_compiler=$cross_cc_nios2 7073 ;; 7074 or1k) 7075 target_compiler=$cross_cc_or1k 7076 TARGET_ARCH=openrisc 7077 TARGET_BASE_ARCH=openrisc 7078 ;; 7079 ppc) 7080 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 7081 target_compiler=$cross_cc_powerpc 7082 ;; 7083 ppc64) 7084 TARGET_BASE_ARCH=ppc 7085 TARGET_ABI_DIR=ppc 7086 mttcg=yes 7087 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7088 target_compiler=$cross_cc_ppc64 7089 ;; 7090 ppc64le) 7091 TARGET_ARCH=ppc64 7092 TARGET_BASE_ARCH=ppc 7093 TARGET_ABI_DIR=ppc 7094 mttcg=yes 7095 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7096 target_compiler=$cross_cc_ppc64le 7097 ;; 7098 ppc64abi32) 7099 TARGET_ARCH=ppc64 7100 TARGET_BASE_ARCH=ppc 7101 TARGET_ABI_DIR=ppc 7102 echo "TARGET_ABI32=y" >> $config_target_mak 7103 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7104 target_compiler=$cross_cc_ppc64abi32 7105 ;; 7106 riscv32) 7107 TARGET_BASE_ARCH=riscv 7108 TARGET_ABI_DIR=riscv 7109 mttcg=yes 7110 target_compiler=$cross_cc_riscv32 7111 ;; 7112 riscv64) 7113 TARGET_BASE_ARCH=riscv 7114 TARGET_ABI_DIR=riscv 7115 mttcg=yes 7116 target_compiler=$cross_cc_riscv64 7117 ;; 7118 sh4|sh4eb) 7119 TARGET_ARCH=sh4 7120 bflt="yes" 7121 target_compiler=$cross_cc_sh4 7122 ;; 7123 sparc) 7124 target_compiler=$cross_cc_sparc 7125 ;; 7126 sparc64) 7127 TARGET_BASE_ARCH=sparc 7128 target_compiler=$cross_cc_sparc64 7129 ;; 7130 sparc32plus) 7131 TARGET_ARCH=sparc64 7132 TARGET_BASE_ARCH=sparc 7133 TARGET_ABI_DIR=sparc 7134 target_compiler=$cross_cc_sparc32plus 7135 echo "TARGET_ABI32=y" >> $config_target_mak 7136 ;; 7137 s390x) 7138 mttcg=yes 7139 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 7140 target_compiler=$cross_cc_s390x 7141 ;; 7142 tilegx) 7143 target_compiler=$cross_cc_tilegx 7144 ;; 7145 tricore) 7146 target_compiler=$cross_cc_tricore 7147 ;; 7148 unicore32) 7149 target_compiler=$cross_cc_unicore32 7150 ;; 7151 xtensa|xtensaeb) 7152 TARGET_ARCH=xtensa 7153 mttcg="yes" 7154 target_compiler=$cross_cc_xtensa 7155 ;; 7156 *) 7157 error_exit "Unsupported target CPU" 7158 ;; 7159esac 7160# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 7161if [ "$TARGET_BASE_ARCH" = "" ]; then 7162 TARGET_BASE_ARCH=$TARGET_ARCH 7163fi 7164 7165# Do we have a cross compiler for this target? 7166if has $target_compiler; then 7167 7168 write_c_skeleton 7169 7170 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then 7171 # For host systems we might get away with building without -static 7172 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then 7173 target_compiler="" 7174 else 7175 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7176 target_compiler_static="n" 7177 fi 7178 else 7179 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7180 target_compiler_static="y" 7181 fi 7182else 7183 target_compiler="" 7184fi 7185 7186symlink "$source_path/Makefile.target" "$target_dir/Makefile" 7187 7188upper() { 7189 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 7190} 7191 7192target_arch_name="$(upper $TARGET_ARCH)" 7193echo "TARGET_$target_arch_name=y" >> $config_target_mak 7194echo "TARGET_NAME=$target_name" >> $config_target_mak 7195echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 7196if [ "$TARGET_ABI_DIR" = "" ]; then 7197 TARGET_ABI_DIR=$TARGET_ARCH 7198fi 7199echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 7200if [ "$HOST_VARIANT_DIR" != "" ]; then 7201 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 7202fi 7203 7204if supported_xen_target $target; then 7205 echo "CONFIG_XEN=y" >> $config_target_mak 7206 if test "$xen_pci_passthrough" = yes; then 7207 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 7208 fi 7209fi 7210if supported_kvm_target $target; then 7211 echo "CONFIG_KVM=y" >> $config_target_mak 7212 if test "$vhost_net" = "yes" ; then 7213 echo "CONFIG_VHOST_NET=y" >> $config_target_mak 7214 if test "$vhost_user" = "yes" ; then 7215 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak 7216 fi 7217 fi 7218fi 7219if supported_hax_target $target; then 7220 echo "CONFIG_HAX=y" >> $config_target_mak 7221fi 7222if supported_hvf_target $target; then 7223 echo "CONFIG_HVF=y" >> $config_target_mak 7224fi 7225if supported_whpx_target $target; then 7226 echo "CONFIG_WHPX=y" >> $config_target_mak 7227fi 7228if test "$target_bigendian" = "yes" ; then 7229 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 7230fi 7231if test "$target_softmmu" = "yes" ; then 7232 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 7233 if test "$mttcg" = "yes" ; then 7234 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 7235 fi 7236fi 7237if test "$target_user_only" = "yes" ; then 7238 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 7239 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 7240fi 7241if test "$target_linux_user" = "yes" ; then 7242 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 7243fi 7244list="" 7245if test ! -z "$gdb_xml_files" ; then 7246 for x in $gdb_xml_files; do 7247 list="$list $source_path/gdb-xml/$x" 7248 done 7249 echo "TARGET_XML_FILES=$list" >> $config_target_mak 7250fi 7251 7252if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then 7253 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 7254fi 7255if test "$target_bsd_user" = "yes" ; then 7256 echo "CONFIG_BSD_USER=y" >> $config_target_mak 7257fi 7258 7259if test -n "$target_compiler"; then 7260 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak 7261 7262 if test -n "$target_compiler_static"; then 7263 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak 7264 fi 7265 7266 if test -n "$target_compiler_cflags"; then 7267 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak 7268 fi 7269fi 7270 7271 7272# generate QEMU_CFLAGS/LDFLAGS for targets 7273 7274cflags="" 7275ldflags="" 7276 7277disas_config() { 7278 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 7279 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 7280} 7281 7282for i in $ARCH $TARGET_BASE_ARCH ; do 7283 case "$i" in 7284 alpha) 7285 disas_config "ALPHA" 7286 ;; 7287 aarch64) 7288 if test -n "${cxx}"; then 7289 disas_config "ARM_A64" 7290 fi 7291 ;; 7292 arm) 7293 disas_config "ARM" 7294 if test -n "${cxx}"; then 7295 disas_config "ARM_A64" 7296 fi 7297 ;; 7298 cris) 7299 disas_config "CRIS" 7300 ;; 7301 hppa) 7302 disas_config "HPPA" 7303 ;; 7304 i386|x86_64|x32) 7305 disas_config "I386" 7306 ;; 7307 lm32) 7308 disas_config "LM32" 7309 ;; 7310 m68k) 7311 disas_config "M68K" 7312 ;; 7313 microblaze*) 7314 disas_config "MICROBLAZE" 7315 ;; 7316 mips*) 7317 disas_config "MIPS" 7318 ;; 7319 moxie*) 7320 disas_config "MOXIE" 7321 ;; 7322 nios2) 7323 disas_config "NIOS2" 7324 ;; 7325 or1k) 7326 disas_config "OPENRISC" 7327 ;; 7328 ppc*) 7329 disas_config "PPC" 7330 ;; 7331 riscv) 7332 disas_config "RISCV" 7333 ;; 7334 s390*) 7335 disas_config "S390" 7336 ;; 7337 sh4) 7338 disas_config "SH4" 7339 ;; 7340 sparc*) 7341 disas_config "SPARC" 7342 ;; 7343 xtensa*) 7344 disas_config "XTENSA" 7345 ;; 7346 esac 7347done 7348if test "$tcg_interpreter" = "yes" ; then 7349 disas_config "TCI" 7350fi 7351 7352case "$ARCH" in 7353alpha) 7354 # Ensure there's only a single GP 7355 cflags="-msmall-data $cflags" 7356;; 7357esac 7358 7359if test "$gprof" = "yes" ; then 7360 echo "TARGET_GPROF=yes" >> $config_target_mak 7361 if test "$target_linux_user" = "yes" ; then 7362 cflags="-p $cflags" 7363 ldflags="-p $ldflags" 7364 fi 7365 if test "$target_softmmu" = "yes" ; then 7366 ldflags="-p $ldflags" 7367 echo "GPROF_CFLAGS=-p" >> $config_target_mak 7368 fi 7369fi 7370 7371if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then 7372 ldflags="$ldflags $textseg_ldflags" 7373fi 7374 7375# Newer kernels on s390 check for an S390_PGSTE program header and 7376# enable the pgste page table extensions in that case. This makes 7377# the vm.allocate_pgste sysctl unnecessary. We enable this program 7378# header if 7379# - we build on s390x 7380# - we build the system emulation for s390x (qemu-system-s390x) 7381# - KVM is enabled 7382# - the linker supports --s390-pgste 7383if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then 7384 if ld_has --s390-pgste ; then 7385 ldflags="-Wl,--s390-pgste $ldflags" 7386 fi 7387fi 7388 7389echo "LDFLAGS+=$ldflags" >> $config_target_mak 7390echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 7391 7392done # for target in $targets 7393 7394if test -n "$enabled_cross_compilers"; then 7395 echo 7396 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers" 7397fi 7398 7399if [ "$fdt" = "git" ]; then 7400 echo "config-host.h: subdir-dtc" >> $config_host_mak 7401fi 7402if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 7403 echo "config-host.h: subdir-capstone" >> $config_host_mak 7404fi 7405if test -n "$LIBCAPSTONE"; then 7406 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 7407fi 7408 7409if test "$numa" = "yes"; then 7410 echo "CONFIG_NUMA=y" >> $config_host_mak 7411fi 7412 7413if test "$ccache_cpp2" = "yes"; then 7414 echo "export CCACHE_CPP2=y" >> $config_host_mak 7415fi 7416 7417# build tree in object directory in case the source is not in the current directory 7418DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm" 7419DIRS="$DIRS tests/fp" 7420DIRS="$DIRS docs docs/interop fsdev scsi" 7421DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 7422DIRS="$DIRS roms/seabios roms/vgabios" 7423FILES="Makefile tests/tcg/Makefile qdict-test-data.txt" 7424FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 7425FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 7426FILES="$FILES tests/fp/Makefile" 7427FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps" 7428FILES="$FILES pc-bios/spapr-rtas/Makefile" 7429FILES="$FILES pc-bios/s390-ccw/Makefile" 7430FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile" 7431FILES="$FILES pc-bios/qemu-icon.bmp" 7432FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit 7433for bios_file in \ 7434 $source_path/pc-bios/*.bin \ 7435 $source_path/pc-bios/*.lid \ 7436 $source_path/pc-bios/*.aml \ 7437 $source_path/pc-bios/*.rom \ 7438 $source_path/pc-bios/*.dtb \ 7439 $source_path/pc-bios/*.img \ 7440 $source_path/pc-bios/openbios-* \ 7441 $source_path/pc-bios/u-boot.* \ 7442 $source_path/pc-bios/palcode-* 7443do 7444 FILES="$FILES pc-bios/$(basename $bios_file)" 7445done 7446for test_file in $(find $source_path/tests/acpi-test-data -type f) 7447do 7448 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')" 7449done 7450for test_file in $(find $source_path/tests/hex-loader-check-data -type f) 7451do 7452 FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')" 7453done 7454mkdir -p $DIRS 7455for f in $FILES ; do 7456 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 7457 symlink "$source_path/$f" "$f" 7458 fi 7459done 7460 7461# temporary config to build submodules 7462for rom in seabios vgabios ; do 7463 config_mak=roms/$rom/config.mak 7464 echo "# Automatically generated by configure - do not modify" > $config_mak 7465 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 7466 echo "AS=$as" >> $config_mak 7467 echo "CCAS=$ccas" >> $config_mak 7468 echo "CC=$cc" >> $config_mak 7469 echo "BCC=bcc" >> $config_mak 7470 echo "CPP=$cpp" >> $config_mak 7471 echo "OBJCOPY=objcopy" >> $config_mak 7472 echo "IASL=$iasl" >> $config_mak 7473 echo "LD=$ld" >> $config_mak 7474 echo "RANLIB=$ranlib" >> $config_mak 7475done 7476 7477# set up tests data directory 7478for tests_subdir in acceptance data; do 7479 if [ ! -e tests/$tests_subdir ]; then 7480 symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir 7481 fi 7482done 7483 7484# set up qemu-iotests in this build directory 7485iotests_common_env="tests/qemu-iotests/common.env" 7486iotests_check="tests/qemu-iotests/check" 7487 7488echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 7489echo >> "$iotests_common_env" 7490echo "export PYTHON='$python'" >> "$iotests_common_env" 7491 7492if [ ! -e "$iotests_check" ]; then 7493 symlink "$source_path/$iotests_check" "$iotests_check" 7494fi 7495 7496# Save the configure command line for later reuse. 7497cat <<EOD >config.status 7498#!/bin/sh 7499# Generated by configure. 7500# Run this file to recreate the current configuration. 7501# Compiler output produced by configure, useful for debugging 7502# configure, is in config.log if it exists. 7503EOD 7504 7505preserve_env() { 7506 envname=$1 7507 7508 eval envval=\$$envname 7509 7510 if test -n "$envval" 7511 then 7512 echo "$envname='$envval'" >> config.status 7513 echo "export $envname" >> config.status 7514 else 7515 echo "unset $envname" >> config.status 7516 fi 7517} 7518 7519# Preserve various env variables that influence what 7520# features/build target configure will detect 7521preserve_env AR 7522preserve_env AS 7523preserve_env CC 7524preserve_env CPP 7525preserve_env CXX 7526preserve_env INSTALL 7527preserve_env LD 7528preserve_env LD_LIBRARY_PATH 7529preserve_env LIBTOOL 7530preserve_env MAKE 7531preserve_env NM 7532preserve_env OBJCOPY 7533preserve_env PATH 7534preserve_env PKG_CONFIG 7535preserve_env PKG_CONFIG_LIBDIR 7536preserve_env PKG_CONFIG_PATH 7537preserve_env PYTHON 7538preserve_env SDL_CONFIG 7539preserve_env SDL2_CONFIG 7540preserve_env SMBD 7541preserve_env STRIP 7542preserve_env WINDRES 7543 7544printf "exec" >>config.status 7545printf " '%s'" "$0" "$@" >>config.status 7546echo ' "$@"' >>config.status 7547chmod +x config.status 7548 7549rm -r "$TMPDIR1" 7550