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