configure 139.4 KB
Newer Older
B
bellard 已提交
1 2
#!/bin/sh
#
B
bellard 已提交
3
# qemu configure script (c) 2003 Fabrice Bellard
B
bellard 已提交
4
#
5

6 7 8 9 10
# Unset some variables known to interfere with behavior of common tools,
# just as autoconf does.
CLICOLOR_FORCE= GREP_OPTIONS=
unset CLICOLOR_FORCE GREP_OPTIONS

11 12 13 14 15 16 17 18 19 20 21
# Temporary directory used for files created while
# configure runs. Since it is in the build directory
# we can safely blow away any previous version of it
# (and we need not jump through hoops to try to delete
# it when configure exits.)
TMPDIR1="config-temp"
rm -rf "${TMPDIR1}"
mkdir -p "${TMPDIR1}"
if [ $? -ne 0 ]; then
    echo "ERROR: failed to create temporary directory"
    exit 1
B
bellard 已提交
22 23
fi

24 25
TMPB="qemu-conf"
TMPC="${TMPDIR1}/${TMPB}.c"
26
TMPO="${TMPDIR1}/${TMPB}.o"
27
TMPCXX="${TMPDIR1}/${TMPB}.cxx"
28 29
TMPL="${TMPDIR1}/${TMPB}.lo"
TMPA="${TMPDIR1}/lib${TMPB}.la"
30
TMPE="${TMPDIR1}/${TMPB}.exe"
B
bellard 已提交
31

G
Gerd Hoffmann 已提交
32
rm -f config.log
33

34 35
# Print a helpful header at the top of config.log
echo "# QEMU configure log $(date)" >> config.log
36 37 38
printf "# Configured with:" >> config.log
printf " '%s'" "$0" "$@" >> config.log
echo >> config.log
39 40
echo "#" >> config.log

41 42 43 44 45 46 47 48 49 50 51
error_exit() {
    echo
    echo "ERROR: $1"
    while test -n "$2"; do
        echo "       $2"
        shift
    done
    echo
    exit 1
}

52 53 54 55 56 57 58
do_compiler() {
    # Run the compiler, capturing its output to the log. First argument
    # is compiler binary to execute.
    local compiler="$1"
    shift
    echo $compiler "$@" >> config.log
    $compiler "$@" >> config.log 2>&1 || return $?
59 60 61 62 63 64 65 66 67 68 69 70 71
    # Test passed. If this is an --enable-werror build, rerun
    # the test with -Werror and bail out if it fails. This
    # makes warning-generating-errors in configure test code
    # obvious to developers.
    if test "$werror" != "yes"; then
        return 0
    fi
    # Don't bother rerunning the compile if we were already using -Werror
    case "$*" in
        *-Werror*)
           return 0
        ;;
    esac
72 73
    echo $compiler -Werror "$@" >> config.log
    $compiler -Werror "$@" >> config.log 2>&1 && return $?
74 75 76 77
    error_exit "configure test passed without -Werror but failed with -Werror." \
        "This is probably a bug in the configure script. The failing command" \
        "will be at the bottom of config.log." \
        "You can run configure with --disable-werror to bypass this check."
78 79
}

80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
do_cc() {
    do_compiler "$cc" "$@"
}

do_cxx() {
    do_compiler "$cxx" "$@"
}

update_cxxflags() {
    # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
    # options which some versions of GCC's C++ compiler complain about
    # because they only make sense for C programs.
    QEMU_CXXFLAGS=
    for arg in $QEMU_CFLAGS; do
        case $arg in
            -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
                ;;
            *)
                QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
                ;;
        esac
    done
}

105
compile_object() {
106
  do_cc $QEMU_CFLAGS -c -o $TMPO $TMPC
107 108 109 110 111
}

compile_prog() {
  local_cflags="$1"
  local_ldflags="$2"
112
  do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
113 114
}

115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
do_libtool() {
    local mode=$1
    shift
    # Run the compiler, capturing its output to the log.
    echo $libtool $mode --tag=CC $cc "$@" >> config.log
    $libtool $mode --tag=CC $cc "$@" >> config.log 2>&1 || return $?
    # Test passed. If this is an --enable-werror build, rerun
    # the test with -Werror and bail out if it fails. This
    # makes warning-generating-errors in configure test code
    # obvious to developers.
    if test "$werror" != "yes"; then
        return 0
    fi
    # Don't bother rerunning the compile if we were already using -Werror
    case "$*" in
        *-Werror*)
           return 0
        ;;
    esac
    echo $libtool $mode --tag=CC $cc -Werror "$@" >> config.log
    $libtool $mode --tag=CC $cc -Werror "$@" >> config.log 2>&1 && return $?
    error_exit "configure test passed without -Werror but failed with -Werror." \
        "This is probably a bug in the configure script. The failing command" \
        "will be at the bottom of config.log." \
        "You can run configure with --disable-werror to bypass this check."
}

libtool_prog() {
    do_libtool --mode=compile $QEMU_CFLAGS -c -fPIE -DPIE -o $TMPO $TMPC || return $?
    do_libtool --mode=link $LDFLAGS -o $TMPA $TMPL -rpath /usr/local/lib
}

147 148
# symbolically link $1 to $2.  Portable version of "ln -sf".
symlink() {
149
  rm -rf "$2"
150
  mkdir -p "$(dirname "$2")"
151
  ln -s "$1" "$2"
152 153
}

154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
# check whether a command is available to this shell (may be either an
# executable or a builtin)
has() {
    type "$1" >/dev/null 2>&1
}

# search for an executable in PATH
path_of() {
    local_command="$1"
    local_ifs="$IFS"
    local_dir=""

    # pathname has a dir component?
    if [ "${local_command#*/}" != "$local_command" ]; then
        if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
            echo "$local_command"
            return 0
        fi
    fi
    if [ -z "$local_command" ]; then
        return 1
    fi

    IFS=:
    for local_dir in $PATH; do
        if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
            echo "$local_dir/$local_command"
            IFS="${local_ifs:-$(printf ' \t\n')}"
            return 0
        fi
    done
    # not found
    IFS="${local_ifs:-$(printf ' \t\n')}"
    return 1
}

L
Lluís Vilanova 已提交
190 191 192 193
have_backend () {
    echo "$trace_backends" | grep "$1" >/dev/null
}

B
bellard 已提交
194
# default parameters
P
Paolo Bonzini 已提交
195
source_path=`dirname "$0"`
196
cpu=""
197
iasl="iasl"
198
interp_prefix="/usr/gnemul/qemu-%M"
B
bellard 已提交
199
static="no"
B
bellard 已提交
200
cross_prefix=""
M
malc 已提交
201
audio_drv_list=""
202 203
block_drv_rw_whitelist=""
block_drv_ro_whitelist=""
204
host_cc="cc"
J
Juan Quintela 已提交
205
libs_softmmu=""
J
Juan Quintela 已提交
206
libs_tools=""
207
audio_pt_int=""
208
audio_win_int=""
P
Paolo Bonzini 已提交
209
cc_i386=i386-pc-linux-gnu-gcc
210
libs_qga=""
211
debug_info="yes"
212
stack_protector=""
213

214 215
# Don't accept a target_list environment variable.
unset target_list
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234

# Default value for a variable defining feature "foo".
#  * foo="no"  feature will only be used if --enable-foo arg is given
#  * foo=""    feature will be searched for, and if found, will be used
#              unless --disable-foo is given
#  * foo="yes" this value will only be set by --enable-foo flag.
#              feature will searched for,
#              if not found, configure exits with error
#
# Always add --enable-foo and --disable-foo command line args.
# Distributions want to ensure that several features are compiled in, and it
# is impossible without a --enable-foo that exits if a feature is not found.

bluez=""
brlapi=""
curl=""
curses=""
docs=""
fdt=""
235
netmap="no"
236
pixman=""
237
sdl=""
238
sdlabi="1.2"
239
virtfs=""
J
Jes Sorensen 已提交
240
vnc="yes"
241 242 243 244 245 246 247
sparse="no"
uuid=""
vde=""
vnc_tls=""
vnc_sasl=""
vnc_jpeg=""
vnc_png=""
248
vnc_ws=""
249
xen=""
250
xen_ctrl_version=""
251
xen_pci_passthrough=""
252
linux_aio=""
253
cap_ng=""
254
attr=""
255
libattr=""
256 257
xfs=""

258
vhost_net="no"
259
vhost_scsi="no"
260
kvm="no"
M
Michael R. Hines 已提交
261
rdma=""
262 263 264 265
gprof="no"
debug_tcg="no"
debug="no"
strip_opt="yes"
266
tcg_interpreter="no"
267 268
bigendian="no"
mingw32="no"
B
Blue Swirl 已提交
269 270
gcov="no"
gcov_tool="gcov"
271
EXESUF=""
F
Fam Zheng 已提交
272 273 274
DSOSUF=".so"
LDFLAGS_SHARED="-shared"
modules="no"
275 276
prefix="/usr/local"
mandir="\${prefix}/share/man"
277
datadir="\${prefix}/share"
278
qemu_docdir="\${prefix}/share/doc/qemu"
279
bindir="\${prefix}/bin"
A
Alon Levy 已提交
280
libdir="\${prefix}/lib"
281
libexecdir="\${prefix}/libexec"
282
includedir="\${prefix}/include"
283
sysconfdir="\${prefix}/etc"
L
Luiz Capitulino 已提交
284
local_statedir="\${prefix}/var"
285 286 287 288 289 290 291 292 293 294 295 296 297
confsuffix="/qemu"
slirp="yes"
fmod_lib=""
fmod_inc=""
oss_lib=""
bsd="no"
linux="no"
solaris="no"
profiler="no"
cocoa="no"
softmmu="yes"
linux_user="no"
bsd_user="no"
298
guest_base="yes"
299 300 301
aix="no"
blobs="yes"
pkgversion=""
302
pie=""
303
zero_malloc=""
304
qom_cast_debug="yes"
L
Lluís Vilanova 已提交
305
trace_backends="nop"
306 307 308
trace_file="trace"
spice=""
rbd=""
R
Robert Relyea 已提交
309
smartcard_nss=""
G
Gerd Hoffmann 已提交
310
libusb=""
311
usb_redir=""
312
glx=""
A
Alon Levy 已提交
313
zlib="yes"
314 315
lzo=""
snappy=""
316
guest_agent=""
317 318 319
guest_agent_with_vss="no"
vss_win32_sdk=""
win_sdk="no"
320
want_tools="yes"
R
Ronnie Sahlberg 已提交
321
libiscsi=""
P
Peter Lieven 已提交
322
libnfs=""
323
coroutine=""
324
coroutine_pool=""
325
seccomp=""
326
glusterfs=""
327
glusterfs_discard="no"
328
glusterfs_zerofill="no"
329
virtio_blk_data_plane=""
A
Anthony Liguori 已提交
330
gtk=""
331
gtkabi=""
S
Stefan Weil 已提交
332
vte=""
333
tpm="yes"
334
libssh2=""
335
vhdx=""
336
quorum=""
337
numa=""
338

339 340 341 342 343 344
# parse CC options first
for opt do
  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
  case "$opt" in
  --cross-prefix=*) cross_prefix="$optarg"
  ;;
345
  --cc=*) CC="$optarg"
346
  ;;
347 348
  --cxx=*) CXX="$optarg"
  ;;
P
Paolo Bonzini 已提交
349 350
  --source-path=*) source_path="$optarg"
  ;;
351 352
  --cpu=*) cpu="$optarg"
  ;;
J
Juan Quintela 已提交
353
  --extra-cflags=*) QEMU_CFLAGS="$optarg $QEMU_CFLAGS"
354
                    EXTRA_CFLAGS="$optarg"
355 356
  ;;
  --extra-ldflags=*) LDFLAGS="$optarg $LDFLAGS"
357
                     EXTRA_LDFLAGS="$optarg"
358
  ;;
359 360 361 362
  --enable-debug-info) debug_info="yes"
  ;;
  --disable-debug-info) debug_info="no"
  ;;
363 364 365 366
  esac
done
# OS specific
# Using uname is really, really broken.  Once we have the right set of checks
367
# we can eliminate its usage altogether.
368

369 370 371 372 373 374 375 376 377 378
# Preferred compiler:
#  ${CC} (if set)
#  ${cross_prefix}gcc (if cross-prefix specified)
#  system compiler
if test -z "${CC}${cross_prefix}"; then
  cc="$host_cc"
else
  cc="${CC-${cross_prefix}gcc}"
fi

379 380 381 382 383 384
if test -z "${CXX}${cross_prefix}"; then
  cxx="c++"
else
  cxx="${CXX-${cross_prefix}g++}"
fi

385
ar="${AR-${cross_prefix}ar}"
386 387
as="${AS-${cross_prefix}as}"
cpp="${CPP-$cc -E}"
388 389
objcopy="${OBJCOPY-${cross_prefix}objcopy}"
ld="${LD-${cross_prefix}ld}"
B
Brad 已提交
390
libtool="${LIBTOOL-${cross_prefix}libtool}"
391 392
strip="${STRIP-${cross_prefix}strip}"
windres="${WINDRES-${cross_prefix}windres}"
393 394 395 396 397
pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
query_pkg_config() {
    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
}
pkg_config=query_pkg_config
398
sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
399
sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
400

401 402 403
# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
ARFLAGS="${ARFLAGS-rv}"

404
# default flags for all hosts
405
QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
406
QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
K
Kevin Wolf 已提交
407
QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
408
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
409
QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
410 411 412 413
if test "$debug_info" = "yes"; then
    CFLAGS="-g $CFLAGS"
    LDFLAGS="-g $LDFLAGS"
fi
414

P
Paolo Bonzini 已提交
415 416 417
# make source path absolute
source_path=`cd "$source_path"; pwd`

418 419 420 421 422 423 424 425
# running configure in the source tree?
# we know that's the case if configure is there.
if test -f "./configure"; then
    pwd_is_source_path="y"
else
    pwd_is_source_path="n"
fi

426 427 428
check_define() {
cat > $TMPC <<EOF
#if !defined($1)
429
#error $1 not defined
430 431 432
#endif
int main(void) { return 0; }
EOF
433
  compile_object
434 435
}

436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470
if check_define __linux__ ; then
  targetos="Linux"
elif check_define _WIN32 ; then
  targetos='MINGW32'
elif check_define __OpenBSD__ ; then
  targetos='OpenBSD'
elif check_define __sun__ ; then
  targetos='SunOS'
elif check_define __HAIKU__ ; then
  targetos='Haiku'
else
  targetos=`uname -s`
fi

# Some host OSes need non-standard checks for which CPU to use.
# Note that these checks are broken for cross-compilation: if you're
# cross-compiling to one of these OSes then you'll need to specify
# the correct CPU with the --cpu option.
case $targetos in
Darwin)
  # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
  # run 64-bit userspace code.
  # If the user didn't specify a CPU explicitly and the kernel says this is
  # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
  if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
    cpu="x86_64"
  fi
  ;;
SunOS)
  # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
    cpu="x86_64"
  fi
esac

471 472 473 474
if test ! -z "$cpu" ; then
  # command line argument
  :
elif check_define __i386__ ; then
475 476
  cpu="i386"
elif check_define __x86_64__ ; then
477 478 479 480 481
  if check_define __ILP32__ ; then
    cpu="x32"
  else
    cpu="x86_64"
  fi
B
blueswir1 已提交
482 483 484 485 486 487
elif check_define __sparc__ ; then
  if check_define __arch64__ ; then
    cpu="sparc64"
  else
    cpu="sparc"
  fi
M
malc 已提交
488 489 490 491 492 493
elif check_define _ARCH_PPC ; then
  if check_define _ARCH_PPC64 ; then
    cpu="ppc64"
  else
    cpu="ppc"
  fi
A
Aurelien Jarno 已提交
494 495
elif check_define __mips__ ; then
  cpu="mips"
A
Aurelien Jarno 已提交
496 497
elif check_define __ia64__ ; then
  cpu="ia64"
498 499 500 501 502 503
elif check_define __s390__ ; then
  if check_define __s390x__ ; then
    cpu="s390x"
  else
    cpu="s390"
  fi
504 505
elif check_define __arm__ ; then
  cpu="arm"
506 507
elif check_define __aarch64__ ; then
  cpu="aarch64"
508 509
elif check_define __hppa__ ; then
  cpu="hppa"
510
else
M
malc 已提交
511
  cpu=`uname -m`
512 513
fi

514 515 516
ARCH=
# Normalise host CPU name and set ARCH.
# Note that this case should only have supported host CPUs, not guests.
B
bellard 已提交
517
case "$cpu" in
518
  ia64|ppc|ppc64|s390|s390x|sparc64|x32)
519 520
    cpu="$cpu"
  ;;
B
bellard 已提交
521
  i386|i486|i586|i686|i86pc|BePC)
522
    cpu="i386"
B
bellard 已提交
523
  ;;
A
aurel32 已提交
524 525 526
  x86_64|amd64)
    cpu="x86_64"
  ;;
527 528
  armv*b|armv*l|arm)
    cpu="arm"
B
bellard 已提交
529
  ;;
530 531 532
  aarch64)
    cpu="aarch64"
  ;;
A
Aurelien Jarno 已提交
533 534 535
  mips*)
    cpu="mips"
  ;;
536
  sparc|sun4[cdmuv])
B
bellard 已提交
537 538
    cpu="sparc"
  ;;
B
bellard 已提交
539
  *)
540 541
    # This will result in either an error or falling back to TCI later
    ARCH=unknown
B
bellard 已提交
542 543
  ;;
esac
544 545 546
if test -z "$ARCH"; then
  ARCH="$cpu"
fi
J
Juan Quintela 已提交
547

B
bellard 已提交
548
# OS specific
549

550 551 552
# host *BSD for user mode
HOST_VARIANT_DIR=""

B
bellard 已提交
553
case $targetos in
B
bellard 已提交
554
CYGWIN*)
555
  mingw32="yes"
J
Juan Quintela 已提交
556
  QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
557 558
  audio_possible_drivers="winwave sdl"
  audio_drv_list="winwave"
B
bellard 已提交
559
;;
B
bellard 已提交
560
MINGW32*)
561
  mingw32="yes"
562 563
  audio_possible_drivers="winwave dsound sdl fmod"
  audio_drv_list="winwave"
B
bellard 已提交
564
;;
T
ths 已提交
565
GNU/kFreeBSD)
A
Aurelien Jarno 已提交
566
  bsd="yes"
567 568
  audio_drv_list="oss"
  audio_possible_drivers="oss sdl esd pa"
T
ths 已提交
569
;;
B
bellard 已提交
570
FreeBSD)
571
  bsd="yes"
572
  make="${MAKE-gmake}"
573 574
  audio_drv_list="oss"
  audio_possible_drivers="oss sdl esd pa"
575 576
  # needed for kinfo_getvmmap(3) in libutil.h
  LIBS="-lutil $LIBS"
577
  netmap=""  # enable netmap autodetect
578
  HOST_VARIANT_DIR="freebsd"
B
bellard 已提交
579
;;
580
DragonFly)
581
  bsd="yes"
582
  make="${MAKE-gmake}"
583 584
  audio_drv_list="oss"
  audio_possible_drivers="oss sdl esd pa"
585
  HOST_VARIANT_DIR="dragonfly"
586
;;
B
bellard 已提交
587
NetBSD)
588
  bsd="yes"
589
  make="${MAKE-gmake}"
590 591 592
  audio_drv_list="oss"
  audio_possible_drivers="oss sdl esd"
  oss_lib="-lossaudio"
593
  HOST_VARIANT_DIR="netbsd"
B
bellard 已提交
594 595
;;
OpenBSD)
596
  bsd="yes"
597
  make="${MAKE-gmake}"
B
Brad Smith 已提交
598 599
  audio_drv_list="sdl"
  audio_possible_drivers="sdl esd"
600
  HOST_VARIANT_DIR="openbsd"
B
bellard 已提交
601
;;
602
Darwin)
603 604
  bsd="yes"
  darwin="yes"
F
Fam Zheng 已提交
605
  LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
606
  if [ "$cpu" = "x86_64" ] ; then
J
Juan Quintela 已提交
607
    QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
608
    LDFLAGS="-arch x86_64 $LDFLAGS"
609 610 611 612 613
  fi
  cocoa="yes"
  audio_drv_list="coreaudio"
  audio_possible_drivers="coreaudio sdl fmod"
  LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
614
  libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
615 616 617
  # Disable attempts to use ObjectiveC features in os/object.h since they
  # won't work when we're compiling with gcc as a C compiler.
  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
618
  HOST_VARIANT_DIR="darwin"
619
;;
B
bellard 已提交
620
SunOS)
621
  solaris="yes"
622 623
  make="${MAKE-gmake}"
  install="${INSTALL-ginstall}"
624
  ld="gld"
625
  smbd="${SMBD-/usr/sfw/sbin/smbd}"
626 627 628 629 630 631
  needs_libsunmath="no"
  solarisrev=`uname -r | cut -f2 -d.`
  if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
    if test "$solarisrev" -le 9 ; then
      if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
        needs_libsunmath="yes"
632 633 634
        QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
        LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
        LIBS="-lsunmath $LIBS"
635
      else
636 637 638 639
        error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
            "libsunmath from the Sun Studio compilers tools, due to a lack of" \
            "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
            "Studio 11 can be downloaded from www.sun.com."
640
      fi
T
ths 已提交
641
    fi
642 643 644 645 646
  fi
  if test -f /usr/include/sys/soundcard.h ; then
    audio_drv_list="oss"
  fi
  audio_possible_drivers="oss sdl"
647 648 649 650
# needed for CMSG_ macros in sys/socket.h
  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
# needed for TIOCWIN* defines in termios.h
  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
J
Juan Quintela 已提交
651
  QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
652 653 654
  solarisnetlibs="-lsocket -lnsl -lresolv"
  LIBS="$solarisnetlibs $LIBS"
  libs_qga="$solarisnetlibs $libs_qga"
T
ths 已提交
655
;;
M
malc 已提交
656
AIX)
657
  aix="yes"
658
  make="${MAKE-gmake}"
M
malc 已提交
659
;;
660 661 662 663 664
Haiku)
  haiku="yes"
  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
  LIBS="-lposix_error_mapper -lnetwork $LIBS"
;;
665
*)
666 667 668 669
  audio_drv_list="oss"
  audio_possible_drivers="oss alsa sdl esd pa"
  linux="yes"
  linux_user="yes"
670 671
  kvm="yes"
  vhost_net="yes"
672
  vhost_scsi="yes"
673
  if [ "$cpu" = "i386" -o "$cpu" = "x86_64" -o "$cpu" = "x32" ] ; then
674
    audio_possible_drivers="$audio_possible_drivers fmod"
675
  fi
676
  QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
B
bellard 已提交
677
;;
B
bellard 已提交
678 679
esac

B
bellard 已提交
680
if [ "$bsd" = "yes" ] ; then
681
  if [ "$darwin" != "yes" ] ; then
682
    bsd_user="yes"
683
  fi
B
bellard 已提交
684 685
fi

686 687
: ${make=${MAKE-make}}
: ${install=${INSTALL-install}}
688
: ${python=${PYTHON-python}}
689
: ${smbd=${SMBD-/usr/sbin/smbd}}
690

691 692 693 694 695 696 697
# Default objcc to clang if available, otherwise use CC
if has clang; then
  objcc=clang
else
  objcc="$cc"
fi

698 699
if test "$mingw32" = "yes" ; then
  EXESUF=".exe"
F
Fam Zheng 已提交
700
  DSOSUF=".dll"
J
Juan Quintela 已提交
701
  QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
702 703
  # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
  QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
