configure 162.2 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 45 46 47 48 49 50 51 52 53
error_exit() {
    echo
    echo "ERROR: $1"
    while test -n "$2"; do
        echo "       $2"
        shift
    done
    echo
    exit 1
}

54 55 56 57 58 59 60
do_compiler() {
    # Run the compiler, capturing its output to the log. First argument
    # is compiler binary to execute.
    local compiler="$1"
    shift
    echo $compiler "$@" >> config.log
    $compiler "$@" >> config.log 2>&1 || return $?
61 62 63 64 65 66 67 68 69 70 71 72 73
    # 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
74 75
    echo $compiler -Werror "$@" >> config.log
    $compiler -Werror "$@" >> config.log 2>&1 && return $?
76 77 78 79
    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."
80 81
}

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

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

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

107
compile_object() {
108 109
  local_cflags="$1"
  do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
110 111 112 113 114
}

compile_prog() {
  local_cflags="$1"
  local_ldflags="$2"
115
  do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
116 117
}

118 119
# symbolically link $1 to $2.  Portable version of "ln -sf".
symlink() {
120
  rm -rf "$2"
121
  mkdir -p "$(dirname "$2")"
122
  ln -s "$1" "$2"
123 124
}

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

B
bellard 已提交
165
# default parameters
166
source_path=$(dirname "$0")
167
cpu=""
168
iasl="iasl"
169
interp_prefix="/usr/gnemul/qemu-%M"
B
bellard 已提交
170
static="no"
B
bellard 已提交
171
cross_prefix=""
M
malc 已提交
172
audio_drv_list=""
173 174
block_drv_rw_whitelist=""
block_drv_ro_whitelist=""
175
host_cc="cc"
J
Juan Quintela 已提交
176
libs_softmmu=""
J
Juan Quintela 已提交
177
libs_tools=""
178
audio_pt_int=""
179
audio_win_int=""
P
Paolo Bonzini 已提交
180
cc_i386=i386-pc-linux-gnu-gcc
181
libs_qga=""
182
debug_info="yes"
183
stack_protector=""
184

185 186
# Don't accept a target_list environment variable.
unset target_list
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205

# 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=""
206
netmap="no"
207
pixman=""
208
sdl=""
209
sdlabi=""
210
virtfs=""
J
Jes Sorensen 已提交
211
vnc="yes"
212 213 214 215 216 217
sparse="no"
vde=""
vnc_sasl=""
vnc_jpeg=""
vnc_png=""
xen=""
218
xen_ctrl_version=""
219
xen_pv_domain_build="no"
220
xen_pci_passthrough=""
221
linux_aio=""
222
cap_ng=""
223
attr=""
224
libattr=""
225 226
xfs=""

227
vhost_net="no"
228
vhost_scsi="no"
229
vhost_vsock="no"
230
kvm="no"
231
hax="no"
M
Michael R. Hines 已提交
232
rdma=""
233 234 235
gprof="no"
debug_tcg="no"
debug="no"
236
fortify_source=""
237
strip_opt="yes"
238
tcg_interpreter="no"
239 240
bigendian="no"
mingw32="no"
B
Blue Swirl 已提交
241 242
gcov="no"
gcov_tool="gcov"
243
EXESUF=""
F
Fam Zheng 已提交
244 245 246
DSOSUF=".so"
LDFLAGS_SHARED="-shared"
modules="no"
247 248
prefix="/usr/local"
mandir="\${prefix}/share/man"
249
datadir="\${prefix}/share"
250
qemu_docdir="\${prefix}/share/doc/qemu"
251
bindir="\${prefix}/bin"
A
Alon Levy 已提交
252
libdir="\${prefix}/lib"
253
libexecdir="\${prefix}/libexec"
254
includedir="\${prefix}/include"
255
sysconfdir="\${prefix}/etc"
L
Luiz Capitulino 已提交
256
local_statedir="\${prefix}/var"
257 258 259 260 261 262 263 264 265 266 267 268 269 270
confsuffix="/qemu"
slirp="yes"
oss_lib=""
bsd="no"
linux="no"
solaris="no"
profiler="no"
cocoa="no"
softmmu="yes"
linux_user="no"
bsd_user="no"
aix="no"
blobs="yes"
pkgversion=""
271
pie=""
272
qom_cast_debug="yes"
273
trace_backends="log"
274 275 276
trace_file="trace"
spice=""
rbd=""
277
smartcard=""
G
Gerd Hoffmann 已提交
278
libusb=""
279
usb_redir=""
G
Gerd Hoffmann 已提交
280
opengl=""
281
opengl_dmabuf="no"
282
avx2_opt="no"
A
Alon Levy 已提交
283
zlib="yes"
284 285
lzo=""
snappy=""
286
bzip2=""
287
guest_agent=""
288
guest_agent_with_vss="no"
289
guest_agent_ntddscsi="no"
290
guest_agent_msi=""
291 292
vss_win32_sdk=""
win_sdk="no"
293
want_tools="yes"
R
Ronnie Sahlberg 已提交
294
libiscsi=""
P
Peter Lieven 已提交
295
libnfs=""
296
coroutine=""
297
coroutine_pool=""
298
debug_stack_usage="no"
299
seccomp=""
300
glusterfs=""
301
glusterfs_xlator_opt="no"
302
glusterfs_discard="no"
303
glusterfs_zerofill="no"
A
Anthony Liguori 已提交
304
gtk=""
305
gtkabi=""
306
gtk_gl="no"
307
tls_priority="NORMAL"
308
gnutls=""
309
gnutls_rnd=""
310
nettle=""
311
nettle_kdf="no"
312
gcrypt=""
313
gcrypt_hmac="no"
314
gcrypt_kdf="no"
S
Stefan Weil 已提交
315
vte=""
316
virglrenderer=""
317
tpm="yes"
318
libssh2=""
319
numa=""
F
Fam Zheng 已提交
320
tcmalloc="no"
321
jemalloc="no"
C
Changlong Xie 已提交
322
replication="yes"
323

324 325 326
supported_cpu="no"
supported_os="no"

327 328
# parse CC options first
for opt do
329
  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
330 331 332
  case "$opt" in
  --cross-prefix=*) cross_prefix="$optarg"
  ;;
333
  --cc=*) CC="$optarg"
334
  ;;
335 336
  --cxx=*) CXX="$optarg"
  ;;
P
Paolo Bonzini 已提交
337 338
  --source-path=*) source_path="$optarg"
  ;;
339 340
  --cpu=*) cpu="$optarg"
  ;;
341
  --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
342
                    EXTRA_CFLAGS="$optarg"
343
  ;;
344
  --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
345
                     EXTRA_LDFLAGS="$optarg"
346
  ;;
347 348 349 350
  --enable-debug-info) debug_info="yes"
  ;;
  --disable-debug-info) debug_info="no"
  ;;
351 352 353 354
  esac
done
# OS specific
# Using uname is really, really broken.  Once we have the right set of checks
355
# we can eliminate its usage altogether.
356

357 358 359 360 361 362 363 364 365 366
# 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

367 368 369 370 371 372
if test -z "${CXX}${cross_prefix}"; then
  cxx="c++"
else
  cxx="${CXX-${cross_prefix}g++}"
fi

373
ar="${AR-${cross_prefix}ar}"
374
as="${AS-${cross_prefix}as}"
375
ccas="${CCAS-$cc}"
376
cpp="${CPP-$cc -E}"
377 378
objcopy="${OBJCOPY-${cross_prefix}objcopy}"
ld="${LD-${cross_prefix}ld}"
S
Stefan Weil 已提交
379
nm="${NM-${cross_prefix}nm}"
380 381
strip="${STRIP-${cross_prefix}strip}"
windres="${WINDRES-${cross_prefix}windres}"
382 383 384 385 386
pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
query_pkg_config() {
    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
}
pkg_config=query_pkg_config
387
sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
388
sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
389

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

393
# default flags for all hosts
394 395 396 397 398
# 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"
399
QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
K
Kevin Wolf 已提交
400
QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
401
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
402
QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
403 404 405 406
if test "$debug_info" = "yes"; then
    CFLAGS="-g $CFLAGS"
    LDFLAGS="-g $LDFLAGS"
fi
407

P
Paolo Bonzini 已提交
408
# make source path absolute
409
source_path=$(cd "$source_path"; pwd)
P
Paolo Bonzini 已提交
410

411 412 413 414 415 416 417 418
# 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

419 420 421
check_define() {
cat > $TMPC <<EOF
#if !defined($1)
422
#error $1 not defined
423 424 425
#endif
int main(void) { return 0; }
EOF
426
  compile_object
427 428
}

429 430 431 432 433 434 435 436
check_include() {
cat > $TMPC <<EOF
#include <$1>
int main(void) { return 0; }
EOF
  compile_object
}

437 438 439 440 441 442
write_c_skeleton() {
    cat > $TMPC <<EOF
int main(void) { return 0; }
EOF
}

443 444 445 446 447 448 449 450 451 452 453
if check_define __linux__ ; then
  targetos="Linux"
elif check_define _WIN32 ; then
  targetos='MINGW32'
elif check_define __OpenBSD__ ; then
  targetos='OpenBSD'
elif check_define __sun__ ; then
  targetos='SunOS'
elif check_define __HAIKU__ ; then
  targetos='Haiku'
else
454
  targetos=$(uname -s)
455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471
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)
472
  # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
473 474 475 476 477
  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
    cpu="x86_64"
  fi
esac

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

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

B
bellard 已提交
562
# OS specific
563

564 565 566
# host *BSD for user mode
HOST_VARIANT_DIR=""

B
bellard 已提交
567
case $targetos in
B
bellard 已提交
568
MINGW32*)
569
  mingw32="yes"
570
  hax="yes"
571
  audio_possible_drivers="dsound sdl"
572 573 574 575 576
  if check_include dsound.h; then
    audio_drv_list="dsound"
  else
    audio_drv_list=""
  fi
577
  supported_os="yes"
B
bellard 已提交
578
;;
T
ths 已提交
579
GNU/kFreeBSD)
A
Aurelien Jarno 已提交
580
  bsd="yes"
581
  audio_drv_list="oss"
K
Kővágó, Zoltán 已提交
582
  audio_possible_drivers="oss sdl pa"
T
ths 已提交
583
;;
B
bellard 已提交
584
FreeBSD)
585
  bsd="yes"
586
  make="${MAKE-gmake}"
587
  audio_drv_list="oss"
K
Kővágó, Zoltán 已提交
588
  audio_possible_drivers="oss sdl pa"
589 590
  # needed for kinfo_getvmmap(3) in libutil.h
  LIBS="-lutil $LIBS"
E
Ed Maste 已提交
591 592
  # needed for kinfo_getproc
  libs_qga="-lutil $libs_qga"
593
  netmap=""  # enable netmap autodetect
594
  HOST_VARIANT_DIR="freebsd"
595
  supported_os="yes"
B
bellard 已提交
596
;;
597
DragonFly)
598
  bsd="yes"
599
  make="${MAKE-gmake}"
600
  audio_drv_list="oss"
K
Kővágó, Zoltán 已提交
601
  audio_possible_drivers="oss sdl pa"
602
  HOST_VARIANT_DIR="dragonfly"
603
;;
B
bellard 已提交
604
NetBSD)
605
  bsd="yes"
606
  make="${MAKE-gmake}"
607
  audio_drv_list="oss"
K
Kővágó, Zoltán 已提交
608
  audio_possible_drivers="oss sdl"
609
  oss_lib="-lossaudio"
610
  HOST_VARIANT_DIR="netbsd"
B
bellard 已提交
611 612
;;
OpenBSD)
613
  bsd="yes"
614
  make="${MAKE-gmake}"
B
Brad Smith 已提交
615
  audio_drv_list="sdl"
K
Kővágó, Zoltán 已提交
616
  audio_possible_drivers="sdl"
617
  HOST_VARIANT_DIR="openbsd"
B
bellard 已提交
618
;;
619
Darwin)
620 621
  bsd="yes"
  darwin="yes"
622
  hax="yes"
F
Fam Zheng 已提交
623
  LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
624
  if [ "$cpu" = "x86_64" ] ; then
J
Juan Quintela 已提交
625
    QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
626
    LDFLAGS="-arch x86_64 $LDFLAGS"
627 628 629
  fi
  cocoa="yes"
  audio_drv_list="coreaudio"
K
Kővágó, Zoltán 已提交
630
  audio_possible_drivers="coreaudio sdl"
631
  LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
632
  libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
633 634 635
  # 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"
636
  HOST_VARIANT_DIR="darwin"
637
  supported_os="yes"
638
;;
B
bellard 已提交
639
SunOS)
640
  solaris="yes"
641 642
  make="${MAKE-gmake}"
  install="${INSTALL-ginstall}"
643
  ld="gld"
644
  smbd="${SMBD-/usr/sfw/sbin/smbd}"
645
  needs_libsunmath="no"
646
  solarisrev=$(uname -r | cut -f2 -d.)
647 648 649 650
  if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
    if test "$solarisrev" -le 9 ; then
      if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
        needs_libsunmath="yes"
651 652 653
        QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
        LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
        LIBS="-lsunmath $LIBS"
654
      else
655 656 657 658
        error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
            "libsunmath from the Sun Studio compilers tools, due to a lack of" \
            "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
            "Studio 11 can be downloaded from www.sun.com."
659
      fi
T
ths 已提交
660
    fi
661 662 663 664 665
  fi
  if test -f /usr/include/sys/soundcard.h ; then
    audio_drv_list="oss"
  fi
  audio_possible_drivers="oss sdl"
666 667 668 669
# 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 已提交
670
  QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
671 672 673
  solarisnetlibs="-lsocket -lnsl -lresolv"
  LIBS="$solarisnetlibs $LIBS"
  libs_qga="$solarisnetlibs $libs_qga"
T
ths 已提交
674
;;
M
malc 已提交
675
AIX)
676
  aix="yes"
677
  make="${MAKE-gmake}"
M
malc 已提交
678
;;
679 680 681 682 683
Haiku)
  haiku="yes"
  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
  LIBS="-lposix_error_mapper -lnetwork $LIBS"
;;
684
Linux)
685
  audio_drv_list="oss"
K
Kővágó, Zoltán 已提交
686
  audio_possible_drivers="oss alsa sdl pa"
687 688
  linux="yes"
  linux_user="yes"
689 690
  kvm="yes"
  vhost_net="yes"
691
  vhost_scsi="yes"
692
  vhost_vsock="yes"
693
  QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
694 695 696 697
  supported_os="yes"
;;
*)
  error_exit "Unsupported host OS $targetos"
B
bellard 已提交
698
;;
B
bellard 已提交
699 700
esac

B
bellard 已提交
701
if [ "$bsd" = "yes" ] ; then
702
  if [ "$darwin" != "yes" ] ; then
703
    bsd_user="yes"
704
  fi
B
bellard 已提交
705 706
fi

707 708
: ${make=${MAKE-make}}
: ${install=${INSTALL-install}}
709
: ${python=${PYTHON-python}}
710
: ${smbd=${SMBD-/usr/sbin/smbd}}
711

712 713 714 715 716 717 718
# Default objcc to clang if available, otherwise use CC
if has clang; then
  objcc=clang
else
  objcc="$cc"
fi

719 720
if test "$mingw32" = "yes" ; then
  EXESUF=".exe"
F
Fam Zheng 已提交
721
  DSOSUF=".dll"
J
Juan Quintela 已提交
722
  QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
723 724
  # 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 已提交
725 726
  # MinGW needs -mthreads for TLS and macro _MT.
  QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
727
  LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
728
  write_c_skeleton;
729 730 731
  if compile_prog "" "-liberty" ; then
    LIBS="-liberty $LIBS"
  fi
732
  prefix="c:/Program Files/QEMU"
733
  mandir="\${prefix}"
734
  datadir="\${prefix}"
735
  qemu_docdir="\${prefix}"
736 737
  bindir="\${prefix}"
  sysconfdir="\${prefix}"
738
  local_statedir=
739
  confsuffix=""
740
  libs_qga="-lws2_32 -lwinmm -lpowrprof -liphlpapi -lnetapi32 $libs_qga"
741 742
fi

743
werror=""
744

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

1189 1190 1191 1192 1193 1194
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.
M
Markus Armbruster 已提交
1195 1196
if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
  error_exit "Cannot use '$python', Python 2.6 or later is required." \
1197 1198 1199 1200
      "Note that Python 3 or later is not yet supported." \
      "Use --python=/path/to/python to specify a supported Python."
fi

M
Markus Armbruster 已提交
1201 1202
# Suppress writing compiled files
python="$python -B"
1203

1204
case "$cpu" in
1205 1206 1207 1208 1209 1210 1211 1212
    ppc)
           CPU_CFLAGS="-m32"
           LDFLAGS="-m32 $LDFLAGS"
           ;;
    ppc64)
           CPU_CFLAGS="-m64"
           LDFLAGS="-m64 $LDFLAGS"
           ;;
1213
    sparc)
1214
           LDFLAGS="-m32 $LDFLAGS"
1215
           CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1216
           ;;
1217 1218
    sparc64)
           LDFLAGS="-m64 $LDFLAGS"
1219
           CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1220
           ;;
1221
    s390)
1222
           CPU_CFLAGS="-m31"
1223 1224 1225
           LDFLAGS="-m31 $LDFLAGS"
           ;;
    s390x)
1226
           CPU_CFLAGS="-m64"
1227
           LDFLAGS="-m64 $LDFLAGS"
1228
           ;;
1229
    i386)
1230
           CPU_CFLAGS="-m32"
1231
           LDFLAGS="-m32 $LDFLAGS"
P
Paolo Bonzini 已提交
1232
           cc_i386='$(CC) -m32'
1233 1234
           ;;
    x86_64)
R
Richard Henderson 已提交
1235 1236 1237 1238
           # ??? 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"
1239
           LDFLAGS="-m64 $LDFLAGS"
P
Paolo Bonzini 已提交
1240
           cc_i386='$(CC) -m32'
1241
           ;;
1242 1243 1244 1245 1246
    x32)
           CPU_CFLAGS="-mx32"
           LDFLAGS="-mx32 $LDFLAGS"
           cc_i386='$(CC) -m32'
           ;;
1247
    # No special flags required for other host CPUs
1248 1249
esac

1250 1251 1252
QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"

1253 1254 1255 1256 1257 1258 1259
# 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

1260 1261
default_target_list=""

