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