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