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