configure 192.3 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
do_compiler() {
    # Run the compiler, capturing its output to the log. First argument
    # is compiler binary to execute.
    local compiler="$1"
    shift
63 64 65 66 67
    if test -n "$BASH_VERSION"; then eval '
        echo >>config.log "
funcs: ${FUNCNAME[*]}
lines: ${BASH_LINENO[*]}"
    '; fi
68 69
    echo $compiler "$@" >> config.log
    $compiler "$@" >> config.log 2>&1 || return $?
70 71 72 73 74 75 76 77 78 79 80 81 82
    # 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
83 84
    echo $compiler -Werror "$@" >> config.log
    $compiler -Werror "$@" >> config.log 2>&1 && return $?
85 86 87 88
    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."
89 90
}

91 92 93 94 95 96 97 98 99 100 101 102
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.
103 104
    QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"

105 106 107 108 109 110 111 112 113 114 115 116
    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
}

117
compile_object() {
118 119
  local_cflags="$1"
  do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
120 121 122 123 124
}

compile_prog() {
  local_cflags="$1"
  local_ldflags="$2"
125
  do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
126 127
}

128 129
# symbolically link $1 to $2.  Portable version of "ln -sf".
symlink() {
130
  rm -rf "$2"
131
  mkdir -p "$(dirname "$2")"
132
  ln -s "$1" "$2"
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 166 167 168 169 170
# 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 已提交
171 172 173 174
have_backend () {
    echo "$trace_backends" | grep "$1" >/dev/null
}

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 205 206 207 208 209
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 已提交
210 211 212
    # Only i386 and x86_64 provide the xenpv machine.
    case "${1%-softmmu}" in
        i386|x86_64)
213 214 215 216 217 218
            return 0
        ;;
    esac
    return 1
}

219 220 221 222 223 224 225 226 227 228 229
supported_hvf_target() {
    test "$hvf" = "yes" || return 1
    glob "$1" "*-softmmu" || return 1
    case "${1%-softmmu}" in
        x86_64)
            return 0
        ;;
    esac
    return 1
}

230 231 232 233 234 235 236 237 238 239 240
supported_whpx_target() {
    test "$whpx" = "yes" || return 1
    glob "$1" "*-softmmu" || return 1
    case "${1%-softmmu}" in
        i386|x86_64)
            return 0
        ;;
    esac
    return 1
}

241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261
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
262 263 264 265
    test "$tcg" = "yes" && return 0
    supported_kvm_target "$1" && return 0
    supported_xen_target "$1" && return 0
    supported_hax_target "$1" && return 0
266
    supported_hvf_target "$1" && return 0
267
    supported_whpx_target "$1" && return 0
268 269
    print_error "TCG disabled, but hardware accelerator not available for '$target'"
    return 1
270 271
}

272 273 274 275 276

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

B
bellard 已提交
277
# default parameters
278
source_path=$(dirname "$0")
279
cpu=""
280
iasl="iasl"
281
interp_prefix="/usr/gnemul/qemu-%M"
B
bellard 已提交
282
static="no"
B
bellard 已提交
283
cross_prefix=""
M
malc 已提交
284
audio_drv_list=""
285 286
block_drv_rw_whitelist=""
block_drv_ro_whitelist=""
287
host_cc="cc"
J
Juan Quintela 已提交
288
libs_softmmu=""
J
Juan Quintela 已提交
289
libs_tools=""
290
audio_pt_int=""
291
audio_win_int=""
292
libs_qga=""
293
debug_info="yes"
294
stack_protector=""
295

296 297
if test -e "$source_path/.git"
then
298
    git_update=yes
299 300
    git_submodules="ui/keycodemapdb"
else
301
    git_update=no
302
    git_submodules=""
303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320

    if ! test -f "$source_path/ui/keycodemapdb/README"
    then
        echo
        echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
        echo
        echo "This is not a GIT checkout but module content appears to"
        echo "be missing. Do not use 'git archive' or GitHub download links"
        echo "to acquire QEMU source archives. Non-GIT builds are only"
        echo "supported with source archives linked from:"
        echo
        echo "  https://www.qemu.org/download/"
        echo
        echo "Developers working with GIT can use scripts/archive-source.sh"
        echo "if they need to create valid source archives."
        echo
        exit 1
    fi
321
fi
322
git="git"
323

324 325
# Don't accept a target_list environment variable.
unset target_list
326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344

# 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=""
345
netmap="no"
346
sdl=""
347
sdlabi=""
348
virtfs=""
349
mpath=""
J
Jes Sorensen 已提交
350
vnc="yes"
351 352 353 354 355
sparse="no"
vde=""
vnc_sasl=""
vnc_jpeg=""
vnc_png=""
G
Gerd Hoffmann 已提交
356
xkbcommon=""
357
xen=""
358
xen_ctrl_version=""
359
xen_pv_domain_build="no"
360
xen_pci_passthrough=""
361
linux_aio=""
362
cap_ng=""
363
attr=""
364
libattr=""
365
xfs=""
366
tcg="yes"
367
membarrier=""
368
vhost_net="no"
369
vhost_crypto="no"
370
vhost_scsi="no"
371
vhost_vsock="no"
372
vhost_user=""
373
kvm="no"
374
hax="no"
375
hvf="no"
376
whpx="no"
M
Michael R. Hines 已提交
377
rdma=""
378 379 380
gprof="no"
debug_tcg="no"
debug="no"
381
sanitizers="no"
382
fortify_source=""
383
strip_opt="yes"
384
tcg_interpreter="no"
385 386
bigendian="no"
mingw32="no"
B
Blue Swirl 已提交
387 388
gcov="no"
gcov_tool="gcov"
389
EXESUF=""
F
Fam Zheng 已提交
390 391 392
DSOSUF=".so"
LDFLAGS_SHARED="-shared"
modules="no"
393 394
prefix="/usr/local"
mandir="\${prefix}/share/man"
395
datadir="\${prefix}/share"
G
Gerd Hoffmann 已提交
396
firmwarepath="\${prefix}/share/qemu-firmware"
397
qemu_docdir="\${prefix}/share/doc/qemu"
398
bindir="\${prefix}/bin"
A
Alon Levy 已提交
399
libdir="\${prefix}/lib"
400
libexecdir="\${prefix}/libexec"
401
includedir="\${prefix}/include"
402
sysconfdir="\${prefix}/etc"
L
Luiz Capitulino 已提交
403
local_statedir="\${prefix}/var"
404 405 406 407 408 409 410 411 412 413 414 415 416
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=""
417
pie=""
418
qom_cast_debug="yes"
419
trace_backends="log"
420 421 422
trace_file="trace"
spice=""
rbd=""
423
smartcard=""
G
Gerd Hoffmann 已提交
424
libusb=""
425
usb_redir=""
G
Gerd Hoffmann 已提交
426
opengl=""
427
opengl_dmabuf="no"
428
cpuid_h="no"
429
avx2_opt="no"
A
Alon Levy 已提交
430
zlib="yes"
431
capstone=""
432 433
lzo=""
snappy=""
434
bzip2=""
435
guest_agent=""
436
guest_agent_with_vss="no"
437
guest_agent_ntddscsi="no"
438
guest_agent_msi=""
439 440
vss_win32_sdk=""
win_sdk="no"
441
want_tools="yes"
R
Ronnie Sahlberg 已提交
442
libiscsi=""
P
Peter Lieven 已提交
443
libnfs=""
444
coroutine=""
445
coroutine_pool=""
446
debug_stack_usage="no"
447
crypto_afalg="no"
448
seccomp=""
449
glusterfs=""
450
glusterfs_xlator_opt="no"
451
glusterfs_discard="no"
452
glusterfs_fallocate="no"
453
glusterfs_zerofill="no"
A
Anthony Liguori 已提交
454
gtk=""
455
gtkabi=""
456
gtk_gl="no"
457
tls_priority="NORMAL"
458
gnutls=""
459
gnutls_rnd=""
460
nettle=""
461
nettle_kdf="no"
462
gcrypt=""
463
gcrypt_hmac="no"
464
gcrypt_kdf="no"
S
Stefan Weil 已提交
465
vte=""
466
virglrenderer=""
467
tpm="yes"
468
libssh2=""
469
live_block_migration="yes"
470
numa=""
F
Fam Zheng 已提交
471
tcmalloc="no"
472
jemalloc="no"
C
Changlong Xie 已提交
473
replication="yes"
474
vxhs=""
K
Klim Kireev 已提交
475
libxml2=""
476
docker="no"
477
debug_mutex="no"
478

479 480
# cross compilers defaults, can be overridden with --cross-cc-ARCH
cross_cc_aarch64="aarch64-linux-gnu-gcc"
481 482
cross_cc_aarch64_be="$cross_cc_aarch64"
cross_cc_cflags_aarch64_be="-mbig-endian"
483
cross_cc_arm="arm-linux-gnueabihf-gcc"
484
cross_cc_cflags_armeb="-mbig-endian"
485 486
cross_cc_i386="i386-pc-linux-gnu-gcc"
cross_cc_cflags_i386=""
487
cross_cc_powerpc="powerpc-linux-gnu-gcc"
488
cross_cc_powerpc="powerpc-linux-gnu-gcc"
489 490 491

enabled_cross_compilers=""

492 493
supported_cpu="no"
supported_os="no"
494
bogus_os="no"
495
malloc_trim=""
496

497 498
# parse CC options first
for opt do
499
  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
500 501 502
  case "$opt" in
  --cross-prefix=*) cross_prefix="$optarg"
  ;;
503
  --cc=*) CC="$optarg"
504
  ;;
505 506
  --cxx=*) CXX="$optarg"
  ;;
P
Paolo Bonzini 已提交
507 508
  --source-path=*) source_path="$optarg"
  ;;
509 510
  --cpu=*) cpu="$optarg"
  ;;
511
  --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
512
  ;;
513 514
  --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
  ;;
515
  --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
516
                     EXTRA_LDFLAGS="$optarg"
517
  ;;
518 519 520 521
  --enable-debug-info) debug_info="yes"
  ;;
  --disable-debug-info) debug_info="no"
  ;;
522 523
  --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
  ;;
524 525 526
  --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
                      eval "cross_cc_cflags_${cc_arch}=\$optarg"
  ;;
527 528 529
  --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
                eval "cross_cc_${cc_arch}=\$optarg"
  ;;
530 531 532 533
  esac
done
# OS specific
# Using uname is really, really broken.  Once we have the right set of checks
534
# we can eliminate its usage altogether.
535

536 537 538 539 540 541 542 543 544 545
# 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

546 547 548 549 550 551
if test -z "${CXX}${cross_prefix}"; then
  cxx="c++"
else
  cxx="${CXX-${cross_prefix}g++}"
fi

552
ar="${AR-${cross_prefix}ar}"
553
as="${AS-${cross_prefix}as}"
554
ccas="${CCAS-$cc}"
555
cpp="${CPP-$cc -E}"
556 557
objcopy="${OBJCOPY-${cross_prefix}objcopy}"
ld="${LD-${cross_prefix}ld}"
558
ranlib="${RANLIB-${cross_prefix}ranlib}"
S
Stefan Weil 已提交
559
nm="${NM-${cross_prefix}nm}"
560 561
strip="${STRIP-${cross_prefix}strip}"
windres="${WINDRES-${cross_prefix}windres}"
562 563 564 565 566
pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
query_pkg_config() {
    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
}
pkg_config=query_pkg_config
567
sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
568
sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
569

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

573
# default flags for all hosts
574 575 576 577 578
# 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"
579
QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
K
Kevin Wolf 已提交
580
QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
581
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
582
QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
583 584 585 586
if test "$debug_info" = "yes"; then
    CFLAGS="-g $CFLAGS"
    LDFLAGS="-g $LDFLAGS"
fi
587

P
Paolo Bonzini 已提交
588
# make source path absolute
589
source_path=$(cd "$source_path"; pwd)
P
Paolo Bonzini 已提交
590

591 592 593 594 595 596 597 598
# 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

599 600 601
check_define() {
cat > $TMPC <<EOF
#if !defined($1)
602
#error $1 not defined
603 604 605
#endif
int main(void) { return 0; }
EOF
606
  compile_object
607 608
}

609 610 611 612 613 614 615 616
check_include() {
cat > $TMPC <<EOF
#include <$1>
int main(void) { return 0; }
EOF
  compile_object
}

617 618 619 620 621 622
write_c_skeleton() {
    cat > $TMPC <<EOF
int main(void) { return 0; }
EOF
}

623 624 625 626 627 628 629 630 631 632
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'
633 634 635 636 637 638 639 640 641 642
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'
643
else
644 645 646 647 648
  # 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'
649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665
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)
666
  # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
667 668 669 670 671
  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
    cpu="x86_64"
  fi
esac

672 673 674 675
if test ! -z "$cpu" ; then
  # command line argument
  :
elif check_define __i386__ ; then
676 677
  cpu="i386"
elif check_define __x86_64__ ; then
678 679 680 681 682
  if check_define __ILP32__ ; then
    cpu="x32"
  else
    cpu="x86_64"
  fi
B
blueswir1 已提交
683 684 685 686 687 688
elif check_define __sparc__ ; then
  if check_define __arch64__ ; then
    cpu="sparc64"
  else
    cpu="sparc"
  fi
M
malc 已提交
689 690 691 692 693 694
elif check_define _ARCH_PPC ; then
  if check_define _ARCH_PPC64 ; then
    cpu="ppc64"
  else
    cpu="ppc"
  fi
A
Aurelien Jarno 已提交
695 696
elif check_define __mips__ ; then
  cpu="mips"
697 698 699 700 701 702
elif check_define __s390__ ; then
  if check_define __s390x__ ; then
    cpu="s390x"
  else
    cpu="s390"
  fi
703 704
elif check_define __arm__ ; then
  cpu="arm"
705 706
elif check_define __aarch64__ ; then
  cpu="aarch64"
707
else
708
  cpu=$(uname -m)
709 710
fi

711 712 713
ARCH=
# Normalise host CPU name and set ARCH.
# Note that this case should only have supported host CPUs, not guests.
B
bellard 已提交
714
case "$cpu" in
715
  ppc|ppc64|s390|s390x|sparc64|x32)
716 717
    cpu="$cpu"
    supported_cpu="yes"
718
    eval "cross_cc_${cpu}=\$host_cc"
719
  ;;
B
bellard 已提交
720
  i386|i486|i586|i686|i86pc|BePC)
721
    cpu="i386"
722
    supported_cpu="yes"
723
    cross_cc_i386=$host_cc
B
bellard 已提交
724
  ;;
A
aurel32 已提交
725 726
  x86_64|amd64)
    cpu="x86_64"
727
    supported_cpu="yes"
728
    cross_cc_x86_64=$host_cc
A
aurel32 已提交
729
  ;;
730 731
  armv*b|armv*l|arm)
    cpu="arm"
732
    supported_cpu="yes"
733
    cross_cc_arm=$host_cc
B
bellard 已提交
734
  ;;
735 736
  aarch64)
    cpu="aarch64"
737
    supported_cpu="yes"
738
    cross_cc_aarch64=$host_cc
739
  ;;
A
Aurelien Jarno 已提交
740 741
  mips*)
    cpu="mips"
742
    supported_cpu="yes"
743
    cross_cc_mips=$host_cc
A
Aurelien Jarno 已提交
744
  ;;
745
  sparc|sun4[cdmuv])
B
bellard 已提交
746
    cpu="sparc"
747
    supported_cpu="yes"
748
    cross_cc_sparc=$host_cc
B
bellard 已提交
749
  ;;
B
bellard 已提交
750
  *)
751 752
    # This will result in either an error or falling back to TCI later
    ARCH=unknown
B
bellard 已提交
753 754
  ;;
esac
755 756 757
if test -z "$ARCH"; then
  ARCH="$cpu"
fi
J
Juan Quintela 已提交
758

B
bellard 已提交
759
# OS specific
760

761 762 763
# host *BSD for user mode
HOST_VARIANT_DIR=""

B
bellard 已提交
764
case $targetos in
B
bellard 已提交
765
MINGW32*)
766
  mingw32="yes"
767
  hax="yes"
768
  audio_possible_drivers="dsound sdl"
769 770 771 772 773
  if check_include dsound.h; then
    audio_drv_list="dsound"
  else
    audio_drv_list=""
  fi
774
  supported_os="yes"
B
bellard 已提交
775
;;
T
ths 已提交
776
GNU/kFreeBSD)
A
Aurelien Jarno 已提交
777
  bsd="yes"
778
  audio_drv_list="oss"
K
Kővágó, Zoltán 已提交
779
  audio_possible_drivers="oss sdl pa"
T
ths 已提交
780
;;
B
bellard 已提交
781
FreeBSD)
782
  bsd="yes"
783
  make="${MAKE-gmake}"
784
  audio_drv_list="oss"
K
Kővágó, Zoltán 已提交
785
  audio_possible_drivers="oss sdl pa"
786 787
  # needed for kinfo_getvmmap(3) in libutil.h
  LIBS="-lutil $LIBS"
E
Ed Maste 已提交
788 789
  # needed for kinfo_getproc
  libs_qga="-lutil $libs_qga"
790
  netmap=""  # enable netmap autodetect
791
  HOST_VARIANT_DIR="freebsd"
792
  supported_os="yes"
B
bellard 已提交
793
;;
794
DragonFly)
795
  bsd="yes"
796
  make="${MAKE-gmake}"
797
  audio_drv_list="oss"
K
Kővágó, Zoltán 已提交
798
  audio_possible_drivers="oss sdl pa"
799
  HOST_VARIANT_DIR="dragonfly"
800
;;
B
bellard 已提交
801
NetBSD)
802
  bsd="yes"
803
  make="${MAKE-gmake}"
804
  audio_drv_list="oss"
K
Kővágó, Zoltán 已提交
805
  audio_possible_drivers="oss sdl"
806
  oss_lib="-lossaudio"
807
  HOST_VARIANT_DIR="netbsd"
808
  supported_os="yes"
B
bellard 已提交
809 810
;;
OpenBSD)
811
  bsd="yes"
812
  make="${MAKE-gmake}"
B
Brad Smith 已提交
813
  audio_drv_list="sdl"
K
Kővágó, Zoltán 已提交
814
  audio_possible_drivers="sdl"
815
  HOST_VARIANT_DIR="openbsd"
816
  supported_os="yes"
B
bellard 已提交
817
;;
818
Darwin)
819 820
  bsd="yes"
  darwin="yes"
821
  hax="yes"
822
  hvf="yes"
F
Fam Zheng 已提交
823
  LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
824
  if [ "$cpu" = "x86_64" ] ; then
J
Juan Quintela 已提交
825
    QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
826
    LDFLAGS="-arch x86_64 $LDFLAGS"
827 828 829
  fi
  cocoa="yes"
  audio_drv_list="coreaudio"
K
Kővágó, Zoltán 已提交
830
  audio_possible_drivers="coreaudio sdl"
831
  LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
832
  libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
833 834 835
  # 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"
836
  HOST_VARIANT_DIR="darwin"
837
  supported_os="yes"
838
;;
B
bellard 已提交
839
SunOS)
840
  solaris="yes"
841 842
  make="${MAKE-gmake}"
  install="${INSTALL-ginstall}"
843
  smbd="${SMBD-/usr/sfw/sbin/smbd}"
844 845 846 847
  if test -f /usr/include/sys/soundcard.h ; then
    audio_drv_list="oss"
  fi
  audio_possible_drivers="oss sdl"
848 849 850 851
# 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 已提交
852
  QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
853 854 855
  solarisnetlibs="-lsocket -lnsl -lresolv"
  LIBS="$solarisnetlibs $LIBS"
  libs_qga="$solarisnetlibs $libs_qga"
T
ths 已提交
856
;;
857 858 859 860 861
Haiku)
  haiku="yes"
  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
  LIBS="-lposix_error_mapper -lnetwork $LIBS"
;;
862
Linux)
863
  audio_drv_list="oss"
K
Kővágó, Zoltán 已提交
864
  audio_possible_drivers="oss alsa sdl pa"
865 866
  linux="yes"
  linux_user="yes"
867 868
  kvm="yes"
  vhost_net="yes"
869
  vhost_crypto="yes"
870
  vhost_scsi="yes"
871
  vhost_vsock="yes"
872
  QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
873 874
  supported_os="yes"
;;
B
bellard 已提交
875 876
esac

B
bellard 已提交
877
if [ "$bsd" = "yes" ] ; then
878
  if [ "$darwin" != "yes" ] ; then
879
    bsd_user="yes"
880
  fi
B
bellard 已提交
881 882
fi

883 884
: ${make=${MAKE-make}}
: ${install=${INSTALL-install}}
885
: ${python=${PYTHON-python}}
886
: ${smbd=${SMBD-/usr/sbin/smbd}}
887

888 889 890 891 892 893 894
# Default objcc to clang if available, otherwise use CC
if has clang; then
  objcc=clang
else
  objcc="$cc"
fi

895 896
if test "$mingw32" = "yes" ; then
  EXESUF=".exe"
F
Fam Zheng 已提交
897
  DSOSUF=".dll"
J
Juan Quintela 已提交
898
  QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
899 900
  # 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 已提交
901 902
  # MinGW needs -mthreads for TLS and macro _MT.
  QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
903
  LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
904
  write_c_skeleton;
905 906 907
  if compile_prog "" "-liberty" ; then
    LIBS="-liberty $LIBS"
  fi
908
  prefix="c:/Program Files/QEMU"
909
  mandir="\${prefix}"
910
  datadir="\${prefix}"
911
  qemu_docdir="\${prefix}"
912 913
  bindir="\${prefix}"
  sysconfdir="\${prefix}"
914
  local_statedir=
915
  confsuffix=""
916
  libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
917 918
fi

919
werror=""
920

B
bellard 已提交
921
for opt do
922
  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
B
bellard 已提交
923
  case "$opt" in
924 925
  --help|-h) show_help=yes
  ;;
M
Mike Frysinger 已提交
926 927
  --version|-V) exec cat $source_path/VERSION
  ;;
928
  --prefix=*) prefix="$optarg"
B
bellard 已提交
929
  ;;
930
  --interp-prefix=*) interp_prefix="$optarg"
B
bellard 已提交
931
  ;;
P
Paolo Bonzini 已提交
932
  --source-path=*)
B
bellard 已提交
933
  ;;
934
  --cross-prefix=*)
B
bellard 已提交
935
  ;;
936
  --cc=*)
B
bellard 已提交
937
  ;;
938
  --host-cc=*) host_cc="$optarg"
B
bellard 已提交
939
  ;;
940 941
  --cxx=*)
  ;;
942 943
  --iasl=*) iasl="$optarg"
  ;;
944 945
  --objcc=*) objcc="$optarg"
  ;;
946
  --make=*) make="$optarg"
B
bellard 已提交
947
  ;;
948 949
  --install=*) install="$optarg"
  ;;
B
Blue Swirl 已提交
950 951
  --python=*) python="$optarg"
  ;;
B
Blue Swirl 已提交
952 953
  --gcov=*) gcov_tool="$optarg"
  ;;
954 955
  --smbd=*) smbd="$optarg"
  ;;
956
  --extra-cflags=*)
B
bellard 已提交
957
  ;;
958 959
  --extra-cxxflags=*)
  ;;
