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