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