1262 1263 1264 1265
mak_wilds=""

if [ "$softmmu" = "yes" ]; then
    mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1266
fi
1267 1268
if [ "$linux_user" = "yes" ]; then
    mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1269
fi
1270 1271
if [ "$bsd_user" = "yes" ]; then
    mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1272 1273
fi

1274 1275 1276 1277
for config in $mak_wilds; do
    default_target_list="${default_target_list} $(basename "$config" .mak)"
done

1278 1279 1280 1281 1282 1283
if test x"$show_help" = x"yes" ; then
cat << EOF

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

1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315
Standard options:
  --help                   print this message
  --prefix=PREFIX          install in PREFIX [$prefix]
  --interp-prefix=PREFIX   where to find shared libraries, etc.
                           use %M for cpu name [$interp_prefix]
  --target-list=LIST       set target list (default: build everything)
$(echo Available targets: $default_target_list | \
  fold -s -w 53 | sed -e 's/^/                           /')

Advanced options (experts only):
  --source-path=PATH       path of source code [$source_path]
  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
  --cc=CC                  use C compiler CC [$cc]
  --iasl=IASL              use ACPI compiler IASL [$iasl]
  --host-cc=CC             use C compiler CC [$host_cc] for code run at
                           build time
  --cxx=CXX                use C++ compiler CXX [$cxx]
  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
  --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
  --make=MAKE              use specified make [$make]
  --install=INSTALL        use specified install [$install]
  --python=PYTHON          use specified python [$python]
  --smbd=SMBD              use specified smbd [$smbd]
  --static                 enable static build [$static]
  --mandir=PATH            install man pages in PATH
  --datadir=PATH           install firmware in PATH$confsuffix
  --docdir=PATH            install documentation in PATH$confsuffix
  --bindir=PATH            install binaries in PATH
  --libdir=PATH            install libraries in PATH
  --sysconfdir=PATH        install config in PATH$confsuffix
  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
F
Fam Zheng 已提交
1316
  --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1317 1318 1319
  --enable-debug           enable common debug build options
  --disable-strip          disable stripping binaries
  --disable-werror         disable compilation abort on warning
1320
  --disable-stack-protector disable compiler-provided stack protection
1321 1322 1323 1324 1325 1326 1327 1328 1329
  --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 已提交
1330
  --enable-trace-backends=B Set trace backend
1331 1332 1333
                           Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
  --with-trace-file=NAME   Full PATH,NAME of file to store traces
                           Default:trace-<pid>
1334 1335 1336 1337
  --disable-slirp          disable SLIRP userspace network connectivity
  --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
  --oss-lib                path to OSS library
  --cpu=CPU                Build for host CPU [$cpu]
1338 1339 1340 1341
  --with-coroutine=BACKEND coroutine backend. Supported options:
                           gthread, ucontext, sigaltstack, windows
  --enable-gcov            enable test coverage analysis with gcov
  --gcov=GCOV              use specified gcov [$gcov_tool]
1342 1343 1344
  --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)
1345
  --tls-priority           default TLS protocol/cipher priority string
1346 1347 1348 1349 1350 1351
  --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
1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368

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

1369
  gnutls          GNUTLS cryptography support
1370 1371
  nettle          nettle cryptography support
  gcrypt          libgcrypt cryptography support
1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390
  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
  xen             xen backend driver support
  xen-pci-passthrough
  brlapi          BrlAPI (Braile)
  curl            curl connectivity
  fdt             fdt device tree
  bluez           bluez stack connectivity
  kvm             KVM acceleration support
1391
  hax             HAX acceleration support
1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402
  rdma            RDMA-based migration support
  vde             support for vde network
  netmap          support for netmap network
  linux-aio       Linux AIO support
  cap-ng          libcap-ng support
  attr            attr and xattr support
  vhost-net       vhost-net acceleration support
  spice           spice
  rbd             rados block device (rbd)
  libiscsi        iscsi support
  libnfs          nfs support
1403
  smartcard       smartcard support (libcacard)
1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416
  libusb          libusb (for usb passthrough)
  usb-redir       usb network redirection support
  lzo             support of lzo compression library
  snappy          support of snappy compression library
  bzip2           support of bzip2 compression library
                  (for reading bzip2-compressed dmg images)
  seccomp         seccomp support
  coroutine-pool  coroutine freelist (better performance)
  glusterfs       GlusterFS backend
  tpm             TPM support
  libssh2         ssh block device support
  numa            libnuma support
  tcmalloc        tcmalloc support
1417
  jemalloc        jemalloc support
C
Changlong Xie 已提交
1418
  replication     replication support
1419 1420 1421 1422 1423 1424
  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
1425 1426

NOTE: The object files are built at the place where configure is launched
1427
EOF
F
Fam Zheng 已提交
1428
exit 0
1429 1430
fi

1431 1432 1433 1434 1435 1436
# 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
1437
        error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1438 1439 1440
    fi
fi

1441 1442 1443 1444
# 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 \
1445
        \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1446 1447 1448 1449 1450 1451
        werror="yes"
    else
        werror="no"
    fi
fi

1452
# check that the C compiler works.
1453
write_c_skeleton;
1454 1455 1456
if compile_object ; then
  : C compiler works ok
else
1457
    error_exit "\"$cc\" either does not exist or does not work"
1458
fi
1459 1460 1461
if ! compile_prog ; then
    error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
fi
1462

1463 1464 1465 1466 1467 1468 1469 1470 1471
# Check that the C++ compiler exists and works with the C compiler
if has $cxx; then
    cat > $TMPC <<EOF
int c_function(void);
int main(void) { return c_function(); }
EOF

    compile_object

1472
    cat > $TMPCXX <<EOF
1473 1474 1475 1476 1477 1478
extern "C" {
   int c_function(void);
}
int c_function(void) { return 42; }
EOF

1479 1480 1481
    update_cxxflags

    if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493
        # 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

1494 1495
gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1496
gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1497
gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1498
gcc_flags="-Wno-initializer-overrides $gcc_flags"
1499
gcc_flags="-Wno-string-plus-int $gcc_flags"
1500 1501 1502 1503
# 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.
1504 1505 1506 1507

cc_has_warning_flag() {
    write_c_skeleton;

1508 1509 1510
    # Use the positive sense of the flag when testing for -Wno-wombat
    # support (gcc will happily accept the -Wno- form of unknown
    # warning options).
1511 1512 1513 1514 1515 1516 1517
    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"
1518 1519 1520
    fi
done

1521
if test "$stack_protector" != "no"; then
1522 1523 1524 1525 1526 1527 1528 1529 1530 1531
  cat > $TMPC << EOF
int main(int argc, char *argv[])
{
    char arr[64], *p = arr, *c = argv[0];
    while (*c) {
        *p++ = *c++;
    }
    return 0;
}
EOF
1532
  gcc_flags="-fstack-protector-strong -fstack-protector-all"
1533
  sp_on=0
1534
  for flag in $gcc_flags; do
1535 1536 1537 1538
    # 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
1539
      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1540
      sp_on=1
1541 1542 1543
      break
    fi
  done
1544 1545 1546 1547 1548
  if test "$stack_protector" = yes; then
    if test $sp_on = 0; then
      error_exit "Stack protector not supported"
    fi
  fi
1549 1550
fi

1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565
# 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

1566
if test "$static" = "yes" ; then
1567 1568 1569
  if test "$modules" = "yes" ; then
    error_exit "static and modules are mutually incompatible"
  fi
1570
  if test "$pie" = "yes" ; then
1571
    error_exit "static and pie are mutually incompatible"
1572 1573 1574 1575 1576
  else
    pie="no"
  fi
fi

1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587
# 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

1588 1589
if test "$pie" = ""; then
  case "$cpu-$targetos" in
1590
    i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1591 1592 1593 1594 1595 1596 1597 1598 1599
      ;;
    *)
      pie="no"
      ;;
  esac
fi

if test "$pie" != "no" ; then
  cat > $TMPC << EOF
1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610

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

static THREAD int tls_var;

int main(void) { return tls_var; }

1611 1612 1613 1614 1615 1616 1617 1618 1619 1620
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
1621
      error_exit "PIE not available due to missing toolchain support"
1622 1623 1624 1625 1626
    else
      echo "Disabling PIE due to missing toolchain support"
      pie="no"
    fi
  fi
B
Brad 已提交
1627

1628
  if compile_prog "-Werror -fno-pie" "-nopie"; then
B
Brad 已提交
1629 1630 1631
    CFLAGS_NOPIE="-fno-pie"
    LDFLAGS_NOPIE="-nopie"
  fi
1632 1633
fi

P
Paolo Bonzini 已提交
1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648
##########################################
# __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;
1649
  val = __sync_val_compare_and_swap(&val, 0, 1);
P
Paolo Bonzini 已提交
1650 1651 1652 1653 1654 1655 1656 1657 1658 1659
  sfaa(&val);
  return val;
}
EOF
  if ! compile_prog "" "" ; then
    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
  fi
fi

#########################################
B
bellard 已提交
1660
# Solaris specific configure tool chain decisions
P
Paolo Bonzini 已提交
1661

B
bellard 已提交
1662
if test "$solaris" = "yes" ; then
1663 1664 1665
  if has $install; then
    :
  else
1666 1667 1668
    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 已提交
1669
  fi
1670
  if test "$(path_of $install)" = "/usr/sbin/install" ; then
1671 1672 1673
    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 已提交
1674
  fi
1675 1676 1677
  if has ar; then
    :
  else
B
bellard 已提交
1678
    if test -f /usr/ccs/bin/ar ; then
1679 1680
      error_exit "No path includes ar" \
          "Add /usr/ccs/bin to your path and rerun configure"
B
bellard 已提交
1681
    fi
1682
    error_exit "No path includes ar"
B
bellard 已提交
1683
  fi
1684
fi
B
bellard 已提交
1685

1686
if test -z "${target_list+xxx}" ; then
1687 1688
    target_list="$default_target_list"
else
1689
    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1690
fi
1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703

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

P
Paolo Bonzini 已提交
1704 1705 1706 1707 1708 1709 1710
# see if system emulation was really requested
case " $target_list " in
  *"-softmmu "*) softmmu=yes
  ;;
  *) softmmu=no
  ;;
esac
B
bellard 已提交
1711

1712 1713
feature_not_found() {
  feature=$1
1714
  remedy=$2
1715

1716
  error_exit "User requested feature $feature" \
1717 1718
      "configure was not able to find it." \
      "$remedy"
1719 1720
}

B
bellard 已提交
1721 1722 1723
# ---
# big/little endian test
cat > $TMPC << EOF
1724 1725 1726 1727 1728
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 已提交
1729 1730 1731
}
EOF

1732 1733 1734 1735 1736 1737 1738
if compile_object ; then
    if grep -q BiGeNdIaN $TMPO ; then
        bigendian="yes"
    elif grep -q LiTtLeEnDiAn $TMPO ; then
        bigendian="no"
    else
        echo big/little test failed
1739
    fi
1740 1741
else
    echo big/little test failed
B
bellard 已提交
1742 1743
fi

1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758
##########################################
# 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

1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771
# 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

1772 1773 1774 1775 1776
##########################################
# L2TPV3 probe

cat > $TMPC <<EOF
#include <sys/socket.h>
1777
#include <linux/ip.h>
1778 1779 1780 1781 1782 1783 1784 1785
int main(void) { return sizeof(struct mmsghdr); }
EOF
if compile_prog "" "" ; then
  l2tpv3=yes
else
  l2tpv3=no
fi

1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816
##########################################
# 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 已提交
1817 1818 1819 1820
##########################################
# pkg-config probe

if ! has "$pkg_config_exe"; then
1821
  error_exit "pkg-config binary '$pkg_config_exe' not found"
S
Stefan Weil 已提交
1822 1823
fi

1824 1825 1826
##########################################
# NPTL probe

1827
if test "$linux_user" = "yes"; then
1828
  cat > $TMPC <<EOF
1829
#include <sched.h>
P
pbrook 已提交
1830
#include <linux/futex.h>
1831
int main(void) {
1832 1833 1834
#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
#error bork
#endif
1835
  return 0;
1836 1837
}
EOF
1838
  if ! compile_object ; then
1839
    feature_not_found "nptl" "Install glibc and linux kernel headers."
1840
  fi
1841 1842
fi

1843
##########################################
1844 1845
# avx2 optimization requirement check

1846
cat > $TMPC << EOF
1847 1848 1849 1850 1851
#pragma GCC push_options
#pragma GCC target("avx2")
#include <cpuid.h>
#include <immintrin.h>
static int bar(void *a) {
1852 1853
    __m256i x = *(__m256i *)a;
    return _mm256_testz_si256(x, x);
1854
}
1855
int main(int argc, char *argv[]) { return bar(argv[0]); }
1856
EOF
1857 1858
if compile_object "" ; then
  avx2_opt="yes"
1859 1860 1861
fi

#########################################
1862 1863
# zlib check

A
Alon Levy 已提交
1864 1865
if test "$zlib" != "no" ; then
    cat > $TMPC << EOF
1866 1867 1868
#include <zlib.h>
int main(void) { zlibVersion(); return 0; }
EOF
A
Alon Levy 已提交
1869 1870 1871
    if compile_prog "" "-lz" ; then
        :
    else
1872 1873
        error_exit "zlib check failed" \
            "Make sure to have the zlib libs and headers installed."
A
Alon Levy 已提交
1874
    fi
1875
fi
1876
LIBS="$LIBS -lz"
1877

Q
qiaonuohan 已提交
1878 1879 1880 1881 1882 1883 1884 1885 1886
##########################################
# 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
1887 1888
        libs_softmmu="$libs_softmmu -llzo2"
        lzo="yes"
Q
qiaonuohan 已提交
1889
    else
1890 1891 1892 1893
        if test "$lzo" = "yes"; then
            feature_not_found "liblzo2" "Install liblzo2 devel"
        fi
        lzo="no"
Q
qiaonuohan 已提交
1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905
    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
1906 1907
        libs_softmmu="$libs_softmmu -lsnappy"
        snappy="yes"
Q
qiaonuohan 已提交
1908
    else
1909 1910 1911 1912
        if test "$snappy" = "yes"; then
            feature_not_found "libsnappy" "Install libsnappy devel"
        fi
        snappy="no"
Q
qiaonuohan 已提交
1913 1914 1915
    fi
fi

1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933
##########################################
# 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

1934 1935 1936 1937
##########################################
# libseccomp check

if test "$seccomp" != "no" ; then
1938 1939
    case "$cpu" in
    i386|x86_64)
1940
        libseccomp_minver="2.1.0"
1941
        ;;
1942 1943 1944
    mips)
        libseccomp_minver="2.2.0"
        ;;
1945 1946 1947
    arm|aarch64)
        libseccomp_minver="2.2.3"
        ;;
1948 1949 1950
    ppc|ppc64)
        libseccomp_minver="2.3.0"
        ;;
1951 1952 1953 1954 1955 1956 1957
    *)
        libseccomp_minver=""
        ;;
    esac

    if test "$libseccomp_minver" != "" &&
       $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
1958 1959
        libs_softmmu="$libs_softmmu $($pkg_config --libs libseccomp)"
        QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libseccomp)"
1960
        seccomp="yes"
1961
    else
1962 1963 1964 1965 1966 1967 1968 1969 1970 1971
        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"
1972 1973
    fi
fi
1974 1975 1976
##########################################
# xen probe

1977
if test "$xen" != "no" ; then
1978
  xen_libs="-lxenstore -lxenctrl -lxenguest"
1979
  xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
1980

1981 1982 1983 1984 1985
  # 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)
1986
  cat > $TMPC <<EOF
1987
#include <xenctrl.h>
1988 1989 1990 1991 1992 1993 1994
int main(void) {
  return 0;
}
EOF
  if ! compile_prog "" "$xen_libs" ; then
    # Xen not found
    if test "$xen" = "yes" ; then
1995
      feature_not_found "xen" "Install xen devel"
1996 1997 1998 1999
    fi
    xen=no

  # Xen unstable
2000 2001
  elif
      cat > $TMPC <<EOF &&
