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