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