2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056
/*
 * 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
      compile_prog "" "$xen_libs $xen_stable_libs"
    then
    xen_ctrl_version=480
    xen=yes
  elif
      cat > $TMPC <<EOF &&
2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107
/*
 * 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
      compile_prog "" "$xen_libs $xen_stable_libs"
    then
    xen_ctrl_version=471
    xen=yes
  elif
      cat > $TMPC <<EOF &&
2108
#include <xenctrl.h>
2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125
#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
      compile_prog "" "$xen_libs"
    then
    xen_ctrl_version=470
    xen=yes

  # Xen 4.6
  elif
      cat > $TMPC <<EOF &&
#include <xenctrl.h>
A
Anthony PERARD 已提交
2126
#include <xenstore.h>
2127 2128 2129 2130 2131
#include <stdint.h>
#include <xen/hvm/hvm_info_table.h>
#if !defined(HVM_MAX_VCPUS)
# error HVM_MAX_VCPUS not defined
#endif
2132 2133 2134 2135 2136 2137 2138 2139 2140
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);
2141
  xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159
  return 0;
}
EOF
      compile_prog "" "$xen_libs"
    then
    xen_ctrl_version=460
    xen=yes

  # Xen 4.5
  elif
      cat > $TMPC <<EOF &&
#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
2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185
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
      compile_prog "" "$xen_libs"
    then
    xen_ctrl_version=450
    xen=yes

  elif
      cat > $TMPC <<EOF &&
#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
2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197
int main(void) {
  xc_interface *xc;
  xs_daemon_open();
  xc = xc_interface_open(0, 0, 0);
  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
  xc_gnttab_open(NULL, 0);
  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
  return 0;
}
EOF
      compile_prog "" "$xen_libs"
2198
    then
2199 2200 2201
    xen_ctrl_version=420
    xen=yes

2202
  else
2203
    if test "$xen" = "yes" ; then
2204 2205
      feature_not_found "xen (unsupported version)" \
                        "Install a supported xen (xen 4.2 or newer)"
2206 2207
    fi
    xen=no
2208
  fi
2209 2210

  if test "$xen" = yes; then
2211 2212 2213
    if test $xen_ctrl_version -ge 471  ; then
      libs_softmmu="$xen_stable_libs $libs_softmmu"
    fi
2214 2215
    libs_softmmu="$xen_libs $libs_softmmu"
  fi
2216 2217
fi

2218
if test "$xen_pci_passthrough" != "no"; then
2219
  if test "$xen" = "yes" && test "$linux" = "yes"; then
2220 2221 2222
    xen_pci_passthrough=yes
  else
    if test "$xen_pci_passthrough" = "yes"; then
2223 2224
      error_exit "User requested feature Xen PCI Passthrough" \
          " but this feature requires /sys from Linux"
2225 2226 2227 2228 2229
    fi
    xen_pci_passthrough=no
  fi
fi

2230 2231 2232 2233 2234 2235
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

2236 2237 2238
##########################################
# Sparse probe
if test "$sparse" != "no" ; then
2239
  if has cgcc; then
2240 2241 2242
    sparse=yes
  else
    if test "$sparse" = "yes" ; then
2243
      feature_not_found "sparse" "Install sparse binary"
2244 2245 2246 2247 2248
    fi
    sparse=no
  fi
fi

2249 2250 2251 2252 2253
##########################################
# X11 probe
x11_cflags=
x11_libs=-lX11
if $pkg_config --exists "x11"; then
2254 2255
    x11_cflags=$($pkg_config --cflags x11)
    x11_libs=$($pkg_config --libs x11)
2256 2257
fi

A
Anthony Liguori 已提交
2258 2259 2260
##########################################
# GTK probe

2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272
if test "$gtkabi" = ""; then
    # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
    # Use 3.0 as a fallback if that is available.
    if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
        gtkabi=2.0
    elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
        gtkabi=3.0
    else
        gtkabi=2.0
    fi
fi

A
Anthony Liguori 已提交
2273
if test "$gtk" != "no"; then
2274
    gtkpackage="gtk+-$gtkabi"
2275
    gtkx11package="gtk+-x11-$gtkabi"
2276 2277
    if test "$gtkabi" = "3.0" ; then
      gtkversion="3.0.0"
S
Stefan Weil 已提交
2278 2279 2280 2281
    else
      gtkversion="2.18.0"
    fi
    if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2282 2283 2284
        gtk_cflags=$($pkg_config --cflags $gtkpackage)
        gtk_libs=$($pkg_config --libs $gtkpackage)
        gtk_version=$($pkg_config --modversion $gtkpackage)
2285
        if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2286 2287
            gtk_cflags="$gtk_cflags $x11_cflags"
            gtk_libs="$gtk_libs $x11_libs"
2288
        fi
S
Stefan Weil 已提交
2289 2290 2291
        libs_softmmu="$gtk_libs $libs_softmmu"
        gtk="yes"
    elif test "$gtk" = "yes"; then
2292
        feature_not_found "gtk" "Install gtk2 or gtk3 devel"
S
Stefan Weil 已提交
2293 2294 2295 2296 2297
    else
        gtk="no"
    fi
fi

2298 2299 2300 2301

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

2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317
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)"
}

2318
gnutls_gcrypt=no
2319
gnutls_nettle=no
2320
if test "$gnutls" != "no"; then
2321
    if gnutls_works; then
2322 2323
        gnutls_cflags=$($pkg_config --cflags gnutls)
        gnutls_libs=$($pkg_config --libs gnutls)
2324 2325 2326 2327 2328
        libs_softmmu="$gnutls_libs $libs_softmmu"
        libs_tools="$gnutls_libs $libs_tools"
	QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
        gnutls="yes"

2329 2330 2331 2332 2333 2334 2335
	# gnutls_rnd requires >= 2.11.0
	if $pkg_config --exists "gnutls >= 2.11.0"; then
	    gnutls_rnd="yes"
	else
	    gnutls_rnd="no"
	fi

2336 2337
	if $pkg_config --exists 'gnutls >= 3.0'; then
	    gnutls_gcrypt=no
2338
	    gnutls_nettle=yes
2339
	elif $pkg_config --exists 'gnutls >= 2.12'; then
2340
	    case $($pkg_config --libs --static gnutls) in
2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352
		*gcrypt*)
		    gnutls_gcrypt=yes
		    gnutls_nettle=no
		    ;;
		*nettle*)
		    gnutls_gcrypt=no
		    gnutls_nettle=yes
		    ;;
		*)
		    gnutls_gcrypt=yes
		    gnutls_nettle=no
		    ;;
2353 2354 2355
	    esac
	else
	    gnutls_gcrypt=yes
2356
	    gnutls_nettle=no
2357
	fi
2358 2359 2360 2361
    elif test "$gnutls" = "yes"; then
	feature_not_found "gnutls" "Install gnutls devel"
    else
        gnutls="no"
2362
        gnutls_rnd="no"
2363 2364
    fi
else
2365
    gnutls_rnd="no"
2366 2367
fi

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

# 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
2399
	host=$(libgcrypt-config --host)
2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410
	if test "$host-" != $cross_prefix
	then
	    return 1
	fi
    fi

    return 0
}

if test "$gcrypt" != "no"; then
    if has_libgcrypt_config; then
2411 2412
        gcrypt_cflags=$(libgcrypt-config --cflags)
        gcrypt_libs=$(libgcrypt-config --libs)
2413 2414 2415 2416 2417 2418 2419
        # 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
2420 2421 2422
        libs_softmmu="$gcrypt_libs $libs_softmmu"
        libs_tools="$gcrypt_libs $libs_tools"
        QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2423 2424 2425 2426
        gcrypt="yes"
        if test -z "$nettle"; then
           nettle="no"
        fi
2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439

        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
2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452

        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
2453
    else
2454 2455 2456 2457 2458
        if test "$gcrypt" = "yes"; then
            feature_not_found "gcrypt" "Install gcrypt devel"
        else
            gcrypt="no"
        fi
2459 2460 2461
    fi
fi

2462

2463
if test "$nettle" != "no"; then
2464
    if $pkg_config --exists "nettle"; then
2465 2466 2467
        nettle_cflags=$($pkg_config --cflags nettle)
        nettle_libs=$($pkg_config --libs nettle)
        nettle_version=$($pkg_config --modversion nettle)
2468 2469 2470
        libs_softmmu="$nettle_libs $libs_softmmu"
        libs_tools="$nettle_libs $libs_tools"
        QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2471
        nettle="yes"
2472 2473

        cat > $TMPC << EOF
2474
#include <stddef.h>
2475 2476 2477 2478 2479 2480 2481 2482 2483
#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
2484
    else
2485 2486 2487 2488 2489
        if test "$nettle" = "yes"; then
            feature_not_found "nettle" "Install nettle devel"
        else
            nettle="no"
        fi
2490 2491 2492
    fi
fi

2493 2494 2495 2496 2497
if test "$gcrypt" = "yes" && test "$nettle" = "yes"
then
    error_exit "Only one of gcrypt & nettle can be enabled"
fi

2498 2499 2500 2501
##########################################
# libtasn1 - only for the TLS creds/session test suite

tasn1=yes
2502 2503
tasn1_cflags=""
tasn1_libs=""
2504
if $pkg_config --exists "libtasn1"; then
2505 2506
    tasn1_cflags=$($pkg_config --cflags libtasn1)
    tasn1_libs=$($pkg_config --libs libtasn1)
2507 2508 2509 2510
else
    tasn1=no
fi

2511

2512 2513 2514 2515 2516 2517 2518 2519
##########################################
# 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 已提交
2520 2521 2522 2523 2524
##########################################
# VTE probe

if test "$vte" != "no"; then
    if test "$gtkabi" = "3.0"; then
C
Cole Robinson 已提交
2525 2526 2527 2528 2529 2530
      vteminversion="0.32.0"
      if $pkg_config --exists "vte-2.91"; then
        vtepackage="vte-2.91"
      else
        vtepackage="vte-2.90"
      fi
2531 2532
    else
      vtepackage="vte"
C
Cole Robinson 已提交
2533
      vteminversion="0.24.0"
2534
    fi
C
Cole Robinson 已提交
2535
    if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2536 2537 2538
        vte_cflags=$($pkg_config --cflags $vtepackage)
        vte_libs=$($pkg_config --libs $vtepackage)
        vteversion=$($pkg_config --modversion $vtepackage)
S
Stefan Weil 已提交
2539 2540 2541
        libs_softmmu="$vte_libs $libs_softmmu"
        vte="yes"
    elif test "$vte" = "yes"; then
2542
        if test "$gtkabi" = "3.0"; then
C
Cole Robinson 已提交
2543
            feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2544 2545 2546
        else
            feature_not_found "vte" "Install libvte devel"
        fi
2547
    else
S
Stefan Weil 已提交
2548
        vte="no"
A
Anthony Liguori 已提交
2549 2550 2551
    fi
fi

B
bellard 已提交
2552 2553 2554
##########################################
# SDL probe

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

2558 2559 2560 2561 2562 2563 2564 2565 2566 2567
if test "$sdlabi" = ""; then
    if $pkg_config --exists "sdl"; then
        sdlabi=1.2
    elif $pkg_config --exists "sdl2"; then
        sdlabi=2.0
    else
        sdlabi=1.2
    fi
fi

2568 2569 2570 2571
if test $sdlabi = "2.0"; then
    sdl_config=$sdl2_config
    sdlname=sdl2
    sdlconfigname=sdl2_config
2572
elif test $sdlabi = "1.2"; then
2573 2574
    sdlname=sdl
    sdlconfigname=sdl_config
2575 2576
else
    error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2577 2578
fi

2579
if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2580
  sdl_config=$sdlconfigname
P
Paolo Bonzini 已提交
2581 2582
fi

2583 2584
if $pkg_config $sdlname --exists; then
  sdlconfig="$pkg_config $sdlname"
2585
  sdlversion=$($sdlconfig --modversion 2>/dev/null)
P
Paolo Bonzini 已提交
2586 2587
elif has ${sdl_config}; then
  sdlconfig="$sdl_config"
2588
  sdlversion=$($sdlconfig --version)
2589 2590
else
  if test "$sdl" = "yes" ; then
2591
    feature_not_found "sdl" "Install SDL devel"
2592 2593
  fi
  sdl=no
2594
fi
2595
if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
P
Paolo Bonzini 已提交
2596 2597
  echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
fi
B
bellard 已提交
2598

2599
sdl_too_old=no
2600
if test "$sdl" != "no" ; then
J
Juan Quintela 已提交
2601
  cat > $TMPC << EOF
B
bellard 已提交
2602 2603 2604 2605
#include <SDL.h>
#undef main /* We don't want SDL to override our main() */
int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
EOF
2606
  sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2607
  if test "$static" = "yes" ; then
2608
    sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2609
  else
2610
    sdl_libs=$($sdlconfig --libs 2>/dev/null)
2611
  fi
2612
  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2613
    if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
J
Juan Quintela 已提交
2614 2615
      sdl_too_old=yes
    else
2616
      sdl=yes
J
Juan Quintela 已提交
2617
    fi
A
aliguori 已提交
2618

2619
    # static link with sdl ? (note: sdl.pc's --static --libs is broken)
J
Juan Quintela 已提交
2620
    if test "$sdl" = "yes" -a "$static" = "yes" ; then
2621
      if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2622 2623
         sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
         sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
J
Juan Quintela 已提交
2624
      fi
2625
      if compile_prog "$sdl_cflags" "$sdl_libs" ; then
J
Juan Quintela 已提交
2626 2627 2628 2629 2630
	:
      else
        sdl=no
      fi
    fi # static link
2631 2632
  else # sdl not found
    if test "$sdl" = "yes" ; then
2633
      feature_not_found "sdl" "Install SDL devel"
2634 2635
    fi
    sdl=no
J
Juan Quintela 已提交
2636
  fi # sdl compile test
2637
fi
B
bellard 已提交
2638

2639
if test "$sdl" = "yes" ; then
J
Juan Quintela 已提交
2640
  cat > $TMPC <<EOF
2641 2642 2643 2644 2645 2646 2647 2648
#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
2649 2650 2651
  if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
    sdl_cflags="$sdl_cflags $x11_cflags"
    sdl_libs="$sdl_libs $x11_libs"
J
Juan Quintela 已提交
2652
  fi
J
Juan Quintela 已提交
2653
  libs_softmmu="$sdl_libs $libs_softmmu"
2654 2655
fi

M
Michael R. Hines 已提交
2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679
##########################################
# RDMA needs OpenFabrics libraries
if test "$rdma" != "no" ; then
  cat > $TMPC <<EOF
#include <rdma/rdma_cma.h>
int main(void) { return 0; }
EOF
  rdma_libs="-lrdmacm -libverbs"
  if compile_prog "" "$rdma_libs" ; then
    rdma="yes"
    libs_softmmu="$libs_softmmu $rdma_libs"
  else
    if test "$rdma" = "yes" ; then
        error_exit \
            " OpenFabrics librdmacm/libibverbs not present." \
            " Your options:" \
            "  (1) Fast: Install infiniband packages from your distro." \
            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
    fi
    rdma="no"
  fi
fi

B
Benoît Canet 已提交
2680

2681 2682
##########################################
# VNC SASL detection
J
Jes Sorensen 已提交
2683
if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2684
  cat > $TMPC <<EOF
2685 2686 2687 2688
#include <sasl/sasl.h>
#include <stdio.h>
int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
EOF
2689 2690 2691 2692 2693 2694
  # 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 已提交
2695
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2696 2697
  else
    if test "$vnc_sasl" = "yes" ; then
2698
      feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2699
    fi
2700 2701
    vnc_sasl=no
  fi
2702 2703
fi

2704 2705
##########################################
# VNC JPEG detection
J
Jes Sorensen 已提交
2706
if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2707 2708 2709 2710 2711 2712 2713 2714 2715 2716
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 已提交
2717
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2718 2719
  else
    if test "$vnc_jpeg" = "yes" ; then
2720
      feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2721 2722 2723 2724 2725
    fi
    vnc_jpeg=no
  fi
fi

C
Corentin Chary 已提交
2726 2727
##########################################
# VNC PNG detection
J
Jes Sorensen 已提交
2728
if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
C
Corentin Chary 已提交
2729 2730 2731
cat > $TMPC <<EOF
//#include <stdio.h>
#include <png.h>
S
Scott Wood 已提交
2732
#include <stddef.h>
C
Corentin Chary 已提交
2733 2734 2735
int main(void) {
    png_structp png_ptr;
    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2736
    return png_ptr != 0;
C
Corentin Chary 已提交
2737 2738
}
EOF
2739
  if $pkg_config libpng --exists; then
2740 2741
    vnc_png_cflags=$($pkg_config libpng --cflags)
    vnc_png_libs=$($pkg_config libpng --libs)
2742
  else
C
Corentin Chary 已提交
2743 2744
    vnc_png_cflags=""
    vnc_png_libs="-lpng"
2745
  fi
C
Corentin Chary 已提交
2746 2747 2748
  if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
    vnc_png=yes
    libs_softmmu="$vnc_png_libs $libs_softmmu"
2749
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
C
Corentin Chary 已提交
2750 2751
  else
    if test "$vnc_png" = "yes" ; then
2752
      feature_not_found "vnc-png" "Install libpng devel"
C
Corentin Chary 已提交
2753 2754 2755 2756 2757
    fi
    vnc_png=no
  fi
fi

2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768
##########################################
# fnmatch() probe, used for ACL routines
fnmatch="no"
cat > $TMPC << EOF
#include <fnmatch.h>
int main(void)
{
    fnmatch("foo", "foo", 0);
    return 0;
}
EOF
2769
if compile_prog "" "" ; then
2770 2771 2772
   fnmatch="yes"
fi

2773
##########################################
2774
# xfsctl() probe, used for file-posix.c
C
Christoph Hellwig 已提交
2775 2776
if test "$xfs" != "no" ; then
  cat > $TMPC << EOF
2777
#include <stddef.h>  /* NULL */
C
Christoph Hellwig 已提交
2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788
#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
2789
      feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
C
Christoph Hellwig 已提交
2790 2791 2792 2793 2794
    fi
    xfs=no
  fi
fi

2795 2796
##########################################
# vde libraries probe
2797
if test "$vde" != "no" ; then
J
Juan Quintela 已提交
2798
  vde_libs="-lvdeplug"
2799 2800
  cat > $TMPC << EOF
#include <libvdeplug.h>
P
pbrook 已提交
2801 2802 2803
int main(void)
{
    struct vde_open_args a = {0, 0, 0};
2804 2805
    char s[] = "";
    vde_open(s, s, &a);
P
pbrook 已提交
2806 2807
    return 0;
}
2808
EOF
2809
  if compile_prog "" "$vde_libs" ; then
J
Juan Quintela 已提交
2810
    vde=yes
2811 2812
    libs_softmmu="$vde_libs $libs_softmmu"
    libs_tools="$vde_libs $libs_tools"
2813 2814
  else
    if test "$vde" = "yes" ; then
2815
      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2816 2817
    fi
    vde=no
J
Juan Quintela 已提交
2818
  fi
2819 2820
fi

2821
##########################################
2822 2823 2824 2825 2826 2827
# 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.
2828 2829 2830 2831 2832 2833
if test "$netmap" != "no" ; then
  cat > $TMPC << EOF
#include <inttypes.h>
#include <net/if.h>
#include <net/netmap.h>
#include <net/netmap_user.h>
2834 2835 2836
#if (NETMAP_API < 11) || (NETMAP_API > 15)
#error
#endif
2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848
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

2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865
##########################################
# 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
2866
      feature_not_found "cap_ng" "Install libcap-ng devel"
2867 2868 2869 2870 2871
    fi
    cap_ng=no
  fi
fi

2872
##########################################
2873
# Sound support libraries probe
2874

2875 2876 2877 2878 2879 2880 2881 2882 2883 2884
audio_drv_probe()
{
    drv=$1
    hdr=$2
    lib=$3
    exp=$4
    cfl=$5
        cat > $TMPC << EOF
#include <$hdr>
int main(void) { $exp }
2885
EOF
2886
    if compile_prog "$cfl" "$lib" ; then
2887 2888
        :
    else
2889 2890
        error_exit "$drv check failed" \
            "Make sure to have the $drv libs and headers installed."
2891 2892 2893
    fi
}

2894
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
2895 2896 2897 2898
for drv in $audio_drv_list; do
    case $drv in
    alsa)
    audio_drv_probe $drv alsa/asoundlib.h -lasound \
2899
        "return snd_pcm_close((snd_pcm_t *)0);"
2900
    libs_softmmu="-lasound $libs_softmmu"
2901 2902
    ;;

M
malc 已提交
2903
    pa)