960
  --extra-ldflags=*)
B
bellard 已提交
961
  ;;
962 963 964 965
  --enable-debug-info)
  ;;
  --disable-debug-info)
  ;;
966 967
  --cross-cc-*)
  ;;
F
Fam Zheng 已提交
968 969
  --enable-modules)
      modules="yes"
970 971 972
  ;;
  --disable-modules)
      modules="no"
F
Fam Zheng 已提交
973
  ;;
974
  --cpu=*)
B
bellard 已提交
975
  ;;
976
  --target-list=*) target_list="$optarg"
B
bellard 已提交
977
  ;;
L
Lluís Vilanova 已提交
978 979 980 981
  --enable-trace-backends=*) trace_backends="$optarg"
  ;;
  # XXX: backwards compatibility
  --enable-trace-backend=*) trace_backends="$optarg"
982
  ;;
983
  --with-trace-file=*) trace_file="$optarg"
P
Prerna Saxena 已提交
984
  ;;
B
bellard 已提交
985 986
  --enable-gprof) gprof="yes"
  ;;
B
Blue Swirl 已提交
987 988
  --enable-gcov) gcov="yes"
  ;;
989 990 991
  --static)
    static="yes"
    LDFLAGS="-static $LDFLAGS"
992
    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
B
bellard 已提交
993
  ;;
994 995 996 997
  --mandir=*) mandir="$optarg"
  ;;
  --bindir=*) bindir="$optarg"
  ;;
A
Alon Levy 已提交
998 999
  --libdir=*) libdir="$optarg"
  ;;
1000 1001
  --libexecdir=*) libexecdir="$optarg"
  ;;
1002 1003
  --includedir=*) includedir="$optarg"
  ;;
1004
  --datadir=*) datadir="$optarg"
1005
  ;;
1006 1007
  --with-confsuffix=*) confsuffix="$optarg"
  ;;
1008
  --docdir=*) qemu_docdir="$optarg"
1009
  ;;
1010
  --sysconfdir=*) sysconfdir="$optarg"
1011
  ;;
L
Luiz Capitulino 已提交
1012 1013
  --localstatedir=*) local_statedir="$optarg"
  ;;
G
Gerd Hoffmann 已提交
1014 1015
  --firmwarepath=*) firmwarepath="$optarg"
  ;;
1016 1017
  --host=*|--build=*|\
  --disable-dependency-tracking|\
L
Luiz Capitulino 已提交
1018
  --sbindir=*|--sharedstatedir=*|\
1019 1020 1021 1022 1023 1024 1025
  --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.
  ;;
1026 1027
  --disable-sdl) sdl="no"
  ;;
1028 1029
  --enable-sdl) sdl="yes"
  ;;
1030 1031
  --with-sdlabi=*) sdlabi="$optarg"
  ;;
1032 1033 1034 1035
  --disable-qom-cast-debug) qom_cast_debug="no"
  ;;
  --enable-qom-cast-debug) qom_cast_debug="yes"
  ;;
1036 1037 1038 1039
  --disable-virtfs) virtfs="no"
  ;;
  --enable-virtfs) virtfs="yes"
  ;;
1040 1041 1042 1043
  --disable-mpath) mpath="no"
  ;;
  --enable-mpath) mpath="yes"
  ;;
J
Jes Sorensen 已提交
1044 1045 1046 1047
  --disable-vnc) vnc="no"
  ;;
  --enable-vnc) vnc="yes"
  ;;
B
blueswir1 已提交
1048 1049
  --oss-lib=*) oss_lib="$optarg"
  ;;
M
malc 已提交
1050
  --audio-drv-list=*) audio_drv_list="$optarg"
B
bellard 已提交
1051
  ;;
1052
  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1053
  ;;
1054
  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1055
  ;;
1056 1057 1058 1059
  --enable-debug-tcg) debug_tcg="yes"
  ;;
  --disable-debug-tcg) debug_tcg="no"
  ;;
P
Paul Brook 已提交
1060 1061 1062
  --enable-debug)
      # Enable debugging options that aren't excessively noisy
      debug_tcg="yes"
1063
      debug_mutex="yes"
P
Paul Brook 已提交
1064 1065
      debug="yes"
      strip_opt="no"
1066
      fortify_source="no"
P
Paul Brook 已提交
1067
  ;;
1068 1069 1070 1071
  --enable-sanitizers) sanitizers="yes"
  ;;
  --disable-sanitizers) sanitizers="no"
  ;;
1072 1073 1074 1075
  --enable-sparse) sparse="yes"
  ;;
  --disable-sparse) sparse="no"
  ;;
1076 1077
  --disable-strip) strip_opt="no"
  ;;
1078 1079
  --disable-vnc-sasl) vnc_sasl="no"
  ;;
1080 1081
  --enable-vnc-sasl) vnc_sasl="yes"
  ;;
1082 1083 1084 1085
  --disable-vnc-jpeg) vnc_jpeg="no"
  ;;
  --enable-vnc-jpeg) vnc_jpeg="yes"
  ;;
C
Corentin Chary 已提交
1086 1087 1088 1089
  --disable-vnc-png) vnc_png="no"
  ;;
  --enable-vnc-png) vnc_png="yes"
  ;;
B
bellard 已提交
1090
  --disable-slirp) slirp="no"
1091
  ;;
1092
  --disable-vde) vde="no"
1093
  ;;
1094 1095
  --enable-vde) vde="yes"
  ;;
1096 1097 1098 1099
  --disable-netmap) netmap="no"
  ;;
  --enable-netmap) netmap="yes"
  ;;
1100 1101
  --disable-xen) xen="no"
  ;;
1102 1103
  --enable-xen) xen="yes"
  ;;
1104 1105 1106 1107
  --disable-xen-pci-passthrough) xen_pci_passthrough="no"
  ;;
  --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
  ;;
1108 1109 1110 1111
  --disable-xen-pv-domain-build) xen_pv_domain_build="no"
  ;;
  --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
  ;;
A
aurel32 已提交
1112 1113
  --disable-brlapi) brlapi="no"
  ;;
1114 1115
  --enable-brlapi) brlapi="yes"
  ;;
B
balrog 已提交
1116 1117
  --disable-bluez) bluez="no"
  ;;
1118 1119
  --enable-bluez) bluez="yes"
  ;;
A
aliguori 已提交
1120 1121
  --disable-kvm) kvm="no"
  ;;
1122 1123
  --enable-kvm) kvm="yes"
  ;;
1124
  --disable-hax) hax="no"
1125
  ;;
1126
  --enable-hax) hax="yes"
1127
  ;;
1128 1129 1130 1131
  --disable-hvf) hvf="no"
  ;;
  --enable-hvf) hvf="yes"
  ;;
1132 1133 1134 1135
  --disable-whpx) whpx="no"
  ;;
  --enable-whpx) whpx="yes"
  ;;
1136 1137 1138 1139
  --disable-tcg-interpreter) tcg_interpreter="no"
  ;;
  --enable-tcg-interpreter) tcg_interpreter="yes"
  ;;
1140 1141 1142 1143
  --disable-cap-ng)  cap_ng="no"
  ;;
  --enable-cap-ng) cap_ng="yes"
  ;;
1144 1145 1146 1147
  --disable-tcg) tcg="no"
  ;;
  --enable-tcg) tcg="yes"
  ;;
1148 1149 1150 1151
  --disable-malloc-trim) malloc_trim="no"
  ;;
  --enable-malloc-trim) malloc_trim="yes"
  ;;
1152 1153 1154 1155
  --disable-spice) spice="no"
  ;;
  --enable-spice) spice="yes"
  ;;
R
Ronnie Sahlberg 已提交
1156 1157 1158 1159
  --disable-libiscsi) libiscsi="no"
  ;;
  --enable-libiscsi) libiscsi="yes"
  ;;
P
Peter Lieven 已提交
1160 1161 1162 1163
  --disable-libnfs) libnfs="no"
  ;;
  --enable-libnfs) libnfs="yes"
  ;;
1164 1165
  --enable-profiler) profiler="yes"
  ;;
1166 1167
  --disable-cocoa) cocoa="no"
  ;;
1168 1169
  --enable-cocoa)
      cocoa="yes" ;
1170
      audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1171
  ;;
P
pbrook 已提交
1172
  --disable-system) softmmu="no"
1173
  ;;
P
pbrook 已提交
1174
  --enable-system) softmmu="yes"
1175
  ;;
1176 1177 1178 1179 1180
  --disable-user)
      linux_user="no" ;
      bsd_user="no" ;
  ;;
  --enable-user) ;;
1181
  --disable-linux-user) linux_user="no"
1182
  ;;
1183 1184
  --enable-linux-user) linux_user="yes"
  ;;
B
blueswir1 已提交
1185 1186 1187 1188
  --disable-bsd-user) bsd_user="no"
  ;;
  --enable-bsd-user) bsd_user="yes"
  ;;
1189
  --enable-pie) pie="yes"
1190
  ;;
1191
  --disable-pie) pie="no"
1192
  ;;
1193 1194 1195 1196
  --enable-werror) werror="yes"
  ;;
  --disable-werror) werror="no"
  ;;
1197 1198 1199 1200
  --enable-stack-protector) stack_protector="yes"
  ;;
  --disable-stack-protector) stack_protector="no"
  ;;
B
balrog 已提交
1201 1202
  --disable-curses) curses="no"
  ;;
1203 1204
  --enable-curses) curses="yes"
  ;;
A
Alexander Graf 已提交
1205 1206
  --disable-curl) curl="no"
  ;;
1207 1208
  --enable-curl) curl="yes"
  ;;
1209 1210 1211 1212
  --disable-fdt) fdt="no"
  ;;
  --enable-fdt) fdt="yes"
  ;;
1213 1214 1215 1216
  --disable-linux-aio) linux_aio="no"
  ;;
  --enable-linux-aio) linux_aio="yes"
  ;;
1217 1218 1219 1220
  --disable-attr) attr="no"
  ;;
  --enable-attr) attr="yes"
  ;;
1221 1222 1223 1224
  --disable-membarrier) membarrier="no"
  ;;
  --enable-membarrier) membarrier="yes"
  ;;
T
ths 已提交
1225 1226
  --disable-blobs) blobs="no"
  ;;
1227
  --with-pkgversion=*) pkgversion="$optarg"
P
pbrook 已提交
1228
  ;;
1229 1230
  --with-coroutine=*) coroutine="$optarg"
  ;;
1231 1232 1233 1234
  --disable-coroutine-pool) coroutine_pool="no"
  ;;
  --enable-coroutine-pool) coroutine_pool="yes"
  ;;
1235 1236
  --enable-debug-stack-usage) debug_stack_usage="yes"
  ;;
1237 1238 1239 1240
  --enable-crypto-afalg) crypto_afalg="yes"
  ;;
  --disable-crypto-afalg) crypto_afalg="no"
  ;;
J
Juan Quintela 已提交
1241
  --disable-docs) docs="no"
1242
  ;;
J
Juan Quintela 已提交
1243
  --enable-docs) docs="yes"
1244
  ;;
M
Michael S. Tsirkin 已提交
1245 1246 1247 1248
  --disable-vhost-net) vhost_net="no"
  ;;
  --enable-vhost-net) vhost_net="yes"
  ;;
1249 1250 1251 1252 1253 1254 1255 1256
  --disable-vhost-crypto) vhost_crypto="no"
  ;;
  --enable-vhost-crypto)
      vhost_crypto="yes"
      if test "$mingw32" = "yes"; then
          error_exit "vhost-crypto isn't available on win32"
      fi
  ;;
1257 1258 1259 1260
  --disable-vhost-scsi) vhost_scsi="no"
  ;;
  --enable-vhost-scsi) vhost_scsi="yes"
  ;;
1261 1262 1263 1264
  --disable-vhost-vsock) vhost_vsock="no"
  ;;
  --enable-vhost-vsock) vhost_vsock="yes"
  ;;
G
Gerd Hoffmann 已提交
1265
  --disable-opengl) opengl="no"
M
Michael Walle 已提交
1266
  ;;
G
Gerd Hoffmann 已提交
1267
  --enable-opengl) opengl="yes"
M
Michael Walle 已提交
1268
  ;;
1269 1270 1271 1272
  --disable-rbd) rbd="no"
  ;;
  --enable-rbd) rbd="yes"
  ;;
1273 1274 1275 1276
  --disable-xfsctl) xfs="no"
  ;;
  --enable-xfsctl) xfs="yes"
  ;;
1277
  --disable-smartcard) smartcard="no"
R
Robert Relyea 已提交
1278
  ;;
1279
  --enable-smartcard) smartcard="yes"
R
Robert Relyea 已提交
1280
  ;;
G
Gerd Hoffmann 已提交
1281 1282 1283 1284
  --disable-libusb) libusb="no"
  ;;
  --enable-libusb) libusb="yes"
  ;;
1285 1286 1287 1288
  --disable-usb-redir) usb_redir="no"
  ;;
  --enable-usb-redir) usb_redir="yes"
  ;;
A
Alon Levy 已提交
1289 1290
  --disable-zlib-test) zlib="no"
  ;;
1291 1292
  --disable-lzo) lzo="no"
  ;;
Q
qiaonuohan 已提交
1293 1294
  --enable-lzo) lzo="yes"
  ;;
1295 1296
  --disable-snappy) snappy="no"
  ;;
Q
qiaonuohan 已提交
1297 1298
  --enable-snappy) snappy="yes"
  ;;
1299 1300 1301 1302
  --disable-bzip2) bzip2="no"
  ;;
  --enable-bzip2) bzip2="yes"
  ;;
1303 1304 1305 1306
  --enable-guest-agent) guest_agent="yes"
  ;;
  --disable-guest-agent) guest_agent="no"
  ;;
1307 1308 1309 1310
  --enable-guest-agent-msi) guest_agent_msi="yes"
  ;;
  --disable-guest-agent-msi) guest_agent_msi="no"
  ;;
1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322
  --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"
  ;;
1323 1324 1325 1326
  --enable-tools) want_tools="yes"
  ;;
  --disable-tools) want_tools="no"
  ;;
1327 1328 1329 1330
  --enable-seccomp) seccomp="yes"
  ;;
  --disable-seccomp) seccomp="no"
  ;;
1331 1332 1333 1334
  --disable-glusterfs) glusterfs="no"
  ;;
  --enable-glusterfs) glusterfs="yes"
  ;;
1335 1336
  --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
      echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1337
  ;;
F
Fam Zheng 已提交
1338 1339 1340
  --enable-vhdx|--disable-vhdx)
      echo "$0: $opt is obsolete, VHDX driver is always built" >&2
  ;;
1341 1342 1343
  --enable-uuid|--disable-uuid)
      echo "$0: $opt is obsolete, UUID support is always built" >&2
  ;;
A
Anthony Liguori 已提交
1344 1345 1346 1347
  --disable-gtk) gtk="no"
  ;;
  --enable-gtk) gtk="yes"
  ;;
1348 1349
  --tls-priority=*) tls_priority="$optarg"
  ;;
1350 1351 1352 1353
  --disable-gnutls) gnutls="no"
  ;;
  --enable-gnutls) gnutls="yes"
  ;;
1354 1355 1356 1357 1358 1359 1360 1361
  --disable-nettle) nettle="no"
  ;;
  --enable-nettle) nettle="yes"
  ;;
  --disable-gcrypt) gcrypt="no"
  ;;
  --enable-gcrypt) gcrypt="yes"
  ;;
M
Michael R. Hines 已提交
1362 1363 1364 1365
  --enable-rdma) rdma="yes"
  ;;
  --disable-rdma) rdma="no"
  ;;
1366 1367
  --with-gtkabi=*) gtkabi="$optarg"
  ;;
S
Stefan Weil 已提交
1368 1369 1370 1371
  --disable-vte) vte="no"
  ;;
  --enable-vte) vte="yes"
  ;;
1372 1373 1374 1375
  --disable-virglrenderer) virglrenderer="no"
  ;;
  --enable-virglrenderer) virglrenderer="yes"
  ;;
1376 1377
  --disable-tpm) tpm="no"
  ;;
S
Stefan Berger 已提交
1378 1379
  --enable-tpm) tpm="yes"
  ;;
1380 1381 1382 1383
  --disable-libssh2) libssh2="no"
  ;;
  --enable-libssh2) libssh2="yes"
  ;;
1384 1385 1386 1387
  --disable-live-block-migration) live_block_migration="no"
  ;;
  --enable-live-block-migration) live_block_migration="yes"
  ;;
1388 1389 1390 1391
  --disable-numa) numa="no"
  ;;
  --enable-numa) numa="yes"
  ;;
K
Klim Kireev 已提交
1392 1393 1394 1395
  --disable-libxml2) libxml2="no"
  ;;
  --enable-libxml2) libxml2="yes"
  ;;
F
Fam Zheng 已提交
1396 1397 1398 1399
  --disable-tcmalloc) tcmalloc="no"
  ;;
  --enable-tcmalloc) tcmalloc="yes"
  ;;
1400 1401 1402 1403
  --disable-jemalloc) jemalloc="no"
  ;;
  --enable-jemalloc) jemalloc="yes"
  ;;
C
Changlong Xie 已提交
1404 1405 1406 1407
  --disable-replication) replication="no"
  ;;
  --enable-replication) replication="yes"
  ;;
1408 1409 1410 1411
  --disable-vxhs) vxhs="no"
  ;;
  --enable-vxhs) vxhs="yes"
  ;;
1412 1413 1414 1415 1416 1417 1418 1419
  --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
  ;;
1420 1421 1422 1423
  --disable-capstone) capstone="no"
  ;;
  --enable-capstone) capstone="yes"
  ;;
1424 1425 1426 1427
  --enable-capstone=git) capstone="git"
  ;;
  --enable-capstone=system) capstone="system"
  ;;
1428 1429
  --with-git=*) git="$optarg"
  ;;
1430 1431 1432 1433
  --enable-git-update) git_update=yes
  ;;
  --disable-git-update) git_update=no
  ;;
1434 1435 1436 1437
  --enable-debug-mutex) debug_mutex=yes
  ;;
  --disable-debug-mutex) debug_mutex=no
  ;;
F
Fam Zheng 已提交
1438 1439 1440 1441
  *)
      echo "ERROR: unknown option $opt"
      echo "Try '$0 --help' for more information"
      exit 1
1442
  ;;
B
bellard 已提交
1443 1444 1445
  esac
done

1446 1447 1448 1449 1450 1451 1452 1453
if test "$vhost_user" = ""; then
    if test "$mingw32" = "yes"; then
        vhost_user="no"
    else
        vhost_user="yes"
    fi
fi

1454
case "$cpu" in
1455 1456 1457
    ppc)
           CPU_CFLAGS="-m32"
           LDFLAGS="-m32 $LDFLAGS"
1458 1459
           cross_cc_powerpc=$cc
           cross_cc_cflags_powerpc=$CPU_CFLAGS
1460 1461 1462 1463
           ;;
    ppc64)
           CPU_CFLAGS="-m64"
           LDFLAGS="-m64 $LDFLAGS"
1464 1465
           cross_cc_ppc64=$cc
           cross_cc_cflags_ppc64=$CPU_CFLAGS
1466
           ;;
1467
    sparc)
1468 1469
           CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
           LDFLAGS="-m32 -mv8plus $LDFLAGS"
1470 1471
           cross_cc_sparc=$cc
           cross_cc_cflags_sparc=$CPU_CFLAGS
1472
           ;;
1473
    sparc64)
1474
           CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1475
           LDFLAGS="-m64 $LDFLAGS"
1476 1477
           cross_cc_sparc64=$cc
           cross_cc_cflags_sparc64=$CPU_CFLAGS
1478
           ;;
1479
    s390)
1480
           CPU_CFLAGS="-m31"
1481
           LDFLAGS="-m31 $LDFLAGS"
1482 1483
           cross_cc_s390=$cc
           cross_cc_cflags_s390=$CPU_CFLAGS
1484 1485
           ;;
    s390x)
1486
           CPU_CFLAGS="-m64"
1487
           LDFLAGS="-m64 $LDFLAGS"
1488 1489
           cross_cc_s390x=$cc
           cross_cc_cflags_s390x=$CPU_CFLAGS
1490
           ;;
1491
    i386)
1492
           CPU_CFLAGS="-m32"
1493
           LDFLAGS="-m32 $LDFLAGS"
1494 1495
           cross_cc_i386=$cc
           cross_cc_cflags_i386=$CPU_CFLAGS
1496 1497
           ;;
    x86_64)
R
Richard Henderson 已提交
1498 1499 1500 1501
           # ??? 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"
1502
           LDFLAGS="-m64 $LDFLAGS"
1503 1504
           cross_cc_x86_64=$cc
           cross_cc_cflags_x86_64=$CPU_CFLAGS
1505
           ;;
1506 1507 1508
    x32)
           CPU_CFLAGS="-mx32"
           LDFLAGS="-mx32 $LDFLAGS"
1509
           cross_cc_i386=$cc
1510
           cross_cc_cflags_i386=$CPU_CFLAGS
1511
           ;;
1512
    # No special flags required for other host CPUs
1513 1514
esac

1515 1516
QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"

1517 1518 1519 1520 1521 1522 1523
# 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

1524 1525
default_target_list=""

1526 1527 1528 1529
mak_wilds=""

if [ "$softmmu" = "yes" ]; then
    mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1530
fi
1531 1532
if [ "$linux_user" = "yes" ]; then
    mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1533
fi
1534 1535
if [ "$bsd_user" = "yes" ]; then
    mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1536 1537
fi

1538 1539 1540 1541
for config in $mak_wilds; do
    default_target_list="${default_target_list} $(basename "$config" .mak)"
done

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

1545 1546 1547 1548 1549 1550
if test x"$show_help" = x"yes" ; then
cat << EOF

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

1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569
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
1570
  --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1571
  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1572
  --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1573
  --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
1574 1575 1576 1577
  --make=MAKE              use specified make [$make]
  --install=INSTALL        use specified install [$install]
  --python=PYTHON          use specified python [$python]
  --smbd=SMBD              use specified smbd [$smbd]
1578
  --with-git=GIT           use specified git [$git]
1579 1580 1581 1582 1583 1584
  --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
1585
  --libexecdir=PATH        install helper binaries in PATH
1586 1587
  --sysconfdir=PATH        install config in PATH$confsuffix
  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
G
Gerd Hoffmann 已提交
1588
  --firmwarepath=PATH      search PATH for firmware files
F
Fam Zheng 已提交
1589
  --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1590
  --with-pkgversion=VERS   use specified string as sub-version of the package
1591
  --enable-debug           enable common debug build options
1592
  --enable-sanitizers      enable default sanitizers
1593 1594
  --disable-strip          disable stripping binaries
  --disable-werror         disable compilation abort on warning
1595
  --disable-stack-protector disable compiler-provided stack protection
1596 1597 1598 1599 1600 1601 1602 1603 1604
  --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 已提交
1605
  --enable-trace-backends=B Set trace backend
1606
                           Available backends: $trace_backend_list
1607 1608
  --with-trace-file=NAME   Full PATH,NAME of file to store traces
                           Default:trace-<pid>
1609 1610
  --disable-slirp          disable SLIRP userspace network connectivity
  --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1611
  --enable-malloc-trim     enable libc malloc_trim() for memory optimization
