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