2904 2905
    audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
        "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
2906
    libs_softmmu="-lpulse $libs_softmmu"
2907
    audio_pt_int="yes"
M
malc 已提交
2908 2909
    ;;

G
Gerd Hoffmann 已提交
2910 2911 2912 2913 2914 2915
    sdl)
    if test "$sdl" = "no"; then
        error_exit "sdl not found or disabled, can not use sdl audio driver"
    fi
    ;;

2916 2917 2918 2919
    coreaudio)
      libs_softmmu="-framework CoreAudio $libs_softmmu"
    ;;

2920 2921
    dsound)
      libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2922
      audio_win_int="yes"
2923 2924 2925 2926 2927 2928
    ;;

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

G
Gerd Hoffmann 已提交
2929 2930
    wav)
    # XXX: Probes for CoreAudio, DirectSound
B
blueswir1 已提交
2931 2932
    ;;

M
malc 已提交
2933
    *)
M
malc 已提交
2934
    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2935 2936
        error_exit "Unknown driver '$drv' selected" \
            "Possible drivers are: $audio_possible_drivers"
M
malc 已提交
2937 2938
    }
    ;;
2939 2940
    esac
done
2941

A
aurel32 已提交
2942 2943 2944
##########################################
# BrlAPI probe

2945
if test "$brlapi" != "no" ; then
J
Juan Quintela 已提交
2946 2947
  brlapi_libs="-lbrlapi"
  cat > $TMPC << EOF
A
aurel32 已提交
2948
#include <brlapi.h>
S
Scott Wood 已提交
2949
#include <stddef.h>
A
aurel32 已提交
2950 2951
int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
EOF
2952
  if compile_prog "" "$brlapi_libs" ; then
J
Juan Quintela 已提交
2953
    brlapi=yes
2954
    libs_softmmu="$brlapi_libs $libs_softmmu"
2955 2956
  else
    if test "$brlapi" = "yes" ; then
2957
      feature_not_found "brlapi" "Install brlapi devel"
2958 2959
    fi
    brlapi=no
J
Juan Quintela 已提交
2960 2961
  fi
fi
A
aurel32 已提交
2962

B
balrog 已提交
2963 2964
##########################################
# curses probe
2965 2966
if test "$curses" != "no" ; then
  if test "$mingw32" = "yes" ; then
2967 2968
    curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
    curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
2969
  else
S
Samuel Thibault 已提交
2970
    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
2971
    curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
2972
  fi
2973
  curses_found=no
B
balrog 已提交
2974
  cat > $TMPC << EOF
2975
#include <locale.h>
B
balrog 已提交
2976
#include <curses.h>
2977
#include <wchar.h>
2978 2979
int main(void) {
  const char *s = curses_version();
2980 2981
  wchar_t wch = L'w';
  setlocale(LC_ALL, "");
2982
  resize_term(0, 0);
2983 2984
  addwstr(L"wide chars\n");
  addnwstr(&wch, 1);
S
Samuel Thibault 已提交
2985
  add_wch(WACS_DEGREE);
2986 2987
  return s != 0;
}
B
balrog 已提交
2988
EOF
2989
  IFS=:
2990
  for curses_inc in $curses_inc_list; do
S
Samuel Thibault 已提交
2991
    IFS=:
2992 2993 2994 2995 2996 2997 2998 2999 3000
    for curses_lib in $curses_lib_list; do
      unset IFS
      if compile_prog "$curses_inc" "$curses_lib" ; then
        curses_found=yes
        QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
        libs_softmmu="$curses_lib $libs_softmmu"
        break
      fi
    done
S
Samuel Thibault 已提交
3001 3002 3003
    if test "$curses_found" = yes ; then
      break
    fi
3004
  done
3005
  unset IFS
3006 3007 3008 3009
  if test "$curses_found" = "yes" ; then
    curses=yes
  else
    if test "$curses" = "yes" ; then
3010
      feature_not_found "curses" "Install ncurses devel"
3011 3012 3013
    fi
    curses=no
  fi
3014
fi
B
balrog 已提交
3015

A
Alexander Graf 已提交
3016 3017
##########################################
# curl probe
3018
if test "$curl" != "no" ; then
3019
  if $pkg_config libcurl --exists; then
3020 3021 3022 3023
    curlconfig="$pkg_config libcurl"
  else
    curlconfig=curl-config
  fi
A
Alexander Graf 已提交
3024 3025
  cat > $TMPC << EOF
#include <curl/curl.h>
3026
int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
A
Alexander Graf 已提交
3027
EOF
3028 3029
  curl_cflags=$($curlconfig --cflags 2>/dev/null)
  curl_libs=$($curlconfig --libs 2>/dev/null)
J
Juan Quintela 已提交
3030
  if compile_prog "$curl_cflags" "$curl_libs" ; then
A
Alexander Graf 已提交
3031
    curl=yes
3032 3033
  else
    if test "$curl" = "yes" ; then
3034
      feature_not_found "curl" "Install libcurl devel"
3035 3036
    fi
    curl=no
A
Alexander Graf 已提交
3037 3038 3039
  fi
fi # test "$curl"

B
balrog 已提交
3040 3041
##########################################
# bluez support probe
3042
if test "$bluez" != "no" ; then
3043 3044 3045 3046
  cat > $TMPC << EOF
#include <bluetooth/bluetooth.h>
int main(void) { return bt_error(0); }
EOF
3047 3048
  bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
  bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3049
  if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3050
    bluez=yes
3051
    libs_softmmu="$bluez_libs $libs_softmmu"
3052
  else
3053
    if test "$bluez" = "yes" ; then
3054
      feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3055
    fi
3056 3057
    bluez="no"
  fi
B
balrog 已提交
3058 3059
fi

3060 3061
##########################################
# glib support probe
3062

J
John Snow 已提交
3063
glib_req_ver=2.22
3064 3065 3066 3067
glib_modules=gthread-2.0
if test "$modules" = yes; then
    glib_modules="$glib_modules gmodule-2.0"
fi
F
Fam Zheng 已提交
3068

3069
for i in $glib_modules; do
F
Fam Zheng 已提交
3070
    if $pkg_config --atleast-version=$glib_req_ver $i; then
3071 3072
        glib_cflags=$($pkg_config --cflags $i)
        glib_libs=$($pkg_config --libs $i)
3073
        QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
F
Fam Zheng 已提交
3074 3075 3076 3077 3078 3079 3080
        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

3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097
# 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

3098
if ! compile_prog "$CFLAGS" "$LIBS" ; then
3099 3100 3101 3102 3103 3104
    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

3105 3106
# g_test_trap_subprocess added in 2.38. Used by some tests.
glib_subprocess=yes
3107
if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3108 3109 3110
    glib_subprocess=no
fi

3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122
# 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 已提交
3123 3124 3125 3126 3127
##########################################
# SHA command probe for modules
if test "$modules" = yes; then
    shacmd_probe="sha1sum sha1 shasum"
    for c in $shacmd_probe; do
F
Fam Zheng 已提交
3128
        if has $c; then
F
Fam Zheng 已提交
3129 3130 3131 3132 3133 3134 3135
            shacmd="$c"
            break
        fi
    done
    if test "$shacmd" = ""; then
        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
    fi
3136 3137
fi

3138 3139 3140 3141
##########################################
# pixman support probe

if test "$pixman" = ""; then
3142 3143
  if test "$want_tools" = "no" -a "$softmmu" = "no"; then
    pixman="none"
H
Hu Tao 已提交
3144
  elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3145 3146 3147 3148 3149
    pixman="system"
  else
    pixman="internal"
  fi
fi
3150 3151
if test "$pixman" = "none"; then
  if test "$want_tools" != "no" -o "$softmmu" != "no"; then
3152 3153 3154 3155
    error_exit "pixman disabled but system emulation or tools build" \
        "enabled.  You can turn off pixman only if you also" \
        "disable all system emulation targets and the tools" \
        "build with '--disable-tools --disable-system'."
3156 3157 3158 3159
  fi
  pixman_cflags=
  pixman_libs=
elif test "$pixman" = "system"; then
H
Hu Tao 已提交
3160
  # pixman version has been checked above
3161 3162
  pixman_cflags=$($pkg_config --cflags pixman-1)
  pixman_libs=$($pkg_config --libs pixman-1)
3163 3164
else
  if test ! -d ${source_path}/pixman/pixman; then
H
Hu Tao 已提交
3165
    error_exit "pixman >= 0.21.8 not present. Your options:" \
3166 3167 3168 3169
        "  (1) Preferred: Install the pixman devel package (any recent" \
        "      distro should have packages as Xorg needs pixman too)." \
        "  (2) Fetch the pixman submodule, using:" \
        "      git submodule update --init pixman"
3170
  fi
3171 3172 3173
  mkdir -p pixman/pixman
  pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
  pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
3174 3175
fi

3176 3177 3178 3179 3180 3181 3182
##########################################
# libcap probe

if test "$cap" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
#include <sys/capability.h>
3183
int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3184 3185 3186 3187 3188 3189 3190 3191
EOF
  if compile_prog "" "-lcap" ; then
    cap=yes
  else
    cap=no
  fi
fi

3192
##########################################
3193
# pthread probe
3194
PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3195

C
Christoph Hellwig 已提交
3196
pthread=no
3197
cat > $TMPC << EOF
3198
#include <pthread.h>
3199 3200 3201 3202 3203 3204
static void *f(void *p) { return NULL; }
int main(void) {
  pthread_t thread;
  pthread_create(&thread, 0, f, 0);
  return 0;
}
3205
EOF
3206 3207 3208 3209 3210 3211
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 已提交
3212 3213 3214 3215 3216 3217 3218 3219 3220 3221
      found=no
      for lib_entry in $LIBS; do
        if test "$lib_entry" = "$pthread_lib"; then
          found=yes
          break
        fi
      done
      if test "$found" = "no"; then
        LIBS="$pthread_lib $LIBS"
      fi
3222
      PTHREAD_LIB="$pthread_lib"
3223 3224 3225 3226
      break
    fi
  done
fi
3227

3228
if test "$mingw32" != yes -a "$pthread" = no; then
3229 3230
  error_exit "pthread check failed" \
      "Make sure to have the pthread libs and headers installed."
3231 3232
fi

3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250
# 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

3251 3252 3253 3254 3255
##########################################
# rbd probe
if test "$rbd" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
3256
#include <rbd/librbd.h>
3257
int main(void) {
3258 3259
    rados_t cluster;
    rados_create(&cluster, NULL);
3260 3261 3262
    return 0;
}
EOF
3263 3264 3265
  rbd_libs="-lrbd -lrados"
  if compile_prog "" "$rbd_libs" ; then
    rbd=yes
3266 3267
  else
    if test "$rbd" = "yes" ; then
3268
      feature_not_found "rados block device" "Install librbd/ceph devel"
3269 3270 3271 3272 3273
    fi
    rbd=no
  fi
fi

3274 3275
##########################################
# libssh2 probe
3276
min_libssh2_version=1.2.8
3277
if test "$libssh2" != "no" ; then
3278
  if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3279 3280
    libssh2_cflags=$($pkg_config libssh2 --cflags)
    libssh2_libs=$($pkg_config libssh2 --libs)
3281 3282 3283
    libssh2=yes
  else
    if test "$libssh2" = "yes" ; then
3284
      error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3285 3286 3287 3288 3289
    fi
    libssh2=no
  fi
fi

3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314
##########################################
# 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

3315 3316 3317 3318 3319 3320 3321
##########################################
# linux-aio probe

if test "$linux_aio" != "no" ; then
  cat > $TMPC <<EOF
#include <libaio.h>
#include <sys/eventfd.h>
S
Scott Wood 已提交
3322
#include <stddef.h>
3323 3324 3325 3326 3327 3328
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
3329
      feature_not_found "linux AIO" "Install libaio devel"
3330
    fi
3331
    linux_aio=no
3332 3333 3334
  fi
fi

P
Paolo Bonzini 已提交
3335 3336 3337 3338 3339 3340 3341 3342 3343
##########################################
# 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

3344 3345 3346 3347 3348 3349 3350
##########################################
# attr probe

if test "$attr" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
#include <sys/types.h>
P
Pavel Borzenkov 已提交
3351 3352 3353
#ifdef CONFIG_LIBATTR
#include <attr/xattr.h>
#else
3354
#include <sys/xattr.h>
P
Pavel Borzenkov 已提交
3355
#endif
3356 3357
int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
EOF
3358 3359 3360
  if compile_prog "" "" ; then
    attr=yes
  # Older distros have <attr/xattr.h>, and need -lattr:
P
Pavel Borzenkov 已提交
3361
  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3362 3363
    attr=yes
    LIBS="-lattr $LIBS"
3364
    libattr=yes
3365 3366
  else
    if test "$attr" = "yes" ; then
3367
      feature_not_found "ATTR" "Install libc6 or libattr devel"
3368 3369 3370 3371 3372
    fi
    attr=no
  fi
fi

A
aliguori 已提交
3373 3374 3375
##########################################
# iovec probe
cat > $TMPC <<EOF
B
blueswir1 已提交
3376
#include <sys/types.h>
A
aliguori 已提交
3377
#include <sys/uio.h>
B
blueswir1 已提交
3378
#include <unistd.h>
3379
int main(void) { return sizeof(struct iovec); }
A
aliguori 已提交
3380 3381
EOF
iovec=no
3382
if compile_prog "" "" ; then
A
aliguori 已提交
3383 3384 3385
  iovec=yes
fi

3386 3387 3388 3389 3390 3391
##########################################
# preadv probe
cat > $TMPC <<EOF
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
3392
int main(void) { return preadv(0, 0, 0, 0); }
3393 3394
EOF
preadv=no
3395
if compile_prog "" "" ; then
3396 3397 3398
  preadv=yes
fi

3399 3400
##########################################
# fdt probe
3401 3402 3403 3404 3405
# fdt support is mandatory for at least some target architectures,
# so insist on it if we're building those system emulators.
fdt_required=no
for target in $target_list; do
  case $target in
P
Paul Burton 已提交
3406
    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420
      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

3421
if test "$fdt" != "no" ; then
J
Juan Quintela 已提交
3422
  fdt_libs="-lfdt"
3423
  # explicitly check for libfdt_env.h as it is missing in some stable installs
P
Paul Burton 已提交
3424
  # and test for required functions to make sure we are on a version >= 1.4.2
J
Juan Quintela 已提交
3425
  cat > $TMPC << EOF
3426
#include <libfdt.h>
3427
#include <libfdt_env.h>
P
Paul Burton 已提交
3428
int main(void) { fdt_first_subnode(0, 0); return 0; }
3429
EOF
3430
  if compile_prog "" "$fdt_libs" ; then
3431
    # system DTC is good - use it
3432
    fdt=yes
3433 3434 3435 3436 3437
  elif test -d ${source_path}/dtc/libfdt ; then
    # have submodule DTC - use it
    fdt=yes
    dtc_internal="yes"
    mkdir -p dtc
3438
    if [ "$pwd_is_source_path" != "y" ] ; then
3439 3440
       symlink "$source_path/dtc/Makefile" "dtc/Makefile"
       symlink "$source_path/dtc/scripts" "dtc/scripts"
3441
    fi
3442 3443 3444 3445
    fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
    fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
  elif test "$fdt" = "yes" ; then
    # have neither and want - prompt for system/submodule install
P
Paul Burton 已提交
3446
    error_exit "DTC (libfdt) version >= 1.4.2 not present. Your options:" \
3447
        "  (1) Preferred: Install the DTC (libfdt) devel package" \
3448 3449 3450 3451
        "  (2) Fetch the DTC submodule, using:" \
        "      git submodule update --init dtc"
  else
    # don't have and don't want
3452
    fdt_libs=
3453
    fdt=no
3454 3455 3456
  fi
fi

3457 3458
libs_softmmu="$libs_softmmu $fdt_libs"

M
Michael Walle 已提交
3459
##########################################
3460
# opengl probe (for sdl2, gtk, milkymist-tmu2)
G
Gerd Hoffmann 已提交
3461

G
Gerd Hoffmann 已提交
3462
if test "$opengl" != "no" ; then
3463
  opengl_pkgs="epoxy libdrm gbm"
3464
  if $pkg_config $opengl_pkgs x11; then
3465 3466
    opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
    opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
G
Gerd Hoffmann 已提交
3467
    opengl=yes
3468 3469 3470
    if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
        gtk_gl="yes"
    fi
G
Gerd Hoffmann 已提交
3471
    QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
M
Michael Walle 已提交
3472
  else
G
Gerd Hoffmann 已提交
3473
    if test "$opengl" = "yes" ; then
G
Gerd Hoffmann 已提交
3474
      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
M
Michael Walle 已提交
3475
    fi
3476
    opengl_cflags=""
G
Gerd Hoffmann 已提交
3477 3478
    opengl_libs=""
    opengl=no
M
Michael Walle 已提交
3479 3480 3481
  fi
fi

3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493
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
3494 3495


3496 3497 3498
##########################################
# glusterfs probe
if test "$glusterfs" != "no" ; then
3499
  if $pkg_config --atleast-version=3 glusterfs-api; then
3500
    glusterfs="yes"
3501 3502
    glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
    glusterfs_libs=$($pkg_config --libs glusterfs-api)
3503 3504 3505
    if $pkg_config --atleast-version=4 glusterfs-api; then
      glusterfs_xlator_opt="yes"
    fi
3506
    if $pkg_config --atleast-version=5 glusterfs-api; then
3507 3508
      glusterfs_discard="yes"
    fi
3509 3510 3511
    if $pkg_config --atleast-version=6 glusterfs-api; then
      glusterfs_zerofill="yes"
    fi
3512 3513
  else
    if test "$glusterfs" = "yes" ; then
3514 3515
      feature_not_found "GlusterFS backend support" \
          "Install glusterfs-api devel >= 3"
3516
    fi
3517
    glusterfs="no"
3518 3519 3520
  fi
fi

A
aurel32 已提交
3521
# Check for inotify functions when we are building linux-user
3522 3523 3524 3525 3526
# 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
3527
cat > $TMPC << EOF
3528 3529 3530 3531 3532 3533
#include <sys/inotify.h>

int
main(void)
{
	/* try to start inotify */
A
aurel32 已提交
3534
	return inotify_init();
3535 3536
}
EOF
3537
if compile_prog "" "" ; then
3538
  inotify=yes
3539 3540
fi