1612 1613
  --oss-lib                path to OSS library
  --cpu=CPU                Build for host CPU [$cpu]
1614
  --with-coroutine=BACKEND coroutine backend. Supported options:
1615
                           ucontext, sigaltstack, windows
1616 1617
  --enable-gcov            enable test coverage analysis with gcov
  --gcov=GCOV              use specified gcov [$gcov_tool]
1618 1619 1620
  --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)
1621
  --tls-priority           default TLS protocol/cipher priority string
1622 1623 1624 1625 1626 1627
  --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
1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644

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

1645
  gnutls          GNUTLS cryptography support
1646 1647
  nettle          nettle cryptography support
  gcrypt          libgcrypt cryptography support
1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659
  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
1660
  mpath           Multipath persistent reservation passthrough
1661
  xen             xen backend driver support
1662
  xen-pci-passthrough    PCI passthrough support for Xen
1663 1664
  brlapi          BrlAPI (Braile)
  curl            curl connectivity
1665
  membarrier      membarrier system call (for Linux 4.14+ or Windows)
1666 1667 1668
  fdt             fdt device tree
  bluez           bluez stack connectivity
  kvm             KVM acceleration support
1669
  hax             HAX acceleration support
1670
  hvf             Hypervisor.framework acceleration support
1671
  whpx            Windows Hypervisor Platform acceleration support
1672
  rdma            Enable RDMA-based migration and PVRDMA support
1673 1674 1675 1676 1677 1678
  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
1679
  vhost-crypto    vhost-crypto acceleration support
1680 1681 1682 1683
  spice           spice
  rbd             rados block device (rbd)
  libiscsi        iscsi support
  libnfs          nfs support
1684
  smartcard       smartcard support (libcacard)
1685
  libusb          libusb (for usb passthrough)
1686
  live-block-migration   Block migration in the main migration stream
1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697
  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
K
Klim Kireev 已提交
1698
  libxml2         for Parallels image format
1699
  tcmalloc        tcmalloc support
1700
  jemalloc        jemalloc support
C
Changlong Xie 已提交
1701
  replication     replication support
1702 1703 1704 1705 1706 1707
  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
1708
  vxhs            Veritas HyperScale vDisk backend support
1709
  crypto-afalg    Linux AF_ALG crypto backend driver
1710
  vhost-user      vhost-user support
1711
  capstone        capstone disassembler support
1712
  debug-mutex     mutex debugging support
1713 1714

NOTE: The object files are built at the place where configure is launched
1715
EOF
F
Fam Zheng 已提交
1716
exit 0
1717 1718
fi

1719 1720 1721 1722 1723 1724
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.
1725 1726
if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
  error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
1727 1728 1729 1730 1731 1732
      "Use --python=/path/to/python to specify a supported Python."
fi

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

1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746
# 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

1747 1748 1749 1750 1751 1752
# 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
1753
        error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1754 1755 1756
    fi
fi

1757 1758 1759 1760
# 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 \
1761
        \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1762 1763 1764 1765 1766 1767
        werror="yes"
    else
        werror="no"
    fi
fi

1768 1769 1770 1771 1772
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.
1773
    error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1774 1775
fi

1776 1777
gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1778
gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1779
gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1780
gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1781
gcc_flags="-Wno-string-plus-int $gcc_flags"
1782
gcc_flags="-Wno-error=address-of-packed-member $gcc_flags"
1783 1784 1785 1786
# 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.
1787 1788 1789 1790

cc_has_warning_flag() {
    write_c_skeleton;

1791 1792 1793
    # Use the positive sense of the flag when testing for -Wno-wombat
    # support (gcc will happily accept the -Wno- form of unknown
    # warning options).
1794 1795 1796 1797 1798 1799 1800
    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"
1801 1802 1803
    fi
done

1804
if test "$stack_protector" != "no"; then
1805 1806 1807 1808 1809 1810 1811 1812 1813 1814
  cat > $TMPC << EOF
int main(int argc, char *argv[])
{
    char arr[64], *p = arr, *c = argv[0];
    while (*c) {
        *p++ = *c++;
    }
    return 0;
}
EOF
1815
  gcc_flags="-fstack-protector-strong -fstack-protector-all"
1816
  sp_on=0
1817
  for flag in $gcc_flags; do
1818 1819 1820 1821
    # 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
1822
      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1823
      sp_on=1
1824 1825 1826
      break
    fi
  done
1827 1828 1829 1830 1831
  if test "$stack_protector" = yes; then
    if test $sp_on = 0; then
      error_exit "Stack protector not supported"
    fi
  fi
1832 1833
fi

1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846
# 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

1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861
# 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

1862
if test "$static" = "yes" ; then
1863 1864 1865
  if test "$modules" = "yes" ; then
    error_exit "static and modules are mutually incompatible"
  fi
1866
  if test "$pie" = "yes" ; then
1867
    error_exit "static and pie are mutually incompatible"
1868 1869 1870 1871 1872
  else
    pie="no"
  fi
fi

1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883
# 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

1884 1885
if test "$pie" = ""; then
  case "$cpu-$targetos" in
1886
    i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1887 1888 1889 1890 1891 1892 1893 1894 1895
      ;;
    *)
      pie="no"
      ;;
  esac
fi

if test "$pie" != "no" ; then
  cat > $TMPC << EOF
1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906

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

static THREAD int tls_var;

int main(void) { return tls_var; }

1907 1908 1909 1910 1911 1912 1913 1914 1915 1916
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
1917
      error_exit "PIE not available due to missing toolchain support"
1918 1919 1920 1921 1922
    else
      echo "Disabling PIE due to missing toolchain support"
      pie="no"
    fi
  fi
B
Brad 已提交
1923

1924
  if compile_prog "-Werror -fno-pie" "-nopie"; then
B
Brad 已提交
1925 1926 1927
    CFLAGS_NOPIE="-fno-pie"
    LDFLAGS_NOPIE="-nopie"
  fi
1928 1929
fi

P
Paolo Bonzini 已提交
1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944
##########################################
# __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;
1945
  val = __sync_val_compare_and_swap(&val, 0, 1);
P
Paolo Bonzini 已提交
1946 1947 1948 1949 1950 1951 1952 1953 1954 1955
  sfaa(&val);
  return val;
}
EOF
  if ! compile_prog "" "" ; then
    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
  fi
fi

#########################################
B
bellard 已提交
1956
# Solaris specific configure tool chain decisions
P
Paolo Bonzini 已提交
1957

B
bellard 已提交
1958
if test "$solaris" = "yes" ; then
1959 1960 1961
  if has $install; then
    :
  else
1962 1963 1964
    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 已提交
1965
  fi
1966
  if test "$(path_of $install)" = "/usr/sbin/install" ; then
1967 1968 1969
    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 已提交
1970
  fi
1971 1972 1973
  if has ar; then
    :
  else
B
bellard 已提交
1974
    if test -f /usr/ccs/bin/ar ; then
1975 1976
      error_exit "No path includes ar" \
          "Add /usr/ccs/bin to your path and rerun configure"
B
bellard 已提交
1977
    fi
1978
    error_exit "No path includes ar"
B
bellard 已提交
1979
  fi
1980
fi
B
bellard 已提交
1981

1982
if test -z "${target_list+xxx}" ; then
1983 1984 1985 1986 1987
    for target in $default_target_list; do
        supported_target $target 2>/dev/null && \
            target_list="$target_list $target"
    done
    target_list="${target_list# }"
1988
else
1989
    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001
    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
2002
fi
2003

P
Paolo Bonzini 已提交
2004 2005 2006 2007 2008 2009 2010
# see if system emulation was really requested
case " $target_list " in
  *"-softmmu "*) softmmu=yes
  ;;
  *) softmmu=no
  ;;
esac
B
bellard 已提交
2011

2012 2013
feature_not_found() {
  feature=$1
2014
  remedy=$2
2015

2016
  error_exit "User requested feature $feature" \
2017 2018
      "configure was not able to find it." \
      "$remedy"
2019 2020
}

B
bellard 已提交
2021 2022 2023
# ---
# big/little endian test
cat > $TMPC << EOF
2024 2025 2026 2027 2028
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 已提交
2029 2030 2031
}
EOF

2032
if compile_object ; then
2033
    if strings -a $TMPO | grep -q BiGeNdIaN ; then
2034
        bigendian="yes"
2035
    elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2036 2037 2038
        bigendian="no"
    else
        echo big/little test failed
2039
    fi
2040 2041
else
    echo big/little test failed
B
bellard 已提交
2042 2043
fi

2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058
##########################################
# 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

2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071
# 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

2072 2073 2074 2075 2076
##########################################
# L2TPV3 probe

cat > $TMPC <<EOF
#include <sys/socket.h>
2077
#include <linux/ip.h>
2078 2079 2080 2081 2082 2083 2084 2085
int main(void) { return sizeof(struct mmsghdr); }
EOF
if compile_prog "" "" ; then
  l2tpv3=yes
else
  l2tpv3=no
fi

2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116
##########################################
# 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 已提交
2117 2118 2119 2120
##########################################
# pkg-config probe

if ! has "$pkg_config_exe"; then
2121
  error_exit "pkg-config binary '$pkg_config_exe' not found"
S
Stefan Weil 已提交
2122 2123
fi

2124 2125 2126
##########################################
# NPTL probe

2127
if test "$linux_user" = "yes"; then
2128
  cat > $TMPC <<EOF
2129
#include <sched.h>
P
pbrook 已提交
2130
#include <linux/futex.h>
2131
int main(void) {
2132 2133 2134
#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
#error bork
#endif
2135
  return 0;
2136 2137
}
EOF
2138
  if ! compile_object ; then
2139
    feature_not_found "nptl" "Install glibc and linux kernel headers."
2140
  fi
2141 2142
fi

2143
#########################################
2144 2145
# zlib check

A
Alon Levy 已提交
2146 2147
if test "$zlib" != "no" ; then
    cat > $TMPC << EOF
2148 2149 2150
#include <zlib.h>
int main(void) { zlibVersion(); return 0; }
EOF
A
Alon Levy 已提交
2151 2152 2153
    if compile_prog "" "-lz" ; then
        :
    else
2154 2155
        error_exit "zlib check failed" \
            "Make sure to have the zlib libs and headers installed."
A
Alon Levy 已提交
2156
    fi
2157
fi
2158
LIBS="$LIBS -lz"
2159

Q
qiaonuohan 已提交
2160 2161 2162 2163 2164 2165 2166 2167 2168
##########################################
# 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
2169 2170
        libs_softmmu="$libs_softmmu -llzo2"
        lzo="yes"
Q
qiaonuohan 已提交
2171
    else
2172 2173 2174 2175
        if test "$lzo" = "yes"; then
            feature_not_found "liblzo2" "Install liblzo2 devel"
        fi
        lzo="no"
Q
qiaonuohan 已提交
2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187
    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
2188 2189
        libs_softmmu="$libs_softmmu -lsnappy"
        snappy="yes"
Q
qiaonuohan 已提交
2190
    else
2191 2192 2193 2194
        if test "$snappy" = "yes"; then
            feature_not_found "libsnappy" "Install libsnappy devel"
        fi
        snappy="no"
Q
qiaonuohan 已提交
2195 2196 2197
    fi
fi

2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215
##########################################
# 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

2216 2217 2218 2219
##########################################
# libseccomp check

if test "$seccomp" != "no" ; then
2220 2221
    case "$cpu" in
    i386|x86_64)
2222
        libseccomp_minver="2.1.0"
2223
        ;;
2224 2225 2226
    mips)
        libseccomp_minver="2.2.0"
        ;;
2227 2228 2229
    arm|aarch64)
        libseccomp_minver="2.2.3"
        ;;
2230
    ppc|ppc64|s390x)
2231 2232
        libseccomp_minver="2.3.0"
        ;;
2233 2234 2235 2236 2237 2238 2239
    *)
        libseccomp_minver=""
        ;;
    esac

    if test "$libseccomp_minver" != "" &&
       $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2240 2241
        seccomp_cflags="$($pkg_config --cflags libseccomp)"
        seccomp_libs="$($pkg_config --libs libseccomp)"
2242
        seccomp="yes"
2243
    else
2244 2245 2246 2247 2248 2249 2250 2251 2252 2253
        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"
2254 2255
    fi
fi
2256 2257 2258
##########################################
# xen probe

2259
if test "$xen" != "no" ; then
2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270
  # 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"
A
Anthony PERARD 已提交
2271 2272 2273
    if $pkg_config --exists xentoolcore; then
      xen_pc="$xen_pc xentoolcore"
    fi
2274 2275 2276 2277
    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
2278

2279
    xen_libs="-lxenstore -lxenctrl -lxenguest"
2280
    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2281

2282 2283 2284 2285 2286 2287
    # 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
2288
#include <xenctrl.h>
2289 2290 2291 2292
int main(void) {
  return 0;
}
EOF
2293 2294 2295 2296 2297 2298
    if ! compile_prog "" "$xen_libs" ; then
      # Xen not found
      if test "$xen" = "yes" ; then
        feature_not_found "xen" "Install xen devel"
      fi
      xen=no
2299

2300 2301 2302
    # Xen unstable
    elif
        cat > $TMPC <<EOF &&
2303 2304 2305
#undef XC_WANT_COMPAT_DEVICEMODEL_API
#define __XEN_TOOLS__
#include <xendevicemodel.h>
2306
#include <xenforeignmemory.h>
2307 2308
int main(void) {
  xendevicemodel_handle *xd;
2309
  xenforeignmemory_handle *xfmem;
2310 2311 2312 2313

  xd = xendevicemodel_open(0, 0);
  xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);

2314 2315 2316
  xfmem = xenforeignmemory_open(0, 0);
  xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);

2317 2318 2319 2320 2321 2322 2323 2324 2325 2326
  return 0;
}
EOF
        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
      then
      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
      xen_ctrl_version=41100
      xen=yes
    elif
        cat > $TMPC <<EOF &&
2327 2328
#undef XC_WANT_COMPAT_MAP_FOREIGN_API
#include <xenforeignmemory.h>
A
Anthony PERARD 已提交
2329
#include <xentoolcore.h>
2330 2331 2332 2333 2334
int main(void) {
  xenforeignmemory_handle *xfmem;

  xfmem = xenforeignmemory_open(0, 0);
  xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
A
Anthony PERARD 已提交
2335
  xentoolcore_restrict_all(0);
2336 2337 2338 2339

  return 0;
}
EOF
A
Anthony PERARD 已提交
2340
        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2341
      then
A
Anthony PERARD 已提交
2342
      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2343 2344 2345 2346
      xen_ctrl_version=41000
      xen=yes
    elif
        cat > $TMPC <<EOF &&
2347 2348 2349 2350 2351 2352 2353 2354
#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);
2355

2356 2357 2358
  return 0;
}
EOF
2359 2360 2361 2362 2363 2364 2365
        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 &&
2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414
/*
 * 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
2415 2416 2417 2418 2419 2420
        compile_prog "" "$xen_libs $xen_stable_libs"
      then
      xen_ctrl_version=40800
      xen=yes
    elif
        cat > $TMPC <<EOF &&
2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465
/*
 * 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
2466 2467 2468 2469 2470 2471
        compile_prog "" "$xen_libs $xen_stable_libs"
      then
      xen_ctrl_version=40701
      xen=yes
    elif
        cat > $TMPC <<EOF &&
2472
#include <xenctrl.h>
2473 2474 2475 2476 2477 2478 2479 2480
#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
2481 2482 2483 2484 2485 2486 2487 2488
        compile_prog "" "$xen_libs"
      then
      xen_ctrl_version=40700
      xen=yes

    # Xen 4.6
    elif
        cat > $TMPC <<EOF &&
2489
#include <xenctrl.h>
A
Anthony PERARD 已提交
2490
#include <xenstore.h>
2491 2492 2493 2494 2495
#include <stdint.h>
#include <xen/hvm/hvm_info_table.h>
#if !defined(HVM_MAX_VCPUS)
# error HVM_MAX_VCPUS not defined
#endif
2496 2497 2498 2499 2500 2501 2502 2503 2504
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);
2505
  xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2506 2507 2508
  return 0;
}
EOF
2509 2510 2511 2512 2513 2514 2515 2516
        compile_prog "" "$xen_libs"
      then
      xen_ctrl_version=40600
      xen=yes

    # Xen 4.5
    elif
        cat > $TMPC <<EOF &&
2517 2518 2519 2520 2521 2522 2523
#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
2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535
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
2536 2537 2538 2539
        compile_prog "" "$xen_libs"
      then
      xen_ctrl_version=40500
      xen=yes
2540

2541 2542
    elif
        cat > $TMPC <<EOF &&
2543 2544 2545 2546 2547 2548 2549
#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
2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560
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
2561 2562 2563 2564
        compile_prog "" "$xen_libs"
      then
      xen_ctrl_version=40200
      xen=yes
2565

2566 2567 2568 2569 2570 2571
    else
      if test "$xen" = "yes" ; then
        feature_not_found "xen (unsupported version)" \
                          "Install a supported xen (xen 4.2 or newer)"
      fi
      xen=no
2572
    fi
2573

2574 2575 2576 2577 2578
    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"
2579
    fi
2580
  fi
2581 2582
fi

2583
if test "$xen_pci_passthrough" != "no"; then
2584
  if test "$xen" = "yes" && test "$linux" = "yes"; then
2585 2586 2587
    xen_pci_passthrough=yes
  else
    if test "$xen_pci_passthrough" = "yes"; then
2588 2589
      error_exit "User requested feature Xen PCI Passthrough" \
          " but this feature requires /sys from Linux"
2590 2591 2592 2593 2594
    fi
    xen_pci_passthrough=no
  fi
fi

2595 2596 2597 2598 2599 2600
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

2601 2602 2603
##########################################
# Windows Hypervisor Platform accelerator (WHPX) check
if test "$whpx" != "no" ; then
2604
    if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2605 2606 2607
        whpx="yes"
    else
        if test "$whpx" = "yes"; then
2608
            feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2609 2610 2611 2612 2613
        fi
        whpx="no"
    fi
fi

2614 2615 2616
##########################################
# Sparse probe
if test "$sparse" != "no" ; then
2617
  if has cgcc; then
2618 2619 2620
    sparse=yes
  else
    if test "$sparse" = "yes" ; then
2621
      feature_not_found "sparse" "Install sparse binary"
2622 2623 2624 2625 2626
    fi
    sparse=no
  fi
fi

2627 2628 2629
##########################################
# X11 probe
if $pkg_config --exists "x11"; then
2630
    have_x11=yes
2631 2632
    x11_cflags=$($pkg_config --cflags x11)
    x11_libs=$($pkg_config --libs x11)
2633 2634
fi

A
Anthony Liguori 已提交
2635 2636 2637 2638
##########################################
# GTK probe

if test "$gtk" != "no"; then
P
Peter Xu 已提交
2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649
    if test "$gtkabi" = ""; then
        # 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
            gtkabi=3.0
        elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
            gtkabi=2.0
        else
            gtkabi=3.0
        fi
    fi
2650
    gtkpackage="gtk+-$gtkabi"
2651
    gtkx11package="gtk+-x11-$gtkabi"
2652 2653
    if test "$gtkabi" = "3.0" ; then
      gtkversion="3.0.0"
S
Stefan Weil 已提交
2654 2655 2656 2657
    else
      gtkversion="2.18.0"
    fi
    if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2658 2659 2660
        gtk_cflags=$($pkg_config --cflags $gtkpackage)
        gtk_libs=$($pkg_config --libs $gtkpackage)
        gtk_version=$($pkg_config --modversion $gtkpackage)
2661
        if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2662
            need_x11=yes
2663 2664
            gtk_cflags="$gtk_cflags $x11_cflags"
            gtk_libs="$gtk_libs $x11_libs"
2665
        fi
S
Stefan Weil 已提交
2666 2667
        gtk="yes"
    elif test "$gtk" = "yes"; then
G
Gerd Hoffmann 已提交
2668
        feature_not_found "gtk" "Install gtk3-devel"
S
Stefan Weil 已提交
2669 2670 2671 2672 2673
    else
        gtk="no"
    fi
fi

2674 2675 2676 2677

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

2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693
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)"
}

2694
gnutls_gcrypt=no
2695
gnutls_nettle=no
2696
if test "$gnutls" != "no"; then
2697
    if gnutls_works; then
2698 2699
        gnutls_cflags=$($pkg_config --cflags gnutls)
        gnutls_libs=$($pkg_config --libs gnutls)
2700 2701 2702 2703 2704
        libs_softmmu="$gnutls_libs $libs_softmmu"
        libs_tools="$gnutls_libs $libs_tools"
	QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
        gnutls="yes"

2705 2706 2707 2708 2709 2710 2711
	# gnutls_rnd requires >= 2.11.0
	if $pkg_config --exists "gnutls >= 2.11.0"; then
	    gnutls_rnd="yes"
	else
	    gnutls_rnd="no"
	fi

2712 2713
	if $pkg_config --exists 'gnutls >= 3.0'; then
	    gnutls_gcrypt=no
2714
	    gnutls_nettle=yes
2715
	elif $pkg_config --exists 'gnutls >= 2.12'; then
2716
	    case $($pkg_config --libs --static gnutls) in
2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728
		*gcrypt*)
		    gnutls_gcrypt=yes
		    gnutls_nettle=no
		    ;;
		*nettle*)
		    gnutls_gcrypt=no
		    gnutls_nettle=yes
		    ;;
		*)
		    gnutls_gcrypt=yes
		    gnutls_nettle=no
		    ;;
2729 2730 2731
	    esac
	else
	    gnutls_gcrypt=yes
2732
	    gnutls_nettle=no
2733
	fi
2734 2735 2736 2737
    elif test "$gnutls" = "yes"; then
	feature_not_found "gnutls" "Install gnutls devel"
    else
        gnutls="no"
2738
        gnutls_rnd="no"
2739 2740
    fi
else
2741
    gnutls_rnd="no"
2742 2743
fi

2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774

# 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
2775
	host=$(libgcrypt-config --host)
2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786
	if test "$host-" != $cross_prefix
	then
	    return 1
	fi
    fi

    return 0
}

if test "$gcrypt" != "no"; then
    if has_libgcrypt_config; then
2787 2788
        gcrypt_cflags=$(libgcrypt-config --cflags)
        gcrypt_libs=$(libgcrypt-config --libs)
2789 2790 2791 2792 2793 2794 2795
        # 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
2796 2797 2798
        libs_softmmu="$gcrypt_libs $libs_softmmu"
        libs_tools="$gcrypt_libs $libs_tools"
        QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2799 2800 2801 2802
        gcrypt="yes"
        if test -z "$nettle"; then
           nettle="no"
        fi
2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815

        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
2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828

        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
2829
    else
2830 2831 2832 2833 2834
        if test "$gcrypt" = "yes"; then
            feature_not_found "gcrypt" "Install gcrypt devel"
        else
            gcrypt="no"
        fi
2835 2836 2837
    fi
fi

2838

2839
if test "$nettle" != "no"; then
2840
    if $pkg_config --exists "nettle"; then
2841 2842 2843
        nettle_cflags=$($pkg_config --cflags nettle)
        nettle_libs=$($pkg_config --libs nettle)
        nettle_version=$($pkg_config --modversion nettle)
2844 2845 2846
        libs_softmmu="$nettle_libs $libs_softmmu"
        libs_tools="$nettle_libs $libs_tools"
        QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2847
        nettle="yes"
2848 2849

        cat > $TMPC << EOF
2850
#include <stddef.h>
2851 2852 2853 2854 2855 2856 2857 2858 2859
#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
2860
    else
2861 2862 2863 2864 2865
        if test "$nettle" = "yes"; then
            feature_not_found "nettle" "Install nettle devel"
        else
            nettle="no"
        fi
2866 2867 2868
    fi
fi

2869 2870 2871 2872 2873
if test "$gcrypt" = "yes" && test "$nettle" = "yes"
then
    error_exit "Only one of gcrypt & nettle can be enabled"
fi

2874 2875 2876 2877
##########################################
# libtasn1 - only for the TLS creds/session test suite

tasn1=yes
2878 2879
tasn1_cflags=""
tasn1_libs=""
2880
if $pkg_config --exists "libtasn1"; then
2881 2882
    tasn1_cflags=$($pkg_config --cflags libtasn1)
    tasn1_libs=$($pkg_config --libs libtasn1)
2883 2884 2885 2886
else
    tasn1=no
fi

2887

2888 2889 2890 2891 2892 2893 2894 2895
##########################################
# 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 已提交
2896 2897 2898 2899 2900
##########################################
# VTE probe

if test "$vte" != "no"; then
    if test "$gtkabi" = "3.0"; then
C
Cole Robinson 已提交
2901 2902 2903 2904 2905 2906
      vteminversion="0.32.0"
      if $pkg_config --exists "vte-2.91"; then
        vtepackage="vte-2.91"
      else
        vtepackage="vte-2.90"
      fi
2907 2908
    else
      vtepackage="vte"
C
Cole Robinson 已提交
2909
      vteminversion="0.24.0"
2910
    fi
C
Cole Robinson 已提交
2911
    if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2912 2913 2914
        vte_cflags=$($pkg_config --cflags $vtepackage)
        vte_libs=$($pkg_config --libs $vtepackage)
        vteversion=$($pkg_config --modversion $vtepackage)
S
Stefan Weil 已提交
2915 2916
        vte="yes"
    elif test "$vte" = "yes"; then
2917
        if test "$gtkabi" = "3.0"; then
C
Cole Robinson 已提交
2918
            feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2919 2920 2921
        else
            feature_not_found "vte" "Install libvte devel"
        fi
2922
    else
S
Stefan Weil 已提交
2923
        vte="no"
A
Anthony Liguori 已提交
2924 2925 2926
    fi
fi

B
bellard 已提交
2927 2928 2929
##########################################
# SDL probe

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

2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944
sdl_probe ()
{
  sdl_too_old=no
  if test "$sdlabi" = ""; then
      if $pkg_config --exists "sdl2"; then
          sdlabi=2.0
      elif $pkg_config --exists "sdl"; then
          sdlabi=1.2
      else
          sdlabi=2.0
      fi
  fi
2945

2946 2947 2948 2949 2950 2951 2952 2953 2954 2955
  if test $sdlabi = "2.0"; then
      sdl_config=$sdl2_config
      sdlname=sdl2
      sdlconfigname=sdl2_config
  elif test $sdlabi = "1.2"; then
      sdlname=sdl
      sdlconfigname=sdl_config
  else
      error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
  fi
2956

2957 2958 2959
  if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
    sdl_config=$sdlconfigname
  fi
P
Paolo Bonzini 已提交
2960

2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976
  if $pkg_config $sdlname --exists; then
    sdlconfig="$pkg_config $sdlname"
    sdlversion=$($sdlconfig --modversion 2>/dev/null)
  elif has ${sdl_config}; then
    sdlconfig="$sdl_config"
    sdlversion=$($sdlconfig --version)
  else
    if test "$sdl" = "yes" ; then
      feature_not_found "sdl" "Install SDL2-devel"
    fi
    sdl=no
    # no need to do the rest
    return
  fi
  if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
    echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2977
  fi
B
bellard 已提交
2978

J
Juan Quintela 已提交
2979
  cat > $TMPC << EOF
B
bellard 已提交
2980 2981 2982 2983
#include <SDL.h>
#undef main /* We don't want SDL to override our main() */
int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
EOF
2984
  sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2985
  sdl_cflags="$sdl_cflags -Wno-undef"  # workaround 2.0.8 bug
