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