3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555
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 已提交
3556 3557 3558 3559 3560 3561
# check if utimensat and futimens are supported
utimens=no
cat > $TMPC << EOF
#define _ATFILE_SOURCE
#include <stddef.h>
#include <fcntl.h>
3562
#include <sys/stat.h>
R
Riku Voipio 已提交
3563 3564 3565 3566 3567 3568 3569 3570

int main(void)
{
    utimensat(AT_FDCWD, "foo", NULL, 0);
    futimens(0, NULL);
    return 0;
}
EOF
3571
if compile_prog "" "" ; then
R
Riku Voipio 已提交
3572 3573 3574
  utimens=yes
fi

R
Riku Voipio 已提交
3575 3576 3577 3578 3579 3580 3581 3582 3583
# check if pipe2 is there
pipe2=no
cat > $TMPC << EOF
#include <unistd.h>
#include <fcntl.h>

int main(void)
{
    int pipefd[2];
3584
    return pipe2(pipefd, O_CLOEXEC);
R
Riku Voipio 已提交
3585 3586
}
EOF
3587
if compile_prog "" "" ; then
R
Riku Voipio 已提交
3588 3589 3590
  pipe2=yes
fi

K
Kevin Wolf 已提交
3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606
# 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

3607 3608 3609 3610 3611 3612 3613 3614 3615
# 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)
{
3616
    int len, fd = 0;
3617 3618 3619 3620 3621
    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
    return 0;
}
EOF
3622
if compile_prog "" "" ; then
3623 3624 3625
  splice=yes
fi

3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645
##########################################
# 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

3646 3647 3648 3649 3650
if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
    exit 1
fi

F
Fam Zheng 已提交
3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666
##########################################
# 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

3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682
##########################################
# 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 已提交
3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696
##########################################
# 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 已提交
3697 3698 3699 3700 3701 3702 3703
# check if eventfd is supported
eventfd=no
cat > $TMPC << EOF
#include <sys/eventfd.h>

int main(void)
{
3704
    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
R
Riku Voipio 已提交
3705 3706 3707 3708 3709 3710
}
EOF
if compile_prog "" "" ; then
  eventfd=yes
fi

M
Marc-André Lureau 已提交
3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726
# check if memfd is supported
memfd=no
cat > $TMPC << EOF
#include <sys/memfd.h>

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



3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737
# check for fallocate
fallocate=no
cat > $TMPC << EOF
#include <fcntl.h>

int main(void)
{
    fallocate(0, 0, 0, 0);
    return 0;
}
EOF
3738
if compile_prog "" "" ; then
3739 3740 3741
  fallocate=yes
fi

3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757
# 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

3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773
# 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

3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788
# 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

3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799
# 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
3800
if compile_prog "" "" ; then
3801 3802 3803
  sync_file_range=yes
fi

3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816
# 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
3817
if compile_prog "" "" ; then
3818 3819 3820
  fiemap=yes
fi

3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831
# check for dup3
dup3=no
cat > $TMPC << EOF
#include <unistd.h>

int main(void)
{
    dup3(0, 0, 0);
    return 0;
}
EOF
3832
if compile_prog "" "" ; then
3833 3834 3835
  dup3=yes
fi

3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851
# 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

3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866
# 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

3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877
# check for epoll support
epoll=no
cat > $TMPC << EOF
#include <sys/epoll.h>

int main(void)
{
    epoll_create(0);
    return 0;
}
EOF
3878
if compile_prog "" "" ; then
3879 3880 3881
  epoll=yes
fi

3882 3883
# epoll_create1 is a later addition
# so we must check separately for its presence
3884 3885 3886 3887 3888 3889
epoll_create1=no
cat > $TMPC << EOF
#include <sys/epoll.h>

int main(void)
{
3890 3891 3892 3893 3894 3895 3896 3897
    /* 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.)
     */
3898
    return (int)(uintptr_t)&epoll_create1;
3899 3900
}
EOF
3901
if compile_prog "" "" ; then
3902 3903 3904
  epoll_create1=yes
fi

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

3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932
# 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 已提交
3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949
# 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

3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964
# 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

3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979
# 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

3980
# Check if tools are available to build documentation.
J
Juan Quintela 已提交
3981
if test "$docs" != "no" ; then
3982
  if has makeinfo && has pod2man; then
J
Juan Quintela 已提交
3983
    docs=yes
3984
  else
J
Juan Quintela 已提交
3985
    if test "$docs" = "yes" ; then
3986
      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3987
    fi
J
Juan Quintela 已提交
3988
    docs=no
3989
  fi
3990 3991
fi

S
Stefan Weil 已提交
3992
# Search for bswap_32 function
3993 3994 3995 3996 3997
byteswap_h=no
cat > $TMPC << EOF
#include <byteswap.h>
int main(void) { return bswap_32(0); }
EOF
3998
if compile_prog "" "" ; then
3999 4000 4001
  byteswap_h=yes
fi

4002
# Search for bswap32 function
4003 4004 4005 4006 4007 4008 4009
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
4010
if compile_prog "" "" ; then
4011 4012 4013
  bswap_h=yes
fi

R
Ronnie Sahlberg 已提交
4014
##########################################
4015
# Do we have libiscsi >= 1.9.0
R
Ronnie Sahlberg 已提交
4016
if test "$libiscsi" != "no" ; then
4017
  if $pkg_config --atleast-version=1.9.0 libiscsi; then
4018
    libiscsi="yes"
4019 4020
    libiscsi_cflags=$($pkg_config --cflags libiscsi)
    libiscsi_libs=$($pkg_config --libs libiscsi)
R
Ronnie Sahlberg 已提交
4021 4022
  else
    if test "$libiscsi" = "yes" ; then
4023
      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
R
Ronnie Sahlberg 已提交
4024 4025 4026 4027 4028
    fi
    libiscsi="no"
  fi
fi

4029 4030 4031 4032
##########################################
# Do we need libm
cat > $TMPC << EOF
#include <math.h>
4033
int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4034 4035 4036 4037 4038 4039 4040
EOF
if compile_prog "" "" ; then
  :
elif compile_prog "" "-lm" ; then
  LIBS="-lm $LIBS"
  libs_qga="-lm $libs_qga"
else
4041
  error_exit "libm check failed"
4042 4043
fi

A
aliguori 已提交
4044 4045
##########################################
# Do we need librt
4046 4047 4048 4049
# 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 已提交
4050 4051 4052
cat > $TMPC <<EOF
#include <signal.h>
#include <time.h>
4053 4054 4055 4056
int main(void) {
  timer_create(CLOCK_REALTIME, NULL, NULL);
  return clock_gettime(CLOCK_REALTIME, NULL);
}
A
aliguori 已提交
4057 4058
EOF

4059
if compile_prog "" "" ; then
4060
  :
4061
# we need pthread for static linking. use previous pthread test result
4062 4063 4064
elif compile_prog "" "$pthread_lib -lrt" ; then
  LIBS="$LIBS -lrt"
  libs_qga="$libs_qga -lrt"
A
aliguori 已提交
4065 4066
fi

4067
if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4068
        "$aix" != "yes" -a "$haiku" != "yes" ; then
4069 4070 4071
    libs_softmmu="-lutil $libs_softmmu"
fi

4072
##########################################
4073 4074 4075 4076 4077 4078
# 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 已提交
4079 4080
  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4081 4082
  if $pkg_config --atleast-version=0.12.0 spice-server && \
     $pkg_config --atleast-version=0.12.3 spice-protocol && \
4083 4084 4085 4086
     compile_prog "$spice_cflags" "$spice_libs" ; then
    spice="yes"
    libs_softmmu="$libs_softmmu $spice_libs"
    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4087 4088
    spice_protocol_version=$($pkg_config --modversion spice-protocol)
    spice_server_version=$($pkg_config --modversion spice-server)
4089 4090
  else
    if test "$spice" = "yes" ; then
4091 4092
      feature_not_found "spice" \
          "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4093 4094 4095 4096 4097
    fi
    spice="no"
  fi
fi

4098
# check for smartcard support
P
Paolo Bonzini 已提交
4099
smartcard_cflags=""
4100 4101 4102 4103 4104 4105 4106
if test "$smartcard" != "no"; then
    if $pkg_config libcacard; then
        libcacard_cflags=$($pkg_config --cflags libcacard)
        libcacard_libs=$($pkg_config --libs libcacard)
        QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
        libs_softmmu="$libs_softmmu $libcacard_libs"
        smartcard="yes"
P
Paolo Bonzini 已提交
4107
    else
4108 4109
        if test "$smartcard" = "yes"; then
            feature_not_found "smartcard" "Install libcacard devel"
R
Robert Relyea 已提交
4110
        fi
4111
        smartcard="no"
R
Robert Relyea 已提交
4112 4113 4114
    fi
fi

G
Gerd Hoffmann 已提交
4115 4116
# check for libusb
if test "$libusb" != "no" ; then
4117
    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
G
Gerd Hoffmann 已提交
4118
        libusb="yes"
4119 4120
        libusb_cflags=$($pkg_config --cflags libusb-1.0)
        libusb_libs=$($pkg_config --libs libusb-1.0)
G
Gerd Hoffmann 已提交
4121 4122 4123 4124
        QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
        libs_softmmu="$libs_softmmu $libusb_libs"
    else
        if test "$libusb" = "yes"; then
4125
            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
G
Gerd Hoffmann 已提交
4126 4127 4128 4129 4130
        fi
        libusb="no"
    fi
fi

4131 4132
# check for usbredirparser for usb network redirection support
if test "$usb_redir" != "no" ; then
4133
    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4134
        usb_redir="yes"
4135 4136
        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4137
        QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
A
Aurelien Jarno 已提交
4138
        libs_softmmu="$libs_softmmu $usb_redir_libs"
4139 4140
    else
        if test "$usb_redir" = "yes"; then
4141
            feature_not_found "usb-redir" "Install usbredir devel"
4142 4143 4144 4145 4146
        fi
        usb_redir="no"
    fi
fi

4147 4148 4149 4150 4151
##########################################
# 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
4152
    "")   vss_win32_include="-isystem $source_path" ;;
4153 4154
    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
          # handle path with spaces. So we symlink the headers into ".sdk/vss".
4155
          vss_win32_include="-isystem $source_path/.sdk/vss"
4156 4157
	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
	  ;;
4158
    *)    vss_win32_include="-isystem $vss_win32_sdk"
4159 4160 4161 4162 4163 4164 4165 4166 4167
  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"
4168
    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4169
    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202
  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

4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218
##########################################
# 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
4219
    libs_qga="-lsetupapi $libs_qga"
4220 4221 4222
  fi
fi

4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243
##########################################
# virgl renderer probe

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

B
Blue Swirl 已提交
4244 4245 4246 4247 4248 4249
##########################################
# check if we have fdatasync

fdatasync=no
cat > $TMPC << EOF
#include <unistd.h>
4250 4251 4252 4253
int main(void) {
#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
return fdatasync(0);
#else
4254
#error Not supported
4255 4256
#endif
}
B
Blue Swirl 已提交
4257 4258 4259 4260 4261
EOF
if compile_prog "" "" ; then
    fdatasync=yes
fi

A
Andreas Färber 已提交
4262 4263 4264 4265 4266 4267 4268
##########################################
# check if we have madvise

madvise=no
cat > $TMPC << EOF
#include <sys/types.h>
#include <sys/mman.h>
S
Scott Wood 已提交
4269
#include <stddef.h>
A
Andreas Färber 已提交
4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281
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 已提交
4282
#include <stddef.h>
A
Andreas Färber 已提交
4283 4284 4285 4286 4287 4288
int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
EOF
if compile_prog "" "" ; then
    posix_madvise=yes
fi

P
Paul Durrant 已提交
4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300
##########################################
# 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

4301 4302 4303
##########################################
# check if trace backend exists

L
Lluís Vilanova 已提交
4304
$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4305
if test "$?" -ne 0 ; then
L
Lluís Vilanova 已提交
4306 4307
  error_exit "invalid trace backends" \
      "Please choose supported trace backends."
4308 4309
fi

4310 4311
##########################################
# For 'ust' backend, test if ust headers are present
L
Lluís Vilanova 已提交
4312
if have_backend "ust"; then
4313
  cat > $TMPC << EOF
4314
#include <lttng/tracepoint.h>
4315 4316
int main(void) { return 0; }
EOF
4317
  if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4318
    if $pkg_config lttng-ust --exists; then
4319
      lttng_ust_libs=$($pkg_config --libs lttng-ust)
4320
    else
4321
      lttng_ust_libs="-llttng-ust -ldl"
4322 4323
    fi
    if $pkg_config liburcu-bp --exists; then
4324
      urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4325 4326 4327 4328 4329 4330
    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"
4331
  else
4332
    error_exit "Trace backend 'ust' missing lttng-ust header files"
4333 4334
  fi
fi
4335 4336 4337

##########################################
# For 'dtrace' backend, test if 'dtrace' command is present
L
Lluís Vilanova 已提交
4338
if have_backend "dtrace"; then
4339
  if ! has 'dtrace' ; then
4340
    error_exit "dtrace command is not found in PATH $PATH"
4341
  fi
4342 4343 4344 4345
  trace_backend_stap="no"
  if has 'stap' ; then
    trace_backend_stap="yes"
  fi
4346 4347
fi

W
Wolfgang Mauerer 已提交
4348
##########################################
4349
# check and set a backend for coroutine
4350

4351 4352 4353 4354 4355 4356 4357 4358 4359
# We prefer ucontext, but it's not always possible. The fallback
# is sigcontext. gthread is not selectable except explicitly, because
# it is not functional enough to run QEMU proper. (It is occasionally
# useful for debugging purposes.)  On Windows the only valid backend
# is the Windows-specific one.

ucontext_works=no
if test "$darwin" != "yes"; then
  cat > $TMPC << EOF
4360
#include <ucontext.h>
4361 4362 4363
#ifdef __stub_makecontext
#error Ignoring glibc stub makecontext which will always fail
#endif
4364
int main(void) { makecontext(0, 0, 0); return 0; }
4365
EOF
4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377
  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
4378
  fi
4379
else
4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402
  case $coroutine in
  windows)
    if test "$mingw32" != "yes"; then
      error_exit "'windows' coroutine backend only valid for Windows"
    fi
    # Unfortunately the user visible backend name doesn't match the
    # coroutine-*.c filename for this case, so we have to adjust it here.
    coroutine=win32
    ;;
  ucontext)
    if test "$ucontext_works" != "yes"; then
      feature_not_found "ucontext"
    fi
    ;;
  gthread|sigaltstack)
    if test "$mingw32" = "yes"; then
      error_exit "only the 'windows' coroutine backend is valid for Windows"
    fi
    ;;
  *)
    error_exit "unknown coroutine backend $coroutine"
    ;;
  esac
4403 4404
fi

4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415
if test "$coroutine_pool" = ""; then
  if test "$coroutine" = "gthread"; then
    coroutine_pool=no
  else
    coroutine_pool=yes
  fi
fi
if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
  error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
fi

4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426
if test "$debug_stack_usage" = "yes"; then
  if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
    error_exit "stack usage debugging is not supported for $cpu"
  fi
  if test "$coroutine_pool" = "yes"; then
    echo "WARN: disabling coroutine pool for stack usage debugging"
    coroutine_pool=no
  fi
fi


4427 4428 4429
##########################################
# check if we have open_by_handle_at

S
Stefan Weil 已提交
4430
open_by_handle_at=no
4431 4432
cat > $TMPC << EOF
#include <fcntl.h>
4433 4434 4435
#if !defined(AT_EMPTY_PATH)
# error missing definition
#else
4436
int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4437
#endif
4438 4439 4440 4441 4442
EOF
if compile_prog "" "" ; then
    open_by_handle_at=yes
fi

4443 4444 4445 4446 4447 4448 4449
########################################
# check if we have linux/magic.h

linux_magic_h=no
cat > $TMPC << EOF
#include <linux/magic.h>
int main(void) {
4450
  return 0;
4451 4452 4453 4454 4455 4456
}
EOF
if compile_prog "" "" ; then
    linux_magic_h=yes
fi

4457
########################################
K
Kevin Wolf 已提交
4458 4459 4460 4461 4462 4463 4464 4465
# 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.

4466 4467
pragma_disable_unused_but_set=no
cat > $TMPC << EOF
4468
#pragma GCC diagnostic push
4469
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
K
Kevin Wolf 已提交
4470
#pragma GCC diagnostic ignored "-Wstrict-prototypes"
4471
#pragma GCC diagnostic pop
K
Kevin Wolf 已提交
4472

4473 4474 4475 4476 4477
int main(void) {
    return 0;
}
EOF
if compile_prog "-Werror" "" ; then
4478
    pragma_diagnostic_available=yes
K
Kevin Wolf 已提交
4479 4480
else
    werror=no
4481 4482
fi

4483
########################################
4484
# check if we have valgrind/valgrind.h
4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496

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

4497 4498 4499 4500 4501 4502 4503
########################################
# check if environ is declared

has_environ=no
cat > $TMPC << EOF
#include <unistd.h>
int main(void) {
4504
    environ = 0;
4505 4506 4507 4508 4509 4510 4511
    return 0;
}
EOF
if compile_prog "" "" ; then
    has_environ=yes
fi

4512 4513 4514 4515 4516 4517 4518
########################################
# check if cpuid.h is usable.

cpuid_h=no
cat > $TMPC << EOF
#include <cpuid.h>
int main(void) {
4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530
    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;
4531 4532 4533 4534 4535 4536
}
EOF
if compile_prog "" "" ; then
    cpuid_h=yes
fi

4537 4538 4539 4540 4541
########################################
# check if __[u]int128_t is usable.

int128=no
cat > $TMPC << EOF
4542 4543 4544 4545 4546
#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
4547 4548 4549 4550 4551
__int128_t a;
__uint128_t b;
int main (void) {
  a = a + b;
  b = a * b;
4552
  a = a * a;
4553 4554 4555 4556 4557 4558
  return 0;
}
EOF
if compile_prog "" "" ; then
    int128=yes
fi
4559

R
Richard Henderson 已提交
4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579
#########################################
# 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 已提交
4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608
#########################################
# 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

4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622
########################################
# 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

4623 4624 4625 4626
########################################
# check if ccache is interfering with
# semantic analysis of macros

4627
unset CCACHE_CPP2
4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650
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

