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