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