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