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