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