]> git.proxmox.com Git - mirror_qemu.git/blame - configure
configure: require libseccomp 2.2.0
[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
d0699bd3 2231libseccomp_minver="2.2.0"
f794573e 2232if test "$seccomp" != "no" ; then
693e5910 2233 case "$cpu" in
d0699bd3 2234 i386|x86_64|mips)
5ce43972 2235 ;;
693e5910
AJ
2236 arm|aarch64)
2237 libseccomp_minver="2.2.3"
2238 ;;
3aa35fcf 2239 ppc|ppc64|s390x)
3e684455
MS
2240 libseccomp_minver="2.3.0"
2241 ;;
693e5910
AJ
2242 *)
2243 libseccomp_minver=""
2244 ;;
2245 esac
2246
2247 if test "$libseccomp_minver" != "" &&
2248 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
c3883e1f
FZ
2249 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2250 seccomp_libs="$($pkg_config --libs libseccomp)"
693e5910 2251 seccomp="yes"
f794573e 2252 else
693e5910
AJ
2253 if test "$seccomp" = "yes" ; then
2254 if test "$libseccomp_minver" != "" ; then
2255 feature_not_found "libseccomp" \
2256 "Install libseccomp devel >= $libseccomp_minver"
2257 else
2258 feature_not_found "libseccomp" \
2259 "libseccomp is not supported for host cpu $cpu"
2260 fi
2261 fi
2262 seccomp="no"
f794573e
EO
2263 fi
2264fi
e37630ca
AL
2265##########################################
2266# xen probe
2267
fc321b4b 2268if test "$xen" != "no" ; then
c1cdd9d5
JG
2269 # Check whether Xen library path is specified via --extra-ldflags to avoid
2270 # overriding this setting with pkg-config output. If not, try pkg-config
2271 # to obtain all needed flags.
2272
2273 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2274 $pkg_config --exists xencontrol ; then
2275 xen_ctrl_version="$(printf '%d%02d%02d' \
2276 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2277 xen=yes
2278 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2279 xen_pc="$xen_pc xenevtchn xendevicemodel"
58ea9a7a
AP
2280 if $pkg_config --exists xentoolcore; then
2281 xen_pc="$xen_pc xentoolcore"
2282 fi
c1cdd9d5
JG
2283 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2284 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2285 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2286 else
d5b93ddf 2287
c1cdd9d5 2288 xen_libs="-lxenstore -lxenctrl -lxenguest"
d9506cab 2289 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
50ced5b3 2290
c1cdd9d5
JG
2291 # First we test whether Xen headers and libraries are available.
2292 # If no, we are done and there is no Xen support.
2293 # If yes, more tests are run to detect the Xen version.
2294
2295 # Xen (any)
2296 cat > $TMPC <<EOF
e37630ca 2297#include <xenctrl.h>
50ced5b3
SW
2298int main(void) {
2299 return 0;
2300}
2301EOF
c1cdd9d5
JG
2302 if ! compile_prog "" "$xen_libs" ; then
2303 # Xen not found
2304 if test "$xen" = "yes" ; then
2305 feature_not_found "xen" "Install xen devel"
2306 fi
2307 xen=no
50ced5b3 2308
c1cdd9d5
JG
2309 # Xen unstable
2310 elif
2311 cat > $TMPC <<EOF &&
2cbf8903
RL
2312#undef XC_WANT_COMPAT_DEVICEMODEL_API
2313#define __XEN_TOOLS__
2314#include <xendevicemodel.h>
d3c49ebb 2315#include <xenforeignmemory.h>
2cbf8903
RL
2316int main(void) {
2317 xendevicemodel_handle *xd;
d3c49ebb 2318 xenforeignmemory_handle *xfmem;
2cbf8903
RL
2319
2320 xd = xendevicemodel_open(0, 0);
2321 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2322
d3c49ebb
PD
2323 xfmem = xenforeignmemory_open(0, 0);
2324 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2325
2cbf8903
RL
2326 return 0;
2327}
2328EOF
2329 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2330 then
2331 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2332 xen_ctrl_version=41100
2333 xen=yes
2334 elif
2335 cat > $TMPC <<EOF &&
5ba3d756
ID
2336#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2337#include <xenforeignmemory.h>
58ea9a7a 2338#include <xentoolcore.h>
5ba3d756
ID
2339int main(void) {
2340 xenforeignmemory_handle *xfmem;
2341
2342 xfmem = xenforeignmemory_open(0, 0);
2343 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
58ea9a7a 2344 xentoolcore_restrict_all(0);
5ba3d756
ID
2345
2346 return 0;
2347}
2348EOF
58ea9a7a 2349 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
5ba3d756 2350 then
58ea9a7a 2351 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
5ba3d756
ID
2352 xen_ctrl_version=41000
2353 xen=yes
2354 elif
2355 cat > $TMPC <<EOF &&
da8090cc
PD
2356#undef XC_WANT_COMPAT_DEVICEMODEL_API
2357#define __XEN_TOOLS__
2358#include <xendevicemodel.h>
2359int main(void) {
2360 xendevicemodel_handle *xd;
2361
2362 xd = xendevicemodel_open(0, 0);
2363 xendevicemodel_close(xd);
50ced5b3 2364
da8090cc
PD
2365 return 0;
2366}
2367EOF
c1cdd9d5
JG
2368 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2369 then
2370 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2371 xen_ctrl_version=40900
2372 xen=yes
2373 elif
2374 cat > $TMPC <<EOF &&
b6eb9b45
PS
2375/*
2376 * If we have stable libs the we don't want the libxc compat
2377 * layers, regardless of what CFLAGS we may have been given.
2378 *
2379 * Also, check if xengnttab_grant_copy_segment_t is defined and
2380 * grant copy operation is implemented.
2381 */
2382#undef XC_WANT_COMPAT_EVTCHN_API
2383#undef XC_WANT_COMPAT_GNTTAB_API
2384#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2385#include <xenctrl.h>
2386#include <xenstore.h>
2387#include <xenevtchn.h>
2388#include <xengnttab.h>
2389#include <xenforeignmemory.h>
2390#include <stdint.h>
2391#include <xen/hvm/hvm_info_table.h>
2392#if !defined(HVM_MAX_VCPUS)
2393# error HVM_MAX_VCPUS not defined
2394#endif
2395int main(void) {
2396 xc_interface *xc = NULL;
2397 xenforeignmemory_handle *xfmem;
2398 xenevtchn_handle *xe;
2399 xengnttab_handle *xg;
2400 xen_domain_handle_t handle;
2401 xengnttab_grant_copy_segment_t* seg = NULL;
2402
2403 xs_daemon_open();
2404
2405 xc = xc_interface_open(0, 0, 0);
2406 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2407 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2408 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2409 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2410 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2411
2412 xfmem = xenforeignmemory_open(0, 0);
2413 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2414
2415 xe = xenevtchn_open(0, 0);
2416 xenevtchn_fd(xe);
2417
2418 xg = xengnttab_open(0, 0);
2419 xengnttab_grant_copy(xg, 0, seg);
2420
2421 return 0;
2422}
2423EOF
c1cdd9d5
JG
2424 compile_prog "" "$xen_libs $xen_stable_libs"
2425 then
2426 xen_ctrl_version=40800
2427 xen=yes
2428 elif
2429 cat > $TMPC <<EOF &&
5eeb39c2
IC
2430/*
2431 * If we have stable libs the we don't want the libxc compat
2432 * layers, regardless of what CFLAGS we may have been given.
2433 */
2434#undef XC_WANT_COMPAT_EVTCHN_API
2435#undef XC_WANT_COMPAT_GNTTAB_API
2436#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2437#include <xenctrl.h>
2438#include <xenstore.h>
2439#include <xenevtchn.h>
2440#include <xengnttab.h>
2441#include <xenforeignmemory.h>
2442#include <stdint.h>
2443#include <xen/hvm/hvm_info_table.h>
2444#if !defined(HVM_MAX_VCPUS)
2445# error HVM_MAX_VCPUS not defined
2446#endif
2447int main(void) {
2448 xc_interface *xc = NULL;
2449 xenforeignmemory_handle *xfmem;
2450 xenevtchn_handle *xe;
2451 xengnttab_handle *xg;
2452 xen_domain_handle_t handle;
2453
2454 xs_daemon_open();
2455
2456 xc = xc_interface_open(0, 0, 0);
2457 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2458 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2459 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2460 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2461 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2462
2463 xfmem = xenforeignmemory_open(0, 0);
2464 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2465
2466 xe = xenevtchn_open(0, 0);
2467 xenevtchn_fd(xe);
2468
2469 xg = xengnttab_open(0, 0);
2470 xengnttab_map_grant_ref(xg, 0, 0, 0);
2471
2472 return 0;
2473}
2474EOF
c1cdd9d5
JG
2475 compile_prog "" "$xen_libs $xen_stable_libs"
2476 then
2477 xen_ctrl_version=40701
2478 xen=yes
2479 elif
2480 cat > $TMPC <<EOF &&
50ced5b3 2481#include <xenctrl.h>
cdadde39
RPM
2482#include <stdint.h>
2483int main(void) {
2484 xc_interface *xc = NULL;
2485 xen_domain_handle_t handle;
2486 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2487 return 0;
2488}
2489EOF
c1cdd9d5
JG
2490 compile_prog "" "$xen_libs"
2491 then
2492 xen_ctrl_version=40700
2493 xen=yes
2494
2495 # Xen 4.6
2496 elif
2497 cat > $TMPC <<EOF &&
cdadde39 2498#include <xenctrl.h>
e108a3c1 2499#include <xenstore.h>
d5b93ddf
AP
2500#include <stdint.h>
2501#include <xen/hvm/hvm_info_table.h>
2502#if !defined(HVM_MAX_VCPUS)
2503# error HVM_MAX_VCPUS not defined
2504#endif
d8b441a3
JB
2505int main(void) {
2506 xc_interface *xc;
2507 xs_daemon_open();
2508 xc = xc_interface_open(0, 0, 0);
2509 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2510 xc_gnttab_open(NULL, 0);
2511 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2512 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2513 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
20a544c7 2514 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
d8b441a3
JB
2515 return 0;
2516}
2517EOF
c1cdd9d5
JG
2518 compile_prog "" "$xen_libs"
2519 then
2520 xen_ctrl_version=40600
2521 xen=yes
2522
2523 # Xen 4.5
2524 elif
2525 cat > $TMPC <<EOF &&
d8b441a3
JB
2526#include <xenctrl.h>
2527#include <xenstore.h>
2528#include <stdint.h>
2529#include <xen/hvm/hvm_info_table.h>
2530#if !defined(HVM_MAX_VCPUS)
2531# error HVM_MAX_VCPUS not defined
2532#endif
3996e85c
PD
2533int main(void) {
2534 xc_interface *xc;
2535 xs_daemon_open();
2536 xc = xc_interface_open(0, 0, 0);
2537 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2538 xc_gnttab_open(NULL, 0);
2539 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2540 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2541 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2542 return 0;
2543}
2544EOF
c1cdd9d5
JG
2545 compile_prog "" "$xen_libs"
2546 then
2547 xen_ctrl_version=40500
2548 xen=yes
3996e85c 2549
c1cdd9d5
JG
2550 elif
2551 cat > $TMPC <<EOF &&
3996e85c
PD
2552#include <xenctrl.h>
2553#include <xenstore.h>
2554#include <stdint.h>
2555#include <xen/hvm/hvm_info_table.h>
2556#if !defined(HVM_MAX_VCPUS)
2557# error HVM_MAX_VCPUS not defined
2558#endif
8688e065
SS
2559int main(void) {
2560 xc_interface *xc;
2561 xs_daemon_open();
2562 xc = xc_interface_open(0, 0, 0);
2563 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2564 xc_gnttab_open(NULL, 0);
2565 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2566 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2567 return 0;
2568}
2569EOF
c1cdd9d5
JG
2570 compile_prog "" "$xen_libs"
2571 then
2572 xen_ctrl_version=40200
2573 xen=yes
8688e065 2574
c1cdd9d5
JG
2575 else
2576 if test "$xen" = "yes" ; then
2577 feature_not_found "xen (unsupported version)" \
2578 "Install a supported xen (xen 4.2 or newer)"
2579 fi
2580 xen=no
fc321b4b 2581 fi
d5b93ddf 2582
c1cdd9d5
JG
2583 if test "$xen" = yes; then
2584 if test $xen_ctrl_version -ge 40701 ; then
2585 libs_softmmu="$xen_stable_libs $libs_softmmu"
2586 fi
2587 libs_softmmu="$xen_libs $libs_softmmu"
5eeb39c2 2588 fi
d5b93ddf 2589 fi
e37630ca
AL
2590fi
2591
eb6fda0f 2592if test "$xen_pci_passthrough" != "no"; then
edfb07ed 2593 if test "$xen" = "yes" && test "$linux" = "yes"; then
eb6fda0f
AP
2594 xen_pci_passthrough=yes
2595 else
2596 if test "$xen_pci_passthrough" = "yes"; then
76ad07a4
PM
2597 error_exit "User requested feature Xen PCI Passthrough" \
2598 " but this feature requires /sys from Linux"
eb6fda0f
AP
2599 fi
2600 xen_pci_passthrough=no
2601 fi
2602fi
2603
64a7ad6f
IC
2604if test "$xen_pv_domain_build" = "yes" &&
2605 test "$xen" != "yes"; then
2606 error_exit "User requested Xen PV domain builder support" \
2607 "which requires Xen support."
2608fi
2609
d661d9a4
JTV
2610##########################################
2611# Windows Hypervisor Platform accelerator (WHPX) check
2612if test "$whpx" != "no" ; then
327fccb2 2613 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
d661d9a4
JTV
2614 whpx="yes"
2615 else
2616 if test "$whpx" = "yes"; then
53537bb1 2617 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
d661d9a4
JTV
2618 fi
2619 whpx="no"
2620 fi
2621fi
2622
dfffc653
JQ
2623##########################################
2624# Sparse probe
2625if test "$sparse" != "no" ; then
0dba6195 2626 if has cgcc; then
dfffc653
JQ
2627 sparse=yes
2628 else
2629 if test "$sparse" = "yes" ; then
21684af0 2630 feature_not_found "sparse" "Install sparse binary"
dfffc653
JQ
2631 fi
2632 sparse=no
2633 fi
2634fi
2635
f676c67e
JW
2636##########################################
2637# X11 probe
f676c67e 2638if $pkg_config --exists "x11"; then
8781595b 2639 have_x11=yes
89138857
SW
2640 x11_cflags=$($pkg_config --cflags x11)
2641 x11_libs=$($pkg_config --libs x11)
f676c67e
JW
2642fi
2643
a4ccabcf
AL
2644##########################################
2645# GTK probe
2646
2647if test "$gtk" != "no"; then
5a464e6c
PX
2648 if test "$gtkabi" = ""; then
2649 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2650 # Use 2.0 as a fallback if that is available.
2651 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2652 gtkabi=3.0
2653 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2654 gtkabi=2.0
2655 else
2656 gtkabi=3.0
2657 fi
2658 fi
528de90a 2659 gtkpackage="gtk+-$gtkabi"
0a337ed0 2660 gtkx11package="gtk+-x11-$gtkabi"
528de90a
DB
2661 if test "$gtkabi" = "3.0" ; then
2662 gtkversion="3.0.0"
bbbf9bfb
SW
2663 else
2664 gtkversion="2.18.0"
2665 fi
2666 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
89138857
SW
2667 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2668 gtk_libs=$($pkg_config --libs $gtkpackage)
2669 gtk_version=$($pkg_config --modversion $gtkpackage)
0a337ed0 2670 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
8781595b 2671 need_x11=yes
f676c67e
JW
2672 gtk_cflags="$gtk_cflags $x11_cflags"
2673 gtk_libs="$gtk_libs $x11_libs"
0a337ed0 2674 fi
bbbf9bfb
SW
2675 gtk="yes"
2676 elif test "$gtk" = "yes"; then
5fe309ff 2677 feature_not_found "gtk" "Install gtk3-devel"
bbbf9bfb
SW
2678 else
2679 gtk="no"
2680 fi
2681fi
2682
ddbb0d09
DB
2683
2684##########################################
2685# GNUTLS probe
2686
37371299
PM
2687gnutls_works() {
2688 # Unfortunately some distros have bad pkg-config information for gnutls
2689 # such that it claims to exist but you get a compiler error if you try
2690 # to use the options returned by --libs. Specifically, Ubuntu for --static
2691 # builds doesn't work:
2692 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2693 #
2694 # So sanity check the cflags/libs before assuming gnutls can be used.
2695 if ! $pkg_config --exists "gnutls"; then
2696 return 1
2697 fi
2698
2699 write_c_skeleton
2700 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2701}
2702
62893b67 2703gnutls_gcrypt=no
ed754746 2704gnutls_nettle=no
ddbb0d09 2705if test "$gnutls" != "no"; then
37371299 2706 if gnutls_works; then
89138857
SW
2707 gnutls_cflags=$($pkg_config --cflags gnutls)
2708 gnutls_libs=$($pkg_config --libs gnutls)
ddbb0d09
DB
2709 libs_softmmu="$gnutls_libs $libs_softmmu"
2710 libs_tools="$gnutls_libs $libs_tools"
2711 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2712 gnutls="yes"
2713
b917da4c
DB
2714 # gnutls_rnd requires >= 2.11.0
2715 if $pkg_config --exists "gnutls >= 2.11.0"; then
2716 gnutls_rnd="yes"
2717 else
2718 gnutls_rnd="no"
2719 fi
2720
62893b67
DB
2721 if $pkg_config --exists 'gnutls >= 3.0'; then
2722 gnutls_gcrypt=no
ed754746 2723 gnutls_nettle=yes
62893b67 2724 elif $pkg_config --exists 'gnutls >= 2.12'; then
89138857 2725 case $($pkg_config --libs --static gnutls) in
ed754746
DB
2726 *gcrypt*)
2727 gnutls_gcrypt=yes
2728 gnutls_nettle=no
2729 ;;
2730 *nettle*)
2731 gnutls_gcrypt=no
2732 gnutls_nettle=yes
2733 ;;
2734 *)
2735 gnutls_gcrypt=yes
2736 gnutls_nettle=no
2737 ;;
62893b67
DB
2738 esac
2739 else
2740 gnutls_gcrypt=yes
ed754746 2741 gnutls_nettle=no
62893b67 2742 fi
ddbb0d09
DB
2743 elif test "$gnutls" = "yes"; then
2744 feature_not_found "gnutls" "Install gnutls devel"
2745 else
2746 gnutls="no"
b917da4c 2747 gnutls_rnd="no"
ddbb0d09
DB
2748 fi
2749else
b917da4c 2750 gnutls_rnd="no"
ddbb0d09
DB
2751fi
2752
91bfcdb0
DB
2753
2754# If user didn't give a --disable/enable-gcrypt flag,
2755# then mark as disabled if user requested nettle
2756# explicitly, or if gnutls links to nettle
2757if test -z "$gcrypt"
2758then
2759 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2760 then
2761 gcrypt="no"
2762 fi
2763fi
2764
2765# If user didn't give a --disable/enable-nettle flag,
2766# then mark as disabled if user requested gcrypt
2767# explicitly, or if gnutls links to gcrypt
2768if test -z "$nettle"
2769then
2770 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2771 then
2772 nettle="no"
2773 fi
2774fi
2775
2776has_libgcrypt_config() {
2777 if ! has "libgcrypt-config"
2778 then
2779 return 1
2780 fi
2781
2782 if test -n "$cross_prefix"
2783 then
89138857 2784 host=$(libgcrypt-config --host)
91bfcdb0
DB
2785 if test "$host-" != $cross_prefix
2786 then
2787 return 1
2788 fi
2789 fi
2790
2791 return 0
2792}
2793
2794if test "$gcrypt" != "no"; then
2795 if has_libgcrypt_config; then
89138857
SW
2796 gcrypt_cflags=$(libgcrypt-config --cflags)
2797 gcrypt_libs=$(libgcrypt-config --libs)
91bfcdb0
DB
2798 # Debian has remove -lgpg-error from libgcrypt-config
2799 # as it "spreads unnecessary dependencies" which in
2800 # turn breaks static builds...
2801 if test "$static" = "yes"
2802 then
2803 gcrypt_libs="$gcrypt_libs -lgpg-error"
2804 fi
62893b67
DB
2805 libs_softmmu="$gcrypt_libs $libs_softmmu"
2806 libs_tools="$gcrypt_libs $libs_tools"
2807 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
91bfcdb0
DB
2808 gcrypt="yes"
2809 if test -z "$nettle"; then
2810 nettle="no"
2811 fi
37788f25
DB
2812
2813 cat > $TMPC << EOF
2814#include <gcrypt.h>
2815int main(void) {
2816 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2817 GCRY_MD_SHA256,
2818 NULL, 0, 0, 0, NULL);
2819 return 0;
2820}
2821EOF
2822 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2823 gcrypt_kdf=yes
2824 fi
1f923c70
LM
2825
2826 cat > $TMPC << EOF
2827#include <gcrypt.h>
2828int main(void) {
2829 gcry_mac_hd_t handle;
2830 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2831 GCRY_MAC_FLAG_SECURE, NULL);
2832 return 0;
2833}
2834EOF
2835 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2836 gcrypt_hmac=yes
2837 fi
62893b67 2838 else
91bfcdb0
DB
2839 if test "$gcrypt" = "yes"; then
2840 feature_not_found "gcrypt" "Install gcrypt devel"
2841 else
2842 gcrypt="no"
2843 fi
62893b67
DB
2844 fi
2845fi
2846
ddbb0d09 2847
91bfcdb0 2848if test "$nettle" != "no"; then
ed754746 2849 if $pkg_config --exists "nettle"; then
89138857
SW
2850 nettle_cflags=$($pkg_config --cflags nettle)
2851 nettle_libs=$($pkg_config --libs nettle)
2852 nettle_version=$($pkg_config --modversion nettle)
ed754746
DB
2853 libs_softmmu="$nettle_libs $libs_softmmu"
2854 libs_tools="$nettle_libs $libs_tools"
2855 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
91bfcdb0 2856 nettle="yes"
fff2f982
DB
2857
2858 cat > $TMPC << EOF
9e87a691 2859#include <stddef.h>
fff2f982
DB
2860#include <nettle/pbkdf2.h>
2861int main(void) {
2862 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2863 return 0;
2864}
2865EOF
2866 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2867 nettle_kdf=yes
2868 fi
ed754746 2869 else
91bfcdb0
DB
2870 if test "$nettle" = "yes"; then
2871 feature_not_found "nettle" "Install nettle devel"
2872 else
2873 nettle="no"
2874 fi
ed754746
DB
2875 fi
2876fi
2877
91bfcdb0
DB
2878if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2879then
2880 error_exit "Only one of gcrypt & nettle can be enabled"
2881fi
2882
9a2fd434
DB
2883##########################################
2884# libtasn1 - only for the TLS creds/session test suite
2885
2886tasn1=yes
90246037
DB
2887tasn1_cflags=""
2888tasn1_libs=""
9a2fd434 2889if $pkg_config --exists "libtasn1"; then
89138857
SW
2890 tasn1_cflags=$($pkg_config --cflags libtasn1)
2891 tasn1_libs=$($pkg_config --libs libtasn1)
9a2fd434
DB
2892else
2893 tasn1=no
2894fi
2895
ed754746 2896
559607ea
DB
2897##########################################
2898# getifaddrs (for tests/test-io-channel-socket )
2899
2900have_ifaddrs_h=yes
2901if ! check_include "ifaddrs.h" ; then
2902 have_ifaddrs_h=no
2903fi
2904
bbbf9bfb
SW
2905##########################################
2906# VTE probe
2907
2908if test "$vte" != "no"; then
2909 if test "$gtkabi" = "3.0"; then
c6feff9e
CR
2910 vteminversion="0.32.0"
2911 if $pkg_config --exists "vte-2.91"; then
2912 vtepackage="vte-2.91"
2913 else
2914 vtepackage="vte-2.90"
2915 fi
528de90a 2916 else
528de90a 2917 vtepackage="vte"
c6feff9e 2918 vteminversion="0.24.0"
528de90a 2919 fi
c6feff9e 2920 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
89138857
SW
2921 vte_cflags=$($pkg_config --cflags $vtepackage)
2922 vte_libs=$($pkg_config --libs $vtepackage)
2923 vteversion=$($pkg_config --modversion $vtepackage)
bbbf9bfb
SW
2924 vte="yes"
2925 elif test "$vte" = "yes"; then
9e04c683 2926 if test "$gtkabi" = "3.0"; then
c6feff9e 2927 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
9e04c683
SW
2928 else
2929 feature_not_found "vte" "Install libvte devel"
2930 fi
0d185e63 2931 else
bbbf9bfb 2932 vte="no"
a4ccabcf
AL
2933 fi
2934fi
2935
11d9f695
FB
2936##########################################
2937# SDL probe
2938
3ec87ffe
PB
2939# Look for sdl configuration program (pkg-config or sdl-config). Try
2940# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
47c03744 2941
c6093a05
PX
2942sdl_probe ()
2943{
2944 sdl_too_old=no
2945 if test "$sdlabi" = ""; then
2946 if $pkg_config --exists "sdl2"; then
2947 sdlabi=2.0
2948 elif $pkg_config --exists "sdl"; then
2949 sdlabi=1.2
2950 else
2951 sdlabi=2.0
2952 fi
2953 fi
ee8466d0 2954
c6093a05
PX
2955 if test $sdlabi = "2.0"; then
2956 sdl_config=$sdl2_config
2957 sdlname=sdl2
2958 sdlconfigname=sdl2_config
2959 elif test $sdlabi = "1.2"; then
2960 sdlname=sdl
2961 sdlconfigname=sdl_config
2962 else
2963 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2964 fi
47c03744 2965
c6093a05
PX
2966 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2967 sdl_config=$sdlconfigname
2968 fi
3ec87ffe 2969
c6093a05
PX
2970 if $pkg_config $sdlname --exists; then
2971 sdlconfig="$pkg_config $sdlname"
2972 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2973 elif has ${sdl_config}; then
2974 sdlconfig="$sdl_config"
2975 sdlversion=$($sdlconfig --version)
2976 else
2977 if test "$sdl" = "yes" ; then
2978 feature_not_found "sdl" "Install SDL2-devel"
2979 fi
2980 sdl=no
2981 # no need to do the rest
2982 return
2983 fi
2984 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2985 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
a0dfd8a4 2986 fi
11d9f695 2987
ac119f9d 2988 cat > $TMPC << EOF
11d9f695
FB
2989#include <SDL.h>
2990#undef main /* We don't want SDL to override our main() */
2991int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2992EOF
89138857 2993 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2ca5c430 2994 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
74f42e18 2995 if test "$static" = "yes" ; then
5f37e6d4
TH
2996 if $pkg_config $sdlname --exists; then
2997 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2998 else
2999 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3000 fi
74f42e18 3001 else
89138857 3002 sdl_libs=$($sdlconfig --libs 2>/dev/null)
74f42e18 3003 fi
52166aa0 3004 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
89138857 3005 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
ac119f9d
JQ
3006 sdl_too_old=yes
3007 else
a30878e7 3008 sdl=yes
ac119f9d 3009 fi
cd01b4a3 3010
67c274d3 3011 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
ac119f9d 3012 if test "$sdl" = "yes" -a "$static" = "yes" ; then
67c274d3 3013 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
89138857
SW
3014 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3015 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
ac119f9d 3016 fi
52166aa0 3017 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
ac119f9d
JQ
3018 :
3019 else
3020 sdl=no
3021 fi
3022 fi # static link
c4198157
JQ
3023 else # sdl not found
3024 if test "$sdl" = "yes" ; then
21684af0 3025 feature_not_found "sdl" "Install SDL devel"
c4198157
JQ
3026 fi
3027 sdl=no
ac119f9d 3028 fi # sdl compile test
c6093a05
PX
3029}
3030
3031if test "$sdl" != "no" ; then
3032 sdl_probe
a68551bc 3033fi
11d9f695 3034
5368a422 3035if test "$sdl" = "yes" ; then
ac119f9d 3036 cat > $TMPC <<EOF
5368a422
AL
3037#include <SDL.h>
3038#if defined(SDL_VIDEO_DRIVER_X11)
3039#include <X11/XKBlib.h>
3040#else
3041#error No x11 support
3042#endif
3043int main(void) { return 0; }
3044EOF
f676c67e 3045 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
8781595b 3046 need_x11=yes
f676c67e
JW
3047 sdl_cflags="$sdl_cflags $x11_cflags"
3048 sdl_libs="$sdl_libs $x11_libs"
ac119f9d 3049 fi
5368a422
AL
3050fi
3051
2da776db
MH
3052##########################################
3053# RDMA needs OpenFabrics libraries
3054if test "$rdma" != "no" ; then
3055 cat > $TMPC <<EOF
3056#include <rdma/rdma_cma.h>
3057int main(void) { return 0; }
3058EOF
ef6d4ccd 3059 rdma_libs="-lrdmacm -libverbs -libumad"
2da776db
MH
3060 if compile_prog "" "$rdma_libs" ; then
3061 rdma="yes"
ef6d4ccd 3062 libs_softmmu="$libs_softmmu $rdma_libs"
2da776db
MH
3063 else
3064 if test "$rdma" = "yes" ; then
3065 error_exit \
ef6d4ccd 3066 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
2da776db 3067 " Your options:" \
ef6d4ccd 3068 " (1) Fast: Install infiniband packages (devel) from your distro." \
2da776db
MH
3069 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3070 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3071 fi
3072 rdma="no"
3073 fi
3074fi
3075
21ab34c9
MA
3076##########################################
3077# PVRDMA detection
3078
3079cat > $TMPC <<EOF &&
3080#include <sys/mman.h>
3081
3082int
3083main(void)
3084{
3085 char buf = 0;
3086 void *addr = &buf;
3087 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3088
3089 return 0;
3090}
3091EOF
3092
3093if test "$rdma" = "yes" ; then
3094 case "$pvrdma" in
3095 "")
3096 if compile_prog "" ""; then
3097 pvrdma="yes"
3098 else
3099 pvrdma="no"
3100 fi
3101 ;;
3102 "yes")
3103 if ! compile_prog "" ""; then
3104 error_exit "PVRDMA is not supported since mremap is not implemented"
3105 fi
3106 pvrdma="yes"
3107 ;;
3108 "no")
3109 pvrdma="no"
3110 ;;
3111 esac
3112else
3113 if test "$pvrdma" = "yes" ; then
3114 error_exit "PVRDMA requires rdma suppport"
3115 fi
3116 pvrdma="no"
3117fi
95c6bff3 3118
2f9606b3
AL
3119##########################################
3120# VNC SASL detection
821601ea 3121if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
ea784e3b 3122 cat > $TMPC <<EOF
2f9606b3
AL
3123#include <sasl/sasl.h>
3124#include <stdio.h>
3125int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3126EOF
ea784e3b
JQ
3127 # Assuming Cyrus-SASL installed in /usr prefix
3128 vnc_sasl_cflags=""
3129 vnc_sasl_libs="-lsasl2"
3130 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3131 vnc_sasl=yes
3132 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
ca273d58 3133 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
ea784e3b
JQ
3134 else
3135 if test "$vnc_sasl" = "yes" ; then
21684af0 3136 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2f9606b3 3137 fi
ea784e3b
JQ
3138 vnc_sasl=no
3139 fi
2f9606b3
AL
3140fi
3141
2f6f5c7a
CC
3142##########################################
3143# VNC JPEG detection
821601ea 3144if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2f6f5c7a
CC
3145cat > $TMPC <<EOF
3146#include <stdio.h>
3147#include <jpeglib.h>
3148int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3149EOF
3150 vnc_jpeg_cflags=""
3151 vnc_jpeg_libs="-ljpeg"
3152 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3153 vnc_jpeg=yes
3154 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
ca273d58 3155 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2f6f5c7a
CC
3156 else
3157 if test "$vnc_jpeg" = "yes" ; then
21684af0 3158 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2f6f5c7a
CC
3159 fi
3160 vnc_jpeg=no
3161 fi
3162fi
3163
efe556ad
CC
3164##########################################
3165# VNC PNG detection
821601ea 3166if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
efe556ad
CC
3167cat > $TMPC <<EOF
3168//#include <stdio.h>
3169#include <png.h>
832ce9c2 3170#include <stddef.h>
efe556ad
CC
3171int main(void) {
3172 png_structp png_ptr;
3173 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
7edc3fed 3174 return png_ptr != 0;
efe556ad
CC
3175}
3176EOF
65d5d3f9 3177 if $pkg_config libpng --exists; then
89138857
SW
3178 vnc_png_cflags=$($pkg_config libpng --cflags)
3179 vnc_png_libs=$($pkg_config libpng --libs)
9af8025e 3180 else
efe556ad
CC
3181 vnc_png_cflags=""
3182 vnc_png_libs="-lpng"
9af8025e 3183 fi
efe556ad
CC
3184 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3185 vnc_png=yes
3186 libs_softmmu="$vnc_png_libs $libs_softmmu"
9af8025e 3187 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
efe556ad
CC
3188 else
3189 if test "$vnc_png" = "yes" ; then
21684af0 3190 feature_not_found "vnc-png" "Install libpng devel"
efe556ad
CC
3191 fi
3192 vnc_png=no
3193 fi
3194fi
3195
6a021536
GH
3196##########################################
3197# xkbcommon probe
3198if test "$xkbcommon" != "no" ; then
3199 if $pkg_config xkbcommon --exists; then
3200 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3201 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3202 xkbcommon=yes
3203 else
3204 if test "$xkbcommon" = "yes" ; then
3205 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3206 fi
3207 xkbcommon=no
3208 fi
3209fi
3210
76655d6d
AL
3211##########################################
3212# fnmatch() probe, used for ACL routines
3213fnmatch="no"
3214cat > $TMPC << EOF
3215#include <fnmatch.h>
3216int main(void)
3217{
3218 fnmatch("foo", "foo", 0);
3219 return 0;
3220}
3221EOF
52166aa0 3222if compile_prog "" "" ; then
76655d6d
AL
3223 fnmatch="yes"
3224fi
3225
ee682d27 3226##########################################
c1bb86cd 3227# xfsctl() probe, used for file-posix.c
dce512de
CH
3228if test "$xfs" != "no" ; then
3229 cat > $TMPC << EOF
ffc41d10 3230#include <stddef.h> /* NULL */
dce512de
CH
3231#include <xfs/xfs.h>
3232int main(void)
3233{
3234 xfsctl(NULL, 0, 0, NULL);
3235 return 0;
3236}
3237EOF
3238 if compile_prog "" "" ; then
3239 xfs="yes"
3240 else
3241 if test "$xfs" = "yes" ; then
21684af0 3242 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
dce512de
CH
3243 fi
3244 xfs=no
3245 fi
3246fi
3247
8a16d273
TS
3248##########################################
3249# vde libraries probe
dfb278bd 3250if test "$vde" != "no" ; then
4baae0ac 3251 vde_libs="-lvdeplug"
8a16d273
TS
3252 cat > $TMPC << EOF
3253#include <libvdeplug.h>
4a7f0e06
PB
3254int main(void)
3255{
3256 struct vde_open_args a = {0, 0, 0};
fea08e08
PM
3257 char s[] = "";
3258 vde_open(s, s, &a);
4a7f0e06
PB
3259 return 0;
3260}
8a16d273 3261EOF
52166aa0 3262 if compile_prog "" "$vde_libs" ; then
4baae0ac 3263 vde=yes
dfb278bd
JQ
3264 else
3265 if test "$vde" = "yes" ; then
21684af0 3266 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
dfb278bd
JQ
3267 fi
3268 vde=no
4baae0ac 3269 fi
8a16d273
TS
3270fi
3271
58952137 3272##########################################
0a985b37
VM
3273# netmap support probe
3274# Apart from looking for netmap headers, we make sure that the host API version
3275# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3276# a minor/major version number. Minor new features will be marked with values up
3277# to 15, and if something happens that requires a change to the backend we will
3278# move above 15, submit the backend fixes and modify this two bounds.
58952137
VM
3279if test "$netmap" != "no" ; then
3280 cat > $TMPC << EOF
3281#include <inttypes.h>
3282#include <net/if.h>
3283#include <net/netmap.h>
3284#include <net/netmap_user.h>
0a985b37
VM
3285#if (NETMAP_API < 11) || (NETMAP_API > 15)
3286#error
3287#endif
58952137
VM
3288int main(void) { return 0; }
3289EOF
3290 if compile_prog "" "" ; then
3291 netmap=yes
3292 else
3293 if test "$netmap" = "yes" ; then
3294 feature_not_found "netmap"
3295 fi
3296 netmap=no
3297 fi
3298fi
3299
47e98658
CB
3300##########################################
3301# libcap-ng library probe
3302if test "$cap_ng" != "no" ; then
3303 cap_libs="-lcap-ng"
3304 cat > $TMPC << EOF
3305#include <cap-ng.h>
3306int main(void)
3307{
3308 capng_capability_to_name(CAPNG_EFFECTIVE);
3309 return 0;
3310}
3311EOF
3312 if compile_prog "" "$cap_libs" ; then
3313 cap_ng=yes
3314 libs_tools="$cap_libs $libs_tools"
3315 else
3316 if test "$cap_ng" = "yes" ; then
21684af0 3317 feature_not_found "cap_ng" "Install libcap-ng devel"
47e98658
CB
3318 fi
3319 cap_ng=no
3320 fi
3321fi
3322
8f28f3fb 3323##########################################
c2de5c91 3324# Sound support libraries probe
8f28f3fb 3325
c2de5c91 3326audio_drv_probe()
3327{
3328 drv=$1
3329 hdr=$2
3330 lib=$3
3331 exp=$4
3332 cfl=$5
3333 cat > $TMPC << EOF
3334#include <$hdr>
3335int main(void) { $exp }
8f28f3fb 3336EOF
52166aa0 3337 if compile_prog "$cfl" "$lib" ; then
c2de5c91 3338 :
3339 else
76ad07a4
PM
3340 error_exit "$drv check failed" \
3341 "Make sure to have the $drv libs and headers installed."
c2de5c91 3342 fi
3343}
3344
89138857 3345audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
c2de5c91 3346for drv in $audio_drv_list; do
3347 case $drv in
3348 alsa)
3349 audio_drv_probe $drv alsa/asoundlib.h -lasound \
e35bcb0c 3350 "return snd_pcm_close((snd_pcm_t *)0);"
b1149911 3351 alsa_libs="-lasound"
c2de5c91 3352 ;;
3353
b8e59f18 3354 pa)
e58ff62d
PK
3355 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3356 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
b1149911 3357 pulse_libs="-lpulse"
67f86e8e 3358 audio_pt_int="yes"
b8e59f18 3359 ;;
3360
373967b2
GH
3361 sdl)
3362 if test "$sdl" = "no"; then
3363 error_exit "sdl not found or disabled, can not use sdl audio driver"
3364 fi
3365 ;;
3366
997e690a 3367 coreaudio)
b1149911 3368 coreaudio_libs="-framework CoreAudio"
997e690a
JQ
3369 ;;
3370
a4bf6780 3371 dsound)
b1149911 3372 dsound_libs="-lole32 -ldxguid"
d5631638 3373 audio_win_int="yes"
a4bf6780
JQ
3374 ;;
3375
3376 oss)
b1149911 3377 oss_libs="$oss_lib"
a4bf6780
JQ
3378 ;;
3379
373967b2
GH
3380 wav)
3381 # XXX: Probes for CoreAudio, DirectSound
2f6a1ab0
BS
3382 ;;
3383
e4c63a6a 3384 *)
1c9b2a52 3385 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
76ad07a4
PM
3386 error_exit "Unknown driver '$drv' selected" \
3387 "Possible drivers are: $audio_possible_drivers"
e4c63a6a 3388 }
3389 ;;
c2de5c91 3390 esac
3391done
8f28f3fb 3392
2e4d9fb1
AJ
3393##########################################
3394# BrlAPI probe
3395
4ffcedb6 3396if test "$brlapi" != "no" ; then
eb82284f
JQ
3397 brlapi_libs="-lbrlapi"
3398 cat > $TMPC << EOF
2e4d9fb1 3399#include <brlapi.h>
832ce9c2 3400#include <stddef.h>
2e4d9fb1
AJ
3401int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3402EOF
52166aa0 3403 if compile_prog "" "$brlapi_libs" ; then
eb82284f 3404 brlapi=yes
4ffcedb6
JQ
3405 else
3406 if test "$brlapi" = "yes" ; then
21684af0 3407 feature_not_found "brlapi" "Install brlapi devel"
4ffcedb6
JQ
3408 fi
3409 brlapi=no
eb82284f
JQ
3410 fi
3411fi
2e4d9fb1 3412
4d3b6f6e
AZ
3413##########################################
3414# curses probe
a3605bf6
MT
3415if test "$curses" != "no" ; then
3416 if test "$mingw32" = "yes" ; then
8ddc5bf9
ST
3417 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3418 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
a3605bf6 3419 else
7c703002 3420 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
8ddc5bf9 3421 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
a3605bf6 3422 fi
c584a6d0 3423 curses_found=no
4d3b6f6e 3424 cat > $TMPC << EOF
8ddc5bf9 3425#include <locale.h>
4d3b6f6e 3426#include <curses.h>
8ddc5bf9 3427#include <wchar.h>
ef9a2524 3428int main(void) {
8ddc5bf9
ST
3429 wchar_t wch = L'w';
3430 setlocale(LC_ALL, "");
ef9a2524 3431 resize_term(0, 0);
8ddc5bf9
ST
3432 addwstr(L"wide chars\n");
3433 addnwstr(&wch, 1);
7c703002 3434 add_wch(WACS_DEGREE);
271f37ab 3435 return 0;
ef9a2524 3436}
4d3b6f6e 3437EOF
ecbe251f 3438 IFS=:
8ddc5bf9 3439 for curses_inc in $curses_inc_list; do
b01a4fd3
PM
3440 # Make sure we get the wide character prototypes
3441 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
7c703002 3442 IFS=:
8ddc5bf9
ST
3443 for curses_lib in $curses_lib_list; do
3444 unset IFS
3445 if compile_prog "$curses_inc" "$curses_lib" ; then
3446 curses_found=yes
8ddc5bf9
ST
3447 break
3448 fi
3449 done
7c703002
ST
3450 if test "$curses_found" = yes ; then
3451 break
3452 fi
4f78ef9a 3453 done
ecbe251f 3454 unset IFS
c584a6d0
JQ
3455 if test "$curses_found" = "yes" ; then
3456 curses=yes
3457 else
3458 if test "$curses" = "yes" ; then
21684af0 3459 feature_not_found "curses" "Install ncurses devel"
c584a6d0
JQ
3460 fi
3461 curses=no
3462 fi
4f78ef9a 3463fi
4d3b6f6e 3464
769ce76d
AG
3465##########################################
3466# curl probe
788c8196 3467if test "$curl" != "no" ; then
65d5d3f9 3468 if $pkg_config libcurl --exists; then
a3605bf6
MT
3469 curlconfig="$pkg_config libcurl"
3470 else
3471 curlconfig=curl-config
3472 fi
769ce76d
AG
3473 cat > $TMPC << EOF
3474#include <curl/curl.h>
0b862ced 3475int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
769ce76d 3476EOF
89138857
SW
3477 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3478 curl_libs=$($curlconfig --libs 2>/dev/null)
b1d5a277 3479 if compile_prog "$curl_cflags" "$curl_libs" ; then
769ce76d 3480 curl=yes
788c8196
JQ
3481 else
3482 if test "$curl" = "yes" ; then
21684af0 3483 feature_not_found "curl" "Install libcurl devel"
788c8196
JQ
3484 fi
3485 curl=no
769ce76d
AG
3486 fi
3487fi # test "$curl"
3488
fb599c9a
AZ
3489##########################################
3490# bluez support probe
a20a6f46 3491if test "$bluez" != "no" ; then
e820e3f4
AZ
3492 cat > $TMPC << EOF
3493#include <bluetooth/bluetooth.h>
3494int main(void) { return bt_error(0); }
3495EOF
89138857
SW
3496 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3497 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
52166aa0 3498 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
a20a6f46 3499 bluez=yes
e482d56a 3500 libs_softmmu="$bluez_libs $libs_softmmu"
e820e3f4 3501 else
a20a6f46 3502 if test "$bluez" = "yes" ; then
21684af0 3503 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
a20a6f46 3504 fi
e820e3f4
AZ
3505 bluez="no"
3506 fi
fb599c9a
AZ
3507fi
3508
e18df141
AL
3509##########################################
3510# glib support probe
a52d28af 3511
e7b3af81 3512glib_req_ver=2.40
aa0d1f44
PB
3513glib_modules=gthread-2.0
3514if test "$modules" = yes; then
a88afc64 3515 glib_modules="$glib_modules gmodule-export-2.0"
aa0d1f44 3516fi
e26110cf 3517
4eaf7202
SJ
3518# This workaround is required due to a bug in pkg-config file for glib as it
3519# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3520
3521if test "$static" = yes -a "$mingw32" = yes; then
3522 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3523fi
3524
aa0d1f44 3525for i in $glib_modules; do
e26110cf 3526 if $pkg_config --atleast-version=$glib_req_ver $i; then
89138857
SW
3527 glib_cflags=$($pkg_config --cflags $i)
3528 glib_libs=$($pkg_config --libs $i)
4a058899 3529 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
e26110cf
FZ
3530 LIBS="$glib_libs $LIBS"
3531 libs_qga="$glib_libs $libs_qga"
3532 else
3533 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3534 fi
3535done
3536
977a82ab
DB
3537# Sanity check that the current size_t matches the
3538# size that glib thinks it should be. This catches
3539# problems on multi-arch where people try to build
3540# 32-bit QEMU while pointing at 64-bit glib headers
3541cat > $TMPC <<EOF
3542#include <glib.h>
3543#include <unistd.h>
3544
3545#define QEMU_BUILD_BUG_ON(x) \
3546 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3547
3548int main(void) {
3549 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3550 return 0;
3551}
3552EOF
3553
5919e032 3554if ! compile_prog "$CFLAGS" "$LIBS" ; then
977a82ab
DB
3555 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3556 "You probably need to set PKG_CONFIG_LIBDIR"\
3557 "to point to the right pkg-config files for your"\
3558 "build target"
3559fi
3560
9d41401b
MT
3561# g_test_trap_subprocess added in 2.38. Used by some tests.
3562glib_subprocess=yes
a049223a 3563if ! $pkg_config --atleast-version=2.38 glib-2.0; then
9d41401b
MT
3564 glib_subprocess=no
3565fi
3566
bbbf2e04
JS
3567# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3568cat > $TMPC << EOF
3569#include <glib.h>
3570int main(void) { return 0; }
3571EOF
3572if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3573 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3574 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3575 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3576 fi
3577fi
3578
e26110cf
FZ
3579##########################################
3580# SHA command probe for modules
3581if test "$modules" = yes; then
3582 shacmd_probe="sha1sum sha1 shasum"
3583 for c in $shacmd_probe; do
8ccefb91 3584 if has $c; then
e26110cf
FZ
3585 shacmd="$c"
3586 break
3587 fi
3588 done
3589 if test "$shacmd" = ""; then
3590 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3591 fi
e18df141
AL
3592fi
3593
e2134eb9
GH
3594##########################################
3595# pixman support probe
3596
35c4e86c 3597if test "$want_tools" = "no" -a "$softmmu" = "no"; then
74880fe2
RS
3598 pixman_cflags=
3599 pixman_libs=
35c4e86c 3600elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
89138857
SW
3601 pixman_cflags=$($pkg_config --cflags pixman-1)
3602 pixman_libs=$($pkg_config --libs pixman-1)
e2134eb9 3603else
c12b6d70
GH
3604 error_exit "pixman >= 0.21.8 not present." \
3605 "Please install the pixman devel package."
e2134eb9 3606fi
e2134eb9 3607
fe8fc5ae
PB
3608##########################################
3609# libmpathpersist probe
3610
3611if test "$mpath" != "no" ; then
3612 cat > $TMPC <<EOF
3613#include <libudev.h>
3614#include <mpath_persist.h>
3615unsigned mpath_mx_alloc_len = 1024;
3616int logsink;
b3f1c8c4
PB
3617static struct config *multipath_conf;
3618extern struct udev *udev;
3619extern struct config *get_multipath_config(void);
3620extern void put_multipath_config(struct config *conf);
3621struct udev *udev;
3622struct config *get_multipath_config(void) { return multipath_conf; }
3623void put_multipath_config(struct config *conf) { }
3624
fe8fc5ae 3625int main(void) {
b3f1c8c4
PB
3626 udev = udev_new();
3627 multipath_conf = mpath_lib_init();
fe8fc5ae
PB
3628 return 0;
3629}
3630EOF
3631 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3632 mpathpersist=yes
3633 else
3634 mpathpersist=no
3635 fi
3636else
3637 mpathpersist=no
3638fi
3639
17bff52b
MK
3640##########################################
3641# libcap probe
3642
3643if test "$cap" != "no" ; then
3644 cat > $TMPC <<EOF
3645#include <stdio.h>
3646#include <sys/capability.h>
cc939743 3647int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
17bff52b
MK
3648EOF
3649 if compile_prog "" "-lcap" ; then
3650 cap=yes
3651 else
3652 cap=no
3653 fi
3654fi
3655
414f0dab 3656##########################################
e5d355d1 3657# pthread probe
4b29ec41 3658PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3c529d93 3659
4dd75c70 3660pthread=no
e5d355d1 3661cat > $TMPC << EOF
3c529d93 3662#include <pthread.h>
7a42bbe4
SW
3663static void *f(void *p) { return NULL; }
3664int main(void) {
3665 pthread_t thread;
3666 pthread_create(&thread, 0, f, 0);
3667 return 0;
3668}
414f0dab 3669EOF
bd00d539
AF
3670if compile_prog "" "" ; then
3671 pthread=yes
3672else
3673 for pthread_lib in $PTHREADLIBS_LIST; do
3674 if compile_prog "" "$pthread_lib" ; then
3675 pthread=yes
e3c56761
PP
3676 found=no
3677 for lib_entry in $LIBS; do
3678 if test "$lib_entry" = "$pthread_lib"; then
3679 found=yes
3680 break
3681 fi
3682 done
3683 if test "$found" = "no"; then
3684 LIBS="$pthread_lib $LIBS"
14ab3aa7 3685 libs_qga="$pthread_lib $libs_qga"
e3c56761 3686 fi
409437e1 3687 PTHREAD_LIB="$pthread_lib"
bd00d539
AF
3688 break
3689 fi
3690 done
3691fi
414f0dab 3692
4617e593 3693if test "$mingw32" != yes -a "$pthread" = no; then
76ad07a4
PM
3694 error_exit "pthread check failed" \
3695 "Make sure to have the pthread libs and headers installed."
e5d355d1
AL
3696fi
3697
5c312079
DDAG
3698# check for pthread_setname_np
3699pthread_setname_np=no
3700cat > $TMPC << EOF
3701#include <pthread.h>
3702
3703static void *f(void *p) { return NULL; }
3704int main(void)
3705{
3706 pthread_t thread;
3707 pthread_create(&thread, 0, f, 0);
3708 pthread_setname_np(thread, "QEMU");
3709 return 0;
3710}
3711EOF
3712if compile_prog "" "$pthread_lib" ; then
3713 pthread_setname_np=yes
3714fi
3715
f27aaf4b
CB
3716##########################################
3717# rbd probe
3718if test "$rbd" != "no" ; then
3719 cat > $TMPC <<EOF
3720#include <stdio.h>
ad32e9c0 3721#include <rbd/librbd.h>
f27aaf4b 3722int main(void) {
ad32e9c0
JD
3723 rados_t cluster;
3724 rados_create(&cluster, NULL);
f27aaf4b
CB
3725 return 0;
3726}
3727EOF
ad32e9c0
JD
3728 rbd_libs="-lrbd -lrados"
3729 if compile_prog "" "$rbd_libs" ; then
3730 rbd=yes
f27aaf4b
CB
3731 else
3732 if test "$rbd" = "yes" ; then
21684af0 3733 feature_not_found "rados block device" "Install librbd/ceph devel"
f27aaf4b
CB
3734 fi
3735 rbd=no
3736 fi
f27aaf4b
CB
3737fi
3738
0a12ec87
RJ
3739##########################################
3740# libssh2 probe
4fc16838 3741min_libssh2_version=1.2.8
0a12ec87 3742if test "$libssh2" != "no" ; then
65d5d3f9 3743 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
89138857
SW
3744 libssh2_cflags=$($pkg_config libssh2 --cflags)
3745 libssh2_libs=$($pkg_config libssh2 --libs)
0a12ec87 3746 libssh2=yes
0a12ec87
RJ
3747 else
3748 if test "$libssh2" = "yes" ; then
4fc16838 3749 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
0a12ec87
RJ
3750 fi
3751 libssh2=no
3752 fi
3753fi
3754
9a2d462e
RJ
3755##########################################
3756# libssh2_sftp_fsync probe
3757
3758if test "$libssh2" = "yes"; then
3759 cat > $TMPC <<EOF
3760#include <stdio.h>
3761#include <libssh2.h>
3762#include <libssh2_sftp.h>
3763int main(void) {
3764 LIBSSH2_SESSION *session;
3765 LIBSSH2_SFTP *sftp;
3766 LIBSSH2_SFTP_HANDLE *sftp_handle;
3767 session = libssh2_session_init ();
3768 sftp = libssh2_sftp_init (session);
3769 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3770 libssh2_sftp_fsync (sftp_handle);
3771 return 0;
3772}
3773EOF
3774 # libssh2_cflags/libssh2_libs defined in previous test.
3775 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3776 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3777 fi
3778fi
3779
5c6c3a6c
CH
3780##########################################
3781# linux-aio probe
5c6c3a6c
CH
3782
3783if test "$linux_aio" != "no" ; then
3784 cat > $TMPC <<EOF
3785#include <libaio.h>
3786#include <sys/eventfd.h>
832ce9c2 3787#include <stddef.h>
5c6c3a6c
CH
3788int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3789EOF
3790 if compile_prog "" "-laio" ; then
3791 linux_aio=yes
5c6c3a6c
CH
3792 else
3793 if test "$linux_aio" = "yes" ; then
21684af0 3794 feature_not_found "linux AIO" "Install libaio devel"
5c6c3a6c 3795 fi
3cfcae3c 3796 linux_aio=no
5c6c3a6c
CH
3797 fi
3798fi
3799
3b8acc11
PB
3800##########################################
3801# TPM passthrough is only on x86 Linux
3802
3803if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3804 tpm_passthrough=$tpm
3805else
3806 tpm_passthrough=no
3807fi
3808
f4ede81e
AV
3809# TPM emulator is for all posix systems
3810if test "$mingw32" != "yes"; then
3811 tpm_emulator=$tpm
3812else
3813 tpm_emulator=no
3814fi
758e8e38
VJ
3815##########################################
3816# attr probe
3817
3818if test "$attr" != "no" ; then
3819 cat > $TMPC <<EOF
3820#include <stdio.h>
3821#include <sys/types.h>
f2338fb4
PB
3822#ifdef CONFIG_LIBATTR
3823#include <attr/xattr.h>
3824#else
4f26f2b6 3825#include <sys/xattr.h>
f2338fb4 3826#endif
758e8e38
VJ
3827int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3828EOF
4f26f2b6
AK
3829 if compile_prog "" "" ; then
3830 attr=yes
3831 # Older distros have <attr/xattr.h>, and need -lattr:
f2338fb4 3832 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
758e8e38
VJ
3833 attr=yes
3834 LIBS="-lattr $LIBS"
4f26f2b6 3835 libattr=yes
758e8e38
VJ
3836 else
3837 if test "$attr" = "yes" ; then
21684af0 3838 feature_not_found "ATTR" "Install libc6 or libattr devel"
758e8e38
VJ
3839 fi
3840 attr=no
3841 fi
3842fi
3843
bf9298b9
AL
3844##########################################
3845# iovec probe
3846cat > $TMPC <<EOF
db34f0b3 3847#include <sys/types.h>
bf9298b9 3848#include <sys/uio.h>
db34f0b3 3849#include <unistd.h>
f91f9bee 3850int main(void) { return sizeof(struct iovec); }
bf9298b9
AL
3851EOF
3852iovec=no
52166aa0 3853if compile_prog "" "" ; then
bf9298b9
AL
3854 iovec=yes
3855fi
3856
ceb42de8
AL
3857##########################################
3858# preadv probe
3859cat > $TMPC <<EOF
3860#include <sys/types.h>
3861#include <sys/uio.h>
3862#include <unistd.h>
c075a723 3863int main(void) { return preadv(0, 0, 0, 0); }
ceb42de8
AL
3864EOF
3865preadv=no
52166aa0 3866if compile_prog "" "" ; then
ceb42de8
AL
3867 preadv=yes
3868fi
3869
f652e6af
AJ
3870##########################################
3871# fdt probe
e169e1e1
PM
3872# fdt support is mandatory for at least some target architectures,
3873# so insist on it if we're building those system emulators.
3874fdt_required=no
3875for target in $target_list; do
3876 case $target in
a666409f 3877 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
e169e1e1
PM
3878 fdt_required=yes
3879 ;;
3880 esac
3881done
3882
3883if test "$fdt_required" = "yes"; then
3884 if test "$fdt" = "no"; then
3885 error_exit "fdt disabled but some requested targets require it." \
3886 "You can turn off fdt only if you also disable all the system emulation" \
3887 "targets which need it (by specifying a cut down --target-list)."
3888 fi
3889 fdt=yes
3890fi
3891
2df87df7 3892if test "$fdt" != "no" ; then
b41af4ba 3893 fdt_libs="-lfdt"
96ce6545 3894 # explicitly check for libfdt_env.h as it is missing in some stable installs
6e85fce0 3895 # and test for required functions to make sure we are on a version >= 1.4.2
b41af4ba 3896 cat > $TMPC << EOF
31ce0adb 3897#include <libfdt.h>
96ce6545 3898#include <libfdt_env.h>
6e85fce0 3899int main(void) { fdt_first_subnode(0, 0); return 0; }
f652e6af 3900EOF
52166aa0 3901 if compile_prog "" "$fdt_libs" ; then
a540f158 3902 # system DTC is good - use it
e3971d61 3903 fdt=system
a540f158 3904 else
aef45d51
DB
3905 # have GIT checkout, so activate dtc submodule
3906 if test -e "${source_path}/.git" ; then
3907 git_submodules="${git_submodules} dtc"
3908 fi
3909 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
e3971d61 3910 fdt=git
aef45d51
DB
3911 mkdir -p dtc
3912 if [ "$pwd_is_source_path" != "y" ] ; then
3913 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3914 symlink "$source_path/dtc/scripts" "dtc/scripts"
3915 fi
3916 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
8a99e9a3
PMD
3917 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3918 fdt_libs="$fdt_libs"
aef45d51
DB
3919 elif test "$fdt" = "yes" ; then
3920 # Not a git build & no libfdt found, prompt for system install
3921 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3922 "Please install the DTC (libfdt) devel package"
3923 else
3924 # don't have and don't want
3925 fdt_libs=
3926 fdt=no
3927 fi
f652e6af
AJ
3928 fi
3929fi
3930
a540f158
PC
3931libs_softmmu="$libs_softmmu $fdt_libs"
3932
20ff075b 3933##########################################
fb719563 3934# opengl probe (for sdl2, gtk, milkymist-tmu2)
b1546f32 3935
da076ffe 3936if test "$opengl" != "no" ; then
4939a1df 3937 opengl_pkgs="epoxy gbm"
5f9b1e35
GH
3938 if $pkg_config $opengl_pkgs; then
3939 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3940 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
da076ffe 3941 opengl=yes
925a0400
GH
3942 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3943 gtk_gl="yes"
3944 fi
cc720a5d 3945 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
20ff075b 3946 else
da076ffe 3947 if test "$opengl" = "yes" ; then
dcf30025 3948 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
20ff075b 3949 fi
f676c67e 3950 opengl_cflags=""
da076ffe
GH
3951 opengl_libs=""
3952 opengl=no
20ff075b
MW
3953 fi
3954fi
3955
014cb152
GH
3956if test "$opengl" = "yes"; then
3957 cat > $TMPC << EOF
3958#include <epoxy/egl.h>
3959#ifndef EGL_MESA_image_dma_buf_export
3960# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3961#endif
3962int main(void) { return 0; }
3963EOF
3964 if compile_prog "" "" ; then
3965 opengl_dmabuf=yes
3966 fi
3967fi
c9a12e75 3968
ed279a06
KK
3969##########################################
3970# libxml2 probe
3971if test "$libxml2" != "no" ; then
3972 if $pkg_config --exists libxml-2.0; then
3973 libxml2="yes"
3974 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3975 libxml2_libs=$($pkg_config --libs libxml-2.0)
3976 else
3977 if test "$libxml2" = "yes"; then
3978 feature_not_found "libxml2" "Install libxml2 devel"
3979 fi
3980 libxml2="no"
3981 fi
3982fi
c9a12e75 3983
eb100396
BR
3984##########################################
3985# glusterfs probe
3986if test "$glusterfs" != "no" ; then
65d5d3f9 3987 if $pkg_config --atleast-version=3 glusterfs-api; then
e01bee08 3988 glusterfs="yes"
89138857
SW
3989 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3990 glusterfs_libs=$($pkg_config --libs glusterfs-api)
d85fa9eb
JC
3991 if $pkg_config --atleast-version=4 glusterfs-api; then
3992 glusterfs_xlator_opt="yes"
3993 fi
65d5d3f9 3994 if $pkg_config --atleast-version=5 glusterfs-api; then
0c14fb47
BR
3995 glusterfs_discard="yes"
3996 fi
7c815372 3997 if $pkg_config --atleast-version=6 glusterfs-api; then
df3a429a 3998 glusterfs_fallocate="yes"
7c815372
BR
3999 glusterfs_zerofill="yes"
4000 fi
eb100396
BR
4001 else
4002 if test "$glusterfs" = "yes" ; then
8efc9363
HT
4003 feature_not_found "GlusterFS backend support" \
4004 "Install glusterfs-api devel >= 3"
eb100396 4005 fi
e01bee08 4006 glusterfs="no"
eb100396
BR
4007 fi
4008fi
4009
39386ac7 4010# Check for inotify functions when we are building linux-user
3b3f24ad
AJ
4011# emulator. This is done because older glibc versions don't
4012# have syscall stubs for these implemented. In that case we
4013# don't provide them even if kernel supports them.
4014#
4015inotify=no
67ba57f6 4016cat > $TMPC << EOF
3b3f24ad
AJ
4017#include <sys/inotify.h>
4018
4019int
4020main(void)
4021{
4022 /* try to start inotify */
8690e420 4023 return inotify_init();
3b3f24ad
AJ
4024}
4025EOF
52166aa0 4026if compile_prog "" "" ; then
67ba57f6 4027 inotify=yes
3b3f24ad
AJ
4028fi
4029
c05c7a73
RV
4030inotify1=no
4031cat > $TMPC << EOF
4032#include <sys/inotify.h>
4033
4034int
4035main(void)
4036{
4037 /* try to start inotify */
4038 return inotify_init1(0);
4039}
4040EOF
4041if compile_prog "" "" ; then
4042 inotify1=yes
4043fi
4044
099d6b0f
RV
4045# check if pipe2 is there
4046pipe2=no
4047cat > $TMPC << EOF
099d6b0f
RV
4048#include <unistd.h>
4049#include <fcntl.h>
4050
4051int main(void)
4052{
4053 int pipefd[2];
9bca8162 4054 return pipe2(pipefd, O_CLOEXEC);
099d6b0f
RV
4055}
4056EOF
52166aa0 4057if compile_prog "" "" ; then
099d6b0f
RV
4058 pipe2=yes
4059fi
4060
40ff6d7e
KW
4061# check if accept4 is there
4062accept4=no
4063cat > $TMPC << EOF
40ff6d7e
KW
4064#include <sys/socket.h>
4065#include <stddef.h>
4066
4067int main(void)
4068{
4069 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4070 return 0;
4071}
4072EOF
4073if compile_prog "" "" ; then
4074 accept4=yes
4075fi
4076
3ce34dfb
VS
4077# check if tee/splice is there. vmsplice was added same time.
4078splice=no
4079cat > $TMPC << EOF
3ce34dfb
VS
4080#include <unistd.h>
4081#include <fcntl.h>
4082#include <limits.h>
4083
4084int main(void)
4085{
66ea0f22 4086 int len, fd = 0;
3ce34dfb
VS
4087 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4088 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4089 return 0;
4090}
4091EOF
52166aa0 4092if compile_prog "" "" ; then
3ce34dfb
VS
4093 splice=yes
4094fi
4095
a99d57bb
WG
4096##########################################
4097# libnuma probe
4098
4099if test "$numa" != "no" ; then
4100 cat > $TMPC << EOF
4101#include <numa.h>
4102int main(void) { return numa_available(); }
4103EOF
4104
4105 if compile_prog "" "-lnuma" ; then
4106 numa=yes
4107 libs_softmmu="-lnuma $libs_softmmu"
4108 else
4109 if test "$numa" = "yes" ; then
4110 feature_not_found "numa" "install numactl devel"
4111 fi
4112 numa=no
4113 fi
4114fi
4115
7b01cb97
AD
4116if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4117 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4118 exit 1
4119fi
4120
5a22ab71
YZ
4121# Even if malloc_trim() is available, these non-libc memory allocators
4122# do not support it.
4123if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4124 if test "$malloc_trim" = "yes" ; then
4125 echo "Disabling malloc_trim with non-libc memory allocator"
4126 fi
4127 malloc_trim="no"
4128fi
4129
4130#######################################
4131# malloc_trim
4132
4133if test "$malloc_trim" != "no" ; then
4134 cat > $TMPC << EOF
4135#include <malloc.h>
4136int main(void) { malloc_trim(0); return 0; }
4137EOF
4138 if compile_prog "" "" ; then
4139 malloc_trim="yes"
4140 else
4141 malloc_trim="no"
4142 fi
4143fi
4144
2847b469
FZ
4145##########################################
4146# tcmalloc probe
4147
4148if test "$tcmalloc" = "yes" ; then
4149 cat > $TMPC << EOF
4150#include <stdlib.h>
4151int main(void) { malloc(1); return 0; }
4152EOF
4153
4154 if compile_prog "" "-ltcmalloc" ; then
4155 LIBS="-ltcmalloc $LIBS"
4156 else
4157 feature_not_found "tcmalloc" "install gperftools devel"
4158 fi
4159fi
4160
7b01cb97
AD
4161##########################################
4162# jemalloc probe
4163
4164if test "$jemalloc" = "yes" ; then
4165 cat > $TMPC << EOF
4166#include <stdlib.h>
4167int main(void) { malloc(1); return 0; }
4168EOF
4169
4170 if compile_prog "" "-ljemalloc" ; then
4171 LIBS="-ljemalloc $LIBS"
4172 else
4173 feature_not_found "jemalloc" "install jemalloc devel"
4174 fi
4175fi
4176
dcc38d1c
MT
4177##########################################
4178# signalfd probe
4179signalfd="no"
4180cat > $TMPC << EOF
dcc38d1c
MT
4181#include <unistd.h>
4182#include <sys/syscall.h>
4183#include <signal.h>
4184int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4185EOF
4186
4187if compile_prog "" "" ; then
4188 signalfd=yes
4189fi
4190
c2882b96
RV
4191# check if eventfd is supported
4192eventfd=no
4193cat > $TMPC << EOF
4194#include <sys/eventfd.h>
4195
4196int main(void)
4197{
55cc7f3e 4198 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
c2882b96
RV
4199}
4200EOF
4201if compile_prog "" "" ; then
4202 eventfd=yes
4203fi
4204
751bcc39
MAL
4205# check if memfd is supported
4206memfd=no
4207cat > $TMPC << EOF
75e5b70e 4208#include <sys/mman.h>
751bcc39
MAL
4209
4210int main(void)
4211{
4212 return memfd_create("foo", MFD_ALLOW_SEALING);
4213}
4214EOF
4215if compile_prog "" "" ; then
4216 memfd=yes
4217fi
4218
4219
4220
d0927938
UH
4221# check for fallocate
4222fallocate=no
4223cat > $TMPC << EOF
4224#include <fcntl.h>
4225
4226int main(void)
4227{
4228 fallocate(0, 0, 0, 0);
4229 return 0;
4230}
4231EOF
8fb03151 4232if compile_prog "" "" ; then
d0927938
UH
4233 fallocate=yes
4234fi
4235
3d4fa43e
KK
4236# check for fallocate hole punching
4237fallocate_punch_hole=no
4238cat > $TMPC << EOF
4239#include <fcntl.h>
4240#include <linux/falloc.h>
4241
4242int main(void)
4243{
4244 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4245 return 0;
4246}
4247EOF
4248if compile_prog "" "" ; then
4249 fallocate_punch_hole=yes
4250fi
4251
b953f075
DL
4252# check that fallocate supports range zeroing inside the file
4253fallocate_zero_range=no
4254cat > $TMPC << EOF
4255#include <fcntl.h>
4256#include <linux/falloc.h>
4257
4258int main(void)
4259{
4260 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4261 return 0;
4262}
4263EOF
4264if compile_prog "" "" ; then
4265 fallocate_zero_range=yes
4266fi
4267
ed911435
KW
4268# check for posix_fallocate
4269posix_fallocate=no
4270cat > $TMPC << EOF
4271#include <fcntl.h>
4272
4273int main(void)
4274{
4275 posix_fallocate(0, 0, 0);
4276 return 0;
4277}
4278EOF
4279if compile_prog "" "" ; then
4280 posix_fallocate=yes
4281fi
4282
c727f47d
PM
4283# check for sync_file_range
4284sync_file_range=no
4285cat > $TMPC << EOF
4286#include <fcntl.h>
4287
4288int main(void)
4289{
4290 sync_file_range(0, 0, 0, 0);
4291 return 0;
4292}
4293EOF
8fb03151 4294if compile_prog "" "" ; then
c727f47d
PM
4295 sync_file_range=yes
4296fi
4297
dace20dc
PM
4298# check for linux/fiemap.h and FS_IOC_FIEMAP
4299fiemap=no
4300cat > $TMPC << EOF
4301#include <sys/ioctl.h>
4302#include <linux/fs.h>
4303#include <linux/fiemap.h>
4304
4305int main(void)
4306{
4307 ioctl(0, FS_IOC_FIEMAP, 0);
4308 return 0;
4309}
4310EOF
8fb03151 4311if compile_prog "" "" ; then
dace20dc
PM
4312 fiemap=yes
4313fi
4314
d0927938
UH
4315# check for dup3
4316dup3=no
4317cat > $TMPC << EOF
4318#include <unistd.h>
4319
4320int main(void)
4321{
4322 dup3(0, 0, 0);
4323 return 0;
4324}
4325EOF
78f5d726 4326if compile_prog "" "" ; then
d0927938
UH
4327 dup3=yes
4328fi
4329
4e0c6529
AB
4330# check for ppoll support
4331ppoll=no
4332cat > $TMPC << EOF
4333#include <poll.h>
4334
4335int main(void)
4336{
4337 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4338 ppoll(&pfd, 1, 0, 0);
4339 return 0;
4340}
4341EOF
4342if compile_prog "" "" ; then
4343 ppoll=yes
4344fi
4345
cd758dd0
AB
4346# check for prctl(PR_SET_TIMERSLACK , ... ) support
4347prctl_pr_set_timerslack=no
4348cat > $TMPC << EOF
4349#include <sys/prctl.h>
4350
4351int main(void)
4352{
4353 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4354 return 0;
4355}
4356EOF
4357if compile_prog "" "" ; then
4358 prctl_pr_set_timerslack=yes
4359fi
4360
3b6edd16
PM
4361# check for epoll support
4362epoll=no
4363cat > $TMPC << EOF
4364#include <sys/epoll.h>
4365
4366int main(void)
4367{
4368 epoll_create(0);
4369 return 0;
4370}
4371EOF
8fb03151 4372if compile_prog "" "" ; then
3b6edd16
PM
4373 epoll=yes
4374fi
4375
227f0214
PM
4376# epoll_create1 is a later addition
4377# so we must check separately for its presence
3b6edd16
PM
4378epoll_create1=no
4379cat > $TMPC << EOF
4380#include <sys/epoll.h>
4381
4382int main(void)
4383{
19e83f6b
PM
4384 /* Note that we use epoll_create1 as a value, not as
4385 * a function being called. This is necessary so that on
4386 * old SPARC glibc versions where the function was present in
4387 * the library but not declared in the header file we will
4388 * fail the configure check. (Otherwise we will get a compiler
4389 * warning but not an error, and will proceed to fail the
4390 * qemu compile where we compile with -Werror.)
4391 */
c075a723 4392 return (int)(uintptr_t)&epoll_create1;
3b6edd16
PM
4393}
4394EOF
8fb03151 4395if compile_prog "" "" ; then
3b6edd16
PM
4396 epoll_create1=yes
4397fi
4398
a8fd1aba
PM
4399# check for sendfile support
4400sendfile=no
4401cat > $TMPC << EOF
4402#include <sys/sendfile.h>
4403
4404int main(void)
4405{
4406 return sendfile(0, 0, 0, 0);
4407}
4408EOF
4409if compile_prog "" "" ; then
4410 sendfile=yes
4411fi
4412
51834341
RV
4413# check for timerfd support (glibc 2.8 and newer)
4414timerfd=no
4415cat > $TMPC << EOF
4416#include <sys/timerfd.h>
4417
4418int main(void)
4419{
4420 return(timerfd_create(CLOCK_REALTIME, 0));
4421}
4422EOF
4423if compile_prog "" "" ; then
4424 timerfd=yes
4425fi
4426
9af5c906
RV
4427# check for setns and unshare support
4428setns=no
4429cat > $TMPC << EOF
4430#include <sched.h>
4431
4432int main(void)
4433{
4434 int ret;
4435 ret = setns(0, 0);
4436 ret = unshare(0);
4437 return ret;
4438}
4439EOF
4440if compile_prog "" "" ; then
4441 setns=yes
4442fi
4443
38860a03
AM
4444# clock_adjtime probe
4445clock_adjtime=no
4446cat > $TMPC <<EOF
4447#include <time.h>
4448
4449int main(void)
4450{
4451 return clock_adjtime(0, 0);
4452}
4453EOF
4454clock_adjtime=no
4455if compile_prog "" "" ; then
4456 clock_adjtime=yes
4457fi
4458
5a03cd00
AM
4459# syncfs probe
4460syncfs=no
4461cat > $TMPC <<EOF
4462#include <unistd.h>
4463
4464int main(void)
4465{
4466 return syncfs(0);
4467}
4468EOF
4469syncfs=no
4470if compile_prog "" "" ; then
4471 syncfs=yes
4472fi
4473
cc8ae6de 4474# Check if tools are available to build documentation.
a25dba17 4475if test "$docs" != "no" ; then
01668d98 4476 if has makeinfo && has pod2man; then
a25dba17 4477 docs=yes
83a3ab8b 4478 else
a25dba17 4479 if test "$docs" = "yes" ; then
21684af0 4480 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
83a3ab8b 4481 fi
a25dba17 4482 docs=no
83a3ab8b 4483 fi
cc8ae6de
PB
4484fi
4485
f514f41c 4486# Search for bswap_32 function
6ae9a1f4
JQ
4487byteswap_h=no
4488cat > $TMPC << EOF
4489#include <byteswap.h>
4490int main(void) { return bswap_32(0); }
4491EOF
52166aa0 4492if compile_prog "" "" ; then
6ae9a1f4
JQ
4493 byteswap_h=yes
4494fi
4495
75f13596 4496# Search for bswap32 function
6ae9a1f4
JQ
4497bswap_h=no
4498cat > $TMPC << EOF
4499#include <sys/endian.h>
4500#include <sys/types.h>
4501#include <machine/bswap.h>
4502int main(void) { return bswap32(0); }
4503EOF
52166aa0 4504if compile_prog "" "" ; then
6ae9a1f4
JQ
4505 bswap_h=yes
4506fi
4507
c589b249 4508##########################################
e49ab19f 4509# Do we have libiscsi >= 1.9.0
c589b249 4510if test "$libiscsi" != "no" ; then
e49ab19f 4511 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3c33ea96 4512 libiscsi="yes"
ca871ec8
SW
4513 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4514 libiscsi_libs=$($pkg_config --libs libiscsi)
c589b249
RS
4515 else
4516 if test "$libiscsi" = "yes" ; then
e49ab19f 4517 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
c589b249
RS
4518 fi
4519 libiscsi="no"
4520 fi
4521fi
4522
8bacde8d
NC
4523##########################################
4524# Do we need libm
4525cat > $TMPC << EOF
4526#include <math.h>
f80ea986 4527int main(int argc, char **argv) { return isnan(sin((double)argc)); }
8bacde8d
NC
4528EOF
4529if compile_prog "" "" ; then
4530 :
4531elif compile_prog "" "-lm" ; then
4532 LIBS="-lm $LIBS"
4533 libs_qga="-lm $libs_qga"
4534else
76ad07a4 4535 error_exit "libm check failed"
8bacde8d
NC
4536fi
4537
da93a1fd
AL
4538##########################################
4539# Do we need librt
8bacde8d
NC
4540# uClibc provides 2 versions of clock_gettime(), one with realtime
4541# support and one without. This means that the clock_gettime() don't
4542# need -lrt. We still need it for timer_create() so we check for this
4543# function in addition.
da93a1fd
AL
4544cat > $TMPC <<EOF
4545#include <signal.h>
4546#include <time.h>
8bacde8d
NC
4547int main(void) {
4548 timer_create(CLOCK_REALTIME, NULL, NULL);
4549 return clock_gettime(CLOCK_REALTIME, NULL);
4550}
da93a1fd
AL
4551EOF
4552
52166aa0 4553if compile_prog "" "" ; then
07ffa4bd 4554 :
8bacde8d 4555# we need pthread for static linking. use previous pthread test result
18e588b1
RL
4556elif compile_prog "" "$pthread_lib -lrt" ; then
4557 LIBS="$LIBS -lrt"
4558 libs_qga="$libs_qga -lrt"
da93a1fd
AL
4559fi
4560
31ff504d 4561if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
78723752 4562 "$haiku" != "yes" ; then
6362a53f
JQ
4563 libs_softmmu="-lutil $libs_softmmu"
4564fi
4565
de5071c5 4566##########################################
cd4ec0b4
GH
4567# spice probe
4568if test "$spice" != "no" ; then
4569 cat > $TMPC << EOF
4570#include <spice.h>
4571int main(void) { spice_server_new(); return 0; }
4572EOF
710fc4f5
JD
4573 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4574 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
65d5d3f9
SW
4575 if $pkg_config --atleast-version=0.12.0 spice-server && \
4576 $pkg_config --atleast-version=0.12.3 spice-protocol && \
cd4ec0b4
GH
4577 compile_prog "$spice_cflags" "$spice_libs" ; then
4578 spice="yes"
4579 libs_softmmu="$libs_softmmu $spice_libs"
4580 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
2e0e3c39
AL
4581 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4582 spice_server_version=$($pkg_config --modversion spice-server)
cd4ec0b4
GH
4583 else
4584 if test "$spice" = "yes" ; then
8efc9363
HT
4585 feature_not_found "spice" \
4586 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
cd4ec0b4
GH
4587 fi
4588 spice="no"
4589 fi
4590fi
4591
7b02f544 4592# check for smartcard support
7b02f544 4593if test "$smartcard" != "no"; then
0f5c642d 4594 if $pkg_config --atleast-version=2.5.1 libcacard; then
7b02f544
MAL
4595 libcacard_cflags=$($pkg_config --cflags libcacard)
4596 libcacard_libs=$($pkg_config --libs libcacard)
7b02f544 4597 smartcard="yes"
afd347ab 4598 else
7b02f544
MAL
4599 if test "$smartcard" = "yes"; then
4600 feature_not_found "smartcard" "Install libcacard devel"
111a38b0 4601 fi
7b02f544 4602 smartcard="no"
111a38b0
RR
4603 fi
4604fi
111a38b0 4605
2b2325ff
GH
4606# check for libusb
4607if test "$libusb" != "no" ; then
65d5d3f9 4608 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
2b2325ff 4609 libusb="yes"
ca871ec8
SW
4610 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4611 libusb_libs=$($pkg_config --libs libusb-1.0)
2b2325ff
GH
4612 else
4613 if test "$libusb" = "yes"; then
8efc9363 4614 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
2b2325ff
GH
4615 fi
4616 libusb="no"
4617 fi
4618fi
4619
69354a83
HG
4620# check for usbredirparser for usb network redirection support
4621if test "$usb_redir" != "no" ; then
65d5d3f9 4622 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
69354a83 4623 usb_redir="yes"
ca871ec8
SW
4624 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4625 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
69354a83
HG
4626 else
4627 if test "$usb_redir" = "yes"; then
21684af0 4628 feature_not_found "usb-redir" "Install usbredir devel"
69354a83
HG
4629 fi
4630 usb_redir="no"
4631 fi
4632fi
4633
d9840e25
TS
4634##########################################
4635# check if we have VSS SDK headers for win
4636
4637if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4638 case "$vss_win32_sdk" in
690604f6 4639 "") vss_win32_include="-isystem $source_path" ;;
d9840e25
TS
4640 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4641 # handle path with spaces. So we symlink the headers into ".sdk/vss".
690604f6 4642 vss_win32_include="-isystem $source_path/.sdk/vss"
d9840e25
TS
4643 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4644 ;;
690604f6 4645 *) vss_win32_include="-isystem $vss_win32_sdk"
d9840e25
TS
4646 esac
4647 cat > $TMPC << EOF
4648#define __MIDL_user_allocate_free_DEFINED__
4649#include <inc/win2003/vss.h>
4650int main(void) { return VSS_CTX_BACKUP; }
4651EOF
4652 if compile_prog "$vss_win32_include" "" ; then
4653 guest_agent_with_vss="yes"
4654 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
315d3184 4655 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
f33ca81f 4656 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
d9840e25
TS
4657 else
4658 if test "$vss_win32_sdk" != "" ; then
4659 echo "ERROR: Please download and install Microsoft VSS SDK:"
4660 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4661 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4662 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4663 echo "ERROR: The headers are extracted in the directory \`inc'."
4664 feature_not_found "VSS support"
4665 fi
4666 guest_agent_with_vss="no"
4667 fi
4668fi
4669
4670##########################################
4671# lookup Windows platform SDK (if not specified)
4672# The SDK is needed only to build .tlb (type library) file of guest agent
4673# VSS provider from the source. It is usually unnecessary because the
4674# pre-compiled .tlb file is included.
4675
4676if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4677 if test -z "$win_sdk"; then
4678 programfiles="$PROGRAMFILES"
4679 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4680 if test -n "$programfiles"; then
4681 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4682 else
4683 feature_not_found "Windows SDK"
4684 fi
4685 elif test "$win_sdk" = "no"; then
4686 win_sdk=""
4687 fi
4688fi
4689
50cbebb9
MR
4690##########################################
4691# check if mingw environment provides a recent ntddscsi.h
4692if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4693 cat > $TMPC << EOF
4694#include <windows.h>
4695#include <ntddscsi.h>
4696int main(void) {
4697#if !defined(IOCTL_SCSI_GET_ADDRESS)
4698#error Missing required ioctl definitions
4699#endif
4700 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4701 return addr.Lun;
4702}
4703EOF
4704 if compile_prog "" "" ; then
4705 guest_agent_ntddscsi=yes
c54e1eb4 4706 libs_qga="-lsetupapi $libs_qga"
50cbebb9
MR
4707 fi
4708fi
4709
9d9e1521
GH
4710##########################################
4711# virgl renderer probe
4712
4713if test "$virglrenderer" != "no" ; then
4714 cat > $TMPC << EOF
4715#include <virglrenderer.h>
4716int main(void) { virgl_renderer_poll(); return 0; }
4717EOF
4718 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4719 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
47479c55 4720 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
9d9e1521
GH
4721 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4722 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4723 virglrenderer="yes"
4724 else
4725 if test "$virglrenderer" = "yes" ; then
4726 feature_not_found "virglrenderer"
4727 fi
4728 virglrenderer="no"
4729 fi
4730fi
4731
8ca80760
RH
4732##########################################
4733# capstone
4734
e219c499
RH
4735case "$capstone" in
4736 "" | yes)
4737 if $pkg_config capstone; then
4738 capstone=system
123ac0bb 4739 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
e219c499
RH
4740 capstone=git
4741 elif test -e "${source_path}/capstone/Makefile" ; then
4742 capstone=internal
4743 elif test -z "$capstone" ; then
4744 capstone=no
4745 else
4746 feature_not_found "capstone" "Install capstone devel or git submodule"
4747 fi
4748 ;;
4749
4750 system)
4751 if ! $pkg_config capstone; then
4752 feature_not_found "capstone" "Install capstone devel"
4753 fi
4754 ;;
4755esac
4756
4757case "$capstone" in
4758 git | internal)
4759 if test "$capstone" = git; then
4760 git_submodules="${git_submodules} capstone"
4761 fi
4762 mkdir -p capstone
4763 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4764 if test "$mingw32" = "yes"; then
4765 LIBCAPSTONE=capstone.lib
4766 else
4767 LIBCAPSTONE=libcapstone.a
4768 fi
4769 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4770 ;;
4771
4772 system)
8ca80760
RH
4773 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4774 LIBS="$($pkg_config --libs capstone) $LIBS"
e219c499
RH
4775 ;;
4776
4777 no)
4778 ;;
4779 *)
4780 error_exit "Unknown state for capstone: $capstone"
4781 ;;
4782esac
8ca80760 4783
5f6b9e8f
BS
4784##########################################
4785# check if we have fdatasync
4786
4787fdatasync=no
4788cat > $TMPC << EOF
4789#include <unistd.h>
d1722a27
AR
4790int main(void) {
4791#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4792return fdatasync(0);
4793#else
e172fe11 4794#error Not supported
d1722a27
AR
4795#endif
4796}
5f6b9e8f
BS
4797EOF
4798if compile_prog "" "" ; then
4799 fdatasync=yes
4800fi
4801
e78815a5
AF
4802##########################################
4803# check if we have madvise
4804
4805madvise=no
4806cat > $TMPC << EOF
4807#include <sys/types.h>
4808#include <sys/mman.h>
832ce9c2 4809#include <stddef.h>
e78815a5
AF
4810int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4811EOF
4812if compile_prog "" "" ; then
4813 madvise=yes
4814fi
4815
4816##########################################
4817# check if we have posix_madvise
4818
4819posix_madvise=no
4820cat > $TMPC << EOF
4821#include <sys/mman.h>
832ce9c2 4822#include <stddef.h>
e78815a5
AF
4823int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4824EOF
4825if compile_prog "" "" ; then
4826 posix_madvise=yes
4827fi
4828
9bc5a719
AG
4829##########################################
4830# check if we have posix_memalign()
4831
4832posix_memalign=no
4833cat > $TMPC << EOF
4834#include <stdlib.h>
4835int main(void) {
4836 void *p;
4837 return posix_memalign(&p, 8, 8);
4838}
4839EOF
4840if compile_prog "" "" ; then
4841 posix_memalign=yes
4842fi
4843
0a852417
PD
4844##########################################
4845# check if we have posix_syslog
4846
4847posix_syslog=no
4848cat > $TMPC << EOF
4849#include <syslog.h>
4850int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4851EOF
4852if compile_prog "" "" ; then
4853 posix_syslog=yes
4854fi
4855
401bc051
PM
4856##########################################
4857# check if we have sem_timedwait
4858
4859sem_timedwait=no
4860cat > $TMPC << EOF
4861#include <semaphore.h>
4862int main(void) { return sem_timedwait(0, 0); }
4863EOF
4864if compile_prog "" "" ; then
4865 sem_timedwait=yes
4866fi
4867
5c99fa37
KF
4868##########################################
4869# check if we have strchrnul
4870
4871strchrnul=no
4872cat > $TMPC << EOF
4873#include <string.h>
4874int main(void);
4875// Use a haystack that the compiler shouldn't be able to constant fold
4876char *haystack = (char*)&main;
4877int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4878EOF
4879if compile_prog "" "" ; then
4880 strchrnul=yes
4881fi
4882
94a420b1
SH
4883##########################################
4884# check if trace backend exists
4885
5b808275 4886$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 4887if test "$?" -ne 0 ; then
5b808275
LV
4888 error_exit "invalid trace backends" \
4889 "Please choose supported trace backends."
94a420b1
SH
4890fi
4891
7e24e92a
SH
4892##########################################
4893# For 'ust' backend, test if ust headers are present
5b808275 4894if have_backend "ust"; then
7e24e92a 4895 cat > $TMPC << EOF
bf15f63c 4896#include <lttng/tracepoint.h>
7e24e92a
SH
4897int main(void) { return 0; }
4898EOF
c79ed23d 4899 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
bf15f63c 4900 if $pkg_config lttng-ust --exists; then
89138857 4901 lttng_ust_libs=$($pkg_config --libs lttng-ust)
bf15f63c 4902 else
c79ed23d 4903 lttng_ust_libs="-llttng-ust -ldl"
bf15f63c
MG
4904 fi
4905 if $pkg_config liburcu-bp --exists; then
89138857 4906 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
bf15f63c
MG
4907 else
4908 urcu_bp_libs="-lurcu-bp"
4909 fi
4910
4911 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4912 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
7e24e92a 4913 else
bf15f63c 4914 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
4915 fi
4916fi
b3d08c02
DB
4917
4918##########################################
4919# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 4920if have_backend "dtrace"; then
b3d08c02 4921 if ! has 'dtrace' ; then
76ad07a4 4922 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 4923 fi
c276b17d
DB
4924 trace_backend_stap="no"
4925 if has 'stap' ; then
4926 trace_backend_stap="yes"
4927 fi
b3d08c02
DB
4928fi
4929
023367e6 4930##########################################
519175a2 4931# check and set a backend for coroutine
d0e2fce5 4932
7c2acc70 4933# We prefer ucontext, but it's not always possible. The fallback
33c53c54
DB
4934# is sigcontext. On Windows the only valid backend is the Windows
4935# specific one.
7c2acc70
PM
4936
4937ucontext_works=no
4938if test "$darwin" != "yes"; then
4939 cat > $TMPC << EOF
d0e2fce5 4940#include <ucontext.h>
cdf84806
PM
4941#ifdef __stub_makecontext
4942#error Ignoring glibc stub makecontext which will always fail
4943#endif
75cafad7 4944int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 4945EOF
7c2acc70
PM
4946 if compile_prog "" "" ; then
4947 ucontext_works=yes
4948 fi
4949fi
4950
4951if test "$coroutine" = ""; then
4952 if test "$mingw32" = "yes"; then
4953 coroutine=win32
4954 elif test "$ucontext_works" = "yes"; then
4955 coroutine=ucontext
4956 else
4957 coroutine=sigaltstack
d0e2fce5 4958 fi
519175a2 4959else
7c2acc70
PM
4960 case $coroutine in
4961 windows)
4962 if test "$mingw32" != "yes"; then
4963 error_exit "'windows' coroutine backend only valid for Windows"
4964 fi
4965 # Unfortunately the user visible backend name doesn't match the
4966 # coroutine-*.c filename for this case, so we have to adjust it here.
4967 coroutine=win32
4968 ;;
4969 ucontext)
4970 if test "$ucontext_works" != "yes"; then
4971 feature_not_found "ucontext"
4972 fi
4973 ;;
33c53c54 4974 sigaltstack)
7c2acc70
PM
4975 if test "$mingw32" = "yes"; then
4976 error_exit "only the 'windows' coroutine backend is valid for Windows"
4977 fi
4978 ;;
4979 *)
4980 error_exit "unknown coroutine backend $coroutine"
4981 ;;
4982 esac
d0e2fce5
AK
4983fi
4984
70c60c08 4985if test "$coroutine_pool" = ""; then
33c53c54 4986 coroutine_pool=yes
70c60c08
SH
4987fi
4988
7d992e4d 4989if test "$debug_stack_usage" = "yes"; then
7d992e4d
PL
4990 if test "$coroutine_pool" = "yes"; then
4991 echo "WARN: disabling coroutine pool for stack usage debugging"
4992 coroutine_pool=no
4993 fi
4994fi
4995
4996
d2042378
AK
4997##########################################
4998# check if we have open_by_handle_at
4999
4e1797f9 5000open_by_handle_at=no
d2042378
AK
5001cat > $TMPC << EOF
5002#include <fcntl.h>
acc55ba8
SW
5003#if !defined(AT_EMPTY_PATH)
5004# error missing definition
5005#else
75cafad7 5006int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
acc55ba8 5007#endif
d2042378
AK
5008EOF
5009if compile_prog "" "" ; then
5010 open_by_handle_at=yes
5011fi
5012
e06a765e
HPB
5013########################################
5014# check if we have linux/magic.h
5015
5016linux_magic_h=no
5017cat > $TMPC << EOF
5018#include <linux/magic.h>
5019int main(void) {
75cafad7 5020 return 0;
e06a765e
HPB
5021}
5022EOF
5023if compile_prog "" "" ; then
5024 linux_magic_h=yes
5025fi
5026
06d71fa1 5027########################################
c95e3080
KW
5028# check whether we can disable warning option with a pragma (this is needed
5029# to silence warnings in the headers of some versions of external libraries).
5030# This test has to be compiled with -Werror as otherwise an unknown pragma is
5031# only a warning.
5032#
5033# If we can't selectively disable warning in the code, disable -Werror so that
5034# the build doesn't fail anyway.
5035
06d71fa1
PM
5036pragma_disable_unused_but_set=no
5037cat > $TMPC << EOF
e6f53fd5 5038#pragma GCC diagnostic push
c95e3080 5039#pragma GCC diagnostic ignored "-Wstrict-prototypes"
e6f53fd5 5040#pragma GCC diagnostic pop
c95e3080 5041
06d71fa1
PM
5042int main(void) {
5043 return 0;
5044}
5045EOF
5046if compile_prog "-Werror" "" ; then
cc6e3ca9 5047 pragma_diagnostic_available=yes
c95e3080
KW
5048else
5049 werror=no
06d71fa1
PM
5050fi
5051
3f4349dc 5052########################################
541be927 5053# check if we have valgrind/valgrind.h
3f4349dc
KW
5054
5055valgrind_h=no
5056cat > $TMPC << EOF
5057#include <valgrind/valgrind.h>
3f4349dc 5058int main(void) {
3f4349dc
KW
5059 return 0;
5060}
5061EOF
5062if compile_prog "" "" ; then
5063 valgrind_h=yes
5064fi
5065
8ab1bf12
LC
5066########################################
5067# check if environ is declared
5068
5069has_environ=no
5070cat > $TMPC << EOF
5071#include <unistd.h>
5072int main(void) {
c075a723 5073 environ = 0;
8ab1bf12
LC
5074 return 0;
5075}
5076EOF
5077if compile_prog "" "" ; then
5078 has_environ=yes
5079fi
5080
76a347e1
RH
5081########################################
5082# check if cpuid.h is usable.
5083
76a347e1
RH
5084cat > $TMPC << EOF
5085#include <cpuid.h>
5086int main(void) {
774d566c
PM
5087 unsigned a, b, c, d;
5088 int max = __get_cpuid_max(0, 0);
5089
5090 if (max >= 1) {
5091 __cpuid(1, a, b, c, d);
5092 }
5093
5094 if (max >= 7) {
5095 __cpuid_count(7, 0, a, b, c, d);
5096 }
5097
5098 return 0;
76a347e1
RH
5099}
5100EOF
5101if compile_prog "" "" ; then
5102 cpuid_h=yes
5103fi
5104
5dd89908
RH
5105##########################################
5106# avx2 optimization requirement check
5107#
5108# There is no point enabling this if cpuid.h is not usable,
5109# since we won't be able to select the new routines.
5110
5111if test $cpuid_h = yes; then
5112 cat > $TMPC << EOF
5113#pragma GCC push_options
5114#pragma GCC target("avx2")
5115#include <cpuid.h>
5116#include <immintrin.h>
5117static int bar(void *a) {
5118 __m256i x = *(__m256i *)a;
5119 return _mm256_testz_si256(x, x);
5120}
5121int main(int argc, char *argv[]) { return bar(argv[0]); }
5122EOF
5123 if compile_object "" ; then
5124 avx2_opt="yes"
5125 fi
5126fi
5127
f540166b
RH
5128########################################
5129# check if __[u]int128_t is usable.
5130
5131int128=no
5132cat > $TMPC << EOF
a00f66ab
SW
5133#if defined(__clang_major__) && defined(__clang_minor__)
5134# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5135# error __int128_t does not work in CLANG before 3.2
5136# endif
5137#endif
f540166b
RH
5138__int128_t a;
5139__uint128_t b;
5140int main (void) {
5141 a = a + b;
5142 b = a * b;
464e3671 5143 a = a * a;
f540166b
RH
5144 return 0;
5145}
5146EOF
5147if compile_prog "" "" ; then
5148 int128=yes
5149fi
76a347e1 5150
7ebee43e
RH
5151#########################################
5152# See if 128-bit atomic operations are supported.
5153
5154atomic128=no
5155if test "$int128" = "yes"; then
5156 cat > $TMPC << EOF
5157int main(void)
5158{
5159 unsigned __int128 x = 0, y = 0;
5160 y = __atomic_load_16(&x, 0);
5161 __atomic_store_16(&x, y, 0);
5162 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5163 return 0;
5164}
5165EOF
5166 if compile_prog "" "" ; then
5167 atomic128=yes
5168 fi
5169fi
5170
df79b996
RH
5171#########################################
5172# See if 64-bit atomic operations are supported.
5173# Note that without __atomic builtins, we can only
5174# assume atomic loads/stores max at pointer size.
5175
5176cat > $TMPC << EOF
5177#include <stdint.h>
5178int main(void)
5179{
5180 uint64_t x = 0, y = 0;
5181#ifdef __ATOMIC_RELAXED
5182 y = __atomic_load_8(&x, 0);
5183 __atomic_store_8(&x, y, 0);
5184 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5185 __atomic_exchange_8(&x, y, 0);
5186 __atomic_fetch_add_8(&x, y, 0);
5187#else
5188 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5189 __sync_lock_test_and_set(&x, y);
5190 __sync_val_compare_and_swap(&x, y, 0);
5191 __sync_fetch_and_add(&x, y);
5192#endif
5193 return 0;
5194}
5195EOF
5196if compile_prog "" "" ; then
5197 atomic64=yes
5198fi
5199
db432672
RH
5200########################################
5201# See if 16-byte vector operations are supported.
5202# Even without a vector unit the compiler may expand these.
5203# There is a bug in old GCC for PPC that crashes here.
5204# Unfortunately it's the system compiler for Centos 7.
5205
5206cat > $TMPC << EOF
5207typedef unsigned char U1 __attribute__((vector_size(16)));
5208typedef unsigned short U2 __attribute__((vector_size(16)));
5209typedef unsigned int U4 __attribute__((vector_size(16)));
5210typedef unsigned long long U8 __attribute__((vector_size(16)));
5211typedef signed char S1 __attribute__((vector_size(16)));
5212typedef signed short S2 __attribute__((vector_size(16)));
5213typedef signed int S4 __attribute__((vector_size(16)));
5214typedef signed long long S8 __attribute__((vector_size(16)));
5215static U1 a1, b1;
5216static U2 a2, b2;
5217static U4 a4, b4;
5218static U8 a8, b8;
5219static S1 c1;
5220static S2 c2;
5221static S4 c4;
5222static S8 c8;
5223static int i;
74912f6d
LV
5224void helper(void *d, void *a, int shift, int i);
5225void helper(void *d, void *a, int shift, int i)
5226{
5227 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5228 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5229 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5230 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5231}
db432672
RH
5232int main(void)
5233{
5234 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5235 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5236 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
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 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5241 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5242 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5243 return 0;
5244}
5245EOF
5246
5247vector16=no
5248if compile_prog "" "" ; then
5249 vector16=yes
5250fi
5251
1e6e9aca
RH
5252########################################
5253# check if getauxval is available.
5254
5255getauxval=no
5256cat > $TMPC << EOF
5257#include <sys/auxv.h>
5258int main(void) {
5259 return getauxval(AT_HWCAP) == 0;
5260}
5261EOF
5262if compile_prog "" "" ; then
5263 getauxval=yes
5264fi
5265
fd0e6053
JS
5266########################################
5267# check if ccache is interfering with
5268# semantic analysis of macros
5269
5e4dfd3d 5270unset CCACHE_CPP2
fd0e6053
JS
5271ccache_cpp2=no
5272cat > $TMPC << EOF
5273static const int Z = 1;
5274#define fn() ({ Z; })
5275#define TAUT(X) ((X) == Z)
5276#define PAREN(X, Y) (X == Y)
5277#define ID(X) (X)
5278int main(int argc, char *argv[])
5279{
5280 int x = 0, y = 0;
5281 x = ID(x);
5282 x = fn();
5283 fn();
5284 if (PAREN(x, y)) return 0;
5285 if (TAUT(Z)) return 0;
5286 return 0;
5287}
5288EOF
5289
5290if ! compile_object "-Werror"; then
5291 ccache_cpp2=yes
5292fi
5293
b553a042
JS
5294#################################################
5295# clang does not support glibc + FORTIFY_SOURCE.
5296
5297if test "$fortify_source" != "no"; then
5298 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5299 fortify_source="no";
e189091f 5300 elif test -n "$cxx" && has $cxx &&
cfcc7c14 5301 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
b553a042
JS
5302 fortify_source="no";
5303 else
5304 fortify_source="yes"
5305 fi
5306fi
5307
1efad060
FZ
5308###############################################
5309# Check if copy_file_range is provided by glibc
5310have_copy_file_range=no
5311cat > $TMPC << EOF
5312#include <unistd.h>
5313int main(void) {
5314 copy_file_range(0, NULL, 0, NULL, 0, 0);
5315 return 0;
5316}
5317EOF
5318if compile_prog "" "" ; then
5319 have_copy_file_range=yes
5320fi
5321
277abf15
JV
5322##########################################
5323# check if struct fsxattr is available via linux/fs.h
5324
5325have_fsxattr=no
5326cat > $TMPC << EOF
5327#include <linux/fs.h>
5328struct fsxattr foo;
5329int main(void) {
5330 return 0;
5331}
5332EOF
5333if compile_prog "" "" ; then
5334 have_fsxattr=yes
5335fi
5336
a40161cb
PB
5337##########################################
5338# check for usable membarrier system call
5339if test "$membarrier" = "yes"; then
5340 have_membarrier=no
5341 if test "$mingw32" = "yes" ; then
5342 have_membarrier=yes
5343 elif test "$linux" = "yes" ; then
5344 cat > $TMPC << EOF
5345 #include <linux/membarrier.h>
5346 #include <sys/syscall.h>
5347 #include <unistd.h>
5348 #include <stdlib.h>
5349 int main(void) {
5350 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5351 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5352 exit(0);
5353 }
5354EOF
5355 if compile_prog "" "" ; then
5356 have_membarrier=yes
5357 fi
5358 fi
5359 if test "$have_membarrier" = "no"; then
5360 feature_not_found "membarrier" "membarrier system call not available"
5361 fi
5362else
5363 # Do not enable it by default even for Mingw32, because it doesn't
5364 # work on Wine.
5365 membarrier=no
5366fi
5367
b66e10e4
PM
5368##########################################
5369# check if rtnetlink.h exists and is useful
575b22b1
LV
5370have_rtnetlink=no
5371cat > $TMPC << EOF
5372#include <linux/rtnetlink.h>
5373int main(void) {
5374 return IFLA_PROTO_DOWN;
5375}
5376EOF
5377if compile_prog "" "" ; then
5378 have_rtnetlink=yes
5379fi
5380
6a02c806
SH
5381##########################################
5382# check for usable AF_VSOCK environment
5383have_af_vsock=no
5384cat > $TMPC << EOF
5385#include <errno.h>
5386#include <sys/types.h>
5387#include <sys/socket.h>
5388#if !defined(AF_VSOCK)
5389# error missing AF_VSOCK flag
5390#endif
5391#include <linux/vm_sockets.h>
5392int main(void) {
5393 int sock, ret;
5394 struct sockaddr_vm svm;
5395 socklen_t len = sizeof(svm);
5396 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5397 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5398 if ((ret == -1) && (errno == ENOTCONN)) {
5399 return 0;
5400 }
5401 return -1;
5402}
5403EOF
5404if compile_prog "" "" ; then
5405 have_af_vsock=yes
5406fi
5407
f0d92b56
LM
5408##########################################
5409# check for usable AF_ALG environment
5410hava_afalg=no
5411cat > $TMPC << EOF
5412#include <errno.h>
5413#include <sys/types.h>
5414#include <sys/socket.h>
5415#include <linux/if_alg.h>
5416int main(void) {
5417 int sock;
5418 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5419 return sock;
5420}
5421EOF
5422if compile_prog "" "" ; then
5423 have_afalg=yes
5424fi
5425if test "$crypto_afalg" = "yes"
5426then
5427 if test "$have_afalg" != "yes"
5428 then
5429 error_exit "AF_ALG requested but could not be detected"
5430 fi
5431fi
5432
5433
c97d6d2c
SAGDR
5434#################################################
5435# Check to see if we have the Hypervisor framework
d2d08522 5436if [ "$darwin" = "yes" ] ; then
c97d6d2c
SAGDR
5437 cat > $TMPC << EOF
5438#include <Hypervisor/hv.h>
5439int main() { return 0;}
5440EOF
5441 if ! compile_object ""; then
5442 hvf='no'
5443 else
5444 hvf='yes'
5445 LDFLAGS="-framework Hypervisor $LDFLAGS"
5446 fi
5447fi
5448
6969ec6c
JC
5449#################################################
5450# Sparc implicitly links with --relax, which is
5451# incompatible with -r, so --no-relax should be
5452# given. It does no harm to give it on other
5453# platforms too.
5454
5455# Note: the prototype is needed since QEMU_CFLAGS
5456# contains -Wmissing-prototypes
5457cat > $TMPC << EOF
5458extern int foo(void);
5459int foo(void) { return 0; }
5460EOF
5461if ! compile_object ""; then
5462 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5463fi
7ecf44a5
PB
5464for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5465 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5466 LD_REL_FLAGS=$i
5467 break
5468 fi
5469done
5470if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5471 feature_not_found "modules" "Cannot find how to build relocatable objects"
6969ec6c
JC
5472fi
5473
4d04351f
CC
5474##########################################
5475# check for sysmacros.h
5476
5477have_sysmacros=no
5478cat > $TMPC << EOF
5479#include <sys/sysmacros.h>
5480int main(void) {
5481 return makedev(0, 0);
5482}
5483EOF
5484if compile_prog "" "" ; then
5485 have_sysmacros=yes
5486fi
5487
da92c3ff
AM
5488##########################################
5489# Veritas HyperScale block driver VxHS
5490# Check if libvxhs is installed
5491
5492if test "$vxhs" != "no" ; then
5493 cat > $TMPC <<EOF
5494#include <stdint.h>
5495#include <qnio/qnio_api.h>
5496
5497void *vxhs_callback;
5498
5499int main(void) {
5500 iio_init(QNIO_VERSION, vxhs_callback);
5501 return 0;
5502}
5503EOF
5504 vxhs_libs="-lvxhs -lssl"
5505 if compile_prog "" "$vxhs_libs" ; then
5506 vxhs=yes
5507 else
5508 if test "$vxhs" = "yes" ; then
5509 feature_not_found "vxhs block device" "Install libvxhs See github"
5510 fi
5511 vxhs=no
5512 fi
5513fi
5514
49e00a18
AG
5515##########################################
5516# check for _Static_assert()
5517
5518have_static_assert=no
5519cat > $TMPC << EOF
5520_Static_assert(1, "success");
5521int main(void) {
5522 return 0;
5523}
5524EOF
5525if compile_prog "" "" ; then
5526 have_static_assert=yes
5527fi
5528
e674605f
TG
5529##########################################
5530# check for utmpx.h, it is missing e.g. on OpenBSD
5531
5532have_utmpx=no
5533cat > $TMPC << EOF
5534#include <utmpx.h>
5535struct utmpx user_info;
5536int main(void) {
5537 return 0;
5538}
5539EOF
5540if compile_prog "" "" ; then
5541 have_utmpx=yes
5542fi
5543
247724cb
MAL
5544##########################################
5545# checks for sanitizers
5546
247724cb
MAL
5547have_asan=no
5548have_ubsan=no
d83414e1
MAL
5549have_asan_iface_h=no
5550have_asan_iface_fiber=no
247724cb
MAL
5551
5552if test "$sanitizers" = "yes" ; then
b9f44da2 5553 write_c_skeleton
247724cb
MAL
5554 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5555 have_asan=yes
5556 fi
b9f44da2
MAL
5557
5558 # we could use a simple skeleton for flags checks, but this also
5559 # detect the static linking issue of ubsan, see also:
5560 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5561 cat > $TMPC << EOF
5562#include <stdlib.h>
5563int main(void) {
5564 void *tmp = malloc(10);
5565 return *(int *)(tmp + 2);
5566}
5567EOF
247724cb
MAL
5568 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5569 have_ubsan=yes
5570 fi
d83414e1
MAL
5571
5572 if check_include "sanitizer/asan_interface.h" ; then
5573 have_asan_iface_h=yes
5574 fi
5575
5576 cat > $TMPC << EOF
5577#include <sanitizer/asan_interface.h>
5578int main(void) {
5579 __sanitizer_start_switch_fiber(0, 0, 0);
5580 return 0;
5581}
5582EOF
5583 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5584 have_asan_iface_fiber=yes
5585 fi
247724cb
MAL
5586fi
5587
51a12b51
AB
5588##########################################
5589# Docker and cross-compiler support
5590#
5591# This is specifically for building test
5592# cases for foreign architectures, not
5593# cross-compiling QEMU itself.
5594
5595if has "docker"; then
5596 docker=$($python $source_path/tests/docker/docker.py probe)
5597fi
5598
17824406
JH
5599##########################################
5600# check for libpmem
5601
5602if test "$libpmem" != "no"; then
5603 if $pkg_config --exists "libpmem"; then
5604 libpmem="yes"
5605 libpmem_libs=$($pkg_config --libs libpmem)
5606 libpmem_cflags=$($pkg_config --cflags libpmem)
5607 libs_softmmu="$libs_softmmu $libpmem_libs"
5608 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5609 else
5610 if test "$libpmem" = "yes" ; then
5611 feature_not_found "libpmem" "Install nvml or pmdk"
5612 fi
5613 libpmem="no"
5614 fi
5615fi
5616
7e24e92a 5617##########################################
e86ecd4b
JQ
5618# End of CC checks
5619# After here, no more $cc or $ld runs
5620
d83414e1
MAL
5621write_c_skeleton
5622
1d728c39
BS
5623if test "$gcov" = "yes" ; then
5624 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5625 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
b553a042 5626elif test "$fortify_source" = "yes" ; then
e600cdf3 5627 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
48e56d50
PB
5628elif test "$debug" = "no"; then
5629 CFLAGS="-O2 $CFLAGS"
e86ecd4b 5630fi
a316e378 5631
247724cb
MAL
5632if test "$have_asan" = "yes"; then
5633 CFLAGS="-fsanitize=address $CFLAGS"
d83414e1
MAL
5634 if test "$have_asan_iface_h" = "no" ; then
5635 echo "ASAN build enabled, but ASAN header missing." \
5636 "Without code annotation, the report may be inferior."
5637 elif test "$have_asan_iface_fiber" = "no" ; then
5638 echo "ASAN build enabled, but ASAN header is too old." \
5639 "Without code annotation, the report may be inferior."
5640 fi
247724cb
MAL
5641fi
5642if test "$have_ubsan" = "yes"; then
5643 CFLAGS="-fsanitize=undefined $CFLAGS"
5644fi
5645
6542aa9c
PL
5646##########################################
5647# Do we have libnfs
5648if test "$libnfs" != "no" ; then
b7d769c9 5649 if $pkg_config --atleast-version=1.9.3 libnfs; then
6542aa9c
PL
5650 libnfs="yes"
5651 libnfs_libs=$($pkg_config --libs libnfs)
6542aa9c
PL
5652 else
5653 if test "$libnfs" = "yes" ; then
8efc9363 5654 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6542aa9c
PL
5655 fi
5656 libnfs="no"
5657 fi
5658fi
1d728c39 5659
6ca026cb
PM
5660# Now we've finished running tests it's OK to add -Werror to the compiler flags
5661if test "$werror" = "yes"; then
5662 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5663fi
5664
e86ecd4b
JQ
5665if test "$solaris" = "no" ; then
5666 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
1156c669 5667 LDFLAGS="-Wl,--warn-common $LDFLAGS"
e86ecd4b
JQ
5668 fi
5669fi
5670
94dd53c5
GH
5671# test if pod2man has --utf8 option
5672if pod2man --help | grep -q utf8; then
5673 POD2MAN="pod2man --utf8"
5674else
5675 POD2MAN="pod2man"
5676fi
5677
952afb71
BS
5678# Use ASLR, no-SEH and DEP if available
5679if test "$mingw32" = "yes" ; then
5680 for flag in --dynamicbase --no-seh --nxcompat; do
e9a3591f 5681 if ld_has $flag ; then
952afb71
BS
5682 LDFLAGS="-Wl,$flag $LDFLAGS"
5683 fi
5684 done
5685fi
5686
10ea68b3 5687qemu_confdir=$sysconfdir$confsuffix
e26110cf 5688qemu_moddir=$libdir$confsuffix
528ae5b8 5689qemu_datadir=$datadir$confsuffix
834574ea 5690qemu_localedir="$datadir/locale"
e7b45cc4 5691
e0580342
KR
5692# We can only support ivshmem if we have eventfd
5693if [ "$eventfd" = "yes" ]; then
5694 ivshmem=yes
5695fi
5696
4b1c11fd
DB
5697tools=""
5698if test "$want_tools" = "yes" ; then
ca35f780 5699 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4b1c11fd
DB
5700 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5701 tools="qemu-nbd\$(EXESUF) $tools"
b1449edb
KR
5702 fi
5703 if [ "$ivshmem" = "yes" ]; then
a75eb03b 5704 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4b1c11fd
DB
5705 fi
5706fi
5707if test "$softmmu" = yes ; then
b855f8d1
PB
5708 if test "$linux" = yes; then
5709 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
aabfd88d
AF
5710 virtfs=yes
5711 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5712 else
5713 if test "$virtfs" = yes; then
b855f8d1 5714 error_exit "VirtFS requires libcap devel and libattr devel"
983eef5a 5715 fi
17500370 5716 virtfs=no
aabfd88d 5717 fi
fe8fc5ae
PB
5718 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5719 mpath=yes
5720 else
5721 if test "$mpath" = yes; then
5722 error_exit "Multipath requires libmpathpersist devel"
5723 fi
5724 mpath=no
5725 fi
b855f8d1
PB
5726 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5727 else
5728 if test "$virtfs" = yes; then
5729 error_exit "VirtFS is supported only on Linux"
5730 fi
5731 virtfs=no
fe8fc5ae
PB
5732 if test "$mpath" = yes; then
5733 error_exit "Multipath is supported only on Linux"
5734 fi
5735 mpath=no
17bff52b 5736 fi
ff69fd8c
LV
5737 if test "$xkbcommon" = "yes"; then
5738 tools="qemu-keymap\$(EXESUF) $tools"
5739 fi
6a021536 5740fi
9d6bc27b
MR
5741
5742# Probe for guest agent support/options
5743
e8ef31a3 5744if [ "$guest_agent" != "no" ]; then
b39297ae 5745 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
fafcaf1d 5746 tools="qemu-ga $tools"
e8ef31a3
MT
5747 guest_agent=yes
5748 elif [ "$guest_agent" != yes ]; then
5749 guest_agent=no
5750 else
5751 error_exit "Guest agent is not supported on this platform"
ca35f780 5752 fi
00c705fb 5753fi
ca35f780 5754
9d6bc27b
MR
5755# Guest agent Window MSI package
5756
5757if test "$guest_agent" != yes; then
5758 if test "$guest_agent_msi" = yes; then
5759 error_exit "MSI guest agent package requires guest agent enabled"
5760 fi
5761 guest_agent_msi=no
5762elif test "$mingw32" != "yes"; then
5763 if test "$guest_agent_msi" = "yes"; then
5764 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5765 fi
5766 guest_agent_msi=no
5767elif ! has wixl; then
5768 if test "$guest_agent_msi" = "yes"; then
5769 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5770 fi
5771 guest_agent_msi=no
1a34904e
MR
5772else
5773 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5774 # disabled explicitly
5775 if test "$guest_agent_msi" != "no"; then
5776 guest_agent_msi=yes
5777 fi
9d6bc27b
MR
5778fi
5779
1a34904e 5780if test "$guest_agent_msi" = "yes"; then
9d6bc27b
MR
5781 if test "$guest_agent_with_vss" = "yes"; then
5782 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5783 fi
5784
5785 if test "$QEMU_GA_MANUFACTURER" = ""; then
5786 QEMU_GA_MANUFACTURER=QEMU
5787 fi
5788
5789 if test "$QEMU_GA_DISTRO" = ""; then
5790 QEMU_GA_DISTRO=Linux
5791 fi
5792
5793 if test "$QEMU_GA_VERSION" = ""; then
89138857 5794 QEMU_GA_VERSION=$(cat $source_path/VERSION)
9d6bc27b
MR
5795 fi
5796
89138857 5797 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
9d6bc27b
MR
5798
5799 case "$cpu" in
5800 x86_64)
5801 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5802 ;;
5803 i386)
5804 QEMU_GA_MSI_ARCH="-D Arch=32"
5805 ;;
5806 *)
5807 error_exit "CPU $cpu not supported for building installation package"
5808 ;;
5809 esac
5810fi
5811
ca35f780
PB
5812# Mac OS X ships with a broken assembler
5813roms=
5814if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5815 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5816 "$softmmu" = yes ; then
e57218b6 5817 # Different host OS linkers have different ideas about the name of the ELF
c65d5e4e
BS
5818 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5819 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5820 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
e57218b6
PM
5821 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5822 ld_i386_emulation="$emu"
5823 roms="optionrom"
5824 break
5825 fi
5826 done
ca35f780 5827fi
d0384d1d 5828if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
39ac8455
DG
5829 roms="$roms spapr-rtas"
5830fi
ca35f780 5831
9933c305
CB
5832if test "$cpu" = "s390x" ; then
5833 roms="$roms s390-ccw"
5834fi
5835
964c6fa1 5836# Probe for the need for relocating the user-only binary.
92fe2ba8 5837if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
964c6fa1
RH
5838 textseg_addr=
5839 case "$cpu" in
479eb121
RH
5840 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5841 # ??? Rationale for choosing this address
964c6fa1
RH
5842 textseg_addr=0x60000000
5843 ;;
5844 mips)
479eb121
RH
5845 # A 256M aligned address, high in the address space, with enough
5846 # room for the code_gen_buffer above it before the stack.
5847 textseg_addr=0x60000000
964c6fa1
RH
5848 ;;
5849 esac
5850 if [ -n "$textseg_addr" ]; then
5851 cat > $TMPC <<EOF
5852 int main(void) { return 0; }
5853EOF
5854 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5855 if ! compile_prog "" "$textseg_ldflags"; then
5856 # In case ld does not support -Ttext-segment, edit the default linker
5857 # script via sed to set the .text start addr. This is needed on FreeBSD
5858 # at least.
92fe2ba8
PM
5859 if ! $ld --verbose >/dev/null 2>&1; then
5860 error_exit \
5861 "We need to link the QEMU user mode binaries at a" \
5862 "specific text address. Unfortunately your linker" \
5863 "doesn't support either the -Ttext-segment option or" \
5864 "printing the default linker script with --verbose." \
5865 "If you don't want the user mode binaries, pass the" \
5866 "--disable-user option to configure."
5867 fi
5868
964c6fa1
RH
5869 $ld --verbose | sed \
5870 -e '1,/==================================================/d' \
5871 -e '/==================================================/,$d' \
5872 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5873 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5874 textseg_ldflags="-Wl,-T../config-host.ld"
5875 fi
5876 fi
5877fi
5878
11cde1c8
BD
5879# Check that the C++ compiler exists and works with the C compiler.
5880# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5881if has $cxx; then
5882 cat > $TMPC <<EOF
5883int c_function(void);
5884int main(void) { return c_function(); }
5885EOF
5886
5887 compile_object
5888
5889 cat > $TMPCXX <<EOF
5890extern "C" {
5891 int c_function(void);
5892}
5893int c_function(void) { return 42; }
5894EOF
5895
5896 update_cxxflags
5897
5898 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5899 # C++ compiler $cxx works ok with C compiler $cc
5900 :
5901 else
5902 echo "C++ compiler $cxx does not work with C compiler $cc"
5903 echo "Disabling C++ specific optional code"
5904 cxx=
5905 fi
5906else
5907 echo "No C++ compiler available; disabling C++ specific optional code"
5908 cxx=
5909fi
5910
02d34f62
CR
5911echo_version() {
5912 if test "$1" = "yes" ; then
5913 echo "($2)"
5914 fi
5915}
5916
50e12060
JK
5917# prepend pixman and ftd flags after all config tests are done
5918QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
8a99e9a3 5919QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
50e12060 5920libs_softmmu="$pixman_libs $libs_softmmu"
5ca9388a 5921
43ce4dfe 5922echo "Install prefix $prefix"
89138857 5923echo "BIOS directory $(eval echo $qemu_datadir)"
3d5eecab 5924echo "firmware path $(eval echo $firmwarepath)"
89138857
SW
5925echo "binary directory $(eval echo $bindir)"
5926echo "library directory $(eval echo $libdir)"
5927echo "module directory $(eval echo $qemu_moddir)"
5928echo "libexec directory $(eval echo $libexecdir)"
5929echo "include directory $(eval echo $includedir)"
5930echo "config directory $(eval echo $sysconfdir)"
11d9f695 5931if test "$mingw32" = "no" ; then
89138857
SW
5932echo "local state directory $(eval echo $local_statedir)"
5933echo "Manual directory $(eval echo $mandir)"
43ce4dfe 5934echo "ELF interp prefix $interp_prefix"
5a699bbb
LE
5935else
5936echo "local state directory queried at runtime"
d9840e25 5937echo "Windows SDK $win_sdk"
11d9f695 5938fi
5a67135a 5939echo "Source path $source_path"
cc84d63a 5940echo "GIT binary $git"
aef45d51 5941echo "GIT submodules $git_submodules"
43ce4dfe 5942echo "C compiler $cc"
83469015 5943echo "Host C compiler $host_cc"
83f73fce 5944echo "C++ compiler $cxx"
3c4a4d0d 5945echo "Objective-C compiler $objcc"
45d285ab 5946echo "ARFLAGS $ARFLAGS"
0c439cbf 5947echo "CFLAGS $CFLAGS"
a558ee17 5948echo "QEMU_CFLAGS $QEMU_CFLAGS"
0c439cbf 5949echo "LDFLAGS $LDFLAGS"
8a99e9a3 5950echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
43ce4dfe 5951echo "make $make"
6a882643 5952echo "install $install"
c886edfb 5953echo "python $python"
e2d8830e
BS
5954if test "$slirp" = "yes" ; then
5955 echo "smbd $smbd"
5956fi
17969268 5957echo "module support $modules"
43ce4dfe 5958echo "host CPU $cpu"
de83cd02 5959echo "host big endian $bigendian"
97a847bc 5960echo "target list $target_list"
43ce4dfe 5961echo "gprof enabled $gprof"
03b4fe7d 5962echo "sparse enabled $sparse"
1625af87 5963echo "strip binaries $strip_opt"
05c2a3e7 5964echo "profiler $profiler"
43ce4dfe 5965echo "static build $static"
5b0753e0
FB
5966if test "$darwin" = "yes" ; then
5967 echo "Cocoa support $cocoa"
5968fi
89138857
SW
5969echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5970echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
925a0400 5971echo "GTK GL support $gtk_gl"
89138857 5972echo "VTE support $vte $(echo_version $vte $vteversion)"
a1c5e949 5973echo "TLS priority $tls_priority"
ddbb0d09 5974echo "GNUTLS support $gnutls"
b917da4c 5975echo "GNUTLS rnd $gnutls_rnd"
91bfcdb0 5976echo "libgcrypt $gcrypt"
37788f25 5977echo "libgcrypt kdf $gcrypt_kdf"
89138857 5978echo "nettle $nettle $(echo_version $nettle $nettle_version)"
fff2f982 5979echo "nettle kdf $nettle_kdf"
9a2fd434 5980echo "libtasn1 $tasn1"
4d3b6f6e 5981echo "curses support $curses"
47479c55 5982echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
769ce76d 5983echo "curl support $curl"
67b915a5 5984echo "mingw32 support $mingw32"
0c58ac1c 5985echo "Audio drivers $audio_drv_list"
b64ec4e4
FZ
5986echo "Block whitelist (rw) $block_drv_rw_whitelist"
5987echo "Block whitelist (ro) $block_drv_ro_whitelist"
983eef5a 5988echo "VirtFS support $virtfs"
fe8fc5ae 5989echo "Multipath support $mpath"
821601ea
JS
5990echo "VNC support $vnc"
5991if test "$vnc" = "yes" ; then
821601ea
JS
5992 echo "VNC SASL support $vnc_sasl"
5993 echo "VNC JPEG support $vnc_jpeg"
5994 echo "VNC PNG support $vnc_png"
821601ea 5995fi
3142255c
BS
5996if test -n "$sparc_cpu"; then
5997 echo "Target Sparc Arch $sparc_cpu"
5998fi
e37630ca 5999echo "xen support $xen"
3996e85c
PD
6000if test "$xen" = "yes" ; then
6001 echo "xen ctrl version $xen_ctrl_version"
64a7ad6f 6002 echo "pv dom build $xen_pv_domain_build"
3996e85c 6003fi
2e4d9fb1 6004echo "brlapi support $brlapi"
a20a6f46 6005echo "bluez support $bluez"
a25dba17 6006echo "Documentation $docs"
40d6444e 6007echo "PIE $pie"
8a16d273 6008echo "vde support $vde"
58952137 6009echo "netmap support $netmap"
5c6c3a6c 6010echo "Linux AIO support $linux_aio"
758e8e38 6011echo "ATTR/XATTR support $attr"
77755340 6012echo "Install blobs $blobs"
b31a0277 6013echo "KVM support $kvm"
b0cb0a66 6014echo "HAX support $hax"
c97d6d2c 6015echo "HVF support $hvf"
d661d9a4 6016echo "WHPX support $whpx"
b3f6ea7e
PB
6017echo "TCG support $tcg"
6018if test "$tcg" = "yes" ; then
6019 echo "TCG debug enabled $debug_tcg"
6020 echo "TCG interpreter $tcg_interpreter"
6021fi
5a22ab71 6022echo "malloc trim support $malloc_trim"
2da776db 6023echo "RDMA support $rdma"
21ab34c9 6024echo "PVRDMA support $pvrdma"
f652e6af 6025echo "fdt support $fdt"
a40161cb 6026echo "membarrier $membarrier"
ceb42de8 6027echo "preadv support $preadv"
5f6b9e8f 6028echo "fdatasync $fdatasync"
e78815a5
AF
6029echo "madvise $madvise"
6030echo "posix_madvise $posix_madvise"
9bc5a719 6031echo "posix_memalign $posix_memalign"
47e98658 6032echo "libcap-ng support $cap_ng"
d5970055 6033echo "vhost-net support $vhost_net"
042cea27 6034echo "vhost-crypto support $vhost_crypto"
5e9be92d 6035echo "vhost-scsi support $vhost_scsi"
fc0b9b0e 6036echo "vhost-vsock support $vhost_vsock"
e6a74868 6037echo "vhost-user support $vhost_user"
5b808275 6038echo "Trace backends $trace_backends"
713572a7 6039if have_backend "simple"; then
9410b56c 6040echo "Trace output file $trace_file-<pid>"
e00e36fb 6041fi
89138857 6042echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
f27aaf4b 6043echo "rbd support $rbd"
dce512de 6044echo "xfsctl support $xfs"
7b02f544 6045echo "smartcard support $smartcard"
2b2325ff 6046echo "libusb $libusb"
69354a83 6047echo "usb net redir $usb_redir"
da076ffe 6048echo "OpenGL support $opengl"
014cb152 6049echo "OpenGL dmabufs $opengl_dmabuf"
c589b249 6050echo "libiscsi support $libiscsi"
6542aa9c 6051echo "libnfs support $libnfs"
d138cee9 6052echo "build guest agent $guest_agent"
d9840e25 6053echo "QGA VSS support $guest_agent_with_vss"
50cbebb9 6054echo "QGA w32 disk info $guest_agent_ntddscsi"
4c875d89 6055echo "QGA MSI support $guest_agent_msi"
f794573e 6056echo "seccomp support $seccomp"
7c2acc70 6057echo "coroutine backend $coroutine"
70c60c08 6058echo "coroutine pool $coroutine_pool"
7d992e4d 6059echo "debug stack usage $debug_stack_usage"
ba59fb77 6060echo "mutex debugging $debug_mutex"
f0d92b56 6061echo "crypto afalg $crypto_afalg"
eb100396 6062echo "GlusterFS support $glusterfs"
1d728c39
BS
6063echo "gcov $gcov_tool"
6064echo "gcov enabled $gcov"
ab214c29 6065echo "TPM support $tpm"
0a12ec87 6066echo "libssh2 support $libssh2"
3b8acc11 6067echo "TPM passthrough $tpm_passthrough"
f4ede81e 6068echo "TPM emulator $tpm_emulator"
3556c233 6069echo "QOM debugging $qom_cast_debug"
ed1701c6 6070echo "Live block migration $live_block_migration"
607dacd0
QN
6071echo "lzo support $lzo"
6072echo "snappy support $snappy"
6b383c08 6073echo "bzip2 support $bzip2"
a99d57bb 6074echo "NUMA host support $numa"
ed279a06 6075echo "libxml2 $libxml2"
2847b469 6076echo "tcmalloc support $tcmalloc"
7b01cb97 6077echo "jemalloc support $jemalloc"
99f2dbd3 6078echo "avx2 optimization $avx2_opt"
a6b1d4c0 6079echo "replication support $replication"
da92c3ff 6080echo "VxHS block device $vxhs"
8ca80760 6081echo "capstone $capstone"
51a12b51 6082echo "docker $docker"
17824406 6083echo "libpmem support $libpmem"
67b915a5 6084
1ba16968 6085if test "$sdl_too_old" = "yes"; then
24b55b96 6086echo "-> Your SDL version is too old - please upgrade to have SDL support"
7c1f25b4 6087fi
7d13299d 6088
b7715af2
DB
6089if test "$gtkabi" = "2.0"; then
6090 echo
6091 echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
6092 echo "WARNING: future releases. Please switch to using GTK 3.0"
6093fi
6094
e52c6ba3
DB
6095if test "$sdlabi" = "1.2"; then
6096 echo
6097 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6098 echo "WARNING: future releases. Please switch to using SDL 2.0"
6099fi
6100
898be3e0
PM
6101if test "$supported_cpu" = "no"; then
6102 echo
6103 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6104 echo
6105 echo "CPU host architecture $cpu support is not currently maintained."
6106 echo "The QEMU project intends to remove support for this host CPU in"
6107 echo "a future release if nobody volunteers to maintain it and to"
6108 echo "provide a build host for our continuous integration setup."
6109 echo "configure has succeeded and you can continue to build, but"
6110 echo "if you care about QEMU on this platform you should contact"
6111 echo "us upstream at qemu-devel@nongnu.org."
6112fi
6113
6114if test "$supported_os" = "no"; then
6115 echo
6116 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6117 echo
c50126aa
PM
6118 echo "Host OS $targetos support is not currently maintained."
6119 echo "The QEMU project intends to remove support for this host OS in"
898be3e0
PM
6120 echo "a future release if nobody volunteers to maintain it and to"
6121 echo "provide a build host for our continuous integration setup."
6122 echo "configure has succeeded and you can continue to build, but"
6123 echo "if you care about QEMU on this platform you should contact"
6124 echo "us upstream at qemu-devel@nongnu.org."
6125fi
6126
98ec69ac 6127config_host_mak="config-host.mak"
98ec69ac 6128
dbd99ae3
SW
6129echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6130
98ec69ac 6131echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 6132echo >> $config_host_mak
98ec69ac 6133
e6c3b0f7 6134echo all: >> $config_host_mak
99d7cc75
PB
6135echo "prefix=$prefix" >> $config_host_mak
6136echo "bindir=$bindir" >> $config_host_mak
3aa5d2be 6137echo "libdir=$libdir" >> $config_host_mak
8bf188aa 6138echo "libexecdir=$libexecdir" >> $config_host_mak
0f94d6da 6139echo "includedir=$includedir" >> $config_host_mak
99d7cc75 6140echo "mandir=$mandir" >> $config_host_mak
99d7cc75 6141echo "sysconfdir=$sysconfdir" >> $config_host_mak
22d07038 6142echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
9afa52ce 6143echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
3d5eecab 6144echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
9afa52ce 6145echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
e26110cf 6146echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5a699bbb
LE
6147if test "$mingw32" = "no" ; then
6148 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6149fi
f354b1a1 6150echo "qemu_helperdir=$libexecdir" >> $config_host_mak
834574ea 6151echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
f544a488 6152echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
cc84d63a 6153echo "GIT=$git" >> $config_host_mak
aef45d51 6154echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
f62bbee5 6155echo "GIT_UPDATE=$git_update" >> $config_host_mak
804edf29 6156
98ec69ac 6157echo "ARCH=$ARCH" >> $config_host_mak
727e5283 6158
f8393946 6159if test "$debug_tcg" = "yes" ; then
2358a494 6160 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 6161fi
1625af87 6162if test "$strip_opt" = "yes" ; then
52ba784d 6163 echo "STRIP=${strip}" >> $config_host_mak
1625af87 6164fi
7d13299d 6165if test "$bigendian" = "yes" ; then
e2542fe2 6166 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 6167fi
67b915a5 6168if test "$mingw32" = "yes" ; then
98ec69ac 6169 echo "CONFIG_WIN32=y" >> $config_host_mak
89138857 6170 rc_version=$(cat $source_path/VERSION)
9fe6de94
BS
6171 version_major=${rc_version%%.*}
6172 rc_version=${rc_version#*.}
6173 version_minor=${rc_version%%.*}
6174 rc_version=${rc_version#*.}
6175 version_subminor=${rc_version%%.*}
6176 version_micro=0
6177 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6178 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
d9840e25
TS
6179 if test "$guest_agent_with_vss" = "yes" ; then
6180 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 6181 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
6182 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6183 fi
50cbebb9
MR
6184 if test "$guest_agent_ntddscsi" = "yes" ; then
6185 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6186 fi
1a34904e 6187 if test "$guest_agent_msi" = "yes"; then
d661d9a4 6188 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
9dacf32d
YH
6189 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6190 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6191 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6192 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6193 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6194 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6195 fi
210fa556 6196else
35f4df27 6197 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
6198fi
6199
6200if test "$linux" = "yes" ; then
6201 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 6202fi
128ab2ff 6203
83fb7adf 6204if test "$darwin" = "yes" ; then
98ec69ac 6205 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 6206fi
b29fe3ed 6207
ec530c81 6208if test "$solaris" = "yes" ; then
98ec69ac 6209 echo "CONFIG_SOLARIS=y" >> $config_host_mak
ec530c81 6210fi
179cf400
AF
6211if test "$haiku" = "yes" ; then
6212 echo "CONFIG_HAIKU=y" >> $config_host_mak
6213fi
97a847bc 6214if test "$static" = "yes" ; then
98ec69ac 6215 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 6216fi
1ba16968 6217if test "$profiler" = "yes" ; then
2358a494 6218 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 6219fi
c20709aa 6220if test "$slirp" = "yes" ; then
98ec69ac 6221 echo "CONFIG_SLIRP=y" >> $config_host_mak
e2d8830e 6222 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
c20709aa 6223fi
8a16d273 6224if test "$vde" = "yes" ; then
98ec69ac 6225 echo "CONFIG_VDE=y" >> $config_host_mak
e2ad6f16 6226 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
8a16d273 6227fi
58952137
VM
6228if test "$netmap" = "yes" ; then
6229 echo "CONFIG_NETMAP=y" >> $config_host_mak
6230fi
015a33bd
GA
6231if test "$l2tpv3" = "yes" ; then
6232 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6233fi
47e98658
CB
6234if test "$cap_ng" = "yes" ; then
6235 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6236fi
2358a494 6237echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 6238for drv in $audio_drv_list; do
1ef1ec2a 6239 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
ce3dc033 6240 case "$drv" in
051c7d5c 6241 alsa | oss | pa | sdl)
ce3dc033
GH
6242 echo "$def=m" >> $config_host_mak ;;
6243 *)
6244 echo "$def=y" >> $config_host_mak ;;
6245 esac
0c58ac1c 6246done
b1149911
FZ
6247echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6248echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6249echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6250echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6251echo "OSS_LIBS=$oss_libs" >> $config_host_mak
67f86e8e
JQ
6252if test "$audio_pt_int" = "yes" ; then
6253 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6254fi
d5631638 6255if test "$audio_win_int" = "yes" ; then
6256 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6257fi
b64ec4e4
FZ
6258echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6259echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
821601ea
JS
6260if test "$vnc" = "yes" ; then
6261 echo "CONFIG_VNC=y" >> $config_host_mak
6262fi
2f9606b3 6263if test "$vnc_sasl" = "yes" ; then
98ec69ac 6264 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
2f9606b3 6265fi
821601ea 6266if test "$vnc_jpeg" = "yes" ; then
2f6f5c7a 6267 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
2f6f5c7a 6268fi
821601ea 6269if test "$vnc_png" = "yes" ; then
efe556ad 6270 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
efe556ad 6271fi
6a021536
GH
6272if test "$xkbcommon" = "yes" ; then
6273 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6274 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6275fi
76655d6d 6276if test "$fnmatch" = "yes" ; then
2358a494 6277 echo "CONFIG_FNMATCH=y" >> $config_host_mak
76655d6d 6278fi
dce512de
CH
6279if test "$xfs" = "yes" ; then
6280 echo "CONFIG_XFS=y" >> $config_host_mak
6281fi
89138857 6282qemu_version=$(head $source_path/VERSION)
98ec69ac 6283echo "VERSION=$qemu_version" >>$config_host_mak
2358a494 6284echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 6285echo "SRC_PATH=$source_path" >> $config_host_mak
2b1f35b9 6286echo "TARGET_DIRS=$target_list" >> $config_host_mak
a25dba17 6287if [ "$docs" = "yes" ] ; then
98ec69ac 6288 echo "BUILD_DOCS=yes" >> $config_host_mak
cc8ae6de 6289fi
17969268 6290if test "$modules" = "yes"; then
e26110cf
FZ
6291 # $shacmd can generate a hash started with digit, which the compiler doesn't
6292 # like as an symbol. So prefix it with an underscore
89138857 6293 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
17969268
FZ
6294 echo "CONFIG_MODULES=y" >> $config_host_mak
6295fi
8781595b
GH
6296if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6297 echo "CONFIG_X11=y" >> $config_host_mak
6298 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6299 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6300fi
1ac88f28 6301if test "$sdl" = "yes" ; then
96400a14 6302 echo "CONFIG_SDL=m" >> $config_host_mak
a3f4d63d 6303 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
1ac88f28 6304 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
8ecc89f6 6305 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
49ecc3fa
FB
6306fi
6307if test "$cocoa" = "yes" ; then
98ec69ac 6308 echo "CONFIG_COCOA=y" >> $config_host_mak
4d3b6f6e
AZ
6309fi
6310if test "$curses" = "yes" ; then
2373f7d5
GH
6311 echo "CONFIG_CURSES=m" >> $config_host_mak
6312 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6313 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
49ecc3fa 6314fi
099d6b0f 6315if test "$pipe2" = "yes" ; then
2358a494 6316 echo "CONFIG_PIPE2=y" >> $config_host_mak
099d6b0f 6317fi
40ff6d7e
KW
6318if test "$accept4" = "yes" ; then
6319 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6320fi
3ce34dfb 6321if test "$splice" = "yes" ; then
2358a494 6322 echo "CONFIG_SPLICE=y" >> $config_host_mak
3ce34dfb 6323fi
c2882b96
RV
6324if test "$eventfd" = "yes" ; then
6325 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6326fi
751bcc39
MAL
6327if test "$memfd" = "yes" ; then
6328 echo "CONFIG_MEMFD=y" >> $config_host_mak
6329fi
d0927938
UH
6330if test "$fallocate" = "yes" ; then
6331 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6332fi
3d4fa43e
KK
6333if test "$fallocate_punch_hole" = "yes" ; then
6334 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6335fi
b953f075
DL
6336if test "$fallocate_zero_range" = "yes" ; then
6337 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6338fi
ed911435
KW
6339if test "$posix_fallocate" = "yes" ; then
6340 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6341fi
c727f47d
PM
6342if test "$sync_file_range" = "yes" ; then
6343 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6344fi
dace20dc
PM
6345if test "$fiemap" = "yes" ; then
6346 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6347fi
d0927938
UH
6348if test "$dup3" = "yes" ; then
6349 echo "CONFIG_DUP3=y" >> $config_host_mak
6350fi
4e0c6529
AB
6351if test "$ppoll" = "yes" ; then
6352 echo "CONFIG_PPOLL=y" >> $config_host_mak
6353fi
cd758dd0
AB
6354if test "$prctl_pr_set_timerslack" = "yes" ; then
6355 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6356fi
3b6edd16
PM
6357if test "$epoll" = "yes" ; then
6358 echo "CONFIG_EPOLL=y" >> $config_host_mak
6359fi
6360if test "$epoll_create1" = "yes" ; then
6361 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6362fi
a8fd1aba
PM
6363if test "$sendfile" = "yes" ; then
6364 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6365fi
51834341
RV
6366if test "$timerfd" = "yes" ; then
6367 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6368fi
9af5c906
RV
6369if test "$setns" = "yes" ; then
6370 echo "CONFIG_SETNS=y" >> $config_host_mak
6371fi
38860a03
AM
6372if test "$clock_adjtime" = "yes" ; then
6373 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6374fi
5a03cd00
AM
6375if test "$syncfs" = "yes" ; then
6376 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6377fi
3b3f24ad 6378if test "$inotify" = "yes" ; then
2358a494 6379 echo "CONFIG_INOTIFY=y" >> $config_host_mak
3b3f24ad 6380fi
c05c7a73
RV
6381if test "$inotify1" = "yes" ; then
6382 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6383fi
401bc051
PM
6384if test "$sem_timedwait" = "yes" ; then
6385 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6386fi
5c99fa37
KF
6387if test "$strchrnul" = "yes" ; then
6388 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6389fi
6ae9a1f4
JQ
6390if test "$byteswap_h" = "yes" ; then
6391 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6392fi
6393if test "$bswap_h" = "yes" ; then
6394 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6395fi
769ce76d 6396if test "$curl" = "yes" ; then
d3399d7c 6397 echo "CONFIG_CURL=m" >> $config_host_mak
b1d5a277 6398 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6ebc91e5 6399 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
769ce76d 6400fi
2e4d9fb1 6401if test "$brlapi" = "yes" ; then
98ec69ac 6402 echo "CONFIG_BRLAPI=y" >> $config_host_mak
8eca2889 6403 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
2e4d9fb1 6404fi
fb599c9a 6405if test "$bluez" = "yes" ; then
98ec69ac 6406 echo "CONFIG_BLUEZ=y" >> $config_host_mak
ef7635ec 6407 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
fb599c9a 6408fi
d46f7c9e 6409if test "$glib_subprocess" = "yes" ; then
9d41401b
MT
6410 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
6411fi
a4ccabcf 6412if test "$gtk" = "yes" ; then
e0fb129c 6413 echo "CONFIG_GTK=m" >> $config_host_mak
a3f4d63d 6414 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
a4ccabcf 6415 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
014cb152 6416 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
925a0400
GH
6417 if test "$gtk_gl" = "yes" ; then
6418 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6419 fi
bbbf9bfb 6420fi
a1c5e949 6421echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
ddbb0d09
DB
6422if test "$gnutls" = "yes" ; then
6423 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6424fi
b917da4c
DB
6425if test "$gnutls_rnd" = "yes" ; then
6426 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6427fi
91bfcdb0
DB
6428if test "$gcrypt" = "yes" ; then
6429 echo "CONFIG_GCRYPT=y" >> $config_host_mak
1f923c70
LM
6430 if test "$gcrypt_hmac" = "yes" ; then
6431 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6432 fi
37788f25
DB
6433 if test "$gcrypt_kdf" = "yes" ; then
6434 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6435 fi
62893b67 6436fi
91bfcdb0
DB
6437if test "$nettle" = "yes" ; then
6438 echo "CONFIG_NETTLE=y" >> $config_host_mak
becaeb72 6439 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
fff2f982
DB
6440 if test "$nettle_kdf" = "yes" ; then
6441 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6442 fi
ed754746 6443fi
9a2fd434
DB
6444if test "$tasn1" = "yes" ; then
6445 echo "CONFIG_TASN1=y" >> $config_host_mak
6446fi
559607ea
DB
6447if test "$have_ifaddrs_h" = "yes" ; then
6448 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6449fi
6b39b063
EB
6450if test "$have_broken_size_max" = "yes" ; then
6451 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6452fi
277abf15
JV
6453
6454# Work around a system header bug with some kernel/XFS header
6455# versions where they both try to define 'struct fsxattr':
6456# xfs headers will not try to redefine structs from linux headers
6457# if this macro is set.
6458if test "$have_fsxattr" = "yes" ; then
6459 echo "HAVE_FSXATTR=y" >> $config_host_mak
6460fi
1efad060
FZ
6461if test "$have_copy_file_range" = "yes" ; then
6462 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6463fi
bbbf9bfb
SW
6464if test "$vte" = "yes" ; then
6465 echo "CONFIG_VTE=y" >> $config_host_mak
a4ccabcf 6466 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
e0fb129c 6467 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
a4ccabcf 6468fi
9d9e1521
GH
6469if test "$virglrenderer" = "yes" ; then
6470 echo "CONFIG_VIRGL=y" >> $config_host_mak
6471 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6472 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6473fi
e37630ca 6474if test "$xen" = "yes" ; then
6dbd588a 6475 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 6476 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
64a7ad6f
IC
6477 if test "$xen_pv_domain_build" = "yes" ; then
6478 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6479 fi
e37630ca 6480fi
5c6c3a6c
CH
6481if test "$linux_aio" = "yes" ; then
6482 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6483fi
758e8e38
VJ
6484if test "$attr" = "yes" ; then
6485 echo "CONFIG_ATTR=y" >> $config_host_mak
6486fi
4f26f2b6
AK
6487if test "$libattr" = "yes" ; then
6488 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6489fi
983eef5a
MI
6490if test "$virtfs" = "yes" ; then
6491 echo "CONFIG_VIRTFS=y" >> $config_host_mak
758e8e38 6492fi
fe8fc5ae
PB
6493if test "$mpath" = "yes" ; then
6494 echo "CONFIG_MPATH=y" >> $config_host_mak
6495fi
5e9be92d
NB
6496if test "$vhost_scsi" = "yes" ; then
6497 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6498fi
e6a74868 6499if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
03ce5744
NN
6500 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6501fi
042cea27
GA
6502if test "$vhost_crypto" = "yes" ; then
6503 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6504fi
fc0b9b0e
SH
6505if test "$vhost_vsock" = "yes" ; then
6506 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6507fi
e6a74868
MAL
6508if test "$vhost_user" = "yes" ; then
6509 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6510fi
77755340 6511if test "$blobs" = "yes" ; then
98ec69ac 6512 echo "INSTALL_BLOBS=yes" >> $config_host_mak
77755340 6513fi
bf9298b9 6514if test "$iovec" = "yes" ; then
2358a494 6515 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 6516fi
ceb42de8 6517if test "$preadv" = "yes" ; then
2358a494 6518 echo "CONFIG_PREADV=y" >> $config_host_mak
ceb42de8 6519fi
e3971d61 6520if test "$fdt" != "no" ; then
3f0855b1 6521 echo "CONFIG_FDT=y" >> $config_host_mak
f652e6af 6522fi
a40161cb
PB
6523if test "$membarrier" = "yes" ; then
6524 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6525fi
dcc38d1c
MT
6526if test "$signalfd" = "yes" ; then
6527 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6528fi
b3f6ea7e
PB
6529if test "$tcg" = "yes"; then
6530 echo "CONFIG_TCG=y" >> $config_host_mak
6531 if test "$tcg_interpreter" = "yes" ; then
6532 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6533 fi
9195b2c2 6534fi
5f6b9e8f
BS
6535if test "$fdatasync" = "yes" ; then
6536 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6537fi
e78815a5
AF
6538if test "$madvise" = "yes" ; then
6539 echo "CONFIG_MADVISE=y" >> $config_host_mak
6540fi
6541if test "$posix_madvise" = "yes" ; then
6542 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6543fi
9bc5a719
AG
6544if test "$posix_memalign" = "yes" ; then
6545 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6546fi
97a847bc 6547
cd4ec0b4
GH
6548if test "$spice" = "yes" ; then
6549 echo "CONFIG_SPICE=y" >> $config_host_mak
6550fi
36707144 6551
7b02f544
MAL
6552if test "$smartcard" = "yes" ; then
6553 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7b62bf5a
FZ
6554 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6555 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
111a38b0
RR
6556fi
6557
2b2325ff
GH
6558if test "$libusb" = "yes" ; then
6559 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
b878b652
FZ
6560 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6561 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
2b2325ff
GH
6562fi
6563
69354a83
HG
6564if test "$usb_redir" = "yes" ; then
6565 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
cc7923fc
FZ
6566 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6567 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
69354a83
HG
6568fi
6569
da076ffe
GH
6570if test "$opengl" = "yes" ; then
6571 echo "CONFIG_OPENGL=y" >> $config_host_mak
6572 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
014cb152
GH
6573 if test "$opengl_dmabuf" = "yes" ; then
6574 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6575 fi
20ff075b
MW
6576fi
6577
5a22ab71
YZ
6578if test "$malloc_trim" = "yes" ; then
6579 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6580fi
6581
99f2dbd3
LL
6582if test "$avx2_opt" = "yes" ; then
6583 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6584fi
6585
607dacd0
QN
6586if test "$lzo" = "yes" ; then
6587 echo "CONFIG_LZO=y" >> $config_host_mak
6588fi
6589
6590if test "$snappy" = "yes" ; then
6591 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6592fi
6593
6b383c08
PW
6594if test "$bzip2" = "yes" ; then
6595 echo "CONFIG_BZIP2=y" >> $config_host_mak
6596 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6597fi
6598
c589b249 6599if test "$libiscsi" = "yes" ; then
d3399d7c 6600 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6ebc91e5
FZ
6601 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6602 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
c589b249
RS
6603fi
6604
6542aa9c 6605if test "$libnfs" = "yes" ; then
4be4879f
CL
6606 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6607 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6542aa9c
PL
6608fi
6609
f794573e
EO
6610if test "$seccomp" = "yes"; then
6611 echo "CONFIG_SECCOMP=y" >> $config_host_mak
c3883e1f
FZ
6612 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6613 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
f794573e
EO
6614fi
6615
83fb7adf 6616# XXX: suppress that
7d3505c5 6617if [ "$bsd" = "yes" ] ; then
2358a494 6618 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
6619fi
6620
4d9310f4
DB
6621if test "$localtime_r" = "yes" ; then
6622 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6623fi
3556c233
PB
6624if test "$qom_cast_debug" = "yes" ; then
6625 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6626fi
f27aaf4b 6627if test "$rbd" = "yes" ; then
d3399d7c 6628 echo "CONFIG_RBD=m" >> $config_host_mak
6ebc91e5
FZ
6629 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6630 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
d0e2fce5
AK
6631fi
6632
7c2acc70 6633echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
6634if test "$coroutine_pool" = "yes" ; then
6635 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6636else
6637 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6638fi
20ff6c80 6639
7d992e4d
PL
6640if test "$debug_stack_usage" = "yes" ; then
6641 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6642fi
6643
f0d92b56
LM
6644if test "$crypto_afalg" = "yes" ; then
6645 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6646fi
6647
d2042378
AK
6648if test "$open_by_handle_at" = "yes" ; then
6649 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6650fi
6651
e06a765e
HPB
6652if test "$linux_magic_h" = "yes" ; then
6653 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
8ab1bf12
LC
6654fi
6655
cc6e3ca9
GH
6656if test "$pragma_diagnostic_available" = "yes" ; then
6657 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
06d71fa1
PM
6658fi
6659
3f4349dc
KW
6660if test "$valgrind_h" = "yes" ; then
6661 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6662fi
6663
d83414e1
MAL
6664if test "$have_asan_iface_fiber" = "yes" ; then
6665 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6666fi
6667
8ab1bf12
LC
6668if test "$has_environ" = "yes" ; then
6669 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
e06a765e
HPB
6670fi
6671
76a347e1
RH
6672if test "$cpuid_h" = "yes" ; then
6673 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6674fi
6675
f540166b
RH
6676if test "$int128" = "yes" ; then
6677 echo "CONFIG_INT128=y" >> $config_host_mak
6678fi
6679
7ebee43e
RH
6680if test "$atomic128" = "yes" ; then
6681 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6682fi
6683
df79b996
RH
6684if test "$atomic64" = "yes" ; then
6685 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6686fi
6687
db432672
RH
6688if test "$vector16" = "yes" ; then
6689 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6690fi
6691
1e6e9aca
RH
6692if test "$getauxval" = "yes" ; then
6693 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6694fi
6695
eb100396 6696if test "$glusterfs" = "yes" ; then
d3399d7c 6697 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6ebc91e5
FZ
6698 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6699 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
0c14fb47
BR
6700fi
6701
d85fa9eb
JC
6702if test "$glusterfs_xlator_opt" = "yes" ; then
6703 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6704fi
6705
0c14fb47
BR
6706if test "$glusterfs_discard" = "yes" ; then
6707 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
eb100396 6708fi
e06a765e 6709
df3a429a
NV
6710if test "$glusterfs_fallocate" = "yes" ; then
6711 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6712fi
6713
7c815372
BR
6714if test "$glusterfs_zerofill" = "yes" ; then
6715 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6716fi
6717
0a12ec87 6718if test "$libssh2" = "yes" ; then
d3399d7c 6719 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6ebc91e5
FZ
6720 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6721 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
0a12ec87
RJ
6722fi
6723
ed1701c6
DDAG
6724if test "$live_block_migration" = "yes" ; then
6725 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6726fi
6727
3b8acc11
PB
6728if test "$tpm" = "yes"; then
6729 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
f4ede81e 6730 # TPM passthrough support?
3b8acc11
PB
6731 if test "$tpm_passthrough" = "yes"; then
6732 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6733 fi
f4ede81e
AV
6734 # TPM emulator support?
6735 if test "$tpm_emulator" = "yes"; then
6736 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6737 fi
3b8acc11
PB
6738fi
6739
5b808275
LV
6740echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6741if have_backend "nop"; then
6d8a764e 6742 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 6743fi
5b808275 6744if have_backend "simple"; then
6d8a764e
LV
6745 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6746 # Set the appropriate trace file.
953ffe0f 6747 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 6748fi
ed7f5f1d
PB
6749if have_backend "log"; then
6750 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6d8a764e 6751fi
5b808275 6752if have_backend "ust"; then
6d8a764e
LV
6753 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6754fi
5b808275 6755if have_backend "dtrace"; then
6d8a764e
LV
6756 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6757 if test "$trace_backend_stap" = "yes" ; then
6758 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6759 fi
c276b17d 6760fi
5b808275 6761if have_backend "ftrace"; then
781e9545
ET
6762 if test "$linux" = "yes" ; then
6763 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 6764 else
21684af0 6765 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
6766 fi
6767fi
0a852417
PD
6768if have_backend "syslog"; then
6769 if test "$posix_syslog" = "yes" ; then
6770 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6771 else
6772 feature_not_found "syslog(trace backend)" "syslog not available"
6773 fi
6774fi
9410b56c
PS
6775echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6776
2da776db
MH
6777if test "$rdma" = "yes" ; then
6778 echo "CONFIG_RDMA=y" >> $config_host_mak
392fb643 6779 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
2da776db
MH
6780fi
6781
21ab34c9
MA
6782if test "$pvrdma" = "yes" ; then
6783 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6784fi
6785
575b22b1
LV
6786if test "$have_rtnetlink" = "yes" ; then
6787 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6788fi
6789
ed279a06
KK
6790if test "$libxml2" = "yes" ; then
6791 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6792 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6793 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6794fi
6795
a6b1d4c0
CX
6796if test "$replication" = "yes" ; then
6797 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6798fi
6799
6a02c806
SH
6800if test "$have_af_vsock" = "yes" ; then
6801 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6802fi
6803
4d04351f
CC
6804if test "$have_sysmacros" = "yes" ; then
6805 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6806fi
6807
49e00a18
AG
6808if test "$have_static_assert" = "yes" ; then
6809 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6810fi
6811
e674605f
TG
6812if test "$have_utmpx" = "yes" ; then
6813 echo "HAVE_UTMPX=y" >> $config_host_mak
6814fi
6815
e0580342
KR
6816if test "$ivshmem" = "yes" ; then
6817 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
8ca80760 6818fi
e219c499 6819if test "$capstone" != "no" ; then
8ca80760 6820 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
e0580342 6821fi
ba59fb77
PB
6822if test "$debug_mutex" = "yes" ; then
6823 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6824fi
e0580342 6825
5c312079
DDAG
6826# Hold two types of flag:
6827# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6828# a thread we have a handle to
6829# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6830# platform
6831if test "$pthread_setname_np" = "yes" ; then
6832 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6833 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6834fi
6835
da92c3ff
AM
6836if test "$vxhs" = "yes" ; then
6837 echo "CONFIG_VXHS=y" >> $config_host_mak
6838 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6839fi
6840
17824406
JH
6841if test "$libpmem" = "yes" ; then
6842 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6843fi
6844
5b5e3037 6845if test "$tcg_interpreter" = "yes"; then
9edc19c9 6846 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5b5e3037 6847elif test "$ARCH" = "sparc64" ; then
9edc19c9 6848 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5b5e3037 6849elif test "$ARCH" = "s390x" ; then
9edc19c9 6850 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
c72b26ec 6851elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
9edc19c9 6852 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
40d964b5 6853elif test "$ARCH" = "ppc64" ; then
9edc19c9 6854 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5b5e3037 6855else
9edc19c9 6856 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5b5e3037 6857fi
9edc19c9 6858QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
5b5e3037 6859
98ec69ac 6860echo "TOOLS=$tools" >> $config_host_mak
98ec69ac 6861echo "ROMS=$roms" >> $config_host_mak
804edf29
JQ
6862echo "MAKE=$make" >> $config_host_mak
6863echo "INSTALL=$install" >> $config_host_mak
1901cb14
BS
6864echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6865echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
e999ee44
MT
6866echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6867echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
c886edfb 6868echo "PYTHON=$python" >> $config_host_mak
804edf29 6869echo "CC=$cc" >> $config_host_mak
a31a8642
MT
6870if $iasl -h > /dev/null 2>&1; then
6871 echo "IASL=$iasl" >> $config_host_mak
6872fi
804edf29 6873echo "HOST_CC=$host_cc" >> $config_host_mak
83f73fce 6874echo "CXX=$cxx" >> $config_host_mak
3c4a4d0d 6875echo "OBJCC=$objcc" >> $config_host_mak
804edf29 6876echo "AR=$ar" >> $config_host_mak
45d285ab 6877echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
cdbd727c 6878echo "AS=$as" >> $config_host_mak
5f6f0e27 6879echo "CCAS=$ccas" >> $config_host_mak
3dd46c78 6880echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
6881echo "OBJCOPY=$objcopy" >> $config_host_mak
6882echo "LD=$ld" >> $config_host_mak
9f81aeb5 6883echo "RANLIB=$ranlib" >> $config_host_mak
4852ee95 6884echo "NM=$nm" >> $config_host_mak
9fe6de94 6885echo "WINDRES=$windres" >> $config_host_mak
e2a2ed06 6886echo "CFLAGS=$CFLAGS" >> $config_host_mak
46eef33b 6887echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 6888echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
11cde1c8 6889echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
f9728943 6890echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
e39f0062
PB
6891if test "$sparse" = "yes" ; then
6892 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
80fd48df 6893 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
2944d742 6894 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
e39f0062
PB
6895 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6896 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6897fi
42da6041
GH
6898if test "$cross_prefix" != ""; then
6899 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6900else
6901 echo "AUTOCONF_HOST := " >> $config_host_mak
6902fi
e2a2ed06 6903echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
46eef33b 6904echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
8a99e9a3 6905echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6969ec6c 6906echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
e57218b6 6907echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
73da375e 6908echo "LIBS+=$LIBS" >> $config_host_mak
3e2e0e6b 6909echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
409437e1 6910echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
804edf29 6911echo "EXESUF=$EXESUF" >> $config_host_mak
17969268
FZ
6912echo "DSOSUF=$DSOSUF" >> $config_host_mak
6913echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
957f1f99 6914echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
90246037
DB
6915echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6916echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
94dd53c5 6917echo "POD2MAN=$POD2MAN" >> $config_host_mak
cbdd1999 6918echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
1d728c39
BS
6919if test "$gcov" = "yes" ; then
6920 echo "CONFIG_GCOV=y" >> $config_host_mak
6921 echo "GCOV=$gcov_tool" >> $config_host_mak
6922fi
804edf29 6923
51a12b51
AB
6924if test "$docker" != "no"; then
6925 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6926fi
6927
6efd7517
PM
6928# use included Linux headers
6929if test "$linux" = "yes" ; then
a307beb6 6930 mkdir -p linux-headers
6efd7517 6931 case "$cpu" in
c72b26ec 6932 i386|x86_64|x32)
08312a63 6933 linux_arch=x86
6efd7517
PM
6934 ;;
6935 ppcemb|ppc|ppc64)
08312a63 6936 linux_arch=powerpc
6efd7517
PM
6937 ;;
6938 s390x)
08312a63
PM
6939 linux_arch=s390
6940 ;;
1f080313
CF
6941 aarch64)
6942 linux_arch=arm64
6943 ;;
222e7d11
SL
6944 mips64)
6945 linux_arch=mips
6946 ;;
08312a63
PM
6947 *)
6948 # For most CPUs the kernel architecture name and QEMU CPU name match.
6949 linux_arch="$cpu"
6efd7517
PM
6950 ;;
6951 esac
08312a63
PM
6952 # For non-KVM architectures we will not have asm headers
6953 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6954 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6955 fi
6efd7517
PM
6956fi
6957
1d14ffa9 6958for target in $target_list; do
97a847bc 6959target_dir="$target"
25be210f 6960config_target_mak=$target_dir/config-target.mak
89138857 6961target_name=$(echo $target | cut -d '-' -f 1)
97a847bc 6962target_bigendian="no"
1f3d3c8f 6963
c1799a84 6964case "$target_name" in
722dd7be 6965 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
ea2d6a39
JQ
6966 target_bigendian=yes
6967 ;;
6968esac
97a847bc 6969target_softmmu="no"
997344f3 6970target_user_only="no"
831b7825 6971target_linux_user="no"
84778508 6972target_bsd_user="no"
9e407a85 6973case "$target" in
c1799a84 6974 ${target_name}-softmmu)
9e407a85
PB
6975 target_softmmu="yes"
6976 ;;
c1799a84 6977 ${target_name}-linux-user)
9e407a85
PB
6978 target_user_only="yes"
6979 target_linux_user="yes"
6980 ;;
c1799a84 6981 ${target_name}-bsd-user)
84778508
BS
6982 target_user_only="yes"
6983 target_bsd_user="yes"
6984 ;;
9e407a85 6985 *)
76ad07a4 6986 error_exit "Target '$target' not recognised"
9e407a85
PB
6987 exit 1
6988 ;;
6989esac
831b7825 6990
d75402b5
AB
6991target_compiler=""
6992target_compiler_static=""
716a507c 6993target_compiler_cflags=""
d75402b5 6994
97a847bc 6995mkdir -p $target_dir
25be210f 6996echo "# Automatically generated by configure - do not modify" > $config_target_mak
de83cd02 6997
e5fe0c52 6998bflt="no"
ca759f9e 6999mttcg="no"
89138857 7000interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
56aebc89 7001gdb_xml_files=""
7ba1e619 7002
c1799a84 7003TARGET_ARCH="$target_name"
6acff7da 7004TARGET_BASE_ARCH=""
e6e91b9c 7005TARGET_ABI_DIR=""
e73aae67 7006
c1799a84 7007case "$target_name" in
2408a527 7008 i386)
b8158192 7009 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
d75402b5 7010 target_compiler=$cross_cc_i386
716a507c 7011 target_compiler_cflags=$cross_cc_ccflags_i386
2408a527
AJ
7012 ;;
7013 x86_64)
6acff7da 7014 TARGET_BASE_ARCH=i386
b8158192 7015 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
d75402b5 7016 target_compiler=$cross_cc_x86_64
2408a527
AJ
7017 ;;
7018 alpha)
5ee4f3c2 7019 mttcg="yes"
d75402b5 7020 target_compiler=$cross_cc_alpha
2408a527
AJ
7021 ;;
7022 arm|armeb)
b498c8a0 7023 TARGET_ARCH=arm
2408a527 7024 bflt="yes"
ca759f9e 7025 mttcg="yes"
56aebc89 7026 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
d75402b5 7027 target_compiler=$cross_cc_arm
d422b2bc 7028 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
2408a527 7029 ;;
722dd7be
MW
7030 aarch64|aarch64_be)
7031 TARGET_ARCH=aarch64
6a49fa95
AG
7032 TARGET_BASE_ARCH=arm
7033 bflt="yes"
ca759f9e 7034 mttcg="yes"
8f95ce2e 7035 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
d75402b5 7036 target_compiler=$cross_cc_aarch64
d422b2bc 7037 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
6a49fa95 7038 ;;
2408a527 7039 cris)
d75402b5 7040 target_compiler=$cross_cc_cris
2408a527 7041 ;;
61766fe9 7042 hppa)
7b93dab5 7043 mttcg="yes"
d75402b5 7044 target_compiler=$cross_cc_hppa
61766fe9 7045 ;;
613a22c9 7046 lm32)
d75402b5 7047 target_compiler=$cross_cc_lm32
613a22c9 7048 ;;
2408a527 7049 m68k)
2408a527 7050 bflt="yes"
5a4526b2 7051 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
d75402b5 7052 target_compiler=$cross_cc_m68k
2408a527 7053 ;;
877fdc12
EI
7054 microblaze|microblazeel)
7055 TARGET_ARCH=microblaze
72b675ca 7056 bflt="yes"
be73ef64 7057 echo "TARGET_ABI32=y" >> $config_target_mak
d75402b5 7058 target_compiler=$cross_cc_microblaze
72b675ca 7059 ;;
0adcffb1 7060 mips|mipsel)
b498c8a0 7061 TARGET_ARCH=mips
d75402b5 7062 target_compiler=$cross_cc_mips
25be210f 7063 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
2408a527
AJ
7064 ;;
7065 mipsn32|mipsn32el)
597e2cec 7066 TARGET_ARCH=mips64
6acff7da 7067 TARGET_BASE_ARCH=mips
d75402b5 7068 target_compiler=$cross_cc_mipsn32
25be210f 7069 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
597e2cec 7070 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527
AJ
7071 ;;
7072 mips64|mips64el)
b498c8a0 7073 TARGET_ARCH=mips64
6acff7da 7074 TARGET_BASE_ARCH=mips
d75402b5 7075 target_compiler=$cross_cc_mips64
25be210f 7076 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
2408a527 7077 ;;
d15a9c23 7078 moxie)
d75402b5 7079 target_compiler=$cross_cc_moxie
d15a9c23 7080 ;;
e671711c 7081 nios2)
d75402b5 7082 target_compiler=$cross_cc_nios2
e671711c 7083 ;;
4a09d0bb 7084 or1k)
d75402b5 7085 target_compiler=$cross_cc_or1k
e67db06e
JL
7086 TARGET_ARCH=openrisc
7087 TARGET_BASE_ARCH=openrisc
e67db06e 7088 ;;
2408a527 7089 ppc)
c8b3532d 7090 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
d75402b5 7091 target_compiler=$cross_cc_powerpc
2408a527
AJ
7092 ;;
7093 ppcemb)
6acff7da 7094 TARGET_BASE_ARCH=ppc
e6e91b9c 7095 TARGET_ABI_DIR=ppc
c8b3532d 7096 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
d75402b5 7097 target_compiler=$cross_cc_ppcemb
2408a527
AJ
7098 ;;
7099 ppc64)
6acff7da 7100 TARGET_BASE_ARCH=ppc
e6e91b9c 7101 TARGET_ABI_DIR=ppc
f0b0685d 7102 mttcg=yes
1438eff3 7103 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
d75402b5 7104 target_compiler=$cross_cc_ppc64
2408a527 7105 ;;
9c35126c
DK
7106 ppc64le)
7107 TARGET_ARCH=ppc64
7108 TARGET_BASE_ARCH=ppc
7109 TARGET_ABI_DIR=ppc
f0b0685d 7110 mttcg=yes
1438eff3 7111 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
d75402b5 7112 target_compiler=$cross_cc_ppc64le
9c35126c 7113 ;;
2408a527 7114 ppc64abi32)
b498c8a0 7115 TARGET_ARCH=ppc64
6acff7da 7116 TARGET_BASE_ARCH=ppc
e6e91b9c 7117 TARGET_ABI_DIR=ppc
25be210f 7118 echo "TARGET_ABI32=y" >> $config_target_mak
1438eff3 7119 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
d75402b5 7120 target_compiler=$cross_cc_ppc64abi32
2408a527 7121 ;;
25fa194b
MC
7122 riscv32)
7123 TARGET_BASE_ARCH=riscv
7124 TARGET_ABI_DIR=riscv
7125 mttcg=yes
d75402b5 7126 target_compiler=$cross_cc_riscv32
25fa194b
MC
7127 ;;
7128 riscv64)
7129 TARGET_BASE_ARCH=riscv
7130 TARGET_ABI_DIR=riscv
7131 mttcg=yes
d75402b5 7132 target_compiler=$cross_cc_riscv64
25fa194b 7133 ;;
2408a527 7134 sh4|sh4eb)
b498c8a0 7135 TARGET_ARCH=sh4
2408a527 7136 bflt="yes"
d75402b5 7137 target_compiler=$cross_cc_sh4
2408a527
AJ
7138 ;;
7139 sparc)
d75402b5 7140 target_compiler=$cross_cc_sparc
2408a527
AJ
7141 ;;
7142 sparc64)
6acff7da 7143 TARGET_BASE_ARCH=sparc
d75402b5 7144 target_compiler=$cross_cc_sparc64
2408a527
AJ
7145 ;;
7146 sparc32plus)
b498c8a0 7147 TARGET_ARCH=sparc64
6acff7da 7148 TARGET_BASE_ARCH=sparc
e6e91b9c 7149 TARGET_ABI_DIR=sparc
d75402b5 7150 target_compiler=$cross_cc_sparc32plus
25be210f 7151 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527 7152 ;;
24e804ec 7153 s390x)
63685bc4 7154 mttcg=yes
86158a2a 7155 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 7156 target_compiler=$cross_cc_s390x
24e804ec 7157 ;;
444e06b1 7158 tilegx)
d75402b5 7159 target_compiler=$cross_cc_tilegx
444e06b1 7160 ;;
5ecaa4ed 7161 tricore)
d75402b5 7162 target_compiler=$cross_cc_tricore
5ecaa4ed 7163 ;;
d2fbca94 7164 unicore32)
d75402b5 7165 target_compiler=$cross_cc_unicore32
d2fbca94 7166 ;;
cfa550c6
MF
7167 xtensa|xtensaeb)
7168 TARGET_ARCH=xtensa
9fb40342 7169 mttcg="yes"
d75402b5 7170 target_compiler=$cross_cc_xtensa
cfa550c6 7171 ;;
2408a527 7172 *)
76ad07a4 7173 error_exit "Unsupported target CPU"
2408a527
AJ
7174 ;;
7175esac
5e8861a0
PB
7176# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7177if [ "$TARGET_BASE_ARCH" = "" ]; then
7178 TARGET_BASE_ARCH=$TARGET_ARCH
7179fi
7180
d75402b5
AB
7181# Do we have a cross compiler for this target?
7182if has $target_compiler; then
7183
7184 write_c_skeleton
7185
716a507c 7186 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
d75402b5 7187 # For host systems we might get away with building without -static
716a507c 7188 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
d75402b5
AB
7189 target_compiler=""
7190 else
7191 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7192 target_compiler_static="n"
7193 fi
7194 else
7195 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7196 target_compiler_static="y"
7197 fi
7198else
7199 target_compiler=""
7200fi
7201
5e8861a0
PB
7202symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7203
99afc91d
DB
7204upper() {
7205 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7206}
7207
89138857 7208target_arch_name="$(upper $TARGET_ARCH)"
25be210f 7209echo "TARGET_$target_arch_name=y" >> $config_target_mak
c1799a84 7210echo "TARGET_NAME=$target_name" >> $config_target_mak
25be210f 7211echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
e6e91b9c
JQ
7212if [ "$TARGET_ABI_DIR" = "" ]; then
7213 TARGET_ABI_DIR=$TARGET_ARCH
7214fi
25be210f 7215echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
adfc3e91
SS
7216if [ "$HOST_VARIANT_DIR" != "" ]; then
7217 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7218fi
3b6b7550
PB
7219
7220if supported_xen_target $target; then
7221 echo "CONFIG_XEN=y" >> $config_target_mak
7222 if test "$xen_pci_passthrough" = yes; then
eb6fda0f 7223 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
1b0c87fc 7224 fi
3b6b7550
PB
7225fi
7226if supported_kvm_target $target; then
7227 echo "CONFIG_KVM=y" >> $config_target_mak
7228 if test "$vhost_net" = "yes" ; then
d5970055 7229 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
e6a74868
MAL
7230 if test "$vhost_user" = "yes" ; then
7231 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7232 fi
c59249f9 7233 fi
3b6b7550
PB
7234fi
7235if supported_hax_target $target; then
7236 echo "CONFIG_HAX=y" >> $config_target_mak
b0cb0a66 7237fi
c97d6d2c
SAGDR
7238if supported_hvf_target $target; then
7239 echo "CONFIG_HVF=y" >> $config_target_mak
7240fi
d661d9a4
JTV
7241if supported_whpx_target $target; then
7242 echo "CONFIG_WHPX=y" >> $config_target_mak
7243fi
de83cd02 7244if test "$target_bigendian" = "yes" ; then
25be210f 7245 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
de83cd02 7246fi
97a847bc 7247if test "$target_softmmu" = "yes" ; then
25be210f 7248 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
ca759f9e
AB
7249 if test "$mttcg" = "yes" ; then
7250 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7251 fi
43ce4dfe 7252fi
997344f3 7253if test "$target_user_only" = "yes" ; then
25be210f 7254 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
a2c80be9 7255 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
997344f3 7256fi
831b7825 7257if test "$target_linux_user" = "yes" ; then
25be210f 7258 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
831b7825 7259fi
56aebc89
PB
7260list=""
7261if test ! -z "$gdb_xml_files" ; then
7262 for x in $gdb_xml_files; do
7263 list="$list $source_path/gdb-xml/$x"
7264 done
3d0f1517 7265 echo "TARGET_XML_FILES=$list" >> $config_target_mak
56aebc89 7266fi
97a847bc 7267
e5fe0c52 7268if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
25be210f 7269 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
e5fe0c52 7270fi
84778508 7271if test "$target_bsd_user" = "yes" ; then
25be210f 7272 echo "CONFIG_BSD_USER=y" >> $config_target_mak
84778508 7273fi
5b0753e0 7274
d75402b5
AB
7275if test -n "$target_compiler"; then
7276 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7277
7278 if test -n "$target_compiler_static"; then
7279 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7280 fi
716a507c
AB
7281
7282 if test -n "$target_compiler_cflags"; then
7283 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7284 fi
d75402b5
AB
7285fi
7286
716a507c 7287
4afddb55 7288# generate QEMU_CFLAGS/LDFLAGS for targets
fa282484 7289
4afddb55 7290cflags=""
fa282484 7291ldflags=""
9b8e111f 7292
c765fcac
PC
7293disas_config() {
7294 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7295 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7296}
7297
64656024
JQ
7298for i in $ARCH $TARGET_BASE_ARCH ; do
7299 case "$i" in
7300 alpha)
c765fcac 7301 disas_config "ALPHA"
64656024 7302 ;;
82295d8a
RH
7303 aarch64)
7304 if test -n "${cxx}"; then
c765fcac 7305 disas_config "ARM_A64"
82295d8a
RH
7306 fi
7307 ;;
64656024 7308 arm)
c765fcac 7309 disas_config "ARM"
999b53ec 7310 if test -n "${cxx}"; then
c765fcac 7311 disas_config "ARM_A64"
999b53ec 7312 fi
64656024
JQ
7313 ;;
7314 cris)
c765fcac 7315 disas_config "CRIS"
64656024 7316 ;;
429b31a2
RH
7317 hppa)
7318 disas_config "HPPA"
7319 ;;
c72b26ec 7320 i386|x86_64|x32)
c765fcac 7321 disas_config "I386"
64656024 7322 ;;
79368f49 7323 lm32)
c765fcac 7324 disas_config "LM32"
79368f49 7325 ;;
64656024 7326 m68k)
c765fcac 7327 disas_config "M68K"
64656024 7328 ;;
877fdc12 7329 microblaze*)
c765fcac 7330 disas_config "MICROBLAZE"
64656024
JQ
7331 ;;
7332 mips*)
c765fcac 7333 disas_config "MIPS"
64656024 7334 ;;
d15a9c23 7335 moxie*)
c765fcac 7336 disas_config "MOXIE"
d15a9c23 7337 ;;
e671711c
MV
7338 nios2)
7339 disas_config "NIOS2"
7340 ;;
4a09d0bb 7341 or1k)
c765fcac 7342 disas_config "OPENRISC"
e67db06e 7343 ;;
64656024 7344 ppc*)
c765fcac 7345 disas_config "PPC"
64656024 7346 ;;
25fa194b
MC
7347 riscv)
7348 disas_config "RISCV"
7349 ;;
24e804ec 7350 s390*)
c765fcac 7351 disas_config "S390"
64656024
JQ
7352 ;;
7353 sh4)
c765fcac 7354 disas_config "SH4"
64656024
JQ
7355 ;;
7356 sparc*)
c765fcac 7357 disas_config "SPARC"
64656024 7358 ;;
cfa550c6 7359 xtensa*)
c765fcac 7360 disas_config "XTENSA"
cfa550c6 7361 ;;
64656024
JQ
7362 esac
7363done
9195b2c2 7364if test "$tcg_interpreter" = "yes" ; then
c765fcac 7365 disas_config "TCI"
9195b2c2 7366fi
64656024 7367
6ee7126f
JQ
7368case "$ARCH" in
7369alpha)
7370 # Ensure there's only a single GP
7371 cflags="-msmall-data $cflags"
7372;;
7373esac
7374
d02c1db3 7375if test "$gprof" = "yes" ; then
25be210f 7376 echo "TARGET_GPROF=yes" >> $config_target_mak
d02c1db3
JQ
7377 if test "$target_linux_user" = "yes" ; then
7378 cflags="-p $cflags"
7379 ldflags="-p $ldflags"
7380 fi
7381 if test "$target_softmmu" = "yes" ; then
7382 ldflags="-p $ldflags"
25be210f 7383 echo "GPROF_CFLAGS=-p" >> $config_target_mak
d02c1db3
JQ
7384 fi
7385fi
7386
9b8e111f 7387if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
964c6fa1 7388 ldflags="$ldflags $textseg_ldflags"
fa282484 7389fi
fa282484 7390
e9a3591f
CB
7391# Newer kernels on s390 check for an S390_PGSTE program header and
7392# enable the pgste page table extensions in that case. This makes
7393# the vm.allocate_pgste sysctl unnecessary. We enable this program
7394# header if
7395# - we build on s390x
7396# - we build the system emulation for s390x (qemu-system-s390x)
7397# - KVM is enabled
7398# - the linker supports --s390-pgste
7399if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7400 if ld_has --s390-pgste ; then
7401 ldflags="-Wl,--s390-pgste $ldflags"
7402 fi
7403fi
7404
25be210f
JQ
7405echo "LDFLAGS+=$ldflags" >> $config_target_mak
7406echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
fa282484 7407
97a847bc 7408done # for target in $targets
7d13299d 7409
d75402b5
AB
7410if test -n "$enabled_cross_compilers"; then
7411 echo
7412 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7413fi
7414
e3971d61 7415if [ "$fdt" = "git" ]; then
a540f158
PC
7416 echo "config-host.h: subdir-dtc" >> $config_host_mak
7417fi
e219c499
RH
7418if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7419 echo "config-host.h: subdir-capstone" >> $config_host_mak
7420fi
7421if test -n "$LIBCAPSTONE"; then
7422 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7423fi
a540f158 7424
a99d57bb
WG
7425if test "$numa" = "yes"; then
7426 echo "CONFIG_NUMA=y" >> $config_host_mak
7427fi
7428
fd0e6053
JS
7429if test "$ccache_cpp2" = "yes"; then
7430 echo "export CCACHE_CPP2=y" >> $config_host_mak
7431fi
7432
d1807a4f 7433# build tree in object directory in case the source is not in the current directory
b1fb9a63 7434DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
b855f8d1 7435DIRS="$DIRS docs docs/interop fsdev scsi"
9933c305 7436DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
d1807a4f 7437DIRS="$DIRS roms/seabios roms/vgabios"
c09015dd
AL
7438FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7439FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
aaa2ebc5 7440FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
d1807a4f 7441FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
446b9165 7442FILES="$FILES pc-bios/spapr-rtas/Makefile"
9933c305 7443FILES="$FILES pc-bios/s390-ccw/Makefile"
d1807a4f 7444FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
4652b792 7445FILES="$FILES pc-bios/qemu-icon.bmp"
3a586d2f 7446FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
753d11f2
RH
7447for bios_file in \
7448 $source_path/pc-bios/*.bin \
225a9ab8 7449 $source_path/pc-bios/*.lid \
5acc2ec0 7450 $source_path/pc-bios/*.aml \
753d11f2
RH
7451 $source_path/pc-bios/*.rom \
7452 $source_path/pc-bios/*.dtb \
e89e33e1 7453 $source_path/pc-bios/*.img \
753d11f2 7454 $source_path/pc-bios/openbios-* \
4e73c781 7455 $source_path/pc-bios/u-boot.* \
753d11f2
RH
7456 $source_path/pc-bios/palcode-*
7457do
89138857 7458 FILES="$FILES pc-bios/$(basename $bios_file)"
d1807a4f 7459done
89138857 7460for test_file in $(find $source_path/tests/acpi-test-data -type f)
c2304b52 7461do
89138857 7462 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
c2304b52 7463done
645d3cbe
SH
7464for test_file in $(find $source_path/tests/hex-loader-check-data -type f)
7465do
7466 FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')"
7467done
d1807a4f
PB
7468mkdir -p $DIRS
7469for f in $FILES ; do
cab00a5a 7470 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
f9245e10
PM
7471 symlink "$source_path/$f" "$f"
7472 fi
d1807a4f 7473done
1ad2134f 7474
c34ebfdc 7475# temporary config to build submodules
2d9f27d2 7476for rom in seabios vgabios ; do
c34ebfdc 7477 config_mak=roms/$rom/config.mak
37116c89 7478 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 7479 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
cdbd727c 7480 echo "AS=$as" >> $config_mak
5f6f0e27 7481 echo "CCAS=$ccas" >> $config_mak
c34ebfdc
AL
7482 echo "CC=$cc" >> $config_mak
7483 echo "BCC=bcc" >> $config_mak
3dd46c78 7484 echo "CPP=$cpp" >> $config_mak
c34ebfdc 7485 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 7486 echo "IASL=$iasl" >> $config_mak
c34ebfdc 7487 echo "LD=$ld" >> $config_mak
9f81aeb5 7488 echo "RANLIB=$ranlib" >> $config_mak
c34ebfdc
AL
7489done
7490
fe31017f 7491# set up tests data directory
1b145d59
PMD
7492for tests_subdir in acceptance data; do
7493 if [ ! -e tests/$tests_subdir ]; then
7494 symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir
7495 fi
7496done
fe31017f 7497
76c7560a
HR
7498# set up qemu-iotests in this build directory
7499iotests_common_env="tests/qemu-iotests/common.env"
7500iotests_check="tests/qemu-iotests/check"
7501
7502echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7503echo >> "$iotests_common_env"
7504echo "export PYTHON='$python'" >> "$iotests_common_env"
7505
7506if [ ! -e "$iotests_check" ]; then
7507 symlink "$source_path/$iotests_check" "$iotests_check"
7508fi
7509
dc655404
MT
7510# Save the configure command line for later reuse.
7511cat <<EOD >config.status
7512#!/bin/sh
7513# Generated by configure.
7514# Run this file to recreate the current configuration.
7515# Compiler output produced by configure, useful for debugging
7516# configure, is in config.log if it exists.
7517EOD
7518printf "exec" >>config.status
7519printf " '%s'" "$0" "$@" >>config.status
cf7cc929 7520echo ' "$@"' >>config.status
dc655404
MT
7521chmod +x config.status
7522
8cd05ab6 7523rm -r "$TMPDIR1"