configure 175.5 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
# Don't allow CCACHE, if present, to use cached results of compile tests!
export CCACHE_RECACHE=yes

14 15 16 17 18 19 20 21 22 23 24
# 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 已提交
25 26
fi

27 28
TMPB="qemu-conf"
TMPC="${TMPDIR1}/${TMPB}.c"
29
TMPO="${TMPDIR1}/${TMPB}.o"
30
TMPCXX="${TMPDIR1}/${TMPB}.cxx"
31
TMPE="${TMPDIR1}/${TMPB}.exe"
32
TMPMO="${TMPDIR1}/${TMPB}.mo"
B
bellard 已提交
33

G
Gerd Hoffmann 已提交
34
rm -f config.log
35

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

43 44
print_error() {
    (echo
45 46 47 48 49
    echo "ERROR: $1"
    while test -n "$2"; do
        echo "       $2"
        shift
    done
50 51 52 53 54
    echo) >&2
}

error_exit() {
    print_error "$@"
55 56 57
    exit 1
}

58 59 60 61 62 63 64
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 $?
65 66 67 68 69 70 71 72 73 74 75 76 77
    # 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
78 79
    echo $compiler -Werror "$@" >> config.log
    $compiler -Werror "$@" >> config.log 2>&1 && return $?
80 81 82 83
    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."
84 85
}

86 87 88 89 90 91 92 93 94 95 96 97
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.
98 99
    QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"

100 101 102 103 104 105 106 107 108 109 110 111
    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
}

112
compile_object() {
113 114
  local_cflags="$1"
  do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
115 116 117 118 119
}

compile_prog() {
  local_cflags="$1"
  local_ldflags="$2"
120
  do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
121 122
}

123 124
# symbolically link $1 to $2.  Portable version of "ln -sf".
symlink() {
125
  rm -rf "$2"
126
  mkdir -p "$(dirname "$2")"
127
  ln -s "$1" "$2"
128 129
}

130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
# 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 已提交
166 167 168 169
have_backend () {
    echo "$trace_backends" | grep "$1" >/dev/null
}

170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
glob() {
    eval test -z '"${1#'"$2"'}"'
}

supported_hax_target() {
    test "$hax" = "yes" || return 1
    glob "$1" "*-softmmu" || return 1
    case "${1%-softmmu}" in
        i386|x86_64)
            return 0
        ;;
    esac
    return 1
}

supported_kvm_target() {
    test "$kvm" = "yes" || return 1
    glob "$1" "*-softmmu" || return 1
    case "${1%-softmmu}:$cpu" in
        arm:arm | aarch64:aarch64 | \
        i386:i386 | i386:x86_64 | i386:x32 | \
        x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
        mips:mips | mipsel:mips | \
        ppc:ppc | ppcemb:ppc | ppc64:ppc | \
        ppc:ppc64 | ppcemb:ppc64 | ppc64:ppc64 | \
        s390x:s390x)
            return 0
        ;;
    esac
    return 1
}

supported_xen_target() {
    test "$xen" = "yes" || return 1
    glob "$1" "*-softmmu" || return 1
P
Paolo Bonzini 已提交
205 206 207
    # Only i386 and x86_64 provide the xenpv machine.
    case "${1%-softmmu}" in
        i386|x86_64)
208 209 210 211 212 213
            return 0
        ;;
    esac
    return 1
}

214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
supported_target() {
    case "$1" in
        *-softmmu)
            ;;
        *-linux-user)
            if test "$linux" != "yes"; then
                print_error "Target '$target' is only available on a Linux host"
                return 1
            fi
            ;;
        *-bsd-user)
            if test "$bsd" != "yes"; then
                print_error "Target '$target' is only available on a BSD host"
                return 1
            fi
            ;;
        *)
            print_error "Invalid target name '$target'"
            return 1
            ;;
    esac
235 236 237 238 239 240
    test "$tcg" = "yes" && return 0
    supported_kvm_target "$1" && return 0
    supported_xen_target "$1" && return 0
    supported_hax_target "$1" && return 0
    print_error "TCG disabled, but hardware accelerator not available for '$target'"
    return 1
241 242
}

243 244 245 246 247

ld_has() {
    $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
}

B
bellard 已提交
248
# default parameters
249
source_path=$(dirname "$0")
250
cpu=""
251
iasl="iasl"
252
interp_prefix="/usr/gnemul/qemu-%M"
B
bellard 已提交
253
static="no"
B
bellard 已提交
254
cross_prefix=""
M
malc 已提交
255
audio_drv_list=""
256 257
block_drv_rw_whitelist=""
block_drv_ro_whitelist=""
258
host_cc="cc"
J
Juan Quintela 已提交
259
libs_softmmu=""
J
Juan Quintela 已提交
260
libs_tools=""
261
audio_pt_int=""
262
audio_win_int=""
P
Paolo Bonzini 已提交
263
cc_i386=i386-pc-linux-gnu-gcc
264
libs_qga=""
265
debug_info="yes"
266
stack_protector=""
267

268 269
if test -e "$source_path/.git"
then
270
    git_update=yes
271 272
    git_submodules="ui/keycodemapdb"
else
273
    git_update=no
274 275
    git_submodules=""
fi
276
git="git"
277

278 279
# Don't accept a target_list environment variable.
unset target_list
280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298

# 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=""
299
netmap="no"
300
sdl=""
301
sdlabi=""
302
virtfs=""
303
mpath=""
J
Jes Sorensen 已提交
304
vnc="yes"
305 306 307 308 309
sparse="no"
vde=""
vnc_sasl=""
vnc_jpeg=""
vnc_png=""
G
Gerd Hoffmann 已提交
310
xkbcommon=""
311
xen=""
312
xen_ctrl_version=""
313
xen_pv_domain_build="no"
314
xen_pci_passthrough=""
315
linux_aio=""
316
cap_ng=""
317
attr=""
318
libattr=""
319
xfs=""
320
tcg="yes"
321

322
vhost_net="no"
323
vhost_scsi="no"
324
vhost_vsock="no"
325
vhost_user=""
326
kvm="no"
327
hax="no"
M
Michael R. Hines 已提交
328
rdma=""
329 330 331
gprof="no"
debug_tcg="no"
debug="no"
332
fortify_source=""
333
strip_opt="yes"
334
tcg_interpreter="no"
335 336
bigendian="no"
mingw32="no"
B
Blue Swirl 已提交
337 338
gcov="no"
gcov_tool="gcov"
339
EXESUF=""
F
Fam Zheng 已提交
340 341 342
DSOSUF=".so"
LDFLAGS_SHARED="-shared"
modules="no"
343 344
prefix="/usr/local"
mandir="\${prefix}/share/man"
345
datadir="\${prefix}/share"
G
Gerd Hoffmann 已提交
346
firmwarepath="\${prefix}/share/qemu-firmware"
347
qemu_docdir="\${prefix}/share/doc/qemu"
348
bindir="\${prefix}/bin"
A
Alon Levy 已提交
349
libdir="\${prefix}/lib"
350
libexecdir="\${prefix}/libexec"
351
includedir="\${prefix}/include"
352
sysconfdir="\${prefix}/etc"
L
Luiz Capitulino 已提交
353
local_statedir="\${prefix}/var"
354 355 356 357 358 359 360 361 362 363 364 365 366
confsuffix="/qemu"
slirp="yes"
oss_lib=""
bsd="no"
linux="no"
solaris="no"
profiler="no"
cocoa="no"
softmmu="yes"
linux_user="no"
bsd_user="no"
blobs="yes"
pkgversion=""
367
pie=""
368
qom_cast_debug="yes"
369
trace_backends="log"
370 371 372
trace_file="trace"
spice=""
rbd=""
373
smartcard=""
G
Gerd Hoffmann 已提交
374
libusb=""
375
usb_redir=""
G
Gerd Hoffmann 已提交
376
opengl=""
377
opengl_dmabuf="no"
378
cpuid_h="no"
379
avx2_opt="no"
A
Alon Levy 已提交
380
zlib="yes"
381
capstone=""
382 383
lzo=""
snappy=""
384
bzip2=""
385
guest_agent=""
386
guest_agent_with_vss="no"
387
guest_agent_ntddscsi="no"
388
guest_agent_msi=""
389 390
vss_win32_sdk=""
win_sdk="no"
391
want_tools="yes"
R
Ronnie Sahlberg 已提交
392
libiscsi=""
P
Peter Lieven 已提交
393
libnfs=""
394
coroutine=""
395
coroutine_pool=""
396
debug_stack_usage="no"
397
crypto_afalg="no"
398
seccomp=""
399
glusterfs=""
400
glusterfs_xlator_opt="no"
401
glusterfs_discard="no"
402
glusterfs_fallocate="no"
403
glusterfs_zerofill="no"
A
Anthony Liguori 已提交
404
gtk=""
405
gtkabi=""
406
gtk_gl="no"
407
tls_priority="NORMAL"
408
gnutls=""
409
gnutls_rnd=""
410
nettle=""
411
nettle_kdf="no"
412
gcrypt=""
413
gcrypt_hmac="no"
414
gcrypt_kdf="no"
S
Stefan Weil 已提交
415
vte=""
416
virglrenderer=""
417
tpm="yes"
418
libssh2=""
419
live_block_migration="yes"
420
numa=""
F
Fam Zheng 已提交
421
tcmalloc="no"
422
jemalloc="no"
C
Changlong Xie 已提交
423
replication="yes"
424
vxhs=""
425

426 427
supported_cpu="no"
supported_os="no"
428
bogus_os="no"
429
malloc_trim=""
430

431 432
# parse CC options first
for opt do
433
  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
434 435 436
  case "$opt" in
  --cross-prefix=*) cross_prefix="$optarg"
  ;;
437
  --cc=*) CC="$optarg"
438
  ;;
439 440
  --cxx=*) CXX="$optarg"
  ;;
P
Paolo Bonzini 已提交
441 442
  --source-path=*) source_path="$optarg"
  ;;
443 444
  --cpu=*) cpu="$optarg"
  ;;
445
  --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
446
                    EXTRA_CFLAGS="$optarg"
447
  ;;
448 449 450
  --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
                      EXTRA_CXXFLAGS="$optarg"
  ;;
451
  --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
452
                     EXTRA_LDFLAGS="$optarg"
453
  ;;
454 455 456 457
  --enable-debug-info) debug_info="yes"
  ;;
  --disable-debug-info) debug_info="no"
  ;;
458 459 460 461
  esac
done
# OS specific
# Using uname is really, really broken.  Once we have the right set of checks
462
# we can eliminate its usage altogether.
463

464 465 466 467 468 469 470 471 472 473
# 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

474 475 476 477 478 479
if test -z "${CXX}${cross_prefix}"; then
  cxx="c++"
else
  cxx="${CXX-${cross_prefix}g++}"
fi

480
ar="${AR-${cross_prefix}ar}"
481
as="${AS-${cross_prefix}as}"
482
ccas="${CCAS-$cc}"
483
cpp="${CPP-$cc -E}"
484 485
objcopy="${OBJCOPY-${cross_prefix}objcopy}"
ld="${LD-${cross_prefix}ld}"
486
ranlib="${RANLIB-${cross_prefix}ranlib}"
S
Stefan Weil 已提交
487
nm="${NM-${cross_prefix}nm}"
488 489
strip="${STRIP-${cross_prefix}strip}"
windres="${WINDRES-${cross_prefix}windres}"
490 491 492 493 494
pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
query_pkg_config() {
    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
}
pkg_config=query_pkg_config
495
sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
496
sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
497

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

501
# default flags for all hosts
502 503 504 505 506
# We use -fwrapv to tell the compiler that we require a C dialect where
# left shift of signed integers is well defined and has the expected
# 2s-complement style results. (Both clang and gcc agree that it
# provides these semantics.)
QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
507
QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
K
Kevin Wolf 已提交
508
QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
509
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
510
QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/accel/tcg -I\$(SRC_PATH)/include"
511 512 513 514
if test "$debug_info" = "yes"; then
    CFLAGS="-g $CFLAGS"
    LDFLAGS="-g $LDFLAGS"
fi
515

P
Paolo Bonzini 已提交
516
# make source path absolute
517
source_path=$(cd "$source_path"; pwd)
P
Paolo Bonzini 已提交
518

519 520 521 522 523 524 525 526
# 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

527 528 529
check_define() {
cat > $TMPC <<EOF
#if !defined($1)
530
#error $1 not defined
531 532 533
#endif
int main(void) { return 0; }
EOF
534
  compile_object
535 536
}

537 538 539 540 541 542 543 544
check_include() {
cat > $TMPC <<EOF
#include <$1>
int main(void) { return 0; }
EOF
  compile_object
}

545 546 547 548 549 550
write_c_skeleton() {
    cat > $TMPC <<EOF
int main(void) { return 0; }
EOF
}

551 552 553 554 555 556 557 558 559 560
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'
561 562 563 564 565 566 567 568 569 570
elif check_define __FreeBSD__ ; then
  targetos='FreeBSD'
elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
  targetos='GNU/kFreeBSD'
elif check_define __DragonFly__ ; then
  targetos='DragonFly'
elif check_define __NetBSD__; then
  targetos='NetBSD'
elif check_define __APPLE__; then
  targetos='Darwin'
571
else
572 573 574 575 576
  # This is a fatal error, but don't report it yet, because we
  # might be going to just print the --help text, or it might
  # be the result of a missing compiler.
  targetos='bogus'
  bogus_os='yes'
577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593
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)
594
  # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
595 596 597 598 599
  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
    cpu="x86_64"
  fi
esac

600 601 602 603
if test ! -z "$cpu" ; then
  # command line argument
  :
elif check_define __i386__ ; then
604 605
  cpu="i386"
elif check_define __x86_64__ ; then
606 607 608 609 610
  if check_define __ILP32__ ; then
    cpu="x32"
  else
    cpu="x86_64"
  fi
B
blueswir1 已提交
611 612 613 614 615 616
elif check_define __sparc__ ; then
  if check_define __arch64__ ; then
    cpu="sparc64"
  else
    cpu="sparc"
  fi
M
malc 已提交
617 618 619 620 621 622
elif check_define _ARCH_PPC ; then
  if check_define _ARCH_PPC64 ; then
    cpu="ppc64"
  else
    cpu="ppc"
  fi
A
Aurelien Jarno 已提交
623 624
elif check_define __mips__ ; then
  cpu="mips"
A
Aurelien Jarno 已提交
625 626
elif check_define __ia64__ ; then
  cpu="ia64"
627 628 629 630 631 632
elif check_define __s390__ ; then
  if check_define __s390x__ ; then
    cpu="s390x"
  else
    cpu="s390"
  fi
633 634
elif check_define __arm__ ; then
  cpu="arm"
635 636
elif check_define __aarch64__ ; then
  cpu="aarch64"
637
else
638
  cpu=$(uname -m)
639 640
fi

641 642 643
ARCH=
# Normalise host CPU name and set ARCH.
# Note that this case should only have supported host CPUs, not guests.
B
bellard 已提交
644
case "$cpu" in
645
  ppc|ppc64|s390|s390x|sparc64|x32)
646 647 648
    cpu="$cpu"
    supported_cpu="yes"
  ;;
B
bellard 已提交
649
  i386|i486|i586|i686|i86pc|BePC)
650
    cpu="i386"
651
    supported_cpu="yes"
B
bellard 已提交
652
  ;;
A
aurel32 已提交
653 654
  x86_64|amd64)
    cpu="x86_64"
655
    supported_cpu="yes"
A
aurel32 已提交
656
  ;;
657 658
  armv*b|armv*l|arm)
    cpu="arm"
659
    supported_cpu="yes"
B
bellard 已提交
660
  ;;
661 662
  aarch64)
    cpu="aarch64"
663
    supported_cpu="yes"
664
  ;;
A
Aurelien Jarno 已提交
665 666
  mips*)
    cpu="mips"
667
    supported_cpu="yes"
A
Aurelien Jarno 已提交
668
  ;;
669
  sparc|sun4[cdmuv])
B
bellard 已提交
670
    cpu="sparc"
671
    supported_cpu="yes"
B
bellard 已提交
672
  ;;
B
bellard 已提交
673
  *)
674 675
    # This will result in either an error or falling back to TCI later
    ARCH=unknown
B
bellard 已提交
676 677
  ;;
esac
678 679 680
if test -z "$ARCH"; then
  ARCH="$cpu"
fi
J
Juan Quintela 已提交
681

B
bellard 已提交
682
# OS specific
683

684 685 686
# host *BSD for user mode
HOST_VARIANT_DIR=""

B
bellard 已提交
687
case $targetos in
B
bellard 已提交
688
MINGW32*)
689
  mingw32="yes"
690
  hax="yes"
691
  audio_possible_drivers="dsound sdl"
692 693 694 695 696
  if check_include dsound.h; then
    audio_drv_list="dsound"
  else
    audio_drv_list=""
  fi
697
  supported_os="yes"
B
bellard 已提交
698
;;
T
ths 已提交
699
GNU/kFreeBSD)
A
Aurelien Jarno 已提交
700
  bsd="yes"
701
  audio_drv_list="oss"
K
Kővágó, Zoltán 已提交
702
  audio_possible_drivers="oss sdl pa"
T
ths 已提交
703
;;
B
bellard 已提交
704
FreeBSD)
705
  bsd="yes"
706
  make="${MAKE-gmake}"
707
  audio_drv_list="oss"
K
Kővágó, Zoltán 已提交
708
  audio_possible_drivers="oss sdl pa"
709 710
  # needed for kinfo_getvmmap(3) in libutil.h
  LIBS="-lutil $LIBS"
E
Ed Maste 已提交
711 712
  # needed for kinfo_getproc
  libs_qga="-lutil $libs_qga"
713
  netmap=""  # enable netmap autodetect
714
  HOST_VARIANT_DIR="freebsd"
715
  supported_os="yes"
B
bellard 已提交
716
;;
717
DragonFly)
718
  bsd="yes"
719
  make="${MAKE-gmake}"
720
  audio_drv_list="oss"
K
Kővágó, Zoltán 已提交
721
  audio_possible_drivers="oss sdl pa"
722
  HOST_VARIANT_DIR="dragonfly"
723
;;
B
bellard 已提交
724
NetBSD)
725
  bsd="yes"
726
  make="${MAKE-gmake}"
727
  audio_drv_list="oss"
K
Kővágó, Zoltán 已提交
728
  audio_possible_drivers="oss sdl"
729
  oss_lib="-lossaudio"
730
  HOST_VARIANT_DIR="netbsd"
731
  supported_os="yes"
B
bellard 已提交
732 733
;;
OpenBSD)
734
  bsd="yes"
735
  make="${MAKE-gmake}"
B
Brad Smith 已提交
736
  audio_drv_list="sdl"
K
Kővágó, Zoltán 已提交
737
  audio_possible_drivers="sdl"
738
  HOST_VARIANT_DIR="openbsd"
B
bellard 已提交
739
;;
740
Darwin)
741 742
  bsd="yes"
  darwin="yes"
743
  hax="yes"
F
Fam Zheng 已提交
744
  LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
745
  if [ "$cpu" = "x86_64" ] ; then
J
Juan Quintela 已提交
746
    QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
747
    LDFLAGS="-arch x86_64 $LDFLAGS"
748 749 750
  fi
  cocoa="yes"
  audio_drv_list="coreaudio"
K
Kővágó, Zoltán 已提交
751
  audio_possible_drivers="coreaudio sdl"
752
  LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
753
  libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
754 755 756
  # 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"
757
  HOST_VARIANT_DIR="darwin"
758
  supported_os="yes"
759
;;
B
bellard 已提交
760
SunOS)
761
  solaris="yes"
762 763
  make="${MAKE-gmake}"
  install="${INSTALL-ginstall}"
764
  smbd="${SMBD-/usr/sfw/sbin/smbd}"
765 766 767 768
  if test -f /usr/include/sys/soundcard.h ; then
    audio_drv_list="oss"
  fi
  audio_possible_drivers="oss sdl"
769 770 771 772
# 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 已提交
773
  QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
774 775 776
  solarisnetlibs="-lsocket -lnsl -lresolv"
  LIBS="$solarisnetlibs $LIBS"
  libs_qga="$solarisnetlibs $libs_qga"
T
ths 已提交
777
;;
778 779 780 781 782
Haiku)
  haiku="yes"
  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
  LIBS="-lposix_error_mapper -lnetwork $LIBS"
;;
783
Linux)
784
  audio_drv_list="oss"
K
Kővágó, Zoltán 已提交
785
  audio_possible_drivers="oss alsa sdl pa"
786 787
  linux="yes"
  linux_user="yes"
788 789
  kvm="yes"
  vhost_net="yes"
790
  vhost_scsi="yes"
791
  vhost_vsock="yes"
792
  QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
793 794
  supported_os="yes"
;;
B
bellard 已提交
795 796
esac

B
bellard 已提交
797
if [ "$bsd" = "yes" ] ; then
798
  if [ "$darwin" != "yes" ] ; then
799
    bsd_user="yes"
800
  fi
B
bellard 已提交
801 802
fi

803 804
: ${make=${MAKE-make}}
: ${install=${INSTALL-install}}
805
: ${python=${PYTHON-python}}
806
: ${smbd=${SMBD-/usr/sbin/smbd}}
807

808 809 810 811 812 813 814
# Default objcc to clang if available, otherwise use CC
if has clang; then
  objcc=clang
else
  objcc="$cc"
fi

815 816
if test "$mingw32" = "yes" ; then
  EXESUF=".exe"
F
Fam Zheng 已提交
817
  DSOSUF=".dll"
J
Juan Quintela 已提交
818
  QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
819 820
  # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
  QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
S
Stefan Weil 已提交
821 822
  # MinGW needs -mthreads for TLS and macro _MT.
  QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
823
  LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
824
  write_c_skeleton;
825 826 827
  if compile_prog "" "-liberty" ; then
    LIBS="-liberty $LIBS"
  fi
828
  prefix="c:/Program Files/QEMU"
829
  mandir="\${prefix}"
830
  datadir="\${prefix}"
831
  qemu_docdir="\${prefix}"
832 833
  bindir="\${prefix}"
  sysconfdir="\${prefix}"
834
  local_statedir=
835
  confsuffix=""
836
  libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
837 838
fi

839
werror=""
840

B
bellard 已提交
841
for opt do
842
  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
B
bellard 已提交
843
  case "$opt" in
844 845
  --help|-h) show_help=yes
  ;;
M
Mike Frysinger 已提交
846 847
  --version|-V) exec cat $source_path/VERSION
  ;;
848
  --prefix=*) prefix="$optarg"
B
bellard 已提交
849
  ;;
850
  --interp-prefix=*) interp_prefix="$optarg"
B
bellard 已提交
851
  ;;
P
Paolo Bonzini 已提交
852
  --source-path=*)
B
bellard 已提交
853
  ;;
854
  --cross-prefix=*)
B
bellard 已提交
855
  ;;
856
  --cc=*)
B
bellard 已提交
857
  ;;
858
  --host-cc=*) host_cc="$optarg"
B
bellard 已提交
859
  ;;
860 861
  --cxx=*)
  ;;
862 863
  --iasl=*) iasl="$optarg"
  ;;
864 865
  --objcc=*) objcc="$optarg"
  ;;
866
  --make=*) make="$optarg"
B
bellard 已提交
867
  ;;
868 869
  --install=*) install="$optarg"
  ;;
B
Blue Swirl 已提交
870 871
  --python=*) python="$optarg"
  ;;
B
Blue Swirl 已提交
872 873
  --gcov=*) gcov_tool="$optarg"
  ;;
874 875
  --smbd=*) smbd="$optarg"
  ;;
876
  --extra-cflags=*)
B
bellard 已提交
877
  ;;
878 879
  --extra-cxxflags=*)
  ;;
880
  --extra-ldflags=*)
B
bellard 已提交
881
  ;;
882 883 884 885
  --enable-debug-info)
  ;;
  --disable-debug-info)
  ;;
F
Fam Zheng 已提交
886 887
  --enable-modules)
      modules="yes"
888 889 890
  ;;
  --disable-modules)
      modules="no"
F
Fam Zheng 已提交
891
  ;;
892
  --cpu=*)
B
bellard 已提交
893
  ;;
894
  --target-list=*) target_list="$optarg"
B
bellard 已提交
895
  ;;
L
Lluís Vilanova 已提交
896 897 898 899
  --enable-trace-backends=*) trace_backends="$optarg"
  ;;
  # XXX: backwards compatibility
  --enable-trace-backend=*) trace_backends="$optarg"
900
  ;;
901
  --with-trace-file=*) trace_file="$optarg"
P
Prerna Saxena 已提交
902
  ;;
B
bellard 已提交
903 904
  --enable-gprof) gprof="yes"
  ;;
B
Blue Swirl 已提交
905 906
  --enable-gcov) gcov="yes"
  ;;
907 908 909
  --static)
    static="yes"
    LDFLAGS="-static $LDFLAGS"