4651 4652 4653 4654 4655 4656
#################################################
# 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";
J
John Snow 已提交
4657 4658
  elif test -n "$cxx" &&
       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4659 4660 4661 4662 4663 4664
    fortify_source="no";
  else
    fortify_source="yes"
  fi
fi

4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679
##########################################
# 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

4680 4681
##########################################
# check if rtnetlink.h exists and is useful
4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692
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 已提交
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
##########################################
# 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

4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734
#################################################
# 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
4735 4736 4737 4738 4739 4740 4741 4742
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"
4743 4744
fi

4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758
##########################################
# 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

4759
##########################################
4760 4761 4762
# End of CC checks
# After here, no more $cc or $ld runs

B
Blue Swirl 已提交
4763 4764 4765
if test "$gcov" = "yes" ; then
  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4766
elif test "$fortify_source" = "yes" ; then
4767
  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4768 4769
elif test "$debug" = "no"; then
  CFLAGS="-O2 $CFLAGS"
4770
fi
J
Juan Quintela 已提交
4771

P
Peter Lieven 已提交
4772 4773 4774
##########################################
# Do we have libnfs
if test "$libnfs" != "no" ; then
4775
  if $pkg_config --atleast-version=1.9.3 libnfs; then
P
Peter Lieven 已提交
4776 4777 4778 4779
    libnfs="yes"
    libnfs_libs=$($pkg_config --libs libnfs)
  else
    if test "$libnfs" = "yes" ; then
4780
      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
P
Peter Lieven 已提交
4781 4782 4783 4784
    fi
    libnfs="no"
  fi
fi
B
Blue Swirl 已提交
4785

4786 4787 4788 4789 4790
# 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

4791 4792
if test "$solaris" = "no" ; then
    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4793
        LDFLAGS="-Wl,--warn-common $LDFLAGS"
4794 4795 4796
    fi
fi

4797 4798 4799 4800 4801 4802 4803
# test if pod2man has --utf8 option
if pod2man --help | grep -q utf8; then
    POD2MAN="pod2man --utf8"
else
    POD2MAN="pod2man"
fi

4804 4805 4806 4807 4808 4809 4810 4811 4812
# Use ASLR, no-SEH and DEP if available
if test "$mingw32" = "yes" ; then
    for flag in --dynamicbase --no-seh --nxcompat; do
        if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
            LDFLAGS="-Wl,$flag $LDFLAGS"
        fi
    done
fi

4813
qemu_confdir=$sysconfdir$confsuffix
F
Fam Zheng 已提交
4814
qemu_moddir=$libdir$confsuffix
4815
qemu_datadir=$datadir$confsuffix
4816
qemu_localedir="$datadir/locale"
4817

4818 4819
tools=""
if test "$want_tools" = "yes" ; then
4820
  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4821 4822
  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
    tools="qemu-nbd\$(EXESUF) $tools"
4823
    tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4824 4825 4826
  fi
fi
if test "$softmmu" = yes ; then
4827
  if test "$virtfs" != no ; then
4828 4829 4830 4831 4832
    if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
      virtfs=yes
      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
    else
      if test "$virtfs" = yes; then
4833
        error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
4834
      fi
4835
      virtfs=no
4836
    fi
4837
  fi
4838
fi
4839 4840 4841

# Probe for guest agent support/options

4842
if [ "$guest_agent" != "no" ]; then
4843
  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4844
      tools="qemu-ga $tools"
4845 4846 4847 4848 4849
      guest_agent=yes
  elif [ "$guest_agent" != yes ]; then
      guest_agent=no
  else
      error_exit "Guest agent is not supported on this platform"
4850
  fi
4851
fi
4852

4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869
# 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
4870 4871 4872 4873 4874 4875
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
4876 4877
fi

4878
if test "$guest_agent_msi" = "yes"; then
4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891
  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
4892
      QEMU_GA_VERSION=$(cat $source_path/VERSION)
4893 4894
  fi

4895
  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909

  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

4910 4911 4912 4913 4914
# 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
4915 4916 4917 4918 4919 4920 4921 4922 4923 4924
    # Different host OS linkers have different ideas about the name of the ELF
    # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
    # variant; and Windows uses i386pe.
    for emu in elf_i386 elf_i386_fbsd i386pe; do
        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
            ld_i386_emulation="$emu"
            roms="optionrom"
            break
        fi
    done
4925
fi
4926
if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4927 4928
  roms="$roms spapr-rtas"
fi
4929

4930 4931 4932 4933
if test "$cpu" = "s390x" ; then
  roms="$roms s390-ccw"
fi

4934
# Probe for the need for relocating the user-only binary.
4935
if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
4936 4937
  textseg_addr=
  case "$cpu" in
4938 4939
    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
      # ??? Rationale for choosing this address
4940 4941 4942
      textseg_addr=0x60000000
      ;;
    mips)
4943 4944 4945
      # 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
4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956
      ;;
  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.
4957 4958 4959 4960 4961 4962 4963 4964 4965 4966
      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

4967 4968 4969 4970 4971 4972 4973 4974 4975 4976
      $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

4977 4978 4979 4980 4981 4982
echo_version() {
    if test "$1" = "yes" ; then
        echo "($2)"
    fi
}

4983 4984 4985
# prepend pixman and ftd flags after all config tests are done
QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
libs_softmmu="$pixman_libs $libs_softmmu"
4986

B
bellard 已提交
4987
echo "Install prefix    $prefix"
4988 4989 4990 4991 4992 4993 4994
echo "BIOS directory    $(eval echo $qemu_datadir)"
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 已提交
4995
if test "$mingw32" = "no" ; then
4996 4997
echo "local state directory   $(eval echo $local_statedir)"
echo "Manual directory  $(eval echo $mandir)"
B
bellard 已提交
4998
echo "ELF interp prefix $interp_prefix"
4999 5000
else
echo "local state directory   queried at runtime"
5001
echo "Windows SDK       $win_sdk"
B
bellard 已提交
5002
fi
5003
echo "Source path       $source_path"
B
bellard 已提交
5004
echo "C compiler        $cc"
B
bellard 已提交
5005
echo "Host C compiler   $host_cc"
5006
echo "C++ compiler      $cxx"
5007
echo "Objective-C compiler $objcc"
5008
echo "ARFLAGS           $ARFLAGS"
5009
echo "CFLAGS            $CFLAGS"
J
Juan Quintela 已提交
5010
echo "QEMU_CFLAGS       $QEMU_CFLAGS"
5011
echo "LDFLAGS           $LDFLAGS"
B
bellard 已提交
5012
echo "make              $make"
5013
echo "install           $install"
B
Blue Swirl 已提交
5014
echo "python            $python"
5015 5016 5017
if test "$slirp" = "yes" ; then
    echo "smbd              $smbd"
fi
F
Fam Zheng 已提交
5018
echo "module support    $modules"
B
bellard 已提交
5019
echo "host CPU          $cpu"
B
bellard 已提交
5020
echo "host big endian   $bigendian"
5021
echo "target list       $target_list"
5022
echo "tcg debug enabled $debug_tcg"
B
bellard 已提交
5023
echo "gprof enabled     $gprof"
5024
echo "sparse enabled    $sparse"
5025
echo "strip binaries    $strip_opt"
5026
echo "profiler          $profiler"
B
bellard 已提交
5027
echo "static build      $static"
5028 5029 5030
if test "$darwin" = "yes" ; then
    echo "Cocoa support     $cocoa"
fi
5031
echo "pixman            $pixman"
5032 5033
echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
5034
echo "GTK GL support    $gtk_gl"
5035
echo "VTE support       $vte $(echo_version $vte $vteversion)"
5036
echo "TLS priority      $tls_priority"
5037
echo "GNUTLS support    $gnutls"
5038
echo "GNUTLS rnd        $gnutls_rnd"
5039
echo "libgcrypt         $gcrypt"
5040
echo "libgcrypt kdf     $gcrypt_kdf"
5041
echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
5042
echo "nettle kdf        $nettle_kdf"
5043
echo "libtasn1          $tasn1"
B
balrog 已提交
5044
echo "curses support    $curses"
5045
echo "virgl support     $virglrenderer"
A
Alexander Graf 已提交
5046
echo "curl support      $curl"
B
bellard 已提交
5047
echo "mingw32 support   $mingw32"
M
malc 已提交
5048
echo "Audio drivers     $audio_drv_list"
5049 5050
echo "Block whitelist (rw) $block_drv_rw_whitelist"
echo "Block whitelist (ro) $block_drv_ro_whitelist"
5051
echo "VirtFS support    $virtfs"
J
Jes Sorensen 已提交
5052 5053 5054 5055 5056 5057
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
5058 5059 5060
if test -n "$sparc_cpu"; then
    echo "Target Sparc Arch $sparc_cpu"
fi
5061
echo "xen support       $xen"
5062 5063
if test "$xen" = "yes" ; then
  echo "xen ctrl version  $xen_ctrl_version"
5064
  echo "pv dom build      $xen_pv_domain_build"
5065
fi
A
aurel32 已提交
5066
echo "brlapi support    $brlapi"
5067
echo "bluez  support    $bluez"
J
Juan Quintela 已提交
5068
echo "Documentation     $docs"
5069
echo "PIE               $pie"
5070
echo "vde support       $vde"
5071
echo "netmap support    $netmap"
5072
echo "Linux AIO support $linux_aio"
5073
echo "ATTR/XATTR support $attr"
T
ths 已提交
5074
echo "Install blobs     $blobs"
5075
echo "KVM support       $kvm"
5076
echo "HAX support       $hax"
M
Michael R. Hines 已提交
5077
echo "RDMA support      $rdma"
5078
echo "TCG interpreter   $tcg_interpreter"
5079
echo "fdt support       $fdt"
5080
echo "preadv support    $preadv"
B
Blue Swirl 已提交
5081
echo "fdatasync         $fdatasync"
A
Andreas Färber 已提交
5082 5083
echo "madvise           $madvise"
echo "posix_madvise     $posix_madvise"
5084
echo "libcap-ng support $cap_ng"
M
Michael S. Tsirkin 已提交
5085
echo "vhost-net support $vhost_net"
5086
echo "vhost-scsi support $vhost_scsi"
5087
echo "vhost-vsock support $vhost_vsock"
L
Lluís Vilanova 已提交
5088
echo "Trace backends    $trace_backends"
5089
if have_backend "simple"; then
P
Prerna Saxena 已提交
5090
echo "Trace output file $trace_file-<pid>"
5091
fi
5092
echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5093
echo "rbd support       $rbd"
C
Christoph Hellwig 已提交
5094
echo "xfsctl support    $xfs"
5095
echo "smartcard support $smartcard"
G
Gerd Hoffmann 已提交
5096
echo "libusb            $libusb"
5097
echo "usb net redir     $usb_redir"
G
Gerd Hoffmann 已提交
5098
echo "OpenGL support    $opengl"
5099
echo "OpenGL dmabufs    $opengl_dmabuf"
R
Ronnie Sahlberg 已提交
5100
echo "libiscsi support  $libiscsi"
P
Peter Lieven 已提交
5101
echo "libnfs support    $libnfs"
5102
echo "build guest agent $guest_agent"
5103
echo "QGA VSS support   $guest_agent_with_vss"
5104
echo "QGA w32 disk info $guest_agent_ntddscsi"
5105
echo "QGA MSI support   $guest_agent_msi"
5106
echo "seccomp support   $seccomp"
5107
echo "coroutine backend $coroutine"
5108
echo "coroutine pool    $coroutine_pool"
5109
echo "debug stack usage $debug_stack_usage"
5110
echo "GlusterFS support $glusterfs"
B
Blue Swirl 已提交
5111 5112
echo "gcov              $gcov_tool"
echo "gcov enabled      $gcov"
S
Stefan Berger 已提交
5113
echo "TPM support       $tpm"
5114
echo "libssh2 support   $libssh2"
P
Paolo Bonzini 已提交
5115
echo "TPM passthrough   $tpm_passthrough"
5116
echo "QOM debugging     $qom_cast_debug"
Q
qiaonuohan 已提交
5117 5118
echo "lzo support       $lzo"
echo "snappy support    $snappy"
5119
echo "bzip2 support     $bzip2"
5120
echo "NUMA host support $numa"
F
Fam Zheng 已提交
5121
echo "tcmalloc support  $tcmalloc"
5122
echo "jemalloc support  $jemalloc"
5123
echo "avx2 optimization $avx2_opt"
C
Changlong Xie 已提交
5124
echo "replication support $replication"
B
bellard 已提交
5125

5126
if test "$sdl_too_old" = "yes"; then
B
bellard 已提交
5127
echo "-> Your SDL version is too old - please upgrade to have SDL support"
B
bellard 已提交
5128
fi
B
bellard 已提交
5129

5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155
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
    echo "CPU host OS $targetos 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

5156 5157
config_host_mak="config-host.mak"

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

5160 5161 5162
echo "# Automatically generated by configure - do not modify" > $config_host_mak
echo >> $config_host_mak

5163
echo all: >> $config_host_mak
5164 5165
echo "prefix=$prefix" >> $config_host_mak
echo "bindir=$bindir" >> $config_host_mak
A
Alon Levy 已提交
5166
echo "libdir=$libdir" >> $config_host_mak
5167
echo "libexecdir=$libexecdir" >> $config_host_mak
5168
echo "includedir=$includedir" >> $config_host_mak
5169 5170
echo "mandir=$mandir" >> $config_host_mak
echo "sysconfdir=$sysconfdir" >> $config_host_mak
5171
echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5172 5173
echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
F
Fam Zheng 已提交
5174
echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5175 5176 5177
if test "$mingw32" = "no" ; then
  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
fi
5178
echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5179 5180
echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5181
echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5182
echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5183

5184
echo "ARCH=$ARCH" >> $config_host_mak
5185

5186
if test "$debug_tcg" = "yes" ; then
5187
  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5188
fi
5189
if test "$strip_opt" = "yes" ; then
5190
  echo "STRIP=${strip}" >> $config_host_mak
5191
fi
B
bellard 已提交
5192
if test "$bigendian" = "yes" ; then
5193
  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5194
fi
B
bellard 已提交
5195
if test "$mingw32" = "yes" ; then
5196
  echo "CONFIG_WIN32=y" >> $config_host_mak
5197
  rc_version=$(cat $source_path/VERSION)
5198 5199 5200 5201 5202 5203 5204 5205
  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
5206 5207
  if test "$guest_agent_with_vss" = "yes" ; then
    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5208
    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5209 5210
    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
  fi
5211 5212 5213
  if test "$guest_agent_ntddscsi" = "yes" ; then
    echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
  fi
5214
  if test "$guest_agent_msi" = "yes"; then
5215 5216 5217 5218 5219 5220 5221 5222
    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak  
    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
  fi
5223
else
J
Juan Quintela 已提交
5224
  echo "CONFIG_POSIX=y" >> $config_host_mak
M
Mark McLoughlin 已提交
5225 5226 5227 5228
fi

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

5231
if test "$darwin" = "yes" ; then
5232
  echo "CONFIG_DARWIN=y" >> $config_host_mak
5233
fi
M
malc 已提交
5234 5235

if test "$aix" = "yes" ; then
5236
  echo "CONFIG_AIX=y" >> $config_host_mak
M
malc 已提交
5237 5238
fi

B
bellard 已提交
5239
if test "$solaris" = "yes" ; then
5240
  echo "CONFIG_SOLARIS=y" >> $config_host_mak
5241
  echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
T
ths 已提交
5242
  if test "$needs_libsunmath" = "yes" ; then
5243
    echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
T
ths 已提交
5244
  fi
B
bellard 已提交
5245
fi
5246 5247 5248
if test "$haiku" = "yes" ; then
  echo "CONFIG_HAIKU=y" >> $config_host_mak
fi
5249
if test "$static" = "yes" ; then
5250
  echo "CONFIG_STATIC=y" >> $config_host_mak
B
bellard 已提交
5251
fi
5252
if test "$profiler" = "yes" ; then
5253
  echo "CONFIG_PROFILER=y" >> $config_host_mak
5254
fi
B
bellard 已提交
5255
if test "$slirp" = "yes" ; then
5256
  echo "CONFIG_SLIRP=y" >> $config_host_mak
5257
  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
B
bellard 已提交
5258
fi
5259
if test "$vde" = "yes" ; then
5260
  echo "CONFIG_VDE=y" >> $config_host_mak
5261
fi
5262 5263 5264
if test "$netmap" = "yes" ; then
  echo "CONFIG_NETMAP=y" >> $config_host_mak
fi
5265 5266 5267
if test "$l2tpv3" = "yes" ; then
  echo "CONFIG_L2TPV3=y" >> $config_host_mak
fi
5268 5269 5270
if test "$cap_ng" = "yes" ; then
  echo "CONFIG_LIBCAP=y" >> $config_host_mak
fi
5271
echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
M
malc 已提交
5272
for drv in $audio_drv_list; do
5273
    def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5274
    echo "$def=y" >> $config_host_mak
M
malc 已提交
5275
done
5276 5277 5278
if test "$audio_pt_int" = "yes" ; then
  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
fi
5279 5280 5281
if test "$audio_win_int" = "yes" ; then
  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
fi
5282 5283
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 已提交
5284 5285 5286
if test "$vnc" = "yes" ; then
  echo "CONFIG_VNC=y" >> $config_host_mak
fi
5287
if test "$vnc_sasl" = "yes" ; then
5288
  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5289
fi
J
Jes Sorensen 已提交
5290
if test "$vnc_jpeg" = "yes" ; then
5291 5292
  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
fi
J
Jes Sorensen 已提交
5293
if test "$vnc_png" = "yes" ; then
C
Corentin Chary 已提交
5294 5295
  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
fi
5296
if test "$fnmatch" = "yes" ; then
5297
  echo "CONFIG_FNMATCH=y" >> $config_host_mak
5298
fi
C
Christoph Hellwig 已提交
5299 5300 5301
if test "$xfs" = "yes" ; then
  echo "CONFIG_XFS=y" >> $config_host_mak
fi
5302
qemu_version=$(head $source_path/VERSION)
5303
echo "VERSION=$qemu_version" >>$config_host_mak
5304
echo "PKGVERSION=$pkgversion" >>$config_host_mak
5305 5306
echo "SRC_PATH=$source_path" >> $config_host_mak
echo "TARGET_DIRS=$target_list" >> $config_host_mak
J
Juan Quintela 已提交
5307
if [ "$docs" = "yes" ] ; then
5308
  echo "BUILD_DOCS=yes" >> $config_host_mak