2986
  if test "$static" = "yes" ; then
2987 2988 2989 2990 2991
    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
2992
  else
2993
    sdl_libs=$($sdlconfig --libs 2>/dev/null)
2994
  fi
2995
  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2996
    if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
J
Juan Quintela 已提交
2997 2998
      sdl_too_old=yes
    else
2999
      sdl=yes
J
Juan Quintela 已提交
3000
    fi
A
aliguori 已提交
3001

3002
    # static link with sdl ? (note: sdl.pc's --static --libs is broken)
J
Juan Quintela 已提交
3003
    if test "$sdl" = "yes" -a "$static" = "yes" ; then
3004
      if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3005 3006
         sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
         sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
J
Juan Quintela 已提交
3007
      fi
3008
      if compile_prog "$sdl_cflags" "$sdl_libs" ; then
J
Juan Quintela 已提交
3009 3010 3011 3012 3013
	:
      else
        sdl=no
      fi
    fi # static link
3014 3015
  else # sdl not found
    if test "$sdl" = "yes" ; then
3016
      feature_not_found "sdl" "Install SDL devel"
3017 3018
    fi
    sdl=no
J
Juan Quintela 已提交
3019
  fi # sdl compile test
3020 3021 3022 3023
}

if test "$sdl" != "no" ; then
  sdl_probe
3024
fi
B
bellard 已提交
3025

3026
if test "$sdl" = "yes" ; then
J
Juan Quintela 已提交
3027
  cat > $TMPC <<EOF
3028 3029 3030 3031 3032 3033 3034 3035
#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
3036
  if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3037
    need_x11=yes
3038 3039
    sdl_cflags="$sdl_cflags $x11_cflags"
    sdl_libs="$sdl_libs $x11_libs"
J
Juan Quintela 已提交
3040
  fi
3041 3042
fi

M
Michael R. Hines 已提交
3043 3044 3045 3046 3047 3048 3049
##########################################
# RDMA needs OpenFabrics libraries
if test "$rdma" != "no" ; then
  cat > $TMPC <<EOF
#include <rdma/rdma_cma.h>
int main(void) { return 0; }
EOF
3050
  rdma_libs="-lrdmacm -libverbs -libumad"
M
Michael R. Hines 已提交
3051 3052
  if compile_prog "" "$rdma_libs" ; then
    rdma="yes"
3053
    libs_softmmu="$libs_softmmu $rdma_libs"
M
Michael R. Hines 已提交
3054 3055 3056
  else
    if test "$rdma" = "yes" ; then
        error_exit \
3057
            " OpenFabrics librdmacm/libibverbs/libibumad not present." \
M
Michael R. Hines 已提交
3058
            " Your options:" \
3059
            "  (1) Fast: Install infiniband packages (devel) from your distro." \
M
Michael R. Hines 已提交
3060 3061 3062 3063 3064 3065 3066
            "  (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 已提交
3067

3068 3069
##########################################
# VNC SASL detection
J
Jes Sorensen 已提交
3070
if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
3071
  cat > $TMPC <<EOF
3072 3073 3074 3075
#include <sasl/sasl.h>
#include <stdio.h>
int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
EOF
3076 3077 3078 3079 3080 3081
  # 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 已提交
3082
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3083 3084
  else
    if test "$vnc_sasl" = "yes" ; then
3085
      feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3086
    fi
3087 3088
    vnc_sasl=no
  fi
3089 3090
fi

3091 3092
##########################################
# VNC JPEG detection
J
Jes Sorensen 已提交
3093
if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
3094 3095 3096 3097 3098 3099 3100 3101 3102 3103
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 已提交
3104
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3105 3106
  else
    if test "$vnc_jpeg" = "yes" ; then
3107
      feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3108 3109 3110 3111 3112
    fi
    vnc_jpeg=no
  fi
fi

C
Corentin Chary 已提交
3113 3114
##########################################
# VNC PNG detection
J
Jes Sorensen 已提交
3115
if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
C
Corentin Chary 已提交
3116 3117 3118
cat > $TMPC <<EOF
//#include <stdio.h>
#include <png.h>
S
Scott Wood 已提交
3119
#include <stddef.h>
C
Corentin Chary 已提交
3120 3121 3122
int main(void) {
    png_structp png_ptr;
    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3123
    return png_ptr != 0;
C
Corentin Chary 已提交
3124 3125
}
EOF
3126
  if $pkg_config libpng --exists; then
3127 3128
    vnc_png_cflags=$($pkg_config libpng --cflags)
    vnc_png_libs=$($pkg_config libpng --libs)
3129
  else
C
Corentin Chary 已提交
3130 3131
    vnc_png_cflags=""
    vnc_png_libs="-lpng"
3132
  fi
C
Corentin Chary 已提交
3133 3134 3135
  if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
    vnc_png=yes
    libs_softmmu="$vnc_png_libs $libs_softmmu"
3136
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
C
Corentin Chary 已提交
3137 3138
  else
    if test "$vnc_png" = "yes" ; then
3139
      feature_not_found "vnc-png" "Install libpng devel"
C
Corentin Chary 已提交
3140 3141 3142 3143 3144
    fi
    vnc_png=no
  fi
fi

G
Gerd Hoffmann 已提交
3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159
##########################################
# 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

3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170
##########################################
# fnmatch() probe, used for ACL routines
fnmatch="no"
cat > $TMPC << EOF
#include <fnmatch.h>
int main(void)
{
    fnmatch("foo", "foo", 0);
    return 0;
}
EOF
3171
if compile_prog "" "" ; then
3172 3173 3174
   fnmatch="yes"
fi

3175
##########################################
3176
# xfsctl() probe, used for file-posix.c
C
Christoph Hellwig 已提交
3177 3178
if test "$xfs" != "no" ; then
  cat > $TMPC << EOF
3179
#include <stddef.h>  /* NULL */
C
Christoph Hellwig 已提交
3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190
#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
3191
      feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
C
Christoph Hellwig 已提交
3192 3193 3194 3195 3196
    fi
    xfs=no
  fi
fi

3197 3198
##########################################
# vde libraries probe
3199
if test "$vde" != "no" ; then
J
Juan Quintela 已提交
3200
  vde_libs="-lvdeplug"
3201 3202
  cat > $TMPC << EOF
#include <libvdeplug.h>
P
pbrook 已提交
3203 3204 3205
int main(void)
{
    struct vde_open_args a = {0, 0, 0};
3206 3207
    char s[] = "";
    vde_open(s, s, &a);
P
pbrook 已提交
3208 3209
    return 0;
}
3210
EOF
3211
  if compile_prog "" "$vde_libs" ; then
J
Juan Quintela 已提交
3212
    vde=yes
3213 3214
  else
    if test "$vde" = "yes" ; then
3215
      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3216 3217
    fi
    vde=no
J
Juan Quintela 已提交
3218
  fi
3219 3220
fi

3221
##########################################
3222 3223 3224 3225 3226 3227
# 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.
3228 3229 3230 3231 3232 3233
if test "$netmap" != "no" ; then
  cat > $TMPC << EOF
#include <inttypes.h>
#include <net/if.h>
#include <net/netmap.h>
#include <net/netmap_user.h>
3234 3235 3236
#if (NETMAP_API < 11) || (NETMAP_API > 15)
#error
#endif
3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248
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

3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265
##########################################
# 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
3266
      feature_not_found "cap_ng" "Install libcap-ng devel"
3267 3268 3269 3270 3271
    fi
    cap_ng=no
  fi
fi

3272
##########################################
3273
# Sound support libraries probe
3274

3275 3276 3277 3278 3279 3280 3281 3282 3283 3284
audio_drv_probe()
{
    drv=$1
    hdr=$2
    lib=$3
    exp=$4
    cfl=$5
        cat > $TMPC << EOF
#include <$hdr>
int main(void) { $exp }
3285
EOF
3286
    if compile_prog "$cfl" "$lib" ; then
3287 3288
        :
    else
3289 3290
        error_exit "$drv check failed" \
            "Make sure to have the $drv libs and headers installed."
3291 3292 3293
    fi
}

3294
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3295 3296 3297 3298
for drv in $audio_drv_list; do
    case $drv in
    alsa)
    audio_drv_probe $drv alsa/asoundlib.h -lasound \
3299
        "return snd_pcm_close((snd_pcm_t *)0);"
3300
    alsa_libs="-lasound"
3301 3302
    ;;

M
malc 已提交
3303
    pa)
3304 3305
    audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
        "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
3306
    pulse_libs="-lpulse"
3307
    audio_pt_int="yes"
M
malc 已提交
3308 3309
    ;;

G
Gerd Hoffmann 已提交
3310 3311 3312 3313 3314 3315
    sdl)
    if test "$sdl" = "no"; then
        error_exit "sdl not found or disabled, can not use sdl audio driver"
    fi
    ;;

3316
    coreaudio)
3317
      coreaudio_libs="-framework CoreAudio"
3318 3319
    ;;

3320
    dsound)
3321
      dsound_libs="-lole32 -ldxguid"
3322
      audio_win_int="yes"
3323 3324 3325
    ;;

    oss)
3326
      oss_libs="$oss_lib"
3327 3328
    ;;

G
Gerd Hoffmann 已提交
3329 3330
    wav)
    # XXX: Probes for CoreAudio, DirectSound
B
blueswir1 已提交
3331 3332
    ;;

M
malc 已提交
3333
    *)
M
malc 已提交
3334
    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3335 3336
        error_exit "Unknown driver '$drv' selected" \
            "Possible drivers are: $audio_possible_drivers"
M
malc 已提交
3337 3338
    }
    ;;
3339 3340
    esac
done
3341

A
aurel32 已提交
3342 3343 3344
##########################################
# BrlAPI probe

3345
if test "$brlapi" != "no" ; then
J
Juan Quintela 已提交
3346 3347
  brlapi_libs="-lbrlapi"
  cat > $TMPC << EOF
A
aurel32 已提交
3348
#include <brlapi.h>
S
Scott Wood 已提交
3349
#include <stddef.h>
A
aurel32 已提交
3350 3351
int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
EOF
3352
  if compile_prog "" "$brlapi_libs" ; then
J
Juan Quintela 已提交
3353
    brlapi=yes
3354 3355
  else
    if test "$brlapi" = "yes" ; then
3356
      feature_not_found "brlapi" "Install brlapi devel"
3357 3358
    fi
    brlapi=no
J
Juan Quintela 已提交
3359 3360
  fi
fi
A
aurel32 已提交
3361

B
balrog 已提交
3362 3363
##########################################
# curses probe
3364 3365
if test "$curses" != "no" ; then
  if test "$mingw32" = "yes" ; then
3366 3367
    curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
    curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3368
  else
S
Samuel Thibault 已提交
3369
    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3370
    curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3371
  fi
3372
  curses_found=no
B
balrog 已提交
3373
  cat > $TMPC << EOF
3374
#include <locale.h>
B
balrog 已提交
3375
#include <curses.h>
3376
#include <wchar.h>
3377
int main(void) {
3378 3379
  wchar_t wch = L'w';
  setlocale(LC_ALL, "");
3380
  resize_term(0, 0);
3381 3382
  addwstr(L"wide chars\n");
  addnwstr(&wch, 1);
S
Samuel Thibault 已提交
3383
  add_wch(WACS_DEGREE);
3384
  return 0;
3385
}
B
balrog 已提交
3386
EOF
3387
  IFS=:
3388
  for curses_inc in $curses_inc_list; do
3389 3390
    # Make sure we get the wide character prototypes
    curses_inc="-DNCURSES_WIDECHAR $curses_inc"
S
Samuel Thibault 已提交
3391
    IFS=:
3392 3393 3394 3395 3396 3397 3398
    for curses_lib in $curses_lib_list; do
      unset IFS
      if compile_prog "$curses_inc" "$curses_lib" ; then
        curses_found=yes
        break
      fi
    done
S
Samuel Thibault 已提交
3399 3400 3401
    if test "$curses_found" = yes ; then
      break
    fi
3402
  done
3403
  unset IFS
3404 3405 3406 3407
  if test "$curses_found" = "yes" ; then
    curses=yes
  else
    if test "$curses" = "yes" ; then
3408
      feature_not_found "curses" "Install ncurses devel"
3409 3410 3411
    fi
    curses=no
  fi
3412
fi
B
balrog 已提交
3413

A
Alexander Graf 已提交
3414 3415
##########################################
# curl probe
3416
if test "$curl" != "no" ; then
3417
  if $pkg_config libcurl --exists; then
3418 3419 3420 3421
    curlconfig="$pkg_config libcurl"
  else
    curlconfig=curl-config
  fi
A
Alexander Graf 已提交
3422 3423
  cat > $TMPC << EOF
#include <curl/curl.h>
3424
int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
A
Alexander Graf 已提交
3425
EOF
3426 3427
  curl_cflags=$($curlconfig --cflags 2>/dev/null)
  curl_libs=$($curlconfig --libs 2>/dev/null)
J
Juan Quintela 已提交
3428
  if compile_prog "$curl_cflags" "$curl_libs" ; then
A
Alexander Graf 已提交
3429
    curl=yes
3430 3431
  else
    if test "$curl" = "yes" ; then
3432
      feature_not_found "curl" "Install libcurl devel"
3433 3434
    fi
    curl=no
A
Alexander Graf 已提交
3435 3436 3437
  fi
fi # test "$curl"

B
balrog 已提交
3438 3439
##########################################
# bluez support probe
3440
if test "$bluez" != "no" ; then
3441 3442 3443 3444
  cat > $TMPC << EOF
#include <bluetooth/bluetooth.h>
int main(void) { return bt_error(0); }
EOF
3445 3446
  bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
  bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3447
  if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3448
    bluez=yes
3449
    libs_softmmu="$bluez_libs $libs_softmmu"
3450
  else
3451
    if test "$bluez" = "yes" ; then
3452
      feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3453
    fi
3454 3455
    bluez="no"
  fi
B
balrog 已提交
3456 3457
fi

3458 3459
##########################################
# glib support probe
3460

3461
glib_req_ver=2.40
3462 3463
glib_modules=gthread-2.0
if test "$modules" = yes; then
G
Gerd Hoffmann 已提交
3464
    glib_modules="$glib_modules gmodule-export-2.0"
3465
fi
F
Fam Zheng 已提交
3466

3467 3468 3469 3470 3471 3472 3473
# 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

3474
for i in $glib_modules; do
F
Fam Zheng 已提交
3475
    if $pkg_config --atleast-version=$glib_req_ver $i; then
3476 3477
        glib_cflags=$($pkg_config --cflags $i)
        glib_libs=$($pkg_config --libs $i)
3478
        QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
F
Fam Zheng 已提交
3479 3480 3481 3482 3483 3484 3485
        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

3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502
# 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

3503
if ! compile_prog "$CFLAGS" "$LIBS" ; then
3504 3505 3506 3507 3508 3509
    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

3510 3511
# g_test_trap_subprocess added in 2.38. Used by some tests.
glib_subprocess=yes
3512
if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3513 3514 3515
    glib_subprocess=no
fi

3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527
# 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 已提交
3528 3529 3530 3531 3532
##########################################
# SHA command probe for modules
if test "$modules" = yes; then
    shacmd_probe="sha1sum sha1 shasum"
    for c in $shacmd_probe; do
F
Fam Zheng 已提交
3533
        if has $c; then
F
Fam Zheng 已提交
3534 3535 3536 3537 3538 3539 3540
            shacmd="$c"
            break
        fi
    done
    if test "$shacmd" = ""; then
        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
    fi
3541 3542
fi

3543 3544 3545
##########################################
# pixman support probe

G
Gerd Hoffmann 已提交
3546
if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3547 3548
  pixman_cflags=
  pixman_libs=
G
Gerd Hoffmann 已提交
3549
elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3550 3551
  pixman_cflags=$($pkg_config --cflags pixman-1)
  pixman_libs=$($pkg_config --libs pixman-1)
3552
else
G
Gerd Hoffmann 已提交
3553 3554
  error_exit "pixman >= 0.21.8 not present." \
      "Please install the pixman devel package."
3555 3556
fi

3557 3558 3559 3560 3561 3562 3563 3564 3565
##########################################
# 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;
3566 3567 3568 3569 3570 3571 3572 3573
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) { }

3574
int main(void) {
3575 3576
    udev = udev_new();
    multipath_conf = mpath_lib_init();
3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588
    return 0;
}
EOF
  if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
    mpathpersist=yes
  else
    mpathpersist=no
  fi
else
  mpathpersist=no
fi

3589 3590 3591 3592 3593 3594 3595
##########################################
# libcap probe

if test "$cap" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
#include <sys/capability.h>
3596
int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3597 3598 3599 3600 3601 3602 3603 3604
EOF
  if compile_prog "" "-lcap" ; then
    cap=yes
  else
    cap=no
  fi
fi

3605
##########################################
3606
# pthread probe
3607
PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3608

C
Christoph Hellwig 已提交
3609
pthread=no
3610
cat > $TMPC << EOF
3611
#include <pthread.h>
3612 3613 3614 3615 3616 3617
static void *f(void *p) { return NULL; }
int main(void) {
  pthread_t thread;
  pthread_create(&thread, 0, f, 0);
  return 0;
}
3618
EOF
3619 3620 3621 3622 3623 3624
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 已提交
3625 3626 3627 3628 3629 3630 3631 3632 3633
      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"
3634
        libs_qga="$pthread_lib $libs_qga"
P
Peter Portante 已提交
3635
      fi
3636
      PTHREAD_LIB="$pthread_lib"
3637 3638 3639 3640
      break
    fi
  done
fi
3641

3642
if test "$mingw32" != yes -a "$pthread" = no; then
3643 3644
  error_exit "pthread check failed" \
      "Make sure to have the pthread libs and headers installed."
3645 3646
fi

3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664
# 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

3665 3666 3667 3668 3669
##########################################
# rbd probe
if test "$rbd" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
3670
#include <rbd/librbd.h>
3671
int main(void) {
3672 3673
    rados_t cluster;
    rados_create(&cluster, NULL);
3674 3675 3676
    return 0;
}
EOF
3677 3678 3679
  rbd_libs="-lrbd -lrados"
  if compile_prog "" "$rbd_libs" ; then
    rbd=yes
3680 3681
  else
    if test "$rbd" = "yes" ; then
3682
      feature_not_found "rados block device" "Install librbd/ceph devel"
3683 3684 3685 3686 3687
    fi
    rbd=no
  fi
fi

3688 3689
##########################################
# libssh2 probe
3690
min_libssh2_version=1.2.8
3691
if test "$libssh2" != "no" ; then
3692
  if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3693 3694
    libssh2_cflags=$($pkg_config libssh2 --cflags)
    libssh2_libs=$($pkg_config libssh2 --libs)
3695 3696 3697
    libssh2=yes
  else
    if test "$libssh2" = "yes" ; then
3698
      error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3699 3700 3701 3702 3703
    fi
    libssh2=no
  fi
fi

3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728
##########################################
# 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

3729 3730 3731 3732 3733 3734 3735
##########################################
# linux-aio probe

if test "$linux_aio" != "no" ; then
  cat > $TMPC <<EOF