910
    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
B
bellard 已提交
911
  ;;
912 913 914 915
  --mandir=*) mandir="$optarg"
  ;;
  --bindir=*) bindir="$optarg"
  ;;
A
Alon Levy 已提交
916 917
  --libdir=*) libdir="$optarg"
  ;;
918 919
  --libexecdir=*) libexecdir="$optarg"
  ;;
920 921
  --includedir=*) includedir="$optarg"
  ;;
922
  --datadir=*) datadir="$optarg"
923
  ;;
924 925
  --with-confsuffix=*) confsuffix="$optarg"
  ;;
926
  --docdir=*) qemu_docdir="$optarg"
927
  ;;
928
  --sysconfdir=*) sysconfdir="$optarg"
929
  ;;
L
Luiz Capitulino 已提交
930 931
  --localstatedir=*) local_statedir="$optarg"
  ;;
G
Gerd Hoffmann 已提交
932 933
  --firmwarepath=*) firmwarepath="$optarg"
  ;;
L
Luiz Capitulino 已提交
934
  --sbindir=*|--sharedstatedir=*|\
935 936 937 938 939 940 941
  --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.
  ;;
942 943
  --disable-sdl) sdl="no"
  ;;
944 945
  --enable-sdl) sdl="yes"
  ;;
946 947
  --with-sdlabi=*) sdlabi="$optarg"
  ;;
948 949 950 951
  --disable-qom-cast-debug) qom_cast_debug="no"
  ;;
  --enable-qom-cast-debug) qom_cast_debug="yes"
  ;;
952 953 954 955
  --disable-virtfs) virtfs="no"
  ;;
  --enable-virtfs) virtfs="yes"
  ;;
956 957 958 959
  --disable-mpath) mpath="no"
  ;;
  --enable-mpath) mpath="yes"
  ;;
J
Jes Sorensen 已提交
960 961 962 963
  --disable-vnc) vnc="no"
  ;;
  --enable-vnc) vnc="yes"
  ;;
B
blueswir1 已提交
964 965
  --oss-lib=*) oss_lib="$optarg"
  ;;
M
malc 已提交
966
  --audio-drv-list=*) audio_drv_list="$optarg"
B
bellard 已提交
967
  ;;
968
  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
969
  ;;
970
  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
971
  ;;
972 973 974 975
  --enable-debug-tcg) debug_tcg="yes"
  ;;
  --disable-debug-tcg) debug_tcg="no"
  ;;
P
Paul Brook 已提交
976 977 978 979 980
  --enable-debug)
      # Enable debugging options that aren't excessively noisy
      debug_tcg="yes"
      debug="yes"
      strip_opt="no"
981
      fortify_source="no"
P
Paul Brook 已提交
982
  ;;
983 984 985 986
  --enable-sparse) sparse="yes"
  ;;
  --disable-sparse) sparse="no"
  ;;
987 988
  --disable-strip) strip_opt="no"
  ;;
989 990
  --disable-vnc-sasl) vnc_sasl="no"
  ;;
991 992
  --enable-vnc-sasl) vnc_sasl="yes"
  ;;
993 994 995 996
  --disable-vnc-jpeg) vnc_jpeg="no"
  ;;
  --enable-vnc-jpeg) vnc_jpeg="yes"
  ;;
C
Corentin Chary 已提交
997 998 999 1000
  --disable-vnc-png) vnc_png="no"
  ;;
  --enable-vnc-png) vnc_png="yes"
  ;;
B
bellard 已提交
1001
  --disable-slirp) slirp="no"
1002
  ;;
1003
  --disable-vde) vde="no"
1004
  ;;
1005 1006
  --enable-vde) vde="yes"
  ;;
1007 1008 1009 1010
  --disable-netmap) netmap="no"
  ;;
  --enable-netmap) netmap="yes"
  ;;
1011 1012
  --disable-xen) xen="no"
  ;;
1013 1014
  --enable-xen) xen="yes"
  ;;
1015 1016 1017 1018
  --disable-xen-pci-passthrough) xen_pci_passthrough="no"
  ;;
  --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
  ;;
1019 1020 1021 1022
  --disable-xen-pv-domain-build) xen_pv_domain_build="no"
  ;;
  --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
  ;;
A
aurel32 已提交
1023 1024
  --disable-brlapi) brlapi="no"
  ;;
1025 1026
  --enable-brlapi) brlapi="yes"
  ;;
B
balrog 已提交
1027 1028
  --disable-bluez) bluez="no"
  ;;
1029 1030
  --enable-bluez) bluez="yes"
  ;;
A
aliguori 已提交
1031 1032
  --disable-kvm) kvm="no"
  ;;
1033 1034
  --enable-kvm) kvm="yes"
  ;;
1035
  --disable-hax) hax="no"
1036
  ;;
1037
  --enable-hax) hax="yes"
1038
  ;;
1039 1040 1041 1042
  --disable-tcg-interpreter) tcg_interpreter="no"
  ;;
  --enable-tcg-interpreter) tcg_interpreter="yes"
  ;;
1043 1044 1045 1046
  --disable-cap-ng)  cap_ng="no"
  ;;
  --enable-cap-ng) cap_ng="yes"
  ;;
1047 1048 1049 1050
  --disable-tcg) tcg="no"
  ;;
  --enable-tcg) tcg="yes"
  ;;
1051 1052 1053 1054
  --disable-malloc-trim) malloc_trim="no"
  ;;
  --enable-malloc-trim) malloc_trim="yes"
  ;;
1055 1056 1057 1058
  --disable-spice) spice="no"
  ;;
  --enable-spice) spice="yes"
  ;;
R
Ronnie Sahlberg 已提交
1059 1060 1061 1062
  --disable-libiscsi) libiscsi="no"
  ;;
  --enable-libiscsi) libiscsi="yes"
  ;;
P
Peter Lieven 已提交
1063 1064 1065 1066
  --disable-libnfs) libnfs="no"
  ;;
  --enable-libnfs) libnfs="yes"
  ;;
1067 1068
  --enable-profiler) profiler="yes"
  ;;
1069 1070
  --disable-cocoa) cocoa="no"
  ;;
1071 1072
  --enable-cocoa)
      cocoa="yes" ;
1073
      audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1074
  ;;
P
pbrook 已提交
1075
  --disable-system) softmmu="no"
1076
  ;;
P
pbrook 已提交
1077
  --enable-system) softmmu="yes"
1078
  ;;
1079 1080 1081 1082 1083
  --disable-user)
      linux_user="no" ;
      bsd_user="no" ;
  ;;
  --enable-user) ;;
1084
  --disable-linux-user) linux_user="no"
1085
  ;;
1086 1087
  --enable-linux-user) linux_user="yes"
  ;;
B
blueswir1 已提交
1088 1089 1090 1091
  --disable-bsd-user) bsd_user="no"
  ;;
  --enable-bsd-user) bsd_user="yes"
  ;;
1092
  --enable-pie) pie="yes"
1093
  ;;
1094
  --disable-pie) pie="no"
1095
  ;;
1096 1097 1098 1099
  --enable-werror) werror="yes"
  ;;
  --disable-werror) werror="no"
  ;;
1100 1101 1102 1103
  --enable-stack-protector) stack_protector="yes"
  ;;
  --disable-stack-protector) stack_protector="no"
  ;;
B
balrog 已提交
1104 1105
  --disable-curses) curses="no"
  ;;
1106 1107
  --enable-curses) curses="yes"
  ;;
A
Alexander Graf 已提交
1108 1109
  --disable-curl) curl="no"
  ;;
1110 1111
  --enable-curl) curl="yes"
  ;;
1112 1113 1114 1115
  --disable-fdt) fdt="no"
  ;;
  --enable-fdt) fdt="yes"
  ;;
1116 1117 1118 1119
  --disable-linux-aio) linux_aio="no"
  ;;
  --enable-linux-aio) linux_aio="yes"
  ;;
1120 1121 1122 1123
  --disable-attr) attr="no"
  ;;
  --enable-attr) attr="yes"
  ;;
T
ths 已提交
1124 1125
  --disable-blobs) blobs="no"
  ;;
P
pbrook 已提交
1126 1127
  --with-pkgversion=*) pkgversion=" ($optarg)"
  ;;
1128 1129
  --with-coroutine=*) coroutine="$optarg"
  ;;
1130 1131 1132 1133
  --disable-coroutine-pool) coroutine_pool="no"
  ;;
  --enable-coroutine-pool) coroutine_pool="yes"
  ;;
1134 1135
  --enable-debug-stack-usage) debug_stack_usage="yes"
  ;;
1136 1137 1138 1139
  --enable-crypto-afalg) crypto_afalg="yes"
  ;;
  --disable-crypto-afalg) crypto_afalg="no"
  ;;
J
Juan Quintela 已提交
1140
  --disable-docs) docs="no"
1141
  ;;
J
Juan Quintela 已提交
1142
  --enable-docs) docs="yes"
1143
  ;;
M
Michael S. Tsirkin 已提交
1144 1145 1146 1147
  --disable-vhost-net) vhost_net="no"
  ;;
  --enable-vhost-net) vhost_net="yes"
  ;;
1148 1149 1150 1151
  --disable-vhost-scsi) vhost_scsi="no"
  ;;
  --enable-vhost-scsi) vhost_scsi="yes"
  ;;
1152 1153 1154 1155
  --disable-vhost-vsock) vhost_vsock="no"
  ;;
  --enable-vhost-vsock) vhost_vsock="yes"
  ;;
G
Gerd Hoffmann 已提交
1156
  --disable-opengl) opengl="no"
M
Michael Walle 已提交
1157
  ;;
G
Gerd Hoffmann 已提交
1158
  --enable-opengl) opengl="yes"
M
Michael Walle 已提交
1159
  ;;
1160 1161 1162 1163
  --disable-rbd) rbd="no"
  ;;
  --enable-rbd) rbd="yes"
  ;;
1164 1165 1166 1167
  --disable-xfsctl) xfs="no"
  ;;
  --enable-xfsctl) xfs="yes"
  ;;
1168
  --disable-smartcard) smartcard="no"
R
Robert Relyea 已提交
1169
  ;;
1170
  --enable-smartcard) smartcard="yes"
R
Robert Relyea 已提交
1171
  ;;
G
Gerd Hoffmann 已提交
1172 1173 1174 1175
  --disable-libusb) libusb="no"
  ;;
  --enable-libusb) libusb="yes"
  ;;
1176 1177 1178 1179
  --disable-usb-redir) usb_redir="no"
  ;;
  --enable-usb-redir) usb_redir="yes"
  ;;
A
Alon Levy 已提交
1180 1181
  --disable-zlib-test) zlib="no"
  ;;
1182 1183
  --disable-lzo) lzo="no"
  ;;
Q
qiaonuohan 已提交
1184 1185
  --enable-lzo) lzo="yes"
  ;;
1186 1187
  --disable-snappy) snappy="no"
  ;;
Q
qiaonuohan 已提交
1188 1189
  --enable-snappy) snappy="yes"
  ;;
1190 1191 1192 1193
  --disable-bzip2) bzip2="no"
  ;;
  --enable-bzip2) bzip2="yes"
  ;;
1194 1195 1196 1197
  --enable-guest-agent) guest_agent="yes"
  ;;
  --disable-guest-agent) guest_agent="no"
  ;;
1198 1199 1200 1201
  --enable-guest-agent-msi) guest_agent_msi="yes"
  ;;
  --disable-guest-agent-msi) guest_agent_msi="no"
  ;;
1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213
  --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"
  ;;
1214 1215 1216 1217
  --enable-tools) want_tools="yes"
  ;;
  --disable-tools) want_tools="no"
  ;;
1218 1219 1220 1221
  --enable-seccomp) seccomp="yes"
  ;;
  --disable-seccomp) seccomp="no"
  ;;
1222 1223 1224 1225
  --disable-glusterfs) glusterfs="no"
  ;;
  --enable-glusterfs) glusterfs="yes"
  ;;
1226 1227
  --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
      echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1228
  ;;
F
Fam Zheng 已提交
1229 1230 1231
  --enable-vhdx|--disable-vhdx)
      echo "$0: $opt is obsolete, VHDX driver is always built" >&2
  ;;
1232 1233 1234
  --enable-uuid|--disable-uuid)
      echo "$0: $opt is obsolete, UUID support is always built" >&2
  ;;
A
Anthony Liguori 已提交
1235 1236 1237 1238
  --disable-gtk) gtk="no"
  ;;
  --enable-gtk) gtk="yes"
  ;;
1239 1240
  --tls-priority=*) tls_priority="$optarg"
  ;;
1241 1242 1243 1244
  --disable-gnutls) gnutls="no"
  ;;
  --enable-gnutls) gnutls="yes"
  ;;
1245 1246 1247 1248 1249 1250 1251 1252
  --disable-nettle) nettle="no"
  ;;
  --enable-nettle) nettle="yes"
  ;;
  --disable-gcrypt) gcrypt="no"
  ;;
  --enable-gcrypt) gcrypt="yes"
  ;;
M
Michael R. Hines 已提交
1253 1254 1255 1256
  --enable-rdma) rdma="yes"
  ;;
  --disable-rdma) rdma="no"
  ;;
1257 1258
  --with-gtkabi=*) gtkabi="$optarg"
  ;;
S
Stefan Weil 已提交
1259 1260 1261 1262
  --disable-vte) vte="no"
  ;;
  --enable-vte) vte="yes"
  ;;
1263 1264 1265 1266
  --disable-virglrenderer) virglrenderer="no"
  ;;
  --enable-virglrenderer) virglrenderer="yes"
  ;;
1267 1268
  --disable-tpm) tpm="no"
  ;;
S
Stefan Berger 已提交
1269 1270
  --enable-tpm) tpm="yes"
  ;;
1271 1272 1273 1274
  --disable-libssh2) libssh2="no"
  ;;
  --enable-libssh2) libssh2="yes"
  ;;
1275 1276 1277 1278
  --disable-live-block-migration) live_block_migration="no"
  ;;
  --enable-live-block-migration) live_block_migration="yes"
  ;;
1279 1280 1281 1282
  --disable-numa) numa="no"
  ;;
  --enable-numa) numa="yes"
  ;;
F
Fam Zheng 已提交
1283 1284 1285 1286
  --disable-tcmalloc) tcmalloc="no"
  ;;
  --enable-tcmalloc) tcmalloc="yes"
  ;;
1287 1288 1289 1290
  --disable-jemalloc) jemalloc="no"
  ;;
  --enable-jemalloc) jemalloc="yes"
  ;;
C
Changlong Xie 已提交
1291 1292 1293 1294
  --disable-replication) replication="no"
  ;;
  --enable-replication) replication="yes"
  ;;
1295 1296 1297 1298
  --disable-vxhs) vxhs="no"
  ;;
  --enable-vxhs) vxhs="yes"
  ;;
1299 1300 1301 1302 1303 1304 1305 1306
  --disable-vhost-user) vhost_user="no"
  ;;
  --enable-vhost-user)
      vhost_user="yes"
      if test "$mingw32" = "yes"; then
          error_exit "vhost-user isn't available on win32"
      fi
  ;;
1307 1308 1309 1310
  --disable-capstone) capstone="no"
  ;;
  --enable-capstone) capstone="yes"
  ;;
1311 1312 1313 1314
  --enable-capstone=git) capstone="git"
  ;;
  --enable-capstone=system) capstone="system"
  ;;
1315 1316
  --with-git=*) git="$optarg"
  ;;
1317 1318 1319 1320
  --enable-git-update) git_update=yes
  ;;
  --disable-git-update) git_update=no
  ;;
F
Fam Zheng 已提交
1321 1322 1323 1324
  *)
      echo "ERROR: unknown option $opt"
      echo "Try '$0 --help' for more information"
      exit 1
1325
  ;;
B
bellard 已提交
1326 1327 1328
  esac
done

1329 1330 1331 1332 1333 1334 1335 1336
if test "$vhost_user" = ""; then
    if test "$mingw32" = "yes"; then
        vhost_user="no"
    else
        vhost_user="yes"
    fi
fi

1337
case "$cpu" in
1338 1339 1340 1341 1342 1343 1344 1345
    ppc)
           CPU_CFLAGS="-m32"
           LDFLAGS="-m32 $LDFLAGS"
           ;;
    ppc64)
           CPU_CFLAGS="-m64"
           LDFLAGS="-m64 $LDFLAGS"
           ;;
1346
    sparc)
1347 1348
           CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
           LDFLAGS="-m32 -mv8plus $LDFLAGS"
1349
           ;;
1350
    sparc64)
1351
           CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1352
           LDFLAGS="-m64 $LDFLAGS"
1353
           ;;
1354
    s390)
1355
           CPU_CFLAGS="-m31"
1356 1357 1358
           LDFLAGS="-m31 $LDFLAGS"
           ;;
    s390x)
1359
           CPU_CFLAGS="-m64"
1360
           LDFLAGS="-m64 $LDFLAGS"
1361
           ;;
1362
    i386)
1363
           CPU_CFLAGS="-m32"
1364
           LDFLAGS="-m32 $LDFLAGS"
P
Paolo Bonzini 已提交
1365
           cc_i386='$(CC) -m32'
1366 1367
           ;;
    x86_64)
R
Richard Henderson 已提交
1368 1369 1370 1371
           # ??? Only extremely old AMD cpus do not have cmpxchg16b.
           # If we truly care, we should simply detect this case at
           # runtime and generate the fallback to serial emulation.
           CPU_CFLAGS="-m64 -mcx16"
1372
           LDFLAGS="-m64 $LDFLAGS"
P
Paolo Bonzini 已提交
1373
           cc_i386='$(CC) -m32'
1374
           ;;
1375 1376 1377 1378 1379
    x32)
           CPU_CFLAGS="-mx32"
           LDFLAGS="-mx32 $LDFLAGS"
           cc_i386='$(CC) -m32'
           ;;
1380
    # No special flags required for other host CPUs
1381 1382
esac

1383 1384 1385
QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"

1386 1387 1388 1389 1390 1391 1392
# For user-mode emulation the host arch has to be one we explicitly
# support, even if we're using TCI.
if [ "$ARCH" = "unknown" ]; then
  bsd_user="no"
  linux_user="no"
fi

1393 1394
default_target_list=""

1395 1396 1397 1398
mak_wilds=""

if [ "$softmmu" = "yes" ]; then
    mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1399
fi
1400 1401
if [ "$linux_user" = "yes" ]; then
    mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1402
fi
1403 1404
if [ "$bsd_user" = "yes" ]; then
    mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1405 1406
fi

1407 1408 1409 1410
for config in $mak_wilds; do
    default_target_list="${default_target_list} $(basename "$config" .mak)"
done

1411
# Enumerate public trace backends for --help output
1412
trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1413

1414 1415 1416 1417 1418 1419
if test x"$show_help" = x"yes" ; then
cat << EOF

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

1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438
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
1439
  --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452
  --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)
G
Gerd Hoffmann 已提交
1453
  --firmwarepath=PATH      search PATH for firmware files
F
Fam Zheng 已提交
1454
  --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1455 1456 1457
  --enable-debug           enable common debug build options
  --disable-strip          disable stripping binaries
  --disable-werror         disable compilation abort on warning
1458
  --disable-stack-protector disable compiler-provided stack protection
1459 1460 1461 1462 1463 1464 1465 1466 1467
  --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)
L
Lluís Vilanova 已提交
1468
  --enable-trace-backends=B Set trace backend
1469
                           Available backends: $trace_backend_list
1470 1471
  --with-trace-file=NAME   Full PATH,NAME of file to store traces
                           Default:trace-<pid>
1472 1473
  --disable-slirp          disable SLIRP userspace network connectivity
  --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1474
  --enable-malloc-trim     enable libc malloc_trim() for memory optimization
1475 1476
  --oss-lib                path to OSS library
  --cpu=CPU                Build for host CPU [$cpu]
1477
  --with-coroutine=BACKEND coroutine backend. Supported options:
1478
                           ucontext, sigaltstack, windows
1479 1480
  --enable-gcov            enable test coverage analysis with gcov
  --gcov=GCOV              use specified gcov [$gcov_tool]
1481 1482 1483
  --disable-blobs          disable installing provided firmware blobs
  --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)
1484
  --tls-priority           default TLS protocol/cipher priority string
1485 1486 1487 1488 1489 1490
  --enable-gprof           QEMU profiling with gprof
  --enable-profiler        profiler support
  --enable-xen-pv-domain-build
                           xen pv domain builder
  --enable-debug-stack-usage
                           track the maximum stack usage of stacks created by qemu_alloc_stack
1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507

Optional features, enabled with --enable-FEATURE and
disabled with --disable-FEATURE, default is enabled if available:

  system          all system emulation targets
  user            supported user emulation targets
  linux-user      all linux usermode emulation targets
  bsd-user        all BSD usermode emulation targets
  docs            build documentation
  guest-agent     build the QEMU Guest Agent
  guest-agent-msi build guest agent Windows MSI installation package
  pie             Position Independent Executables
  modules         modules support
  debug-tcg       TCG debugging (default is disabled)
  debug-info      debugging information
  sparse          sparse checker

1508
  gnutls          GNUTLS cryptography support
1509 1510
  nettle          nettle cryptography support
  gcrypt          libgcrypt cryptography support
1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522
  sdl             SDL UI
  --with-sdlabi     select preferred SDL ABI 1.2 or 2.0
  gtk             gtk UI
  --with-gtkabi     select preferred GTK ABI 2.0 or 3.0
  vte             vte support for the gtk UI
  curses          curses UI
  vnc             VNC UI support
  vnc-sasl        SASL encryption for VNC server
  vnc-jpeg        JPEG lossy compression for VNC server
  vnc-png         PNG compression for VNC server
  cocoa           Cocoa UI (Mac OS X only)
  virtfs          VirtFS
1523
  mpath           Multipath persistent reservation passthrough
1524 1525 1526 1527 1528 1529 1530
  xen             xen backend driver support
  xen-pci-passthrough
  brlapi          BrlAPI (Braile)
  curl            curl connectivity
  fdt             fdt device tree
  bluez           bluez stack connectivity
  kvm             KVM acceleration support
1531
  hax             HAX acceleration support
1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542
  rdma            RDMA-based migration support
  vde             support for vde network
  netmap          support for netmap network
  linux-aio       Linux AIO support
  cap-ng          libcap-ng support
  attr            attr and xattr support
  vhost-net       vhost-net acceleration support
  spice           spice
  rbd             rados block device (rbd)
  libiscsi        iscsi support
  libnfs          nfs support
1543
  smartcard       smartcard support (libcacard)
1544
  libusb          libusb (for usb passthrough)
1545
  live-block-migration   Block migration in the main migration stream
1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557
  usb-redir       usb network redirection support
  lzo             support of lzo compression library
  snappy          support of snappy compression library
  bzip2           support of bzip2 compression library
                  (for reading bzip2-compressed dmg images)
  seccomp         seccomp support
  coroutine-pool  coroutine freelist (better performance)
  glusterfs       GlusterFS backend
  tpm             TPM support
  libssh2         ssh block device support
  numa            libnuma support
  tcmalloc        tcmalloc support
1558
  jemalloc        jemalloc support
C
Changlong Xie 已提交
1559
  replication     replication support
1560 1561 1562 1563 1564 1565
  vhost-vsock     virtio sockets device support
  opengl          opengl support
  virglrenderer   virgl rendering support
  xfsctl          xfsctl support
  qom-cast-debug  cast debugging support
  tools           build qemu-io, qemu-nbd and qemu-image tools
1566
  vxhs            Veritas HyperScale vDisk backend support
1567
  crypto-afalg    Linux AF_ALG crypto backend driver
1568
  vhost-user      vhost-user support
1569
  capstone        capstone disassembler support
1570 1571

NOTE: The object files are built at the place where configure is launched
1572
EOF
F
Fam Zheng 已提交
1573
exit 0
1574 1575
fi

1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590
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,6) or sys.version_info >= (3,))'; then
  error_exit "Cannot use '$python', Python 2.6 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

# Suppress writing compiled files
python="$python -B"

1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604
# Check that the C compiler works. Doing this here before testing
# the host CPU ensures that we had a valid CC to autodetect the
# $cpu var (and we should bail right here if that's not the case).
# It also allows the help message to be printed without a CC.
write_c_skeleton;
if compile_object ; then
  : C compiler works ok
else
    error_exit "\"$cc\" either does not exist or does not work"
fi
if ! compile_prog ; then
    error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
fi

1605 1606 1607 1608 1609 1610
# 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)"
    else
1611
        error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1612 1613 1614
    fi
fi

1615 1616 1617 1618
# Consult white-list to determine whether to enable werror
# by default.  Only enable by default for git builds
if test -z "$werror" ; then
    if test -d "$source_path/.git" -a \
1619
        \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1620 1621 1622 1623 1624 1625
        werror="yes"
    else
        werror="no"
    fi
fi

