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