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