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