704 705 706 707 708 709 710
  LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
cat > $TMPC << EOF
int main(void) { return 0; }
EOF
  if compile_prog "" "-liberty" ; then
    LIBS="-liberty $LIBS"
  fi
711
  prefix="c:/Program Files/QEMU"
712
  mandir="\${prefix}"
713
  datadir="\${prefix}"
714
  qemu_docdir="\${prefix}"
715 716
  bindir="\${prefix}"
  sysconfdir="\${prefix}"
717
  local_statedir=
718
  confsuffix=""
719
  libs_qga="-lws2_32 -lwinmm -lpowrprof $libs_qga"
720 721
fi

722
werror=""
723

B
bellard 已提交
724
for opt do
P
pbrook 已提交
725
  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
B
bellard 已提交
726
  case "$opt" in
727 728
  --help|-h) show_help=yes
  ;;
M
Mike Frysinger 已提交
729 730
  --version|-V) exec cat $source_path/VERSION
  ;;
731
  --prefix=*) prefix="$optarg"
B
bellard 已提交
732
  ;;
733
  --interp-prefix=*) interp_prefix="$optarg"
B
bellard 已提交
734
  ;;
P
Paolo Bonzini 已提交
735
  --source-path=*)
B
bellard 已提交
736
  ;;
737
  --cross-prefix=*)
B
bellard 已提交
738
  ;;
739
  --cc=*)
B
bellard 已提交
740
  ;;
741
  --host-cc=*) host_cc="$optarg"
B
bellard 已提交
742
  ;;
743 744
  --cxx=*)
  ;;
745 746
  --iasl=*) iasl="$optarg"
  ;;
747 748
  --objcc=*) objcc="$optarg"
  ;;
749
  --make=*) make="$optarg"
B
bellard 已提交
750
  ;;
751 752
  --install=*) install="$optarg"
  ;;
B
Blue Swirl 已提交
753 754
  --python=*) python="$optarg"
  ;;
B
Blue Swirl 已提交
755 756
  --gcov=*) gcov_tool="$optarg"
  ;;
757 758
  --smbd=*) smbd="$optarg"
  ;;
759
  --extra-cflags=*)
B
bellard 已提交
760
  ;;
761
  --extra-ldflags=*)
B
bellard 已提交
762
  ;;
763 764 765 766
  --enable-debug-info)
  ;;
  --disable-debug-info)
  ;;
F
Fam Zheng 已提交
767 768 769
  --enable-modules)
      modules="yes"
  ;;
770
  --cpu=*)
B
bellard 已提交
771
  ;;
772
  --target-list=*) target_list="$optarg"
B
bellard 已提交
773
  ;;
L
Lluís Vilanova 已提交
774 775 776 777
  --enable-trace-backends=*) trace_backends="$optarg"
  ;;
  # XXX: backwards compatibility
  --enable-trace-backend=*) trace_backends="$optarg"
778
  ;;
779
  --with-trace-file=*) trace_file="$optarg"
P
Prerna Saxena 已提交
780
  ;;
B
bellard 已提交
781 782
  --enable-gprof) gprof="yes"
  ;;
B
Blue Swirl 已提交
783 784
  --enable-gcov) gcov="yes"
  ;;
785 786 787
  --static)
    static="yes"
    LDFLAGS="-static $LDFLAGS"
788
    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
B
bellard 已提交
789
  ;;
790 791 792 793
  --mandir=*) mandir="$optarg"
  ;;
  --bindir=*) bindir="$optarg"
  ;;
A
Alon Levy 已提交
794 795
  --libdir=*) libdir="$optarg"
  ;;
796 797
  --libexecdir=*) libexecdir="$optarg"
  ;;
798 799
  --includedir=*) includedir="$optarg"
  ;;
800
  --datadir=*) datadir="$optarg"
801
  ;;
802 803
  --with-confsuffix=*) confsuffix="$optarg"
  ;;
804
  --docdir=*) qemu_docdir="$optarg"
805
  ;;
806
  --sysconfdir=*) sysconfdir="$optarg"
807
  ;;
L
Luiz Capitulino 已提交
808 809 810
  --localstatedir=*) local_statedir="$optarg"
  ;;
  --sbindir=*|--sharedstatedir=*|\
811 812 813 814 815 816 817
  --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
  --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
    # These switches are silently ignored, for compatibility with
    # autoconf-generated configure scripts. This allows QEMU's
    # configure to be used by RPM and similar macros that set
    # lots of directory switches by default.
  ;;
818 819 820 821
  --with-system-pixman) pixman="system"
  ;;
  --without-system-pixman) pixman="internal"
  ;;
822 823
  --without-pixman) pixman="none"
  ;;
824 825
  --disable-sdl) sdl="no"
  ;;
826 827
  --enable-sdl) sdl="yes"
  ;;
828 829
  --with-sdlabi=*) sdlabi="$optarg"
  ;;
830 831 832 833
  --disable-qom-cast-debug) qom_cast_debug="no"
  ;;
  --enable-qom-cast-debug) qom_cast_debug="yes"
  ;;
834 835 836 837
  --disable-virtfs) virtfs="no"
  ;;
  --enable-virtfs) virtfs="yes"
  ;;
J
Jes Sorensen 已提交
838 839 840 841
  --disable-vnc) vnc="no"
  ;;
  --enable-vnc) vnc="yes"
  ;;
M
malc 已提交
842
  --fmod-lib=*) fmod_lib="$optarg"
843
  ;;
844 845
  --fmod-inc=*) fmod_inc="$optarg"
  ;;
B
blueswir1 已提交
846 847
  --oss-lib=*) oss_lib="$optarg"
  ;;
M
malc 已提交
848
  --audio-drv-list=*) audio_drv_list="$optarg"
B
bellard 已提交
849
  ;;
850 851 852
  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
  ;;
  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
853
  ;;
854 855 856 857
  --enable-debug-tcg) debug_tcg="yes"
  ;;
  --disable-debug-tcg) debug_tcg="no"
  ;;
P
Paul Brook 已提交
858 859 860 861 862 863
  --enable-debug)
      # Enable debugging options that aren't excessively noisy
      debug_tcg="yes"
      debug="yes"
      strip_opt="no"
  ;;
864 865 866 867
  --enable-sparse) sparse="yes"
  ;;
  --disable-sparse) sparse="no"
  ;;
868 869
  --disable-strip) strip_opt="no"
  ;;
870 871
  --disable-vnc-tls) vnc_tls="no"
  ;;
872 873
  --enable-vnc-tls) vnc_tls="yes"
  ;;
874 875
  --disable-vnc-sasl) vnc_sasl="no"
  ;;
876 877
  --enable-vnc-sasl) vnc_sasl="yes"
  ;;
878 879 880 881
  --disable-vnc-jpeg) vnc_jpeg="no"
  ;;
  --enable-vnc-jpeg) vnc_jpeg="yes"
  ;;
C
Corentin Chary 已提交
882 883 884 885
  --disable-vnc-png) vnc_png="no"
  ;;
  --enable-vnc-png) vnc_png="yes"
  ;;
886 887 888 889
  --disable-vnc-ws) vnc_ws="no"
  ;;
  --enable-vnc-ws) vnc_ws="yes"
  ;;
B
bellard 已提交
890
  --disable-slirp) slirp="no"
891
  ;;
892 893 894 895
  --disable-uuid) uuid="no"
  ;;
  --enable-uuid) uuid="yes"
  ;;
896
  --disable-vde) vde="no"
897
  ;;
898 899
  --enable-vde) vde="yes"
  ;;
900 901 902 903
  --disable-netmap) netmap="no"
  ;;
  --enable-netmap) netmap="yes"
  ;;
904 905
  --disable-xen) xen="no"
  ;;
906 907
  --enable-xen) xen="yes"
  ;;
908 909 910 911
  --disable-xen-pci-passthrough) xen_pci_passthrough="no"
  ;;
  --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
  ;;
A
aurel32 已提交
912 913
  --disable-brlapi) brlapi="no"
  ;;
914 915
  --enable-brlapi) brlapi="yes"
  ;;
B
balrog 已提交
916 917
  --disable-bluez) bluez="no"
  ;;
918 919
  --enable-bluez) bluez="yes"
  ;;
A
aliguori 已提交
920 921
  --disable-kvm) kvm="no"
  ;;
922 923
  --enable-kvm) kvm="yes"
  ;;
924 925 926 927
  --disable-tcg-interpreter) tcg_interpreter="no"
  ;;
  --enable-tcg-interpreter) tcg_interpreter="yes"
  ;;
928 929 930 931
  --disable-cap-ng)  cap_ng="no"
  ;;
  --enable-cap-ng) cap_ng="yes"
  ;;
932 933 934 935
  --disable-spice) spice="no"
  ;;
  --enable-spice) spice="yes"
  ;;
R
Ronnie Sahlberg 已提交
936 937 938 939
  --disable-libiscsi) libiscsi="no"
  ;;
  --enable-libiscsi) libiscsi="yes"
  ;;
P
Peter Lieven 已提交
940 941 942 943
  --disable-libnfs) libnfs="no"
  ;;
  --enable-libnfs) libnfs="yes"
  ;;
944 945
  --enable-profiler) profiler="yes"
  ;;
946 947
  --disable-cocoa) cocoa="no"
  ;;
948 949 950 951
  --enable-cocoa)
      cocoa="yes" ;
      sdl="no" ;
      audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
952
  ;;
P
pbrook 已提交
953
  --disable-system) softmmu="no"
954
  ;;
P
pbrook 已提交
955
  --enable-system) softmmu="yes"
956
  ;;
957 958 959 960 961
  --disable-user)
      linux_user="no" ;
      bsd_user="no" ;
  ;;
  --enable-user) ;;
962
  --disable-linux-user) linux_user="no"
963
  ;;
964 965
  --enable-linux-user) linux_user="yes"
  ;;
B
blueswir1 已提交
966 967 968 969
  --disable-bsd-user) bsd_user="no"
  ;;
  --enable-bsd-user) bsd_user="yes"
  ;;
P
Paul Brook 已提交
970 971 972 973
  --enable-guest-base) guest_base="yes"
  ;;
  --disable-guest-base) guest_base="no"
  ;;
974
  --enable-pie) pie="yes"
975
  ;;
976
  --disable-pie) pie="no"
977
  ;;
978 979 980 981
  --enable-werror) werror="yes"
  ;;
  --disable-werror) werror="no"
  ;;
982 983 984 985
  --enable-stack-protector) stack_protector="yes"
  ;;
  --disable-stack-protector) stack_protector="no"
  ;;
B
balrog 已提交
986 987
  --disable-curses) curses="no"
  ;;
988 989
  --enable-curses) curses="yes"
  ;;
A
Alexander Graf 已提交
990 991
  --disable-curl) curl="no"
  ;;
992 993
  --enable-curl) curl="yes"
  ;;
994 995 996 997
  --disable-fdt) fdt="no"
  ;;
  --enable-fdt) fdt="yes"
  ;;
998 999 1000 1001
  --disable-linux-aio) linux_aio="no"
  ;;
  --enable-linux-aio) linux_aio="yes"
  ;;
1002 1003 1004 1005
  --disable-attr) attr="no"
  ;;
  --enable-attr) attr="yes"
  ;;
T
ths 已提交
1006 1007
  --disable-blobs) blobs="no"
  ;;
P
pbrook 已提交
1008 1009
  --with-pkgversion=*) pkgversion=" ($optarg)"
  ;;
1010 1011
  --with-coroutine=*) coroutine="$optarg"
  ;;
1012 1013 1014 1015
  --disable-coroutine-pool) coroutine_pool="no"
  ;;
  --enable-coroutine-pool) coroutine_pool="yes"
  ;;
J
Juan Quintela 已提交
1016
  --disable-docs) docs="no"
1017
  ;;
J
Juan Quintela 已提交
1018
  --enable-docs) docs="yes"
1019
  ;;
M
Michael S. Tsirkin 已提交
1020 1021 1022 1023
  --disable-vhost-net) vhost_net="no"
  ;;
  --enable-vhost-net) vhost_net="yes"
  ;;
1024 1025 1026 1027
  --disable-vhost-scsi) vhost_scsi="no"
  ;;
  --enable-vhost-scsi) vhost_scsi="yes"
  ;;
1028
  --disable-glx) glx="no"
M
Michael Walle 已提交
1029
  ;;
1030
  --enable-glx) glx="yes"
M
Michael Walle 已提交
1031
  ;;
1032 1033 1034 1035
  --disable-rbd) rbd="no"
  ;;
  --enable-rbd) rbd="yes"
  ;;
1036 1037 1038 1039
  --disable-xfsctl) xfs="no"
  ;;
  --enable-xfsctl) xfs="yes"
  ;;
R
Robert Relyea 已提交
1040 1041 1042 1043
  --disable-smartcard-nss) smartcard_nss="no"
  ;;
  --enable-smartcard-nss) smartcard_nss="yes"
  ;;
G
Gerd Hoffmann 已提交
1044 1045 1046 1047
  --disable-libusb) libusb="no"
  ;;
  --enable-libusb) libusb="yes"
  ;;
1048 1049 1050 1051
  --disable-usb-redir) usb_redir="no"
  ;;
  --enable-usb-redir) usb_redir="yes"
  ;;
A
Alon Levy 已提交
1052 1053
  --disable-zlib-test) zlib="no"
  ;;
1054 1055
  --disable-lzo) lzo="no"
  ;;
Q
qiaonuohan 已提交
1056 1057
  --enable-lzo) lzo="yes"
  ;;
1058 1059
  --disable-snappy) snappy="no"
  ;;
Q
qiaonuohan 已提交
1060 1061
  --enable-snappy) snappy="yes"
  ;;
1062 1063 1064 1065
  --enable-guest-agent) guest_agent="yes"
  ;;
  --disable-guest-agent) guest_agent="no"
  ;;
1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077
  --with-vss-sdk) vss_win32_sdk=""
  ;;
  --with-vss-sdk=*) vss_win32_sdk="$optarg"
  ;;
  --without-vss-sdk) vss_win32_sdk="no"
  ;;
  --with-win-sdk) win_sdk=""
  ;;
  --with-win-sdk=*) win_sdk="$optarg"
  ;;
  --without-win-sdk) win_sdk="no"
  ;;
1078 1079 1080 1081
  --enable-tools) want_tools="yes"
  ;;
  --disable-tools) want_tools="no"
  ;;
1082 1083 1084 1085
  --enable-seccomp) seccomp="yes"
  ;;
  --disable-seccomp) seccomp="no"
  ;;
1086 1087 1088 1089
  --disable-glusterfs) glusterfs="no"
  ;;
  --enable-glusterfs) glusterfs="yes"
  ;;
1090 1091 1092 1093
  --disable-virtio-blk-data-plane) virtio_blk_data_plane="no"
  ;;
  --enable-virtio-blk-data-plane) virtio_blk_data_plane="yes"
  ;;
A
Anthony Liguori 已提交
1094 1095 1096 1097
  --disable-gtk) gtk="no"
  ;;
  --enable-gtk) gtk="yes"
  ;;
M
Michael R. Hines 已提交
1098 1099 1100 1101
  --enable-rdma) rdma="yes"
  ;;
  --disable-rdma) rdma="no"
  ;;
1102 1103
  --with-gtkabi=*) gtkabi="$optarg"
  ;;
S
Stefan Weil 已提交
1104 1105 1106 1107
  --disable-vte) vte="no"
  ;;
  --enable-vte) vte="yes"
  ;;
1108 1109
  --disable-tpm) tpm="no"
  ;;
S
Stefan Berger 已提交
1110 1111
  --enable-tpm) tpm="yes"
  ;;
1112 1113 1114 1115
  --disable-libssh2) libssh2="no"
  ;;
  --enable-libssh2) libssh2="yes"
  ;;
1116 1117 1118 1119
  --enable-vhdx) vhdx="yes"
  ;;
  --disable-vhdx) vhdx="no"
  ;;
B
Benoît Canet 已提交
1120 1121 1122 1123
  --disable-quorum) quorum="no"
  ;;
  --enable-quorum) quorum="yes"
  ;;
1124 1125 1126 1127
  --disable-numa) numa="no"
  ;;
  --enable-numa) numa="yes"
  ;;
F
Fam Zheng 已提交
1128 1129 1130 1131
  *)
      echo "ERROR: unknown option $opt"
      echo "Try '$0 --help' for more information"
      exit 1
1132
  ;;
B
bellard 已提交
1133 1134 1135
  esac
done

1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154
if ! has $python; then
  error_exit "Python not found. Use --python=/path/to/python"
fi

# Note that if the Python conditional here evaluates True we will exit
# with status 1 which is a shell 'false' value.
if ! $python -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
  error_exit "Cannot use '$python', Python 2.4 or later is required." \
      "Note that Python 3 or later is not yet supported." \
      "Use --python=/path/to/python to specify a supported Python."
fi

# The -B switch was added in Python 2.6.
# If it is supplied, compiled files are not written.
# Use it for Python versions which support it.
if $python -B -c 'import sys; sys.exit(0)' 2>/dev/null; then
  python="$python -B"
fi

1155
case "$cpu" in
1156 1157 1158 1159 1160 1161 1162 1163
    ppc)
           CPU_CFLAGS="-m32"
           LDFLAGS="-m32 $LDFLAGS"
           ;;
    ppc64)
           CPU_CFLAGS="-m64"
           LDFLAGS="-m64 $LDFLAGS"
           ;;
1164
    sparc)
1165
           LDFLAGS="-m32 $LDFLAGS"
1166
           CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1167
           ;;
1168 1169
    sparc64)
           LDFLAGS="-m64 $LDFLAGS"
1170
           CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1171
           ;;
1172
    s390)
1173
           CPU_CFLAGS="-m31"
1174 1175 1176
           LDFLAGS="-m31 $LDFLAGS"
           ;;
    s390x)
1177
           CPU_CFLAGS="-m64"
1178
           LDFLAGS="-m64 $LDFLAGS"
1179
           ;;
1180
    i386)
1181
           CPU_CFLAGS="-m32"
1182
           LDFLAGS="-m32 $LDFLAGS"
P
Paolo Bonzini 已提交
1183
           cc_i386='$(CC) -m32'
1184 1185
           ;;
    x86_64)
1186
           CPU_CFLAGS="-m64"
1187
           LDFLAGS="-m64 $LDFLAGS"
P
Paolo Bonzini 已提交
1188
           cc_i386='$(CC) -m32'
1189
           ;;
1190 1191 1192 1193 1194
    x32)
           CPU_CFLAGS="-mx32"
           LDFLAGS="-mx32 $LDFLAGS"
           cc_i386='$(CC) -m32'
           ;;
1195
    # No special flags required for other host CPUs
1196 1197
esac

1198 1199 1200
QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"

1201 1202
default_target_list=""

1203 1204 1205 1206
mak_wilds=""

if [ "$softmmu" = "yes" ]; then
    mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1207
fi
1208 1209
if [ "$linux_user" = "yes" ]; then
    mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1210
fi
1211 1212
if [ "$bsd_user" = "yes" ]; then
    mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1213 1214
fi

1215 1216 1217 1218
for config in $mak_wilds; do
    default_target_list="${default_target_list} $(basename "$config" .mak)"
done

1219 1220 1221 1222 1223 1224
if test x"$show_help" = x"yes" ; then
cat << EOF

Usage: configure [options]
Options: [defaults in brackets after descriptions]

1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256
Standard options:
  --help                   print this message
  --prefix=PREFIX          install in PREFIX [$prefix]
  --interp-prefix=PREFIX   where to find shared libraries, etc.
                           use %M for cpu name [$interp_prefix]
  --target-list=LIST       set target list (default: build everything)
$(echo Available targets: $default_target_list | \
  fold -s -w 53 | sed -e 's/^/                           /')

Advanced options (experts only):
  --source-path=PATH       path of source code [$source_path]
  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
  --cc=CC                  use C compiler CC [$cc]
  --iasl=IASL              use ACPI compiler IASL [$iasl]
  --host-cc=CC             use C compiler CC [$host_cc] for code run at
                           build time
  --cxx=CXX                use C++ compiler CXX [$cxx]
  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
  --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
  --make=MAKE              use specified make [$make]
  --install=INSTALL        use specified install [$install]
  --python=PYTHON          use specified python [$python]
  --smbd=SMBD              use specified smbd [$smbd]
  --static                 enable static build [$static]
  --mandir=PATH            install man pages in PATH
  --datadir=PATH           install firmware in PATH$confsuffix
  --docdir=PATH            install documentation in PATH$confsuffix
  --bindir=PATH            install binaries in PATH
  --libdir=PATH            install libraries in PATH
  --sysconfdir=PATH        install config in PATH$confsuffix
  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
F
Fam Zheng 已提交
1257
  --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
F
Fam Zheng 已提交
1258
  --enable-modules         enable modules support
1259 1260
  --enable-debug-tcg       enable TCG debugging
  --disable-debug-tcg      disable TCG debugging (default)
1261 1262
  --enable-debug-info      enable debugging information (default)
  --disable-debug-info     disable debugging information
1263 1264 1265 1266 1267
  --enable-debug           enable common debug build options
  --enable-sparse          enable sparse checker
  --disable-sparse         disable sparse checker (default)
  --disable-strip          disable stripping binaries
  --disable-werror         disable compilation abort on warning
1268
  --disable-stack-protector disable compiler-provided stack protection
1269 1270
  --disable-sdl            disable SDL
  --enable-sdl             enable SDL
1271
  --with-sdlabi            select preferred SDL ABI 1.2 or 2.0
1272 1273
  --disable-gtk            disable gtk UI
  --enable-gtk             enable gtk UI
1274
  --with-gtkabi            select preferred GTK ABI 2.0 or 3.0
1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353
  --disable-virtfs         disable VirtFS
  --enable-virtfs          enable VirtFS
  --disable-vnc            disable VNC
  --enable-vnc             enable VNC
  --disable-cocoa          disable Cocoa (Mac OS X only)
  --enable-cocoa           enable Cocoa (default on Mac OS X)
  --audio-drv-list=LIST    set audio drivers list:
                           Available drivers: $audio_possible_drivers
  --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
  --block-drv-rw-whitelist=L
                           set block driver read-write whitelist
                           (affects only QEMU, not qemu-img)
  --block-drv-ro-whitelist=L
                           set block driver read-only whitelist
                           (affects only QEMU, not qemu-img)
  --disable-xen            disable xen backend driver support
  --enable-xen             enable xen backend driver support
  --disable-xen-pci-passthrough
  --enable-xen-pci-passthrough
  --disable-brlapi         disable BrlAPI
  --enable-brlapi          enable BrlAPI
  --disable-vnc-tls        disable TLS encryption for VNC server
  --enable-vnc-tls         enable TLS encryption for VNC server
  --disable-vnc-sasl       disable SASL encryption for VNC server
  --enable-vnc-sasl        enable SASL encryption for VNC server
  --disable-vnc-jpeg       disable JPEG lossy compression for VNC server
  --enable-vnc-jpeg        enable JPEG lossy compression for VNC server
  --disable-vnc-png        disable PNG compression for VNC server (default)
  --enable-vnc-png         enable PNG compression for VNC server
  --disable-vnc-ws         disable Websockets support for VNC server
  --enable-vnc-ws          enable Websockets support for VNC server
  --disable-curses         disable curses output
  --enable-curses          enable curses output
  --disable-curl           disable curl connectivity
  --enable-curl            enable curl connectivity
  --disable-fdt            disable fdt device tree
  --enable-fdt             enable fdt device tree
  --disable-bluez          disable bluez stack connectivity
  --enable-bluez           enable bluez stack connectivity
  --disable-slirp          disable SLIRP userspace network connectivity
  --disable-kvm            disable KVM acceleration support
  --enable-kvm             enable KVM acceleration support
  --disable-rdma           disable RDMA-based migration support
  --enable-rdma            enable RDMA-based migration support
  --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
  --enable-system          enable all system emulation targets
  --disable-system         disable all system emulation targets
  --enable-user            enable supported user emulation targets
  --disable-user           disable all user emulation targets
  --enable-linux-user      enable all linux usermode emulation targets
  --disable-linux-user     disable all linux usermode emulation targets
  --enable-bsd-user        enable all BSD usermode emulation targets
  --disable-bsd-user       disable all BSD usermode emulation targets
  --enable-guest-base      enable GUEST_BASE support for usermode
                           emulation targets
  --disable-guest-base     disable GUEST_BASE support
  --enable-pie             build Position Independent Executables
  --disable-pie            do not build Position Independent Executables
  --fmod-lib               path to FMOD library
  --fmod-inc               path to FMOD includes
  --oss-lib                path to OSS library
  --cpu=CPU                Build for host CPU [$cpu]
  --disable-uuid           disable uuid support
  --enable-uuid            enable uuid support
  --disable-vde            disable support for vde network
  --enable-vde             enable support for vde network
  --disable-netmap         disable support for netmap network
  --enable-netmap          enable support for netmap network
  --disable-linux-aio      disable Linux AIO support
  --enable-linux-aio       enable Linux AIO support
  --disable-cap-ng         disable libcap-ng support
  --enable-cap-ng          enable libcap-ng support
  --disable-attr           disables attr and xattr support
  --enable-attr            enable attr and xattr support
  --disable-blobs          disable installing provided firmware blobs
  --enable-docs            enable documentation build
  --disable-docs           disable documentation build
  --disable-vhost-net      disable vhost-net acceleration support
  --enable-vhost-net       enable vhost-net acceleration support