1626 1627 1628 1629 1630
if test "$bogus_os" = "yes"; then
    # Now that we know that we're not printing the help and that
    # the compiler works (so the results of the check_defines we used
    # to identify the OS are reliable), if we didn't recognize the
    # host OS we should stop now.
1631
    error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1632 1633
fi

1634 1635
gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1636
gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1637
gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1638
gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1639
gcc_flags="-Wno-string-plus-int $gcc_flags"
1640 1641 1642 1643
# 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.
1644 1645 1646 1647

cc_has_warning_flag() {
    write_c_skeleton;

1648 1649 1650
    # Use the positive sense of the flag when testing for -Wno-wombat
    # support (gcc will happily accept the -Wno- form of unknown
    # warning options).
1651 1652 1653 1654 1655 1656 1657
    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
    compile_prog "-Werror $optflag" ""
}

for flag in $gcc_flags; do
    if cc_has_warning_flag $flag ; then
        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1658 1659 1660
    fi
done

1661
if test "$stack_protector" != "no"; then
1662 1663 1664 1665 1666 1667 1668 1669 1670 1671
  cat > $TMPC << EOF
int main(int argc, char *argv[])
{
    char arr[64], *p = arr, *c = argv[0];
    while (*c) {
        *p++ = *c++;
    }
    return 0;
}
EOF
1672
  gcc_flags="-fstack-protector-strong -fstack-protector-all"
1673
  sp_on=0
1674
  for flag in $gcc_flags; do
1675 1676 1677 1678
    # 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
1679
      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1680
      sp_on=1
1681 1682 1683
      break
    fi
  done
1684 1685 1686 1687 1688
  if test "$stack_protector" = yes; then
    if test $sp_on = 0; then
      error_exit "Stack protector not supported"
    fi
  fi
1689 1690
fi

1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703
# Disable -Wmissing-braces on older compilers that warn even for
# the "universal" C zero initializer {0}.
cat > $TMPC << EOF
struct {
  int a[2];
} x = {0};
EOF
if compile_object "-Werror" "" ; then
  :
else
  QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
fi

1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718
# 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

1719
if test "$static" = "yes" ; then
1720 1721 1722
  if test "$modules" = "yes" ; then
    error_exit "static and modules are mutually incompatible"
  fi
1723
  if test "$pie" = "yes" ; then
1724
    error_exit "static and pie are mutually incompatible"
1725 1726 1727 1728 1729
  else
    pie="no"
  fi
fi

1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740
# Unconditional check for compiler __thread support
  cat > $TMPC << EOF
static __thread int tls_var;
int main(void) { return tls_var; }
EOF

if ! compile_prog "-Werror" "" ; then
    error_exit "Your compiler does not support the __thread specifier for " \
	"Thread-Local Storage (TLS). Please upgrade to a version that does."
fi

1741 1742
if test "$pie" = ""; then
  case "$cpu-$targetos" in
1743
    i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1744 1745 1746 1747 1748 1749 1750 1751 1752
      ;;
    *)
      pie="no"
      ;;
  esac
fi

if test "$pie" != "no" ; then
  cat > $TMPC << EOF
1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763

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

static THREAD int tls_var;

int main(void) { return tls_var; }

1764 1765 1766 1767 1768 1769 1770 1771 1772 1773
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
1774
      error_exit "PIE not available due to missing toolchain support"
1775 1776 1777 1778 1779
    else
      echo "Disabling PIE due to missing toolchain support"
      pie="no"
    fi
  fi
B
Brad 已提交
1780

1781
  if compile_prog "-Werror -fno-pie" "-nopie"; then
B
Brad 已提交
1782 1783 1784
    CFLAGS_NOPIE="-fno-pie"
    LDFLAGS_NOPIE="-nopie"
  fi
1785 1786
fi

P
Paolo Bonzini 已提交
1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801
##########################################
# __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;
1802
  val = __sync_val_compare_and_swap(&val, 0, 1);
P
Paolo Bonzini 已提交
1803 1804 1805 1806 1807 1808 1809 1810 1811 1812
  sfaa(&val);
  return val;
}
EOF
  if ! compile_prog "" "" ; then
    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
  fi
fi

#########################################
B
bellard 已提交
1813
# Solaris specific configure tool chain decisions
P
Paolo Bonzini 已提交
1814

B
bellard 已提交
1815
if test "$solaris" = "yes" ; then
1816 1817 1818
  if has $install; then
    :
  else
1819 1820 1821
    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 已提交
1822
  fi
1823
  if test "$(path_of $install)" = "/usr/sbin/install" ; then
1824 1825 1826
    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 已提交
1827
  fi
1828 1829 1830
  if has ar; then
    :
  else
B
bellard 已提交
1831
    if test -f /usr/ccs/bin/ar ; then
1832 1833
      error_exit "No path includes ar" \
          "Add /usr/ccs/bin to your path and rerun configure"
B
bellard 已提交
1834
    fi
1835
    error_exit "No path includes ar"
B
bellard 已提交
1836
  fi
1837
fi
B
bellard 已提交
1838

1839
if test -z "${target_list+xxx}" ; then
1840 1841 1842 1843 1844
    for target in $default_target_list; do
        supported_target $target 2>/dev/null && \
            target_list="$target_list $target"
    done
    target_list="${target_list# }"
1845
else
1846
    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858
    for target in $target_list; do
        # Check that we recognised the target name; this allows a more
        # friendly error message than if we let it fall through.
        case " $default_target_list " in
            *" $target "*)
                ;;
            *)
                error_exit "Unknown target name '$target'"
                ;;
        esac
        supported_target $target || exit 1
    done
1859
fi
1860

P
Paolo Bonzini 已提交
1861 1862 1863 1864 1865 1866 1867
# see if system emulation was really requested
case " $target_list " in
  *"-softmmu "*) softmmu=yes
  ;;
  *) softmmu=no
  ;;
esac
B
bellard 已提交
1868

1869 1870
feature_not_found() {
  feature=$1
1871
  remedy=$2
1872

1873
  error_exit "User requested feature $feature" \
1874 1875
      "configure was not able to find it." \
      "$remedy"
1876 1877
}

B
bellard 已提交
1878 1879 1880
# ---
# big/little endian test
cat > $TMPC << EOF
1881 1882 1883 1884 1885
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 已提交
1886 1887 1888
}
EOF

1889 1890 1891 1892 1893 1894 1895
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
1896
    fi
1897 1898
else
    echo big/little test failed
B
bellard 已提交
1899 1900
fi

1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915
##########################################
# cocoa implies not SDL or GTK
# (the cocoa UI code currently assumes it is always the active UI
# and doesn't interact well with other UI frontend code)
if test "$cocoa" = "yes"; then
    if test "$sdl" = "yes"; then
        error_exit "Cocoa and SDL UIs cannot both be enabled at once"
    fi
    if test "$gtk" = "yes"; then
        error_exit "Cocoa and GTK UIs cannot both be enabled at once"
    fi
    gtk=no
    sdl=no
fi

1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928
# Some versions of Mac OS X incorrectly define SIZE_MAX
cat > $TMPC << EOF
#include <stdint.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
    return printf("%zu", SIZE_MAX);
}
EOF
have_broken_size_max=no
if ! compile_object -Werror ; then
    have_broken_size_max=yes
fi

1929 1930 1931 1932 1933
##########################################
# L2TPV3 probe

cat > $TMPC <<EOF
#include <sys/socket.h>
1934
#include <linux/ip.h>
1935 1936 1937 1938 1939 1940 1941 1942
int main(void) { return sizeof(struct mmsghdr); }
EOF
if compile_prog "" "" ; then
  l2tpv3=yes
else
  l2tpv3=no
fi

1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973
##########################################
# MinGW / Mingw-w64 localtime_r/gmtime_r check

if test "$mingw32" = "yes"; then
    # Some versions of MinGW / Mingw-w64 lack localtime_r
    # and gmtime_r entirely.
    #
    # Some versions of Mingw-w64 define a macro for
    # localtime_r/gmtime_r.
    #
    # Some versions of Mingw-w64 will define functions
    # for localtime_r/gmtime_r, but only if you have
    # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
    # though, unistd.h and pthread.h both define
    # that for you.
    #
    # So this #undef localtime_r and #include <unistd.h>
    # are not in fact redundant.
cat > $TMPC << EOF
#include <unistd.h>
#include <time.h>
#undef localtime_r
int main(void) { localtime_r(NULL, NULL); return 0; }
EOF
    if compile_prog "" "" ; then
        localtime_r="yes"
    else
        localtime_r="no"
    fi
fi

S
Stefan Weil 已提交
1974 1975 1976 1977
##########################################
# pkg-config probe

if ! has "$pkg_config_exe"; then
1978
  error_exit "pkg-config binary '$pkg_config_exe' not found"
S
Stefan Weil 已提交
1979 1980
fi

1981 1982 1983
##########################################
# NPTL probe

1984
if test "$linux_user" = "yes"; then
1985
  cat > $TMPC <<EOF
1986
#include <sched.h>
P
pbrook 已提交
1987
#include <linux/futex.h>
1988
int main(void) {
1989 1990 1991
#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
#error bork
#endif
1992
  return 0;
1993 1994
}
EOF
1995
  if ! compile_object ; then
1996
    feature_not_found "nptl" "Install glibc and linux kernel headers."
1997
  fi
1998 1999
fi

2000
#########################################
2001 2002
# zlib check

A
Alon Levy 已提交
2003 2004
if test "$zlib" != "no" ; then
    cat > $TMPC << EOF
2005 2006 2007
#include <zlib.h>
int main(void) { zlibVersion(); return 0; }
EOF
A
Alon Levy 已提交
2008 2009 2010
    if compile_prog "" "-lz" ; then
        :
    else
2011 2012
        error_exit "zlib check failed" \
            "Make sure to have the zlib libs and headers installed."
A
Alon Levy 已提交
2013
    fi
2014
fi
2015
LIBS="$LIBS -lz"
2016

Q
qiaonuohan 已提交
2017 2018 2019 2020 2021 2022 2023 2024 2025
##########################################
# 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
2026 2027
        libs_softmmu="$libs_softmmu -llzo2"
        lzo="yes"
Q
qiaonuohan 已提交
2028
    else
2029 2030 2031 2032
        if test "$lzo" = "yes"; then
            feature_not_found "liblzo2" "Install liblzo2 devel"
        fi
        lzo="no"
Q
qiaonuohan 已提交
2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044
    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
2045 2046
        libs_softmmu="$libs_softmmu -lsnappy"
        snappy="yes"
Q
qiaonuohan 已提交
2047
    else
2048 2049 2050 2051
        if test "$snappy" = "yes"; then
            feature_not_found "libsnappy" "Install libsnappy devel"
        fi
        snappy="no"
Q
qiaonuohan 已提交
2052 2053 2054
    fi
fi

2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072
##########################################
# bzip2 check

if test "$bzip2" != "no" ; then
    cat > $TMPC << EOF
#include <bzlib.h>
int main(void) { BZ2_bzlibVersion(); return 0; }
EOF
    if compile_prog "" "-lbz2" ; then
        bzip2="yes"
    else
        if test "$bzip2" = "yes"; then
            feature_not_found "libbzip2" "Install libbzip2 devel"
        fi
        bzip2="no"
    fi
fi

2073 2074 2075 2076
##########################################
# libseccomp check

if test "$seccomp" != "no" ; then
2077 2078
    case "$cpu" in
    i386|x86_64)
2079
        libseccomp_minver="2.1.0"
2080
        ;;
2081 2082 2083
    mips)
        libseccomp_minver="2.2.0"
        ;;
2084 2085 2086
    arm|aarch64)
        libseccomp_minver="2.2.3"
        ;;
2087
    ppc|ppc64|s390x)
2088 2089
        libseccomp_minver="2.3.0"
        ;;
2090 2091 2092 2093 2094 2095 2096
    *)
        libseccomp_minver=""
        ;;
    esac

    if test "$libseccomp_minver" != "" &&
       $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2097 2098
        seccomp_cflags="$($pkg_config --cflags libseccomp)"
        seccomp_libs="$($pkg_config --libs libseccomp)"
2099
        seccomp="yes"
2100
    else
2101 2102 2103 2104 2105 2106 2107 2108 2109 2110
        if test "$seccomp" = "yes" ; then
            if test "$libseccomp_minver" != "" ; then
                feature_not_found "libseccomp" \
                    "Install libseccomp devel >= $libseccomp_minver"
            else
                feature_not_found "libseccomp" \
                    "libseccomp is not supported for host cpu $cpu"
            fi
        fi
        seccomp="no"
2111 2112
    fi
fi
2113 2114 2115
##########################################
# xen probe

2116
if test "$xen" != "no" ; then
2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131
  # Check whether Xen library path is specified via --extra-ldflags to avoid
  # overriding this setting with pkg-config output. If not, try pkg-config
  # to obtain all needed flags.

  if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
     $pkg_config --exists xencontrol ; then
    xen_ctrl_version="$(printf '%d%02d%02d' \
      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
    xen=yes
    xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
    xen_pc="$xen_pc xenevtchn xendevicemodel"
    QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
    libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
    LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
  else
2132

2133
    xen_libs="-lxenstore -lxenctrl -lxenguest"
2134
    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2135

2136 2137 2138 2139 2140 2141
    # 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)
    cat > $TMPC <<EOF
2142
#include <xenctrl.h>
2143 2144 2145 2146
int main(void) {
  return 0;
}
EOF
2147 2148 2149 2150 2151 2152
    if ! compile_prog "" "$xen_libs" ; then
      # Xen not found
      if test "$xen" = "yes" ; then
        feature_not_found "xen" "Install xen devel"
      fi
      xen=no
2153

2154 2155 2156
    # Xen unstable
    elif
        cat > $TMPC <<EOF &&
2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174
#undef XC_WANT_COMPAT_MAP_FOREIGN_API
#include <xenforeignmemory.h>
int main(void) {
  xenforeignmemory_handle *xfmem;

  xfmem = xenforeignmemory_open(0, 0);
  xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);

  return 0;
}
EOF
        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
      then
      xen_stable_libs="-lxendevicemodel $xen_stable_libs"
      xen_ctrl_version=41000
      xen=yes
    elif
        cat > $TMPC <<EOF &&
2175 2176 2177 2178 2179 2180 2181 2182
#undef XC_WANT_COMPAT_DEVICEMODEL_API
#define __XEN_TOOLS__
#include <xendevicemodel.h>
int main(void) {
  xendevicemodel_handle *xd;

  xd = xendevicemodel_open(0, 0);
  xendevicemodel_close(xd);
2183

2184 2185 2186
  return 0;
}
EOF
2187 2188 2189 2190 2191 2192 2193
        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
      then
      xen_stable_libs="-lxendevicemodel $xen_stable_libs"
      xen_ctrl_version=40900
      xen=yes
    elif
        cat > $TMPC <<EOF &&
2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242
/*
 * If we have stable libs the we don't want the libxc compat
 * layers, regardless of what CFLAGS we may have been given.
 *
 * Also, check if xengnttab_grant_copy_segment_t is defined and
 * grant copy operation is implemented.
 */
#undef XC_WANT_COMPAT_EVTCHN_API
#undef XC_WANT_COMPAT_GNTTAB_API
#undef XC_WANT_COMPAT_MAP_FOREIGN_API
#include <xenctrl.h>
#include <xenstore.h>
#include <xenevtchn.h>
#include <xengnttab.h>
#include <xenforeignmemory.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) {
  xc_interface *xc = NULL;
  xenforeignmemory_handle *xfmem;
  xenevtchn_handle *xe;
  xengnttab_handle *xg;
  xen_domain_handle_t handle;
  xengnttab_grant_copy_segment_t* seg = NULL;

  xs_daemon_open();

  xc = xc_interface_open(0, 0, 0);
  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
  xc_domain_create(xc, 0, handle, 0, NULL, NULL);

  xfmem = xenforeignmemory_open(0, 0);
  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);

  xe = xenevtchn_open(0, 0);
  xenevtchn_fd(xe);

  xg = xengnttab_open(0, 0);
  xengnttab_grant_copy(xg, 0, seg);

  return 0;
}
EOF
2243 2244 2245 2246 2247 2248
        compile_prog "" "$xen_libs $xen_stable_libs"
      then
      xen_ctrl_version=40800
      xen=yes
    elif
        cat > $TMPC <<EOF &&
2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293
/*
 * If we have stable libs the we don't want the libxc compat
 * layers, regardless of what CFLAGS we may have been given.
 */
#undef XC_WANT_COMPAT_EVTCHN_API
#undef XC_WANT_COMPAT_GNTTAB_API
#undef XC_WANT_COMPAT_MAP_FOREIGN_API
#include <xenctrl.h>
#include <xenstore.h>
#include <xenevtchn.h>
#include <xengnttab.h>
#include <xenforeignmemory.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) {
  xc_interface *xc = NULL;
  xenforeignmemory_handle *xfmem;
  xenevtchn_handle *xe;
  xengnttab_handle *xg;
  xen_domain_handle_t handle;

  xs_daemon_open();

  xc = xc_interface_open(0, 0, 0);
  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
  xc_domain_create(xc, 0, handle, 0, NULL, NULL);

  xfmem = xenforeignmemory_open(0, 0);
  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);

  xe = xenevtchn_open(0, 0);
  xenevtchn_fd(xe);

  xg = xengnttab_open(0, 0);
  xengnttab_map_grant_ref(xg, 0, 0, 0);

  return 0;
}
EOF
2294 2295 2296 2297 2298 2299
        compile_prog "" "$xen_libs $xen_stable_libs"
      then
      xen_ctrl_version=40701
      xen=yes
    elif
        cat > $TMPC <<EOF &&
2300
#include <xenctrl.h>
2301 2302 2303 2304 2305 2306 2307 2308
#include <stdint.h>
int main(void) {
  xc_interface *xc = NULL;
  xen_domain_handle_t handle;
  xc_domain_create(xc, 0, handle, 0, NULL, NULL);
  return 0;
}
EOF
2309 2310 2311 2312 2313 2314 2315 2316
        compile_prog "" "$xen_libs"
      then
      xen_ctrl_version=40700
      xen=yes

    # Xen 4.6
    elif
        cat > $TMPC <<EOF &&
2317
#include <xenctrl.h>
A
Anthony PERARD 已提交
2318
#include <xenstore.h>
2319 2320 2321 2322 2323
#include <stdint.h>
#include <xen/hvm/hvm_info_table.h>
#if !defined(HVM_MAX_VCPUS)
# error HVM_MAX_VCPUS not defined
#endif
2324 2325 2326 2327 2328 2329 2330 2331 2332
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);
  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2333
  xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2334 2335 2336
  return 0;
}
EOF
2337 2338 2339 2340 2341 2342 2343 2344
        compile_prog "" "$xen_libs"
      then
      xen_ctrl_version=40600
      xen=yes

    # Xen 4.5
    elif
        cat > $TMPC <<EOF &&
2345 2346 2347 2348 2349 2350 2351
#include <xenctrl.h>
#include <xenstore.h>
#include <stdint.h>
#include <xen/hvm/hvm_info_table.h>
#if !defined(HVM_MAX_VCPUS)
# error HVM_MAX_VCPUS not defined
#endif
2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363
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);
  xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
  return 0;
}
EOF
2364 2365 2366 2367
        compile_prog "" "$xen_libs"
      then
      xen_ctrl_version=40500
      xen=yes
2368

2369 2370
    elif
        cat > $TMPC <<EOF &&
2371 2372 2373 2374 2375 2376 2377
#include <xenctrl.h>
#include <xenstore.h>
#include <stdint.h>
#include <xen/hvm/hvm_info_table.h>
#if !defined(HVM_MAX_VCPUS)
# error HVM_MAX_VCPUS not defined
#endif
2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388
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
2389 2390 2391 2392
        compile_prog "" "$xen_libs"
      then
      xen_ctrl_version=40200
      xen=yes
2393

2394 2395 2396 2397 2398 2399
    else
      if test "$xen" = "yes" ; then
        feature_not_found "xen (unsupported version)" \
                          "Install a supported xen (xen 4.2 or newer)"
      fi
      xen=no
2400
    fi
2401

2402 2403 2404 2405 2406
    if test "$xen" = yes; then
      if test $xen_ctrl_version -ge 40701  ; then
        libs_softmmu="$xen_stable_libs $libs_softmmu"
      fi
      libs_softmmu="$xen_libs $libs_softmmu"
2407
    fi
2408
  fi
2409 2410
fi

2411
if test "$xen_pci_passthrough" != "no"; then
2412
  if test "$xen" = "yes" && test "$linux" = "yes"; then
2413 2414 2415
    xen_pci_passthrough=yes
  else
    if test "$xen_pci_passthrough" = "yes"; then
2416 2417
      error_exit "User requested feature Xen PCI Passthrough" \
          " but this feature requires /sys from Linux"
2418 2419 2420 2421 2422
    fi
    xen_pci_passthrough=no
  fi
fi

2423 2424 2425 2426 2427 2428
if test "$xen_pv_domain_build" = "yes" &&
   test "$xen" != "yes"; then
    error_exit "User requested Xen PV domain builder support" \
	       "which requires Xen support."
fi

2429 2430 2431
##########################################
# Sparse probe
if test "$sparse" != "no" ; then
2432
  if has cgcc; then
2433 2434 2435
    sparse=yes
  else
    if test "$sparse" = "yes" ; then
2436
      feature_not_found "sparse" "Install sparse binary"
2437 2438 2439 2440 2441
    fi
    sparse=no
  fi
fi

2442 2443 2444 2445 2446
##########################################
# X11 probe
x11_cflags=
x11_libs=-lX11
if $pkg_config --exists "x11"; then
2447 2448
    x11_cflags=$($pkg_config --cflags x11)
    x11_libs=$($pkg_config --libs x11)
2449 2450
fi

A
Anthony Liguori 已提交
2451 2452 2453
##########################################
# GTK probe

2454
if test "$gtkabi" = ""; then
G
Gerd Hoffmann 已提交
2455 2456 2457
    # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
    # Use 2.0 as a fallback if that is available.
    if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2458
        gtkabi=3.0
G
Gerd Hoffmann 已提交
2459
    elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2460
        gtkabi=2.0
G
Gerd Hoffmann 已提交
2461 2462
    else
        gtkabi=3.0
2463 2464 2465
    fi
fi

A
Anthony Liguori 已提交
2466
if test "$gtk" != "no"; then
2467
    gtkpackage="gtk+-$gtkabi"
2468
    gtkx11package="gtk+-x11-$gtkabi"
2469 2470
    if test "$gtkabi" = "3.0" ; then
      gtkversion="3.0.0"
S
Stefan Weil 已提交
2471 2472 2473 2474
    else
      gtkversion="2.18.0"
    fi
    if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2475 2476 2477
        gtk_cflags=$($pkg_config --cflags $gtkpackage)
        gtk_libs=$($pkg_config --libs $gtkpackage)
        gtk_version=$($pkg_config --modversion $gtkpackage)
2478
        if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2479 2480
            gtk_cflags="$gtk_cflags $x11_cflags"
            gtk_libs="$gtk_libs $x11_libs"
2481
        fi
S
Stefan Weil 已提交
2482 2483 2484
        libs_softmmu="$gtk_libs $libs_softmmu"
        gtk="yes"
    elif test "$gtk" = "yes"; then
G
Gerd Hoffmann 已提交
2485
        feature_not_found "gtk" "Install gtk3-devel"
S
Stefan Weil 已提交
2486 2487 2488 2489 2490
    else
        gtk="no"
    fi
fi

2491 2492 2493 2494

##########################################
# GNUTLS probe

2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510
gnutls_works() {
    # Unfortunately some distros have bad pkg-config information for gnutls
    # such that it claims to exist but you get a compiler error if you try
    # to use the options returned by --libs. Specifically, Ubuntu for --static
    # builds doesn't work:
    # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
    #
    # So sanity check the cflags/libs before assuming gnutls can be used.
    if ! $pkg_config --exists "gnutls"; then
        return 1
    fi

    write_c_skeleton
    compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
}

2511
gnutls_gcrypt=no
2512
gnutls_nettle=no
2513
if test "$gnutls" != "no"; then
2514
    if gnutls_works; then
2515 2516
        gnutls_cflags=$($pkg_config --cflags gnutls)
        gnutls_libs=$($pkg_config --libs gnutls)
2517 2518 2519 2520 2521
        libs_softmmu="$gnutls_libs $libs_softmmu"
        libs_tools="$gnutls_libs $libs_tools"
	QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
        gnutls="yes"

2522 2523 2524 2525 2526 2527 2528
	# gnutls_rnd requires >= 2.11.0
	if $pkg_config --exists "gnutls >= 2.11.0"; then
	    gnutls_rnd="yes"
	else
	    gnutls_rnd="no"
	fi

2529 2530
	if $pkg_config --exists 'gnutls >= 3.0'; then
	    gnutls_gcrypt=no
2531
	    gnutls_nettle=yes
