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