L
Lluís Vilanova 已提交
1354
  --enable-trace-backends=B Set trace backend
1355 1356 1357 1358 1359 1360 1361 1362
                           Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
  --with-trace-file=NAME   Full PATH,NAME of file to store traces
                           Default:trace-<pid>
  --disable-spice          disable spice
  --enable-spice           enable spice
  --enable-rbd             enable building the rados block device (rbd)
  --disable-libiscsi       disable iscsi support
  --enable-libiscsi        enable iscsi support
P
Peter Lieven 已提交
1363 1364
  --disable-libnfs         disable nfs support
  --enable-libnfs          enable nfs support
1365 1366 1367 1368 1369 1370
  --disable-smartcard-nss  disable smartcard nss support
  --enable-smartcard-nss   enable smartcard nss support
  --disable-libusb         disable libusb (for usb passthrough)
  --enable-libusb          enable libusb (for usb passthrough)
  --disable-usb-redir      disable usb network redirection support
  --enable-usb-redir       enable usb network redirection support
Q
qiaonuohan 已提交
1371 1372
  --enable-lzo             enable the support of lzo compression library
  --enable-snappy          enable the support of snappy compression library
1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386
  --disable-guest-agent    disable building of the QEMU Guest Agent
  --enable-guest-agent     enable building of the QEMU Guest Agent
  --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
  --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
  --disable-seccomp        disable seccomp support
  --enable-seccomp         enables seccomp support
  --with-coroutine=BACKEND coroutine backend. Supported options:
                           gthread, ucontext, sigaltstack, windows
  --disable-coroutine-pool disable coroutine freelist (worse performance)
  --enable-coroutine-pool  enable coroutine freelist (better performance)
  --enable-glusterfs       enable GlusterFS backend
  --disable-glusterfs      disable GlusterFS backend
  --enable-gcov            enable test coverage analysis with gcov
  --gcov=GCOV              use specified gcov [$gcov_tool]
1387
  --disable-tpm            disable TPM support
1388 1389 1390 1391 1392
  --enable-tpm             enable TPM support
  --disable-libssh2        disable ssh block device support
  --enable-libssh2         enable ssh block device support
  --disable-vhdx           disables support for the Microsoft VHDX image format
  --enable-vhdx            enable support for the Microsoft VHDX image format
B
Benoît Canet 已提交
1393 1394
  --disable-quorum         disable quorum block filter support
  --enable-quorum          enable quorum block filter support
1395 1396
  --disable-numa           disable libnuma support
  --enable-numa            enable libnuma support
1397 1398

NOTE: The object files are built at the place where configure is launched
1399
EOF
F
Fam Zheng 已提交
1400
exit 0
1401 1402
fi

1403 1404 1405 1406 1407 1408 1409
# Now we have handled --enable-tcg-interpreter and know we're not just
# printing the help message, bail out if the host CPU isn't supported.
if test "$ARCH" = "unknown"; then
    if test "$tcg_interpreter" = "yes" ; then
        echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
        ARCH=tci
    else
1410
        error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1411 1412 1413
    fi
fi

1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426
# Consult white-list to determine whether to enable werror
# by default.  Only enable by default for git builds
z_version=`cut -f3 -d. $source_path/VERSION`

if test -z "$werror" ; then
    if test -d "$source_path/.git" -a \
        "$linux" = "yes" ; then
        werror="yes"
    else
        werror="no"
    fi
fi

1427 1428
# check that the C compiler works.
cat > $TMPC <<EOF
1429
int main(void) { return 0; }
1430 1431 1432 1433 1434
EOF

if compile_object ; then
  : C compiler works ok
else
1435
    error_exit "\"$cc\" either does not exist or does not work"
1436 1437
fi

1438 1439 1440 1441 1442 1443 1444 1445 1446
# Check that the C++ compiler exists and works with the C compiler
if has $cxx; then
    cat > $TMPC <<EOF
int c_function(void);
int main(void) { return c_function(); }
EOF

    compile_object

1447
    cat > $TMPCXX <<EOF
1448 1449 1450 1451 1452 1453
extern "C" {
   int c_function(void);
}
int c_function(void) { return 42; }
EOF

1454 1455 1456
    update_cxxflags

    if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468
        # C++ compiler $cxx works ok with C compiler $cc
        :
    else
        echo "C++ compiler $cxx does not work with C compiler $cc"
        echo "Disabling C++ specific optional code"
        cxx=
    fi
else
    echo "No C++ compiler available; disabling C++ specific optional code"
    cxx=
fi

1469 1470 1471
gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1472
gcc_flags="-Wendif-labels $gcc_flags"
1473
gcc_flags="-Wno-initializer-overrides $gcc_flags"
1474
gcc_flags="-Wno-string-plus-int $gcc_flags"
1475 1476 1477 1478
# Note that we do not add -Werror to gcc_flags here, because that would
# enable it for all configure tests. If a configure test failed due
# to -Werror this would just silently disable some features,
# so it's too error prone.
1479 1480 1481 1482
cat > $TMPC << EOF
int main(void) { return 0; }
EOF
for flag in $gcc_flags; do
1483 1484 1485 1486 1487
    # Use the positive sense of the flag when testing for -Wno-wombat
    # support (gcc will happily accept the -Wno- form of unknown
    # warning options).
    optflag="$(echo $flag | sed -e 's/^-Wno-/-W/')"
    if compile_prog "-Werror $optflag" "" ; then
1488 1489 1490 1491
	QEMU_CFLAGS="$QEMU_CFLAGS $flag"
    fi
done

1492
if test "$stack_protector" != "no"; then
1493
  gcc_flags="-fstack-protector-strong -fstack-protector-all"
1494
  sp_on=0
1495
  for flag in $gcc_flags; do
1496 1497 1498 1499
    # We need to check both a compile and a link, since some compiler
    # setups fail only on a .c->.o compile and some only at link time
    if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
       compile_prog "-Werror $flag" ""; then
1500 1501
      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
      LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
1502
      sp_on=1
1503 1504 1505
      break
    fi
  done
1506 1507 1508 1509 1510
  if test "$stack_protector" = yes; then
    if test $sp_on = 0; then
      error_exit "Stack protector not supported"
    fi
  fi
1511 1512
fi

1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527
# Workaround for http://gcc.gnu.org/PR55489.  Happens with -fPIE/-fPIC and
# large functions that use global variables.  The bug is in all releases of
# GCC, but it became particularly acute in 4.6.x and 4.7.x.  It is fixed in
# 4.7.3 and 4.8.0.  We should be able to delete this at the end of 2013.
cat > $TMPC << EOF
#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
int main(void) { return 0; }
#else
#error No bug in this compiler.
#endif
EOF
if compile_prog "-Werror -fno-gcse" "" ; then
  TRANSLATE_OPT_CFLAGS=-fno-gcse
fi

1528
if test "$static" = "yes" ; then
1529 1530 1531
  if test "$modules" = "yes" ; then
    error_exit "static and modules are mutually incompatible"
  fi
1532
  if test "$pie" = "yes" ; then
1533
    error_exit "static and pie are mutually incompatible"
1534 1535 1536 1537 1538 1539 1540
  else
    pie="no"
  fi
fi

if test "$pie" = ""; then
  case "$cpu-$targetos" in
1541
    i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1542 1543 1544 1545 1546 1547 1548 1549 1550
      ;;
    *)
      pie="no"
      ;;
  esac
fi

if test "$pie" != "no" ; then
  cat > $TMPC << EOF
1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561

#ifdef __linux__
#  define THREAD __thread
#else
#  define THREAD
#endif

static THREAD int tls_var;

int main(void) { return tls_var; }

1562 1563 1564 1565 1566 1567 1568 1569 1570 1571
EOF
  if compile_prog "-fPIE -DPIE" "-pie"; then
    QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
    LDFLAGS="-pie $LDFLAGS"
    pie="yes"
    if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
      LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
    fi
  else
    if test "$pie" = "yes"; then
1572
      error_exit "PIE not available due to missing toolchain support"
1573 1574 1575 1576 1577
    else
      echo "Disabling PIE due to missing toolchain support"
      pie="no"
    fi
  fi
B
Brad 已提交
1578 1579 1580 1581 1582

  if compile_prog "-fno-pie" "-nopie"; then
    CFLAGS_NOPIE="-fno-pie"
    LDFLAGS_NOPIE="-nopie"
  fi
1583 1584
fi

1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610
# check for broken gcc and libtool in RHEL5
if test -n "$libtool" -a "$pie" != "no" ; then
  cat > $TMPC <<EOF

void *f(unsigned char *buf, int len);
void *g(unsigned char *buf, int len);

void *
f(unsigned char *buf, int len)
{
    return (void*)0L;
}

void *
g(unsigned char *buf, int len)
{
    return f(buf, len);
}

EOF
  if ! libtool_prog; then
    echo "Disabling libtool due to broken toolchain support"
    libtool=
  fi
fi

P
Paolo Bonzini 已提交
1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625
##########################################
# __sync_fetch_and_and requires at least -march=i486. Many toolchains
# use i686 as default anyway, but for those that don't, an explicit
# specification is necessary

if test "$cpu" = "i386"; then
  cat > $TMPC << EOF
static int sfaa(int *ptr)
{
  return __sync_fetch_and_and(ptr, 0);
}

int main(void)
{
  int val = 42;
1626
  val = __sync_val_compare_and_swap(&val, 0, 1);
P
Paolo Bonzini 已提交
1627 1628 1629 1630 1631 1632 1633 1634 1635 1636
  sfaa(&val);
  return val;
}
EOF
  if ! compile_prog "" "" ; then
    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
  fi
fi

#########################################
B
bellard 已提交
1637
# Solaris specific configure tool chain decisions
P
Paolo Bonzini 已提交
1638

B
bellard 已提交
1639
if test "$solaris" = "yes" ; then
1640 1641 1642
  if has $install; then
    :
  else
1643 1644 1645
    error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
        "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
        "to get ginstall which is used by default (which lives in /opt/csw/bin)"
B
bellard 已提交
1646
  fi
1647
  if test "`path_of $install`" = "/usr/sbin/install" ; then
1648 1649 1650
    error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
        "try ginstall from the GNU fileutils available from www.blastwave.org" \
        "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
B
bellard 已提交
1651
  fi
1652 1653 1654
  if has ar; then
    :
  else
B
bellard 已提交
1655
    if test -f /usr/ccs/bin/ar ; then
1656 1657
      error_exit "No path includes ar" \
          "Add /usr/ccs/bin to your path and rerun configure"
B
bellard 已提交
1658
    fi
1659
    error_exit "No path includes ar"
B
bellard 已提交
1660
  fi
1661
fi
B
bellard 已提交
1662

1663
if test -z "${target_list+xxx}" ; then
1664 1665 1666 1667
    target_list="$default_target_list"
else
    target_list=`echo "$target_list" | sed -e 's/,/ /g'`
fi
1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680

# Check that we recognised the target name; this allows a more
# friendly error message than if we let it fall through.
for target in $target_list; do
    case " $default_target_list " in
        *" $target "*)
            ;;
        *)
            error_exit "Unknown target name '$target'"
            ;;
    esac
done

P
Paolo Bonzini 已提交
1681 1682 1683 1684 1685 1686 1687
# see if system emulation was really requested
case " $target_list " in
  *"-softmmu "*) softmmu=yes
  ;;
  *) softmmu=no
  ;;
esac
B
bellard 已提交
1688

1689 1690
feature_not_found() {
  feature=$1
1691
  remedy=$2
1692

1693
  error_exit "User requested feature $feature" \
1694 1695
      "configure was not able to find it." \
      "$remedy"
1696 1697
}

B
bellard 已提交
1698 1699 1700
# ---
# big/little endian test
cat > $TMPC << EOF
1701 1702 1703 1704 1705
short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
extern int foo(short *, short *);
int main(int argc, char *argv[]) {
    return foo(big_endian, little_endian);
B
bellard 已提交
1706 1707 1708
}
EOF

1709 1710 1711 1712 1713 1714 1715
if compile_object ; then
    if grep -q BiGeNdIaN $TMPO ; then
        bigendian="yes"
    elif grep -q LiTtLeEnDiAn $TMPO ; then
        bigendian="no"
    else
        echo big/little test failed
1716
    fi
1717 1718
else
    echo big/little test failed
B
bellard 已提交
1719 1720
fi

1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733
##########################################
# L2TPV3 probe

cat > $TMPC <<EOF
#include <sys/socket.h>
int main(void) { return sizeof(struct mmsghdr); }
EOF
if compile_prog "" "" ; then
  l2tpv3=yes
else
  l2tpv3=no
fi

S
Stefan Weil 已提交
1734 1735 1736 1737
##########################################
# pkg-config probe

if ! has "$pkg_config_exe"; then
1738
  error_exit "pkg-config binary '$pkg_config_exe' not found"
S
Stefan Weil 已提交
1739 1740
fi

1741 1742 1743
##########################################
# NPTL probe

1744
if test "$linux_user" = "yes"; then
1745
  cat > $TMPC <<EOF
1746
#include <sched.h>
P
pbrook 已提交
1747
#include <linux/futex.h>
1748
int main(void) {
1749 1750 1751
#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
#error bork
#endif
1752
  return 0;
1753 1754
}
EOF
1755
  if ! compile_object ; then
1756
    feature_not_found "nptl" "Install glibc and linux kernel headers."
1757
  fi
1758 1759
fi

1760 1761 1762
##########################################
# zlib check

A
Alon Levy 已提交
1763 1764
if test "$zlib" != "no" ; then
    cat > $TMPC << EOF
1765 1766 1767
#include <zlib.h>
int main(void) { zlibVersion(); return 0; }
EOF
A
Alon Levy 已提交
1768 1769 1770
    if compile_prog "" "-lz" ; then
        :
    else
1771 1772
        error_exit "zlib check failed" \
            "Make sure to have the zlib libs and headers installed."
A
Alon Levy 已提交
1773
    fi
1774
fi
1775
LIBS="$LIBS -lz"
1776

Q
qiaonuohan 已提交
1777 1778 1779 1780 1781 1782 1783 1784 1785
##########################################
# lzo check

if test "$lzo" != "no" ; then
    cat > $TMPC << EOF
#include <lzo/lzo1x.h>
int main(void) { lzo_version(); return 0; }
EOF
    if compile_prog "" "-llzo2" ; then
1786 1787
        libs_softmmu="$libs_softmmu -llzo2"
        lzo="yes"
Q
qiaonuohan 已提交
1788
    else
1789 1790 1791 1792
        if test "$lzo" = "yes"; then
            feature_not_found "liblzo2" "Install liblzo2 devel"
        fi
        lzo="no"
Q
qiaonuohan 已提交
1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804
    fi
fi

##########################################
# snappy check

if test "$snappy" != "no" ; then
    cat > $TMPC << EOF
#include <snappy-c.h>
int main(void) { snappy_max_compressed_length(4096); return 0; }
EOF
    if compile_prog "" "-lsnappy" ; then
1805 1806
        libs_softmmu="$libs_softmmu -lsnappy"
        snappy="yes"
Q
qiaonuohan 已提交
1807
    else
1808 1809 1810 1811
        if test "$snappy" = "yes"; then
            feature_not_found "libsnappy" "Install libsnappy devel"
        fi
        snappy="no"
Q
qiaonuohan 已提交
1812 1813 1814
    fi
fi

1815 1816 1817 1818
##########################################
# libseccomp check

if test "$seccomp" != "no" ; then
1819
    if $pkg_config --atleast-version=2.1.0 libseccomp; then
1820
        libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`"
1821
        QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`"
1822 1823 1824
	seccomp="yes"
    else
	if test "$seccomp" = "yes"; then
1825
            feature_not_found "libseccomp" "Install libseccomp devel >= 2.1.0"
1826
	fi
Y
Yann E. MORIN 已提交
1827
	seccomp="no"
1828 1829
    fi
fi
1830 1831 1832
##########################################
# xen probe

1833
if test "$xen" != "no" ; then
1834
  xen_libs="-lxenstore -lxenctrl -lxenguest"
1835

1836 1837 1838 1839 1840
  # First we test whether Xen headers and libraries are available.
  # If no, we are done and there is no Xen support.
  # If yes, more tests are run to detect the Xen version.

  # Xen (any)
1841
  cat > $TMPC <<EOF
1842
#include <xenctrl.h>
1843 1844 1845 1846 1847 1848 1849
int main(void) {
  return 0;
}
EOF
  if ! compile_prog "" "$xen_libs" ; then
    # Xen not found
    if test "$xen" = "yes" ; then
1850
      feature_not_found "xen" "Install xen devel"
1851 1852 1853 1854
    fi
    xen=no

  # Xen unstable
1855 1856
  elif
      cat > $TMPC <<EOF &&
1857
#include <xenctrl.h>
A
Anthony PERARD 已提交
1858
#include <xenstore.h>
1859 1860 1861 1862 1863
#include <stdint.h>
#include <xen/hvm/hvm_info_table.h>
#if !defined(HVM_MAX_VCPUS)
# error HVM_MAX_VCPUS not defined
#endif
1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875
int main(void) {
  xc_interface *xc;
  xs_daemon_open();
  xc = xc_interface_open(0, 0, 0);
  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
  xc_gnttab_open(NULL, 0);
  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
  return 0;
}
EOF
      compile_prog "" "$xen_libs"
1876
    then
1877 1878 1879
    xen_ctrl_version=420
    xen=yes

1880 1881
  elif
      cat > $TMPC <<EOF &&
1882 1883 1884 1885 1886 1887 1888
#include <xenctrl.h>
#include <xs.h>
#include <stdint.h>
#include <xen/hvm/hvm_info_table.h>
#if !defined(HVM_MAX_VCPUS)
# error HVM_MAX_VCPUS not defined
#endif
1889 1890
int main(void) {
  xs_daemon_open();
1891
  xc_interface_open(0, 0, 0);
1892 1893
  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
  xc_gnttab_open(NULL, 0);
1894
  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1895 1896
  return 0;
}
1897
EOF
1898
      compile_prog "" "$xen_libs"
1899
    then
1900
    xen_ctrl_version=410
1901
    xen=yes
1902 1903

  # Xen 4.0.0
1904 1905
  elif
      cat > $TMPC <<EOF &&
1906 1907 1908 1909 1910 1911 1912 1913
#include <xenctrl.h>
#include <xs.h>
#include <stdint.h>
#include <xen/hvm/hvm_info_table.h>
#if !defined(HVM_MAX_VCPUS)
# error HVM_MAX_VCPUS not defined
#endif
int main(void) {
1914 1915 1916
  struct xen_add_to_physmap xatp = {
    .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
  };
1917 1918 1919 1920
  xs_daemon_open();
  xc_interface_open();
  xc_gnttab_open();
  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1921
  xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
1922 1923 1924 1925
  return 0;
}
EOF
      compile_prog "" "$xen_libs"
1926
    then
1927 1928 1929
    xen_ctrl_version=400
    xen=yes

1930
  # Xen 3.4.0
1931 1932
  elif
      cat > $TMPC <<EOF &&
1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947
#include <xenctrl.h>
#include <xs.h>
int main(void) {
  struct xen_add_to_physmap xatp = {
    .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
  };
  xs_daemon_open();
  xc_interface_open();
  xc_gnttab_open();
  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
  xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
  return 0;
}
EOF
      compile_prog "" "$xen_libs"
1948
    then
1949 1950 1951 1952
    xen_ctrl_version=340
    xen=yes

  # Xen 3.3.0
1953 1954
  elif
      cat > $TMPC <<EOF &&
1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965
#include <xenctrl.h>
#include <xs.h>
int main(void) {
  xs_daemon_open();
  xc_interface_open();
  xc_gnttab_open();
  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
  return 0;
}
EOF
      compile_prog "" "$xen_libs"
1966
    then
1967 1968 1969
    xen_ctrl_version=330
    xen=yes

1970
  # Xen version unsupported
1971
  else
1972
    if test "$xen" = "yes" ; then
1973
      feature_not_found "xen (unsupported version)" "Install supported xen (e.g. 4.0, 3.4, 3.3)"
1974 1975
    fi
    xen=no
1976
  fi
1977 1978 1979 1980

  if test "$xen" = yes; then
    libs_softmmu="$xen_libs $libs_softmmu"
  fi
1981 1982
fi

1983 1984 1985 1986 1987 1988 1989
if test "$xen_pci_passthrough" != "no"; then
  if test "$xen" = "yes" && test "$linux" = "yes" &&
    test "$xen_ctrl_version" -ge 340; then
    xen_pci_passthrough=yes
  else
    if test "$xen_pci_passthrough" = "yes"; then
      if test "$xen_ctrl_version" -lt 340; then
1990 1991
        error_exit "User requested feature Xen PCI Passthrough" \
            "This feature does not work with Xen 3.3"
1992
      fi
1993 1994
      error_exit "User requested feature Xen PCI Passthrough" \
          " but this feature requires /sys from Linux"
1995 1996 1997 1998 1999
    fi
    xen_pci_passthrough=no
  fi
fi

A
Alon Levy 已提交
2000 2001 2002
##########################################
# libtool probe

B
Brad 已提交
2003
if ! has $libtool; then
A
Alon Levy 已提交
2004 2005 2006
    libtool=
fi

2007 2008 2009 2010 2011 2012 2013 2014
# MacOSX ships with a libtool which isn't the GNU one; weed this
# out by checking whether libtool supports the --version switch
if test -n "$libtool"; then
  if ! "$libtool" --version >/dev/null 2>&1; then
    libtool=
  fi
fi

2015 2016 2017
##########################################
# Sparse probe
if test "$sparse" != "no" ; then
2018
  if has cgcc; then
2019 2020 2021
    sparse=yes
  else
    if test "$sparse" = "yes" ; then
2022
      feature_not_found "sparse" "Install sparse binary"
