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