2532
	elif $pkg_config --exists 'gnutls >= 2.12'; then
2533
	    case $($pkg_config --libs --static gnutls) in
2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545
		*gcrypt*)
		    gnutls_gcrypt=yes
		    gnutls_nettle=no
		    ;;
		*nettle*)
		    gnutls_gcrypt=no
		    gnutls_nettle=yes
		    ;;
		*)
		    gnutls_gcrypt=yes
		    gnutls_nettle=no
		    ;;
2546 2547 2548
	    esac
	else
	    gnutls_gcrypt=yes
2549
	    gnutls_nettle=no
2550
	fi
2551 2552 2553 2554
    elif test "$gnutls" = "yes"; then
	feature_not_found "gnutls" "Install gnutls devel"
    else
        gnutls="no"
2555
        gnutls_rnd="no"
2556 2557
    fi
else
2558
    gnutls_rnd="no"
2559 2560
fi

2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591

# If user didn't give a --disable/enable-gcrypt flag,
# then mark as disabled if user requested nettle
# explicitly, or if gnutls links to nettle
if test -z "$gcrypt"
then
    if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
    then
        gcrypt="no"
    fi
fi

# If user didn't give a --disable/enable-nettle flag,
# then mark as disabled if user requested gcrypt
# explicitly, or if gnutls links to gcrypt
if test -z "$nettle"
then
    if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
    then
        nettle="no"
    fi
fi

has_libgcrypt_config() {
    if ! has "libgcrypt-config"
    then
	return 1
    fi

    if test -n "$cross_prefix"
    then
2592
	host=$(libgcrypt-config --host)
2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603
	if test "$host-" != $cross_prefix
	then
	    return 1
	fi
    fi

    return 0
}

if test "$gcrypt" != "no"; then
    if has_libgcrypt_config; then
2604 2605
        gcrypt_cflags=$(libgcrypt-config --cflags)
        gcrypt_libs=$(libgcrypt-config --libs)
2606 2607 2608 2609 2610 2611 2612
        # Debian has remove -lgpg-error from libgcrypt-config
        # as it "spreads unnecessary dependencies" which in
        # turn breaks static builds...
        if test "$static" = "yes"
        then
            gcrypt_libs="$gcrypt_libs -lgpg-error"
        fi
2613 2614 2615
        libs_softmmu="$gcrypt_libs $libs_softmmu"
        libs_tools="$gcrypt_libs $libs_tools"
        QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2616 2617 2618 2619
        gcrypt="yes"
        if test -z "$nettle"; then
           nettle="no"
        fi
2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632

        cat > $TMPC << EOF
#include <gcrypt.h>
int main(void) {
  gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
                  GCRY_MD_SHA256,
                  NULL, 0, 0, 0, NULL);
 return 0;
}
EOF
        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
            gcrypt_kdf=yes
        fi
2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645

        cat > $TMPC << EOF
#include <gcrypt.h>
int main(void) {
  gcry_mac_hd_t handle;
  gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
                GCRY_MAC_FLAG_SECURE, NULL);
  return 0;
}
EOF
        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
            gcrypt_hmac=yes
        fi
2646
    else
2647 2648 2649 2650 2651
        if test "$gcrypt" = "yes"; then
            feature_not_found "gcrypt" "Install gcrypt devel"
        else
            gcrypt="no"
        fi
2652 2653 2654
    fi
fi

2655

2656
if test "$nettle" != "no"; then
2657
    if $pkg_config --exists "nettle"; then
2658 2659 2660
        nettle_cflags=$($pkg_config --cflags nettle)
        nettle_libs=$($pkg_config --libs nettle)
        nettle_version=$($pkg_config --modversion nettle)
2661 2662 2663
        libs_softmmu="$nettle_libs $libs_softmmu"
        libs_tools="$nettle_libs $libs_tools"
        QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2664
        nettle="yes"
2665 2666

        cat > $TMPC << EOF
2667
#include <stddef.h>
2668 2669 2670 2671 2672 2673 2674 2675 2676
#include <nettle/pbkdf2.h>
int main(void) {
     pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
     return 0;
}
EOF
        if compile_prog "$nettle_cflags" "$nettle_libs" ; then
            nettle_kdf=yes
        fi
2677
    else
2678 2679 2680 2681 2682
        if test "$nettle" = "yes"; then
            feature_not_found "nettle" "Install nettle devel"
        else
            nettle="no"
        fi
2683 2684 2685
    fi
fi

2686 2687 2688 2689 2690
if test "$gcrypt" = "yes" && test "$nettle" = "yes"
then
    error_exit "Only one of gcrypt & nettle can be enabled"
fi

2691 2692 2693 2694
##########################################
# libtasn1 - only for the TLS creds/session test suite

tasn1=yes
2695 2696
tasn1_cflags=""
tasn1_libs=""
2697
if $pkg_config --exists "libtasn1"; then
2698 2699
    tasn1_cflags=$($pkg_config --cflags libtasn1)
    tasn1_libs=$($pkg_config --libs libtasn1)
2700 2701 2702 2703
else
    tasn1=no
fi

2704

2705 2706 2707 2708 2709 2710 2711 2712
##########################################
# getifaddrs (for tests/test-io-channel-socket )

have_ifaddrs_h=yes
if ! check_include "ifaddrs.h" ; then
  have_ifaddrs_h=no
fi

S
Stefan Weil 已提交
2713 2714 2715 2716 2717
##########################################
# VTE probe

if test "$vte" != "no"; then
    if test "$gtkabi" = "3.0"; then
C
Cole Robinson 已提交
2718 2719 2720 2721 2722 2723
      vteminversion="0.32.0"
      if $pkg_config --exists "vte-2.91"; then
        vtepackage="vte-2.91"
      else
        vtepackage="vte-2.90"
      fi
2724 2725
    else
      vtepackage="vte"
C
Cole Robinson 已提交
2726
      vteminversion="0.24.0"
2727
    fi
C
Cole Robinson 已提交
2728
    if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2729 2730 2731
        vte_cflags=$($pkg_config --cflags $vtepackage)
        vte_libs=$($pkg_config --libs $vtepackage)
        vteversion=$($pkg_config --modversion $vtepackage)
S
Stefan Weil 已提交
2732 2733 2734
        libs_softmmu="$vte_libs $libs_softmmu"
        vte="yes"
    elif test "$vte" = "yes"; then
2735
        if test "$gtkabi" = "3.0"; then
C
Cole Robinson 已提交
2736
            feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2737 2738 2739
        else
            feature_not_found "vte" "Install libvte devel"
        fi
2740
    else
S
Stefan Weil 已提交
2741
        vte="no"
A
Anthony Liguori 已提交
2742 2743 2744
    fi
fi

B
bellard 已提交
2745 2746 2747
##########################################
# SDL probe

P
Paolo Bonzini 已提交
2748 2749
# Look for sdl configuration program (pkg-config or sdl-config).  Try
# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2750

2751
if test "$sdlabi" = ""; then
G
Gerd Hoffmann 已提交
2752
    if $pkg_config --exists "sdl2"; then
2753
        sdlabi=2.0
G
Gerd Hoffmann 已提交
2754
    elif $pkg_config --exists "sdl"; then
2755
        sdlabi=1.2
G
Gerd Hoffmann 已提交
2756 2757
    else
        sdlabi=2.0
2758 2759 2760
    fi
fi

2761 2762 2763 2764
if test $sdlabi = "2.0"; then
    sdl_config=$sdl2_config
    sdlname=sdl2
    sdlconfigname=sdl2_config
2765
elif test $sdlabi = "1.2"; then
2766 2767
    sdlname=sdl
    sdlconfigname=sdl_config
2768 2769
else
    error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2770 2771
fi

2772
if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2773
  sdl_config=$sdlconfigname
P
Paolo Bonzini 已提交
2774 2775
fi

2776 2777
if $pkg_config $sdlname --exists; then
  sdlconfig="$pkg_config $sdlname"
2778
  sdlversion=$($sdlconfig --modversion 2>/dev/null)
P
Paolo Bonzini 已提交
2779 2780
elif has ${sdl_config}; then
  sdlconfig="$sdl_config"
2781
  sdlversion=$($sdlconfig --version)
2782 2783
else
  if test "$sdl" = "yes" ; then
G
Gerd Hoffmann 已提交
2784
    feature_not_found "sdl" "Install SDL2-devel"
2785 2786
  fi
  sdl=no
2787
fi
2788
if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
P
Paolo Bonzini 已提交
2789 2790
  echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
fi
B
bellard 已提交
2791

2792
sdl_too_old=no
2793
if test "$sdl" != "no" ; then
J
Juan Quintela 已提交
2794
  cat > $TMPC << EOF
B
bellard 已提交
2795 2796 2797 2798
#include <SDL.h>
#undef main /* We don't want SDL to override our main() */
int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
EOF
2799
  sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2800
  if test "$static" = "yes" ; then
2801 2802 2803 2804 2805
    if $pkg_config $sdlname --exists; then
      sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
    else
      sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
    fi
2806
  else
2807
    sdl_libs=$($sdlconfig --libs 2>/dev/null)
2808
  fi
2809
  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2810
    if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
J
Juan Quintela 已提交
2811 2812
      sdl_too_old=yes
    else
2813
      sdl=yes
J
Juan Quintela 已提交
2814
    fi
A
aliguori 已提交
2815

2816
    # static link with sdl ? (note: sdl.pc's --static --libs is broken)
J
Juan Quintela 已提交
2817
    if test "$sdl" = "yes" -a "$static" = "yes" ; then
2818
      if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2819 2820
         sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
         sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
J
Juan Quintela 已提交
2821
      fi
2822
      if compile_prog "$sdl_cflags" "$sdl_libs" ; then
J
Juan Quintela 已提交
2823 2824 2825 2826 2827
	:
      else
        sdl=no
      fi
    fi # static link
2828 2829
  else # sdl not found
    if test "$sdl" = "yes" ; then
2830
      feature_not_found "sdl" "Install SDL devel"
2831 2832
    fi
    sdl=no
J
Juan Quintela 已提交
2833
  fi # sdl compile test
2834
fi
B
bellard 已提交
2835

2836
if test "$sdl" = "yes" ; then
J
Juan Quintela 已提交
2837
  cat > $TMPC <<EOF
2838 2839 2840 2841 2842 2843 2844 2845
#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
2846 2847 2848
  if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
    sdl_cflags="$sdl_cflags $x11_cflags"
    sdl_libs="$sdl_libs $x11_libs"
J
Juan Quintela 已提交
2849
  fi
2850 2851
fi

M
Michael R. Hines 已提交
2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874
##########################################
# 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"
  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

B
Benoît Canet 已提交
2875

2876 2877
##########################################
# VNC SASL detection
J
Jes Sorensen 已提交
2878
if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2879
  cat > $TMPC <<EOF
2880 2881 2882 2883
#include <sasl/sasl.h>
#include <stdio.h>
int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
EOF
2884 2885 2886 2887 2888 2889
  # 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 已提交
2890
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2891 2892
  else
    if test "$vnc_sasl" = "yes" ; then
2893
      feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2894
    fi
2895 2896
    vnc_sasl=no
  fi
2897 2898
fi

2899 2900
##########################################
# VNC JPEG detection
J
Jes Sorensen 已提交
2901
if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2902 2903 2904 2905 2906 2907 2908 2909 2910 2911
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 已提交
2912
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2913 2914
  else
    if test "$vnc_jpeg" = "yes" ; then
2915
      feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2916 2917 2918 2919 2920
    fi
    vnc_jpeg=no
  fi
fi

C
Corentin Chary 已提交
2921 2922
##########################################
# VNC PNG detection
J
Jes Sorensen 已提交
2923
if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
C
Corentin Chary 已提交
2924 2925 2926
cat > $TMPC <<EOF
//#include <stdio.h>
#include <png.h>
S
Scott Wood 已提交
2927
#include <stddef.h>
C
Corentin Chary 已提交
2928 2929 2930
int main(void) {
    png_structp png_ptr;
    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2931
    return png_ptr != 0;
C
Corentin Chary 已提交
2932 2933
}
EOF
2934
  if $pkg_config libpng --exists; then
2935 2936
    vnc_png_cflags=$($pkg_config libpng --cflags)
    vnc_png_libs=$($pkg_config libpng --libs)
2937
  else
C
Corentin Chary 已提交
2938 2939
    vnc_png_cflags=""
    vnc_png_libs="-lpng"
2940
  fi
C
Corentin Chary 已提交
2941 2942 2943
  if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
    vnc_png=yes
    libs_softmmu="$vnc_png_libs $libs_softmmu"
2944
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
C
Corentin Chary 已提交
2945 2946
  else
    if test "$vnc_png" = "yes" ; then
2947
      feature_not_found "vnc-png" "Install libpng devel"
C
Corentin Chary 已提交
2948 2949 2950 2951 2952
    fi
    vnc_png=no
  fi
fi

G
Gerd Hoffmann 已提交
2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967
##########################################
# xkbcommon probe
if test "$xkbcommon" != "no" ; then
  if $pkg_config xkbcommon --exists; then
    xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
    xkbcommon_libs=$($pkg_config xkbcommon --libs)
    xkbcommon=yes
  else
    if test "$xkbcommon" = "yes" ; then
      feature_not_found "xkbcommon" "Install libxkbcommon-devel"
    fi
    xkbcommon=no
  fi
fi

2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978
##########################################
# fnmatch() probe, used for ACL routines
fnmatch="no"
cat > $TMPC << EOF
#include <fnmatch.h>
int main(void)
{
    fnmatch("foo", "foo", 0);
    return 0;
}
EOF
2979
if compile_prog "" "" ; then
2980 2981 2982
   fnmatch="yes"
fi

2983
##########################################
2984
# xfsctl() probe, used for file-posix.c
C
Christoph Hellwig 已提交
2985 2986
if test "$xfs" != "no" ; then
  cat > $TMPC << EOF
2987
#include <stddef.h>  /* NULL */
C
Christoph Hellwig 已提交
2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998
#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
2999
      feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
C
Christoph Hellwig 已提交
3000 3001 3002 3003 3004
    fi
    xfs=no
  fi
fi

3005 3006
##########################################
# vde libraries probe
3007
if test "$vde" != "no" ; then
J
Juan Quintela 已提交
3008
  vde_libs="-lvdeplug"
3009 3010
  cat > $TMPC << EOF
#include <libvdeplug.h>
P
pbrook 已提交
3011 3012 3013
int main(void)
{
    struct vde_open_args a = {0, 0, 0};
3014 3015
    char s[] = "";
    vde_open(s, s, &a);
P
pbrook 已提交
3016 3017
    return 0;
}
3018
EOF
3019
  if compile_prog "" "$vde_libs" ; then
J
Juan Quintela 已提交
3020
    vde=yes
3021 3022
  else
    if test "$vde" = "yes" ; then
3023
      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3024 3025
    fi
    vde=no
J
Juan Quintela 已提交
3026
  fi
3027 3028
fi

3029
##########################################
3030 3031 3032 3033 3034 3035
# 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.
3036 3037 3038 3039 3040 3041
if test "$netmap" != "no" ; then
  cat > $TMPC << EOF
#include <inttypes.h>
#include <net/if.h>
#include <net/netmap.h>
#include <net/netmap_user.h>
3042 3043 3044
#if (NETMAP_API < 11) || (NETMAP_API > 15)
#error
#endif
3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056
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

3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073
##########################################
# 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
3074
      feature_not_found "cap_ng" "Install libcap-ng devel"
3075 3076 3077 3078 3079
    fi
    cap_ng=no
  fi
fi

3080
##########################################
3081
# Sound support libraries probe
3082

3083 3084 3085 3086 3087 3088 3089 3090 3091 3092
audio_drv_probe()
{
    drv=$1
    hdr=$2
    lib=$3
    exp=$4
    cfl=$5
        cat > $TMPC << EOF
#include <$hdr>
int main(void) { $exp }
3093
EOF
3094
    if compile_prog "$cfl" "$lib" ; then
3095 3096
        :
    else
3097 3098
        error_exit "$drv check failed" \
            "Make sure to have the $drv libs and headers installed."
3099 3100 3101
    fi
}

3102
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3103 3104 3105 3106
for drv in $audio_drv_list; do
    case $drv in
    alsa)
    audio_drv_probe $drv alsa/asoundlib.h -lasound \
3107
        "return snd_pcm_close((snd_pcm_t *)0);"
3108
    alsa_libs="-lasound"
3109 3110
    ;;

M
malc 已提交
3111
    pa)
3112 3113
    audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
        "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
3114
    pulse_libs="-lpulse"
3115
    audio_pt_int="yes"
M
malc 已提交
3116 3117
    ;;

G
Gerd Hoffmann 已提交
3118 3119 3120 3121 3122 3123
    sdl)
    if test "$sdl" = "no"; then
        error_exit "sdl not found or disabled, can not use sdl audio driver"
    fi
    ;;

3124
    coreaudio)
3125
      coreaudio_libs="-framework CoreAudio"
3126 3127
    ;;

3128
    dsound)
3129
      dsound_libs="-lole32 -ldxguid"
3130
      audio_win_int="yes"
3131 3132 3133
    ;;

    oss)
3134
      oss_libs="$oss_lib"
3135 3136
    ;;

G
Gerd Hoffmann 已提交
3137 3138
    wav)
    # XXX: Probes for CoreAudio, DirectSound
B
blueswir1 已提交
3139 3140
    ;;

M
malc 已提交
3141
    *)
M
malc 已提交
3142
    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3143 3144
        error_exit "Unknown driver '$drv' selected" \
            "Possible drivers are: $audio_possible_drivers"
M
malc 已提交
3145 3146
    }
    ;;
3147 3148
    esac
done
3149

A
aurel32 已提交
3150 3151 3152
##########################################
# BrlAPI probe

3153
if test "$brlapi" != "no" ; then
J
Juan Quintela 已提交
3154 3155
  brlapi_libs="-lbrlapi"
  cat > $TMPC << EOF
A
aurel32 已提交
3156
#include <brlapi.h>
S
Scott Wood 已提交
3157
#include <stddef.h>
A
aurel32 已提交
3158 3159
int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
EOF
3160
  if compile_prog "" "$brlapi_libs" ; then
J
Juan Quintela 已提交
3161
    brlapi=yes
3162 3163
  else
    if test "$brlapi" = "yes" ; then
3164
      feature_not_found "brlapi" "Install brlapi devel"
3165 3166
    fi
    brlapi=no
J
Juan Quintela 已提交
3167 3168
  fi
fi
A
aurel32 已提交
3169

B
balrog 已提交
3170 3171
##########################################
# curses probe
3172 3173
if test "$curses" != "no" ; then
  if test "$mingw32" = "yes" ; then
3174 3175
    curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
    curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3176
  else
S
Samuel Thibault 已提交
3177
    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3178
    curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3179
  fi
3180
  curses_found=no
B
balrog 已提交
3181
  cat > $TMPC << EOF
3182
#include <locale.h>
B
balrog 已提交
3183
#include <curses.h>
3184
#include <wchar.h>
3185
int main(void) {
3186 3187
  wchar_t wch = L'w';
  setlocale(LC_ALL, "");
3188
  resize_term(0, 0);
3189 3190
  addwstr(L"wide chars\n");
  addnwstr(&wch, 1);
S
Samuel Thibault 已提交
3191
  add_wch(WACS_DEGREE);
3192
  return 0;
3193
}
B
balrog 已提交
3194
EOF
3195
  IFS=:
3196
  for curses_inc in $curses_inc_list; do
3197 3198
    # Make sure we get the wide character prototypes
    curses_inc="-DNCURSES_WIDECHAR $curses_inc"
S
Samuel Thibault 已提交
3199
    IFS=:
3200 3201 3202 3203 3204 3205 3206 3207 3208
    for curses_lib in $curses_lib_list; do
      unset IFS
      if compile_prog "$curses_inc" "$curses_lib" ; then
        curses_found=yes
        QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
        libs_softmmu="$curses_lib $libs_softmmu"
        break
      fi
    done
S
Samuel Thibault 已提交
3209 3210 3211
    if test "$curses_found" = yes ; then
      break
    fi
3212
  done
3213
  unset IFS
3214 3215 3216 3217
  if test "$curses_found" = "yes" ; then
    curses=yes
  else
    if test "$curses" = "yes" ; then
3218
      feature_not_found "curses" "Install ncurses devel"
3219 3220 3221
    fi
    curses=no
  fi
3222
fi
B
balrog 已提交
3223

A
Alexander Graf 已提交
3224 3225
##########################################
# curl probe
3226
if test "$curl" != "no" ; then
3227
  if $pkg_config libcurl --exists; then
3228 3229 3230 3231
    curlconfig="$pkg_config libcurl"
  else
    curlconfig=curl-config
  fi
A
Alexander Graf 已提交
3232 3233
  cat > $TMPC << EOF
#include <curl/curl.h>
3234
int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
A
Alexander Graf 已提交
3235
EOF
3236 3237
  curl_cflags=$($curlconfig --cflags 2>/dev/null)
  curl_libs=$($curlconfig --libs 2>/dev/null)
J
Juan Quintela 已提交
3238
  if compile_prog "$curl_cflags" "$curl_libs" ; then
A
Alexander Graf 已提交
3239
    curl=yes
3240 3241
  else
    if test "$curl" = "yes" ; then
3242
      feature_not_found "curl" "Install libcurl devel"
3243 3244
    fi
    curl=no
A
Alexander Graf 已提交
3245 3246 3247
  fi
fi # test "$curl"

B
balrog 已提交
3248 3249
##########################################
# bluez support probe
3250
if test "$bluez" != "no" ; then
3251 3252 3253 3254
  cat > $TMPC << EOF
#include <bluetooth/bluetooth.h>
int main(void) { return bt_error(0); }
EOF
3255 3256
  bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
  bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3257
  if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3258
    bluez=yes
3259
    libs_softmmu="$bluez_libs $libs_softmmu"
3260
  else
3261
    if test "$bluez" = "yes" ; then
3262
      feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3263
    fi
3264 3265
    bluez="no"
  fi
B
balrog 已提交
3266 3267
fi

3268 3269
##########################################
# glib support probe
3270

3271 3272 3273 3274 3275
if test "$mingw32" = yes; then
    glib_req_ver=2.30
else
    glib_req_ver=2.22
fi
3276 3277 3278 3279
glib_modules=gthread-2.0
if test "$modules" = yes; then
    glib_modules="$glib_modules gmodule-2.0"
fi
F
Fam Zheng 已提交
3280

3281 3282 3283 3284 3285 3286 3287
# This workaround is required due to a bug in pkg-config file for glib as it
# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static

if test "$static" = yes -a "$mingw32" = yes; then
    QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
fi

3288
for i in $glib_modules; do
F
Fam Zheng 已提交
3289
    if $pkg_config --atleast-version=$glib_req_ver $i; then
3290 3291
        glib_cflags=$($pkg_config --cflags $i)
        glib_libs=$($pkg_config --libs $i)
3292
        QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
F
Fam Zheng 已提交
3293 3294 3295 3296 3297 3298 3299
        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

3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316
# Sanity check that the current size_t matches the
# size that glib thinks it should be. This catches
# problems on multi-arch where people try to build
# 32-bit QEMU while pointing at 64-bit glib headers
cat > $TMPC <<EOF
#include <glib.h>
#include <unistd.h>

#define QEMU_BUILD_BUG_ON(x) \
  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));

int main(void) {
   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
   return 0;
}
EOF

3317
if ! compile_prog "$CFLAGS" "$LIBS" ; then
3318 3319 3320 3321 3322 3323
    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
               "You probably need to set PKG_CONFIG_LIBDIR"\
	       "to point to the right pkg-config files for your"\
	       "build target"
fi

3324 3325
# g_test_trap_subprocess added in 2.38. Used by some tests.
glib_subprocess=yes
3326
if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3327 3328 3329
    glib_subprocess=no
fi

3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341
# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
cat > $TMPC << EOF
#include <glib.h>
int main(void) { return 0; }
EOF
if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
    if cc_has_warning_flag "-Wno-unknown-attributes"; then
        glib_cflags="-Wno-unknown-attributes $glib_cflags"
        CFLAGS="-Wno-unknown-attributes $CFLAGS"
    fi
fi

F
Fam Zheng 已提交
3342 3343 3344 3345 3346
##########################################
# SHA command probe for modules
if test "$modules" = yes; then
    shacmd_probe="sha1sum sha1 shasum"
    for c in $shacmd_probe; do
F
Fam Zheng 已提交
3347
        if has $c; then
F
Fam Zheng 已提交
3348 3349 3350 3351 3352 3353 3354
            shacmd="$c"
            break
        fi
    done
    if test "$shacmd" = ""; then
        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
    fi
3355 3356
fi

3357 3358 3359
##########################################
# pixman support probe

G
Gerd Hoffmann 已提交
3360
if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3361 3362
  pixman_cflags=
  pixman_libs=