2023 2024 2025 2026 2027
    fi
    sparse=no
  fi
fi

A
Anthony Liguori 已提交
2028 2029 2030
##########################################
# GTK probe

2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042
if test "$gtkabi" = ""; then
    # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
    # Use 3.0 as a fallback if that is available.
    if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
        gtkabi=2.0
    elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
        gtkabi=3.0
    else
        gtkabi=2.0
    fi
fi

A
Anthony Liguori 已提交
2043
if test "$gtk" != "no"; then
2044
    gtkpackage="gtk+-$gtkabi"
2045
    gtkx11package="gtk+-x11-$gtkabi"
2046 2047
    if test "$gtkabi" = "3.0" ; then
      gtkversion="3.0.0"
S
Stefan Weil 已提交
2048 2049 2050 2051 2052 2053
    else
      gtkversion="2.18.0"
    fi
    if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
        gtk_cflags=`$pkg_config --cflags $gtkpackage`
        gtk_libs=`$pkg_config --libs $gtkpackage`
2054 2055 2056
        if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
            gtk_libs="$gtk_libs -lX11"
        fi
S
Stefan Weil 已提交
2057 2058 2059
        libs_softmmu="$gtk_libs $libs_softmmu"
        gtk="yes"
    elif test "$gtk" = "yes"; then
2060
        feature_not_found "gtk" "Install gtk2 or gtk3 devel"
S
Stefan Weil 已提交
2061 2062 2063 2064 2065 2066 2067 2068 2069 2070
    else
        gtk="no"
    fi
fi

##########################################
# VTE probe

if test "$vte" != "no"; then
    if test "$gtkabi" = "3.0"; then
2071 2072 2073 2074 2075 2076
      vtepackage="vte-2.90"
      vteversion="0.32.0"
    else
      vtepackage="vte"
      vteversion="0.24.0"
    fi
S
Stefan Weil 已提交
2077 2078 2079 2080 2081 2082
    if $pkg_config --exists "$vtepackage >= $vteversion"; then
        vte_cflags=`$pkg_config --cflags $vtepackage`
        vte_libs=`$pkg_config --libs $vtepackage`
        libs_softmmu="$vte_libs $libs_softmmu"
        vte="yes"
    elif test "$vte" = "yes"; then
2083 2084 2085 2086 2087
        if test "$gtkabi" = "3.0"; then
            feature_not_found "vte" "Install libvte-2.90 devel"
        else
            feature_not_found "vte" "Install libvte devel"
        fi
2088
    else
S
Stefan Weil 已提交
2089
        vte="no"
A
Anthony Liguori 已提交
2090 2091 2092
    fi
fi

B
bellard 已提交
2093 2094 2095
##########################################
# SDL probe

P
Paolo Bonzini 已提交
2096 2097
# Look for sdl configuration program (pkg-config or sdl-config).  Try
# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109

if test $sdlabi = "2.0"; then
    sdl_config=$sdl2_config
    sdlname=sdl2
    sdlconfigname=sdl2_config
else
    sdlname=sdl
    sdlconfigname=sdl_config
fi

if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
  sdl_config=$sdlconfigname
P
Paolo Bonzini 已提交
2110 2111
fi

2112 2113
if $pkg_config $sdlname --exists; then
  sdlconfig="$pkg_config $sdlname"
2114
  _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
P
Paolo Bonzini 已提交
2115 2116
elif has ${sdl_config}; then
  sdlconfig="$sdl_config"
2117
  _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2118 2119
else
  if test "$sdl" = "yes" ; then
2120
    feature_not_found "sdl" "Install SDL devel"
2121 2122
  fi
  sdl=no
2123
fi
2124
if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
P
Paolo Bonzini 已提交
2125 2126
  echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
fi
B
bellard 已提交
2127

2128
sdl_too_old=no
2129
if test "$sdl" != "no" ; then
J
Juan Quintela 已提交
2130
  cat > $TMPC << EOF
B
bellard 已提交
2131 2132 2133 2134
#include <SDL.h>
#undef main /* We don't want SDL to override our main() */
int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
EOF
2135
  sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
2136 2137 2138 2139 2140
  if test "$static" = "yes" ; then
    sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
  else
    sdl_libs=`$sdlconfig --libs 2> /dev/null`
  fi
2141
  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
J
Juan Quintela 已提交
2142 2143 2144 2145 2146 2147 2148
    if test "$_sdlversion" -lt 121 ; then
      sdl_too_old=yes
    else
      if test "$cocoa" = "no" ; then
        sdl=yes
      fi
    fi
A
aliguori 已提交
2149

2150
    # static link with sdl ? (note: sdl.pc's --static --libs is broken)
J
Juan Quintela 已提交
2151
    if test "$sdl" = "yes" -a "$static" = "yes" ; then
2152
      if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2153 2154
         sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
         sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
J
Juan Quintela 已提交
2155
      fi
2156
      if compile_prog "$sdl_cflags" "$sdl_libs" ; then
J
Juan Quintela 已提交
2157 2158 2159 2160 2161
	:
      else
        sdl=no
      fi
    fi # static link
2162 2163
  else # sdl not found
    if test "$sdl" = "yes" ; then
2164
      feature_not_found "sdl" "Install SDL devel"
2165 2166
    fi
    sdl=no
J
Juan Quintela 已提交
2167
  fi # sdl compile test
2168
fi
B
bellard 已提交
2169

2170
if test "$sdl" = "yes" ; then
J
Juan Quintela 已提交
2171
  cat > $TMPC <<EOF
2172 2173 2174 2175 2176 2177 2178 2179
#include <SDL.h>
#if defined(SDL_VIDEO_DRIVER_X11)
#include <X11/XKBlib.h>
#else
#error No x11 support
#endif
int main(void) { return 0; }
EOF
2180
  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
J
Juan Quintela 已提交
2181 2182
    sdl_libs="$sdl_libs -lX11"
  fi
J
Juan Quintela 已提交
2183
  libs_softmmu="$sdl_libs $libs_softmmu"
2184 2185
fi

M
Michael R. Hines 已提交
2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209
##########################################
# RDMA needs OpenFabrics libraries
if test "$rdma" != "no" ; then
  cat > $TMPC <<EOF
#include <rdma/rdma_cma.h>
int main(void) { return 0; }
EOF
  rdma_libs="-lrdmacm -libverbs"
  if compile_prog "" "$rdma_libs" ; then
    rdma="yes"
    libs_softmmu="$libs_softmmu $rdma_libs"
  else
    if test "$rdma" = "yes" ; then
        error_exit \
            " OpenFabrics librdmacm/libibverbs not present." \
            " Your options:" \
            "  (1) Fast: Install infiniband packages from your distro." \
            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
    fi
    rdma="no"
  fi
fi

2210
##########################################
2211 2212
# VNC TLS/WS detection
if test "$vnc" = "yes" -a \( "$vnc_tls" != "no" -o "$vnc_ws" != "no" \) ; then
2213
  cat > $TMPC <<EOF
2214 2215 2216
#include <gnutls/gnutls.h>
int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
EOF
2217 2218
  vnc_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
  vnc_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2219
  if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then
2220 2221 2222 2223 2224 2225
    if test "$vnc_tls" != "no" ; then
      vnc_tls=yes
    fi
    if test "$vnc_ws" != "no" ; then
      vnc_ws=yes
    fi
2226
    libs_softmmu="$vnc_tls_libs $libs_softmmu"
P
Paolo Bonzini 已提交
2227
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_tls_cflags"
2228 2229
  else
    if test "$vnc_tls" = "yes" ; then
2230
      feature_not_found "vnc-tls" "Install gnutls devel"
2231
    fi
2232
    if test "$vnc_ws" = "yes" ; then
2233
      feature_not_found "vnc-ws" "Install gnutls devel"
2234
    fi
2235
    vnc_tls=no
2236
    vnc_ws=no
2237
  fi
2238 2239
fi

B
Benoît Canet 已提交
2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257
##########################################
# Quorum probe (check for gnutls)
if test "$quorum" != "no" ; then
cat > $TMPC <<EOF
#include <gnutls/gnutls.h>
#include <gnutls/crypto.h>
int main(void) {char data[4096], digest[32];
gnutls_hash_fast(GNUTLS_DIG_SHA256, data, 4096, digest);
return 0;
}
EOF
quorum_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
quorum_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
if compile_prog "$quorum_tls_cflags" "$quorum_tls_libs" ; then
  qcow_tls=yes
  libs_softmmu="$quorum_tls_libs $libs_softmmu"
  libs_tools="$quorum_tls_libs $libs_softmmu"
  QEMU_CFLAGS="$QEMU_CFLAGS $quorum_tls_cflags"
2258
  quorum="yes"
B
Benoît Canet 已提交
2259
else
2260 2261 2262 2263
  if test "$quorum" = "yes"; then
    feature_not_found "gnutls" "gnutls > 2.10.0 required to compile Quorum"
  fi
  quorum="no"
B
Benoît Canet 已提交
2264 2265 2266
fi
fi

2267 2268
##########################################
# VNC SASL detection
J
Jes Sorensen 已提交
2269
if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2270
  cat > $TMPC <<EOF
2271 2272 2273 2274
#include <sasl/sasl.h>
#include <stdio.h>
int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
EOF
2275 2276 2277 2278 2279 2280
  # Assuming Cyrus-SASL installed in /usr prefix
  vnc_sasl_cflags=""
  vnc_sasl_libs="-lsasl2"
  if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
    vnc_sasl=yes
    libs_softmmu="$vnc_sasl_libs $libs_softmmu"
P
Paolo Bonzini 已提交
2281
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2282 2283
  else
    if test "$vnc_sasl" = "yes" ; then
2284
      feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2285
    fi
2286 2287
    vnc_sasl=no
  fi
2288 2289
fi

2290 2291
##########################################
# VNC JPEG detection
J
Jes Sorensen 已提交
2292
if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2293 2294 2295 2296 2297 2298 2299 2300 2301 2302
cat > $TMPC <<EOF
#include <stdio.h>
#include <jpeglib.h>
int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
EOF
    vnc_jpeg_cflags=""
    vnc_jpeg_libs="-ljpeg"
  if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
    vnc_jpeg=yes
    libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
P
Paolo Bonzini 已提交
2303
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2304 2305
  else
    if test "$vnc_jpeg" = "yes" ; then
2306
      feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2307 2308 2309 2310 2311
    fi
    vnc_jpeg=no
  fi
fi

C
Corentin Chary 已提交
2312 2313
##########################################
# VNC PNG detection
J
Jes Sorensen 已提交
2314
if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
C
Corentin Chary 已提交
2315 2316 2317
cat > $TMPC <<EOF
//#include <stdio.h>
#include <png.h>
S
Scott Wood 已提交
2318
#include <stddef.h>
C
Corentin Chary 已提交
2319 2320 2321
int main(void) {
    png_structp png_ptr;
    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2322
    return png_ptr != 0;
C
Corentin Chary 已提交
2323 2324
}
EOF
2325
  if $pkg_config libpng --exists; then
2326 2327
    vnc_png_cflags=`$pkg_config libpng --cflags`
    vnc_png_libs=`$pkg_config libpng --libs`
2328
  else
C
Corentin Chary 已提交
2329 2330
    vnc_png_cflags=""
    vnc_png_libs="-lpng"
2331
  fi
C
Corentin Chary 已提交
2332 2333 2334
  if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
    vnc_png=yes
    libs_softmmu="$vnc_png_libs $libs_softmmu"
2335
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
C
Corentin Chary 已提交
2336 2337
  else
    if test "$vnc_png" = "yes" ; then
2338
      feature_not_found "vnc-png" "Install libpng devel"
C
Corentin Chary 已提交
2339 2340 2341 2342 2343
    fi
    vnc_png=no
  fi
fi

2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354
##########################################
# fnmatch() probe, used for ACL routines
fnmatch="no"
cat > $TMPC << EOF
#include <fnmatch.h>
int main(void)
{
    fnmatch("foo", "foo", 0);
    return 0;
}
EOF
2355
if compile_prog "" "" ; then
2356 2357 2358
   fnmatch="yes"
fi

2359 2360
##########################################
# uuid_generate() probe, used for vdi block driver
2361 2362
# Note that on some systems (notably MacOSX) no extra library
# need be linked to get the uuid functions.
2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373
if test "$uuid" != "no" ; then
  uuid_libs="-luuid"
  cat > $TMPC << EOF
#include <uuid/uuid.h>
int main(void)
{
    uuid_t my_uuid;
    uuid_generate(my_uuid);
    return 0;
}
EOF
2374 2375 2376
  if compile_prog "" "" ; then
    uuid="yes"
  elif compile_prog "" "$uuid_libs" ; then
2377 2378 2379 2380 2381
    uuid="yes"
    libs_softmmu="$uuid_libs $libs_softmmu"
    libs_tools="$uuid_libs $libs_tools"
  else
    if test "$uuid" = "yes" ; then
2382
      feature_not_found "uuid" "Install libuuid devel"
2383 2384 2385 2386 2387
    fi
    uuid=no
  fi
fi

2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399
if test "$vhdx" = "yes" ; then
    if test "$uuid" = "no" ; then
        error_exit "uuid required for VHDX support"
    fi
elif test "$vhdx" != "no" ; then
    if test "$uuid" = "yes" ; then
        vhdx=yes
    else
        vhdx=no
    fi
fi

C
Christoph Hellwig 已提交
2400 2401 2402 2403
##########################################
# xfsctl() probe, used for raw-posix
if test "$xfs" != "no" ; then
  cat > $TMPC << EOF
2404
#include <stddef.h>  /* NULL */
C
Christoph Hellwig 已提交
2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415
#include <xfs/xfs.h>
int main(void)
{
    xfsctl(NULL, 0, 0, NULL);
    return 0;
}
EOF
  if compile_prog "" "" ; then
    xfs="yes"
  else
    if test "$xfs" = "yes" ; then
2416
      feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
C
Christoph Hellwig 已提交
2417 2418 2419 2420 2421
    fi
    xfs=no
  fi
fi

2422 2423
##########################################
# vde libraries probe
2424
if test "$vde" != "no" ; then
J
Juan Quintela 已提交
2425
  vde_libs="-lvdeplug"
2426 2427
  cat > $TMPC << EOF
#include <libvdeplug.h>
P
pbrook 已提交
2428 2429 2430
int main(void)
{
    struct vde_open_args a = {0, 0, 0};
2431 2432
    char s[] = "";
    vde_open(s, s, &a);
P
pbrook 已提交
2433 2434
    return 0;
}
2435
EOF
2436
  if compile_prog "" "$vde_libs" ; then
J
Juan Quintela 已提交
2437
    vde=yes
2438 2439
    libs_softmmu="$vde_libs $libs_softmmu"
    libs_tools="$vde_libs $libs_tools"
2440 2441
  else
    if test "$vde" = "yes" ; then
2442
      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2443 2444
    fi
    vde=no
J
Juan Quintela 已提交
2445
  fi
2446 2447
fi

2448
##########################################
2449 2450 2451 2452 2453 2454
# netmap support probe
# Apart from looking for netmap headers, we make sure that the host API version
# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
# a minor/major version number. Minor new features will be marked with values up
# to 15, and if something happens that requires a change to the backend we will
# move above 15, submit the backend fixes and modify this two bounds.
2455 2456 2457 2458 2459 2460
if test "$netmap" != "no" ; then
  cat > $TMPC << EOF
#include <inttypes.h>
#include <net/if.h>
#include <net/netmap.h>
#include <net/netmap_user.h>
2461 2462 2463
#if (NETMAP_API < 11) || (NETMAP_API > 15)
#error
#endif
2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475
int main(void) { return 0; }
EOF
  if compile_prog "" "" ; then
    netmap=yes
  else
    if test "$netmap" = "yes" ; then
      feature_not_found "netmap"
    fi
    netmap=no
  fi
fi

2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492
##########################################
# libcap-ng library probe
if test "$cap_ng" != "no" ; then
  cap_libs="-lcap-ng"
  cat > $TMPC << EOF
#include <cap-ng.h>
int main(void)
{
    capng_capability_to_name(CAPNG_EFFECTIVE);
    return 0;
}
EOF
  if compile_prog "" "$cap_libs" ; then
    cap_ng=yes
    libs_tools="$cap_libs $libs_tools"
  else
    if test "$cap_ng" = "yes" ; then
2493
      feature_not_found "cap_ng" "Install libcap-ng devel"
2494 2495 2496 2497 2498
    fi
    cap_ng=no
  fi
fi

2499
##########################################
2500
# Sound support libraries probe
2501

2502 2503 2504 2505 2506 2507 2508 2509 2510 2511
audio_drv_probe()
{
    drv=$1
    hdr=$2
    lib=$3
    exp=$4
    cfl=$5
        cat > $TMPC << EOF
#include <$hdr>
int main(void) { $exp }
2512
EOF
2513
    if compile_prog "$cfl" "$lib" ; then
2514 2515
        :
    else
2516 2517
        error_exit "$drv check failed" \
            "Make sure to have the $drv libs and headers installed."
2518 2519 2520
    fi
}

2521
audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2522 2523 2524 2525
for drv in $audio_drv_list; do
    case $drv in
    alsa)
    audio_drv_probe $drv alsa/asoundlib.h -lasound \
2526
        "return snd_pcm_close((snd_pcm_t *)0);"
2527
    libs_softmmu="-lasound $libs_softmmu"
2528 2529 2530 2531
    ;;

    fmod)
    if test -z $fmod_lib || test -z $fmod_inc; then
2532 2533
        error_exit "You must specify path to FMOD library and headers" \
            "Example: --fmod-inc=/path/include/fmod --fmod-lib=/path/lib/libfmod-3.74.so"
2534 2535
    fi
    audio_drv_probe $drv fmod.h $fmod_lib "return FSOUND_GetVersion();" "-I $fmod_inc"
2536
    libs_softmmu="$fmod_lib $libs_softmmu"
2537 2538 2539 2540
    ;;

    esd)
    audio_drv_probe $drv esd.h -lesd 'return esd_play_stream(0, 0, "", 0);'
2541
    libs_softmmu="-lesd $libs_softmmu"
2542
    audio_pt_int="yes"
2543
    ;;
M
malc 已提交
2544 2545

    pa)
2546 2547 2548
    audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
        "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
    libs_softmmu="-lpulse $libs_softmmu"
2549
    audio_pt_int="yes"
M
malc 已提交
2550 2551
    ;;

2552 2553 2554 2555
    coreaudio)
      libs_softmmu="-framework CoreAudio $libs_softmmu"
    ;;

2556 2557
    dsound)
      libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2558
      audio_win_int="yes"
2559 2560 2561 2562 2563 2564 2565
    ;;

    oss)
      libs_softmmu="$oss_lib $libs_softmmu"
    ;;

    sdl|wav)
B
blueswir1 已提交
2566 2567 2568
    # XXX: Probes for CoreAudio, DirectSound, SDL(?)
    ;;

2569 2570 2571 2572 2573
    winwave)
      libs_softmmu="-lwinmm $libs_softmmu"
      audio_win_int="yes"
    ;;

M
malc 已提交
2574
    *)
M
malc 已提交
2575
    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2576 2577
        error_exit "Unknown driver '$drv' selected" \
            "Possible drivers are: $audio_possible_drivers"
M
malc 已提交
2578 2579
    }
    ;;
2580 2581
    esac
done
2582

A
aurel32 已提交
2583 2584 2585
##########################################
# BrlAPI probe

2586
if test "$brlapi" != "no" ; then
J
Juan Quintela 已提交
2587 2588
  brlapi_libs="-lbrlapi"
  cat > $TMPC << EOF
A
aurel32 已提交
2589
#include <brlapi.h>
S
Scott Wood 已提交
2590
#include <stddef.h>
A
aurel32 已提交
2591 2592
int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
EOF
2593
  if compile_prog "" "$brlapi_libs" ; then
J
Juan Quintela 已提交
2594
    brlapi=yes
2595
    libs_softmmu="$brlapi_libs $libs_softmmu"
2596 2597
  else
    if test "$brlapi" = "yes" ; then
2598
      feature_not_found "brlapi" "Install brlapi devel"
2599 2600
    fi
    brlapi=no
J
Juan Quintela 已提交
2601 2602
  fi
fi
A
aurel32 已提交
2603

B
balrog 已提交
2604 2605
##########################################
# curses probe
2606 2607
if test "$curses" != "no" ; then
  if test "$mingw32" = "yes" ; then
S
Stefan Weil 已提交
2608
    curses_list="-lpdcurses"
2609
  else
2610
    curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2611
  fi
2612
  curses_found=no
B
balrog 已提交
2613 2614
  cat > $TMPC << EOF
#include <curses.h>
2615 2616 2617 2618 2619
int main(void) {
  const char *s = curses_version();
  resize_term(0, 0);
  return s != 0;
}
B
balrog 已提交
2620
EOF
2621
  IFS=:
2622
  for curses_lib in $curses_list; do
2623
    unset IFS
2624
    if compile_prog "" "$curses_lib" ; then
2625
      curses_found=yes
2626 2627 2628 2629
      libs_softmmu="$curses_lib $libs_softmmu"
      break
    fi
  done
2630
  unset IFS
2631 2632 2633 2634
  if test "$curses_found" = "yes" ; then
    curses=yes
  else
    if test "$curses" = "yes" ; then
2635
      feature_not_found "curses" "Install ncurses devel"
2636 2637 2638
    fi
    curses=no
  fi
2639
fi
B
balrog 已提交
2640

A
Alexander Graf 已提交
2641 2642
##########################################
# curl probe
2643
if test "$curl" != "no" ; then
2644
  if $pkg_config libcurl --exists; then
2645 2646 2647 2648
    curlconfig="$pkg_config libcurl"
  else
    curlconfig=curl-config
  fi
A
Alexander Graf 已提交
2649 2650
  cat > $TMPC << EOF
#include <curl/curl.h>
2651
int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
A
Alexander Graf 已提交
2652
EOF
2653 2654
  curl_cflags=`$curlconfig --cflags 2>/dev/null`
  curl_libs=`$curlconfig --libs 2>/dev/null`
J
Juan Quintela 已提交
2655
  if compile_prog "$curl_cflags" "$curl_libs" ; then
A
Alexander Graf 已提交
2656
    curl=yes
2657 2658
  else
    if test "$curl" = "yes" ; then
2659
      feature_not_found "curl" "Install libcurl devel"
2660 2661
    fi
    curl=no
A
Alexander Graf 已提交
2662 2663 2664
  fi
fi # test "$curl"

B
balrog 已提交
2665 2666
##########################################
# bluez support probe
2667
if test "$bluez" != "no" ; then
2668 2669 2670 2671
  cat > $TMPC << EOF
#include <bluetooth/bluetooth.h>
int main(void) { return bt_error(0); }
EOF
2672 2673
  bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
  bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
2674
  if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2675
    bluez=yes
2676
    libs_softmmu="$bluez_libs $libs_softmmu"
2677
  else
2678
    if test "$bluez" = "yes" ; then
2679
      feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2680
    fi
2681 2682
    bluez="no"
  fi
B
balrog 已提交
2683 2684
fi

2685 2686
##########################################
# glib support probe
2687 2688 2689 2690 2691 2692 2693

if test "$mingw32" = yes; then
    # g_poll is required in order to integrate with the glib main loop.
    glib_req_ver=2.20
else
    glib_req_ver=2.12
fi
2694 2695 2696 2697
glib_modules=gthread-2.0
if test "$modules" = yes; then
    glib_modules="$glib_modules gmodule-2.0"
fi
F
Fam Zheng 已提交
2698