#include <libaio.h>
#include <sys/eventfd.h>
S
Scott Wood 已提交
3736
#include <stddef.h>
3737 3738 3739 3740 3741 3742
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
3743
      feature_not_found "linux AIO" "Install libaio devel"
3744
    fi
3745
    linux_aio=no
3746 3747 3748
  fi
fi

P
Paolo Bonzini 已提交
3749 3750 3751 3752 3753 3754 3755 3756 3757
##########################################
# 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

3758 3759 3760 3761 3762 3763
# TPM emulator is for all posix systems
if test "$mingw32" != "yes"; then
  tpm_emulator=$tpm
else
  tpm_emulator=no
fi
3764 3765 3766 3767 3768 3769 3770
##########################################
# attr probe

if test "$attr" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
#include <sys/types.h>
P
Pavel Borzenkov 已提交
3771 3772 3773
#ifdef CONFIG_LIBATTR
#include <attr/xattr.h>
#else
3774
#include <sys/xattr.h>
P
Pavel Borzenkov 已提交
3775
#endif
3776 3777
int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
EOF
3778 3779 3780
  if compile_prog "" "" ; then
    attr=yes
  # Older distros have <attr/xattr.h>, and need -lattr:
P
Pavel Borzenkov 已提交
3781
  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3782 3783
    attr=yes
    LIBS="-lattr $LIBS"
3784
    libattr=yes
3785 3786
  else
    if test "$attr" = "yes" ; then
3787
      feature_not_found "ATTR" "Install libc6 or libattr devel"
3788 3789 3790 3791 3792
    fi
    attr=no
  fi
fi

A
aliguori 已提交
3793 3794 3795
##########################################
# iovec probe
cat > $TMPC <<EOF
B
blueswir1 已提交
3796
#include <sys/types.h>
A
aliguori 已提交
3797
#include <sys/uio.h>
B
blueswir1 已提交
3798
#include <unistd.h>
3799
int main(void) { return sizeof(struct iovec); }
A
aliguori 已提交
3800 3801
EOF
iovec=no
3802
if compile_prog "" "" ; then
A
aliguori 已提交
3803 3804 3805
  iovec=yes
fi

3806 3807 3808 3809 3810 3811
##########################################
# preadv probe
cat > $TMPC <<EOF
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
3812
int main(void) { return preadv(0, 0, 0, 0); }
3813 3814
EOF
preadv=no
3815
if compile_prog "" "" ; then
3816 3817 3818
  preadv=yes
fi

3819 3820
##########################################
# fdt probe
3821 3822 3823 3824 3825
# 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
K
KONRAD Frederic 已提交
3826
    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840
      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

3841
if test "$fdt" != "no" ; then
J
Juan Quintela 已提交
3842
  fdt_libs="-lfdt"
3843
  # explicitly check for libfdt_env.h as it is missing in some stable installs
P
Paul Burton 已提交
3844
  # and test for required functions to make sure we are on a version >= 1.4.2
J
Juan Quintela 已提交
3845
  cat > $TMPC << EOF
3846
#include <libfdt.h>
3847
#include <libfdt_env.h>
P
Paul Burton 已提交
3848
int main(void) { fdt_first_subnode(0, 0); return 0; }
3849
EOF
3850
  if compile_prog "" "$fdt_libs" ; then
3851
    # system DTC is good - use it
3852
    fdt=system
3853
  else
3854 3855 3856 3857 3858
      # 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
3859
          fdt=git
3860 3861 3862 3863 3864 3865
          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"
3866 3867
          fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
          fdt_libs="$fdt_libs"
3868 3869 3870 3871 3872 3873 3874 3875 3876
      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
3877 3878 3879
  fi
fi

3880 3881
libs_softmmu="$libs_softmmu $fdt_libs"

M
Michael Walle 已提交
3882
##########################################
3883
# opengl probe (for sdl2, gtk, milkymist-tmu2)
G
Gerd Hoffmann 已提交
3884

G
Gerd Hoffmann 已提交
3885
if test "$opengl" != "no" ; then
3886
  opengl_pkgs="epoxy libdrm gbm"
3887 3888 3889
  if $pkg_config $opengl_pkgs; then
    opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
    opengl_libs="$($pkg_config --libs $opengl_pkgs)"
G
Gerd Hoffmann 已提交
3890
    opengl=yes
3891 3892 3893
    if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
        gtk_gl="yes"
    fi
G
Gerd Hoffmann 已提交
3894
    QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
M
Michael Walle 已提交
3895
  else
G
Gerd Hoffmann 已提交
3896
    if test "$opengl" = "yes" ; then
G
Gerd Hoffmann 已提交
3897
      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
M
Michael Walle 已提交
3898
    fi
3899
    opengl_cflags=""
G
Gerd Hoffmann 已提交
3900 3901
    opengl_libs=""
    opengl=no
M
Michael Walle 已提交
3902 3903 3904
  fi
fi

3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916
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
3917

K
Klim Kireev 已提交
3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931
##########################################
# libxml2 probe
if test "$libxml2" != "no" ; then
    if $pkg_config --exists libxml-2.0; then
        libxml2="yes"
        libxml2_cflags=$($pkg_config --cflags libxml-2.0)
        libxml2_libs=$($pkg_config --libs libxml-2.0)
    else
        if test "$libxml2" = "yes"; then
            feature_not_found "libxml2" "Install libxml2 devel"
        fi
        libxml2="no"
    fi
fi
3932

3933 3934 3935
##########################################
# glusterfs probe
if test "$glusterfs" != "no" ; then
3936
  if $pkg_config --atleast-version=3 glusterfs-api; then
3937
    glusterfs="yes"
3938 3939
    glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
    glusterfs_libs=$($pkg_config --libs glusterfs-api)
3940 3941 3942
    if $pkg_config --atleast-version=4 glusterfs-api; then
      glusterfs_xlator_opt="yes"
    fi
3943
    if $pkg_config --atleast-version=5 glusterfs-api; then
3944 3945
      glusterfs_discard="yes"
    fi
3946
    if $pkg_config --atleast-version=6 glusterfs-api; then
3947
      glusterfs_fallocate="yes"
3948 3949
      glusterfs_zerofill="yes"
    fi
3950 3951
  else
    if test "$glusterfs" = "yes" ; then
3952 3953
      feature_not_found "GlusterFS backend support" \
          "Install glusterfs-api devel >= 3"
3954
    fi
3955
    glusterfs="no"
3956 3957 3958
  fi
fi

A
aurel32 已提交
3959
# Check for inotify functions when we are building linux-user
3960 3961 3962 3963 3964
# 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
3965
cat > $TMPC << EOF
3966 3967 3968 3969 3970 3971
#include <sys/inotify.h>

int
main(void)
{
	/* try to start inotify */
A
aurel32 已提交
3972
	return inotify_init();
3973 3974
}
EOF
3975
if compile_prog "" "" ; then
3976
  inotify=yes
3977 3978
fi

3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993
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 已提交
3994 3995 3996 3997 3998 3999 4000 4001 4002
# check if pipe2 is there
pipe2=no
cat > $TMPC << EOF
#include <unistd.h>
#include <fcntl.h>

int main(void)
{
    int pipefd[2];
4003
    return pipe2(pipefd, O_CLOEXEC);
R
Riku Voipio 已提交
4004 4005
}
EOF
4006
if compile_prog "" "" ; then
R
Riku Voipio 已提交
4007 4008 4009
  pipe2=yes
fi

K
Kevin Wolf 已提交
4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025
# 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

4026 4027 4028 4029 4030 4031 4032 4033 4034
# 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)
{
4035
    int len, fd = 0;
4036 4037 4038 4039 4040
    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
    return 0;
}
EOF
4041
if compile_prog "" "" ; then
4042 4043 4044
  splice=yes
fi

4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064
##########################################
# 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

4065 4066 4067 4068 4069
if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
    exit 1
fi

4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093
# 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 已提交
4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109
##########################################
# 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

4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125
##########################################
# 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 已提交
4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139
##########################################
# 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 已提交
4140 4141 4142 4143 4144 4145 4146
# check if eventfd is supported
eventfd=no
cat > $TMPC << EOF
#include <sys/eventfd.h>

int main(void)
{
4147
    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
R
Riku Voipio 已提交
4148 4149 4150 4151 4152 4153
}
EOF
if compile_prog "" "" ; then
  eventfd=yes
fi

M
Marc-André Lureau 已提交
4154 4155 4156
# check if memfd is supported
memfd=no
cat > $TMPC << EOF
P
Paolo Bonzini 已提交
4157
#include <sys/mman.h>
M
Marc-André Lureau 已提交
4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169

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



4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180
# check for fallocate
fallocate=no
cat > $TMPC << EOF
#include <fcntl.h>

int main(void)
{
    fallocate(0, 0, 0, 0);
    return 0;
}
EOF
4181
if compile_prog "" "" ; then
4182 4183 4184
  fallocate=yes
fi

4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200
# 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

4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216
# 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

4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231
# 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

4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242
# 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
4243
if compile_prog "" "" ; then
4244 4245 4246
  sync_file_range=yes
fi

4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259
# 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
4260
if compile_prog "" "" ; then
4261 4262 4263
  fiemap=yes
fi

4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274
# check for dup3
dup3=no
cat > $TMPC << EOF
#include <unistd.h>

int main(void)
{
    dup3(0, 0, 0);
    return 0;
}
EOF
4275
if compile_prog "" "" ; then
4276 4277 4278
  dup3=yes
fi

4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294
# 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

4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309
# 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

4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320
# check for epoll support
epoll=no
cat > $TMPC << EOF
#include <sys/epoll.h>

int main(void)
{
    epoll_create(0);
    return 0;
}
EOF
4321
if compile_prog "" "" ; then
4322 4323 4324
  epoll=yes
fi

4325 4326
# epoll_create1 is a later addition
# so we must check separately for its presence
4327 4328 4329 4330 4331 4332
epoll_create1=no
cat > $TMPC << EOF
#include <sys/epoll.h>

int main(void)
{
4333 4334 4335 4336 4337 4338 4339 4340
    /* 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.)
     */
4341
    return (int)(uintptr_t)&epoll_create1;
4342 4343
}
EOF
4344
if compile_prog "" "" ; then
4345 4346 4347
  epoll_create1=yes
fi

4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361
# 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

4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375
# 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 已提交
4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392
# 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

4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407
# 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

4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422
# 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

4423
# Check if tools are available to build documentation.
J
Juan Quintela 已提交
4424
if test "$docs" != "no" ; then
4425
  if has makeinfo && has pod2man; then
J
Juan Quintela 已提交
4426
    docs=yes
4427
  else
J
Juan Quintela 已提交
4428
    if test "$docs" = "yes" ; then
4429
      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4430
    fi
J
Juan Quintela 已提交
4431
    docs=no
4432
  fi
4433 4434
fi

S
Stefan Weil 已提交
4435
# Search for bswap_32 function
4436 4437 4438 4439 4440
byteswap_h=no
cat > $TMPC << EOF
#include <byteswap.h>
int main(void) { return bswap_32(0); }
EOF
4441
if compile_prog "" "" ; then
4442 4443 4444
  byteswap_h=yes
fi

4445
# Search for bswap32 function
4446 4447 4448 4449 4450 4451 4452
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
4453
if compile_prog "" "" ; then
4454 4455 4456
  bswap_h=yes
fi

R
Ronnie Sahlberg 已提交
4457
##########################################
4458
# Do we have libiscsi >= 1.9.0
R
Ronnie Sahlberg 已提交
4459
if test "$libiscsi" != "no" ; then
4460
  if $pkg_config --atleast-version=1.9.0 libiscsi; then
4461
    libiscsi="yes"
4462 4463
    libiscsi_cflags=$($pkg_config --cflags libiscsi)
    libiscsi_libs=$($pkg_config --libs libiscsi)
R
Ronnie Sahlberg 已提交
4464 4465
  else
    if test "$libiscsi" = "yes" ; then
4466
      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
R
Ronnie Sahlberg 已提交
4467 4468 4469 4470 4471
    fi
    libiscsi="no"
  fi
fi

4472 4473 4474 4475
##########################################
# Do we need libm
cat > $TMPC << EOF
#include <math.h>
4476
int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4477 4478 4479 4480 4481 4482 4483
EOF
if compile_prog "" "" ; then
  :
elif compile_prog "" "-lm" ; then
  LIBS="-lm $LIBS"
  libs_qga="-lm $libs_qga"
else
4484
  error_exit "libm check failed"
4485 4486
fi

A
aliguori 已提交
4487 4488
##########################################
# Do we need librt
4489 4490 4491 4492
# 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 已提交
4493 4494 4495
cat > $TMPC <<EOF
#include <signal.h>
#include <time.h>
4496 4497 4498 4499
int main(void) {
  timer_create(CLOCK_REALTIME, NULL, NULL);
  return clock_gettime(CLOCK_REALTIME, NULL);
}
A
aliguori 已提交
4500 4501
EOF

4502
if compile_prog "" "" ; then
4503
  :
4504
# we need pthread for static linking. use previous pthread test result
4505 4506 4507
elif compile_prog "" "$pthread_lib -lrt" ; then
  LIBS="$LIBS -lrt"
  libs_qga="$libs_qga -lrt"
A
aliguori 已提交
4508 4509
fi

4510
if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
P
Peter Maydell 已提交
4511
        "$haiku" != "yes" ; then
4512 4513 4514
    libs_softmmu="-lutil $libs_softmmu"
fi

4515
##########################################
4516 4517 4518 4519 4520 4521
# 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 已提交
4522 4523
  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4524 4525
  if $pkg_config --atleast-version=0.12.0 spice-server && \
     $pkg_config --atleast-version=0.12.3 spice-protocol && \
4526 4527 4528 4529
     compile_prog "$spice_cflags" "$spice_libs" ; then
    spice="yes"
    libs_softmmu="$libs_softmmu $spice_libs"
    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4530 4531
    spice_protocol_version=$($pkg_config --modversion spice-protocol)
    spice_server_version=$($pkg_config --modversion spice-server)
4532 4533
  else
    if test "$spice" = "yes" ; then
4534 4535
      feature_not_found "spice" \
          "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4536 4537 4538 4539 4540
    fi
    spice="no"
  fi
fi

4541 4542
# check for smartcard support
if test "$smartcard" != "no"; then
4543
    if $pkg_config --atleast-version=2.5.1 libcacard; then
4544 4545 4546
        libcacard_cflags=$($pkg_config --cflags libcacard)
        libcacard_libs=$($pkg_config --libs libcacard)
        smartcard="yes"
P
Paolo Bonzini 已提交
4547
    else
4548 4549
        if test "$smartcard" = "yes"; then
            feature_not_found "smartcard" "Install libcacard devel"
R
Robert Relyea 已提交
4550
        fi
4551
        smartcard="no"
R
Robert Relyea 已提交
4552 4553 4554
    fi
fi

G
Gerd Hoffmann 已提交
4555 4556
# check for libusb
if test "$libusb" != "no" ; then
4557
    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
G
Gerd Hoffmann 已提交
4558
        libusb="yes"
4559 4560
        libusb_cflags=$($pkg_config --cflags libusb-1.0)
        libusb_libs=$($pkg_config --libs libusb-1.0)
G
Gerd Hoffmann 已提交
4561 4562
    else
        if test "$libusb" = "yes"; then
4563
            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
G
Gerd Hoffmann 已提交
4564 4565 4566 4567 4568
        fi
        libusb="no"
    fi
fi

4569 4570
# check for usbredirparser for usb network redirection support
if test "$usb_redir" != "no" ; then
4571
    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4572
        usb_redir="yes"
4573 4574
        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4575 4576
    else
        if test "$usb_redir" = "yes"; then
4577
            feature_not_found "usb-redir" "Install usbredir devel"
4578 4579 4580 4581 4582
        fi
        usb_redir="no"
    fi
fi

4583 4584 4585 4586 4587
##########################################
# 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
4588
    "")   vss_win32_include="-isystem $source_path" ;;
4589 4590
    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
          # handle path with spaces. So we symlink the headers into ".sdk/vss".
4591
          vss_win32_include="-isystem $source_path/.sdk/vss"
4592 4593
	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
	  ;;
4594
    *)    vss_win32_include="-isystem $vss_win32_sdk"
4595 4596 4597 4598 4599 4600 4601 4602 4603
  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"
4604
    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4605
    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638
  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

4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654
##########################################
# 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
4655
    libs_qga="-lsetupapi $libs_qga"
4656 4657 4658
  fi
fi

4659 4660 4661 4662 4663 4664 4665 4666 4667 4668
##########################################
# 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)
4669
  virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680
  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

4681 4682 4683
##########################################
# capstone

4684 4685 4686 4687
case "$capstone" in
  "" | yes)
    if $pkg_config capstone; then
      capstone=system
4688
    elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721
      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)
4722 4723
    QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
    LIBS="$($pkg_config --libs capstone) $LIBS"
4724 4725 4726 4727 4728 4729 4730 4731
    ;;

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

B
Blue Swirl 已提交
4733 4734 4735 4736 4737 4738
##########################################
# check if we have fdatasync

fdatasync=no
cat > $TMPC << EOF
#include <unistd.h>
4739 4740 4741 4742
int main(void) {
#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
return fdatasync(0);
#else
4743
#error Not supported
4744 4745
#endif
}
B
Blue Swirl 已提交
4746 4747 4748 4749 4750
EOF
if compile_prog "" "" ; then
    fdatasync=yes
fi

A
Andreas Färber 已提交
4751 4752 4753 4754 4755 4756 4757
##########################################
# check if we have madvise

madvise=no
cat > $TMPC << EOF
#include <sys/types.h>
#include <sys/mman.h>
S
Scott Wood 已提交
4758
#include <stddef.h>
A
Andreas Färber 已提交
4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770
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 已提交
4771
#include <stddef.h>
A
Andreas Färber 已提交
4772 4773 4774 4775 4776 4777
int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
EOF
if compile_prog "" "" ; then
    posix_madvise=yes
fi

4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792
##########################################
# check if we have posix_memalign()

posix_memalign=no
cat > $TMPC << EOF
#include <stdlib.h>
int main(void) {
    void *p;
    return posix_memalign(&p, 8, 8);
}
EOF
if compile_prog "" "" ; then
    posix_memalign=yes
fi

P
Paul Durrant 已提交
4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804
##########################################
# 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

4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816
##########################################
# 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

K
Keno Fischer 已提交
4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831
##########################################
# check if we have strchrnul

strchrnul=no
cat > $TMPC << EOF
#include <string.h>
int main(void);
// Use a haystack that the compiler shouldn't be able to constant fold
char *haystack = (char*)&main;
int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
EOF
if compile_prog "" "" ; then
    strchrnul=yes
fi

4832 4833 4834
##########################################
# check if trace backend exists

L
Lluís Vilanova 已提交
4835
$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4836
if test "$?" -ne 0 ; then
L
Lluís Vilanova 已提交
4837 4838
  error_exit "invalid trace backends" \
      "Please choose supported trace backends."
4839 4840
fi

4841 4842
##########################################
# For 'ust' backend, test if ust headers are present
L
Lluís Vilanova 已提交
4843
if have_backend "ust"; then
4844
  cat > $TMPC << EOF
4845
#include <lttng/tracepoint.h>
4846 4847
int main(void) { return 0; }
EOF
4848
  if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4849
    if $pkg_config lttng-ust --exists; then
4850
      lttng_ust_libs=$($pkg_config --libs lttng-ust)
4851
    else
4852
      lttng_ust_libs="-llttng-ust -ldl"
4853 4854
    fi
    if $pkg_config liburcu-bp --exists; then
4855
      urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4856 4857 4858 4859 4860 4861
    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"
4862
  else
4863
    error_exit "Trace backend 'ust' missing lttng-ust header files"
4864 4865
  fi
fi
4866 4867 4868

##########################################
# For 'dtrace' backend, test if 'dtrace' command is present
L
Lluís Vilanova 已提交
4869
if have_backend "dtrace"; then
4870
  if ! has 'dtrace' ; then
4871
    error_exit "dtrace command is not found in PATH $PATH"
4872
  fi
4873 4874 4875 4876
  trace_backend_stap="no"
  if has 'stap' ; then
    trace_backend_stap="yes"
  fi
4877 4878
fi

W
Wolfgang Mauerer 已提交
4879
##########################################
4880
# check and set a backend for coroutine
4881

4882
# We prefer ucontext, but it's not always possible. The fallback
4883 4884
# is sigcontext. On Windows the only valid backend is the Windows
# specific one.
4885 4886 4887 4888

ucontext_works=no
if test "$darwin" != "yes"; then
  cat > $TMPC << EOF
4889
#include <ucontext.h>
4890 4891 4892
#ifdef __stub_makecontext
#error Ignoring glibc stub makecontext which will always fail
#endif
4893
int main(void) { makecontext(0, 0, 0); return 0; }
4894
EOF
4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906
  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
4907
  fi
4908
else
4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922
  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
    ;;
4923
  sigaltstack)
4924 4925 4926 4927 4928 4929 4930 4931
    if test "$mingw32" = "yes"; then
      error_exit "only the 'windows' coroutine backend is valid for Windows"
    fi
    ;;
  *)
    error_exit "unknown coroutine backend $coroutine"
    ;;
  esac
4932 4933
fi

4934
if test "$coroutine_pool" = ""; then
4935
  coroutine_pool=yes
4936 4937
fi

4938 4939 4940 4941 4942 4943 4944 4945
if test "$debug_stack_usage" = "yes"; then
  if test "$coroutine_pool" = "yes"; then
    echo "WARN: disabling coroutine pool for stack usage debugging"
    coroutine_pool=no
  fi
fi


4946 4947 4948
##########################################
# check if we have open_by_handle_at

S
Stefan Weil 已提交
4949
open_by_handle_at=no
4950 4951
cat > $TMPC << EOF
#include <fcntl.h>
4952 4953 4954
#if !defined(AT_EMPTY_PATH)
# error missing definition
#else
4955
int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4956
#endif
4957 4958 4959 4960 4961
EOF
if compile_prog "" "" ; then
    open_by_handle_at=yes
fi

4962 4963 4964 4965 4966 4967 4968
########################################
# check if we have linux/magic.h

linux_magic_h=no
cat > $TMPC << EOF
#include <linux/magic.h>
int main(void) {
4969
  return 0;
4970 4971 4972 4973 4974 4975
}
EOF
if compile_prog "" "" ; then
    linux_magic_h=yes
fi

4976
########################################
K
Kevin Wolf 已提交
4977 4978 4979 4980 4981 4982 4983 4984
# 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.

4985 4986
pragma_disable_unused_but_set=no
cat > $TMPC << EOF
4987
#pragma GCC diagnostic push
K
Kevin Wolf 已提交
4988
#pragma GCC diagnostic ignored "-Wstrict-prototypes"
4989
#pragma GCC diagnostic pop
K
Kevin Wolf 已提交
4990

4991 4992 4993 4994 4995
int main(void) {
    return 0;
}
EOF
if compile_prog "-Werror" "" ; then
4996
    pragma_diagnostic_available=yes
K
Kevin Wolf 已提交
4997 4998
else
    werror=no
4999 5000
fi

5001
########################################
5002
# check if we have valgrind/valgrind.h
5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014

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