G
Gerd Hoffmann 已提交
3363
elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3364 3365
  pixman_cflags=$($pkg_config --cflags pixman-1)
  pixman_libs=$($pkg_config --libs pixman-1)
3366
else
G
Gerd Hoffmann 已提交
3367 3368
  error_exit "pixman >= 0.21.8 not present." \
      "Please install the pixman devel package."
3369 3370
fi

3371 3372 3373 3374 3375 3376 3377 3378 3379
##########################################
# libmpathpersist probe

if test "$mpath" != "no" ; then
  cat > $TMPC <<EOF
#include <libudev.h>
#include <mpath_persist.h>
unsigned mpath_mx_alloc_len = 1024;
int logsink;
3380 3381 3382 3383 3384 3385 3386 3387
static struct config *multipath_conf;
extern struct udev *udev;
extern struct config *get_multipath_config(void);
extern void put_multipath_config(struct config *conf);
struct udev *udev;
struct config *get_multipath_config(void) { return multipath_conf; }
void put_multipath_config(struct config *conf) { }

3388
int main(void) {
3389 3390
    udev = udev_new();
    multipath_conf = mpath_lib_init();
3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402
    return 0;
}
EOF
  if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
    mpathpersist=yes
  else
    mpathpersist=no
  fi
else
  mpathpersist=no
fi

3403 3404 3405 3406 3407 3408 3409
##########################################
# libcap probe

if test "$cap" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
#include <sys/capability.h>
3410
int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3411 3412 3413 3414 3415 3416 3417 3418
EOF
  if compile_prog "" "-lcap" ; then
    cap=yes
  else
    cap=no
  fi
fi

3419
##########################################
3420
# pthread probe
3421
PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3422

C
Christoph Hellwig 已提交
3423
pthread=no
3424
cat > $TMPC << EOF
3425
#include <pthread.h>
3426 3427 3428 3429 3430 3431
static void *f(void *p) { return NULL; }
int main(void) {
  pthread_t thread;
  pthread_create(&thread, 0, f, 0);
  return 0;
}
3432
EOF
3433 3434 3435 3436 3437 3438
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 已提交
3439 3440 3441 3442 3443 3444 3445 3446 3447 3448
      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
3449
      PTHREAD_LIB="$pthread_lib"
3450 3451 3452 3453
      break
    fi
  done
fi
3454

3455
if test "$mingw32" != yes -a "$pthread" = no; then
3456 3457
  error_exit "pthread check failed" \
      "Make sure to have the pthread libs and headers installed."
3458 3459
fi

3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477
# 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

3478 3479 3480 3481 3482
##########################################
# rbd probe
if test "$rbd" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
3483
#include <rbd/librbd.h>
3484
int main(void) {
3485 3486
    rados_t cluster;
    rados_create(&cluster, NULL);
3487 3488 3489
    return 0;
}
EOF
3490 3491 3492
  rbd_libs="-lrbd -lrados"
  if compile_prog "" "$rbd_libs" ; then
    rbd=yes
3493 3494
  else
    if test "$rbd" = "yes" ; then
3495
      feature_not_found "rados block device" "Install librbd/ceph devel"
3496 3497 3498 3499 3500
    fi
    rbd=no
  fi
fi

3501 3502
##########################################
# libssh2 probe
3503
min_libssh2_version=1.2.8
3504
if test "$libssh2" != "no" ; then
3505
  if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3506 3507
    libssh2_cflags=$($pkg_config libssh2 --cflags)
    libssh2_libs=$($pkg_config libssh2 --libs)
3508 3509 3510
    libssh2=yes
  else
    if test "$libssh2" = "yes" ; then
3511
      error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3512 3513 3514 3515 3516
    fi
    libssh2=no
  fi
fi

3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541
##########################################
# 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

3542 3543 3544 3545 3546 3547 3548
##########################################
# linux-aio probe

if test "$linux_aio" != "no" ; then
  cat > $TMPC <<EOF
#include <libaio.h>
#include <sys/eventfd.h>
S
Scott Wood 已提交
3549
#include <stddef.h>
3550 3551 3552 3553 3554 3555
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
3556
      feature_not_found "linux AIO" "Install libaio devel"
3557
    fi
3558
    linux_aio=no
3559 3560 3561
  fi
fi

P
Paolo Bonzini 已提交
3562 3563 3564 3565 3566 3567 3568 3569 3570
##########################################
# 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

3571 3572 3573 3574 3575 3576
# TPM emulator is for all posix systems
if test "$mingw32" != "yes"; then
  tpm_emulator=$tpm
else
  tpm_emulator=no
fi
3577 3578 3579 3580 3581 3582 3583
##########################################
# attr probe

if test "$attr" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
#include <sys/types.h>
P
Pavel Borzenkov 已提交
3584 3585 3586
#ifdef CONFIG_LIBATTR
#include <attr/xattr.h>
#else
3587
#include <sys/xattr.h>
P
Pavel Borzenkov 已提交
3588
#endif
3589 3590
int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
EOF
3591 3592 3593
  if compile_prog "" "" ; then
    attr=yes
  # Older distros have <attr/xattr.h>, and need -lattr:
P
Pavel Borzenkov 已提交
3594
  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3595 3596
    attr=yes
    LIBS="-lattr $LIBS"
3597
    libattr=yes
3598 3599
  else
    if test "$attr" = "yes" ; then
3600
      feature_not_found "ATTR" "Install libc6 or libattr devel"
3601 3602 3603 3604 3605
    fi
    attr=no
  fi
fi

A
aliguori 已提交
3606 3607 3608
##########################################
# iovec probe
cat > $TMPC <<EOF
B
blueswir1 已提交
3609
#include <sys/types.h>
A
aliguori 已提交
3610
#include <sys/uio.h>
B
blueswir1 已提交
3611
#include <unistd.h>
3612
int main(void) { return sizeof(struct iovec); }
A
aliguori 已提交
3613 3614
EOF
iovec=no
3615
if compile_prog "" "" ; then
A
aliguori 已提交
3616 3617 3618
  iovec=yes
fi

3619 3620 3621 3622 3623 3624
##########################################
# preadv probe
cat > $TMPC <<EOF
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
3625
int main(void) { return preadv(0, 0, 0, 0); }
3626 3627
EOF
preadv=no
3628
if compile_prog "" "" ; then
3629 3630 3631
  preadv=yes
fi

3632 3633
##########################################
# fdt probe
3634 3635 3636 3637 3638
# 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
P
Paul Burton 已提交
3639
    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653
      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

3654
if test "$fdt" != "no" ; then
J
Juan Quintela 已提交
3655
  fdt_libs="-lfdt"
3656
  # explicitly check for libfdt_env.h as it is missing in some stable installs
P
Paul Burton 已提交
3657
  # and test for required functions to make sure we are on a version >= 1.4.2
J
Juan Quintela 已提交
3658
  cat > $TMPC << EOF
3659
#include <libfdt.h>
3660
#include <libfdt_env.h>
P
Paul Burton 已提交
3661
int main(void) { fdt_first_subnode(0, 0); return 0; }
3662
EOF
3663
  if compile_prog "" "$fdt_libs" ; then
3664
    # system DTC is good - use it
3665
    fdt=yes
3666
  else
3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689
      # have GIT checkout, so activate dtc submodule
      if test -e "${source_path}/.git" ; then
          git_submodules="${git_submodules} dtc"
      fi
      if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
          fdt=yes
          dtc_internal="yes"
          mkdir -p dtc
          if [ "$pwd_is_source_path" != "y" ] ; then
              symlink "$source_path/dtc/Makefile" "dtc/Makefile"
              symlink "$source_path/dtc/scripts" "dtc/scripts"
          fi
          fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
          fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
      elif test "$fdt" = "yes" ; then
          # Not a git build & no libfdt found, prompt for system install
          error_exit "DTC (libfdt) version >= 1.4.2 not present." \
                     "Please install the DTC (libfdt) devel package"
      else
          # don't have and don't want
          fdt_libs=
          fdt=no
      fi
3690 3691 3692
  fi
fi

3693 3694
libs_softmmu="$libs_softmmu $fdt_libs"

M
Michael Walle 已提交
3695
##########################################
3696
# opengl probe (for sdl2, gtk, milkymist-tmu2)
G
Gerd Hoffmann 已提交
3697

G
Gerd Hoffmann 已提交
3698
if test "$opengl" != "no" ; then
3699
  opengl_pkgs="epoxy libdrm gbm"
3700
  if $pkg_config $opengl_pkgs x11; then
3701 3702
    opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
    opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
G
Gerd Hoffmann 已提交
3703
    opengl=yes
3704 3705 3706
    if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
        gtk_gl="yes"
    fi
G
Gerd Hoffmann 已提交
3707
    QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
M
Michael Walle 已提交
3708
  else
G
Gerd Hoffmann 已提交
3709
    if test "$opengl" = "yes" ; then
G
Gerd Hoffmann 已提交
3710
      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
M
Michael Walle 已提交
3711
    fi
3712
    opengl_cflags=""
G
Gerd Hoffmann 已提交
3713 3714
    opengl_libs=""
    opengl=no
M
Michael Walle 已提交
3715 3716 3717
  fi
fi

3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729
if test "$opengl" = "yes"; then
  cat > $TMPC << EOF
#include <epoxy/egl.h>
#ifndef EGL_MESA_image_dma_buf_export
# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
#endif
int main(void) { return 0; }
EOF
  if compile_prog "" "" ; then
    opengl_dmabuf=yes
  fi
fi
3730 3731


3732 3733 3734
##########################################
# glusterfs probe
if test "$glusterfs" != "no" ; then
3735
  if $pkg_config --atleast-version=3 glusterfs-api; then
3736
    glusterfs="yes"
3737 3738
    glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
    glusterfs_libs=$($pkg_config --libs glusterfs-api)
3739 3740 3741
    if $pkg_config --atleast-version=4 glusterfs-api; then
      glusterfs_xlator_opt="yes"
    fi
3742
    if $pkg_config --atleast-version=5 glusterfs-api; then
3743 3744
      glusterfs_discard="yes"
    fi
3745
    if $pkg_config --atleast-version=6 glusterfs-api; then
3746
      glusterfs_fallocate="yes"
3747 3748
      glusterfs_zerofill="yes"
    fi
3749 3750
  else
    if test "$glusterfs" = "yes" ; then
3751 3752
      feature_not_found "GlusterFS backend support" \
          "Install glusterfs-api devel >= 3"
3753
    fi
3754
    glusterfs="no"
3755 3756 3757
  fi
fi

A
aurel32 已提交
3758
# Check for inotify functions when we are building linux-user
3759 3760 3761 3762 3763
# 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
3764
cat > $TMPC << EOF
3765 3766 3767 3768 3769 3770
#include <sys/inotify.h>

int
main(void)
{
	/* try to start inotify */
A
aurel32 已提交
3771
	return inotify_init();
3772 3773
}
EOF
3774
if compile_prog "" "" ; then
3775
  inotify=yes
3776 3777
fi

3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792
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 已提交
3793 3794 3795 3796 3797 3798 3799 3800 3801
# check if pipe2 is there
pipe2=no
cat > $TMPC << EOF
#include <unistd.h>
#include <fcntl.h>

int main(void)
{
    int pipefd[2];
3802
    return pipe2(pipefd, O_CLOEXEC);
R
Riku Voipio 已提交
3803 3804
}
EOF
3805
if compile_prog "" "" ; then
R
Riku Voipio 已提交
3806 3807 3808
  pipe2=yes
fi

K
Kevin Wolf 已提交
3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824
# 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

3825 3826 3827 3828 3829 3830 3831 3832 3833
# 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)
{
3834
    int len, fd = 0;
3835 3836 3837 3838 3839
    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
    return 0;
}
EOF
3840
if compile_prog "" "" ; then
3841 3842 3843
  splice=yes
fi

3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863
##########################################
# 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

3864 3865 3866 3867 3868
if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
    exit 1
fi

3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892
# Even if malloc_trim() is available, these non-libc memory allocators
# do not support it.
if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
    if test "$malloc_trim" = "yes" ; then
        echo "Disabling malloc_trim with non-libc memory allocator"
    fi
    malloc_trim="no"
fi

#######################################
# malloc_trim

if test "$malloc_trim" != "no" ; then
    cat > $TMPC << EOF
#include <malloc.h>
int main(void) { malloc_trim(0); return 0; }
EOF
    if compile_prog "" "" ; then
        malloc_trim="yes"
    else
        malloc_trim="no"
    fi
fi

F
Fam Zheng 已提交
3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908
##########################################
# tcmalloc probe

if test "$tcmalloc" = "yes" ; then
  cat > $TMPC << EOF
#include <stdlib.h>
int main(void) { malloc(1); return 0; }
EOF

  if compile_prog "" "-ltcmalloc" ; then
    LIBS="-ltcmalloc $LIBS"
  else
    feature_not_found "tcmalloc" "install gperftools devel"
  fi
fi

3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924
##########################################
# jemalloc probe

if test "$jemalloc" = "yes" ; then
  cat > $TMPC << EOF
#include <stdlib.h>
int main(void) { malloc(1); return 0; }
EOF

  if compile_prog "" "-ljemalloc" ; then
    LIBS="-ljemalloc $LIBS"
  else
    feature_not_found "jemalloc" "install jemalloc devel"
  fi
fi

M
Marcelo Tosatti 已提交
3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938
##########################################
# 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 已提交
3939 3940 3941 3942 3943 3944 3945
# check if eventfd is supported
eventfd=no
cat > $TMPC << EOF
#include <sys/eventfd.h>

int main(void)
{
3946
    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
R
Riku Voipio 已提交
3947 3948 3949 3950 3951 3952
}
EOF
if compile_prog "" "" ; then
  eventfd=yes
fi

M
Marc-André Lureau 已提交
3953 3954 3955
# check if memfd is supported
memfd=no
cat > $TMPC << EOF
P
Paolo Bonzini 已提交
3956
#include <sys/mman.h>
M
Marc-André Lureau 已提交
3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968

int main(void)
{
    return memfd_create("foo", MFD_ALLOW_SEALING);
}
EOF
if compile_prog "" "" ; then
  memfd=yes
fi



3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979
# check for fallocate
fallocate=no
cat > $TMPC << EOF
#include <fcntl.h>

int main(void)
{
    fallocate(0, 0, 0, 0);
    return 0;
}
EOF
3980
if compile_prog "" "" ; then
3981 3982 3983
  fallocate=yes
fi

3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999
# 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

4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015
# check that fallocate supports range zeroing inside the file
fallocate_zero_range=no
cat > $TMPC << EOF
#include <fcntl.h>
#include <linux/falloc.h>

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

4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030
# check for posix_fallocate
posix_fallocate=no
cat > $TMPC << EOF
#include <fcntl.h>

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

4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041
# 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
4042
if compile_prog "" "" ; then
4043 4044 4045
  sync_file_range=yes
fi

4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058
# 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
4059
if compile_prog "" "" ; then
4060 4061 4062
  fiemap=yes
fi

4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073
# check for dup3
dup3=no
cat > $TMPC << EOF
#include <unistd.h>

int main(void)
{
    dup3(0, 0, 0);
    return 0;
}
EOF
4074
if compile_prog "" "" ; then
4075 4076 4077
  dup3=yes
fi

4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093
# 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

4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108
# 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

4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119
# check for epoll support
epoll=no
cat > $TMPC << EOF
#include <sys/epoll.h>

int main(void)
{
    epoll_create(0);
    return 0;
}
EOF
4120
if compile_prog "" "" ; then
4121 4122 4123
  epoll=yes
fi

4124 4125
# epoll_create1 is a later addition
# so we must check separately for its presence
4126 4127 4128 4129 4130 4131
epoll_create1=no
cat > $TMPC << EOF
#include <sys/epoll.h>

int main(void)
{
4132 4133 4134 4135 4136 4137 4138 4139
    /* 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.)
     */
4140
    return (int)(uintptr_t)&epoll_create1;
4141 4142
}
EOF
4143
if compile_prog "" "" ; then
4144 4145 4146
  epoll_create1=yes
fi

4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160
# 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

4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174
# check for timerfd support (glibc 2.8 and newer)
timerfd=no
cat > $TMPC << EOF
#include <sys/timerfd.h>

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

R
Riku Voipio 已提交
4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191
# check for setns and unshare support
setns=no
cat > $TMPC << EOF
#include <sched.h>

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

4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206
# clock_adjtime probe
clock_adjtime=no
cat > $TMPC <<EOF
#include <time.h>

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

4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221
# syncfs probe
syncfs=no
cat > $TMPC <<EOF
#include <unistd.h>

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

4222
# Check if tools are available to build documentation.
J
Juan Quintela 已提交
4223
if test "$docs" != "no" ; then
4224
  if has makeinfo && has pod2man; then
J
Juan Quintela 已提交
4225
    docs=yes
4226
  else
J
Juan Quintela 已提交
4227
    if test "$docs" = "yes" ; then
4228
      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4229
    fi
J
Juan Quintela 已提交
4230
    docs=no
4231
  fi
4232 4233
fi

S
Stefan Weil 已提交
4234
# Search for bswap_32 function
4235 4236 4237 4238 4239
byteswap_h=no
cat > $TMPC << EOF
#include <byteswap.h>
int main(void) { return bswap_32(0); }
EOF
4240
if compile_prog "" "" ; then
4241 4242 4243
  byteswap_h=yes
fi

4244
# Search for bswap32 function
4245 4246 4247 4248 4249 4250 4251
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
4252
if compile_prog "" "" ; then
4253 4254 4255
  bswap_h=yes
fi

R
Ronnie Sahlberg 已提交
4256
##########################################
4257
# Do we have libiscsi >= 1.9.0
R
Ronnie Sahlberg 已提交
4258
if test "$libiscsi" != "no" ; then
4259
  if $pkg_config --atleast-version=1.9.0 libiscsi; then
4260
    libiscsi="yes"
4261 4262
    libiscsi_cflags=$($pkg_config --cflags libiscsi)
    libiscsi_libs=$($pkg_config --libs libiscsi)
R
Ronnie Sahlberg 已提交
4263 4264
  else
    if test "$libiscsi" = "yes" ; then
4265
      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
R
Ronnie Sahlberg 已提交
4266 4267 4268 4269 4270
    fi
    libiscsi="no"
  fi
fi

4271 4272 4273 4274
##########################################
# Do we need libm
cat > $TMPC << EOF
#include <math.h>
4275
int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4276 4277 4278 4279 4280 4281 4282
EOF
if compile_prog "" "" ; then
  :
elif compile_prog "" "-lm" ; then
  LIBS="-lm $LIBS"
  libs_qga="-lm $libs_qga"
else
4283
  error_exit "libm check failed"
4284 4285
fi

A
aliguori 已提交
4286 4287
##########################################
# Do we need librt
4288 4289 4290 4291
# 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 已提交
4292 4293 4294
cat > $TMPC <<EOF
#include <signal.h>
#include <time.h>
4295 4296 4297 4298
int main(void) {
  timer_create(CLOCK_REALTIME, NULL, NULL);
  return clock_gettime(CLOCK_REALTIME, NULL);
}
A
aliguori 已提交
4299 4300
EOF

4301
if compile_prog "" "" ; then
4302
  :
4303
# we need pthread for static linking. use previous pthread test result
4304 4305 4306
elif compile_prog "" "$pthread_lib -lrt" ; then
  LIBS="$LIBS -lrt"
  libs_qga="$libs_qga -lrt"
A
aliguori 已提交
4307 4308
fi

4309
if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
P
Peter Maydell 已提交
4310
        "$haiku" != "yes" ; then
4311 4312 4313
    libs_softmmu="-lutil $libs_softmmu"
fi

4314
##########################################
4315 4316 4317 4318 4319 4320
# 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 已提交
4321 4322
  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4323 4324
  if $pkg_config --atleast-version=0.12.0 spice-server && \
     $pkg_config --atleast-version=0.12.3 spice-protocol && \
4325 4326 4327 4328
     compile_prog "$spice_cflags" "$spice_libs" ; then
    spice="yes"
    libs_softmmu="$libs_softmmu $spice_libs"
    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4329 4330
    spice_protocol_version=$($pkg_config --modversion spice-protocol)
    spice_server_version=$($pkg_config --modversion spice-server)
4331 4332
  else
    if test "$spice" = "yes" ; then
4333 4334
      feature_not_found "spice" \
          "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4335 4336 4337 4338 4339
    fi
    spice="no"
  fi
fi

4340 4341 4342 4343 4344 4345
# check for smartcard support
if test "$smartcard" != "no"; then
    if $pkg_config libcacard; then
        libcacard_cflags=$($pkg_config --cflags libcacard)
        libcacard_libs=$($pkg_config --libs libcacard)
        smartcard="yes"
P
Paolo Bonzini 已提交
4346
    else
4347 4348
        if test "$smartcard" = "yes"; then
            feature_not_found "smartcard" "Install libcacard devel"
R
Robert Relyea 已提交
4349
        fi
4350
        smartcard="no"
R
Robert Relyea 已提交
4351 4352 4353
    fi
fi

G
Gerd Hoffmann 已提交
4354 4355
# check for libusb
if test "$libusb" != "no" ; then
4356
    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
G
Gerd Hoffmann 已提交
4357
        libusb="yes"
4358 4359
        libusb_cflags=$($pkg_config --cflags libusb-1.0)
        libusb_libs=$($pkg_config --libs libusb-1.0)
G
Gerd Hoffmann 已提交
4360 4361
    else
        if test "$libusb" = "yes"; then
4362
            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
G
Gerd Hoffmann 已提交
4363 4364 4365 4366 4367
        fi
        libusb="no"
    fi
fi

4368 4369
# check for usbredirparser for usb network redirection support
if test "$usb_redir" != "no" ; then
4370
    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4371
        usb_redir="yes"
4372 4373
        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4374 4375
    else
        if test "$usb_redir" = "yes"; then
4376
            feature_not_found "usb-redir" "Install usbredir devel"
4377 4378 4379 4380 4381
        fi
        usb_redir="no"
    fi
fi

4382 4383 4384 4385 4386
##########################################
# 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
4387
    "")   vss_win32_include="-isystem $source_path" ;;
4388 4389
    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
          # handle path with spaces. So we symlink the headers into ".sdk/vss".
4390
          vss_win32_include="-isystem $source_path/.sdk/vss"
4391 4392
	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
	  ;;
4393
    *)    vss_win32_include="-isystem $vss_win32_sdk"
4394 4395 4396 4397 4398 4399 4400 4401 4402
  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"
4403
    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4404
    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437
  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

4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453
##########################################
# check if mingw environment provides a recent ntddscsi.h
if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
  cat > $TMPC << EOF
#include <windows.h>
#include <ntddscsi.h>
int main(void) {
#if !defined(IOCTL_SCSI_GET_ADDRESS)
#error Missing required ioctl definitions
#endif
  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
  return addr.Lun;
}
EOF
  if compile_prog "" "" ; then
    guest_agent_ntddscsi=yes
4454
    libs_qga="-lsetupapi $libs_qga"
4455 4456 4457
  fi
fi

4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478
##########################################
# virgl renderer probe

if test "$virglrenderer" != "no" ; then
  cat > $TMPC << EOF
#include <virglrenderer.h>
int main(void) { virgl_renderer_poll(); return 0; }
EOF
  virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
  virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
  if $pkg_config virglrenderer >/dev/null 2>&1 && \
     compile_prog "$virgl_cflags" "$virgl_libs" ; then
    virglrenderer="yes"
  else
    if test "$virglrenderer" = "yes" ; then
      feature_not_found "virglrenderer"
    fi
    virglrenderer="no"
  fi
fi

4479 4480 4481
##########################################
# capstone

4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519
case "$capstone" in
  "" | yes)
    if $pkg_config capstone; then
      capstone=system
    elif test -e "${source_path}/.git" ; then
      capstone=git
    elif test -e "${source_path}/capstone/Makefile" ; then
      capstone=internal
    elif test -z "$capstone" ; then
      capstone=no
    else
      feature_not_found "capstone" "Install capstone devel or git submodule"
    fi
    ;;

  system)
    if ! $pkg_config capstone; then
      feature_not_found "capstone" "Install capstone devel"
    fi
    ;;
esac

case "$capstone" in
  git | internal)
    if test "$capstone" = git; then
      git_submodules="${git_submodules} capstone"
    fi
    mkdir -p capstone
    QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
    if test "$mingw32" = "yes"; then
      LIBCAPSTONE=capstone.lib
    else
      LIBCAPSTONE=libcapstone.a
    fi
    LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
    ;;

  system)
4520 4521
    QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
    LIBS="$($pkg_config --libs capstone) $LIBS"
4522 4523 4524 4525 4526 4527 4528 4529
    ;;

  no)
    ;;
  *)
    error_exit "Unknown state for capstone: $capstone"
    ;;
esac
4530

B
Blue Swirl 已提交
4531 4532 4533 4534 4535 4536
##########################################
# check if we have fdatasync

