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