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