fdatasync=no
cat > $TMPC << EOF
#include <unistd.h>
4537 4538 4539 4540
int main(void) {
#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
return fdatasync(0);
#else
4541
#error Not supported
4542 4543
#endif
}
B
Blue Swirl 已提交
4544 4545 4546 4547 4548
EOF
if compile_prog "" "" ; then
    fdatasync=yes
fi

A
Andreas Färber 已提交
4549 4550 4551 4552 4553 4554 4555
##########################################
# check if we have madvise

madvise=no
cat > $TMPC << EOF
#include <sys/types.h>
#include <sys/mman.h>
S
Scott Wood 已提交
4556
#include <stddef.h>
A
Andreas Färber 已提交
4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568
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 已提交
4569
#include <stddef.h>
A
Andreas Färber 已提交
4570 4571 4572 4573 4574 4575
int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
EOF
if compile_prog "" "" ; then
    posix_madvise=yes
fi

P
Paul Durrant 已提交
4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587
##########################################
# check if we have posix_syslog

posix_syslog=no
cat > $TMPC << EOF
#include <syslog.h>
int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
EOF
if compile_prog "" "" ; then
    posix_syslog=yes
fi

4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599
##########################################
# check if we have sem_timedwait

sem_timedwait=no
cat > $TMPC << EOF
#include <semaphore.h>
int main(void) { return sem_timedwait(0, 0); }
EOF
if compile_prog "" "" ; then
    sem_timedwait=yes
fi

4600 4601 4602
##########################################
# check if trace backend exists

L
Lluís Vilanova 已提交
4603
$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4604
if test "$?" -ne 0 ; then
L
Lluís Vilanova 已提交
4605 4606
  error_exit "invalid trace backends" \
      "Please choose supported trace backends."
4607 4608
fi

4609 4610
##########################################
# For 'ust' backend, test if ust headers are present
L
Lluís Vilanova 已提交
4611
if have_backend "ust"; then
4612
  cat > $TMPC << EOF
4613
#include <lttng/tracepoint.h>
4614 4615
int main(void) { return 0; }
EOF
4616
  if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4617
    if $pkg_config lttng-ust --exists; then
4618
      lttng_ust_libs=$($pkg_config --libs lttng-ust)
4619
    else
4620
      lttng_ust_libs="-llttng-ust -ldl"
4621 4622
    fi
    if $pkg_config liburcu-bp --exists; then
4623
      urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4624 4625 4626 4627 4628 4629
    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"
4630
  else
4631
    error_exit "Trace backend 'ust' missing lttng-ust header files"
4632 4633
  fi
fi
4634 4635 4636

##########################################
# For 'dtrace' backend, test if 'dtrace' command is present
L
Lluís Vilanova 已提交
4637
if have_backend "dtrace"; then
4638
  if ! has 'dtrace' ; then
4639
    error_exit "dtrace command is not found in PATH $PATH"
4640
  fi
4641 4642 4643 4644
  trace_backend_stap="no"
  if has 'stap' ; then
    trace_backend_stap="yes"
  fi
4645 4646
fi

W
Wolfgang Mauerer 已提交
4647
##########################################
4648
# check and set a backend for coroutine
4649

4650
# We prefer ucontext, but it's not always possible. The fallback
4651 4652
# is sigcontext. On Windows the only valid backend is the Windows
# specific one.
4653 4654 4655 4656

ucontext_works=no
if test "$darwin" != "yes"; then
  cat > $TMPC << EOF
4657
#include <ucontext.h>
4658 4659 4660
#ifdef __stub_makecontext
#error Ignoring glibc stub makecontext which will always fail
#endif
4661
int main(void) { makecontext(0, 0, 0); return 0; }
4662
EOF
4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674
  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
4675
  fi
4676
else
4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690
  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
    ;;
4691
  sigaltstack)
4692 4693 4694 4695 4696 4697 4698 4699
    if test "$mingw32" = "yes"; then
      error_exit "only the 'windows' coroutine backend is valid for Windows"
    fi
    ;;
  *)
    error_exit "unknown coroutine backend $coroutine"
    ;;
  esac
4700 4701
fi

4702
if test "$coroutine_pool" = ""; then
4703
  coroutine_pool=yes
4704 4705
fi

4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716
if test "$debug_stack_usage" = "yes"; then
  if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
    error_exit "stack usage debugging is not supported for $cpu"
  fi
  if test "$coroutine_pool" = "yes"; then
    echo "WARN: disabling coroutine pool for stack usage debugging"
    coroutine_pool=no
  fi
fi


4717 4718 4719
##########################################
# check if we have open_by_handle_at

S
Stefan Weil 已提交
4720
open_by_handle_at=no
4721 4722
cat > $TMPC << EOF
#include <fcntl.h>
4723 4724 4725
#if !defined(AT_EMPTY_PATH)
# error missing definition
#else
4726
int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4727
#endif
4728 4729 4730 4731 4732
EOF
if compile_prog "" "" ; then
    open_by_handle_at=yes
fi

4733 4734 4735 4736 4737 4738 4739
########################################
# check if we have linux/magic.h

linux_magic_h=no
cat > $TMPC << EOF
#include <linux/magic.h>
int main(void) {
4740
  return 0;
4741 4742 4743 4744 4745 4746
}
EOF
if compile_prog "" "" ; then
    linux_magic_h=yes
fi

4747
########################################
K
Kevin Wolf 已提交
4748 4749 4750 4751 4752 4753 4754 4755
# 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.

4756 4757
pragma_disable_unused_but_set=no
cat > $TMPC << EOF
4758
#pragma GCC diagnostic push
4759
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
K
Kevin Wolf 已提交
4760
#pragma GCC diagnostic ignored "-Wstrict-prototypes"
4761
#pragma GCC diagnostic pop
K
Kevin Wolf 已提交
4762

4763 4764 4765 4766 4767
int main(void) {
    return 0;
}
EOF
if compile_prog "-Werror" "" ; then
4768
    pragma_diagnostic_available=yes
K
Kevin Wolf 已提交
4769 4770
else
    werror=no
4771 4772
fi

4773
########################################
4774
# check if we have valgrind/valgrind.h
4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786

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

4787 4788 4789 4790 4791 4792 4793
########################################
# check if environ is declared

has_environ=no
cat > $TMPC << EOF
#include <unistd.h>
int main(void) {
4794
    environ = 0;
4795 4796 4797 4798 4799 4800 4801
    return 0;
}
EOF
if compile_prog "" "" ; then
    has_environ=yes
fi

4802 4803 4804 4805 4806 4807
########################################
# check if cpuid.h is usable.

cat > $TMPC << EOF
#include <cpuid.h>
int main(void) {
4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819
    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;
4820 4821 4822 4823 4824 4825
}
EOF
if compile_prog "" "" ; then
    cpuid_h=yes
fi

4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848
##########################################
# avx2 optimization requirement check
#
# There is no point enabling this if cpuid.h is not usable,
# since we won't be able to select the new routines.

if test $cpuid_h = yes; then
  cat > $TMPC << EOF
#pragma GCC push_options
#pragma GCC target("avx2")
#include <cpuid.h>
#include <immintrin.h>
static int bar(void *a) {
    __m256i x = *(__m256i *)a;
    return _mm256_testz_si256(x, x);
}
int main(int argc, char *argv[]) { return bar(argv[0]); }
EOF
  if compile_object "" ; then
    avx2_opt="yes"
  fi
fi

4849 4850 4851 4852 4853
########################################
# check if __[u]int128_t is usable.

int128=no
cat > $TMPC << EOF
4854 4855 4856 4857 4858
#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
4859 4860 4861 4862 4863
__int128_t a;
__uint128_t b;
int main (void) {
  a = a + b;
  b = a * b;
4864
  a = a * a;
4865 4866 4867 4868 4869 4870
  return 0;
}
EOF
if compile_prog "" "" ; then
    int128=yes
fi
4871

R
Richard Henderson 已提交
4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891
#########################################
# See if 128-bit atomic operations are supported.

atomic128=no
if test "$int128" = "yes"; then
  cat > $TMPC << EOF
int main(void)
{
  unsigned __int128 x = 0, y = 0;
  y = __atomic_load_16(&x, 0);
  __atomic_store_16(&x, y, 0);
  __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
  return 0;
}
EOF
  if compile_prog "" "" ; then
    atomic128=yes
  fi
fi

R
Richard Henderson 已提交
4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920
#########################################
# See if 64-bit atomic operations are supported.
# Note that without __atomic builtins, we can only
# assume atomic loads/stores max at pointer size.

cat > $TMPC << EOF
#include <stdint.h>
int main(void)
{
  uint64_t x = 0, y = 0;
#ifdef __ATOMIC_RELAXED
  y = __atomic_load_8(&x, 0);
  __atomic_store_8(&x, y, 0);
  __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
  __atomic_exchange_8(&x, y, 0);
  __atomic_fetch_add_8(&x, y, 0);
#else
  typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
  __sync_lock_test_and_set(&x, y);
  __sync_val_compare_and_swap(&x, y, 0);
  __sync_fetch_and_add(&x, y);
#endif
  return 0;
}
EOF
if compile_prog "" "" ; then
  atomic64=yes
fi

4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934
########################################
# 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

4935 4936 4937 4938
########################################
# check if ccache is interfering with
# semantic analysis of macros

4939
unset CCACHE_CPP2
4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962
ccache_cpp2=no
cat > $TMPC << EOF
static const int Z = 1;
#define fn() ({ Z; })
#define TAUT(X) ((X) == Z)
#define PAREN(X, Y) (X == Y)
#define ID(X) (X)
int main(int argc, char *argv[])
{
    int x = 0, y = 0;
    x = ID(x);
    x = fn();
    fn();
    if (PAREN(x, y)) return 0;
    if (TAUT(Z)) return 0;
    return 0;
}
EOF

if ! compile_object "-Werror"; then
    ccache_cpp2=yes
fi

4963 4964 4965 4966 4967 4968
#################################################
# clang does not support glibc + FORTIFY_SOURCE.

if test "$fortify_source" != "no"; then
  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
    fortify_source="no";
4969
  elif test -n "$cxx" && has $cxx &&
J
John Snow 已提交
4970
       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4971 4972 4973 4974 4975 4976
    fortify_source="no";
  else
    fortify_source="yes"
  fi
fi

4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991
##########################################
# check if struct fsxattr is available via linux/fs.h

have_fsxattr=no
cat > $TMPC << EOF
#include <linux/fs.h>
struct fsxattr foo;
int main(void) {
  return 0;
}
EOF
if compile_prog "" "" ; then
    have_fsxattr=yes
fi

4992 4993
##########################################
# check if rtnetlink.h exists and is useful
4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004
have_rtnetlink=no
cat > $TMPC << EOF
#include <linux/rtnetlink.h>
int main(void) {
  return IFLA_PROTO_DOWN;
}
EOF
if compile_prog "" "" ; then
    have_rtnetlink=yes
fi

S
Stefan Hajnoczi 已提交
5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031
##########################################
# check for usable AF_VSOCK environment
have_af_vsock=no
cat > $TMPC << EOF
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#if !defined(AF_VSOCK)
# error missing AF_VSOCK flag
#endif
#include <linux/vm_sockets.h>
int main(void) {
    int sock, ret;
    struct sockaddr_vm svm;
    socklen_t len = sizeof(svm);
    sock = socket(AF_VSOCK, SOCK_STREAM, 0);
    ret = getpeername(sock, (struct sockaddr *)&svm, &len);
    if ((ret == -1) && (errno == ENOTCONN)) {
        return 0;
    }
    return -1;
}
EOF
if compile_prog "" "" ; then
    have_af_vsock=yes
fi

5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057
##########################################
# check for usable AF_ALG environment
hava_afalg=no
cat > $TMPC << EOF
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <linux/if_alg.h>
int main(void) {
    int sock;
    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
    return sock;
}
EOF
if compile_prog "" "" ; then
    have_afalg=yes
fi
if test "$crypto_afalg" = "yes"
then
    if test "$have_afalg" != "yes"
    then
	error_exit "AF_ALG requested but could not be detected"
    fi
fi


5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072
#################################################
# Sparc implicitly links with --relax, which is
# incompatible with -r, so --no-relax should be
# given. It does no harm to give it on other
# platforms too.

# Note: the prototype is needed since QEMU_CFLAGS
#       contains -Wmissing-prototypes
cat > $TMPC << EOF
extern int foo(void);
int foo(void) { return 0; }
EOF
if ! compile_object ""; then
  error_exit "Failed to compile object file for LD_REL_FLAGS test"
fi
5073 5074 5075 5076 5077 5078 5079 5080
for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
  if do_cc -nostdlib $i -o $TMPMO $TMPO; then
    LD_REL_FLAGS=$i
    break
  fi
done
if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
  feature_not_found "modules" "Cannot find how to build relocatable objects"
5081 5082
fi

5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096
##########################################
# check for sysmacros.h

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

5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123
##########################################
# Veritas HyperScale block driver VxHS
# Check if libvxhs is installed

if test "$vxhs" != "no" ; then
  cat > $TMPC <<EOF
#include <stdint.h>
#include <qnio/qnio_api.h>

void *vxhs_callback;

int main(void) {
    iio_init(QNIO_VERSION, vxhs_callback);
    return 0;
}
EOF
  vxhs_libs="-lvxhs -lssl"
  if compile_prog "" "$vxhs_libs" ; then
    vxhs=yes
  else
    if test "$vxhs" = "yes" ; then
      feature_not_found "vxhs block device" "Install libvxhs See github"
    fi
    vxhs=no
  fi
fi

5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137
##########################################
# check for _Static_assert()

have_static_assert=no
cat > $TMPC << EOF
_Static_assert(1, "success");
int main(void) {
    return 0;
}
EOF
if compile_prog "" "" ; then
    have_static_assert=yes
fi

5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152
##########################################
# check for utmpx.h, it is missing e.g. on OpenBSD

have_utmpx=no
cat > $TMPC << EOF
#include <utmpx.h>
struct utmpx user_info;
int main(void) {
    return 0;
}
EOF
if compile_prog "" "" ; then
    have_utmpx=yes
fi

5153
##########################################
5154 5155 5156
# End of CC checks
# After here, no more $cc or $ld runs

B
Blue Swirl 已提交
5157 5158 5159
if test "$gcov" = "yes" ; then
  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5160
elif test "$fortify_source" = "yes" ; then
5161
  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5162 5163
elif test "$debug" = "no"; then
  CFLAGS="-O2 $CFLAGS"
5164
fi
J
Juan Quintela 已提交
5165

P
Peter Lieven 已提交
5166 5167 5168
##########################################
# Do we have libnfs
if test "$libnfs" != "no" ; then
5169
  if $pkg_config --atleast-version=1.9.3 libnfs; then
P
Peter Lieven 已提交
5170 5171 5172 5173
    libnfs="yes"
    libnfs_libs=$($pkg_config --libs libnfs)
  else
    if test "$libnfs" = "yes" ; then
5174
      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
P
Peter Lieven 已提交
5175 5176 5177 5178
    fi
    libnfs="no"
  fi
fi
B
Blue Swirl 已提交
5179

5180 5181 5182 5183 5184
# 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

5185 5186
if test "$solaris" = "no" ; then
    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5187
        LDFLAGS="-Wl,--warn-common $LDFLAGS"
5188 5189 5190
    fi
fi

5191 5192 5193 5194 5195 5196 5197
# test if pod2man has --utf8 option
if pod2man --help | grep -q utf8; then
    POD2MAN="pod2man --utf8"
else
    POD2MAN="pod2man"
fi

5198 5199 5200
# Use ASLR, no-SEH and DEP if available
if test "$mingw32" = "yes" ; then
    for flag in --dynamicbase --no-seh --nxcompat; do
5201
        if ld_has $flag ; then
5202 5203 5204 5205 5206
            LDFLAGS="-Wl,$flag $LDFLAGS"
        fi
    done
fi

5207
qemu_confdir=$sysconfdir$confsuffix
F
Fam Zheng 已提交
5208
qemu_moddir=$libdir$confsuffix
5209
qemu_datadir=$datadir$confsuffix
5210
qemu_localedir="$datadir/locale"
5211

5212 5213 5214 5215 5216
# We can only support ivshmem if we have eventfd
if [ "$eventfd" = "yes" ]; then
  ivshmem=yes
fi

5217 5218
tools=""
if test "$want_tools" = "yes" ; then
5219
  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
5220 5221
  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
    tools="qemu-nbd\$(EXESUF) $tools"
5222 5223
  fi
  if [ "$ivshmem" = "yes" ]; then
5224
    tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5225 5226 5227
  fi
fi
if test "$softmmu" = yes ; then
P
Paolo Bonzini 已提交
5228 5229
  if test "$linux" = yes; then
    if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5230 5231 5232 5233
      virtfs=yes
      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
    else
      if test "$virtfs" = yes; then
P
Paolo Bonzini 已提交
5234
        error_exit "VirtFS requires libcap devel and libattr devel"
5235
      fi
5236
      virtfs=no
5237
    fi
5238 5239 5240 5241 5242 5243 5244 5245
    if test "$mpath" != no && test "$mpathpersist" = yes ; then
      mpath=yes
    else
      if test "$mpath" = yes; then
        error_exit "Multipath requires libmpathpersist devel"
      fi
      mpath=no
    fi
P
Paolo Bonzini 已提交
5246 5247 5248 5249 5250 5251
    tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
  else
    if test "$virtfs" = yes; then
      error_exit "VirtFS is supported only on Linux"
    fi
    virtfs=no
5252 5253 5254 5255
    if test "$mpath" = yes; then
      error_exit "Multipath is supported only on Linux"
    fi
    mpath=no
5256
  fi
5257 5258 5259
  if test "$xkbcommon" = "yes"; then
    tools="qemu-keymap\$(EXESUF) $tools"
  fi
G
Gerd Hoffmann 已提交
5260
fi
5261 5262 5263

# Probe for guest agent support/options

5264
if [ "$guest_agent" != "no" ]; then
5265
  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5266
      tools="qemu-ga $tools"
5267 5268 5269 5270 5271
      guest_agent=yes
  elif [ "$guest_agent" != yes ]; then
      guest_agent=no
  else
      error_exit "Guest agent is not supported on this platform"
5272
  fi
5273
fi
5274

5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291
# Guest agent Window MSI  package

if test "$guest_agent" != yes; then
  if test "$guest_agent_msi" = yes; then
    error_exit "MSI guest agent package requires guest agent enabled"
  fi
  guest_agent_msi=no
elif test "$mingw32" != "yes"; then
  if test "$guest_agent_msi" = "yes"; then
    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
  fi
  guest_agent_msi=no
elif ! has wixl; then
  if test "$guest_agent_msi" = "yes"; then
    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
  fi
  guest_agent_msi=no
5292 5293 5294 5295 5296 5297
else
  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
  # disabled explicitly
  if test "$guest_agent_msi" != "no"; then
    guest_agent_msi=yes
  fi
5298 5299
fi

5300
if test "$guest_agent_msi" = "yes"; then
5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313
  if test "$guest_agent_with_vss" = "yes"; then
    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
  fi

  if test "$QEMU_GA_MANUFACTURER" = ""; then
    QEMU_GA_MANUFACTURER=QEMU
  fi

  if test "$QEMU_GA_DISTRO" = ""; then
    QEMU_GA_DISTRO=Linux
  fi

  if test "$QEMU_GA_VERSION" = ""; then
5314
      QEMU_GA_VERSION=$(cat $source_path/VERSION)
5315 5316
  fi

5317
  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331

  case "$cpu" in
  x86_64)
    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
    ;;
  i386)
    QEMU_GA_MSI_ARCH="-D Arch=32"
    ;;
  *)
    error_exit "CPU $cpu not supported for building installation package"
    ;;
  esac
fi

5332 5333 5334 5335 5336
# 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
5337
    # Different host OS linkers have different ideas about the name of the ELF
5338 5339 5340
    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5341 5342 5343 5344 5345 5346
        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
            ld_i386_emulation="$emu"
            roms="optionrom"
            break
        fi
    done
5347
fi
5348
if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5349 5350
  roms="$roms spapr-rtas"
fi
5351

5352 5353 5354 5355
if test "$cpu" = "s390x" ; then
  roms="$roms s390-ccw"
fi

5356
# Probe for the need for relocating the user-only binary.
5357
if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5358 5359
  textseg_addr=
  case "$cpu" in
5360 5361
    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
      # ??? Rationale for choosing this address
5362 5363 5364
      textseg_addr=0x60000000
      ;;
    mips)
5365 5366 5367
      # 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
5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378
      ;;
  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.
5379 5380 5381 5382 5383 5384 5385 5386 5387 5388
      if ! $ld --verbose >/dev/null 2>&1; then
        error_exit \
            "We need to link the QEMU user mode binaries at a" \
            "specific text address. Unfortunately your linker" \
            "doesn't support either the -Ttext-segment option or" \
            "printing the default linker script with --verbose." \
            "If you don't want the user mode binaries, pass the" \
            "--disable-user option to configure."
      fi

5389 5390 5391 5392 5393 5394 5395 5396 5397 5398
      $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

5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430
# Check that the C++ compiler exists and works with the C compiler.
# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
if has $cxx; then
    cat > $TMPC <<EOF
int c_function(void);
int main(void) { return c_function(); }
EOF

    compile_object

    cat > $TMPCXX <<EOF
extern "C" {
   int c_function(void);
}
int c_function(void) { return 42; }
EOF

    update_cxxflags

    if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
        # 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

5431 5432 5433 5434 5435 5436
echo_version() {
    if test "$1" = "yes" ; then
        echo "($2)"
    fi
}

5437 5438 5439
# prepend pixman and ftd flags after all config tests are done
QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
libs_softmmu="$pixman_libs $libs_softmmu"
5440

B
bellard 已提交
5441
echo "Install prefix    $prefix"
5442
echo "BIOS directory    $(eval echo $qemu_datadir)"
G
Gerd Hoffmann 已提交
5443
echo "firmware path     $(eval echo $firmwarepath)"
5444 5445 5446 5447 5448 5449
echo "binary directory  $(eval echo $bindir)"
echo "library directory $(eval echo $libdir)"
echo "module directory  $(eval echo $qemu_moddir)"
echo "libexec directory $(eval echo $libexecdir)"
echo "include directory $(eval echo $includedir)"
echo "config directory  $(eval echo $sysconfdir)"
B
bellard 已提交
5450
if test "$mingw32" = "no" ; then
5451 5452
echo "local state directory   $(eval echo $local_statedir)"
echo "Manual directory  $(eval echo $mandir)"
B
bellard 已提交
5453
echo "ELF interp prefix $interp_prefix"
5454 5455
else
echo "local state directory   queried at runtime"
5456
echo "Windows SDK       $win_sdk"
B
bellard 已提交
5457
fi
5458
echo "Source path       $source_path"
5459
echo "GIT binary        $git"
5460
echo "GIT submodules    $git_submodules"
B
bellard 已提交
5461
echo "C compiler        $cc"
B
bellard 已提交
5462
echo "Host C compiler   $host_cc"
5463
echo "C++ compiler      $cxx"
5464
echo "Objective-C compiler $objcc"
5465
echo "ARFLAGS           $ARFLAGS"
5466
echo "CFLAGS            $CFLAGS"
J
Juan Quintela 已提交
5467
echo "QEMU_CFLAGS       $QEMU_CFLAGS"
5468
echo "LDFLAGS           $LDFLAGS"
B
bellard 已提交
5469
echo "make              $make"
5470
echo "install           $install"
B
Blue Swirl 已提交
5471
echo "python            $python"
5472 5473 5474
if test "$slirp" = "yes" ; then
    echo "smbd              $smbd"
fi
F
Fam Zheng 已提交
5475
echo "module support    $modules"
B
bellard 已提交
5476
echo "host CPU          $cpu"
B
bellard 已提交
5477
echo "host big endian   $bigendian"
5478
echo "target list       $target_list"
B
bellard 已提交
5479
echo "gprof enabled     $gprof"
5480
echo "sparse enabled    $sparse"
5481
echo "strip binaries    $strip_opt"
5482
echo "profiler          $profiler"
B
bellard 已提交
5483
echo "static build      $static"
5484 5485 5486
if test "$darwin" = "yes" ; then
    echo "Cocoa support     $cocoa"