5309
fi
F
Fam Zheng 已提交
5310
if test "$modules" = "yes"; then
F
Fam Zheng 已提交
5311 5312
  # $shacmd can generate a hash started with digit, which the compiler doesn't
  # like as an symbol. So prefix it with an underscore
5313
  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
F
Fam Zheng 已提交
5314 5315
  echo "CONFIG_MODULES=y" >> $config_host_mak
fi
5316
if test "$sdl" = "yes" ; then
5317
  echo "CONFIG_SDL=y" >> $config_host_mak
5318
  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5319
  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5320 5321
fi
if test "$cocoa" = "yes" ; then
5322
  echo "CONFIG_COCOA=y" >> $config_host_mak
B
balrog 已提交
5323 5324
fi
if test "$curses" = "yes" ; then
5325
  echo "CONFIG_CURSES=y" >> $config_host_mak
5326
fi
R
Riku Voipio 已提交
5327
if test "$utimens" = "yes" ; then
5328
  echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
R
Riku Voipio 已提交
5329
fi
R
Riku Voipio 已提交
5330
if test "$pipe2" = "yes" ; then
5331
  echo "CONFIG_PIPE2=y" >> $config_host_mak
R
Riku Voipio 已提交
5332
fi
K
Kevin Wolf 已提交
5333 5334 5335
if test "$accept4" = "yes" ; then
  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
fi
5336
if test "$splice" = "yes" ; then
5337
  echo "CONFIG_SPLICE=y" >> $config_host_mak
5338
fi
R
Riku Voipio 已提交
5339 5340 5341
if test "$eventfd" = "yes" ; then
  echo "CONFIG_EVENTFD=y" >> $config_host_mak
fi
M
Marc-André Lureau 已提交
5342 5343 5344
if test "$memfd" = "yes" ; then
  echo "CONFIG_MEMFD=y" >> $config_host_mak
fi
5345 5346 5347
if test "$fallocate" = "yes" ; then
  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
fi
5348 5349 5350
if test "$fallocate_punch_hole" = "yes" ; then
  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
fi
5351 5352 5353
if test "$fallocate_zero_range" = "yes" ; then
  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
fi
5354 5355 5356
if test "$posix_fallocate" = "yes" ; then
  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
fi
5357 5358 5359
if test "$sync_file_range" = "yes" ; then
  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
fi
5360 5361 5362
if test "$fiemap" = "yes" ; then
  echo "CONFIG_FIEMAP=y" >> $config_host_mak
fi
5363 5364 5365
if test "$dup3" = "yes" ; then
  echo "CONFIG_DUP3=y" >> $config_host_mak
fi
5366 5367 5368
if test "$ppoll" = "yes" ; then
  echo "CONFIG_PPOLL=y" >> $config_host_mak
fi
5369 5370 5371
if test "$prctl_pr_set_timerslack" = "yes" ; then
  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
fi
5372 5373 5374 5375 5376 5377
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
5378 5379 5380
if test "$sendfile" = "yes" ; then
  echo "CONFIG_SENDFILE=y" >> $config_host_mak
fi
5381 5382 5383
if test "$timerfd" = "yes" ; then
  echo "CONFIG_TIMERFD=y" >> $config_host_mak
fi
R
Riku Voipio 已提交
5384 5385 5386
if test "$setns" = "yes" ; then
  echo "CONFIG_SETNS=y" >> $config_host_mak
fi
5387 5388 5389
if test "$clock_adjtime" = "yes" ; then
  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
fi
5390 5391 5392
if test "$syncfs" = "yes" ; then
  echo "CONFIG_SYNCFS=y" >> $config_host_mak
fi
5393
if test "$inotify" = "yes" ; then
5394
  echo "CONFIG_INOTIFY=y" >> $config_host_mak
5395
fi
5396 5397 5398
if test "$inotify1" = "yes" ; then
  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
fi
5399 5400 5401 5402 5403 5404
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 已提交
5405
if test "$curl" = "yes" ; then
5406
  echo "CONFIG_CURL=m" >> $config_host_mak
J
Juan Quintela 已提交
5407
  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5408
  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
A
Alexander Graf 已提交
5409
fi
A
aurel32 已提交
5410
if test "$brlapi" = "yes" ; then
5411
  echo "CONFIG_BRLAPI=y" >> $config_host_mak
A
aurel32 已提交
5412
fi
B
balrog 已提交
5413
if test "$bluez" = "yes" ; then
5414
  echo "CONFIG_BLUEZ=y" >> $config_host_mak
5415
  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
B
balrog 已提交
5416
fi
5417
if test "$glib_subprocess" = "yes" ; then
5418 5419
  echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
fi
A
Anthony Liguori 已提交
5420 5421
if test "$gtk" = "yes" ; then
  echo "CONFIG_GTK=y" >> $config_host_mak
5422
  echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
A
Anthony Liguori 已提交
5423
  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5424
  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5425 5426 5427
  if test "$gtk_gl" = "yes" ; then
    echo "CONFIG_GTK_GL=y" >> $config_host_mak
  fi
S
Stefan Weil 已提交
5428
fi
5429
echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5430 5431 5432
if test "$gnutls" = "yes" ; then
  echo "CONFIG_GNUTLS=y" >> $config_host_mak
fi
5433 5434 5435
if test "$gnutls_rnd" = "yes" ; then
  echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
fi
5436 5437
if test "$gcrypt" = "yes" ; then
  echo "CONFIG_GCRYPT=y" >> $config_host_mak
5438 5439 5440
  if test "$gcrypt_hmac" = "yes" ; then
    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
  fi
5441 5442 5443
  if test "$gcrypt_kdf" = "yes" ; then
    echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
  fi
5444
fi
5445 5446
if test "$nettle" = "yes" ; then
  echo "CONFIG_NETTLE=y" >> $config_host_mak
5447
  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5448 5449 5450
  if test "$nettle_kdf" = "yes" ; then
    echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
  fi
5451
fi
5452 5453 5454
if test "$tasn1" = "yes" ; then
  echo "CONFIG_TASN1=y" >> $config_host_mak
fi
5455 5456 5457
if test "$have_ifaddrs_h" = "yes" ; then
    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
fi
5458 5459 5460
if test "$have_broken_size_max" = "yes" ; then
    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
fi
5461 5462 5463 5464 5465 5466 5467 5468

# Work around a system header bug with some kernel/XFS header
# versions where they both try to define 'struct fsxattr':
# xfs headers will not try to redefine structs from linux headers
# if this macro is set.
if test "$have_fsxattr" = "yes" ; then
    echo "HAVE_FSXATTR=y" >> $config_host_mak
fi
S
Stefan Weil 已提交
5469 5470
if test "$vte" = "yes" ; then
  echo "CONFIG_VTE=y" >> $config_host_mak
A
Anthony Liguori 已提交
5471 5472
  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
fi
5473 5474 5475 5476 5477
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
5478
if test "$xen" = "yes" ; then
J
Jan Kiszka 已提交
5479
  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5480
  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5481 5482 5483
  if test "$xen_pv_domain_build" = "yes" ; then
    echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
  fi
5484
fi
5485 5486 5487
if test "$linux_aio" = "yes" ; then
  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
fi
5488 5489 5490
if test "$attr" = "yes" ; then
  echo "CONFIG_ATTR=y" >> $config_host_mak
fi
5491 5492 5493
if test "$libattr" = "yes" ; then
  echo "CONFIG_LIBATTR=y" >> $config_host_mak
fi
5494 5495
if test "$virtfs" = "yes" ; then
  echo "CONFIG_VIRTFS=y" >> $config_host_mak
5496
fi
5497 5498 5499
if test "$vhost_scsi" = "yes" ; then
  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
fi
5500 5501 5502
if test "$vhost_net" = "yes" ; then
  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
fi
5503 5504 5505
if test "$vhost_vsock" = "yes" ; then
  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
fi
T
ths 已提交
5506
if test "$blobs" = "yes" ; then
5507
  echo "INSTALL_BLOBS=yes" >> $config_host_mak
T
ths 已提交
5508
fi
A
aliguori 已提交
5509
if test "$iovec" = "yes" ; then
5510
  echo "CONFIG_IOVEC=y" >> $config_host_mak
A
aliguori 已提交
5511
fi
5512
if test "$preadv" = "yes" ; then
5513
  echo "CONFIG_PREADV=y" >> $config_host_mak
5514
fi
5515
if test "$fdt" = "yes" ; then
5516
  echo "CONFIG_FDT=y" >> $config_host_mak
5517
fi
M
Marcelo Tosatti 已提交
5518 5519 5520
if test "$signalfd" = "yes" ; then
  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
fi
5521 5522 5523
if test "$tcg_interpreter" = "yes" ; then
  echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
fi
B
Blue Swirl 已提交
5524 5525 5526
if test "$fdatasync" = "yes" ; then
  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
fi
A
Andreas Färber 已提交
5527 5528 5529 5530 5531 5532
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
5533

5534 5535 5536
if test "$spice" = "yes" ; then
  echo "CONFIG_SPICE=y" >> $config_host_mak
fi
A
Alon Levy 已提交
5537

5538 5539
if test "$smartcard" = "yes" ; then
  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
R
Robert Relyea 已提交
5540 5541
fi

G
Gerd Hoffmann 已提交
5542 5543 5544 5545
if test "$libusb" = "yes" ; then
  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
fi

5546 5547 5548 5549
if test "$usb_redir" = "yes" ; then
  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
fi

G
Gerd Hoffmann 已提交
5550 5551 5552
if test "$opengl" = "yes" ; then
  echo "CONFIG_OPENGL=y" >> $config_host_mak
  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5553 5554 5555
  if test "$opengl_dmabuf" = "yes" ; then
    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
  fi
M
Michael Walle 已提交
5556 5557
fi

5558 5559 5560 5561
if test "$avx2_opt" = "yes" ; then
  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
fi

Q
qiaonuohan 已提交
5562 5563 5564 5565 5566 5567 5568 5569
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

5570 5571 5572 5573 5574
if test "$bzip2" = "yes" ; then
  echo "CONFIG_BZIP2=y" >> $config_host_mak
  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
fi

R
Ronnie Sahlberg 已提交
5575
if test "$libiscsi" = "yes" ; then
5576
  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5577 5578
  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
R
Ronnie Sahlberg 已提交
5579 5580
fi

P
Peter Lieven 已提交
5581
if test "$libnfs" = "yes" ; then
5582 5583
  echo "CONFIG_LIBNFS=m" >> $config_host_mak
  echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
P
Peter Lieven 已提交
5584 5585
fi

5586 5587 5588 5589
if test "$seccomp" = "yes"; then
  echo "CONFIG_SECCOMP=y" >> $config_host_mak
fi

5590
# XXX: suppress that
B
bellard 已提交
5591
if [ "$bsd" = "yes" ] ; then
5592
  echo "CONFIG_BSD=y" >> $config_host_mak
B
bellard 已提交
5593 5594
fi

5595 5596 5597
if test "$localtime_r" = "yes" ; then
  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
fi
5598 5599 5600
if test "$qom_cast_debug" = "yes" ; then
  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
fi
5601
if test "$rbd" = "yes" ; then
5602
  echo "CONFIG_RBD=m" >> $config_host_mak
5603 5604
  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5605 5606
fi

5607
echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5608 5609 5610 5611 5612
if test "$coroutine_pool" = "yes" ; then
  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
else
  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
fi
5613

5614 5615 5616 5617
if test "$debug_stack_usage" = "yes" ; then
  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
fi

5618 5619 5620 5621
if test "$open_by_handle_at" = "yes" ; then
  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
fi

5622 5623
if test "$linux_magic_h" = "yes" ; then
  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5624 5625
fi

5626 5627
if test "$pragma_diagnostic_available" = "yes" ; then
  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5628 5629
fi

5630 5631 5632 5633
if test "$valgrind_h" = "yes" ; then
  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
fi

5634 5635
if test "$has_environ" = "yes" ; then
  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5636 5637
fi

5638 5639 5640 5641
if test "$cpuid_h" = "yes" ; then
  echo "CONFIG_CPUID_H=y" >> $config_host_mak
fi

5642 5643 5644 5645
if test "$int128" = "yes" ; then
  echo "CONFIG_INT128=y" >> $config_host_mak
fi

R
Richard Henderson 已提交
5646 5647 5648 5649
if test "$atomic128" = "yes" ; then
  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
fi

R
Richard Henderson 已提交
5650 5651 5652 5653
if test "$atomic64" = "yes" ; then
  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
fi

5654 5655 5656 5657
if test "$getauxval" = "yes" ; then
  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
fi

5658
if test "$glusterfs" = "yes" ; then
5659
  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5660 5661
  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5662 5663
fi

5664 5665 5666 5667
if test "$glusterfs_xlator_opt" = "yes" ; then
  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
fi

5668 5669
if test "$glusterfs_discard" = "yes" ; then
  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5670
fi
5671

5672 5673 5674 5675
if test "$glusterfs_zerofill" = "yes" ; then
  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
fi

5676
if test "$libssh2" = "yes" ; then
5677
  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5678 5679
  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5680 5681
fi

5682
# USB host support
G
Gerd Hoffmann 已提交
5683 5684 5685
if test "$libusb" = "yes"; then
  echo "HOST_USB=libusb legacy" >> $config_host_mak
else
5686
  echo "HOST_USB=stub" >> $config_host_mak
G
Gerd Hoffmann 已提交
5687
fi
5688

P
Paolo Bonzini 已提交
5689 5690 5691 5692 5693 5694 5695 5696
# TPM passthrough support?
if test "$tpm" = "yes"; then
  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
  if test "$tpm_passthrough" = "yes"; then
    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
  fi
fi

L
Lluís Vilanova 已提交
5697 5698
echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
if have_backend "nop"; then
5699
  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5700
fi
L
Lluís Vilanova 已提交
5701
if have_backend "simple"; then
5702 5703
  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
  # Set the appropriate trace file.
5704
  trace_file="\"$trace_file-\" FMT_pid"
P
Prerna Saxena 已提交
5705
fi
5706 5707
if have_backend "log"; then
  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
5708
fi
L
Lluís Vilanova 已提交
5709
if have_backend "ust"; then
5710 5711
  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
fi
L
Lluís Vilanova 已提交
5712
if have_backend "dtrace"; then
5713 5714 5715 5716
  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
  if test "$trace_backend_stap" = "yes" ; then
    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
  fi
5717
fi
L
Lluís Vilanova 已提交
5718
if have_backend "ftrace"; then
5719 5720 5721
  if test "$linux" = "yes" ; then
    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
  else
5722
    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5723 5724
  fi
fi
P
Paul Durrant 已提交
5725 5726 5727 5728 5729 5730 5731
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 已提交
5732 5733
echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak

M
Michael R. Hines 已提交
5734 5735 5736 5737
if test "$rdma" = "yes" ; then
  echo "CONFIG_RDMA=y" >> $config_host_mak
fi

5738 5739 5740 5741
if test "$have_rtnetlink" = "yes" ; then
  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
fi

C
Changlong Xie 已提交
5742 5743 5744 5745
if test "$replication" = "yes" ; then
  echo "CONFIG_REPLICATION=y" >> $config_host_mak
fi

S
Stefan Hajnoczi 已提交
5746 5747 5748 5749
if test "$have_af_vsock" = "yes" ; then
  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
fi

5750 5751 5752 5753
if test "$have_sysmacros" = "yes" ; then
  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
fi

5754 5755 5756 5757 5758 5759 5760 5761 5762 5763
# 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

5764 5765 5766 5767 5768 5769
if test "$tcg_interpreter" = "yes"; then
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
elif test "$ARCH" = "sparc64" ; then
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
elif test "$ARCH" = "s390x" ; then
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5770
elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5771
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5772 5773
elif test "$ARCH" = "ppc64" ; then
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5774 5775 5776 5777 5778
else
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
fi
QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"

5779 5780
echo "TOOLS=$tools" >> $config_host_mak
echo "ROMS=$roms" >> $config_host_mak
5781 5782
echo "MAKE=$make" >> $config_host_mak
echo "INSTALL=$install" >> $config_host_mak
5783 5784
echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
M
Michael Tokarev 已提交
5785 5786
echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
B
Blue Swirl 已提交
5787
echo "PYTHON=$python" >> $config_host_mak
5788
echo "CC=$cc" >> $config_host_mak
5789 5790 5791
if $iasl -h > /dev/null 2>&1; then
  echo "IASL=$iasl" >> $config_host_mak
fi
P
Paolo Bonzini 已提交
5792
echo "CC_I386=$cc_i386" >> $config_host_mak
5793
echo "HOST_CC=$host_cc" >> $config_host_mak
5794
echo "CXX=$cxx" >> $config_host_mak
5795
echo "OBJCC=$objcc" >> $config_host_mak
5796
echo "AR=$ar" >> $config_host_mak
5797
echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5798
echo "AS=$as" >> $config_host_mak
5799
echo "CCAS=$ccas" >> $config_host_mak
5800
echo "CPP=$cpp" >> $config_host_mak
5801 5802
echo "OBJCOPY=$objcopy" >> $config_host_mak
echo "LD=$ld" >> $config_host_mak
S
Stefan Weil 已提交
5803
echo "NM=$nm" >> $config_host_mak
5804
echo "WINDRES=$windres" >> $config_host_mak
5805
echo "CFLAGS=$CFLAGS" >> $config_host_mak
B
Brad 已提交
5806
echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
J
Juan Quintela 已提交
5807
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5808
echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
P
Paolo Bonzini 已提交
5809 5810
if test "$sparse" = "yes" ; then
  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
5811
  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
G
Gerd Hoffmann 已提交
5812
  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
P
Paolo Bonzini 已提交
5813 5814 5815
  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
5816 5817 5818 5819 5820
if test "$cross_prefix" != ""; then
  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
else
  echo "AUTOCONF_HOST := "                             >> $config_host_mak
fi
5821
echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
B
Brad 已提交
5822
echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5823
echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
5824
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
J
Juan Quintela 已提交
5825
echo "LIBS+=$LIBS" >> $config_host_mak
J
Juan Quintela 已提交
5826
echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5827
echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
5828
echo "EXESUF=$EXESUF" >> $config_host_mak
F
Fam Zheng 已提交
5829 5830
echo "DSOSUF=$DSOSUF" >> $config_host_mak
echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5831
echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5832 5833
echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
5834
echo "POD2MAN=$POD2MAN" >> $config_host_mak
5835
echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
B
Blue Swirl 已提交
5836 5837 5838 5839
if test "$gcov" = "yes" ; then
  echo "CONFIG_GCOV=y" >> $config_host_mak
  echo "GCOV=$gcov_tool" >> $config_host_mak
