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