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