2699
for i in $glib_modules; do
F
Fam Zheng 已提交
2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715
    if $pkg_config --atleast-version=$glib_req_ver $i; then
        glib_cflags=`$pkg_config --cflags $i`
        glib_libs=`$pkg_config --libs $i`
        CFLAGS="$glib_cflags $CFLAGS"
        LIBS="$glib_libs $LIBS"
        libs_qga="$glib_libs $libs_qga"
    else
        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
    fi
done

##########################################
# SHA command probe for modules
if test "$modules" = yes; then
    shacmd_probe="sha1sum sha1 shasum"
    for c in $shacmd_probe; do
M
Michael Tokarev 已提交
2716
        if which $c >/dev/null 2>&1; then
F
Fam Zheng 已提交
2717 2718 2719 2720 2721 2722 2723
            shacmd="$c"
            break
        fi
    done
    if test "$shacmd" = ""; then
        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
    fi
2724 2725
fi

2726 2727 2728 2729
##########################################
# pixman support probe

if test "$pixman" = ""; then
2730 2731 2732
  if test "$want_tools" = "no" -a "$softmmu" = "no"; then
    pixman="none"
  elif $pkg_config pixman-1 > /dev/null 2>&1; then
2733 2734 2735 2736 2737
    pixman="system"
  else
    pixman="internal"
  fi
fi
2738 2739
if test "$pixman" = "none"; then
  if test "$want_tools" != "no" -o "$softmmu" != "no"; then
2740 2741 2742 2743
    error_exit "pixman disabled but system emulation or tools build" \
        "enabled.  You can turn off pixman only if you also" \
        "disable all system emulation targets and the tools" \
        "build with '--disable-tools --disable-system'."
2744 2745 2746 2747
  fi
  pixman_cflags=
  pixman_libs=
elif test "$pixman" = "system"; then
2748 2749
  pixman_cflags=`$pkg_config --cflags pixman-1`
  pixman_libs=`$pkg_config --libs pixman-1`
2750 2751
else
  if test ! -d ${source_path}/pixman/pixman; then
2752 2753 2754 2755 2756
    error_exit "pixman not present. Your options:" \
        "  (1) Preferred: Install the pixman devel package (any recent" \
        "      distro should have packages as Xorg needs pixman too)." \
        "  (2) Fetch the pixman submodule, using:" \
        "      git submodule update --init pixman"
2757
  fi
2758 2759 2760
  mkdir -p pixman/pixman
  pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
  pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
2761 2762
fi

2763 2764 2765 2766 2767 2768 2769
##########################################
# libcap probe

if test "$cap" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
#include <sys/capability.h>
2770
int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
2771 2772 2773 2774 2775 2776 2777 2778
EOF
  if compile_prog "" "-lcap" ; then
    cap=yes
  else
    cap=no
  fi
fi

2779
##########################################
2780
# pthread probe
2781
PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
2782

C
Christoph Hellwig 已提交
2783
pthread=no
2784
cat > $TMPC << EOF
2785
#include <pthread.h>
2786 2787 2788 2789 2790 2791
static void *f(void *p) { return NULL; }
int main(void) {
  pthread_t thread;
  pthread_create(&thread, 0, f, 0);
  return 0;
}
2792
EOF
2793 2794 2795 2796 2797 2798
if compile_prog "" "" ; then
  pthread=yes
else
  for pthread_lib in $PTHREADLIBS_LIST; do
    if compile_prog "" "$pthread_lib" ; then
      pthread=yes
P
Peter Portante 已提交
2799 2800 2801 2802 2803 2804 2805 2806 2807 2808
      found=no
      for lib_entry in $LIBS; do
        if test "$lib_entry" = "$pthread_lib"; then
          found=yes
          break
        fi
      done
      if test "$found" = "no"; then
        LIBS="$pthread_lib $LIBS"
      fi
2809 2810 2811 2812
      break
    fi
  done
fi
2813

2814
if test "$mingw32" != yes -a "$pthread" = no; then
2815 2816
  error_exit "pthread check failed" \
      "Make sure to have the pthread libs and headers installed."
2817 2818
fi

2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836
# check for pthread_setname_np
pthread_setname_np=no
cat > $TMPC << EOF
#include <pthread.h>

static void *f(void *p) { return NULL; }
int main(void)
{
    pthread_t thread;
    pthread_create(&thread, 0, f, 0);
    pthread_setname_np(thread, "QEMU");
    return 0;
}
EOF
if compile_prog "" "$pthread_lib" ; then
  pthread_setname_np=yes
fi

2837 2838 2839 2840 2841
##########################################
# rbd probe
if test "$rbd" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
2842
#include <rbd/librbd.h>
2843
int main(void) {
2844 2845
    rados_t cluster;
    rados_create(&cluster, NULL);
2846 2847 2848
    return 0;
}
EOF
2849 2850 2851
  rbd_libs="-lrbd -lrados"
  if compile_prog "" "$rbd_libs" ; then
    rbd=yes
2852 2853
  else
    if test "$rbd" = "yes" ; then
2854
      feature_not_found "rados block device" "Install librbd/ceph devel"
2855 2856 2857 2858 2859
    fi
    rbd=no
  fi
fi

2860 2861
##########################################
# libssh2 probe
2862
min_libssh2_version=1.2.8
2863
if test "$libssh2" != "no" ; then
2864
  if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
2865 2866 2867 2868 2869
    libssh2_cflags=`$pkg_config libssh2 --cflags`
    libssh2_libs=`$pkg_config libssh2 --libs`
    libssh2=yes
  else
    if test "$libssh2" = "yes" ; then
2870
      error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
2871 2872 2873 2874 2875
    fi
    libssh2=no
  fi
fi

2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900
##########################################
# libssh2_sftp_fsync probe

if test "$libssh2" = "yes"; then
  cat > $TMPC <<EOF
#include <stdio.h>
#include <libssh2.h>
#include <libssh2_sftp.h>
int main(void) {
    LIBSSH2_SESSION *session;
    LIBSSH2_SFTP *sftp;
    LIBSSH2_SFTP_HANDLE *sftp_handle;
    session = libssh2_session_init ();
    sftp = libssh2_sftp_init (session);
    sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
    libssh2_sftp_fsync (sftp_handle);
    return 0;
}
EOF
  # libssh2_cflags/libssh2_libs defined in previous test.
  if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
    QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
  fi
fi

2901 2902 2903 2904 2905 2906 2907
##########################################
# linux-aio probe

if test "$linux_aio" != "no" ; then
  cat > $TMPC <<EOF
#include <libaio.h>
#include <sys/eventfd.h>
S
Scott Wood 已提交
2908
#include <stddef.h>
2909 2910 2911 2912 2913 2914
int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
EOF
  if compile_prog "" "-laio" ; then
    linux_aio=yes
  else
    if test "$linux_aio" = "yes" ; then
2915
      feature_not_found "linux AIO" "Install libaio devel"
2916
    fi
2917
    linux_aio=no
2918 2919 2920
  fi
fi

P
Paolo Bonzini 已提交
2921 2922 2923 2924 2925 2926 2927 2928 2929
##########################################
# TPM passthrough is only on x86 Linux

if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
  tpm_passthrough=$tpm
else
  tpm_passthrough=no
fi

2930 2931 2932 2933 2934
##########################################
# adjust virtio-blk-data-plane based on linux-aio

if test "$virtio_blk_data_plane" = "yes" -a \
	"$linux_aio" != "yes" ; then
2935
  error_exit "virtio-blk-data-plane requires Linux AIO, please try --enable-linux-aio"
2936 2937 2938 2939
elif test -z "$virtio_blk_data_plane" ; then
  virtio_blk_data_plane=$linux_aio
fi

2940 2941 2942 2943 2944 2945 2946
##########################################
# attr probe

if test "$attr" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
#include <sys/types.h>
P
Pavel Borzenkov 已提交
2947 2948 2949
#ifdef CONFIG_LIBATTR
#include <attr/xattr.h>
#else
2950
#include <sys/xattr.h>
P
Pavel Borzenkov 已提交
2951
#endif
2952 2953
int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
EOF
2954 2955 2956
  if compile_prog "" "" ; then
    attr=yes
  # Older distros have <attr/xattr.h>, and need -lattr:
P
Pavel Borzenkov 已提交
2957
  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
2958 2959
    attr=yes
    LIBS="-lattr $LIBS"
2960
    libattr=yes
2961 2962
  else
    if test "$attr" = "yes" ; then
2963
      feature_not_found "ATTR" "Install libc6 or libattr devel"
2964 2965 2966 2967 2968
    fi
    attr=no
  fi
fi

A
aliguori 已提交
2969 2970 2971
##########################################
# iovec probe
cat > $TMPC <<EOF
B
blueswir1 已提交
2972
#include <sys/types.h>
A
aliguori 已提交
2973
#include <sys/uio.h>
B
blueswir1 已提交
2974
#include <unistd.h>
2975
int main(void) { return sizeof(struct iovec); }
A
aliguori 已提交
2976 2977
EOF
iovec=no
2978
if compile_prog "" "" ; then
A
aliguori 已提交
2979 2980 2981
  iovec=yes
fi

2982 2983 2984 2985 2986 2987
##########################################
# preadv probe
cat > $TMPC <<EOF
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
2988
int main(void) { return preadv(0, 0, 0, 0); }
2989 2990
EOF
preadv=no
2991
if compile_prog "" "" ; then
2992 2993 2994
  preadv=yes
fi

2995 2996
##########################################
# fdt probe
2997 2998 2999 3000 3001
# fdt support is mandatory for at least some target architectures,
# so insist on it if we're building those system emulators.
fdt_required=no
for target in $target_list; do
  case $target in
3002
    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016
      fdt_required=yes
    ;;
  esac
done

if test "$fdt_required" = "yes"; then
  if test "$fdt" = "no"; then
    error_exit "fdt disabled but some requested targets require it." \
      "You can turn off fdt only if you also disable all the system emulation" \
      "targets which need it (by specifying a cut down --target-list)."
  fi
  fdt=yes
fi

3017
if test "$fdt" != "no" ; then
J
Juan Quintela 已提交
3018
  fdt_libs="-lfdt"
3019
  # explicitly check for libfdt_env.h as it is missing in some stable installs
J
Juan Quintela 已提交
3020
  cat > $TMPC << EOF
3021
#include <libfdt_env.h>
3022 3023
int main(void) { return 0; }
EOF
3024
  if compile_prog "" "$fdt_libs" ; then
3025
    # system DTC is good - use it
3026
    fdt=yes
3027 3028 3029 3030 3031
  elif test -d ${source_path}/dtc/libfdt ; then
    # have submodule DTC - use it
    fdt=yes
    dtc_internal="yes"
    mkdir -p dtc
3032
    if [ "$pwd_is_source_path" != "y" ] ; then
3033 3034
       symlink "$source_path/dtc/Makefile" "dtc/Makefile"
       symlink "$source_path/dtc/scripts" "dtc/scripts"
3035
    fi
3036 3037 3038 3039
    fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
    fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
  elif test "$fdt" = "yes" ; then
    # have neither and want - prompt for system/submodule install
3040 3041
    error_exit "DTC (libfdt) not present. Your options:" \
        "  (1) Preferred: Install the DTC (libfdt) devel package" \
3042 3043 3044 3045
        "  (2) Fetch the DTC submodule, using:" \
        "      git submodule update --init dtc"
  else
    # don't have and don't want
3046
    fdt_libs=
3047
    fdt=no
3048 3049 3050
  fi
fi

3051 3052
libs_softmmu="$libs_softmmu $fdt_libs"

M
Michael Walle 已提交
3053
##########################################
3054 3055 3056
# GLX probe, used by milkymist-tmu2
if test "$glx" != "no" ; then
  glx_libs="-lGL -lX11"
M
Michael Walle 已提交
3057 3058 3059 3060
  cat > $TMPC << EOF
#include <X11/Xlib.h>
#include <GL/gl.h>
#include <GL/glx.h>
3061
int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
M
Michael Walle 已提交
3062
EOF
3063
  if compile_prog "" "-lGL -lX11" ; then
3064
    glx=yes
M
Michael Walle 已提交
3065
  else
3066
    if test "$glx" = "yes" ; then
3067
      feature_not_found "glx" "Install GL devel (e.g. MESA)"
M
Michael Walle 已提交
3068
    fi
3069 3070
    glx_libs=
    glx=no
M
Michael Walle 已提交
3071 3072 3073
  fi
fi

3074 3075 3076
##########################################
# glusterfs probe
if test "$glusterfs" != "no" ; then
3077
  if $pkg_config --atleast-version=3 glusterfs-api; then
3078
    glusterfs="yes"
3079 3080
    glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
    glusterfs_libs=`$pkg_config --libs glusterfs-api`
3081
    if $pkg_config --atleast-version=5 glusterfs-api; then
3082 3083
      glusterfs_discard="yes"
    fi
3084 3085 3086
    if $pkg_config --atleast-version=6 glusterfs-api; then
      glusterfs_zerofill="yes"
    fi
3087 3088
  else
    if test "$glusterfs" = "yes" ; then
3089
      feature_not_found "GlusterFS backend support" "Install glusterfs-api devel"
3090
    fi
3091
    glusterfs="no"
3092 3093 3094
  fi
fi

A
aurel32 已提交
3095
# Check for inotify functions when we are building linux-user
3096 3097 3098 3099 3100
# emulator.  This is done because older glibc versions don't
# have syscall stubs for these implemented.  In that case we
# don't provide them even if kernel supports them.
#
inotify=no
3101
cat > $TMPC << EOF
3102 3103 3104 3105 3106 3107
#include <sys/inotify.h>

int
main(void)
{
	/* try to start inotify */
A
aurel32 已提交
3108
	return inotify_init();
3109 3110
}
EOF
3111
if compile_prog "" "" ; then
3112
  inotify=yes
3113 3114
fi

3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129
inotify1=no
cat > $TMPC << EOF
#include <sys/inotify.h>

int
main(void)
{
    /* try to start inotify */
    return inotify_init1(0);
}
EOF
if compile_prog "" "" ; then
  inotify1=yes
fi

R
Riku Voipio 已提交
3130 3131 3132 3133 3134 3135
# check if utimensat and futimens are supported
utimens=no
cat > $TMPC << EOF
#define _ATFILE_SOURCE
#include <stddef.h>
#include <fcntl.h>
3136
#include <sys/stat.h>
R
Riku Voipio 已提交
3137 3138 3139 3140 3141 3142 3143 3144

int main(void)
{
    utimensat(AT_FDCWD, "foo", NULL, 0);
    futimens(0, NULL);
    return 0;
}
EOF
3145
if compile_prog "" "" ; then
R
Riku Voipio 已提交
3146 3147 3148
  utimens=yes
fi

R
Riku Voipio 已提交
3149 3150 3151 3152 3153 3154 3155 3156 3157
# check if pipe2 is there
pipe2=no
cat > $TMPC << EOF
#include <unistd.h>
#include <fcntl.h>

int main(void)
{
    int pipefd[2];
3158
    return pipe2(pipefd, O_CLOEXEC);
R
Riku Voipio 已提交
3159 3160
}
EOF
3161
if compile_prog "" "" ; then
R
Riku Voipio 已提交
3162 3163 3164
  pipe2=yes
fi

K
Kevin Wolf 已提交
3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180
# check if accept4 is there
accept4=no
cat > $TMPC << EOF
#include <sys/socket.h>
#include <stddef.h>

int main(void)
{
    accept4(0, NULL, NULL, SOCK_CLOEXEC);
    return 0;
}
EOF
if compile_prog "" "" ; then
  accept4=yes
fi

3181 3182 3183 3184 3185 3186 3187 3188 3189
# check if tee/splice is there. vmsplice was added same time.
splice=no
cat > $TMPC << EOF
#include <unistd.h>
#include <fcntl.h>
#include <limits.h>

int main(void)
{
3190
    int len, fd = 0;
3191 3192 3193 3194 3195
    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
    return 0;
}
EOF
3196
if compile_prog "" "" ; then
3197 3198 3199
  splice=yes
fi

3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219
##########################################
# libnuma probe

if test "$numa" != "no" ; then
  cat > $TMPC << EOF
#include <numa.h>
int main(void) { return numa_available(); }
EOF

  if compile_prog "" "-lnuma" ; then
    numa=yes
    libs_softmmu="-lnuma $libs_softmmu"
  else
    if test "$numa" = "yes" ; then
      feature_not_found "numa" "install numactl devel"
    fi
    numa=no
  fi
fi

M
Marcelo Tosatti 已提交
3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233
##########################################
# signalfd probe
signalfd="no"
cat > $TMPC << EOF
#include <unistd.h>
#include <sys/syscall.h>
#include <signal.h>
int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
EOF

if compile_prog "" "" ; then
  signalfd=yes
fi

R
Riku Voipio 已提交
3234 3235 3236 3237 3238 3239 3240
# check if eventfd is supported
eventfd=no
cat > $TMPC << EOF
#include <sys/eventfd.h>

int main(void)
{
3241
    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
R
Riku Voipio 已提交
3242 3243 3244 3245 3246 3247
}
EOF
if compile_prog "" "" ; then
  eventfd=yes
fi

3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258
# check for fallocate
fallocate=no
cat > $TMPC << EOF
#include <fcntl.h>

int main(void)
{
    fallocate(0, 0, 0, 0);
    return 0;
}
EOF
3259
if compile_prog "" "" ; then
3260 3261 3262
  fallocate=yes
fi

3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278
# check for fallocate hole punching
fallocate_punch_hole=no
cat > $TMPC << EOF
#include <fcntl.h>
#include <linux/falloc.h>

int main(void)
{
    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
    return 0;
}
EOF
if compile_prog "" "" ; then
  fallocate_punch_hole=yes
fi

3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289
# check for sync_file_range
sync_file_range=no
cat > $TMPC << EOF
#include <fcntl.h>

int main(void)
{
    sync_file_range(0, 0, 0, 0);
    return 0;
}
EOF
3290
if compile_prog "" "" ; then
3291 3292 3293
  sync_file_range=yes
fi

3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306
# check for linux/fiemap.h and FS_IOC_FIEMAP
fiemap=no
cat > $TMPC << EOF
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <linux/fiemap.h>

int main(void)
{
    ioctl(0, FS_IOC_FIEMAP, 0);
    return 0;
}
EOF
3307
if compile_prog "" "" ; then
3308 3309 3310
  fiemap=yes
fi

3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321
# check for dup3
dup3=no
cat > $TMPC << EOF
#include <unistd.h>

int main(void)
{
    dup3(0, 0, 0);
    return 0;
}
EOF
3322
if compile_prog "" "" ; then
3323 3324 3325
  dup3=yes
fi

3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341
# check for ppoll support
ppoll=no
cat > $TMPC << EOF
#include <poll.h>

int main(void)
{
    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
    ppoll(&pfd, 1, 0, 0);
    return 0;
}
EOF
if compile_prog "" "" ; then
  ppoll=yes
fi

3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356
# check for prctl(PR_SET_TIMERSLACK , ... ) support
prctl_pr_set_timerslack=no
cat > $TMPC << EOF
#include <sys/prctl.h>

int main(void)
{
    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
    return 0;
}
EOF
if compile_prog "" "" ; then
  prctl_pr_set_timerslack=yes
fi

3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367
# check for epoll support
epoll=no
cat > $TMPC << EOF
#include <sys/epoll.h>

int main(void)
{
    epoll_create(0);
    return 0;
}
EOF
3368
if compile_prog "" "" ; then
3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379
  epoll=yes
fi

# epoll_create1 and epoll_pwait are later additions
# so we must check separately for their presence
epoll_create1=no
cat > $TMPC << EOF
#include <sys/epoll.h>

int main(void)
{
3380 3381 3382 3383 3384 3385 3386 3387
    /* Note that we use epoll_create1 as a value, not as
     * a function being called. This is necessary so that on
     * old SPARC glibc versions where the function was present in
     * the library but not declared in the header file we will
     * fail the configure check. (Otherwise we will get a compiler
     * warning but not an error, and will proceed to fail the
     * qemu compile where we compile with -Werror.)
     */
3388
    return (int)(uintptr_t)&epoll_create1;
3389 3390
}
EOF
3391
if compile_prog "" "" ; then
3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404
  epoll_create1=yes
fi

epoll_pwait=no
cat > $TMPC << EOF
#include <sys/epoll.h>

int main(void)
{
    epoll_pwait(0, 0, 0, 0, 0);
    return 0;
}
EOF
3405
if compile_prog "" "" ; then
3406 3407 3408
  epoll_pwait=yes
fi

3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422
# check for sendfile support
sendfile=no
cat > $TMPC << EOF
#include <sys/sendfile.h>

int main(void)
{
    return sendfile(0, 0, 0, 0);
}
EOF
if compile_prog "" "" ; then
  sendfile=yes
fi

3423
# Check if tools are available to build documentation.
J
Juan Quintela 已提交
3424
if test "$docs" != "no" ; then
3425
  if has makeinfo && has pod2man; then
J
Juan Quintela 已提交
3426
    docs=yes
3427
  else
J
Juan Quintela 已提交
3428
    if test "$docs" = "yes" ; then
3429
      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3430
    fi
J
Juan Quintela 已提交
3431
    docs=no
3432
  fi
3433 3434
fi

S
Stefan Weil 已提交
3435
# Search for bswap_32 function
3436 3437 3438 3439 3440
byteswap_h=no
cat > $TMPC << EOF
#include <byteswap.h>
int main(void) { return bswap_32(0); }
EOF
3441
if compile_prog "" "" ; then
3442 3443 3444
  byteswap_h=yes
fi

3445
# Search for bswap32 function
3446 3447 3448 3449 3450 3451 3452
bswap_h=no
cat > $TMPC << EOF
#include <sys/endian.h>
#include <sys/types.h>
#include <machine/bswap.h>
int main(void) { return bswap32(0); }
EOF
3453
if compile_prog "" "" ; then
3454 3455 3456
  bswap_h=yes
fi

R
Ronnie Sahlberg 已提交
3457
##########################################
3458
# Do we have libiscsi >= 1.9.0
R
Ronnie Sahlberg 已提交
3459
if test "$libiscsi" != "no" ; then
3460
  if $pkg_config --atleast-version=1.9.0 libiscsi; then
3461
    libiscsi="yes"
3462 3463
    libiscsi_cflags=$($pkg_config --cflags libiscsi)
    libiscsi_libs=$($pkg_config --libs libiscsi)
R
Ronnie Sahlberg 已提交
3464 3465
  else
    if test "$libiscsi" = "yes" ; then
3466
      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
R
Ronnie Sahlberg 已提交
3467 3468 3469 3470 3471
    fi
    libiscsi="no"
  fi
fi

3472 3473 3474 3475
##########################################
# Do we need libm
cat > $TMPC << EOF
#include <math.h>
3476
int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3477 3478 3479 3480 3481 3482 3483
EOF
if compile_prog "" "" ; then
  :
elif compile_prog "" "-lm" ; then
  LIBS="-lm $LIBS"
  libs_qga="-lm $libs_qga"
else
3484
  error_exit "libm check failed"
3485 3486
fi

A
aliguori 已提交
3487 3488
##########################################
# Do we need librt
3489 3490 3491 3492
# uClibc provides 2 versions of clock_gettime(), one with realtime
# support and one without. This means that the clock_gettime() don't
# need -lrt. We still need it for timer_create() so we check for this
# function in addition.
A
aliguori 已提交
3493 3494 3495
cat > $TMPC <<EOF
#include <signal.h>
#include <time.h>
3496 3497 3498 3499
int main(void) {
  timer_create(CLOCK_REALTIME, NULL, NULL);
  return clock_gettime(CLOCK_REALTIME, NULL);
}
A
aliguori 已提交
3500 3501
EOF