5015 5016 5017 5018 5019 5020 5021
########################################
# check if environ is declared

has_environ=no
cat > $TMPC << EOF
#include <unistd.h>
int main(void) {
5022
    environ = 0;
5023 5024 5025 5026 5027 5028 5029
    return 0;
}
EOF
if compile_prog "" "" ; then
    has_environ=yes
fi

5030 5031 5032 5033 5034 5035
########################################
# check if cpuid.h is usable.

cat > $TMPC << EOF
#include <cpuid.h>
int main(void) {
5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047
    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;
5048 5049 5050 5051 5052 5053
}
EOF
if compile_prog "" "" ; then
    cpuid_h=yes
fi

5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076
##########################################
# 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

5077 5078 5079 5080 5081
########################################
# check if __[u]int128_t is usable.

int128=no
cat > $TMPC << EOF
5082 5083 5084 5085 5086
#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
5087 5088 5089 5090 5091
__int128_t a;
__uint128_t b;
int main (void) {
  a = a + b;
  b = a * b;
5092
  a = a * a;
5093 5094 5095 5096 5097 5098
  return 0;
}
EOF
if compile_prog "" "" ; then
    int128=yes
fi
5099

R
Richard Henderson 已提交
5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119
#########################################
# 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 已提交
5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148
#########################################
# 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

5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172
########################################
# See if 16-byte vector operations are supported.
# Even without a vector unit the compiler may expand these.
# There is a bug in old GCC for PPC that crashes here.
# Unfortunately it's the system compiler for Centos 7.

cat > $TMPC << EOF
typedef unsigned char U1 __attribute__((vector_size(16)));
typedef unsigned short U2 __attribute__((vector_size(16)));
typedef unsigned int U4 __attribute__((vector_size(16)));
typedef unsigned long long U8 __attribute__((vector_size(16)));
typedef signed char S1 __attribute__((vector_size(16)));
typedef signed short S2 __attribute__((vector_size(16)));
typedef signed int S4 __attribute__((vector_size(16)));
typedef signed long long S8 __attribute__((vector_size(16)));
static U1 a1, b1;
static U2 a2, b2;
static U4 a4, b4;
static U8 a8, b8;
static S1 c1;
static S2 c2;
static S4 c4;
static S8 c8;
static int i;
5173 5174 5175 5176 5177 5178 5179 5180
void helper(void *d, void *a, int shift, int i);
void helper(void *d, void *a, int shift, int i)
{
  *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
  *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
  *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
  *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
}
5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200
int main(void)
{
  a1 += b1; a2 += b2; a4 += b4; a8 += b8;
  a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
  a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
  a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
  a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
  a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
  a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
  a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
  c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
  return 0;
}
EOF

vector16=no
if compile_prog "" "" ; then
  vector16=yes
fi

5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214
########################################
# 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

5215 5216 5217 5218
########################################
# check if ccache is interfering with
# semantic analysis of macros

5219
unset CCACHE_CPP2
5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242
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

5243 5244 5245 5246 5247 5248
#################################################
# 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";
5249
  elif test -n "$cxx" && has $cxx &&
J
John Snow 已提交
5250
       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5251 5252 5253 5254 5255 5256
    fortify_source="no";
  else
    fortify_source="yes"
  fi
fi

5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270
###############################################
# Check if copy_file_range is provided by glibc
have_copy_file_range=no
cat > $TMPC << EOF
#include <unistd.h>
int main(void) {
  copy_file_range(0, NULL, 0, NULL, 0, 0);
  return 0;
}
EOF
if compile_prog "" "" ; then
    have_copy_file_range=yes
fi

5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285
##########################################
# 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

5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316
##########################################
# check for usable membarrier system call
if test "$membarrier" = "yes"; then
    have_membarrier=no
    if test "$mingw32" = "yes" ; then
        have_membarrier=yes
    elif test "$linux" = "yes" ; then
        cat > $TMPC << EOF
    #include <linux/membarrier.h>
    #include <sys/syscall.h>
    #include <unistd.h>
    #include <stdlib.h>
    int main(void) {
        syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
        syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
	exit(0);
    }
EOF
        if compile_prog "" "" ; then
            have_membarrier=yes
        fi
    fi
    if test "$have_membarrier" = "no"; then
      feature_not_found "membarrier" "membarrier system call not available"
    fi
else
    # Do not enable it by default even for Mingw32, because it doesn't
    # work on Wine.
    membarrier=no
fi

5317 5318
##########################################
# check if rtnetlink.h exists and is useful
5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329
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 已提交
5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356
##########################################
# 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

5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382
##########################################
# 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


5383 5384
#################################################
# Check to see if we have the Hypervisor framework
5385
if [ "$darwin" = "yes" ] ; then
5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397
  cat > $TMPC << EOF
#include <Hypervisor/hv.h>
int main() { return 0;}
EOF
  if ! compile_object ""; then
    hvf='no'
  else
    hvf='yes'
    LDFLAGS="-framework Hypervisor $LDFLAGS"
  fi
fi

5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412
#################################################
# 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
5413 5414 5415 5416 5417 5418 5419 5420
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"
5421 5422
fi

5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436
##########################################
# 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

5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463
##########################################
# 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

5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477
##########################################
# 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

5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492
##########################################
# 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

5493 5494 5495 5496 5497
##########################################
# checks for sanitizers

have_asan=no
have_ubsan=no
5498 5499
have_asan_iface_h=no
have_asan_iface_fiber=no
5500 5501

if test "$sanitizers" = "yes" ; then
5502
  write_c_skeleton
5503 5504 5505
  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
      have_asan=yes
  fi
5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516

  # we could use a simple skeleton for flags checks, but this also
  # detect the static linking issue of ubsan, see also:
  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
  cat > $TMPC << EOF
#include <stdlib.h>
int main(void) {
    void *tmp = malloc(10);
    return *(int *)(tmp + 2);
}
EOF
5517 5518 5519
  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
      have_ubsan=yes
  fi
5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534

  if check_include "sanitizer/asan_interface.h" ; then
      have_asan_iface_h=yes
  fi

  cat > $TMPC << EOF
#include <sanitizer/asan_interface.h>
int main(void) {
  __sanitizer_start_switch_fiber(0, 0, 0);
  return 0;
}
EOF
  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
      have_asan_iface_fiber=yes
  fi
5535 5536
fi

5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547
##########################################
# Docker and cross-compiler support
#
# This is specifically for building test
# cases for foreign architectures, not
# cross-compiling QEMU itself.

if has "docker"; then
    docker=$($python $source_path/tests/docker/docker.py probe)
fi

5548
##########################################
5549 5550 5551
# End of CC checks
# After here, no more $cc or $ld runs

5552 5553
write_c_skeleton

B
Blue Swirl 已提交
5554 5555 5556
if test "$gcov" = "yes" ; then
  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5557
elif test "$fortify_source" = "yes" ; then
5558
  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5559 5560
elif test "$debug" = "no"; then
  CFLAGS="-O2 $CFLAGS"
5561
fi
J
Juan Quintela 已提交
5562

5563 5564
if test "$have_asan" = "yes"; then
  CFLAGS="-fsanitize=address $CFLAGS"
5565 5566 5567 5568 5569 5570 5571
  if test "$have_asan_iface_h" = "no" ; then
      echo "ASAN build enabled, but ASAN header missing." \
           "Without code annotation, the report may be inferior."
  elif test "$have_asan_iface_fiber" = "no" ; then
      echo "ASAN build enabled, but ASAN header is too old." \
           "Without code annotation, the report may be inferior."
  fi
5572 5573 5574 5575 5576
fi
if test "$have_ubsan" = "yes"; then
  CFLAGS="-fsanitize=undefined $CFLAGS"
fi

P
Peter Lieven 已提交
5577 5578 5579
##########################################
# Do we have libnfs
if test "$libnfs" != "no" ; then
5580
  if $pkg_config --atleast-version=1.9.3 libnfs; then
P
Peter Lieven 已提交
5581 5582 5583 5584
    libnfs="yes"
    libnfs_libs=$($pkg_config --libs libnfs)
  else
    if test "$libnfs" = "yes" ; then
5585
      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
P
Peter Lieven 已提交
5586 5587 5588 5589
    fi
    libnfs="no"
  fi
fi
B
Blue Swirl 已提交
5590

5591 5592 5593 5594 5595
# 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

5596 5597
if test "$solaris" = "no" ; then
    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5598
        LDFLAGS="-Wl,--warn-common $LDFLAGS"
5599 5600 5601
    fi
fi

5602 5603 5604 5605 5606 5607 5608
# test if pod2man has --utf8 option
if pod2man --help | grep -q utf8; then
    POD2MAN="pod2man --utf8"
else
    POD2MAN="pod2man"
fi

5609 5610 5611
# Use ASLR, no-SEH and DEP if available
if test "$mingw32" = "yes" ; then
    for flag in --dynamicbase --no-seh --nxcompat; do
5612
        if ld_has $flag ; then
5613 5614 5615 5616 5617
            LDFLAGS="-Wl,$flag $LDFLAGS"
        fi
    done
fi

5618
qemu_confdir=$sysconfdir$confsuffix
F
Fam Zheng 已提交
5619
qemu_moddir=$libdir$confsuffix
5620
qemu_datadir=$datadir$confsuffix
5621
qemu_localedir="$datadir/locale"
5622

5623 5624 5625 5626 5627
# We can only support ivshmem if we have eventfd
if [ "$eventfd" = "yes" ]; then
  ivshmem=yes
fi

5628 5629
tools=""
if test "$want_tools" = "yes" ; then
5630
  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
5631 5632
  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
    tools="qemu-nbd\$(EXESUF) $tools"
5633 5634
  fi
  if [ "$ivshmem" = "yes" ]; then
5635
    tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5636 5637 5638
  fi
fi
if test "$softmmu" = yes ; then
P
Paolo Bonzini 已提交
5639 5640
  if test "$linux" = yes; then
    if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5641 5642 5643 5644
      virtfs=yes
      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
    else
      if test "$virtfs" = yes; then
P
Paolo Bonzini 已提交
5645
        error_exit "VirtFS requires libcap devel and libattr devel"
5646
      fi
5647
      virtfs=no
5648
    fi
5649 5650 5651 5652 5653 5654 5655 5656
    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 已提交
5657 5658 5659 5660 5661 5662
    tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
  else
    if test "$virtfs" = yes; then
      error_exit "VirtFS is supported only on Linux"
    fi
    virtfs=no
5663 5664 5665 5666
    if test "$mpath" = yes; then
      error_exit "Multipath is supported only on Linux"
    fi
    mpath=no
5667
  fi
5668 5669 5670
  if test "$xkbcommon" = "yes"; then
    tools="qemu-keymap\$(EXESUF) $tools"
  fi
G
Gerd Hoffmann 已提交
5671
fi
5672 5673 5674

# Probe for guest agent support/options

5675
if [ "$guest_agent" != "no" ]; then
5676
  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5677
      tools="qemu-ga $tools"
5678 5679 5680 5681 5682
      guest_agent=yes
  elif [ "$guest_agent" != yes ]; then
      guest_agent=no
  else
      error_exit "Guest agent is not supported on this platform"
5683
  fi
5684
fi
5685

5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702
# 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
5703 5704 5705 5706 5707 5708
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
5709 5710
fi

5711
if test "$guest_agent_msi" = "yes"; then
5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724
  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
5725
      QEMU_GA_VERSION=$(cat $source_path/VERSION)
5726 5727
  fi

5728
  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742

  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

5743 5744 5745 5746 5747
# 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
5748
    # Different host OS linkers have different ideas about the name of the ELF
5749 5750 5751
    # 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
5752 5753 5754 5755 5756 5757
        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
            ld_i386_emulation="$emu"
            roms="optionrom"
            break
        fi
    done
5758
fi
5759
if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5760 5761
  roms="$roms spapr-rtas"
fi
5762

5763 5764 5765 5766
if test "$cpu" = "s390x" ; then
  roms="$roms s390-ccw"
fi

5767
# Probe for the need for relocating the user-only binary.
5768
if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5769 5770
  textseg_addr=
  case "$cpu" in
5771 5772
    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
      # ??? Rationale for choosing this address
5773 5774 5775
      textseg_addr=0x60000000
      ;;
    mips)
5776 5777 5778
      # 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
5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789
      ;;
  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.
5790 5791 5792 5793 5794 5795 5796 5797 5798 5799
      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

5800 5801 5802 5803 5804 5805 5806 5807 5808 5809
      $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

5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841
# 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

5842 5843 5844 5845 5846 5847
echo_version() {
    if test "$1" = "yes" ; then
        echo "($2)"
    fi
}

5848 5849
# prepend pixman and ftd flags after all config tests are done
QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5850
QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
5851
libs_softmmu="$pixman_libs $libs_softmmu"
5852

B
bellard 已提交
5853
echo "Install prefix    $prefix"
5854
echo "BIOS directory    $(eval echo $qemu_datadir)"
G
Gerd Hoffmann 已提交
5855
echo "firmware path     $(eval echo $firmwarepath)"
5856 5857 5858 5859 5860 5861
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 已提交
5862
if test "$mingw32" = "no" ; then
5863 5864
echo "local state directory   $(eval echo $local_statedir)"
echo "Manual directory  $(eval echo $mandir)"
B
bellard 已提交
5865
echo "ELF interp prefix $interp_prefix"
5866 5867
else
echo "local state directory   queried at runtime"
5868
echo "Windows SDK       $win_sdk"
B
bellard 已提交
5869
fi
5870
echo "Source path       $source_path"
5871
echo "GIT binary        $git"
5872
echo "GIT submodules    $git_submodules"
B
bellard 已提交
5873
echo "C compiler        $cc"
B
bellard 已提交
5874
echo "Host C compiler   $host_cc"
5875
echo "C++ compiler      $cxx"
5876
echo "Objective-C compiler $objcc"
5877
echo "ARFLAGS           $ARFLAGS"
5878
echo "CFLAGS            $CFLAGS"
J
Juan Quintela 已提交
5879
echo "QEMU_CFLAGS       $QEMU_CFLAGS"
5880
echo "LDFLAGS           $LDFLAGS"
5881
echo "QEMU_LDFLAGS      $QEMU_LDFLAGS"
B
bellard 已提交
5882
echo "make              $make"
5883
echo "install           $install"
B
Blue Swirl 已提交
5884
echo "python            $python"
5885 5886 5887
if test "$slirp" = "yes" ; then
    echo "smbd              $smbd"
fi
F
Fam Zheng 已提交
5888
echo "module support    $modules"
B
bellard 已提交
5889
echo "host CPU          $cpu"
B
bellard 已提交
5890
echo "host big endian   $bigendian"
5891
echo "target list       $target_list"
B
bellard 已提交
5892
echo "gprof enabled     $gprof"
5893
echo "sparse enabled    $sparse"
5894
echo "strip binaries    $strip_opt"
5895
echo "profiler          $profiler"
B
bellard 已提交
5896
echo "static build      $static"
5897 5898 5899
if test "$darwin" = "yes" ; then
    echo "Cocoa support     $cocoa"
fi
5900 5901
echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
5902
echo "GTK GL support    $gtk_gl"
5903
echo "VTE support       $vte $(echo_version $vte $vteversion)"
5904
echo "TLS priority      $tls_priority"
5905
echo "GNUTLS support    $gnutls"
5906
echo "GNUTLS rnd        $gnutls_rnd"
5907
echo "libgcrypt         $gcrypt"
5908
echo "libgcrypt kdf     $gcrypt_kdf"
5909
echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
5910
echo "nettle kdf        $nettle_kdf"
5911
echo "libtasn1          $tasn1"
B
balrog 已提交
5912
echo "curses support    $curses"
5913
echo "virgl support     $virglrenderer $(echo_version $virglrenderer $virgl_version)"
A
Alexander Graf 已提交
5914
echo "curl support      $curl"
B
bellard 已提交
5915
echo "mingw32 support   $mingw32"
M
malc 已提交
5916
echo "Audio drivers     $audio_drv_list"
5917 5918
echo "Block whitelist (rw) $block_drv_rw_whitelist"
echo "Block whitelist (ro) $block_drv_ro_whitelist"
5919
echo "VirtFS support    $virtfs"
5920
echo "Multipath support $mpath"
J
Jes Sorensen 已提交
5921 5922 5923 5924 5925 5926
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
5927 5928 5929
if test -n "$sparc_cpu"; then
    echo "Target Sparc Arch $sparc_cpu"
fi
5930
echo "xen support       $xen"
5931 5932
if test "$xen" = "yes" ; then
  echo "xen ctrl version  $xen_ctrl_version"
5933
  echo "pv dom build      $xen_pv_domain_build"
5934
fi
A
aurel32 已提交
5935
echo "brlapi support    $brlapi"
5936
echo "bluez  support    $bluez"
J
Juan Quintela 已提交
5937
echo "Documentation     $docs"
5938
echo "PIE               $pie"
5939
echo "vde support       $vde"
5940
echo "netmap support    $netmap"
5941
echo "Linux AIO support $linux_aio"
5942
echo "ATTR/XATTR support $attr"
T
ths 已提交
5943
echo "Install blobs     $blobs"
5944
echo "KVM support       $kvm"
5945
echo "HAX support       $hax"
5946
echo "HVF support       $hvf"
5947
echo "WHPX support      $whpx"
5948 5949 5950 5951 5952
echo "TCG support       $tcg"
if test "$tcg" = "yes" ; then
    echo "TCG debug enabled $debug_tcg"
    echo "TCG interpreter   $tcg_interpreter"
fi
5953
echo "malloc trim support $malloc_trim"
M
Michael R. Hines 已提交
5954
echo "RDMA support      $rdma"
5955
echo "fdt support       $fdt"
5956
echo "membarrier        $membarrier"
5957
echo "preadv support    $preadv"
B
Blue Swirl 已提交
5958
echo "fdatasync         $fdatasync"
A
Andreas Färber 已提交
5959 5960
echo "madvise           $madvise"
echo "posix_madvise     $posix_madvise"
5961
echo "posix_memalign    $posix_memalign"
5962
echo "libcap-ng support $cap_ng"
M
Michael S. Tsirkin 已提交
5963
echo "vhost-net support $vhost_net"
5964
echo "vhost-crypto support $vhost_crypto"
5965
echo "vhost-scsi support $vhost_scsi"
5966
echo "vhost-vsock support $vhost_vsock"
5967
echo "vhost-user support $vhost_user"
L
Lluís Vilanova 已提交
5968
echo "Trace backends    $trace_backends"
5969
if have_backend "simple"; then
P
Prerna Saxena 已提交
5970
echo "Trace output file $trace_file-<pid>"
5971
fi
5972
echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5973
echo "rbd support       $rbd"
C
Christoph Hellwig 已提交
5974
echo "xfsctl support    $xfs"
5975
echo "smartcard support $smartcard"
G
Gerd Hoffmann 已提交
5976
echo "libusb            $libusb"
5977
echo "usb net redir     $usb_redir"
G
Gerd Hoffmann 已提交
5978
echo "OpenGL support    $opengl"
5979
echo "OpenGL dmabufs    $opengl_dmabuf"
R
Ronnie Sahlberg 已提交
5980
echo "libiscsi support  $libiscsi"
P
Peter Lieven 已提交
5981
echo "libnfs support    $libnfs"
5982
echo "build guest agent $guest_agent"
5983
echo "QGA VSS support   $guest_agent_with_vss"
5984
echo "QGA w32 disk info $guest_agent_ntddscsi"
5985
echo "QGA MSI support   $guest_agent_msi"
5986
echo "seccomp support   $seccomp"
5987
echo "coroutine backend $coroutine"
5988
echo "coroutine pool    $coroutine_pool"
5989
echo "debug stack usage $debug_stack_usage"
5990
echo "mutex debugging   $debug_mutex"
5991
echo "crypto afalg      $crypto_afalg"
5992
echo "GlusterFS support $glusterfs"
B
Blue Swirl 已提交
5993 5994
echo "gcov              $gcov_tool"
echo "gcov enabled      $gcov"
S
Stefan Berger 已提交
5995
echo "TPM support       $tpm"
5996
echo "libssh2 support   $libssh2"
P
Paolo Bonzini 已提交
5997
echo "TPM passthrough   $tpm_passthrough"
5998
echo "TPM emulator      $tpm_emulator"
5999
echo "QOM debugging     $qom_cast_debug"
6000
echo "Live block migration $live_block_migration"
Q
qiaonuohan 已提交
6001 6002
echo "lzo support       $lzo"
echo "snappy support    $snappy"
6003
echo "bzip2 support     $bzip2"
6004
echo "NUMA host support $numa"
K
Klim Kireev 已提交
6005
echo "libxml2           $libxml2"
F
Fam Zheng 已提交
6006
echo "tcmalloc support  $tcmalloc"
6007
echo "jemalloc support  $jemalloc"
6008
echo "avx2 optimization $avx2_opt"
C
Changlong Xie 已提交
6009
echo "replication support $replication"
6010
echo "VxHS block device $vxhs"
6011
echo "capstone          $capstone"
6012
echo "docker            $docker"
B
bellard 已提交
6013

6014
if test "$sdl_too_old" = "yes"; then
B
bellard 已提交
6015
echo "-> Your SDL version is too old - please upgrade to have SDL support"
B
bellard 已提交
6016
fi
B
bellard 已提交
6017

6018 6019 6020 6021 6022 6023
if test "$gtkabi" = "2.0"; then
    echo
    echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
    echo "WARNING: future releases. Please switch to using GTK 3.0"
fi

6024 6025 6026 6027 6028 6029
if test "$sdlabi" = "1.2"; then
    echo
    echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
    echo "WARNING: future releases. Please switch to using SDL 2.0"
fi

6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046
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
6047 6048
    echo "Host OS $targetos support is not currently maintained."
    echo "The QEMU project intends to remove support for this host OS in"
6049 6050 6051 6052 6053 6054 6055
    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

6056 6057
config_host_mak="config-host.mak"

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

6060 6061 6062
echo "# Automatically generated by configure - do not modify" > $config_host_mak
echo >> $config_host_mak

6063
echo all: >> $config_host_mak
6064 6065
echo "prefix=$prefix" >> $config_host_mak
echo "bindir=$bindir" >> $config_host_mak
A
Alon Levy 已提交
6066
echo "libdir=$libdir" >> $config_host_mak
6067
echo "libexecdir=$libexecdir" >> $config_host_mak
6068
echo "includedir=$includedir" >> $config_host_mak
6069 6070
echo "mandir=$mandir" >> $config_host_mak
echo "sysconfdir=$sysconfdir" >> $config_host_mak
6071
echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6072
echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
G
Gerd Hoffmann 已提交
6073
echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6074
echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
F
Fam Zheng 已提交
6075
echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6076 6077 6078
if test "$mingw32" = "no" ; then
  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
fi
6079
echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6080
echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6081
echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6082
echo "GIT=$git" >> $config_host_mak
6083
echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6084
echo "GIT_UPDATE=$git_update" >> $config_host_mak
6085

6086
echo "ARCH=$ARCH" >> $config_host_mak
6087

6088
if test "$debug_tcg" = "yes" ; then
6089
  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6090
fi
6091
if test "$strip_opt" = "yes" ; then
6092
  echo "STRIP=${strip}" >> $config_host_mak