fi
5840

5841 5842
# use included Linux headers
if test "$linux" = "yes" ; then
5843
  mkdir -p linux-headers
5844
  case "$cpu" in
5845
  i386|x86_64|x32)
5846
    linux_arch=x86
5847 5848
    ;;
  ppcemb|ppc|ppc64)
5849
    linux_arch=powerpc
5850 5851
    ;;
  s390x)
5852 5853
    linux_arch=s390
    ;;
5854 5855 5856
  aarch64)
    linux_arch=arm64
    ;;
5857 5858 5859
  mips64)
    linux_arch=mips
    ;;
5860 5861 5862
  *)
    # For most CPUs the kernel architecture name and QEMU CPU name match.
    linux_arch="$cpu"
5863 5864
    ;;
  esac
5865 5866 5867 5868
    # 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
5869 5870
fi

5871
for target in $target_list; do
5872
target_dir="$target"
5873
config_target_mak=$target_dir/config-target.mak
5874
target_name=$(echo $target | cut -d '-' -f 1)
5875
target_bigendian="no"
5876

5877
case "$target_name" in
5878
  armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5879 5880 5881
  target_bigendian=yes
  ;;
esac
5882
target_softmmu="no"
B
bellard 已提交
5883
target_user_only="no"
5884
target_linux_user="no"
B
blueswir1 已提交
5885
target_bsd_user="no"
P
pbrook 已提交
5886
case "$target" in
5887
  ${target_name}-softmmu)
P
pbrook 已提交
5888 5889
    target_softmmu="yes"
    ;;
5890
  ${target_name}-linux-user)
5891
    if test "$linux" != "yes" ; then
5892
      error_exit "Target '$target' is only available on a Linux host"
5893
    fi
P
pbrook 已提交
5894 5895 5896
    target_user_only="yes"
    target_linux_user="yes"
    ;;
5897
  ${target_name}-bsd-user)
B
Blue Swirl 已提交
5898
    if test "$bsd" != "yes" ; then
5899
      error_exit "Target '$target' is only available on a BSD host"
5900
    fi
B
blueswir1 已提交
5901 5902 5903
    target_user_only="yes"
    target_bsd_user="yes"
    ;;
P
pbrook 已提交
5904
  *)
5905
    error_exit "Target '$target' not recognised"
P
pbrook 已提交
5906 5907 5908
    exit 1
    ;;
esac
5909

5910
mkdir -p $target_dir
5911
echo "# Automatically generated by configure - do not modify" > $config_target_mak
B
bellard 已提交
5912

P
pbrook 已提交
5913
bflt="no"
5914
mttcg="no"
5915
interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
P
pbrook 已提交
5916
gdb_xml_files=""
A
aliguori 已提交
5917

5918
TARGET_ARCH="$target_name"
5919
TARGET_BASE_ARCH=""
5920
TARGET_ABI_DIR=""
5921

5922
case "$target_name" in
A
aurel32 已提交
5923 5924 5925
  i386)
  ;;
  x86_64)
5926
    TARGET_BASE_ARCH=i386
A
aurel32 已提交
5927 5928
  ;;
  alpha)
5929
    mttcg="yes"
A
aurel32 已提交
5930 5931
  ;;
  arm|armeb)
J
Juan Quintela 已提交
5932
    TARGET_ARCH=arm
A
aurel32 已提交
5933
    bflt="yes"
5934
    mttcg="yes"
P
pbrook 已提交
5935
    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
A
aurel32 已提交
5936
  ;;
5937 5938 5939
  aarch64)
    TARGET_BASE_ARCH=arm
    bflt="yes"
5940
    mttcg="yes"
5941
    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5942
  ;;
A
aurel32 已提交
5943 5944
  cris)
  ;;
5945 5946
  hppa)
  ;;
M
Michael Walle 已提交
5947 5948
  lm32)
  ;;
A
aurel32 已提交
5949 5950
  m68k)
    bflt="yes"
P
pbrook 已提交
5951
    gdb_xml_files="cf-core.xml cf-fp.xml"
A
aurel32 已提交
5952
  ;;
5953 5954
  microblaze|microblazeel)
    TARGET_ARCH=microblaze
5955 5956
    bflt="yes"
  ;;
J
Juan Quintela 已提交
5957
  mips|mipsel)
J
Juan Quintela 已提交
5958
    TARGET_ARCH=mips
5959
    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
A
aurel32 已提交
5960 5961
  ;;
  mipsn32|mipsn32el)
5962
    TARGET_ARCH=mips64
5963
    TARGET_BASE_ARCH=mips
5964
    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5965
    echo "TARGET_ABI32=y" >> $config_target_mak
A
aurel32 已提交
5966 5967
  ;;
  mips64|mips64el)
J
Juan Quintela 已提交
5968
    TARGET_ARCH=mips64
5969
    TARGET_BASE_ARCH=mips
5970
    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
A
aurel32 已提交
5971
  ;;
A
Anthony Green 已提交
5972 5973
  moxie)
  ;;
M
Marek Vasut 已提交
5974 5975
  nios2)
  ;;
5976
  or1k)
5977 5978 5979
    TARGET_ARCH=openrisc
    TARGET_BASE_ARCH=openrisc
  ;;
A
aurel32 已提交
5980
  ppc)
5981
    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
A
aurel32 已提交
5982 5983
  ;;
  ppcemb)
5984
    TARGET_BASE_ARCH=ppc
5985
    TARGET_ABI_DIR=ppc
5986
    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
A
aurel32 已提交
5987 5988
  ;;
  ppc64)
5989
    TARGET_BASE_ARCH=ppc
5990
    TARGET_ABI_DIR=ppc
5991
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
A
aurel32 已提交
5992
  ;;
5993 5994 5995 5996
  ppc64le)
    TARGET_ARCH=ppc64
    TARGET_BASE_ARCH=ppc
    TARGET_ABI_DIR=ppc
5997
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5998
  ;;
A
aurel32 已提交
5999
  ppc64abi32)
J
Juan Quintela 已提交
6000
    TARGET_ARCH=ppc64
6001
    TARGET_BASE_ARCH=ppc
6002
    TARGET_ABI_DIR=ppc
6003
    echo "TARGET_ABI32=y" >> $config_target_mak
6004
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
A
aurel32 已提交
6005 6006
  ;;
  sh4|sh4eb)
J
Juan Quintela 已提交
6007
    TARGET_ARCH=sh4
A
aurel32 已提交
6008 6009 6010 6011 6012
    bflt="yes"
  ;;
  sparc)
  ;;
  sparc64)
6013
    TARGET_BASE_ARCH=sparc
A
aurel32 已提交
6014 6015
  ;;
  sparc32plus)
J
Juan Quintela 已提交
6016
    TARGET_ARCH=sparc64
6017
    TARGET_BASE_ARCH=sparc
6018
    TARGET_ABI_DIR=sparc
6019
    echo "TARGET_ABI32=y" >> $config_target_mak
A
aurel32 已提交
6020
  ;;
6021
  s390x)
6022
    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
6023
  ;;
6024 6025
  tilegx)
  ;;
6026 6027
  tricore)
  ;;
6028 6029
  unicore32)
  ;;
6030 6031 6032
  xtensa|xtensaeb)
    TARGET_ARCH=xtensa
  ;;
A
aurel32 已提交
6033
  *)
6034
    error_exit "Unsupported target CPU"
A
aurel32 已提交
6035 6036
  ;;
esac
6037 6038 6039 6040 6041 6042 6043
# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
if [ "$TARGET_BASE_ARCH" = "" ]; then
  TARGET_BASE_ARCH=$TARGET_ARCH
fi

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

6044 6045 6046 6047
upper() {
    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
}

6048
target_arch_name="$(upper $TARGET_ARCH)"
6049
echo "TARGET_$target_arch_name=y" >> $config_target_mak
6050
echo "TARGET_NAME=$target_name" >> $config_target_mak
6051
echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6052 6053 6054
if [ "$TARGET_ABI_DIR" = "" ]; then
  TARGET_ABI_DIR=$TARGET_ARCH
fi
6055
echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6056 6057 6058
if [ "$HOST_VARIANT_DIR" != "" ]; then
    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
fi
6059
case "$target_name" in
J
Juan Quintela 已提交
6060 6061
  i386|x86_64)
    if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
6062
      echo "CONFIG_XEN=y" >> $config_target_mak
6063 6064 6065
      if test "$xen_pci_passthrough" = yes; then
        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
      fi
J
Juan Quintela 已提交
6066
    fi
6067 6068
    ;;
  *)
J
Juan Quintela 已提交
6069
esac
6070
case "$target_name" in
6071
  aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
J
Juan Quintela 已提交
6072 6073
    # Make sure the target and host cpus are compatible
    if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
6074 6075 6076 6077 6078
      \( "$target_name" = "$cpu" -o \
      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
      \( "$target_name" = "ppc64"  -a "$cpu" = "ppc" \) -o \
      \( "$target_name" = "ppc"    -a "$cpu" = "ppc64" \) -o \
      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
6079
      \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
6080
      \( "$target_name" = "x86_64" -a "$cpu" = "i386"   \) -o \
M
Michael Tokarev 已提交
6081 6082 6083
      \( "$target_name" = "i386"   -a "$cpu" = "x86_64" \) -o \
      \( "$target_name" = "x86_64" -a "$cpu" = "x32"   \) -o \
      \( "$target_name" = "i386"   -a "$cpu" = "x32" \) \) ; then
6084
      echo "CONFIG_KVM=y" >> $config_target_mak
6085
      if test "$vhost_net" = "yes" ; then
M
Michael S. Tsirkin 已提交
6086
        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6087
        echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
M
Michael S. Tsirkin 已提交
6088
      fi
J
Juan Quintela 已提交
6089 6090
    fi
esac
6091 6092 6093 6094 6095 6096 6097 6098 6099
if test "$hax" = "yes" ; then
  if test "$target_softmmu" = "yes" ; then
    case "$target_name" in
    i386|x86_64)
      echo "CONFIG_HAX=y" >> $config_target_mak
    ;;
    esac
  fi
fi
B
bellard 已提交
6100
if test "$target_bigendian" = "yes" ; then
6101
  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
B
bellard 已提交
6102
fi
6103
if test "$target_softmmu" = "yes" ; then
6104
  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6105 6106 6107
  if test "$mttcg" = "yes" ; then
    echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
  fi
B
bellard 已提交
6108
fi
B
bellard 已提交
6109
if test "$target_user_only" = "yes" ; then
6110
  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6111
  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
B
bellard 已提交
6112
fi
6113
if test "$target_linux_user" = "yes" ; then
6114
  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6115
fi
P
pbrook 已提交
6116 6117 6118 6119 6120
list=""
if test ! -z "$gdb_xml_files" ; then
  for x in $gdb_xml_files; do
    list="$list $source_path/gdb-xml/$x"
  done
6121
  echo "TARGET_XML_FILES=$list" >> $config_target_mak
P
pbrook 已提交
6122
fi
6123

P
pbrook 已提交
6124
if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6125
  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
P
pbrook 已提交
6126
fi
B
blueswir1 已提交
6127
if test "$target_bsd_user" = "yes" ; then
6128
  echo "CONFIG_BSD_USER=y" >> $config_target_mak
B
blueswir1 已提交
6129
fi
6130

6131
# generate QEMU_CFLAGS/LDFLAGS for targets
6132

6133
cflags=""
6134
ldflags=""
6135

6136 6137 6138 6139 6140
disas_config() {
  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
}

6141 6142 6143
for i in $ARCH $TARGET_BASE_ARCH ; do
  case "$i" in
  alpha)
6144
    disas_config "ALPHA"
6145
  ;;
6146 6147
  aarch64)
    if test -n "${cxx}"; then
6148
      disas_config "ARM_A64"
6149 6150
    fi
  ;;
6151
  arm)
6152
    disas_config "ARM"
6153
    if test -n "${cxx}"; then
6154
      disas_config "ARM_A64"
6155
    fi
6156 6157
  ;;
  cris)
6158
    disas_config "CRIS"
6159
  ;;
6160 6161 6162
  hppa)
    disas_config "HPPA"
  ;;
6163
  i386|x86_64|x32)
6164
    disas_config "I386"
6165
  ;;
A
Aurelien Jarno 已提交
6166
  ia64*)
6167
    disas_config "IA64"
A
Aurelien Jarno 已提交
6168
  ;;
6169
  lm32)
6170
    disas_config "LM32"
6171
  ;;
6172
  m68k)
6173
    disas_config "M68K"
6174
  ;;
6175
  microblaze*)
6176
    disas_config "MICROBLAZE"
6177 6178
  ;;
  mips*)
6179
    disas_config "MIPS"
6180
  ;;
A
Anthony Green 已提交
6181
  moxie*)
6182
    disas_config "MOXIE"
A
Anthony Green 已提交
6183
  ;;
M
Marek Vasut 已提交
6184 6185 6186
  nios2)
    disas_config "NIOS2"
  ;;
6187
  or1k)
6188
    disas_config "OPENRISC"
6189
  ;;
6190
  ppc*)
6191
    disas_config "PPC"
6192
  ;;
6193
  s390*)
6194
    disas_config "S390"
6195 6196
  ;;
  sh4)
6197
    disas_config "SH4"
6198 6199
  ;;
  sparc*)
6200
    disas_config "SPARC"
6201
  ;;
6202
  xtensa*)
6203
    disas_config "XTENSA"
6204
  ;;
6205 6206
  esac
done
6207
if test "$tcg_interpreter" = "yes" ; then
6208
  disas_config "TCI"
6209
fi
6210

6211 6212 6213 6214 6215 6216 6217
case "$ARCH" in
alpha)
  # Ensure there's only a single GP
  cflags="-msmall-data $cflags"
;;
esac

6218
if test "$gprof" = "yes" ; then
6219
  echo "TARGET_GPROF=yes" >> $config_target_mak
6220 6221 6222 6223 6224 6225
  if test "$target_linux_user" = "yes" ; then
    cflags="-p $cflags"
    ldflags="-p $ldflags"
  fi
  if test "$target_softmmu" = "yes" ; then
    ldflags="-p $ldflags"
6226
    echo "GPROF_CFLAGS=-p" >> $config_target_mak
6227 6228 6229
  fi
fi

6230
if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6231
  ldflags="$ldflags $textseg_ldflags"
6232 6233
fi

6234 6235
echo "LDFLAGS+=$ldflags" >> $config_target_mak
echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6236

6237
done # for target in $targets
B
bellard 已提交
6238

6239 6240
if [ "$pixman" = "internal" ]; then
  echo "config-host.h: subdir-pixman" >> $config_host_mak
M
Michael R. Hines 已提交
6241 6242
fi

6243 6244 6245 6246
if [ "$dtc_internal" = "yes" ]; then
  echo "config-host.h: subdir-dtc" >> $config_host_mak
fi

6247 6248 6249 6250
if test "$numa" = "yes"; then
  echo "CONFIG_NUMA=y" >> $config_host_mak
fi

6251 6252 6253 6254
if test "$ccache_cpp2" = "yes"; then
  echo "export CCACHE_CPP2=y" >> $config_host_mak
fi

P
Paolo Bonzini 已提交
6255
# build tree in object directory in case the source is not in the current directory
6256
DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
6257
DIRS="$DIRS docs fsdev"
6258
DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
P
Paolo Bonzini 已提交
6259
DIRS="$DIRS roms/seabios roms/vgabios"
6260
DIRS="$DIRS qapi-generated"
A
Anthony Liguori 已提交
6261 6262
FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6263
FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
P
Paolo Bonzini 已提交
6264
FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
A
Andreas Färber 已提交
6265
FILES="$FILES pc-bios/spapr-rtas/Makefile"
6266
FILES="$FILES pc-bios/s390-ccw/Makefile"
P
Paolo Bonzini 已提交
6267
FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6268
FILES="$FILES pc-bios/qemu-icon.bmp"
6269 6270
for bios_file in \
    $source_path/pc-bios/*.bin \
6271
    $source_path/pc-bios/*.lid \
6272
    $source_path/pc-bios/*.aml \
6273 6274
    $source_path/pc-bios/*.rom \
    $source_path/pc-bios/*.dtb \
6275
    $source_path/pc-bios/*.img \
6276
    $source_path/pc-bios/openbios-* \
6277
    $source_path/pc-bios/u-boot.* \
6278 6279
    $source_path/pc-bios/palcode-*
do
6280
    FILES="$FILES pc-bios/$(basename $bios_file)"
P
Paolo Bonzini 已提交
6281
done
6282
for test_file in $(find $source_path/tests/acpi-test-data -type f)
6283
do
6284
    FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6285
done
P
Paolo Bonzini 已提交
6286 6287
mkdir -p $DIRS
for f in $FILES ; do
6288
    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6289 6290
        symlink "$source_path/$f" "$f"
    fi
P
Paolo Bonzini 已提交
6291
done
P
Paul Brook 已提交
6292

6293
# temporary config to build submodules
6294
for rom in seabios vgabios ; do
6295
    config_mak=roms/$rom/config.mak
6296
    echo "# Automatically generated by configure - do not modify" > $config_mak
6297
    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6298
    echo "AS=$as" >> $config_mak
6299
    echo "CCAS=$ccas" >> $config_mak
6300 6301
    echo "CC=$cc" >> $config_mak
    echo "BCC=bcc" >> $config_mak
6302
    echo "CPP=$cpp" >> $config_mak
6303
    echo "OBJCOPY=objcopy" >> $config_mak
6304
    echo "IASL=$iasl" >> $config_mak
6305 6306 6307
    echo "LD=$ld" >> $config_mak
done

M
Marc-André Lureau 已提交
6308 6309 6310 6311 6312
# set up tests data directory
if [ ! -e tests/data ]; then
    symlink "$source_path/tests/data" tests/data
fi

6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324
# 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

6325 6326 6327 6328 6329 6330 6331 6332 6333 6334
# 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
6335
echo ' "$@"' >>config.status
6336 6337
chmod +x config.status

6338
rm -r "$TMPDIR1"