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