6093
fi
B
bellard 已提交
6094
if test "$bigendian" = "yes" ; then
6095
  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6096
fi
B
bellard 已提交
6097
if test "$mingw32" = "yes" ; then
6098
  echo "CONFIG_WIN32=y" >> $config_host_mak
6099
  rc_version=$(cat $source_path/VERSION)
6100 6101 6102 6103 6104 6105 6106 6107
  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
6108 6109
  if test "$guest_agent_with_vss" = "yes" ; then
    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6110
    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6111 6112
    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
  fi
6113 6114 6115
  if test "$guest_agent_ntddscsi" = "yes" ; then
    echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
  fi
6116
  if test "$guest_agent_msi" = "yes"; then
6117
    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6118 6119 6120 6121 6122 6123 6124
    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
6125
else
J
Juan Quintela 已提交
6126
  echo "CONFIG_POSIX=y" >> $config_host_mak
M
Mark McLoughlin 已提交
6127 6128 6129 6130
fi

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

6133
if test "$darwin" = "yes" ; then
6134
  echo "CONFIG_DARWIN=y" >> $config_host_mak
6135
fi
M
malc 已提交
6136

B
bellard 已提交
6137
if test "$solaris" = "yes" ; then
6138
  echo "CONFIG_SOLARIS=y" >> $config_host_mak
B
bellard 已提交
6139
fi
6140 6141 6142
if test "$haiku" = "yes" ; then
  echo "CONFIG_HAIKU=y" >> $config_host_mak
fi
6143
if test "$static" = "yes" ; then
6144
  echo "CONFIG_STATIC=y" >> $config_host_mak
B
bellard 已提交
6145
fi
6146
if test "$profiler" = "yes" ; then
6147
  echo "CONFIG_PROFILER=y" >> $config_host_mak
6148
fi
B
bellard 已提交
6149
if test "$slirp" = "yes" ; then
6150
  echo "CONFIG_SLIRP=y" >> $config_host_mak
6151
  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
B
bellard 已提交
6152
fi
6153
if test "$vde" = "yes" ; then
6154
  echo "CONFIG_VDE=y" >> $config_host_mak
6155
  echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6156
fi
6157 6158 6159
if test "$netmap" = "yes" ; then
  echo "CONFIG_NETMAP=y" >> $config_host_mak
fi
6160 6161 6162
if test "$l2tpv3" = "yes" ; then
  echo "CONFIG_L2TPV3=y" >> $config_host_mak
fi
6163 6164 6165
if test "$cap_ng" = "yes" ; then
  echo "CONFIG_LIBCAP=y" >> $config_host_mak
fi
6166
echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
M
malc 已提交
6167
for drv in $audio_drv_list; do
6168
    def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
G
Gerd Hoffmann 已提交
6169
    case "$drv" in
G
Gerd Hoffmann 已提交
6170
	alsa | oss | pa | sdl)
G
Gerd Hoffmann 已提交
6171 6172 6173 6174
	    echo "$def=m" >> $config_host_mak ;;
	*)
	    echo "$def=y" >> $config_host_mak ;;
    esac
M
malc 已提交
6175
done
6176 6177 6178 6179 6180
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
6181 6182 6183
if test "$audio_pt_int" = "yes" ; then
  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
fi
6184 6185 6186
if test "$audio_win_int" = "yes" ; then
  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
fi
6187 6188
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 已提交
6189 6190 6191
if test "$vnc" = "yes" ; then
  echo "CONFIG_VNC=y" >> $config_host_mak
fi
6192
if test "$vnc_sasl" = "yes" ; then
6193
  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6194
fi
J
Jes Sorensen 已提交
6195
if test "$vnc_jpeg" = "yes" ; then
6196 6197
  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
fi
J
Jes Sorensen 已提交
6198
if test "$vnc_png" = "yes" ; then
C
Corentin Chary 已提交
6199 6200
  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
fi
G
Gerd Hoffmann 已提交
6201 6202 6203 6204
if test "$xkbcommon" = "yes" ; then
  echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
  echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
fi
6205
if test "$fnmatch" = "yes" ; then
6206
  echo "CONFIG_FNMATCH=y" >> $config_host_mak
6207
fi
C
Christoph Hellwig 已提交
6208 6209 6210
if test "$xfs" = "yes" ; then
  echo "CONFIG_XFS=y" >> $config_host_mak
fi
6211
qemu_version=$(head $source_path/VERSION)
6212
echo "VERSION=$qemu_version" >>$config_host_mak
6213
echo "PKGVERSION=$pkgversion" >>$config_host_mak
6214
echo "SRC_PATH=$source_path" >> $config_host_mak
6215
echo "TARGET_LIST=$target_list" >> $config_host_mak
J
Juan Quintela 已提交
6216
if [ "$docs" = "yes" ] ; then
6217
  echo "BUILD_DOCS=yes" >> $config_host_mak
6218
fi
F
Fam Zheng 已提交
6219
if test "$modules" = "yes"; then
F
Fam Zheng 已提交
6220 6221
  # $shacmd can generate a hash started with digit, which the compiler doesn't
  # like as an symbol. So prefix it with an underscore
6222
  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
F
Fam Zheng 已提交
6223 6224
  echo "CONFIG_MODULES=y" >> $config_host_mak
fi
6225 6226 6227 6228 6229
if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
  echo "CONFIG_X11=y" >> $config_host_mak
  echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
  echo "X11_LIBS=$x11_libs" >> $config_host_mak
fi
6230
if test "$sdl" = "yes" ; then
G
Gerd Hoffmann 已提交
6231
  echo "CONFIG_SDL=m" >> $config_host_mak
6232
  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
6233
  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6234
  echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6235 6236
fi
if test "$cocoa" = "yes" ; then
6237
  echo "CONFIG_COCOA=y" >> $config_host_mak
B
balrog 已提交
6238 6239
fi
if test "$curses" = "yes" ; then
G
Gerd Hoffmann 已提交
6240 6241 6242
  echo "CONFIG_CURSES=m" >> $config_host_mak
  echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
  echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6243
fi
R
Riku Voipio 已提交
6244
if test "$pipe2" = "yes" ; then
6245
  echo "CONFIG_PIPE2=y" >> $config_host_mak
R
Riku Voipio 已提交
6246
fi
K
Kevin Wolf 已提交
6247 6248 6249
if test "$accept4" = "yes" ; then
  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
fi
6250
if test "$splice" = "yes" ; then
6251
  echo "CONFIG_SPLICE=y" >> $config_host_mak
6252
fi
R
Riku Voipio 已提交
6253 6254 6255
if test "$eventfd" = "yes" ; then
  echo "CONFIG_EVENTFD=y" >> $config_host_mak
fi
M
Marc-André Lureau 已提交
6256 6257 6258
if test "$memfd" = "yes" ; then
  echo "CONFIG_MEMFD=y" >> $config_host_mak
fi
6259 6260 6261
if test "$fallocate" = "yes" ; then
  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
fi
6262 6263 6264
if test "$fallocate_punch_hole" = "yes" ; then
  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
fi
6265 6266 6267
if test "$fallocate_zero_range" = "yes" ; then
  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
fi
6268 6269 6270
if test "$posix_fallocate" = "yes" ; then
  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
fi
6271 6272 6273
if test "$sync_file_range" = "yes" ; then
  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
fi
6274 6275 6276
if test "$fiemap" = "yes" ; then
  echo "CONFIG_FIEMAP=y" >> $config_host_mak
fi
6277 6278 6279
if test "$dup3" = "yes" ; then
  echo "CONFIG_DUP3=y" >> $config_host_mak
fi
6280 6281 6282
if test "$ppoll" = "yes" ; then
  echo "CONFIG_PPOLL=y" >> $config_host_mak
fi
6283 6284 6285
if test "$prctl_pr_set_timerslack" = "yes" ; then
  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
fi
6286 6287 6288 6289 6290 6291
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
6292 6293 6294
if test "$sendfile" = "yes" ; then
  echo "CONFIG_SENDFILE=y" >> $config_host_mak
fi
6295 6296 6297
if test "$timerfd" = "yes" ; then
  echo "CONFIG_TIMERFD=y" >> $config_host_mak
fi
R
Riku Voipio 已提交
6298 6299 6300
if test "$setns" = "yes" ; then
  echo "CONFIG_SETNS=y" >> $config_host_mak
fi
6301 6302 6303
if test "$clock_adjtime" = "yes" ; then
  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
fi
6304 6305 6306
if test "$syncfs" = "yes" ; then
  echo "CONFIG_SYNCFS=y" >> $config_host_mak
fi
6307
if test "$inotify" = "yes" ; then
6308
  echo "CONFIG_INOTIFY=y" >> $config_host_mak
6309
fi
6310 6311 6312
if test "$inotify1" = "yes" ; then
  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
fi
6313 6314 6315
if test "$sem_timedwait" = "yes" ; then
  echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
fi
K
Keno Fischer 已提交
6316 6317 6318
if test "$strchrnul" = "yes" ; then
  echo "HAVE_STRCHRNUL=y" >> $config_host_mak
fi
6319 6320 6321 6322 6323 6324
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 已提交
6325
if test "$curl" = "yes" ; then
6326
  echo "CONFIG_CURL=m" >> $config_host_mak
J
Juan Quintela 已提交
6327
  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6328
  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
A
Alexander Graf 已提交
6329
fi
A
aurel32 已提交
6330
if test "$brlapi" = "yes" ; then
6331
  echo "CONFIG_BRLAPI=y" >> $config_host_mak
6332
  echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
A
aurel32 已提交
6333
fi
B
balrog 已提交
6334
if test "$bluez" = "yes" ; then
6335
  echo "CONFIG_BLUEZ=y" >> $config_host_mak
6336
  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
B
balrog 已提交
6337
fi
6338
if test "$glib_subprocess" = "yes" ; then
6339 6340
  echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
fi
A
Anthony Liguori 已提交
6341
if test "$gtk" = "yes" ; then
G
Gerd Hoffmann 已提交
6342
  echo "CONFIG_GTK=m" >> $config_host_mak
6343
  echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
A
Anthony Liguori 已提交
6344
  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6345
  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6346 6347 6348
  if test "$gtk_gl" = "yes" ; then
    echo "CONFIG_GTK_GL=y" >> $config_host_mak
  fi
S
Stefan Weil 已提交
6349
fi
6350
echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6351 6352 6353
if test "$gnutls" = "yes" ; then
  echo "CONFIG_GNUTLS=y" >> $config_host_mak
fi
6354 6355 6356
if test "$gnutls_rnd" = "yes" ; then
  echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
fi
6357 6358
if test "$gcrypt" = "yes" ; then
  echo "CONFIG_GCRYPT=y" >> $config_host_mak
6359 6360 6361
  if test "$gcrypt_hmac" = "yes" ; then
    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
  fi
6362 6363 6364
  if test "$gcrypt_kdf" = "yes" ; then
    echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
  fi
6365
fi
6366 6367
if test "$nettle" = "yes" ; then
  echo "CONFIG_NETTLE=y" >> $config_host_mak
6368
  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6369 6370 6371
  if test "$nettle_kdf" = "yes" ; then
    echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
  fi
6372
fi
6373 6374 6375
if test "$tasn1" = "yes" ; then
  echo "CONFIG_TASN1=y" >> $config_host_mak
fi
6376 6377 6378
if test "$have_ifaddrs_h" = "yes" ; then
    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
fi
6379 6380 6381
if test "$have_broken_size_max" = "yes" ; then
    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
fi
6382 6383 6384 6385 6386 6387 6388 6389

# 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
6390 6391 6392
if test "$have_copy_file_range" = "yes" ; then
    echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
fi
S
Stefan Weil 已提交
6393 6394
if test "$vte" = "yes" ; then
  echo "CONFIG_VTE=y" >> $config_host_mak
A
Anthony Liguori 已提交
6395
  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
G
Gerd Hoffmann 已提交
6396
  echo "VTE_LIBS=$vte_libs" >> $config_host_mak
A
Anthony Liguori 已提交
6397
fi
6398 6399 6400 6401 6402
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
6403
if test "$xen" = "yes" ; then
J
Jan Kiszka 已提交
6404
  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6405
  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6406 6407 6408
  if test "$xen_pv_domain_build" = "yes" ; then
    echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
  fi
6409
fi
6410 6411 6412
if test "$linux_aio" = "yes" ; then
  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
fi
6413 6414 6415
if test "$attr" = "yes" ; then
  echo "CONFIG_ATTR=y" >> $config_host_mak
fi
6416 6417 6418
if test "$libattr" = "yes" ; then
  echo "CONFIG_LIBATTR=y" >> $config_host_mak
fi
6419 6420
if test "$virtfs" = "yes" ; then
  echo "CONFIG_VIRTFS=y" >> $config_host_mak
6421
fi
6422 6423 6424
if test "$mpath" = "yes" ; then
  echo "CONFIG_MPATH=y" >> $config_host_mak
fi
6425 6426 6427
if test "$vhost_scsi" = "yes" ; then
  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
fi
6428
if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
6429 6430
  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
fi
6431 6432 6433
if test "$vhost_crypto" = "yes" ; then
  echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
fi
6434 6435 6436
if test "$vhost_vsock" = "yes" ; then
  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
fi
6437 6438 6439
if test "$vhost_user" = "yes" ; then
  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
fi
T
ths 已提交
6440
if test "$blobs" = "yes" ; then
6441
  echo "INSTALL_BLOBS=yes" >> $config_host_mak
T
ths 已提交
6442
fi
A
aliguori 已提交
6443
if test "$iovec" = "yes" ; then
6444
  echo "CONFIG_IOVEC=y" >> $config_host_mak
A
aliguori 已提交
6445
fi
6446
if test "$preadv" = "yes" ; then
6447
  echo "CONFIG_PREADV=y" >> $config_host_mak
6448
fi
6449
if test "$fdt" != "no" ; then
6450
  echo "CONFIG_FDT=y" >> $config_host_mak
6451
fi
6452 6453 6454
if test "$membarrier" = "yes" ; then
  echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
fi
M
Marcelo Tosatti 已提交
6455 6456 6457
if test "$signalfd" = "yes" ; then
  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
fi
6458 6459 6460 6461 6462
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
6463
fi
B
Blue Swirl 已提交
6464 6465 6466
if test "$fdatasync" = "yes" ; then
  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
fi
A
Andreas Färber 已提交
6467 6468 6469 6470 6471 6472
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
6473 6474 6475
if test "$posix_memalign" = "yes" ; then
  echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
fi
6476

6477 6478 6479
if test "$spice" = "yes" ; then
  echo "CONFIG_SPICE=y" >> $config_host_mak
fi
A
Alon Levy 已提交
6480

6481 6482
if test "$smartcard" = "yes" ; then
  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6483 6484
  echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
  echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
R
Robert Relyea 已提交
6485 6486
fi

G
Gerd Hoffmann 已提交
6487 6488
if test "$libusb" = "yes" ; then
  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6489 6490
  echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
  echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
G
Gerd Hoffmann 已提交
6491 6492
fi

6493 6494
if test "$usb_redir" = "yes" ; then
  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6495 6496
  echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
  echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6497 6498
fi

G
Gerd Hoffmann 已提交
6499 6500 6501
if test "$opengl" = "yes" ; then
  echo "CONFIG_OPENGL=y" >> $config_host_mak
  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6502 6503 6504
  if test "$opengl_dmabuf" = "yes" ; then
    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
  fi
M
Michael Walle 已提交
6505 6506
fi

6507 6508 6509 6510
if test "$malloc_trim" = "yes" ; then
  echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
fi

6511 6512 6513 6514
if test "$avx2_opt" = "yes" ; then
  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
fi

Q
qiaonuohan 已提交
6515 6516 6517 6518 6519 6520 6521 6522
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

6523 6524 6525 6526 6527
if test "$bzip2" = "yes" ; then
  echo "CONFIG_BZIP2=y" >> $config_host_mak
  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
fi

R
Ronnie Sahlberg 已提交
6528
if test "$libiscsi" = "yes" ; then
6529
  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6530 6531
  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
R
Ronnie Sahlberg 已提交
6532 6533
fi

P
Peter Lieven 已提交
6534
if test "$libnfs" = "yes" ; then
6535 6536
  echo "CONFIG_LIBNFS=m" >> $config_host_mak
  echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
P
Peter Lieven 已提交
6537 6538
fi

6539 6540
if test "$seccomp" = "yes"; then
  echo "CONFIG_SECCOMP=y" >> $config_host_mak
6541 6542
  echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
  echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6543 6544
fi

6545
# XXX: suppress that
B
bellard 已提交
6546
if [ "$bsd" = "yes" ] ; then
6547
  echo "CONFIG_BSD=y" >> $config_host_mak
B
bellard 已提交
6548 6549
fi

6550 6551 6552
if test "$localtime_r" = "yes" ; then
  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
fi
6553 6554 6555
if test "$qom_cast_debug" = "yes" ; then
  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
fi
6556
if test "$rbd" = "yes" ; then
6557
  echo "CONFIG_RBD=m" >> $config_host_mak
6558 6559
  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6560 6561
fi

6562
echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6563 6564 6565 6566 6567
if test "$coroutine_pool" = "yes" ; then
  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
else
  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
fi
6568

6569 6570 6571 6572
if test "$debug_stack_usage" = "yes" ; then
  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
fi

6573 6574 6575 6576
if test "$crypto_afalg" = "yes" ; then
  echo "CONFIG_AF_ALG=y" >> $config_host_mak
fi

6577 6578 6579 6580
if test "$open_by_handle_at" = "yes" ; then
  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
fi

6581 6582
if test "$linux_magic_h" = "yes" ; then
  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6583 6584
fi

6585 6586
if test "$pragma_diagnostic_available" = "yes" ; then
  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6587 6588
fi

6589 6590 6591 6592
if test "$valgrind_h" = "yes" ; then
  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
fi

6593 6594 6595 6596
if test "$have_asan_iface_fiber" = "yes" ; then
    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
fi

6597 6598
if test "$has_environ" = "yes" ; then
  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6599 6600
fi

6601 6602 6603 6604
if test "$cpuid_h" = "yes" ; then
  echo "CONFIG_CPUID_H=y" >> $config_host_mak
fi

6605 6606 6607 6608
if test "$int128" = "yes" ; then
  echo "CONFIG_INT128=y" >> $config_host_mak
fi

R
Richard Henderson 已提交
6609 6610 6611 6612
if test "$atomic128" = "yes" ; then
  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
fi

R
Richard Henderson 已提交
6613 6614 6615 6616
if test "$atomic64" = "yes" ; then
  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
fi

6617 6618 6619 6620
if test "$vector16" = "yes" ; then
  echo "CONFIG_VECTOR16=y" >> $config_host_mak
fi

6621 6622 6623 6624
if test "$getauxval" = "yes" ; then
  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
fi

6625
if test "$glusterfs" = "yes" ; then
6626
  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6627 6628
  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6629 6630
fi

6631 6632 6633 6634
if test "$glusterfs_xlator_opt" = "yes" ; then
  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
fi

6635 6636
if test "$glusterfs_discard" = "yes" ; then
  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6637
fi
6638

6639 6640 6641 6642
if test "$glusterfs_fallocate" = "yes" ; then
  echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
fi

6643 6644 6645 6646
if test "$glusterfs_zerofill" = "yes" ; then
  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
fi

6647
if test "$libssh2" = "yes" ; then
6648
  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6649 6650
  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6651 6652
fi

6653 6654 6655 6656
if test "$live_block_migration" = "yes" ; then
  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
fi

P
Paolo Bonzini 已提交
6657 6658
if test "$tpm" = "yes"; then
  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6659
  # TPM passthrough support?
P
Paolo Bonzini 已提交
6660 6661 6662
  if test "$tpm_passthrough" = "yes"; then
    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
  fi
6663 6664 6665 6666
  # TPM emulator support?
  if test "$tpm_emulator" = "yes"; then
    echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
  fi
P
Paolo Bonzini 已提交
6667 6668
fi

L
Lluís Vilanova 已提交
6669 6670
echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
if have_backend "nop"; then
6671
  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6672
fi
L
Lluís Vilanova 已提交
6673
if have_backend "simple"; then
6674 6675
  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
  # Set the appropriate trace file.
6676
  trace_file="\"$trace_file-\" FMT_pid"
P
Prerna Saxena 已提交
6677
fi
6678 6679
if have_backend "log"; then
  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6680
fi
L
Lluís Vilanova 已提交
6681
if have_backend "ust"; then
6682 6683
  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
fi
L
Lluís Vilanova 已提交
6684
if have_backend "dtrace"; then
6685 6686 6687 6688
  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
  if test "$trace_backend_stap" = "yes" ; then
    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
  fi
6689
fi
L
Lluís Vilanova 已提交
6690
if have_backend "ftrace"; then
6691 6692 6693
  if test "$linux" = "yes" ; then
    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
  else
6694
    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6695 6696
  fi
fi
P
Paul Durrant 已提交
6697 6698 6699 6700 6701 6702 6703
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 已提交
6704 6705
echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak

M
Michael R. Hines 已提交
6706 6707
if test "$rdma" = "yes" ; then
  echo "CONFIG_RDMA=y" >> $config_host_mak
6708
  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
M
Michael R. Hines 已提交
6709 6710
fi

6711 6712 6713 6714
if test "$have_rtnetlink" = "yes" ; then
  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
fi

K
Klim Kireev 已提交
6715 6716 6717 6718 6719 6720
if test "$libxml2" = "yes" ; then
  echo "CONFIG_LIBXML2=y" >> $config_host_mak
  echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
  echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
fi

C
Changlong Xie 已提交
6721 6722 6723 6724
if test "$replication" = "yes" ; then
  echo "CONFIG_REPLICATION=y" >> $config_host_mak
fi

S
Stefan Hajnoczi 已提交
6725 6726 6727 6728
if test "$have_af_vsock" = "yes" ; then
  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
fi

6729 6730 6731 6732
if test "$have_sysmacros" = "yes" ; then
  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
fi

6733 6734 6735 6736
if test "$have_static_assert" = "yes" ; then
  echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
fi

6737 6738 6739 6740
if test "$have_utmpx" = "yes" ; then
  echo "HAVE_UTMPX=y" >> $config_host_mak
fi

6741 6742
if test "$ivshmem" = "yes" ; then
  echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6743
fi
6744
if test "$capstone" != "no" ; then
6745
  echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6746
fi
6747 6748 6749
if test "$debug_mutex" = "yes" ; then
  echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
fi
6750

6751 6752 6753 6754 6755 6756 6757 6758 6759 6760
# 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

6761 6762 6763 6764 6765
if test "$vxhs" = "yes" ; then
  echo "CONFIG_VXHS=y" >> $config_host_mak
  echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
fi

6766
if test "$tcg_interpreter" = "yes"; then
6767
  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6768
elif test "$ARCH" = "sparc64" ; then
6769
  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6770
elif test "$ARCH" = "s390x" ; then
6771
  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6772
elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6773
  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6774
elif test "$ARCH" = "ppc64" ; then
6775
  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6776
else
6777
  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6778
fi
6779
QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
6780