3502
if compile_prog "" "" ; then
3503
  :
3504
# we need pthread for static linking. use previous pthread test result
3505 3506 3507
elif compile_prog "" "$pthread_lib -lrt" ; then
  LIBS="$LIBS -lrt"
  libs_qga="$libs_qga -lrt"
A
aliguori 已提交
3508 3509
fi

3510
if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3511
        "$aix" != "yes" -a "$haiku" != "yes" ; then
3512 3513 3514
    libs_softmmu="-lutil $libs_softmmu"
fi

3515
##########################################
3516 3517 3518 3519 3520 3521
# spice probe
if test "$spice" != "no" ; then
  cat > $TMPC << EOF
#include <spice.h>
int main(void) { spice_server_new(); return 0; }
EOF
J
Jiri Denemark 已提交
3522 3523
  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3524 3525
  if $pkg_config --atleast-version=0.12.0 spice-server && \
     $pkg_config --atleast-version=0.12.3 spice-protocol && \
3526 3527 3528 3529
     compile_prog "$spice_cflags" "$spice_libs" ; then
    spice="yes"
    libs_softmmu="$libs_softmmu $spice_libs"
    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3530 3531
    spice_protocol_version=$($pkg_config --modversion spice-protocol)
    spice_server_version=$($pkg_config --modversion spice-server)
3532 3533
  else
    if test "$spice" = "yes" ; then
3534
      feature_not_found "spice" "Install spice-server and spice-protocol devel"
3535 3536 3537 3538 3539
    fi
    spice="no"
  fi
fi

R
Robert Relyea 已提交
3540
# check for libcacard for smartcard support
P
Paolo Bonzini 已提交
3541 3542 3543 3544
smartcard_cflags=""
# TODO - what's the minimal nss version we support?
if test "$smartcard_nss" != "no"; then
  cat > $TMPC << EOF
3545 3546 3547
#include <pk11pub.h>
int main(void) { PK11_FreeSlot(0); return 0; }
EOF
3548 3549 3550 3551
    # FIXME: do not include $glib_* in here
    nss_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
    nss_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
    test_cflags="$nss_cflags"
P
Paolo Bonzini 已提交
3552 3553 3554 3555 3556 3557 3558
    # The header files in nss < 3.13.3 have a bug which causes them to
    # emit a warning. If we're going to compile QEMU with -Werror, then
    # test that the headers don't have this bug. Otherwise we would pass
    # the configure test but fail to compile QEMU later.
    if test "$werror" = "yes"; then
        test_cflags="-Werror $test_cflags"
    fi
3559
    if test -n "$libtool" &&
3560
       $pkg_config --atleast-version=3.12.8 nss && \
3561
      compile_prog "$test_cflags" "$nss_libs"; then
P
Paolo Bonzini 已提交
3562 3563 3564 3565
        smartcard_nss="yes"
    else
        if test "$smartcard_nss" = "yes"; then
            feature_not_found "nss"
R
Robert Relyea 已提交
3566
        fi
P
Paolo Bonzini 已提交
3567
        smartcard_nss="no"
R
Robert Relyea 已提交
3568 3569 3570
    fi
fi

G
Gerd Hoffmann 已提交
3571 3572
# check for libusb
if test "$libusb" != "no" ; then
3573
    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
G
Gerd Hoffmann 已提交
3574
        libusb="yes"
3575 3576
        libusb_cflags=$($pkg_config --cflags libusb-1.0)
        libusb_libs=$($pkg_config --libs libusb-1.0)
G
Gerd Hoffmann 已提交
3577 3578 3579 3580
        QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
        libs_softmmu="$libs_softmmu $libusb_libs"
    else
        if test "$libusb" = "yes"; then
3581
            feature_not_found "libusb" "Install libusb devel"
G
Gerd Hoffmann 已提交
3582 3583 3584 3585 3586
        fi
        libusb="no"
    fi
fi

3587 3588
# check for usbredirparser for usb network redirection support
if test "$usb_redir" != "no" ; then
3589
    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
3590
        usb_redir="yes"
3591 3592
        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
3593
        QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
A
Aurelien Jarno 已提交
3594
        libs_softmmu="$libs_softmmu $usb_redir_libs"
3595 3596
    else
        if test "$usb_redir" = "yes"; then
3597
            feature_not_found "usb-redir" "Install usbredir devel"
3598 3599 3600 3601 3602
        fi
        usb_redir="no"
    fi
fi

3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657
##########################################
# check if we have VSS SDK headers for win

if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
  case "$vss_win32_sdk" in
    "")   vss_win32_include="-I$source_path" ;;
    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
          # handle path with spaces. So we symlink the headers into ".sdk/vss".
          vss_win32_include="-I$source_path/.sdk/vss"
	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
	  ;;
    *)    vss_win32_include="-I$vss_win32_sdk"
  esac
  cat > $TMPC << EOF
#define __MIDL_user_allocate_free_DEFINED__
#include <inc/win2003/vss.h>
int main(void) { return VSS_CTX_BACKUP; }
EOF
  if compile_prog "$vss_win32_include" "" ; then
    guest_agent_with_vss="yes"
    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
    libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
  else
    if test "$vss_win32_sdk" != "" ; then
      echo "ERROR: Please download and install Microsoft VSS SDK:"
      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
      echo "ERROR: The headers are extracted in the directory \`inc'."
      feature_not_found "VSS support"
    fi
    guest_agent_with_vss="no"
  fi
fi

##########################################
# lookup Windows platform SDK (if not specified)
# The SDK is needed only to build .tlb (type library) file of guest agent
# VSS provider from the source. It is usually unnecessary because the
# pre-compiled .tlb file is included.

if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
  if test -z "$win_sdk"; then
    programfiles="$PROGRAMFILES"
    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
    if test -n "$programfiles"; then
      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
    else
      feature_not_found "Windows SDK"
    fi
  elif test "$win_sdk" = "no"; then
    win_sdk=""
  fi
fi

3658 3659
##########################################

B
Blue Swirl 已提交
3660 3661 3662 3663 3664 3665
##########################################
# check if we have fdatasync

fdatasync=no
cat > $TMPC << EOF
#include <unistd.h>
3666 3667 3668 3669
int main(void) {
#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
return fdatasync(0);
#else
3670
#error Not supported
3671 3672
#endif
}
B
Blue Swirl 已提交
3673 3674 3675 3676 3677
EOF
if compile_prog "" "" ; then
    fdatasync=yes
fi

A
Andreas Färber 已提交
3678 3679 3680 3681 3682 3683 3684
##########################################
# check if we have madvise

madvise=no
cat > $TMPC << EOF
#include <sys/types.h>
#include <sys/mman.h>
S
Scott Wood 已提交
3685
#include <stddef.h>
A
Andreas Färber 已提交
3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697
int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
EOF
if compile_prog "" "" ; then
    madvise=yes
fi

##########################################
# check if we have posix_madvise

posix_madvise=no
cat > $TMPC << EOF
#include <sys/mman.h>
S
Scott Wood 已提交
3698
#include <stddef.h>
A
Andreas Färber 已提交
3699 3700 3701 3702 3703 3704
int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
EOF
if compile_prog "" "" ; then
    posix_madvise=yes
fi

3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722
##########################################
# check if we have usable SIGEV_THREAD_ID

sigev_thread_id=no
cat > $TMPC << EOF
#include <signal.h>
int main(void) {
  struct sigevent ev;
  ev.sigev_notify = SIGEV_THREAD_ID;
  ev._sigev_un._tid = 0;
  asm volatile("" : : "g"(&ev));
  return 0;
}
EOF
if compile_prog "" "" ; then
    sigev_thread_id=yes
fi

3723 3724 3725
##########################################
# check if trace backend exists

L
Lluís Vilanova 已提交
3726
$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
3727
if test "$?" -ne 0 ; then
L
Lluís Vilanova 已提交
3728 3729
  error_exit "invalid trace backends" \
      "Please choose supported trace backends."
3730 3731
fi

3732 3733
##########################################
# For 'ust' backend, test if ust headers are present
L
Lluís Vilanova 已提交
3734
if have_backend "ust"; then
3735
  cat > $TMPC << EOF
3736
#include <lttng/tracepoint.h>
3737 3738 3739
int main(void) { return 0; }
EOF
  if compile_prog "" "" ; then
3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752
    if $pkg_config lttng-ust --exists; then
      lttng_ust_libs=`$pkg_config --libs lttng-ust`
    else
      lttng_ust_libs="-llttng-ust"
    fi
    if $pkg_config liburcu-bp --exists; then
      urcu_bp_libs=`$pkg_config --libs liburcu-bp`
    else
      urcu_bp_libs="-lurcu-bp"
    fi

    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
    libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
3753
  else
3754
    error_exit "Trace backend 'ust' missing lttng-ust header files"
3755 3756
  fi
fi
3757 3758 3759

##########################################
# For 'dtrace' backend, test if 'dtrace' command is present
L
Lluís Vilanova 已提交
3760
if have_backend "dtrace"; then
3761
  if ! has 'dtrace' ; then
3762
    error_exit "dtrace command is not found in PATH $PATH"
3763
  fi
3764 3765 3766 3767
  trace_backend_stap="no"
  if has 'stap' ; then
    trace_backend_stap="yes"
  fi
3768 3769
fi

W
Wolfgang Mauerer 已提交
3770
##########################################
3771
# check and set a backend for coroutine
3772

3773 3774 3775 3776 3777 3778 3779 3780 3781
# We prefer ucontext, but it's not always possible. The fallback
# is sigcontext. gthread is not selectable except explicitly, because
# it is not functional enough to run QEMU proper. (It is occasionally
# useful for debugging purposes.)  On Windows the only valid backend
# is the Windows-specific one.

ucontext_works=no
if test "$darwin" != "yes"; then
  cat > $TMPC << EOF
3782
#include <ucontext.h>
3783 3784 3785
#ifdef __stub_makecontext
#error Ignoring glibc stub makecontext which will always fail
#endif
3786
int main(void) { makecontext(0, 0, 0); return 0; }
3787
EOF
3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799
  if compile_prog "" "" ; then
    ucontext_works=yes
  fi
fi

if test "$coroutine" = ""; then
  if test "$mingw32" = "yes"; then
    coroutine=win32
  elif test "$ucontext_works" = "yes"; then
    coroutine=ucontext
  else
    coroutine=sigaltstack
3800
  fi
3801
else
3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824
  case $coroutine in
  windows)
    if test "$mingw32" != "yes"; then
      error_exit "'windows' coroutine backend only valid for Windows"
    fi
    # Unfortunately the user visible backend name doesn't match the
    # coroutine-*.c filename for this case, so we have to adjust it here.
    coroutine=win32
    ;;
  ucontext)
    if test "$ucontext_works" != "yes"; then
      feature_not_found "ucontext"
    fi
    ;;
  gthread|sigaltstack)
    if test "$mingw32" = "yes"; then
      error_exit "only the 'windows' coroutine backend is valid for Windows"
    fi
    ;;
  *)
    error_exit "unknown coroutine backend $coroutine"
    ;;
  esac
3825 3826
fi

3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837
if test "$coroutine_pool" = ""; then
  if test "$coroutine" = "gthread"; then
    coroutine_pool=no
  else
    coroutine_pool=yes
  fi
fi
if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
  error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
fi

3838 3839 3840
##########################################
# check if we have open_by_handle_at

S
Stefan Weil 已提交
3841
open_by_handle_at=no
3842 3843
cat > $TMPC << EOF
#include <fcntl.h>
3844 3845 3846
#if !defined(AT_EMPTY_PATH)
# error missing definition
#else
3847
int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
3848
#endif
3849 3850 3851 3852 3853
EOF
if compile_prog "" "" ; then
    open_by_handle_at=yes
fi

3854 3855 3856 3857 3858 3859 3860
########################################
# check if we have linux/magic.h

linux_magic_h=no
cat > $TMPC << EOF
#include <linux/magic.h>
int main(void) {
3861
  return 0;
3862 3863 3864 3865 3866 3867
}
EOF
if compile_prog "" "" ; then
    linux_magic_h=yes
fi

3868
########################################
K
Kevin Wolf 已提交
3869 3870 3871 3872 3873 3874 3875 3876
# check whether we can disable warning option with a pragma (this is needed
# to silence warnings in the headers of some versions of external libraries).
# This test has to be compiled with -Werror as otherwise an unknown pragma is
# only a warning.
#
# If we can't selectively disable warning in the code, disable -Werror so that
# the build doesn't fail anyway.

3877 3878
pragma_disable_unused_but_set=no
cat > $TMPC << EOF
3879
#pragma GCC diagnostic push
3880
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
K
Kevin Wolf 已提交
3881
#pragma GCC diagnostic ignored "-Wstrict-prototypes"
3882
#pragma GCC diagnostic pop
K
Kevin Wolf 已提交
3883

3884 3885 3886 3887 3888
int main(void) {
    return 0;
}
EOF
if compile_prog "-Werror" "" ; then
3889
    pragma_diagnostic_available=yes
K
Kevin Wolf 已提交
3890 3891
else
    werror=no
3892 3893
fi

3894
########################################
3895
# check if we have valgrind/valgrind.h and valgrind/memcheck.h
3896 3897 3898 3899

valgrind_h=no
cat > $TMPC << EOF
#include <valgrind/valgrind.h>
3900
#include <valgrind/memcheck.h>
3901 3902 3903 3904 3905 3906 3907 3908
int main(void) {
  return 0;
}
EOF
if compile_prog "" "" ; then
    valgrind_h=yes
fi

3909 3910 3911 3912 3913 3914 3915
########################################
# check if environ is declared

has_environ=no
cat > $TMPC << EOF
#include <unistd.h>
int main(void) {
3916
    environ = 0;
3917 3918 3919 3920 3921 3922 3923
    return 0;
}
EOF
if compile_prog "" "" ; then
    has_environ=yes
fi

3924 3925 3926 3927 3928 3929 3930
########################################
# check if cpuid.h is usable.

cpuid_h=no
cat > $TMPC << EOF
#include <cpuid.h>
int main(void) {
3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942
    unsigned a, b, c, d;
    int max = __get_cpuid_max(0, 0);

    if (max >= 1) {
        __cpuid(1, a, b, c, d);
    }

    if (max >= 7) {
        __cpuid_count(7, 0, a, b, c, d);
    }

    return 0;
3943 3944 3945 3946 3947 3948
}
EOF
if compile_prog "" "" ; then
    cpuid_h=yes
fi

3949 3950 3951 3952 3953
########################################
# check if __[u]int128_t is usable.

int128=no
cat > $TMPC << EOF
3954 3955 3956 3957 3958
#if defined(__clang_major__) && defined(__clang_minor__)
# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
#  error __int128_t does not work in CLANG before 3.2
# endif
#endif
3959 3960 3961 3962 3963
__int128_t a;
__uint128_t b;
int main (void) {
  a = a + b;
  b = a * b;
3964
  a = a * a;
3965 3966 3967 3968 3969 3970
  return 0;
}
EOF
if compile_prog "" "" ; then
    int128=yes
fi
3971

3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985
########################################
# check if getauxval is available.

getauxval=no
cat > $TMPC << EOF
#include <sys/auxv.h>
int main(void) {
  return getauxval(AT_HWCAP) == 0;
}
EOF
if compile_prog "" "" ; then
    getauxval=yes
fi

3986
##########################################
3987 3988 3989
# End of CC checks
# After here, no more $cc or $ld runs

B
Blue Swirl 已提交
3990 3991 3992 3993
if test "$gcov" = "yes" ; then
  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
elif test "$debug" = "no" ; then
3994
  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
3995
fi
J
Juan Quintela 已提交
3996

P
Peter Lieven 已提交
3997 3998 3999
##########################################
# Do we have libnfs
if test "$libnfs" != "no" ; then
4000
  if $pkg_config --atleast-version=1.9.3 libnfs; then
P
Peter Lieven 已提交
4001 4002 4003 4004 4005 4006 4007 4008 4009 4010
    libnfs="yes"
    libnfs_libs=$($pkg_config --libs libnfs)
    LIBS="$LIBS $libnfs_libs"
  else
    if test "$libnfs" = "yes" ; then
      feature_not_found "libnfs"
    fi
    libnfs="no"
  fi
fi
B
Blue Swirl 已提交
4011

4012 4013 4014 4015 4016 4017 4018 4019 4020 4021
# Disable zero malloc errors for official releases unless explicitly told to
# enable/disable
if test -z "$zero_malloc" ; then
    if test "$z_version" = "50" ; then
	zero_malloc="no"
    else
	zero_malloc="yes"
    fi
fi

4022 4023 4024 4025 4026
# Now we've finished running tests it's OK to add -Werror to the compiler flags
if test "$werror" = "yes"; then
    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
fi

4027 4028
if test "$solaris" = "no" ; then
    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4029
        LDFLAGS="-Wl,--warn-common $LDFLAGS"
4030 4031 4032
    fi
fi

4033 4034 4035 4036 4037 4038 4039
# test if pod2man has --utf8 option
if pod2man --help | grep -q utf8; then
    POD2MAN="pod2man --utf8"
else
    POD2MAN="pod2man"
fi

4040 4041 4042 4043 4044 4045 4046 4047 4048
# Use ASLR, no-SEH and DEP if available
if test "$mingw32" = "yes" ; then
    for flag in --dynamicbase --no-seh --nxcompat; do
        if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
            LDFLAGS="-Wl,$flag $LDFLAGS"
        fi
    done
fi

4049
qemu_confdir=$sysconfdir$confsuffix
F
Fam Zheng 已提交
4050
qemu_moddir=$libdir$confsuffix
4051
qemu_datadir=$datadir$confsuffix
4052
qemu_localedir="$datadir/locale"
4053

4054 4055
tools=""
if test "$want_tools" = "yes" ; then
4056
  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4057 4058 4059 4060 4061
  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
    tools="qemu-nbd\$(EXESUF) $tools"
  fi
fi
if test "$softmmu" = yes ; then
4062
  if test "$virtfs" != no ; then
4063 4064 4065 4066 4067
    if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
      virtfs=yes
      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
    else
      if test "$virtfs" = yes; then
4068
        error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4069
      fi
4070
      virtfs=no
4071
    fi
4072
  fi
4073 4074
fi
if [ "$guest_agent" != "no" ]; then
4075
  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
M
Michael Roth 已提交
4076
      tools="qemu-ga\$(EXESUF) $tools"
4077 4078 4079
      if [ "$mingw32" = "yes" -a "$guest_agent_with_vss" = "yes" ]; then
        tools="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb $tools"
      fi
4080 4081 4082 4083 4084
      guest_agent=yes
  elif [ "$guest_agent" != yes ]; then
      guest_agent=no
  else
      error_exit "Guest agent is not supported on this platform"
4085
  fi
4086
fi
4087 4088 4089 4090 4091 4092 4093 4094

# Mac OS X ships with a broken assembler
roms=
if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
        "$softmmu" = yes ; then
  roms="optionrom"
fi
4095
if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4096 4097
  roms="$roms spapr-rtas"
fi
4098

4099 4100 4101 4102
if test "$cpu" = "s390x" ; then
  roms="$roms s390-ccw"
fi

4103 4104 4105 4106
# Probe for the need for relocating the user-only binary.
if test "$pie" = "no" ; then
  textseg_addr=
  case "$cpu" in
4107 4108
    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
      # ??? Rationale for choosing this address
4109 4110 4111
      textseg_addr=0x60000000
      ;;
    mips)
4112 4113 4114
      # A 256M aligned address, high in the address space, with enough
      # room for the code_gen_buffer above it before the stack.
      textseg_addr=0x60000000
4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135
      ;;
  esac
  if [ -n "$textseg_addr" ]; then
    cat > $TMPC <<EOF
    int main(void) { return 0; }
EOF
    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
    if ! compile_prog "" "$textseg_ldflags"; then
      # In case ld does not support -Ttext-segment, edit the default linker
      # script via sed to set the .text start addr.  This is needed on FreeBSD
      # at least.
      $ld --verbose | sed \
        -e '1,/==================================================/d' \
        -e '/==================================================/,$d' \
        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
      textseg_ldflags="-Wl,-T../config-host.ld"
    fi
  fi
fi

4136
# add pixman flags after all config tests are done
4137
QEMU_CFLAGS="$QEMU_CFLAGS $pixman_cflags $fdt_cflags"
4138 4139
libs_softmmu="$libs_softmmu $pixman_libs"

B
bellard 已提交
4140
echo "Install prefix    $prefix"
4141
echo "BIOS directory    `eval echo $qemu_datadir`"
4142
echo "binary directory  `eval echo $bindir`"
A
Alon Levy 已提交
4143
echo "library directory `eval echo $libdir`"
F
Fam Zheng 已提交
4144
echo "module directory  `eval echo $qemu_moddir`"
4145
echo "libexec directory `eval echo $libexecdir`"
4146
echo "include directory `eval echo $includedir`"
4147
echo "config directory  `eval echo $sysconfdir`"
B
bellard 已提交
4148
if test "$mingw32" = "no" ; then
4149
echo "local state directory   `eval echo $local_statedir`"
4150
echo "Manual directory  `eval echo $mandir`"
B
bellard 已提交
4151
echo "ELF interp prefix $interp_prefix"
4152 4153
else
echo "local state directory   queried at runtime"
4154
echo "Windows SDK       $win_sdk"
B
bellard 已提交
4155
fi
4156
echo "Source path       $source_path"
B
bellard 已提交
4157
echo "C compiler        $cc"
B
bellard 已提交
4158
echo "Host C compiler   $host_cc"
4159
echo "C++ compiler      $cxx"
4160
echo "Objective-C compiler $objcc"
4161
echo "ARFLAGS           $ARFLAGS"
4162
echo "CFLAGS            $CFLAGS"
J
Juan Quintela 已提交
4163
echo "QEMU_CFLAGS       $QEMU_CFLAGS"
4164
echo "LDFLAGS           $LDFLAGS"
B
bellard 已提交
4165
echo "make              $make"
4166
echo "install           $install"
B
Blue Swirl 已提交
4167
echo "python            $python"
4168 4169 4170
if test "$slirp" = "yes" ; then
    echo "smbd              $smbd"
fi
F
Fam Zheng 已提交
4171
echo "module support    $modules"
B
bellard 已提交
4172
echo "host CPU          $cpu"
B
bellard 已提交
4173
echo "host big endian   $bigendian"
4174
echo "target list       $target_list"
4175
echo "tcg debug enabled $debug_tcg"
B
bellard 已提交
4176
echo "gprof enabled     $gprof"
4177
echo "sparse enabled    $sparse"
4178
echo "strip binaries    $strip_opt"
4179
echo "profiler          $profiler"
B
bellard 已提交
4180
echo "static build      $static"
4181 4182 4183
if test "$darwin" = "yes" ; then
    echo "Cocoa support     $cocoa"
fi
4184
echo "pixman            $pixman"
4185
echo "SDL support       $sdl"
A
Anthony Liguori 已提交
4186
echo "GTK support       $gtk"
S
Stefan Weil 已提交
4187
echo "VTE support       $vte"
B
balrog 已提交
4188
echo "curses support    $curses"
A
Alexander Graf 已提交
4189
echo "curl support      $curl"
B
bellard 已提交
4190
echo "mingw32 support   $mingw32"
M
malc 已提交
4191
echo "Audio drivers     $audio_drv_list"
4192 4193
echo "Block whitelist (rw) $block_drv_rw_whitelist"
echo "Block whitelist (ro) $block_drv_ro_whitelist"
4194
echo "VirtFS support    $virtfs"
J
Jes Sorensen 已提交
4195 4196 4197 4198 4199 4200
echo "VNC support       $vnc"
if test "$vnc" = "yes" ; then
    echo "VNC TLS support   $vnc_tls"
    echo "VNC SASL support  $vnc_sasl"
    echo "VNC JPEG support  $vnc_jpeg"
    echo "VNC PNG support   $vnc_png"
