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