fi
5487 5488
echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
5489
echo "GTK GL support    $gtk_gl"
5490
echo "VTE support       $vte $(echo_version $vte $vteversion)"
5491
echo "TLS priority      $tls_priority"
5492
echo "GNUTLS support    $gnutls"
5493
echo "GNUTLS rnd        $gnutls_rnd"
5494
echo "libgcrypt         $gcrypt"
5495
echo "libgcrypt kdf     $gcrypt_kdf"
5496
echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
5497
echo "nettle kdf        $nettle_kdf"
5498
echo "libtasn1          $tasn1"
B
balrog 已提交
5499
echo "curses support    $curses"
5500
echo "virgl support     $virglrenderer"
A
Alexander Graf 已提交
5501
echo "curl support      $curl"
B
bellard 已提交
5502
echo "mingw32 support   $mingw32"
M
malc 已提交
5503
echo "Audio drivers     $audio_drv_list"
5504 5505
echo "Block whitelist (rw) $block_drv_rw_whitelist"
echo "Block whitelist (ro) $block_drv_ro_whitelist"
5506
echo "VirtFS support    $virtfs"
5507
echo "Multipath support $mpath"
J
Jes Sorensen 已提交
5508 5509 5510 5511 5512 5513
echo "VNC support       $vnc"
if test "$vnc" = "yes" ; then
    echo "VNC SASL support  $vnc_sasl"
    echo "VNC JPEG support  $vnc_jpeg"
    echo "VNC PNG support   $vnc_png"
fi
5514 5515 5516
if test -n "$sparc_cpu"; then
    echo "Target Sparc Arch $sparc_cpu"
fi
5517
echo "xen support       $xen"
5518 5519
if test "$xen" = "yes" ; then
  echo "xen ctrl version  $xen_ctrl_version"
5520
  echo "pv dom build      $xen_pv_domain_build"
5521
fi
A
aurel32 已提交
5522
echo "brlapi support    $brlapi"
5523
echo "bluez  support    $bluez"
J
Juan Quintela 已提交
5524
echo "Documentation     $docs"
5525
echo "PIE               $pie"
5526
echo "vde support       $vde"
5527
echo "netmap support    $netmap"
5528
echo "Linux AIO support $linux_aio"
5529
echo "ATTR/XATTR support $attr"
T
ths 已提交
5530
echo "Install blobs     $blobs"
5531
echo "KVM support       $kvm"
5532
echo "HAX support       $hax"
5533 5534 5535 5536 5537
echo "TCG support       $tcg"
if test "$tcg" = "yes" ; then
    echo "TCG debug enabled $debug_tcg"
    echo "TCG interpreter   $tcg_interpreter"
fi
5538
echo "malloc trim support $malloc_trim"
M
Michael R. Hines 已提交
5539
echo "RDMA support      $rdma"
5540
echo "fdt support       $fdt"
5541
echo "preadv support    $preadv"
B
Blue Swirl 已提交
5542
echo "fdatasync         $fdatasync"
A
Andreas Färber 已提交
5543 5544
echo "madvise           $madvise"
echo "posix_madvise     $posix_madvise"
5545
echo "libcap-ng support $cap_ng"
M
Michael S. Tsirkin 已提交
5546
echo "vhost-net support $vhost_net"
5547
echo "vhost-scsi support $vhost_scsi"
5548
echo "vhost-vsock support $vhost_vsock"
5549
echo "vhost-user support $vhost_user"
L
Lluís Vilanova 已提交
5550
echo "Trace backends    $trace_backends"
5551
if have_backend "simple"; then
P
Prerna Saxena 已提交
5552
echo "Trace output file $trace_file-<pid>"
5553
fi
5554
echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5555
echo "rbd support       $rbd"
C
Christoph Hellwig 已提交
5556
echo "xfsctl support    $xfs"
5557
echo "smartcard support $smartcard"
G
Gerd Hoffmann 已提交
5558
echo "libusb            $libusb"
5559
echo "usb net redir     $usb_redir"
G
Gerd Hoffmann 已提交
5560
echo "OpenGL support    $opengl"
5561
echo "OpenGL dmabufs    $opengl_dmabuf"
R
Ronnie Sahlberg 已提交
5562
echo "libiscsi support  $libiscsi"
P
Peter Lieven 已提交
5563
echo "libnfs support    $libnfs"
5564
echo "build guest agent $guest_agent"
5565
echo "QGA VSS support   $guest_agent_with_vss"
5566
echo "QGA w32 disk info $guest_agent_ntddscsi"
5567
echo "QGA MSI support   $guest_agent_msi"
5568
echo "seccomp support   $seccomp"
5569
echo "coroutine backend $coroutine"
5570
echo "coroutine pool    $coroutine_pool"
5571
echo "debug stack usage $debug_stack_usage"
5572
echo "crypto afalg      $crypto_afalg"
5573
echo "GlusterFS support $glusterfs"
B
Blue Swirl 已提交
5574 5575
echo "gcov              $gcov_tool"
echo "gcov enabled      $gcov"
S
Stefan Berger 已提交
5576
echo "TPM support       $tpm"
5577
echo "libssh2 support   $libssh2"
P
Paolo Bonzini 已提交
5578
echo "TPM passthrough   $tpm_passthrough"
5579
echo "TPM emulator      $tpm_emulator"
5580
echo "QOM debugging     $qom_cast_debug"
5581
echo "Live block migration $live_block_migration"
Q
qiaonuohan 已提交
5582 5583
echo "lzo support       $lzo"
echo "snappy support    $snappy"
5584
echo "bzip2 support     $bzip2"
5585
echo "NUMA host support $numa"
F
Fam Zheng 已提交
5586
echo "tcmalloc support  $tcmalloc"
5587
echo "jemalloc support  $jemalloc"
5588
echo "avx2 optimization $avx2_opt"
C
Changlong Xie 已提交
5589
echo "replication support $replication"
5590
echo "VxHS block device $vxhs"
5591
echo "capstone          $capstone"
B
bellard 已提交
5592

5593
if test "$sdl_too_old" = "yes"; then
B
bellard 已提交
5594
echo "-> Your SDL version is too old - please upgrade to have SDL support"
B
bellard 已提交
5595
fi
B
bellard 已提交
5596

5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613
if test "$supported_cpu" = "no"; then
    echo
    echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
    echo
    echo "CPU host architecture $cpu support is not currently maintained."
    echo "The QEMU project intends to remove support for this host CPU in"
    echo "a future release if nobody volunteers to maintain it and to"
    echo "provide a build host for our continuous integration setup."
    echo "configure has succeeded and you can continue to build, but"
    echo "if you care about QEMU on this platform you should contact"
    echo "us upstream at qemu-devel@nongnu.org."
fi

if test "$supported_os" = "no"; then
    echo
    echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
    echo
5614 5615
    echo "Host OS $targetos support is not currently maintained."
    echo "The QEMU project intends to remove support for this host OS in"
5616 5617 5618 5619 5620 5621 5622
    echo "a future release if nobody volunteers to maintain it and to"
    echo "provide a build host for our continuous integration setup."
    echo "configure has succeeded and you can continue to build, but"
    echo "if you care about QEMU on this platform you should contact"
    echo "us upstream at qemu-devel@nongnu.org."
fi

5623 5624
config_host_mak="config-host.mak"

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

5627 5628 5629
echo "# Automatically generated by configure - do not modify" > $config_host_mak
echo >> $config_host_mak

5630
echo all: >> $config_host_mak
5631 5632
echo "prefix=$prefix" >> $config_host_mak
echo "bindir=$bindir" >> $config_host_mak
A
Alon Levy 已提交
5633
echo "libdir=$libdir" >> $config_host_mak
5634
echo "libexecdir=$libexecdir" >> $config_host_mak
5635
echo "includedir=$includedir" >> $config_host_mak
5636 5637
echo "mandir=$mandir" >> $config_host_mak
echo "sysconfdir=$sysconfdir" >> $config_host_mak
5638
echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5639
echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
G
Gerd Hoffmann 已提交
5640
echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
5641
echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
F
Fam Zheng 已提交
5642
echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5643 5644 5645
if test "$mingw32" = "no" ; then
  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
fi
5646
echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5647
echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5648
echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
5649
echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5650
echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5651
echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5652
echo "GIT=$git" >> $config_host_mak
5653
echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5654
echo "GIT_UPDATE=$git_update" >> $config_host_mak
5655

5656
echo "ARCH=$ARCH" >> $config_host_mak
5657

5658
if test "$debug_tcg" = "yes" ; then
5659
  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5660
fi
5661
if test "$strip_opt" = "yes" ; then
5662
  echo "STRIP=${strip}" >> $config_host_mak
5663
fi
B
bellard 已提交
5664
if test "$bigendian" = "yes" ; then
5665
  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5666
fi
B
bellard 已提交
5667
if test "$mingw32" = "yes" ; then
5668
  echo "CONFIG_WIN32=y" >> $config_host_mak
5669
  rc_version=$(cat $source_path/VERSION)
5670 5671 5672 5673 5674 5675 5676 5677
  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
5678 5679
  if test "$guest_agent_with_vss" = "yes" ; then
    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5680
    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5681 5682
    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
  fi
5683 5684 5685
  if test "$guest_agent_ntddscsi" = "yes" ; then
    echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
  fi
5686
  if test "$guest_agent_msi" = "yes"; then
5687 5688 5689 5690 5691 5692 5693 5694
    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak  
    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
  fi
5695
else
J
Juan Quintela 已提交
5696
  echo "CONFIG_POSIX=y" >> $config_host_mak
M
Mark McLoughlin 已提交
5697 5698 5699 5700
fi

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

5703
if test "$darwin" = "yes" ; then
5704
  echo "CONFIG_DARWIN=y" >> $config_host_mak
5705
fi
M
malc 已提交
5706

B
bellard 已提交
5707
if test "$solaris" = "yes" ; then
5708
  echo "CONFIG_SOLARIS=y" >> $config_host_mak
B
bellard 已提交
5709
fi
5710 5711 5712
if test "$haiku" = "yes" ; then
  echo "CONFIG_HAIKU=y" >> $config_host_mak
fi
5713
if test "$static" = "yes" ; then
5714
  echo "CONFIG_STATIC=y" >> $config_host_mak
B
bellard 已提交
5715
fi
5716
if test "$profiler" = "yes" ; then
5717
  echo "CONFIG_PROFILER=y" >> $config_host_mak
5718
fi
B
bellard 已提交
5719
if test "$slirp" = "yes" ; then
5720
  echo "CONFIG_SLIRP=y" >> $config_host_mak
5721
  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
B
bellard 已提交
5722
fi
5723
if test "$vde" = "yes" ; then
5724
  echo "CONFIG_VDE=y" >> $config_host_mak
5725
  echo "VDE_LIBS=$vde_libs" >> $config_host_mak
5726
fi
5727 5728 5729
if test "$netmap" = "yes" ; then
  echo "CONFIG_NETMAP=y" >> $config_host_mak
fi
5730 5731 5732
if test "$l2tpv3" = "yes" ; then
  echo "CONFIG_L2TPV3=y" >> $config_host_mak
fi
5733 5734 5735
if test "$cap_ng" = "yes" ; then
  echo "CONFIG_LIBCAP=y" >> $config_host_mak
fi
5736
echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
M
malc 已提交
5737
for drv in $audio_drv_list; do
5738
    def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5739
    echo "$def=y" >> $config_host_mak
M
malc 已提交
5740
done
5741 5742 5743 5744 5745
echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
echo "OSS_LIBS=$oss_libs" >> $config_host_mak
5746 5747 5748
if test "$audio_pt_int" = "yes" ; then
  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
fi
5749 5750 5751
if test "$audio_win_int" = "yes" ; then
  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
fi
5752 5753
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 已提交
5754 5755 5756
if test "$vnc" = "yes" ; then
  echo "CONFIG_VNC=y" >> $config_host_mak
fi
5757
if test "$vnc_sasl" = "yes" ; then
5758
  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5759
fi
J
Jes Sorensen 已提交
5760
if test "$vnc_jpeg" = "yes" ; then
5761 5762
  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
fi
J
Jes Sorensen 已提交
5763
if test "$vnc_png" = "yes" ; then
C
Corentin Chary 已提交
5764 5765
  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
fi
G
Gerd Hoffmann 已提交
5766 5767 5768 5769
if test "$xkbcommon" = "yes" ; then
  echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
  echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
fi
5770
if test "$fnmatch" = "yes" ; then
5771
  echo "CONFIG_FNMATCH=y" >> $config_host_mak
5772
fi
C
Christoph Hellwig 已提交
5773 5774 5775
if test "$xfs" = "yes" ; then
  echo "CONFIG_XFS=y" >> $config_host_mak
fi
5776
qemu_version=$(head $source_path/VERSION)
5777
echo "VERSION=$qemu_version" >>$config_host_mak
5778
echo "PKGVERSION=$pkgversion" >>$config_host_mak
5779 5780
echo "SRC_PATH=$source_path" >> $config_host_mak
echo "TARGET_DIRS=$target_list" >> $config_host_mak
J
Juan Quintela 已提交
5781
if [ "$docs" = "yes" ] ; then
5782
  echo "BUILD_DOCS=yes" >> $config_host_mak
5783
fi
F
Fam Zheng 已提交
5784
if test "$modules" = "yes"; then
F
Fam Zheng 已提交
5785 5786
  # $shacmd can generate a hash started with digit, which the compiler doesn't
  # like as an symbol. So prefix it with an underscore
5787
  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
F
Fam Zheng 已提交
5788 5789
  echo "CONFIG_MODULES=y" >> $config_host_mak
fi
5790
if test "$sdl" = "yes" ; then
5791
  echo "CONFIG_SDL=y" >> $config_host_mak
5792
  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5793
  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5794
  echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
5795 5796
fi
if test "$cocoa" = "yes" ; then
5797
  echo "CONFIG_COCOA=y" >> $config_host_mak
B
balrog 已提交
5798 5799
fi
if test "$curses" = "yes" ; then
5800
  echo "CONFIG_CURSES=y" >> $config_host_mak
5801
fi
R
Riku Voipio 已提交
5802
if test "$pipe2" = "yes" ; then
5803
  echo "CONFIG_PIPE2=y" >> $config_host_mak
R
Riku Voipio 已提交
5804
fi
K
Kevin Wolf 已提交
5805 5806 5807
if test "$accept4" = "yes" ; then
  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
fi
5808
if test "$splice" = "yes" ; then
5809
  echo "CONFIG_SPLICE=y" >> $config_host_mak
5810
fi
R
Riku Voipio 已提交
5811 5812 5813
if test "$eventfd" = "yes" ; then
  echo "CONFIG_EVENTFD=y" >> $config_host_mak
fi
M
Marc-André Lureau 已提交
5814 5815 5816
if test "$memfd" = "yes" ; then
  echo "CONFIG_MEMFD=y" >> $config_host_mak
fi
5817 5818 5819
if test "$fallocate" = "yes" ; then
  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
fi
5820 5821 5822
if test "$fallocate_punch_hole" = "yes" ; then
  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
fi
5823 5824 5825
if test "$fallocate_zero_range" = "yes" ; then
  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
fi
5826 5827 5828
if test "$posix_fallocate" = "yes" ; then
  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
fi
5829 5830 5831
if test "$sync_file_range" = "yes" ; then
  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
fi
5832 5833 5834
if test "$fiemap" = "yes" ; then
  echo "CONFIG_FIEMAP=y" >> $config_host_mak
fi
5835 5836 5837
if test "$dup3" = "yes" ; then
  echo "CONFIG_DUP3=y" >> $config_host_mak
fi
5838 5839 5840
if test "$ppoll" = "yes" ; then
  echo "CONFIG_PPOLL=y" >> $config_host_mak
fi
5841 5842 5843
if test "$prctl_pr_set_timerslack" = "yes" ; then
  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
fi
5844 5845 5846 5847 5848 5849
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
5850 5851 5852
if test "$sendfile" = "yes" ; then
  echo "CONFIG_SENDFILE=y" >> $config_host_mak
fi
5853 5854 5855
if test "$timerfd" = "yes" ; then
  echo "CONFIG_TIMERFD=y" >> $config_host_mak
fi
R
Riku Voipio 已提交
5856 5857 5858
if test "$setns" = "yes" ; then
  echo "CONFIG_SETNS=y" >> $config_host_mak
fi
5859 5860 5861
if test "$clock_adjtime" = "yes" ; then
  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
fi
5862 5863 5864
if test "$syncfs" = "yes" ; then
  echo "CONFIG_SYNCFS=y" >> $config_host_mak
fi
5865
if test "$inotify" = "yes" ; then
5866
  echo "CONFIG_INOTIFY=y" >> $config_host_mak
5867
fi
5868 5869 5870
if test "$inotify1" = "yes" ; then
  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
fi
5871 5872 5873
if test "$sem_timedwait" = "yes" ; then
  echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
fi
5874 5875 5876 5877 5878 5879
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 已提交
5880
if test "$curl" = "yes" ; then
5881
  echo "CONFIG_CURL=m" >> $config_host_mak
J
Juan Quintela 已提交
5882
  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5883
  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
A
Alexander Graf 已提交
5884
fi
A
aurel32 已提交
5885
if test "$brlapi" = "yes" ; then
5886
  echo "CONFIG_BRLAPI=y" >> $config_host_mak
5887
  echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
A
aurel32 已提交
5888
fi
B
balrog 已提交
5889
if test "$bluez" = "yes" ; then
5890
  echo "CONFIG_BLUEZ=y" >> $config_host_mak
5891
  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
B
balrog 已提交
5892
fi
5893
if test "$glib_subprocess" = "yes" ; then
5894 5895
  echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
fi
A
Anthony Liguori 已提交
5896 5897
if test "$gtk" = "yes" ; then
  echo "CONFIG_GTK=y" >> $config_host_mak
5898
  echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
A
Anthony Liguori 已提交
5899
  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5900
  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5901 5902 5903
  if test "$gtk_gl" = "yes" ; then
    echo "CONFIG_GTK_GL=y" >> $config_host_mak
  fi
S
Stefan Weil 已提交
5904
fi
5905
echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5906 5907 5908
if test "$gnutls" = "yes" ; then
  echo "CONFIG_GNUTLS=y" >> $config_host_mak
fi
5909 5910 5911
if test "$gnutls_rnd" = "yes" ; then
  echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
fi
5912 5913
if test "$gcrypt" = "yes" ; then
  echo "CONFIG_GCRYPT=y" >> $config_host_mak
5914 5915 5916
  if test "$gcrypt_hmac" = "yes" ; then
    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
  fi
5917 5918 5919
  if test "$gcrypt_kdf" = "yes" ; then
    echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
  fi
5920
fi
5921 5922
if test "$nettle" = "yes" ; then
  echo "CONFIG_NETTLE=y" >> $config_host_mak
5923
  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5924 5925 5926
  if test "$nettle_kdf" = "yes" ; then
    echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
  fi
5927
fi
5928 5929 5930
if test "$tasn1" = "yes" ; then
  echo "CONFIG_TASN1=y" >> $config_host_mak
fi
5931 5932 5933
if test "$have_ifaddrs_h" = "yes" ; then
    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
fi
5934 5935 5936
if test "$have_broken_size_max" = "yes" ; then
    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
fi
5937 5938 5939 5940 5941 5942 5943 5944

# Work around a system header bug with some kernel/XFS header
# versions where they both try to define 'struct fsxattr':
# xfs headers will not try to redefine structs from linux headers
# if this macro is set.
if test "$have_fsxattr" = "yes" ; then
    echo "HAVE_FSXATTR=y" >> $config_host_mak
fi
S
Stefan Weil 已提交
5945 5946
if test "$vte" = "yes" ; then
  echo "CONFIG_VTE=y" >> $config_host_mak
A
Anthony Liguori 已提交
5947 5948
  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
fi
5949 5950 5951 5952 5953
if test "$virglrenderer" = "yes" ; then
  echo "CONFIG_VIRGL=y" >> $config_host_mak
  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
fi
5954
if test "$xen" = "yes" ; then
J
Jan Kiszka 已提交
5955
  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5956
  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5957 5958 5959
  if test "$xen_pv_domain_build" = "yes" ; then
    echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
  fi
5960
fi
5961 5962 5963
if test "$linux_aio" = "yes" ; then
  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
fi
5964 5965 5966
if test "$attr" = "yes" ; then
  echo "CONFIG_ATTR=y" >> $config_host_mak
fi
5967 5968 5969
if test "$libattr" = "yes" ; then
  echo "CONFIG_LIBATTR=y" >> $config_host_mak
fi
5970 5971
if test "$virtfs" = "yes" ; then
  echo "CONFIG_VIRTFS=y" >> $config_host_mak
5972
fi
5973 5974 5975
if test "$mpath" = "yes" ; then
  echo "CONFIG_MPATH=y" >> $config_host_mak
fi
5976 5977 5978
if test "$vhost_scsi" = "yes" ; then
  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
fi
5979
if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
5980 5981
  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
fi
5982 5983 5984
if test "$vhost_vsock" = "yes" ; then
  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
fi
5985 5986 5987
if test "$vhost_user" = "yes" ; then
  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
fi
T
ths 已提交
5988
if test "$blobs" = "yes" ; then
5989
  echo "INSTALL_BLOBS=yes" >> $config_host_mak
T
ths 已提交
5990
fi
A
aliguori 已提交
5991
if test "$iovec" = "yes" ; then
5992
  echo "CONFIG_IOVEC=y" >> $config_host_mak
A
aliguori 已提交
5993
fi
5994
if test "$preadv" = "yes" ; then
5995
  echo "CONFIG_PREADV=y" >> $config_host_mak
5996
fi
5997
if test "$fdt" = "yes" ; then
5998
  echo "CONFIG_FDT=y" >> $config_host_mak
5999
fi
M
Marcelo Tosatti 已提交
6000 6001 6002
if test "$signalfd" = "yes" ; then
  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
fi
6003 6004 6005 6006 6007
if test "$tcg" = "yes"; then
  echo "CONFIG_TCG=y" >> $config_host_mak
  if test "$tcg_interpreter" = "yes" ; then
    echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
  fi
6008
fi
B
Blue Swirl 已提交
6009 6010 6011
if test "$fdatasync" = "yes" ; then
  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
fi
A
Andreas Färber 已提交
6012 6013 6014 6015 6016 6017
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
6018

6019 6020 6021
if test "$spice" = "yes" ; then
  echo "CONFIG_SPICE=y" >> $config_host_mak
fi
A
Alon Levy 已提交
6022

6023 6024
if test "$smartcard" = "yes" ; then
  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6025 6026
  echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
  echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
R
Robert Relyea 已提交
6027 6028
fi

G
Gerd Hoffmann 已提交
6029 6030
if test "$libusb" = "yes" ; then
  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6031 6032
  echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
  echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
G
Gerd Hoffmann 已提交
6033 6034
fi

6035 6036
if test "$usb_redir" = "yes" ; then
  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6037 6038
  echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
  echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6039 6040
fi

G
Gerd Hoffmann 已提交
6041 6042 6043
if test "$opengl" = "yes" ; then
  echo "CONFIG_OPENGL=y" >> $config_host_mak
  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6044 6045 6046
  if test "$opengl_dmabuf" = "yes" ; then
    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
  fi
M
Michael Walle 已提交
6047 6048
fi

6049 6050 6051 6052
if test "$malloc_trim" = "yes" ; then
  echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
fi

6053 6054 6055 6056
if test "$avx2_opt" = "yes" ; then
  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
fi

Q
qiaonuohan 已提交
6057 6058 6059 6060 6061 6062 6063 6064
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

6065 6066 6067 6068 6069
if test "$bzip2" = "yes" ; then
  echo "CONFIG_BZIP2=y" >> $config_host_mak
  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
fi

R
Ronnie Sahlberg 已提交
6070
if test "$libiscsi" = "yes" ; then
6071
  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6072 6073
  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
R
Ronnie Sahlberg 已提交
6074 6075
fi

P
Peter Lieven 已提交
6076
if test "$libnfs" = "yes" ; then
6077 6078
  echo "CONFIG_LIBNFS=m" >> $config_host_mak
  echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
P
Peter Lieven 已提交
6079 6080
fi

6081 6082
if test "$seccomp" = "yes"; then
  echo "CONFIG_SECCOMP=y" >> $config_host_mak
6083 6084
  echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
  echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6085 6086
fi

6087
# XXX: suppress that
B
bellard 已提交
6088
if [ "$bsd" = "yes" ] ; then
6089
  echo "CONFIG_BSD=y" >> $config_host_mak
B
bellard 已提交
6090 6091
fi

6092 6093 6094
if test "$localtime_r" = "yes" ; then
  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
fi
6095 6096 6097
if test "$qom_cast_debug" = "yes" ; then
  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
fi
6098
if test "$rbd" = "yes" ; then
6099
  echo "CONFIG_RBD=m" >> $config_host_mak
6100 6101
  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6102 6103
fi

6104
echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6105 6106 6107 6108 6109
if test "$coroutine_pool" = "yes" ; then
  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
else
  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
fi
6110

6111 6112 6113 6114
if test "$debug_stack_usage" = "yes" ; then
  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
fi

6115 6116 6117 6118
if test "$crypto_afalg" = "yes" ; then
  echo "CONFIG_AF_ALG=y" >> $config_host_mak
fi

6119 6120 6121 6122
if test "$open_by_handle_at" = "yes" ; then
  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
fi