4201
    echo "VNC WS support    $vnc_ws"
J
Jes Sorensen 已提交
4202
fi
4203 4204 4205
if test -n "$sparc_cpu"; then
    echo "Target Sparc Arch $sparc_cpu"
fi
4206
echo "xen support       $xen"
A
aurel32 已提交
4207
echo "brlapi support    $brlapi"
4208
echo "bluez  support    $bluez"
J
Juan Quintela 已提交
4209
echo "Documentation     $docs"
P
Paul Brook 已提交
4210
echo "GUEST_BASE        $guest_base"
4211
echo "PIE               $pie"
4212
echo "vde support       $vde"
4213
echo "netmap support    $netmap"
4214
echo "Linux AIO support $linux_aio"
4215
echo "ATTR/XATTR support $attr"
T
ths 已提交
4216
echo "Install blobs     $blobs"
4217
echo "KVM support       $kvm"
M
Michael R. Hines 已提交
4218
echo "RDMA support      $rdma"
4219
echo "TCG interpreter   $tcg_interpreter"
4220
echo "fdt support       $fdt"
4221
echo "preadv support    $preadv"
B
Blue Swirl 已提交
4222
echo "fdatasync         $fdatasync"
A
Andreas Färber 已提交
4223 4224
echo "madvise           $madvise"
echo "posix_madvise     $posix_madvise"
4225
echo "sigev_thread_id   $sigev_thread_id"
4226
echo "uuid support      $uuid"
4227
echo "libcap-ng support $cap_ng"
M
Michael S. Tsirkin 已提交
4228
echo "vhost-net support $vhost_net"
4229
echo "vhost-scsi support $vhost_scsi"
L
Lluís Vilanova 已提交
4230
echo "Trace backends    $trace_backends"
4231
if test "$trace_backend" = "simple"; then
P
Prerna Saxena 已提交
4232
echo "Trace output file $trace_file-<pid>"
4233
fi
4234
if test "$spice" = "yes"; then
4235
echo "spice support     $spice ($spice_protocol_version/$spice_server_version)"
4236 4237 4238
else
echo "spice support     $spice"
fi
4239
echo "rbd support       $rbd"
C
Christoph Hellwig 已提交
4240
echo "xfsctl support    $xfs"
R
Robert Relyea 已提交
4241
echo "nss used          $smartcard_nss"
G
Gerd Hoffmann 已提交
4242
echo "libusb            $libusb"
4243
echo "usb net redir     $usb_redir"
4244
echo "GLX support       $glx"
R
Ronnie Sahlberg 已提交
4245
echo "libiscsi support  $libiscsi"
P
Peter Lieven 已提交
4246
echo "libnfs support    $libnfs"
4247
echo "build guest agent $guest_agent"
4248
echo "QGA VSS support   $guest_agent_with_vss"
4249
echo "seccomp support   $seccomp"
4250
echo "coroutine backend $coroutine"
4251
echo "coroutine pool    $coroutine_pool"
4252
echo "GlusterFS support $glusterfs"
4253
echo "virtio-blk-data-plane $virtio_blk_data_plane"
B
Blue Swirl 已提交
4254 4255
echo "gcov              $gcov_tool"
echo "gcov enabled      $gcov"
S
Stefan Berger 已提交
4256
echo "TPM support       $tpm"
4257
echo "libssh2 support   $libssh2"
P
Paolo Bonzini 已提交
4258
echo "TPM passthrough   $tpm_passthrough"
4259
echo "QOM debugging     $qom_cast_debug"
4260
echo "vhdx              $vhdx"
B
Benoît Canet 已提交
4261
echo "Quorum            $quorum"
Q
qiaonuohan 已提交
4262 4263
echo "lzo support       $lzo"
echo "snappy support    $snappy"
4264
echo "NUMA host support $numa"
B
bellard 已提交
4265

4266
if test "$sdl_too_old" = "yes"; then
B
bellard 已提交
4267
echo "-> Your SDL version is too old - please upgrade to have SDL support"
B
bellard 已提交
4268
fi
B
bellard 已提交
4269

4270 4271
config_host_mak="config-host.mak"

4272 4273
echo "# Automatically generated by configure - do not modify" >config-all-disas.mak

4274 4275 4276
echo "# Automatically generated by configure - do not modify" > $config_host_mak
echo >> $config_host_mak

4277
echo all: >> $config_host_mak
4278 4279
echo "prefix=$prefix" >> $config_host_mak
echo "bindir=$bindir" >> $config_host_mak
A
Alon Levy 已提交
4280
echo "libdir=$libdir" >> $config_host_mak
4281
echo "libexecdir=$libexecdir" >> $config_host_mak
4282
echo "includedir=$includedir" >> $config_host_mak
4283 4284
echo "mandir=$mandir" >> $config_host_mak
echo "sysconfdir=$sysconfdir" >> $config_host_mak
4285
echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4286 4287
echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
F
Fam Zheng 已提交
4288
echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4289 4290 4291
if test "$mingw32" = "no" ; then
  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
fi
4292
echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4293 4294
echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4295
echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4296
echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4297

4298
echo "ARCH=$ARCH" >> $config_host_mak
4299

4300
if test "$debug_tcg" = "yes" ; then
4301
  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4302
fi
4303
if test "$strip_opt" = "yes" ; then
4304
  echo "STRIP=${strip}" >> $config_host_mak
4305
fi
B
bellard 已提交
4306
if test "$bigendian" = "yes" ; then
4307
  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4308
fi
B
bellard 已提交
4309
if test "$mingw32" = "yes" ; then
4310
  echo "CONFIG_WIN32=y" >> $config_host_mak
4311 4312 4313 4314 4315 4316 4317 4318 4319
  rc_version=`cat $source_path/VERSION`
  version_major=${rc_version%%.*}
  rc_version=${rc_version#*.}
  version_minor=${rc_version%%.*}
  rc_version=${rc_version#*.}
  version_subminor=${rc_version%%.*}
  version_micro=0
  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4320 4321 4322 4323
  if test "$guest_agent_with_vss" = "yes" ; then
    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
  fi
4324
else
J
Juan Quintela 已提交
4325
  echo "CONFIG_POSIX=y" >> $config_host_mak
M
Mark McLoughlin 已提交
4326 4327 4328 4329
fi

if test "$linux" = "yes" ; then
  echo "CONFIG_LINUX=y" >> $config_host_mak
B
bellard 已提交
4330
fi
4331

4332
if test "$darwin" = "yes" ; then
4333
  echo "CONFIG_DARWIN=y" >> $config_host_mak
4334
fi
M
malc 已提交
4335 4336

if test "$aix" = "yes" ; then
4337
  echo "CONFIG_AIX=y" >> $config_host_mak
M
malc 已提交
4338 4339
fi

B
bellard 已提交
4340
if test "$solaris" = "yes" ; then
4341
  echo "CONFIG_SOLARIS=y" >> $config_host_mak
4342
  echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
T
ths 已提交
4343
  if test "$needs_libsunmath" = "yes" ; then
4344
    echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
T
ths 已提交
4345
  fi
B
bellard 已提交
4346
fi
4347 4348 4349
if test "$haiku" = "yes" ; then
  echo "CONFIG_HAIKU=y" >> $config_host_mak
fi
4350
if test "$static" = "yes" ; then
4351
  echo "CONFIG_STATIC=y" >> $config_host_mak
B
bellard 已提交
4352
fi
4353
if test "$profiler" = "yes" ; then
4354
  echo "CONFIG_PROFILER=y" >> $config_host_mak
4355
fi
B
bellard 已提交
4356
if test "$slirp" = "yes" ; then
4357
  echo "CONFIG_SLIRP=y" >> $config_host_mak
4358
  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
B
bellard 已提交
4359
fi
4360
if test "$vde" = "yes" ; then
4361
  echo "CONFIG_VDE=y" >> $config_host_mak
4362
fi
4363 4364 4365
if test "$netmap" = "yes" ; then
  echo "CONFIG_NETMAP=y" >> $config_host_mak
fi
4366 4367 4368
if test "$l2tpv3" = "yes" ; then
  echo "CONFIG_L2TPV3=y" >> $config_host_mak
fi
4369 4370 4371
if test "$cap_ng" = "yes" ; then
  echo "CONFIG_LIBCAP=y" >> $config_host_mak
fi
4372
echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
M
malc 已提交
4373
for drv in $audio_drv_list; do
4374
    def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4375
    echo "$def=y" >> $config_host_mak
M
malc 已提交
4376
    if test "$drv" = "fmod"; then
4377
        echo "FMOD_CFLAGS=-I$fmod_inc" >> $config_host_mak
M
malc 已提交
4378 4379
    fi
done
4380 4381 4382
if test "$audio_pt_int" = "yes" ; then
  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
fi
4383 4384 4385
if test "$audio_win_int" = "yes" ; then
  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
fi
4386 4387
echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
J
Jes Sorensen 已提交
4388 4389 4390
if test "$vnc" = "yes" ; then
  echo "CONFIG_VNC=y" >> $config_host_mak
fi
4391
if test "$vnc_tls" = "yes" ; then
4392
  echo "CONFIG_VNC_TLS=y" >> $config_host_mak
4393
fi
4394
if test "$vnc_sasl" = "yes" ; then
4395
  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4396
fi
J
Jes Sorensen 已提交
4397
if test "$vnc_jpeg" = "yes" ; then
4398 4399
  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
fi
J
Jes Sorensen 已提交
4400
if test "$vnc_png" = "yes" ; then
C
Corentin Chary 已提交
4401 4402
  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
fi
4403 4404 4405 4406
if test "$vnc_ws" = "yes" ; then
  echo "CONFIG_VNC_WS=y" >> $config_host_mak
  echo "VNC_WS_CFLAGS=$vnc_ws_cflags" >> $config_host_mak
fi
4407
if test "$fnmatch" = "yes" ; then
4408
  echo "CONFIG_FNMATCH=y" >> $config_host_mak
4409
fi
4410 4411 4412
if test "$uuid" = "yes" ; then
  echo "CONFIG_UUID=y" >> $config_host_mak
fi
C
Christoph Hellwig 已提交
4413 4414 4415
if test "$xfs" = "yes" ; then
  echo "CONFIG_XFS=y" >> $config_host_mak
fi
4416
qemu_version=`head $source_path/VERSION`
4417
echo "VERSION=$qemu_version" >>$config_host_mak
4418
echo "PKGVERSION=$pkgversion" >>$config_host_mak
4419 4420
echo "SRC_PATH=$source_path" >> $config_host_mak
echo "TARGET_DIRS=$target_list" >> $config_host_mak
J
Juan Quintela 已提交
4421
if [ "$docs" = "yes" ] ; then
4422
  echo "BUILD_DOCS=yes" >> $config_host_mak
4423
fi
F
Fam Zheng 已提交
4424
if test "$modules" = "yes"; then
F
Fam Zheng 已提交
4425 4426 4427
  # $shacmd can generate a hash started with digit, which the compiler doesn't
  # like as an symbol. So prefix it with an underscore
  echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
F
Fam Zheng 已提交
4428 4429
  echo "CONFIG_MODULES=y" >> $config_host_mak
fi
4430
if test "$sdl" = "yes" ; then
4431
  echo "CONFIG_SDL=y" >> $config_host_mak
4432
  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
4433
  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
4434 4435
fi
if test "$cocoa" = "yes" ; then
4436
  echo "CONFIG_COCOA=y" >> $config_host_mak
B
balrog 已提交
4437 4438
fi
if test "$curses" = "yes" ; then
4439
  echo "CONFIG_CURSES=y" >> $config_host_mak
4440
fi
R
Riku Voipio 已提交
4441
if test "$utimens" = "yes" ; then
4442
  echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
R
Riku Voipio 已提交
4443
fi
R
Riku Voipio 已提交
4444
if test "$pipe2" = "yes" ; then
4445
  echo "CONFIG_PIPE2=y" >> $config_host_mak
R
Riku Voipio 已提交
4446
fi
K
Kevin Wolf 已提交
4447 4448 4449
if test "$accept4" = "yes" ; then
  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
fi
4450
if test "$splice" = "yes" ; then
4451
  echo "CONFIG_SPLICE=y" >> $config_host_mak
4452
fi
R
Riku Voipio 已提交
4453 4454 4455
if test "$eventfd" = "yes" ; then
  echo "CONFIG_EVENTFD=y" >> $config_host_mak
fi
4456 4457 4458
if test "$fallocate" = "yes" ; then
  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
fi
4459 4460 4461
if test "$fallocate_punch_hole" = "yes" ; then
  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
fi
4462 4463 4464
if test "$sync_file_range" = "yes" ; then
  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
fi
4465 4466 4467
if test "$fiemap" = "yes" ; then
  echo "CONFIG_FIEMAP=y" >> $config_host_mak
fi
4468 4469 4470
if test "$dup3" = "yes" ; then
  echo "CONFIG_DUP3=y" >> $config_host_mak
fi
4471 4472 4473
if test "$ppoll" = "yes" ; then
  echo "CONFIG_PPOLL=y" >> $config_host_mak
fi
4474 4475 4476
if test "$prctl_pr_set_timerslack" = "yes" ; then
  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
fi
4477 4478 4479 4480 4481 4482 4483 4484 4485
if test "$epoll" = "yes" ; then
  echo "CONFIG_EPOLL=y" >> $config_host_mak
fi
if test "$epoll_create1" = "yes" ; then
  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
fi
if test "$epoll_pwait" = "yes" ; then
  echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
fi
4486 4487 4488
if test "$sendfile" = "yes" ; then
  echo "CONFIG_SENDFILE=y" >> $config_host_mak
fi
4489
if test "$inotify" = "yes" ; then
4490
  echo "CONFIG_INOTIFY=y" >> $config_host_mak
4491
fi
4492 4493 4494
if test "$inotify1" = "yes" ; then
  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
fi
4495 4496 4497 4498 4499 4500
if test "$byteswap_h" = "yes" ; then
  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
fi
if test "$bswap_h" = "yes" ; then
  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
fi
A
Alexander Graf 已提交
4501
if test "$curl" = "yes" ; then
4502
  echo "CONFIG_CURL=m" >> $config_host_mak
J
Juan Quintela 已提交
4503
  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
4504
  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
A
Alexander Graf 已提交
4505
fi
A
aurel32 已提交
4506
if test "$brlapi" = "yes" ; then
4507
  echo "CONFIG_BRLAPI=y" >> $config_host_mak
A
aurel32 已提交
4508
fi
B
balrog 已提交
4509
if test "$bluez" = "yes" ; then
4510
  echo "CONFIG_BLUEZ=y" >> $config_host_mak
4511
  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
B
balrog 已提交
4512
fi
4513
echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
A
Anthony Liguori 已提交
4514 4515
if test "$gtk" = "yes" ; then
  echo "CONFIG_GTK=y" >> $config_host_mak
4516
  echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
A
Anthony Liguori 已提交
4517
  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
S
Stefan Weil 已提交
4518 4519 4520
fi
if test "$vte" = "yes" ; then
  echo "CONFIG_VTE=y" >> $config_host_mak
A
Anthony Liguori 已提交
4521 4522
  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
fi
4523
if test "$xen" = "yes" ; then
J
Jan Kiszka 已提交
4524
  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4525
  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4526
fi
4527 4528 4529
if test "$linux_aio" = "yes" ; then
  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
fi
4530 4531 4532
if test "$attr" = "yes" ; then
  echo "CONFIG_ATTR=y" >> $config_host_mak
fi
4533 4534 4535
if test "$libattr" = "yes" ; then
  echo "CONFIG_LIBATTR=y" >> $config_host_mak
fi
4536 4537
if test "$virtfs" = "yes" ; then
  echo "CONFIG_VIRTFS=y" >> $config_host_mak
4538
fi
4539 4540 4541
if test "$vhost_scsi" = "yes" ; then
  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
fi
4542 4543 4544
if test "$vhost_net" = "yes" ; then
  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
fi
T
ths 已提交
4545
if test "$blobs" = "yes" ; then
4546
  echo "INSTALL_BLOBS=yes" >> $config_host_mak
T
ths 已提交
4547
fi
A
aliguori 已提交
4548
if test "$iovec" = "yes" ; then
4549
  echo "CONFIG_IOVEC=y" >> $config_host_mak
A
aliguori 已提交
4550
fi
4551
if test "$preadv" = "yes" ; then
4552
  echo "CONFIG_PREADV=y" >> $config_host_mak
4553
fi
4554
if test "$fdt" = "yes" ; then
4555
  echo "CONFIG_FDT=y" >> $config_host_mak
4556
fi
M
Marcelo Tosatti 已提交
4557 4558 4559
if test "$signalfd" = "yes" ; then
  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
fi
4560 4561 4562
if test "$tcg_interpreter" = "yes" ; then
  echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
fi
B
Blue Swirl 已提交
4563 4564 4565
if test "$fdatasync" = "yes" ; then
  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
fi
A
Andreas Färber 已提交
4566 4567 4568 4569 4570 4571
if test "$madvise" = "yes" ; then
  echo "CONFIG_MADVISE=y" >> $config_host_mak
fi
if test "$posix_madvise" = "yes" ; then
  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
fi
4572 4573 4574
if test "$sigev_thread_id" = "yes" ; then
  echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
fi
4575

4576 4577 4578
if test "$spice" = "yes" ; then
  echo "CONFIG_SPICE=y" >> $config_host_mak
fi
A
Alon Levy 已提交
4579

R
Robert Relyea 已提交
4580 4581
if test "$smartcard_nss" = "yes" ; then
  echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
4582 4583
  echo "NSS_LIBS=$nss_libs" >> $config_host_mak
  echo "NSS_CFLAGS=$nss_cflags" >> $config_host_mak
R
Robert Relyea 已提交
4584 4585
fi

G
Gerd Hoffmann 已提交
4586 4587 4588 4589
if test "$libusb" = "yes" ; then
  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
fi

4590 4591 4592 4593
if test "$usb_redir" = "yes" ; then
  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
fi

4594 4595
if test "$glx" = "yes" ; then
  echo "CONFIG_GLX=y" >> $config_host_mak
4596
  echo "GLX_LIBS=$glx_libs" >> $config_host_mak
M
Michael Walle 已提交
4597 4598
fi

Q
qiaonuohan 已提交
4599 4600 4601 4602 4603 4604 4605 4606
if test "$lzo" = "yes" ; then
  echo "CONFIG_LZO=y" >> $config_host_mak
fi

if test "$snappy" = "yes" ; then
  echo "CONFIG_SNAPPY=y" >> $config_host_mak
fi

R
Ronnie Sahlberg 已提交
4607
if test "$libiscsi" = "yes" ; then
4608
  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
4609 4610
  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
R
Ronnie Sahlberg 已提交
4611 4612
fi

P
Peter Lieven 已提交
4613 4614 4615 4616
if test "$libnfs" = "yes" ; then
  echo "CONFIG_LIBNFS=y" >> $config_host_mak
fi

4617 4618 4619 4620
if test "$seccomp" = "yes"; then
  echo "CONFIG_SECCOMP=y" >> $config_host_mak
fi

4621
# XXX: suppress that
B
bellard 已提交
4622
if [ "$bsd" = "yes" ] ; then
4623
  echo "CONFIG_BSD=y" >> $config_host_mak
B
bellard 已提交
4624 4625
fi

4626 4627 4628
if test "$zero_malloc" = "yes" ; then
  echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
fi
4629 4630 4631
if test "$qom_cast_debug" = "yes" ; then
  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
fi
4632
if test "$rbd" = "yes" ; then
4633
  echo "CONFIG_RBD=m" >> $config_host_mak
4634 4635
  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
4636 4637
fi

4638
echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
4639 4640 4641 4642 4643
if test "$coroutine_pool" = "yes" ; then
  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
else
  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
fi
4644

4645 4646 4647 4648
if test "$open_by_handle_at" = "yes" ; then
  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
fi

4649 4650
if test "$linux_magic_h" = "yes" ; then
  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
4651 4652
fi

4653 4654
if test "$pragma_diagnostic_available" = "yes" ; then
  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
4655 4656
fi

4657 4658 4659 4660
if test "$valgrind_h" = "yes" ; then
  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
fi

4661 4662
if test "$has_environ" = "yes" ; then
  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
4663 4664
fi

4665 4666 4667 4668
if test "$cpuid_h" = "yes" ; then
  echo "CONFIG_CPUID_H=y" >> $config_host_mak
fi

4669 4670 4671 4672
if test "$int128" = "yes" ; then
  echo "CONFIG_INT128=y" >> $config_host_mak
fi

4673 4674 4675 4676
if test "$getauxval" = "yes" ; then
  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
fi

4677
if test "$glusterfs" = "yes" ; then
4678
  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
4679 4680
  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
4681 4682 4683 4684
fi

if test "$glusterfs_discard" = "yes" ; then
  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
4685
fi
4686

4687 4688 4689 4690
if test "$glusterfs_zerofill" = "yes" ; then
  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
fi

4691
if test "$libssh2" = "yes" ; then
4692
  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
4693 4694
  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
4695 4696
fi

B
Benoît Canet 已提交
4697 4698 4699 4700
if test "$quorum" = "yes" ; then
  echo "CONFIG_QUORUM=y" >> $config_host_mak
fi

4701
if test "$virtio_blk_data_plane" = "yes" ; then
4702
  echo 'CONFIG_VIRTIO_BLK_DATA_PLANE=$(CONFIG_VIRTIO)' >> $config_host_mak
4703 4704
fi

4705 4706 4707 4708
if test "$vhdx" = "yes" ; then
  echo "CONFIG_VHDX=y" >> $config_host_mak
fi

4709
# USB host support
G
Gerd Hoffmann 已提交
4710 4711 4712
if test "$libusb" = "yes"; then
  echo "HOST_USB=libusb legacy" >> $config_host_mak
else
4713
  echo "HOST_USB=stub" >> $config_host_mak
G
Gerd Hoffmann 已提交
4714
fi
4715

P
Paolo Bonzini 已提交
4716 4717 4718 4719 4720 4721 4722 4723
# TPM passthrough support?
if test "$tpm" = "yes"; then
  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
  if test "$tpm_passthrough" = "yes"; then
    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
  fi
fi

L
Lluís Vilanova 已提交
4724 4725
echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
if have_backend "nop"; then
4726
  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
4727
fi
L
Lluís Vilanova 已提交
4728
if have_backend "simple"; then
4729 4730
  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
  # Set the appropriate trace file.
4731
  trace_file="\"$trace_file-\" FMT_pid"
P
Prerna Saxena 已提交
4732
fi
L
Lluís Vilanova 已提交
4733
if have_backend "stderr"; then
4734 4735
  echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
fi
L
Lluís Vilanova 已提交
4736
if have_backend "ust"; then
4737 4738
  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
fi
L
Lluís Vilanova 已提交
4739
if have_backend "dtrace"; then
4740 4741 4742 4743
  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
  if test "$trace_backend_stap" = "yes" ; then
    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
  fi
4744
fi
L
Lluís Vilanova 已提交
4745
if have_backend "ftrace"; then
4746 4747 4748
  if test "$linux" = "yes" ; then
    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
  else
4749
    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
4750 4751
  fi
fi
P
Prerna Saxena 已提交
4752 4753
echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak

M
Michael R. Hines 已提交
4754 4755 4756 4757
if test "$rdma" = "yes" ; then
  echo "CONFIG_RDMA=y" >> $config_host_mak
fi

4758 4759 4760 4761 4762 4763 4764 4765 4766 4767
# Hold two types of flag:
#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
#                                     a thread we have a handle to
#   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
#                                     platform
if test "$pthread_setname_np" = "yes" ; then
  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
  echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
fi

4768 4769 4770 4771 4772 4773
if test "$tcg_interpreter" = "yes"; then
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
elif test "$ARCH" = "sparc64" ; then
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
elif test "$ARCH" = "s390x" ; then
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
4774
elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
4775
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
4776 4777
elif test "$ARCH" = "ppc64" ; then
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
4778 4779 4780 4781 4782
else
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
fi
QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"

4783 4784
echo "TOOLS=$tools" >> $config_host_mak
echo "ROMS=$roms" >> $config_host_mak
4785 4786
echo "MAKE=$make" >> $config_host_mak
echo "INSTALL=$install" >> $config_host_mak
4787 4788
echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
4789 4790 4791 4792 4793 4794 4795
if test -n "$libtool"; then
  echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
  echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
else
  echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
  echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
fi
B
Blue Swirl 已提交
4796
echo "PYTHON=$python" >> $config_host_mak
4797
echo "CC=$cc" >> $config_host_mak
4798 4799 4800
if $iasl -h > /dev/null 2>&1; then
  echo "IASL=$iasl" >> $config_host_mak
fi
P
Paolo Bonzini 已提交
4801
echo "CC_I386=$cc_i386" >> $config_host_mak
4802
echo "HOST_CC=$host_cc" >> $config_host_mak
4803
echo "CXX=$cxx" >> $config_host_mak
4804
echo "OBJCC=$objcc" >> $config_host_mak
4805
echo "AR=$ar" >> $config_host_mak
4806
echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
4807 4808
echo "AS=$as" >> $config_host_mak
echo "CPP=$cpp" >> $config_host_mak
4809 4810
echo "OBJCOPY=$objcopy" >> $config_host_mak
echo "LD=$ld" >> $config_host_mak
4811
echo "WINDRES=$windres" >> $config_host_mak
A
Alon Levy 已提交
4812
echo "LIBTOOL=$libtool" >> $config_host_mak
4813
echo "CFLAGS=$CFLAGS" >> $config_host_mak
B
Brad 已提交
4814
echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
J
Juan Quintela 已提交
4815
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
4816
echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
P
Paolo Bonzini 已提交
4817 4818 4819 4820 4821
if test "$sparse" = "yes" ; then
  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
fi
4822 4823 4824 4825 4826
if test "$cross_prefix" != ""; then
  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
else
  echo "AUTOCONF_HOST := "                             >> $config_host_mak
fi
4827
echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
B
Brad 已提交
4828
echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
4829
echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
J
Juan Quintela 已提交
4830
echo "LIBS+=$LIBS" >> $config_host_mak
J
Juan Quintela 已提交
4831
echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
4832
echo "EXESUF=$EXESUF" >> $config_host_mak
F
Fam Zheng 已提交
4833 4834
echo "DSOSUF=$DSOSUF" >> $config_host_mak
echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
4835
echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
4836
echo "POD2MAN=$POD2MAN" >> $config_host_mak
4837
echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
B
Blue Swirl 已提交
4838 4839 4840 4841
if test "$gcov" = "yes" ; then
  echo "CONFIG_GCOV=y" >> $config_host_mak
  echo "GCOV=$gcov_tool" >> $config_host_mak
fi
4842

4843 4844
# use included Linux headers
if test "$linux" = "yes" ; then
4845
  mkdir -p linux-headers
4846
  case "$cpu" in
4847
  i386|x86_64|x32)
4848
    linux_arch=x86
4849 4850
    ;;
  ppcemb|ppc|ppc64)
