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