6781 6782
echo "TOOLS=$tools" >> $config_host_mak
echo "ROMS=$roms" >> $config_host_mak
6783 6784
echo "MAKE=$make" >> $config_host_mak
echo "INSTALL=$install" >> $config_host_mak
6785 6786
echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
M
Michael Tokarev 已提交
6787 6788
echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
B
Blue Swirl 已提交
6789
echo "PYTHON=$python" >> $config_host_mak
6790
echo "CC=$cc" >> $config_host_mak
6791 6792 6793
if $iasl -h > /dev/null 2>&1; then
  echo "IASL=$iasl" >> $config_host_mak
fi
6794
echo "HOST_CC=$host_cc" >> $config_host_mak
6795
echo "CXX=$cxx" >> $config_host_mak
6796
echo "OBJCC=$objcc" >> $config_host_mak
6797
echo "AR=$ar" >> $config_host_mak
6798
echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6799
echo "AS=$as" >> $config_host_mak
6800
echo "CCAS=$ccas" >> $config_host_mak
6801
echo "CPP=$cpp" >> $config_host_mak
6802 6803
echo "OBJCOPY=$objcopy" >> $config_host_mak
echo "LD=$ld" >> $config_host_mak
6804
echo "RANLIB=$ranlib" >> $config_host_mak
S
Stefan Weil 已提交
6805
echo "NM=$nm" >> $config_host_mak
6806
echo "WINDRES=$windres" >> $config_host_mak
6807
echo "CFLAGS=$CFLAGS" >> $config_host_mak
B
Brad 已提交
6808
echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
J
Juan Quintela 已提交
6809
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6810
echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6811
echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
P
Paolo Bonzini 已提交
6812 6813
if test "$sparse" = "yes" ; then
  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
6814
  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
G
Gerd Hoffmann 已提交
6815
  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
P
Paolo Bonzini 已提交
6816 6817 6818
  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
6819 6820 6821 6822 6823
if test "$cross_prefix" != ""; then
  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
else
  echo "AUTOCONF_HOST := "                             >> $config_host_mak
fi
6824
echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
B
Brad 已提交
6825
echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6826
echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6827
echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6828
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
J
Juan Quintela 已提交
6829
echo "LIBS+=$LIBS" >> $config_host_mak
J
Juan Quintela 已提交
6830
echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6831
echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6832
echo "EXESUF=$EXESUF" >> $config_host_mak
F
Fam Zheng 已提交
6833 6834
echo "DSOSUF=$DSOSUF" >> $config_host_mak
echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6835
echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6836 6837
echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6838
echo "POD2MAN=$POD2MAN" >> $config_host_mak
6839
echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
B
Blue Swirl 已提交
6840 6841 6842 6843
if test "$gcov" = "yes" ; then
  echo "CONFIG_GCOV=y" >> $config_host_mak
  echo "GCOV=$gcov_tool" >> $config_host_mak
fi
6844

6845 6846 6847 6848
if test "$docker" != "no"; then
    echo "HAVE_USER_DOCKER=y" >> $config_host_mak
fi

6849 6850
# use included Linux headers
if test "$linux" = "yes" ; then
6851
  mkdir -p linux-headers
6852
  case "$cpu" in
6853
  i386|x86_64|x32)
6854
    linux_arch=x86
6855 6856
    ;;
  ppcemb|ppc|ppc64)
6857
    linux_arch=powerpc
6858 6859
    ;;
  s390x)
6860 6861
    linux_arch=s390
    ;;
6862 6863 6864
  aarch64)
    linux_arch=arm64
    ;;
6865 6866 6867
  mips64)
    linux_arch=mips
    ;;
6868 6869 6870
  *)
    # For most CPUs the kernel architecture name and QEMU CPU name match.
    linux_arch="$cpu"
6871 6872
    ;;
  esac
6873 6874 6875 6876
    # 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
6877 6878
fi

6879
for target in $target_list; do
6880
target_dir="$target"
6881
config_target_mak=$target_dir/config-target.mak
6882
target_name=$(echo $target | cut -d '-' -f 1)
6883
target_bigendian="no"
6884

6885
case "$target_name" in
6886
  armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6887 6888 6889
  target_bigendian=yes
  ;;
esac
6890
target_softmmu="no"
B
bellard 已提交
6891
target_user_only="no"
6892
target_linux_user="no"
B
blueswir1 已提交
6893
target_bsd_user="no"
P
pbrook 已提交
6894
case "$target" in
6895
  ${target_name}-softmmu)
P
pbrook 已提交
6896 6897
    target_softmmu="yes"
    ;;
6898
  ${target_name}-linux-user)
P
pbrook 已提交
6899 6900 6901
    target_user_only="yes"
    target_linux_user="yes"
    ;;
6902
  ${target_name}-bsd-user)
B
blueswir1 已提交
6903 6904 6905
    target_user_only="yes"
    target_bsd_user="yes"
    ;;
P
pbrook 已提交
6906
  *)
6907
    error_exit "Target '$target' not recognised"
P
pbrook 已提交
6908 6909 6910
    exit 1
    ;;
esac
6911

6912 6913
target_compiler=""
target_compiler_static=""
6914
target_compiler_cflags=""
6915

6916
mkdir -p $target_dir
6917
echo "# Automatically generated by configure - do not modify" > $config_target_mak
B
bellard 已提交
6918

P
pbrook 已提交
6919
bflt="no"
6920
mttcg="no"
6921
interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
P
pbrook 已提交
6922
gdb_xml_files=""
A
aliguori 已提交
6923

6924
TARGET_ARCH="$target_name"
6925
TARGET_BASE_ARCH=""
6926
TARGET_ABI_DIR=""
6927

6928
case "$target_name" in
A
aurel32 已提交
6929
  i386)
6930
    gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6931
    target_compiler=$cross_cc_i386
6932
    target_compiler_cflags=$cross_cc_ccflags_i386
A
aurel32 已提交
6933 6934
  ;;
  x86_64)
6935
    TARGET_BASE_ARCH=i386
6936
    gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
6937
    target_compiler=$cross_cc_x86_64
A
aurel32 已提交
6938 6939
  ;;
  alpha)
6940
    mttcg="yes"
6941
    target_compiler=$cross_cc_alpha
A
aurel32 已提交
6942 6943
  ;;
  arm|armeb)
J
Juan Quintela 已提交
6944
    TARGET_ARCH=arm
A
aurel32 已提交
6945
    bflt="yes"
6946
    mttcg="yes"
P
pbrook 已提交
6947
    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6948
    target_compiler=$cross_cc_arm
6949
    eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
A
aurel32 已提交
6950
  ;;
6951 6952
  aarch64|aarch64_be)
    TARGET_ARCH=aarch64
6953 6954
    TARGET_BASE_ARCH=arm
    bflt="yes"
6955
    mttcg="yes"
6956
    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6957
    target_compiler=$cross_cc_aarch64
6958
    eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
6959
  ;;
A
aurel32 已提交
6960
  cris)
6961
    target_compiler=$cross_cc_cris
A
aurel32 已提交
6962
  ;;
6963
  hppa)
R
Richard Henderson 已提交
6964
    mttcg="yes"
6965
    target_compiler=$cross_cc_hppa
6966
  ;;
M
Michael Walle 已提交
6967
  lm32)
6968
    target_compiler=$cross_cc_lm32
M
Michael Walle 已提交
6969
  ;;
A
aurel32 已提交
6970 6971
  m68k)
    bflt="yes"
6972
    gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
6973
    target_compiler=$cross_cc_m68k
A
aurel32 已提交
6974
  ;;
6975 6976
  microblaze|microblazeel)
    TARGET_ARCH=microblaze
6977
    bflt="yes"
6978
    echo "TARGET_ABI32=y" >> $config_target_mak
6979
    target_compiler=$cross_cc_microblaze
6980
  ;;
J
Juan Quintela 已提交
6981
  mips|mipsel)
J
Juan Quintela 已提交
6982
    TARGET_ARCH=mips
6983
    target_compiler=$cross_cc_mips
6984
    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
A
aurel32 已提交
6985 6986
  ;;
  mipsn32|mipsn32el)
6987
    TARGET_ARCH=mips64
6988
    TARGET_BASE_ARCH=mips
6989
    target_compiler=$cross_cc_mipsn32
6990
    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6991
    echo "TARGET_ABI32=y" >> $config_target_mak
A
aurel32 已提交
6992 6993
  ;;
  mips64|mips64el)
J
Juan Quintela 已提交
6994
    TARGET_ARCH=mips64
6995
    TARGET_BASE_ARCH=mips
6996
    target_compiler=$cross_cc_mips64
6997
    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
A
aurel32 已提交
6998
  ;;
A
Anthony Green 已提交
6999
  moxie)
7000
    target_compiler=$cross_cc_moxie
A
Anthony Green 已提交
7001
  ;;
M
Marek Vasut 已提交
7002
  nios2)
7003
    target_compiler=$cross_cc_nios2
M
Marek Vasut 已提交
7004
  ;;
7005
  or1k)
7006
    target_compiler=$cross_cc_or1k
7007 7008 7009
    TARGET_ARCH=openrisc
    TARGET_BASE_ARCH=openrisc
  ;;
A
aurel32 已提交
7010
  ppc)
7011
    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7012
    target_compiler=$cross_cc_powerpc
A
aurel32 已提交
7013 7014
  ;;
  ppcemb)
7015
    TARGET_BASE_ARCH=ppc
7016
    TARGET_ABI_DIR=ppc
7017
    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7018
    target_compiler=$cross_cc_ppcemb
A
aurel32 已提交
7019 7020
  ;;
  ppc64)
7021
    TARGET_BASE_ARCH=ppc
7022
    TARGET_ABI_DIR=ppc
7023
    mttcg=yes
7024
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7025
    target_compiler=$cross_cc_ppc64
A
aurel32 已提交
7026
  ;;
7027 7028 7029 7030
  ppc64le)
    TARGET_ARCH=ppc64
    TARGET_BASE_ARCH=ppc
    TARGET_ABI_DIR=ppc
7031
    mttcg=yes
7032
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7033
    target_compiler=$cross_cc_ppc64le
7034
  ;;
A
aurel32 已提交
7035
  ppc64abi32)
J
Juan Quintela 已提交
7036
    TARGET_ARCH=ppc64
7037
    TARGET_BASE_ARCH=ppc
7038
    TARGET_ABI_DIR=ppc
7039
    echo "TARGET_ABI32=y" >> $config_target_mak
7040
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7041
    target_compiler=$cross_cc_ppc64abi32
A
aurel32 已提交
7042
  ;;
M
Michael Clark 已提交
7043 7044 7045 7046
  riscv32)
    TARGET_BASE_ARCH=riscv
    TARGET_ABI_DIR=riscv
    mttcg=yes
7047
    target_compiler=$cross_cc_riscv32
M
Michael Clark 已提交
7048 7049 7050 7051 7052
  ;;
  riscv64)
    TARGET_BASE_ARCH=riscv
    TARGET_ABI_DIR=riscv
    mttcg=yes
7053
    target_compiler=$cross_cc_riscv64
M
Michael Clark 已提交
7054
  ;;
A
aurel32 已提交
7055
  sh4|sh4eb)
J
Juan Quintela 已提交
7056
    TARGET_ARCH=sh4
A
aurel32 已提交
7057
    bflt="yes"
7058
    target_compiler=$cross_cc_sh4
A
aurel32 已提交
7059 7060
  ;;
  sparc)
7061
    target_compiler=$cross_cc_sparc
A
aurel32 已提交
7062 7063
  ;;
  sparc64)
7064
    TARGET_BASE_ARCH=sparc
7065
    target_compiler=$cross_cc_sparc64
A
aurel32 已提交
7066 7067
  ;;
  sparc32plus)
J
Juan Quintela 已提交
7068
    TARGET_ARCH=sparc64
7069
    TARGET_BASE_ARCH=sparc
7070
    TARGET_ABI_DIR=sparc
7071
    target_compiler=$cross_cc_sparc32plus
7072
    echo "TARGET_ABI32=y" >> $config_target_mak
A
aurel32 已提交
7073
  ;;
7074
  s390x)
7075
    mttcg=yes
7076
    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7077
    target_compiler=$cross_cc_s390x
7078
  ;;
7079
  tilegx)
7080
    target_compiler=$cross_cc_tilegx
7081
  ;;
7082
  tricore)
7083
    target_compiler=$cross_cc_tricore
7084
  ;;
7085
  unicore32)
7086
    target_compiler=$cross_cc_unicore32
7087
  ;;
7088 7089
  xtensa|xtensaeb)
    TARGET_ARCH=xtensa
M
Max Filippov 已提交
7090
    mttcg="yes"
7091
    target_compiler=$cross_cc_xtensa
7092
  ;;
A
aurel32 已提交
7093
  *)
7094
    error_exit "Unsupported target CPU"
A
aurel32 已提交
7095 7096
  ;;
esac
7097 7098 7099 7100 7101
# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
if [ "$TARGET_BASE_ARCH" = "" ]; then
  TARGET_BASE_ARCH=$TARGET_ARCH
fi

7102 7103 7104 7105 7106
# Do we have a cross compiler for this target?
if has $target_compiler; then

    write_c_skeleton

7107
    if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
7108
        # For host systems we might get away with building without -static
7109
        if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122
            target_compiler=""
        else
            enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
            target_compiler_static="n"
        fi
    else
        enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
        target_compiler_static="y"
    fi
else
    target_compiler=""
fi

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

7125 7126 7127 7128
upper() {
    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
}

7129
target_arch_name="$(upper $TARGET_ARCH)"
7130
echo "TARGET_$target_arch_name=y" >> $config_target_mak
7131
echo "TARGET_NAME=$target_name" >> $config_target_mak
7132
echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7133 7134 7135
if [ "$TARGET_ABI_DIR" = "" ]; then
  TARGET_ABI_DIR=$TARGET_ARCH
fi
7136
echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7137 7138 7139
if [ "$HOST_VARIANT_DIR" != "" ]; then
    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
fi
7140 7141 7142 7143

if supported_xen_target $target; then
    echo "CONFIG_XEN=y" >> $config_target_mak
    if test "$xen_pci_passthrough" = yes; then
7144
        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
J
Juan Quintela 已提交
7145
    fi
7146 7147 7148 7149
fi
if supported_kvm_target $target; then
    echo "CONFIG_KVM=y" >> $config_target_mak
    if test "$vhost_net" = "yes" ; then
M
Michael S. Tsirkin 已提交
7150
        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
7151 7152 7153
        if test "$vhost_user" = "yes" ; then
            echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
        fi
J
Juan Quintela 已提交
7154
    fi
7155 7156 7157
fi
if supported_hax_target $target; then
    echo "CONFIG_HAX=y" >> $config_target_mak
7158
fi
7159 7160 7161
if supported_hvf_target $target; then
    echo "CONFIG_HVF=y" >> $config_target_mak
fi
7162 7163 7164
if supported_whpx_target $target; then
    echo "CONFIG_WHPX=y" >> $config_target_mak
fi
B
bellard 已提交
7165
if test "$target_bigendian" = "yes" ; then
7166
  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
B
bellard 已提交
7167
fi
7168
if test "$target_softmmu" = "yes" ; then
7169
  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7170 7171 7172
  if test "$mttcg" = "yes" ; then
    echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
  fi
B
bellard 已提交
7173
fi
B
bellard 已提交
7174
if test "$target_user_only" = "yes" ; then
7175
  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7176
  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
B
bellard 已提交
7177
fi
7178
if test "$target_linux_user" = "yes" ; then
7179
  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7180
fi
P
pbrook 已提交
7181 7182 7183 7184 7185
list=""
if test ! -z "$gdb_xml_files" ; then
  for x in $gdb_xml_files; do
    list="$list $source_path/gdb-xml/$x"
  done
7186
  echo "TARGET_XML_FILES=$list" >> $config_target_mak
P
pbrook 已提交
7187
fi
7188

P
pbrook 已提交
7189
if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
7190
  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
P
pbrook 已提交
7191
fi
B
blueswir1 已提交
7192
if test "$target_bsd_user" = "yes" ; then
7193
  echo "CONFIG_BSD_USER=y" >> $config_target_mak
B
blueswir1 已提交
7194
fi
7195

7196 7197 7198 7199 7200 7201
if test -n "$target_compiler"; then
  echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak

  if test -n "$target_compiler_static"; then
      echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
  fi
7202 7203 7204 7205

  if test -n "$target_compiler_cflags"; then
      echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
  fi
7206 7207
fi

7208

7209
# generate QEMU_CFLAGS/LDFLAGS for targets
7210

7211
cflags=""
7212
ldflags=""
7213

7214 7215 7216 7217 7218
disas_config() {
  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
}

7219 7220 7221
for i in $ARCH $TARGET_BASE_ARCH ; do
  case "$i" in
  alpha)
7222
    disas_config "ALPHA"
7223
  ;;
7224 7225
  aarch64)
    if test -n "${cxx}"; then
7226
      disas_config "ARM_A64"
7227 7228
    fi
  ;;
7229
  arm)
7230
    disas_config "ARM"
7231
    if test -n "${cxx}"; then
7232
      disas_config "ARM_A64"
7233
    fi
7234 7235
  ;;
  cris)
7236
    disas_config "CRIS"
7237
  ;;
7238 7239 7240
  hppa)
    disas_config "HPPA"
  ;;
7241
  i386|x86_64|x32)
7242
    disas_config "I386"
7243
  ;;
7244
  lm32)
7245
    disas_config "LM32"
7246
  ;;
7247
  m68k)
7248
    disas_config "M68K"
7249
  ;;
7250
  microblaze*)
7251
    disas_config "MICROBLAZE"
7252 7253
  ;;
  mips*)
7254
    disas_config "MIPS"
7255
  ;;
A
Anthony Green 已提交
7256
  moxie*)
7257
    disas_config "MOXIE"
A
Anthony Green 已提交
7258
  ;;
M
Marek Vasut 已提交
7259 7260 7261
  nios2)
    disas_config "NIOS2"
  ;;
7262
  or1k)
7263
    disas_config "OPENRISC"
7264
  ;;
7265
  ppc*)
7266
    disas_config "PPC"
7267
  ;;
M
Michael Clark 已提交
7268 7269 7270
  riscv)
    disas_config "RISCV"
  ;;
7271
  s390*)
7272
    disas_config "S390"
7273 7274
  ;;
  sh4)
7275
    disas_config "SH4"
7276 7277
  ;;
  sparc*)
7278
    disas_config "SPARC"
7279
  ;;
7280
  xtensa*)
7281
    disas_config "XTENSA"
7282
  ;;
7283 7284
  esac
done
7285
if test "$tcg_interpreter" = "yes" ; then
7286
  disas_config "TCI"
7287
fi
7288

7289 7290 7291 7292 7293 7294 7295
case "$ARCH" in
alpha)
  # Ensure there's only a single GP
  cflags="-msmall-data $cflags"
;;
esac

7296
if test "$gprof" = "yes" ; then
7297
  echo "TARGET_GPROF=yes" >> $config_target_mak
7298 7299 7300 7301 7302 7303
  if test "$target_linux_user" = "yes" ; then
    cflags="-p $cflags"
    ldflags="-p $ldflags"
  fi
  if test "$target_softmmu" = "yes" ; then
    ldflags="-p $ldflags"
7304
    echo "GPROF_CFLAGS=-p" >> $config_target_mak
7305 7306 7307
  fi
fi

7308
if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
7309
  ldflags="$ldflags $textseg_ldflags"
7310 7311
fi

7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325
# 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

7326 7327
echo "LDFLAGS+=$ldflags" >> $config_target_mak
echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7328

7329
done # for target in $targets
B
bellard 已提交
7330

7331 7332 7333 7334 7335
if test -n "$enabled_cross_compilers"; then
    echo
    echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
fi

7336
if [ "$fdt" = "git" ]; then
7337 7338
  echo "config-host.h: subdir-dtc" >> $config_host_mak
fi
7339 7340 7341 7342 7343 7344
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
7345

7346 7347 7348 7349
if test "$numa" = "yes"; then
  echo "CONFIG_NUMA=y" >> $config_host_mak
fi

7350 7351 7352 7353
if test "$ccache_cpp2" = "yes"; then
  echo "export CCACHE_CPP2=y" >> $config_host_mak
fi

P
Paolo Bonzini 已提交
7354
# build tree in object directory in case the source is not in the current directory
F
Fam Zheng 已提交
7355
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 已提交
7356
DIRS="$DIRS docs docs/interop fsdev scsi"
7357
DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
P
Paolo Bonzini 已提交
7358
DIRS="$DIRS roms/seabios roms/vgabios"
A
Anthony Liguori 已提交
7359 7360
FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7361
FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
P
Paolo Bonzini 已提交
7362
FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
A
Andreas Färber 已提交
7363
FILES="$FILES pc-bios/spapr-rtas/Makefile"
7364
FILES="$FILES pc-bios/s390-ccw/Makefile"
P
Paolo Bonzini 已提交
7365
FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
7366
FILES="$FILES pc-bios/qemu-icon.bmp"
7367
FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
7368 7369
for bios_file in \
    $source_path/pc-bios/*.bin \
7370
    $source_path/pc-bios/*.lid \
7371
    $source_path/pc-bios/*.aml \
7372 7373
    $source_path/pc-bios/*.rom \
    $source_path/pc-bios/*.dtb \
7374
    $source_path/pc-bios/*.img \
7375
    $source_path/pc-bios/openbios-* \
7376
    $source_path/pc-bios/u-boot.* \
7377 7378
    $source_path/pc-bios/palcode-*
do
7379
    FILES="$FILES pc-bios/$(basename $bios_file)"
P
Paolo Bonzini 已提交
7380
done
7381
for test_file in $(find $source_path/tests/acpi-test-data -type f)
7382
do
7383
    FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
7384
done
P
Paolo Bonzini 已提交
7385 7386
mkdir -p $DIRS
for f in $FILES ; do
7387
    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7388 7389
        symlink "$source_path/$f" "$f"
    fi
P
Paolo Bonzini 已提交
7390
done
P
Paul Brook 已提交
7391

7392
# temporary config to build submodules
7393
for rom in seabios vgabios ; do
7394
    config_mak=roms/$rom/config.mak
7395
    echo "# Automatically generated by configure - do not modify" > $config_mak
7396
    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7397
    echo "AS=$as" >> $config_mak
7398
    echo "CCAS=$ccas" >> $config_mak
7399 7400
    echo "CC=$cc" >> $config_mak
    echo "BCC=bcc" >> $config_mak
7401
    echo "CPP=$cpp" >> $config_mak
7402
    echo "OBJCOPY=objcopy" >> $config_mak
7403
    echo "IASL=$iasl" >> $config_mak
7404
    echo "LD=$ld" >> $config_mak
7405
    echo "RANLIB=$ranlib" >> $config_mak
7406 7407
done

M
Marc-André Lureau 已提交
7408
# set up tests data directory
7409 7410 7411 7412 7413
for tests_subdir in acceptance data; do
    if [ ! -e tests/$tests_subdir ]; then
        symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir
    fi
done
M
Marc-André Lureau 已提交
7414

7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426
# 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

7427 7428 7429 7430 7431 7432 7433 7434 7435 7436
# 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
7437
echo ' "$@"' >>config.status
7438 7439
chmod +x config.status

7440
rm -r "$TMPDIR1"