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