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