6123 6124
if test "$linux_magic_h" = "yes" ; then
  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6125 6126
fi

6127 6128
if test "$pragma_diagnostic_available" = "yes" ; then
  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6129 6130
fi

6131 6132 6133 6134
if test "$valgrind_h" = "yes" ; then
  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
fi

6135 6136
if test "$has_environ" = "yes" ; then
  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6137 6138
fi

6139 6140 6141 6142
if test "$cpuid_h" = "yes" ; then
  echo "CONFIG_CPUID_H=y" >> $config_host_mak
fi

6143 6144 6145 6146
if test "$int128" = "yes" ; then
  echo "CONFIG_INT128=y" >> $config_host_mak
fi

R
Richard Henderson 已提交
6147 6148 6149 6150
if test "$atomic128" = "yes" ; then
  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
fi

R
Richard Henderson 已提交
6151 6152 6153 6154
if test "$atomic64" = "yes" ; then
  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
fi

6155 6156 6157 6158
if test "$getauxval" = "yes" ; then
  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
fi

6159
if test "$glusterfs" = "yes" ; then
6160
  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6161 6162
  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6163 6164
fi

6165 6166 6167 6168
if test "$glusterfs_xlator_opt" = "yes" ; then
  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
fi

6169 6170
if test "$glusterfs_discard" = "yes" ; then
  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6171
fi
6172

6173 6174 6175 6176
if test "$glusterfs_fallocate" = "yes" ; then
  echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
fi

6177 6178 6179 6180
if test "$glusterfs_zerofill" = "yes" ; then
  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
fi

6181
if test "$libssh2" = "yes" ; then
6182
  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6183 6184
  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6185 6186
fi

6187 6188 6189 6190
if test "$live_block_migration" = "yes" ; then
  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
fi

P
Paolo Bonzini 已提交
6191 6192
if test "$tpm" = "yes"; then
  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6193
  # TPM passthrough support?
P
Paolo Bonzini 已提交
6194 6195 6196
  if test "$tpm_passthrough" = "yes"; then
    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
  fi
6197 6198 6199 6200
  # TPM emulator support?
  if test "$tpm_emulator" = "yes"; then
    echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
  fi
P
Paolo Bonzini 已提交
6201 6202
fi

L
Lluís Vilanova 已提交
6203 6204
echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
if have_backend "nop"; then
6205
  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6206
fi
L
Lluís Vilanova 已提交
6207
if have_backend "simple"; then
6208 6209
  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
  # Set the appropriate trace file.
6210
  trace_file="\"$trace_file-\" FMT_pid"
P
Prerna Saxena 已提交
6211
fi
6212 6213
if have_backend "log"; then
  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6214
fi
L
Lluís Vilanova 已提交
6215
if have_backend "ust"; then
6216 6217
  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
fi
L
Lluís Vilanova 已提交
6218
if have_backend "dtrace"; then
6219 6220 6221 6222
  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
  if test "$trace_backend_stap" = "yes" ; then
    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
  fi
6223
fi
L
Lluís Vilanova 已提交
6224
if have_backend "ftrace"; then
6225 6226 6227
  if test "$linux" = "yes" ; then
    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
  else
6228
    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6229 6230
  fi
fi
P
Paul Durrant 已提交
6231 6232 6233 6234 6235 6236 6237
if have_backend "syslog"; then
  if test "$posix_syslog" = "yes" ; then
    echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
  else
    feature_not_found "syslog(trace backend)" "syslog not available"
  fi
fi
P
Prerna Saxena 已提交
6238 6239
echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak

M
Michael R. Hines 已提交
6240 6241
if test "$rdma" = "yes" ; then
  echo "CONFIG_RDMA=y" >> $config_host_mak
6242
  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
M
Michael R. Hines 已提交
6243 6244
fi

6245 6246 6247 6248
if test "$have_rtnetlink" = "yes" ; then
  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
fi

C
Changlong Xie 已提交
6249 6250 6251 6252
if test "$replication" = "yes" ; then
  echo "CONFIG_REPLICATION=y" >> $config_host_mak
fi

S
Stefan Hajnoczi 已提交
6253 6254 6255 6256
if test "$have_af_vsock" = "yes" ; then
  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
fi

6257 6258 6259 6260
if test "$have_sysmacros" = "yes" ; then
  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
fi

6261 6262 6263 6264
if test "$have_static_assert" = "yes" ; then
  echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
fi

6265 6266 6267 6268
if test "$have_utmpx" = "yes" ; then
  echo "HAVE_UTMPX=y" >> $config_host_mak
fi

6269 6270
if test "$ivshmem" = "yes" ; then
  echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6271
fi
6272
if test "$capstone" != "no" ; then
6273
  echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6274 6275
fi

6276 6277 6278 6279 6280 6281 6282 6283 6284 6285
# 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

6286 6287 6288 6289 6290
if test "$vxhs" = "yes" ; then
  echo "CONFIG_VXHS=y" >> $config_host_mak
  echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
fi

6291 6292 6293 6294 6295 6296
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"
6297
elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6298
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6299 6300
elif test "$ARCH" = "ppc64" ; then
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6301 6302 6303 6304 6305
else
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
fi
QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"

6306 6307
echo "TOOLS=$tools" >> $config_host_mak
echo "ROMS=$roms" >> $config_host_mak
6308 6309
echo "MAKE=$make" >> $config_host_mak
echo "INSTALL=$install" >> $config_host_mak
6310 6311
echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
M
Michael Tokarev 已提交
6312 6313
echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
B
Blue Swirl 已提交
6314
echo "PYTHON=$python" >> $config_host_mak
6315
echo "CC=$cc" >> $config_host_mak
6316 6317 6318
if $iasl -h > /dev/null 2>&1; then
  echo "IASL=$iasl" >> $config_host_mak
fi
P
Paolo Bonzini 已提交
6319
echo "CC_I386=$cc_i386" >> $config_host_mak
6320
echo "HOST_CC=$host_cc" >> $config_host_mak
6321
echo "CXX=$cxx" >> $config_host_mak
6322
echo "OBJCC=$objcc" >> $config_host_mak
6323
echo "AR=$ar" >> $config_host_mak
6324
echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6325
echo "AS=$as" >> $config_host_mak
6326
echo "CCAS=$ccas" >> $config_host_mak
6327
echo "CPP=$cpp" >> $config_host_mak
6328 6329
echo "OBJCOPY=$objcopy" >> $config_host_mak
echo "LD=$ld" >> $config_host_mak
6330
echo "RANLIB=$ranlib" >> $config_host_mak
S
Stefan Weil 已提交
6331
echo "NM=$nm" >> $config_host_mak
6332
echo "WINDRES=$windres" >> $config_host_mak
6333
echo "CFLAGS=$CFLAGS" >> $config_host_mak
B
Brad 已提交
6334
echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
J
Juan Quintela 已提交
6335
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6336
echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6337
echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
P
Paolo Bonzini 已提交
6338 6339
if test "$sparse" = "yes" ; then
  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
6340
  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
G
Gerd Hoffmann 已提交
6341
  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
P
Paolo Bonzini 已提交
6342 6343 6344
  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
6345 6346 6347 6348 6349
if test "$cross_prefix" != ""; then
  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
else
  echo "AUTOCONF_HOST := "                             >> $config_host_mak
fi
6350
echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
B
Brad 已提交
6351
echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6352
echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6353
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
J
Juan Quintela 已提交
6354
echo "LIBS+=$LIBS" >> $config_host_mak
J
Juan Quintela 已提交
6355
echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6356
echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6357
echo "EXESUF=$EXESUF" >> $config_host_mak
F
Fam Zheng 已提交
6358 6359
echo "DSOSUF=$DSOSUF" >> $config_host_mak
echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6360
echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6361 6362
echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6363
echo "POD2MAN=$POD2MAN" >> $config_host_mak
6364
echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
B
Blue Swirl 已提交
6365 6366 6367 6368
if test "$gcov" = "yes" ; then
  echo "CONFIG_GCOV=y" >> $config_host_mak
  echo "GCOV=$gcov_tool" >> $config_host_mak
fi
6369

6370 6371
# use included Linux headers
if test "$linux" = "yes" ; then
6372
  mkdir -p linux-headers
6373
  case "$cpu" in
6374
  i386|x86_64|x32)
6375
    linux_arch=x86
6376 6377
    ;;
  ppcemb|ppc|ppc64)
6378
    linux_arch=powerpc
6379 6380
    ;;
  s390x)
6381 6382
    linux_arch=s390
    ;;
6383 6384 6385
  aarch64)
    linux_arch=arm64
    ;;
6386 6387 6388
  mips64)
    linux_arch=mips
    ;;
6389 6390 6391
  *)
    # For most CPUs the kernel architecture name and QEMU CPU name match.
    linux_arch="$cpu"
6392 6393
    ;;
  esac
6394 6395 6396 6397
    # 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
6398 6399
fi

6400
for target in $target_list; do
6401
target_dir="$target"
6402
config_target_mak=$target_dir/config-target.mak
6403
target_name=$(echo $target | cut -d '-' -f 1)
6404
target_bigendian="no"
6405

6406
case "$target_name" in
6407
  armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6408 6409 6410
  target_bigendian=yes
  ;;
esac
6411
target_softmmu="no"
B
bellard 已提交
6412
target_user_only="no"
6413
target_linux_user="no"
B
blueswir1 已提交
6414
target_bsd_user="no"
P
pbrook 已提交
6415
case "$target" in
6416
  ${target_name}-softmmu)
P
pbrook 已提交
6417 6418
    target_softmmu="yes"
    ;;
6419
  ${target_name}-linux-user)
P
pbrook 已提交
6420 6421 6422
    target_user_only="yes"
    target_linux_user="yes"
    ;;
6423
  ${target_name}-bsd-user)
B
blueswir1 已提交
6424 6425 6426
    target_user_only="yes"
    target_bsd_user="yes"
    ;;
P
pbrook 已提交
6427
  *)
6428
    error_exit "Target '$target' not recognised"
P
pbrook 已提交
6429 6430 6431
    exit 1
    ;;
esac
6432

6433
mkdir -p $target_dir
6434
echo "# Automatically generated by configure - do not modify" > $config_target_mak
B
bellard 已提交
6435

P
pbrook 已提交
6436
bflt="no"
6437
mttcg="no"
6438
interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
P
pbrook 已提交
6439
gdb_xml_files=""
A
aliguori 已提交
6440

6441
TARGET_ARCH="$target_name"
6442
TARGET_BASE_ARCH=""
6443
TARGET_ABI_DIR=""
6444

6445
case "$target_name" in
A
aurel32 已提交
6446
  i386)
6447
    gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
A
aurel32 已提交
6448 6449
  ;;
  x86_64)
6450
    TARGET_BASE_ARCH=i386
6451
    gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
A
aurel32 已提交
6452 6453
  ;;
  alpha)
6454
    mttcg="yes"
A
aurel32 已提交
6455 6456
  ;;
  arm|armeb)
J
Juan Quintela 已提交
6457
    TARGET_ARCH=arm
A
aurel32 已提交
6458
    bflt="yes"
6459
    mttcg="yes"
P
pbrook 已提交
6460
    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
A
aurel32 已提交
6461
  ;;
6462 6463 6464
  aarch64)
    TARGET_BASE_ARCH=arm
    bflt="yes"
6465
    mttcg="yes"
6466
    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6467
  ;;
A
aurel32 已提交
6468 6469
  cris)
  ;;
6470 6471
  hppa)
  ;;
M
Michael Walle 已提交
6472 6473
  lm32)
  ;;
A
aurel32 已提交
6474 6475
  m68k)
    bflt="yes"
6476
    gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
A
aurel32 已提交
6477
  ;;
6478 6479
  microblaze|microblazeel)
    TARGET_ARCH=microblaze
6480 6481
    bflt="yes"
  ;;
J
Juan Quintela 已提交
6482
  mips|mipsel)
J
Juan Quintela 已提交
6483
    TARGET_ARCH=mips
6484
    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
A
aurel32 已提交
6485 6486
  ;;
  mipsn32|mipsn32el)
6487
    TARGET_ARCH=mips64
6488
    TARGET_BASE_ARCH=mips
6489
    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6490
    echo "TARGET_ABI32=y" >> $config_target_mak
A
aurel32 已提交
6491 6492
  ;;
  mips64|mips64el)
J
Juan Quintela 已提交
6493
    TARGET_ARCH=mips64
6494
    TARGET_BASE_ARCH=mips
6495
    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
A
aurel32 已提交
6496
  ;;
A
Anthony Green 已提交
6497 6498
  moxie)
  ;;
M
Marek Vasut 已提交
6499 6500
  nios2)
  ;;
6501
  or1k)
6502 6503 6504
    TARGET_ARCH=openrisc
    TARGET_BASE_ARCH=openrisc
  ;;
A
aurel32 已提交
6505
  ppc)
6506
    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
A
aurel32 已提交
6507 6508
  ;;
  ppcemb)
6509
    TARGET_BASE_ARCH=ppc
6510
    TARGET_ABI_DIR=ppc
6511
    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
A
aurel32 已提交
6512 6513
  ;;
  ppc64)
6514
    TARGET_BASE_ARCH=ppc
6515
    TARGET_ABI_DIR=ppc
6516
    mttcg=yes
6517
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
A
aurel32 已提交
6518
  ;;
6519 6520 6521 6522
  ppc64le)
    TARGET_ARCH=ppc64
    TARGET_BASE_ARCH=ppc
    TARGET_ABI_DIR=ppc
6523
    mttcg=yes
6524
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6525
  ;;
A
aurel32 已提交
6526
  ppc64abi32)
J
Juan Quintela 已提交
6527
    TARGET_ARCH=ppc64
6528
    TARGET_BASE_ARCH=ppc
6529
    TARGET_ABI_DIR=ppc
6530
    echo "TARGET_ABI32=y" >> $config_target_mak
6531
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
A
aurel32 已提交
6532 6533
  ;;
  sh4|sh4eb)
J
Juan Quintela 已提交
6534
    TARGET_ARCH=sh4
A
aurel32 已提交
6535 6536 6537 6538 6539
    bflt="yes"
  ;;
  sparc)
  ;;
  sparc64)
6540
    TARGET_BASE_ARCH=sparc
A
aurel32 已提交
6541 6542
  ;;
  sparc32plus)
J
Juan Quintela 已提交
6543
    TARGET_ARCH=sparc64
6544
    TARGET_BASE_ARCH=sparc
6545
    TARGET_ABI_DIR=sparc
6546
    echo "TARGET_ABI32=y" >> $config_target_mak
A
aurel32 已提交
6547
  ;;
6548
  s390x)
6549
    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
6550
  ;;
6551 6552
  tilegx)
  ;;
6553 6554
  tricore)
  ;;
6555 6556
  unicore32)
  ;;
6557 6558 6559
  xtensa|xtensaeb)
    TARGET_ARCH=xtensa
  ;;
A
aurel32 已提交
6560
  *)
6561
    error_exit "Unsupported target CPU"
A
aurel32 已提交
6562 6563
  ;;
esac
6564 6565 6566 6567 6568 6569 6570
# 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"

6571 6572 6573 6574
upper() {
    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
}

6575
target_arch_name="$(upper $TARGET_ARCH)"
6576
echo "TARGET_$target_arch_name=y" >> $config_target_mak
6577
echo "TARGET_NAME=$target_name" >> $config_target_mak
6578
echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6579 6580 6581
if [ "$TARGET_ABI_DIR" = "" ]; then
  TARGET_ABI_DIR=$TARGET_ARCH
fi
6582
echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6583 6584 6585
if [ "$HOST_VARIANT_DIR" != "" ]; then
    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
fi
6586 6587 6588 6589

if supported_xen_target $target; then
    echo "CONFIG_XEN=y" >> $config_target_mak
    if test "$xen_pci_passthrough" = yes; then
6590
        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
J
Juan Quintela 已提交
6591
    fi
6592 6593 6594 6595
fi
if supported_kvm_target $target; then
    echo "CONFIG_KVM=y" >> $config_target_mak
    if test "$vhost_net" = "yes" ; then
M
Michael S. Tsirkin 已提交
6596
        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6597 6598 6599
        if test "$vhost_user" = "yes" ; then
            echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
        fi
J
Juan Quintela 已提交
6600
    fi
6601 6602 6603
fi
if supported_hax_target $target; then
    echo "CONFIG_HAX=y" >> $config_target_mak
6604
fi
B
bellard 已提交
6605
if test "$target_bigendian" = "yes" ; then
6606
  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
B
bellard 已提交
6607
fi
6608
if test "$target_softmmu" = "yes" ; then
6609
  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6610 6611 6612
  if test "$mttcg" = "yes" ; then
    echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
  fi
B
bellard 已提交
6613
fi
B
bellard 已提交
6614
if test "$target_user_only" = "yes" ; then
6615
  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6616
  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
B
bellard 已提交
6617
fi
6618
if test "$target_linux_user" = "yes" ; then
6619
  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6620
fi
P
pbrook 已提交
6621 6622 6623 6624 6625
list=""
if test ! -z "$gdb_xml_files" ; then
  for x in $gdb_xml_files; do
    list="$list $source_path/gdb-xml/$x"
  done
6626
  echo "TARGET_XML_FILES=$list" >> $config_target_mak
P
pbrook 已提交
6627
fi
6628

P
pbrook 已提交
6629
if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6630
  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
P
pbrook 已提交
6631
fi
B
blueswir1 已提交
6632
if test "$target_bsd_user" = "yes" ; then
6633
  echo "CONFIG_BSD_USER=y" >> $config_target_mak
B
blueswir1 已提交
6634
fi
6635

6636
# generate QEMU_CFLAGS/LDFLAGS for targets
6637

6638
cflags=""
6639
ldflags=""
6640

6641 6642 6643 6644 6645
disas_config() {
  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
}

6646 6647 6648
for i in $ARCH $TARGET_BASE_ARCH ; do
  case "$i" in
  alpha)
6649
    disas_config "ALPHA"
6650
  ;;
6651 6652
  aarch64)
    if test -n "${cxx}"; then
6653
      disas_config "ARM_A64"
6654 6655
    fi
  ;;
6656
  arm)
6657
    disas_config "ARM"
6658
    if test -n "${cxx}"; then
6659
      disas_config "ARM_A64"
6660
    fi
6661 6662
  ;;
  cris)
6663
    disas_config "CRIS"
6664
  ;;
6665 6666 6667
  hppa)
    disas_config "HPPA"
  ;;
6668
  i386|x86_64|x32)
6669
    disas_config "I386"
6670
  ;;
6671
  lm32)
6672
    disas_config "LM32"
6673
  ;;
6674
  m68k)
6675
    disas_config "M68K"
6676
  ;;
6677
  microblaze*)
6678
    disas_config "MICROBLAZE"
6679 6680
  ;;
  mips*)
6681
    disas_config "MIPS"
6682
  ;;
A
Anthony Green 已提交
6683
  moxie*)
6684
    disas_config "MOXIE"
A
Anthony Green 已提交
6685
  ;;
M
Marek Vasut 已提交
6686 6687 6688
  nios2)
    disas_config "NIOS2"
  ;;
6689
  or1k)
6690
    disas_config "OPENRISC"
6691
  ;;
6692
  ppc*)
6693
    disas_config "PPC"
6694
  ;;
6695
  s390*)
6696
    disas_config "S390"
6697 6698
  ;;
  sh4)
6699
    disas_config "SH4"
6700 6701
  ;;
  sparc*)
6702
    disas_config "SPARC"
6703
  ;;
6704
  xtensa*)
6705
    disas_config "XTENSA"
6706
  ;;
6707 6708
  esac
done
6709
if test "$tcg_interpreter" = "yes" ; then
6710
  disas_config "TCI"
6711
fi
6712

6713 6714 6715 6716 6717 6718 6719
case "$ARCH" in
alpha)
  # Ensure there's only a single GP
  cflags="-msmall-data $cflags"
;;
esac

6720
if test "$gprof" = "yes" ; then
6721
  echo "TARGET_GPROF=yes" >> $config_target_mak
6722 6723 6724 6725 6726 6727
  if test "$target_linux_user" = "yes" ; then
    cflags="-p $cflags"
    ldflags="-p $ldflags"
  fi
  if test "$target_softmmu" = "yes" ; then
    ldflags="-p $ldflags"
6728
    echo "GPROF_CFLAGS=-p" >> $config_target_mak
6729 6730 6731
  fi
fi

6732
if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6733
  ldflags="$ldflags $textseg_ldflags"
6734 6735
fi

6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749
# Newer kernels on s390 check for an S390_PGSTE program header and
# enable the pgste page table extensions in that case. This makes
# the vm.allocate_pgste sysctl unnecessary. We enable this program
# header if
#  - we build on s390x
#  - we build the system emulation for s390x (qemu-system-s390x)
#  - KVM is enabled
#  - the linker supports --s390-pgste
if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes"  -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
    if ld_has --s390-pgste ; then
        ldflags="-Wl,--s390-pgste $ldflags"
    fi
fi

6750 6751
echo "LDFLAGS+=$ldflags" >> $config_target_mak
echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6752

6753
done # for target in $targets
B
bellard 已提交
6754

6755 6756 6757
if [ "$dtc_internal" = "yes" ]; then
  echo "config-host.h: subdir-dtc" >> $config_host_mak
fi
6758 6759 6760 6761 6762 6763
if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
  echo "config-host.h: subdir-capstone" >> $config_host_mak
fi
if test -n "$LIBCAPSTONE"; then
  echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
fi
6764

6765 6766 6767 6768
if test "$numa" = "yes"; then
  echo "CONFIG_NUMA=y" >> $config_host_mak
fi

6769 6770 6771 6772
if test "$ccache_cpp2" = "yes"; then
  echo "export CCACHE_CPP2=y" >> $config_host_mak
fi

P
Paolo Bonzini 已提交
6773
# build tree in object directory in case the source is not in the current directory
F
Fam Zheng 已提交
6774
DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
P
Paolo Bonzini 已提交
6775
DIRS="$DIRS docs docs/interop fsdev scsi"
6776
DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
P
Paolo Bonzini 已提交
6777
DIRS="$DIRS roms/seabios roms/vgabios"
6778
DIRS="$DIRS qapi-generated"
A
Anthony Liguori 已提交
6779 6780
FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6781
FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
P
Paolo Bonzini 已提交
6782
FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
A
Andreas Färber 已提交
6783
FILES="$FILES pc-bios/spapr-rtas/Makefile"
6784
FILES="$FILES pc-bios/s390-ccw/Makefile"
P
Paolo Bonzini 已提交
6785
FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6786
FILES="$FILES pc-bios/qemu-icon.bmp"
6787
FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
6788 6789
for bios_file in \
    $source_path/pc-bios/*.bin \
6790
    $source_path/pc-bios/*.lid \
6791
    $source_path/pc-bios/*.aml \
6792 6793
    $source_path/pc-bios/*.rom \
    $source_path/pc-bios/*.dtb \
6794
    $source_path/pc-bios/*.img \
6795
    $source_path/pc-bios/openbios-* \
6796
    $source_path/pc-bios/u-boot.* \
6797 6798
    $source_path/pc-bios/palcode-*
do
6799
    FILES="$FILES pc-bios/$(basename $bios_file)"
P
Paolo Bonzini 已提交
6800
done
6801
for test_file in $(find $source_path/tests/acpi-test-data -type f)
6802
do
6803
    FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6804
done
P
Paolo Bonzini 已提交
6805 6806
mkdir -p $DIRS
for f in $FILES ; do
6807
    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6808 6809
        symlink "$source_path/$f" "$f"
    fi
P
Paolo Bonzini 已提交
6810
done
P
Paul Brook 已提交
6811

6812
# temporary config to build submodules
6813
for rom in seabios vgabios ; do
6814
    config_mak=roms/$rom/config.mak
6815
    echo "# Automatically generated by configure - do not modify" > $config_mak
6816
    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6817
    echo "AS=$as" >> $config_mak
6818
    echo "CCAS=$ccas" >> $config_mak
6819 6820
    echo "CC=$cc" >> $config_mak
    echo "BCC=bcc" >> $config_mak
6821
    echo "CPP=$cpp" >> $config_mak
6822
    echo "OBJCOPY=objcopy" >> $config_mak
6823
    echo "IASL=$iasl" >> $config_mak
6824
    echo "LD=$ld" >> $config_mak
6825
    echo "RANLIB=$ranlib" >> $config_mak
6826 6827
done

M
Marc-André Lureau 已提交
6828 6829 6830 6831 6832
# set up tests data directory
if [ ! -e tests/data ]; then
    symlink "$source_path/tests/data" tests/data
fi

6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844
# 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

6845 6846 6847 6848 6849 6850 6851 6852 6853 6854
# 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
6855
echo ' "$@"' >>config.status
6856 6857
chmod +x config.status

6858
rm -r "$TMPDIR1"