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