4851
    linux_arch=powerpc
4852 4853
    ;;
  s390x)
4854 4855
    linux_arch=s390
    ;;
4856 4857 4858
  aarch64)
    linux_arch=arm64
    ;;
4859 4860 4861
  mips64)
    linux_arch=mips
    ;;
4862 4863 4864
  *)
    # For most CPUs the kernel architecture name and QEMU CPU name match.
    linux_arch="$cpu"
4865 4866
    ;;
  esac
4867 4868 4869 4870
    # For non-KVM architectures we will not have asm headers
    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
    fi
4871 4872
fi

4873
for target in $target_list; do
4874
target_dir="$target"
4875
config_target_mak=$target_dir/config-target.mak
4876
target_name=`echo $target | cut -d '-' -f 1`
4877
target_bigendian="no"
4878

4879
case "$target_name" in
A
Anthony Green 已提交
4880
  armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
4881 4882 4883
  target_bigendian=yes
  ;;
esac
4884
target_softmmu="no"
B
bellard 已提交
4885
target_user_only="no"
4886
target_linux_user="no"
B
blueswir1 已提交
4887
target_bsd_user="no"
P
pbrook 已提交
4888
case "$target" in
4889
  ${target_name}-softmmu)
P
pbrook 已提交
4890 4891
    target_softmmu="yes"
    ;;
4892
  ${target_name}-linux-user)
4893
    if test "$linux" != "yes" ; then
4894
      error_exit "Target '$target' is only available on a Linux host"
4895
    fi
P
pbrook 已提交
4896 4897 4898
    target_user_only="yes"
    target_linux_user="yes"
    ;;
4899
  ${target_name}-bsd-user)
B
Blue Swirl 已提交
4900
    if test "$bsd" != "yes" ; then
4901
      error_exit "Target '$target' is only available on a BSD host"
4902
    fi
B
blueswir1 已提交
4903 4904 4905
    target_user_only="yes"
    target_bsd_user="yes"
    ;;
P
pbrook 已提交
4906
  *)
4907
    error_exit "Target '$target' not recognised"
P
pbrook 已提交
4908 4909 4910
    exit 1
    ;;
esac
4911

4912
mkdir -p $target_dir
4913
echo "# Automatically generated by configure - do not modify" > $config_target_mak
B
bellard 已提交
4914

P
pbrook 已提交
4915
bflt="no"
4916
interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
P
pbrook 已提交
4917
gdb_xml_files=""
A
aliguori 已提交
4918

4919
TARGET_ARCH="$target_name"
4920
TARGET_BASE_ARCH=""
4921
TARGET_ABI_DIR=""
4922

4923
case "$target_name" in
A
aurel32 已提交
4924 4925 4926
  i386)
  ;;
  x86_64)
4927
    TARGET_BASE_ARCH=i386
A
aurel32 已提交
4928 4929 4930 4931
  ;;
  alpha)
  ;;
  arm|armeb)
J
Juan Quintela 已提交
4932
    TARGET_ARCH=arm
A
aurel32 已提交
4933
    bflt="yes"
P
pbrook 已提交
4934
    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
A
aurel32 已提交
4935
  ;;
4936 4937 4938
  aarch64)
    TARGET_BASE_ARCH=arm
    bflt="yes"
4939
    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml"
4940
  ;;
A
aurel32 已提交
4941 4942
  cris)
  ;;
M
Michael Walle 已提交
4943 4944
  lm32)
  ;;
A
aurel32 已提交
4945 4946
  m68k)
    bflt="yes"
P
pbrook 已提交
4947
    gdb_xml_files="cf-core.xml cf-fp.xml"
A
aurel32 已提交
4948
  ;;
4949 4950
  microblaze|microblazeel)
    TARGET_ARCH=microblaze
4951 4952
    bflt="yes"
  ;;
J
Juan Quintela 已提交
4953
  mips|mipsel)
J
Juan Quintela 已提交
4954
    TARGET_ARCH=mips
4955
    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
A
aurel32 已提交
4956 4957
  ;;
  mipsn32|mipsn32el)
4958
    TARGET_ARCH=mips64
4959
    TARGET_BASE_ARCH=mips
4960
    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
4961
    echo "TARGET_ABI32=y" >> $config_target_mak
A
aurel32 已提交
4962 4963
  ;;
  mips64|mips64el)
J
Juan Quintela 已提交
4964
    TARGET_ARCH=mips64
4965
    TARGET_BASE_ARCH=mips
4966
    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
A
aurel32 已提交
4967
  ;;
A
Anthony Green 已提交
4968 4969
  moxie)
  ;;
4970 4971 4972 4973
  or32)
    TARGET_ARCH=openrisc
    TARGET_BASE_ARCH=openrisc
  ;;
A
aurel32 已提交
4974
  ppc)
4975
    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
A
aurel32 已提交
4976 4977
  ;;
  ppcemb)
4978
    TARGET_BASE_ARCH=ppc
4979
    TARGET_ABI_DIR=ppc
4980
    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
A
aurel32 已提交
4981 4982
  ;;
  ppc64)
4983
    TARGET_BASE_ARCH=ppc
4984
    TARGET_ABI_DIR=ppc
4985
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
A
aurel32 已提交
4986
  ;;
4987 4988 4989 4990 4991 4992
  ppc64le)
    TARGET_ARCH=ppc64
    TARGET_BASE_ARCH=ppc
    TARGET_ABI_DIR=ppc
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
  ;;
A
aurel32 已提交
4993
  ppc64abi32)
J
Juan Quintela 已提交
4994
    TARGET_ARCH=ppc64
4995
    TARGET_BASE_ARCH=ppc
4996
    TARGET_ABI_DIR=ppc
4997
    echo "TARGET_ABI32=y" >> $config_target_mak
4998
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
A
aurel32 已提交
4999 5000
  ;;
  sh4|sh4eb)
J
Juan Quintela 已提交
5001
    TARGET_ARCH=sh4
A
aurel32 已提交
5002 5003 5004 5005 5006
    bflt="yes"
  ;;
  sparc)
  ;;
  sparc64)
5007
    TARGET_BASE_ARCH=sparc
A
aurel32 已提交
5008 5009
  ;;
  sparc32plus)
J
Juan Quintela 已提交
5010
    TARGET_ARCH=sparc64
5011
    TARGET_BASE_ARCH=sparc
5012
    TARGET_ABI_DIR=sparc
5013
    echo "TARGET_ABI32=y" >> $config_target_mak
A
aurel32 已提交
5014
  ;;
5015 5016
  s390x)
  ;;
5017 5018
  unicore32)
  ;;
5019 5020 5021
  xtensa|xtensaeb)
    TARGET_ARCH=xtensa
  ;;
A
aurel32 已提交
5022
  *)
5023
    error_exit "Unsupported target CPU"
A
aurel32 已提交
5024 5025
  ;;
esac
5026 5027 5028 5029 5030 5031 5032
# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
if [ "$TARGET_BASE_ARCH" = "" ]; then
  TARGET_BASE_ARCH=$TARGET_ARCH
fi

symlink "$source_path/Makefile.target" "$target_dir/Makefile"

5033 5034 5035 5036 5037
upper() {
    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
}

target_arch_name="`upper $TARGET_ARCH`"
5038
echo "TARGET_$target_arch_name=y" >> $config_target_mak
5039
echo "TARGET_NAME=$target_name" >> $config_target_mak
5040
echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5041 5042 5043
if [ "$TARGET_ABI_DIR" = "" ]; then
  TARGET_ABI_DIR=$TARGET_ARCH
fi
5044
echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5045 5046 5047
if [ "$HOST_VARIANT_DIR" != "" ]; then
    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
fi
5048
case "$target_name" in
J
Juan Quintela 已提交
5049 5050
  i386|x86_64)
    if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5051
      echo "CONFIG_XEN=y" >> $config_target_mak
5052 5053 5054
      if test "$xen_pci_passthrough" = yes; then
        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
      fi
J
Juan Quintela 已提交
5055
    fi
5056 5057
    ;;
  *)
J
Juan Quintela 已提交
5058
esac
5059
case "$target_name" in
5060
  aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
J
Juan Quintela 已提交
5061 5062
    # Make sure the target and host cpus are compatible
    if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5063 5064 5065 5066 5067
      \( "$target_name" = "$cpu" -o \
      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
      \( "$target_name" = "ppc64"  -a "$cpu" = "ppc" \) -o \
      \( "$target_name" = "ppc"    -a "$cpu" = "ppc64" \) -o \
      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5068
      \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5069 5070
      \( "$target_name" = "x86_64" -a "$cpu" = "i386"   \) -o \
      \( "$target_name" = "i386"   -a "$cpu" = "x86_64" \) \) ; then
5071
      echo "CONFIG_KVM=y" >> $config_target_mak
5072
      if test "$vhost_net" = "yes" ; then
M
Michael S. Tsirkin 已提交
5073 5074
        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
      fi
J
Juan Quintela 已提交
5075 5076
    fi
esac
B
bellard 已提交
5077
if test "$target_bigendian" = "yes" ; then
5078
  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
B
bellard 已提交
5079
fi
5080
if test "$target_softmmu" = "yes" ; then
5081
  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
B
bellard 已提交
5082
fi
B
bellard 已提交
5083
if test "$target_user_only" = "yes" ; then
5084
  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5085
  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
B
bellard 已提交
5086
fi
5087
if test "$target_linux_user" = "yes" ; then
5088
  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5089
fi
P
pbrook 已提交
5090 5091 5092 5093 5094
list=""
if test ! -z "$gdb_xml_files" ; then
  for x in $gdb_xml_files; do
    list="$list $source_path/gdb-xml/$x"
  done
5095
  echo "TARGET_XML_FILES=$list" >> $config_target_mak
P
pbrook 已提交
5096
fi
5097

P
pbrook 已提交
5098
if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5099
  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
P
pbrook 已提交
5100
fi
P
Paul Brook 已提交
5101
if test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then
5102
  echo "CONFIG_USE_GUEST_BASE=y" >> $config_target_mak
P
Paul Brook 已提交
5103
fi
B
blueswir1 已提交
5104
if test "$target_bsd_user" = "yes" ; then
5105
  echo "CONFIG_BSD_USER=y" >> $config_target_mak
B
blueswir1 已提交
5106
fi
5107

5108
# generate QEMU_CFLAGS/LDFLAGS for targets
5109

5110
cflags=""
5111
ldflags=""
5112

5113 5114 5115
for i in $ARCH $TARGET_BASE_ARCH ; do
  case "$i" in
  alpha)
5116
    echo "CONFIG_ALPHA_DIS=y"  >> $config_target_mak
5117
    echo "CONFIG_ALPHA_DIS=y"  >> config-all-disas.mak
5118
  ;;
5119 5120 5121 5122 5123 5124
  aarch64)
    if test -n "${cxx}"; then
      echo "CONFIG_ARM_A64_DIS=y"  >> $config_target_mak
      echo "CONFIG_ARM_A64_DIS=y"  >> config-all-disas.mak
    fi
  ;;
5125
  arm)
5126
    echo "CONFIG_ARM_DIS=y"  >> $config_target_mak
5127
    echo "CONFIG_ARM_DIS=y"  >> config-all-disas.mak
5128 5129 5130 5131
    if test -n "${cxx}"; then
      echo "CONFIG_ARM_A64_DIS=y"  >> $config_target_mak
      echo "CONFIG_ARM_A64_DIS=y"  >> config-all-disas.mak
    fi
5132 5133
  ;;
  cris)
5134
    echo "CONFIG_CRIS_DIS=y"  >> $config_target_mak
5135
    echo "CONFIG_CRIS_DIS=y"  >> config-all-disas.mak
5136 5137
  ;;
  hppa)
5138
    echo "CONFIG_HPPA_DIS=y"  >> $config_target_mak
5139
    echo "CONFIG_HPPA_DIS=y"  >> config-all-disas.mak
5140
  ;;
5141
  i386|x86_64|x32)
5142
    echo "CONFIG_I386_DIS=y"  >> $config_target_mak
5143
    echo "CONFIG_I386_DIS=y"  >> config-all-disas.mak
5144
  ;;
A
Aurelien Jarno 已提交
5145 5146
  ia64*)
    echo "CONFIG_IA64_DIS=y"  >> $config_target_mak
5147
    echo "CONFIG_IA64_DIS=y"  >> config-all-disas.mak
A
Aurelien Jarno 已提交
5148
  ;;
5149 5150
  lm32)
    echo "CONFIG_LM32_DIS=y"  >> $config_target_mak
5151
    echo "CONFIG_LM32_DIS=y"  >> config-all-disas.mak
5152
  ;;
5153
  m68k)
5154
    echo "CONFIG_M68K_DIS=y"  >> $config_target_mak
5155
    echo "CONFIG_M68K_DIS=y"  >> config-all-disas.mak
5156
  ;;
5157
  microblaze*)
5158
    echo "CONFIG_MICROBLAZE_DIS=y"  >> $config_target_mak
5159
    echo "CONFIG_MICROBLAZE_DIS=y"  >> config-all-disas.mak
5160 5161
  ;;
  mips*)
5162
    echo "CONFIG_MIPS_DIS=y"  >> $config_target_mak
5163
    echo "CONFIG_MIPS_DIS=y"  >> config-all-disas.mak
5164
  ;;
A
Anthony Green 已提交
5165 5166 5167 5168
  moxie*)
    echo "CONFIG_MOXIE_DIS=y"  >> $config_target_mak
    echo "CONFIG_MOXIE_DIS=y"  >> config-all-disas.mak
  ;;
5169 5170
  or32)
    echo "CONFIG_OPENRISC_DIS=y"  >> $config_target_mak
5171
    echo "CONFIG_OPENRISC_DIS=y"  >> config-all-disas.mak
5172
  ;;
5173
  ppc*)
5174
    echo "CONFIG_PPC_DIS=y"  >> $config_target_mak
5175
    echo "CONFIG_PPC_DIS=y"  >> config-all-disas.mak
5176
  ;;
5177
  s390*)
5178
    echo "CONFIG_S390_DIS=y"  >> $config_target_mak
5179
    echo "CONFIG_S390_DIS=y"  >> config-all-disas.mak
5180 5181
  ;;
  sh4)
5182
    echo "CONFIG_SH4_DIS=y"  >> $config_target_mak
5183
    echo "CONFIG_SH4_DIS=y"  >> config-all-disas.mak
5184 5185
  ;;
  sparc*)
5186
    echo "CONFIG_SPARC_DIS=y"  >> $config_target_mak
5187
    echo "CONFIG_SPARC_DIS=y"  >> config-all-disas.mak
5188
  ;;
5189 5190
  xtensa*)
    echo "CONFIG_XTENSA_DIS=y"  >> $config_target_mak
5191
    echo "CONFIG_XTENSA_DIS=y"  >> config-all-disas.mak
5192
  ;;
5193 5194
  esac
done
5195 5196
if test "$tcg_interpreter" = "yes" ; then
  echo "CONFIG_TCI_DIS=y"  >> $config_target_mak
5197
  echo "CONFIG_TCI_DIS=y"  >> config-all-disas.mak
5198
fi
5199

5200 5201 5202 5203 5204 5205 5206
case "$ARCH" in
alpha)
  # Ensure there's only a single GP
  cflags="-msmall-data $cflags"
;;
esac

5207
if test "$gprof" = "yes" ; then
5208
  echo "TARGET_GPROF=yes" >> $config_target_mak
5209 5210 5211 5212 5213 5214
  if test "$target_linux_user" = "yes" ; then
    cflags="-p $cflags"
    ldflags="-p $ldflags"
  fi
  if test "$target_softmmu" = "yes" ; then
    ldflags="-p $ldflags"
5215
    echo "GPROF_CFLAGS=-p" >> $config_target_mak
5216 5217 5218
  fi
fi

5219
if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5220
  ldflags="$ldflags $textseg_ldflags"
5221 5222
fi

5223 5224
echo "LDFLAGS+=$ldflags" >> $config_target_mak
echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5225

5226
done # for target in $targets
B
bellard 已提交
5227

5228 5229 5230 5231
if [ "$pixman" = "internal" ]; then
  echo "config-host.h: subdir-pixman" >> $config_host_mak
fi

M
Michael R. Hines 已提交
5232 5233 5234 5235
if test "$rdma" = "yes" ; then
echo "CONFIG_RDMA=y" >> $config_host_mak
fi

5236 5237 5238 5239
if [ "$dtc_internal" = "yes" ]; then
  echo "config-host.h: subdir-dtc" >> $config_host_mak
fi

5240 5241 5242 5243
if test "$numa" = "yes"; then
  echo "CONFIG_NUMA=y" >> $config_host_mak
fi

P
Paolo Bonzini 已提交
5244
# build tree in object directory in case the source is not in the current directory
5245
DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5246
DIRS="$DIRS fsdev"
5247
DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
P
Paolo Bonzini 已提交
5248
DIRS="$DIRS roms/seabios roms/vgabios"
5249
DIRS="$DIRS qapi-generated"
A
Anthony Liguori 已提交
5250 5251
FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5252
FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
P
Paolo Bonzini 已提交
5253
FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
A
Andreas Färber 已提交
5254
FILES="$FILES pc-bios/spapr-rtas/Makefile"
5255
FILES="$FILES pc-bios/s390-ccw/Makefile"
P
Paolo Bonzini 已提交
5256
FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5257
FILES="$FILES pc-bios/qemu-icon.bmp"
5258 5259
for bios_file in \
    $source_path/pc-bios/*.bin \
5260
    $source_path/pc-bios/*.aml \
5261 5262
    $source_path/pc-bios/*.rom \
    $source_path/pc-bios/*.dtb \
5263
    $source_path/pc-bios/*.img \
5264
    $source_path/pc-bios/openbios-* \
5265
    $source_path/pc-bios/u-boot.* \
5266 5267
    $source_path/pc-bios/palcode-*
do
P
Paolo Bonzini 已提交
5268 5269
    FILES="$FILES pc-bios/`basename $bios_file`"
done
5270 5271 5272 5273
for test_file in `find $source_path/tests/acpi-test-data -type f`
do
    FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
done
P
Paolo Bonzini 已提交
5274 5275
mkdir -p $DIRS
for f in $FILES ; do
5276
    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5277 5278
        symlink "$source_path/$f" "$f"
    fi
P
Paolo Bonzini 已提交
5279
done
P
Paul Brook 已提交
5280

5281
# temporary config to build submodules
5282
for rom in seabios vgabios ; do
5283
    config_mak=roms/$rom/config.mak
5284
    echo "# Automatically generated by configure - do not modify" > $config_mak
5285
    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5286
    echo "AS=$as" >> $config_mak
5287 5288
    echo "CC=$cc" >> $config_mak
    echo "BCC=bcc" >> $config_mak
5289
    echo "CPP=$cpp" >> $config_mak
5290
    echo "OBJCOPY=objcopy" >> $config_mak
5291
    echo "IASL=$iasl" >> $config_mak
5292 5293 5294
    echo "LD=$ld" >> $config_mak
done

5295 5296 5297
if test "$docs" = "yes" ; then
  mkdir -p QMP
fi
5298

5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310
# set up qemu-iotests in this build directory
iotests_common_env="tests/qemu-iotests/common.env"
iotests_check="tests/qemu-iotests/check"

echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
echo >> "$iotests_common_env"
echo "export PYTHON='$python'" >> "$iotests_common_env"

if [ ! -e "$iotests_check" ]; then
    symlink "$source_path/$iotests_check" "$iotests_check"
fi

5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323
# Save the configure command line for later reuse.
cat <<EOD >config.status
#!/bin/sh
# Generated by configure.
# Run this file to recreate the current configuration.
# Compiler output produced by configure, useful for debugging
# configure, is in config.log if it exists.
EOD
printf "exec" >>config.status
printf " '%s'" "$0" "$@" >>config.status
echo >>config.status
chmod +x config.status

5324
rm -r "$TMPDIR1"