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