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