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