]> git.proxmox.com Git - mirror_qemu.git/blame - configure
gitlab: include aarch64-softmmu and ppc64-softmmu cross-system-build
[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
0a2ebce9 2026add_to warn_flags -Wimplicit-fallthrough=2
00849b92
RH
2027
2028nowarn_flags=
2029add_to nowarn_flags -Wno-initializer-overrides
2030add_to nowarn_flags -Wno-missing-include-dirs
2031add_to nowarn_flags -Wno-shift-negative-value
2032add_to nowarn_flags -Wno-string-plus-int
2033add_to nowarn_flags -Wno-typedef-redefinition
aabab967 2034add_to nowarn_flags -Wno-tautological-type-limit-compare
bac8d222 2035add_to nowarn_flags -Wno-psabi
00849b92
RH
2036
2037gcc_flags="$warn_flags $nowarn_flags"
93b25869
JS
2038
2039cc_has_warning_flag() {
2040 write_c_skeleton;
2041
a1d29d6c
PM
2042 # Use the positive sense of the flag when testing for -Wno-wombat
2043 # support (gcc will happily accept the -Wno- form of unknown
2044 # warning options).
93b25869
JS
2045 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2046 compile_prog "-Werror $optflag" ""
2047}
2048
2049for flag in $gcc_flags; do
2050 if cc_has_warning_flag $flag ; then
2051 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
8d05095c
PB
2052 fi
2053done
2054
3b463a3f 2055if test "$stack_protector" != "no"; then
fccd35a0
RR
2056 cat > $TMPC << EOF
2057int main(int argc, char *argv[])
2058{
2059 char arr[64], *p = arr, *c = argv[0];
2060 while (*c) {
2061 *p++ = *c++;
2062 }
2063 return 0;
2064}
2065EOF
63678e17 2066 gcc_flags="-fstack-protector-strong -fstack-protector-all"
3b463a3f 2067 sp_on=0
63678e17 2068 for flag in $gcc_flags; do
590e5dd9
PM
2069 # We need to check both a compile and a link, since some compiler
2070 # setups fail only on a .c->.o compile and some only at link time
086d5f75 2071 if compile_object "-Werror $flag" &&
590e5dd9 2072 compile_prog "-Werror $flag" ""; then
63678e17 2073 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
db5adeaa 2074 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3b463a3f 2075 sp_on=1
63678e17
SN
2076 break
2077 fi
2078 done
3b463a3f
MR
2079 if test "$stack_protector" = yes; then
2080 if test $sp_on = 0; then
2081 error_exit "Stack protector not supported"
2082 fi
2083 fi
37746c5e
MAL
2084fi
2085
20bc94a2
PB
2086# Disable -Wmissing-braces on older compilers that warn even for
2087# the "universal" C zero initializer {0}.
2088cat > $TMPC << EOF
2089struct {
2090 int a[2];
2091} x = {0};
2092EOF
2093if compile_object "-Werror" "" ; then
2094 :
2095else
2096 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2097fi
2098
21e709aa
MAL
2099# Our module code doesn't support Windows
2100if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2101 error_exit "Modules are not available for Windows"
2102fi
2103
bd83c861
CE
2104# module_upgrades is only reasonable if modules are enabled
2105if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2106 error_exit "Can't enable module-upgrades as Modules are not enabled"
2107fi
2108
d376e9de 2109# Static linking is not possible with modules or PIE
40d6444e 2110if test "$static" = "yes" ; then
aa0d1f44
PB
2111 if test "$modules" = "yes" ; then
2112 error_exit "static and modules are mutually incompatible"
2113 fi
40d6444e
AK
2114fi
2115
768b7855
EC
2116# Unconditional check for compiler __thread support
2117 cat > $TMPC << EOF
2118static __thread int tls_var;
2119int main(void) { return tls_var; }
2120EOF
2121
2122if ! compile_prog "-Werror" "" ; then
2123 error_exit "Your compiler does not support the __thread specifier for " \
2124 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2125fi
2126
b2634124 2127cat > $TMPC << EOF
21d4a791
AK
2128
2129#ifdef __linux__
2130# define THREAD __thread
2131#else
2132# define THREAD
2133#endif
21d4a791 2134static THREAD int tls_var;
21d4a791 2135int main(void) { return tls_var; }
40d6444e 2136EOF
412aeacd 2137
b2634124
RH
2138# Check we support --no-pie first; we will need this for building ROMs.
2139if compile_prog "-Werror -fno-pie" "-no-pie"; then
2140 CFLAGS_NOPIE="-fno-pie"
b2634124
RH
2141fi
2142
12781462 2143if test "$static" = "yes"; then
eca7a8e6 2144 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
5770e8af 2145 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
12781462
RH
2146 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2147 pie="yes"
2148 elif test "$pie" = "yes"; then
2149 error_exit "-static-pie not available due to missing toolchain support"
2150 else
2151 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2152 pie="no"
2153 fi
2154elif test "$pie" = "no"; then
5770e8af 2155 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
eca7a8e6 2156elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
5770e8af
PB
2157 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2158 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
2c674109
RH
2159 pie="yes"
2160elif test "$pie" = "yes"; then
2161 error_exit "PIE not available due to missing toolchain support"
2162else
2163 echo "Disabling PIE due to missing toolchain support"
2164 pie="no"
40d6444e
AK
2165fi
2166
e6cbd751
RH
2167# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2168# The combination is known as "full relro", because .got.plt is read-only too.
2169if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2170 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2171fi
2172
09dada40
PB
2173##########################################
2174# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2175# use i686 as default anyway, but for those that don't, an explicit
2176# specification is necessary
2177
2178if test "$cpu" = "i386"; then
2179 cat > $TMPC << EOF
2180static int sfaa(int *ptr)
2181{
2182 return __sync_fetch_and_and(ptr, 0);
2183}
2184
2185int main(void)
2186{
2187 int val = 42;
1405b629 2188 val = __sync_val_compare_and_swap(&val, 0, 1);
09dada40
PB
2189 sfaa(&val);
2190 return val;
2191}
2192EOF
2193 if ! compile_prog "" "" ; then
2194 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2195 fi
2196fi
2197
2198#########################################
ec530c81 2199# Solaris specific configure tool chain decisions
09dada40 2200
ec530c81 2201if test "$solaris" = "yes" ; then
6792aa11
LM
2202 if has ar; then
2203 :
2204 else
ec530c81 2205 if test -f /usr/ccs/bin/ar ; then
76ad07a4
PM
2206 error_exit "No path includes ar" \
2207 "Add /usr/ccs/bin to your path and rerun configure"
ec530c81 2208 fi
76ad07a4 2209 error_exit "No path includes ar"
ec530c81 2210 fi
5fafdf24 2211fi
ec530c81 2212
afb63ebd 2213if test -z "${target_list+xxx}" ; then
fdb75aef 2214 default_targets=yes
d880a3ba 2215 for target in $default_target_list; do
fdb75aef 2216 target_list="$target_list $target"
d880a3ba
PB
2217 done
2218 target_list="${target_list# }"
121afa9e 2219else
fdb75aef 2220 default_targets=no
89138857 2221 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
d880a3ba
PB
2222 for target in $target_list; do
2223 # Check that we recognised the target name; this allows a more
2224 # friendly error message than if we let it fall through.
2225 case " $default_target_list " in
2226 *" $target "*)
2227 ;;
2228 *)
2229 error_exit "Unknown target name '$target'"
2230 ;;
2231 esac
d880a3ba 2232 done
121afa9e 2233fi
25b48338 2234
fdb75aef
PB
2235for target in $target_list; do
2236 # if a deprecated target is enabled we note it here
2237 if echo "$deprecated_targets_list" | grep -q "$target"; then
2238 add_to deprecated_features $target
2239 fi
2240done
2241
f55fe278
PB
2242# see if system emulation was really requested
2243case " $target_list " in
2244 *"-softmmu "*) softmmu=yes
2245 ;;
2246 *) softmmu=no
2247 ;;
2248esac
5327cf48 2249
249247c9
JQ
2250feature_not_found() {
2251 feature=$1
21684af0 2252 remedy=$2
249247c9 2253
76ad07a4 2254 error_exit "User requested feature $feature" \
21684af0
SS
2255 "configure was not able to find it." \
2256 "$remedy"
249247c9
JQ
2257}
2258
7d13299d
FB
2259# ---
2260# big/little endian test
2261cat > $TMPC << EOF
61cc919f
MF
2262short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2263short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2264extern int foo(short *, short *);
2265int main(int argc, char *argv[]) {
2266 return foo(big_endian, little_endian);
7d13299d
FB
2267}
2268EOF
2269
61cc919f 2270if compile_object ; then
12f15c91 2271 if strings -a $TMPO | grep -q BiGeNdIaN ; then
61cc919f 2272 bigendian="yes"
12f15c91 2273 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
61cc919f
MF
2274 bigendian="no"
2275 else
2276 echo big/little test failed
21d89f84 2277 fi
61cc919f
MF
2278else
2279 echo big/little test failed
7d13299d
FB
2280fi
2281
e10ee3f5
PMD
2282##########################################
2283# system tools
2284if test -z "$want_tools"; then
2285 if test "$softmmu" = "no"; then
2286 want_tools=no
2287 else
2288 want_tools=yes
2289 fi
2290fi
2291
a30878e7
PM
2292##########################################
2293# cocoa implies not SDL or GTK
2294# (the cocoa UI code currently assumes it is always the active UI
2295# and doesn't interact well with other UI frontend code)
b4e312e9
PB
2296if test "$cocoa" = "enabled"; then
2297 if test "$sdl" = "enabled"; then
a30878e7
PM
2298 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2299 fi
2300 if test "$gtk" = "yes"; then
2301 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2302 fi
2303 gtk=no
35be72ba 2304 sdl=disabled
a30878e7
PM
2305fi
2306
6b39b063
EB
2307# Some versions of Mac OS X incorrectly define SIZE_MAX
2308cat > $TMPC << EOF
2309#include <stdint.h>
2310#include <stdio.h>
2311int main(int argc, char *argv[]) {
2312 return printf("%zu", SIZE_MAX);
2313}
2314EOF
2315have_broken_size_max=no
2316if ! compile_object -Werror ; then
2317 have_broken_size_max=yes
2318fi
2319
015a33bd
GA
2320##########################################
2321# L2TPV3 probe
2322
2323cat > $TMPC <<EOF
2324#include <sys/socket.h>
bff6cb72 2325#include <linux/ip.h>
015a33bd
GA
2326int main(void) { return sizeof(struct mmsghdr); }
2327EOF
2328if compile_prog "" "" ; then
2329 l2tpv3=yes
2330else
2331 l2tpv3=no
2332fi
2333
195588cc
DC
2334cat > $TMPC <<EOF
2335#include <sys/mman.h>
2336int main(int argc, char *argv[]) {
2337 return mlockall(MCL_FUTURE);
2338}
2339EOF
2340if compile_prog "" "" ; then
2341 have_mlockall=yes
2342else
2343 have_mlockall=no
2344fi
2345
299e6f19
PB
2346#########################################
2347# vhost interdependencies and host support
2348
2349# vhost backends
d88618f7
SH
2350if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2351 error_exit "vhost-user is only available on Linux"
299e6f19 2352fi
108a6481
CL
2353test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2354if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2355 error_exit "vhost-vdpa is only available on Linux"
2356fi
299e6f19
PB
2357test "$vhost_kernel" = "" && vhost_kernel=$linux
2358if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2359 error_exit "vhost-kernel is only available on Linux"
2360fi
2361
2362# vhost-kernel devices
2363test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2364if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2365 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2366fi
2367test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2368if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2369 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2370fi
2371
2372# vhost-user backends
2373test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2374if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2375 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2376fi
2377test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2378if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2379 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2380fi
98fc1ada
DDAG
2381test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2382if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2383 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2384fi
108a6481
CL
2385#vhost-vdpa backends
2386test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2387if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2388 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2389fi
299e6f19 2390
40bc0ca9 2391# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
299e6f19
PB
2392if test "$vhost_net" = ""; then
2393 test "$vhost_net_user" = "yes" && vhost_net=yes
40bc0ca9 2394 test "$vhost_net_vdpa" = "yes" && vhost_net=yes
299e6f19
PB
2395 test "$vhost_kernel" = "yes" && vhost_net=yes
2396fi
2397
779ab5e3
SW
2398##########################################
2399# pkg-config probe
2400
2401if ! has "$pkg_config_exe"; then
76ad07a4 2402 error_exit "pkg-config binary '$pkg_config_exe' not found"
779ab5e3
SW
2403fi
2404
b0a47e79
JQ
2405##########################################
2406# NPTL probe
2407
24cb36a6 2408if test "$linux_user" = "yes"; then
b0a47e79 2409 cat > $TMPC <<EOF
bd0c5661 2410#include <sched.h>
30813cea 2411#include <linux/futex.h>
182eacc0 2412int main(void) {
bd0c5661
PB
2413#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2414#error bork
2415#endif
182eacc0 2416 return 0;
bd0c5661
PB
2417}
2418EOF
24cb36a6 2419 if ! compile_object ; then
21684af0 2420 feature_not_found "nptl" "Install glibc and linux kernel headers."
b0a47e79 2421 fi
bd0c5661
PB
2422fi
2423
607dacd0
QN
2424##########################################
2425# lzo check
2426
2427if test "$lzo" != "no" ; then
2428 cat > $TMPC << EOF
2429#include <lzo/lzo1x.h>
2430int main(void) { lzo_version(); return 0; }
2431EOF
2432 if compile_prog "" "-llzo2" ; then
708eab42 2433 lzo_libs="-llzo2"
b25c9dff 2434 lzo="yes"
607dacd0 2435 else
b25c9dff
SW
2436 if test "$lzo" = "yes"; then
2437 feature_not_found "liblzo2" "Install liblzo2 devel"
2438 fi
2439 lzo="no"
607dacd0 2440 fi
607dacd0
QN
2441fi
2442
2443##########################################
2444# snappy check
2445
2446if test "$snappy" != "no" ; then
2447 cat > $TMPC << EOF
2448#include <snappy-c.h>
2449int main(void) { snappy_max_compressed_length(4096); return 0; }
2450EOF
2451 if compile_prog "" "-lsnappy" ; then
708eab42 2452 snappy_libs='-lsnappy'
b25c9dff 2453 snappy="yes"
607dacd0 2454 else
b25c9dff
SW
2455 if test "$snappy" = "yes"; then
2456 feature_not_found "libsnappy" "Install libsnappy devel"
2457 fi
2458 snappy="no"
607dacd0 2459 fi
607dacd0
QN
2460fi
2461
6b383c08
PW
2462##########################################
2463# bzip2 check
2464
2465if test "$bzip2" != "no" ; then
2466 cat > $TMPC << EOF
2467#include <bzlib.h>
2468int main(void) { BZ2_bzlibVersion(); return 0; }
2469EOF
2470 if compile_prog "" "-lbz2" ; then
2471 bzip2="yes"
2472 else
2473 if test "$bzip2" = "yes"; then
2474 feature_not_found "libbzip2" "Install libbzip2 devel"
2475 fi
2476 bzip2="no"
2477 fi
2478fi
2479
83bc1f97
JF
2480##########################################
2481# lzfse check
2482
2483if test "$lzfse" != "no" ; then
2484 cat > $TMPC << EOF
2485#include <lzfse.h>
2486int main(void) { lzfse_decode_scratch_size(); return 0; }
2487EOF
2488 if compile_prog "" "-llzfse" ; then
2489 lzfse="yes"
2490 else
2491 if test "$lzfse" = "yes"; then
2492 feature_not_found "lzfse" "Install lzfse devel"
2493 fi
2494 lzfse="no"
2495 fi
2496fi
2497
3a678481
JQ
2498##########################################
2499# zstd check
2500
2501if test "$zstd" != "no" ; then
297254c7
JQ
2502 libzstd_minver="1.4.0"
2503 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
3a678481
JQ
2504 zstd_cflags="$($pkg_config --cflags libzstd)"
2505 zstd_libs="$($pkg_config --libs libzstd)"
3a678481
JQ
2506 zstd="yes"
2507 else
2508 if test "$zstd" = "yes" ; then
2509 feature_not_found "libzstd" "Install libzstd devel"
2510 fi
2511 zstd="no"
2512 fi
2513fi
2514
f794573e
EO
2515##########################################
2516# libseccomp check
2517
2518if test "$seccomp" != "no" ; then
25ed0ecc
HD
2519 libseccomp_minver="2.3.0"
2520 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
c3883e1f
FZ
2521 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2522 seccomp_libs="$($pkg_config --libs libseccomp)"
693e5910 2523 seccomp="yes"
f794573e 2524 else
693e5910 2525 if test "$seccomp" = "yes" ; then
25ed0ecc
HD
2526 feature_not_found "libseccomp" \
2527 "Install libseccomp devel >= $libseccomp_minver"
693e5910
AJ
2528 fi
2529 seccomp="no"
f794573e
EO
2530 fi
2531fi
3bd40ec7 2532
e37630ca
AL
2533##########################################
2534# xen probe
2535
1badb709 2536if test "$xen" != "disabled" ; then
c1cdd9d5
JG
2537 # Check whether Xen library path is specified via --extra-ldflags to avoid
2538 # overriding this setting with pkg-config output. If not, try pkg-config
2539 # to obtain all needed flags.
2540
2541 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2542 $pkg_config --exists xencontrol ; then
2543 xen_ctrl_version="$(printf '%d%02d%02d' \
2544 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
1badb709 2545 xen=enabled
5b6a8f43 2546 xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
c1cdd9d5 2547 xen_pc="$xen_pc xenevtchn xendevicemodel"
58ea9a7a
AP
2548 if $pkg_config --exists xentoolcore; then
2549 xen_pc="$xen_pc xentoolcore"
2550 fi
582ea95f
MAL
2551 xen_cflags="$($pkg_config --cflags $xen_pc)"
2552 xen_libs="$($pkg_config --libs $xen_pc)"
c1cdd9d5 2553 else
d5b93ddf 2554
5b6a8f43 2555 xen_libs="-lxenstore -lxenctrl"
d9506cab 2556 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
50ced5b3 2557
c1cdd9d5
JG
2558 # First we test whether Xen headers and libraries are available.
2559 # If no, we are done and there is no Xen support.
2560 # If yes, more tests are run to detect the Xen version.
2561
2562 # Xen (any)
2563 cat > $TMPC <<EOF
e37630ca 2564#include <xenctrl.h>
50ced5b3
SW
2565int main(void) {
2566 return 0;
2567}
2568EOF
c1cdd9d5
JG
2569 if ! compile_prog "" "$xen_libs" ; then
2570 # Xen not found
1badb709 2571 if test "$xen" = "enabled" ; then
c1cdd9d5
JG
2572 feature_not_found "xen" "Install xen devel"
2573 fi
1badb709 2574 xen=disabled
50ced5b3 2575
c1cdd9d5
JG
2576 # Xen unstable
2577 elif
2578 cat > $TMPC <<EOF &&
2cbf8903
RL
2579#undef XC_WANT_COMPAT_DEVICEMODEL_API
2580#define __XEN_TOOLS__
2581#include <xendevicemodel.h>
d3c49ebb 2582#include <xenforeignmemory.h>
2cbf8903
RL
2583int main(void) {
2584 xendevicemodel_handle *xd;
d3c49ebb 2585 xenforeignmemory_handle *xfmem;
2cbf8903
RL
2586
2587 xd = xendevicemodel_open(0, 0);
2588 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2589
d3c49ebb
PD
2590 xfmem = xenforeignmemory_open(0, 0);
2591 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2592
2cbf8903
RL
2593 return 0;
2594}
2595EOF
2596 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2597 then
2598 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2599 xen_ctrl_version=41100
1badb709 2600 xen=enabled
2cbf8903
RL
2601 elif
2602 cat > $TMPC <<EOF &&
5ba3d756
ID
2603#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2604#include <xenforeignmemory.h>
58ea9a7a 2605#include <xentoolcore.h>
5ba3d756
ID
2606int main(void) {
2607 xenforeignmemory_handle *xfmem;
2608
2609 xfmem = xenforeignmemory_open(0, 0);
2610 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
58ea9a7a 2611 xentoolcore_restrict_all(0);
5ba3d756
ID
2612
2613 return 0;
2614}
2615EOF
58ea9a7a 2616 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
5ba3d756 2617 then
58ea9a7a 2618 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
5ba3d756 2619 xen_ctrl_version=41000
1badb709 2620 xen=enabled
5ba3d756
ID
2621 elif
2622 cat > $TMPC <<EOF &&
da8090cc
PD
2623#undef XC_WANT_COMPAT_DEVICEMODEL_API
2624#define __XEN_TOOLS__
2625#include <xendevicemodel.h>
2626int main(void) {
2627 xendevicemodel_handle *xd;
2628
2629 xd = xendevicemodel_open(0, 0);
2630 xendevicemodel_close(xd);
50ced5b3 2631
da8090cc
PD
2632 return 0;
2633}
2634EOF
c1cdd9d5
JG
2635 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2636 then
2637 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2638 xen_ctrl_version=40900
1badb709 2639 xen=enabled
c1cdd9d5
JG
2640 elif
2641 cat > $TMPC <<EOF &&
b6eb9b45
PS
2642/*
2643 * If we have stable libs the we don't want the libxc compat
2644 * layers, regardless of what CFLAGS we may have been given.
2645 *
2646 * Also, check if xengnttab_grant_copy_segment_t is defined and
2647 * grant copy operation is implemented.
2648 */
2649#undef XC_WANT_COMPAT_EVTCHN_API
2650#undef XC_WANT_COMPAT_GNTTAB_API
2651#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2652#include <xenctrl.h>
2653#include <xenstore.h>
2654#include <xenevtchn.h>
2655#include <xengnttab.h>
2656#include <xenforeignmemory.h>
2657#include <stdint.h>
2658#include <xen/hvm/hvm_info_table.h>
2659#if !defined(HVM_MAX_VCPUS)
2660# error HVM_MAX_VCPUS not defined
2661#endif
2662int main(void) {
2663 xc_interface *xc = NULL;
2664 xenforeignmemory_handle *xfmem;
2665 xenevtchn_handle *xe;
2666 xengnttab_handle *xg;
b6eb9b45
PS
2667 xengnttab_grant_copy_segment_t* seg = NULL;
2668
2669 xs_daemon_open();
2670
2671 xc = xc_interface_open(0, 0, 0);
2672 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2673 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2674 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2675 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
b6eb9b45
PS
2676
2677 xfmem = xenforeignmemory_open(0, 0);
2678 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2679
2680 xe = xenevtchn_open(0, 0);
2681 xenevtchn_fd(xe);
2682
2683 xg = xengnttab_open(0, 0);
2684 xengnttab_grant_copy(xg, 0, seg);
2685
2686 return 0;
2687}
2688EOF
c1cdd9d5
JG
2689 compile_prog "" "$xen_libs $xen_stable_libs"
2690 then
2691 xen_ctrl_version=40800
1badb709 2692 xen=enabled
c1cdd9d5
JG
2693 elif
2694 cat > $TMPC <<EOF &&
5eeb39c2
IC
2695/*
2696 * If we have stable libs the we don't want the libxc compat
2697 * layers, regardless of what CFLAGS we may have been given.
2698 */
2699#undef XC_WANT_COMPAT_EVTCHN_API
2700#undef XC_WANT_COMPAT_GNTTAB_API
2701#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2702#include <xenctrl.h>
2703#include <xenstore.h>
2704#include <xenevtchn.h>
2705#include <xengnttab.h>
2706#include <xenforeignmemory.h>
2707#include <stdint.h>
2708#include <xen/hvm/hvm_info_table.h>
2709#if !defined(HVM_MAX_VCPUS)
2710# error HVM_MAX_VCPUS not defined
2711#endif
2712int main(void) {
2713 xc_interface *xc = NULL;
2714 xenforeignmemory_handle *xfmem;
2715 xenevtchn_handle *xe;
2716 xengnttab_handle *xg;
5eeb39c2
IC
2717
2718 xs_daemon_open();
2719
2720 xc = xc_interface_open(0, 0, 0);
2721 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2722 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2723 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2724 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
5eeb39c2
IC
2725
2726 xfmem = xenforeignmemory_open(0, 0);
2727 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2728
2729 xe = xenevtchn_open(0, 0);
2730 xenevtchn_fd(xe);
2731
2732 xg = xengnttab_open(0, 0);
2733 xengnttab_map_grant_ref(xg, 0, 0, 0);
2734
2735 return 0;
2736}
2737EOF
c1cdd9d5
JG
2738 compile_prog "" "$xen_libs $xen_stable_libs"
2739 then
2740 xen_ctrl_version=40701
1badb709 2741 xen=enabled
c1cdd9d5
JG
2742
2743 # Xen 4.6
2744 elif
2745 cat > $TMPC <<EOF &&
cdadde39 2746#include <xenctrl.h>
e108a3c1 2747#include <xenstore.h>
d5b93ddf
AP
2748#include <stdint.h>
2749#include <xen/hvm/hvm_info_table.h>
2750#if !defined(HVM_MAX_VCPUS)
2751# error HVM_MAX_VCPUS not defined
2752#endif
d8b441a3
JB
2753int main(void) {
2754 xc_interface *xc;
2755 xs_daemon_open();
2756 xc = xc_interface_open(0, 0, 0);
2757 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2758 xc_gnttab_open(NULL, 0);
2759 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2760 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2761 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
20a544c7 2762 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
d8b441a3
JB
2763 return 0;
2764}
2765EOF
c1cdd9d5
JG
2766 compile_prog "" "$xen_libs"
2767 then
2768 xen_ctrl_version=40600
1badb709 2769 xen=enabled
c1cdd9d5
JG
2770
2771 # Xen 4.5
2772 elif
2773 cat > $TMPC <<EOF &&
d8b441a3
JB
2774#include <xenctrl.h>
2775#include <xenstore.h>
2776#include <stdint.h>
2777#include <xen/hvm/hvm_info_table.h>
2778#if !defined(HVM_MAX_VCPUS)
2779# error HVM_MAX_VCPUS not defined
2780#endif
3996e85c
PD
2781int main(void) {
2782 xc_interface *xc;
2783 xs_daemon_open();
2784 xc = xc_interface_open(0, 0, 0);
2785 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2786 xc_gnttab_open(NULL, 0);
2787 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2788 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2789 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2790 return 0;
2791}
2792EOF
c1cdd9d5
JG
2793 compile_prog "" "$xen_libs"
2794 then
2795 xen_ctrl_version=40500
1badb709 2796 xen=enabled
3996e85c 2797
c1cdd9d5
JG
2798 elif
2799 cat > $TMPC <<EOF &&
3996e85c
PD
2800#include <xenctrl.h>
2801#include <xenstore.h>
2802#include <stdint.h>
2803#include <xen/hvm/hvm_info_table.h>
2804#if !defined(HVM_MAX_VCPUS)
2805# error HVM_MAX_VCPUS not defined
2806#endif
8688e065
SS
2807int main(void) {
2808 xc_interface *xc;
2809 xs_daemon_open();
2810 xc = xc_interface_open(0, 0, 0);
2811 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2812 xc_gnttab_open(NULL, 0);
2813 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2814 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2815 return 0;
2816}
2817EOF
c1cdd9d5
JG
2818 compile_prog "" "$xen_libs"
2819 then
2820 xen_ctrl_version=40200
1badb709 2821 xen=enabled
8688e065 2822
c1cdd9d5 2823 else
1badb709 2824 if test "$xen" = "enabled" ; then
c1cdd9d5
JG
2825 feature_not_found "xen (unsupported version)" \
2826 "Install a supported xen (xen 4.2 or newer)"
2827 fi
1badb709 2828 xen=disabled
fc321b4b 2829 fi
d5b93ddf 2830
1badb709 2831 if test "$xen" = enabled; then
c1cdd9d5 2832 if test $xen_ctrl_version -ge 40701 ; then
582ea95f 2833 xen_libs="$xen_libs $xen_stable_libs "
c1cdd9d5 2834 fi
5eeb39c2 2835 fi
d5b93ddf 2836 fi
e37630ca
AL
2837fi
2838
1badb709
PB
2839if test "$xen_pci_passthrough" != "disabled"; then
2840 if test "$xen" = "enabled" && test "$linux" = "yes"; then
2841 xen_pci_passthrough=enabled
eb6fda0f 2842 else
1badb709 2843 if test "$xen_pci_passthrough" = "enabled"; then
76ad07a4
PM
2844 error_exit "User requested feature Xen PCI Passthrough" \
2845 " but this feature requires /sys from Linux"
eb6fda0f 2846 fi
1badb709 2847 xen_pci_passthrough=disabled
eb6fda0f
AP
2848 fi
2849fi
2850
e8f3bd71
MAL
2851##########################################
2852# gettext probe
2853if test "$gettext" != "false" ; then
2854 if has xgettext; then
2855 gettext=true
2856 else
2857 if test "$gettext" = "true" ; then
2858 feature_not_found "gettext" "Install xgettext binary"
2859 fi
2860 gettext=false
2861 fi
2862fi
2863
f676c67e
JW
2864##########################################
2865# X11 probe
f676c67e 2866if $pkg_config --exists "x11"; then
8781595b 2867 have_x11=yes
89138857
SW
2868 x11_cflags=$($pkg_config --cflags x11)
2869 x11_libs=$($pkg_config --libs x11)
f676c67e
JW
2870fi
2871
a4ccabcf
AL
2872##########################################
2873# GTK probe
2874
2875if test "$gtk" != "no"; then
89d85cde
DB
2876 gtkpackage="gtk+-3.0"
2877 gtkx11package="gtk+-x11-3.0"
7b23d121 2878 gtkversion="3.22.0"
bbbf9bfb 2879 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
89138857
SW
2880 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2881 gtk_libs=$($pkg_config --libs $gtkpackage)
2882 gtk_version=$($pkg_config --modversion $gtkpackage)
0a337ed0 2883 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
8781595b 2884 need_x11=yes
f676c67e
JW
2885 gtk_cflags="$gtk_cflags $x11_cflags"
2886 gtk_libs="$gtk_libs $x11_libs"
0a337ed0 2887 fi
bbbf9bfb
SW
2888 gtk="yes"
2889 elif test "$gtk" = "yes"; then
5fe309ff 2890 feature_not_found "gtk" "Install gtk3-devel"
bbbf9bfb
SW
2891 else
2892 gtk="no"
2893 fi
2894fi
2895
ddbb0d09
DB
2896
2897##########################################
2898# GNUTLS probe
2899
2900if test "$gnutls" != "no"; then
a73e82ef 2901 pass="no"
a0722409 2902 if $pkg_config --exists "gnutls >= 3.1.18"; then
89138857
SW
2903 gnutls_cflags=$($pkg_config --cflags gnutls)
2904 gnutls_libs=$($pkg_config --libs gnutls)
a73e82ef
RH
2905 # Packaging for the static libraries is not always correct.
2906 # At least ubuntu 18.04 ships only shared libraries.
2907 write_c_skeleton
2908 if compile_prog "" "$gnutls_libs" ; then
a73e82ef
RH
2909 pass="yes"
2910 fi
2911 fi
2912 if test "$pass" = "no" && test "$gnutls" = "yes"; then
a0722409 2913 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
ddbb0d09 2914 else
a73e82ef 2915 gnutls="$pass"
ddbb0d09 2916 fi
ddbb0d09
DB
2917fi
2918
91bfcdb0
DB
2919
2920# If user didn't give a --disable/enable-gcrypt flag,
2921# then mark as disabled if user requested nettle
a0722409 2922# explicitly
91bfcdb0
DB
2923if test -z "$gcrypt"
2924then
a0722409 2925 if test "$nettle" = "yes"
91bfcdb0
DB
2926 then
2927 gcrypt="no"
2928 fi
2929fi
2930
2931# If user didn't give a --disable/enable-nettle flag,
2932# then mark as disabled if user requested gcrypt
a0722409 2933# explicitly
91bfcdb0
DB
2934if test -z "$nettle"
2935then
a0722409 2936 if test "$gcrypt" = "yes"
91bfcdb0
DB
2937 then
2938 nettle="no"
2939 fi
2940fi
2941
dea7a64e 2942has_libgcrypt() {
91bfcdb0
DB
2943 if ! has "libgcrypt-config"
2944 then
2945 return 1
2946 fi
2947
2948 if test -n "$cross_prefix"
2949 then
89138857 2950 host=$(libgcrypt-config --host)
91bfcdb0
DB
2951 if test "$host-" != $cross_prefix
2952 then
2953 return 1
2954 fi
2955 fi
2956
dea7a64e
DB
2957 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2958 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2959
2960 if test $maj != 1 || test $min -lt 5
2961 then
2962 return 1
2963 fi
2964
91bfcdb0
DB
2965 return 0
2966}
2967
a0722409
DB
2968
2969if test "$nettle" != "no"; then
a73e82ef 2970 pass="no"
64dd2f3b 2971 if $pkg_config --exists "nettle >= 2.7.1"; then
a0722409
DB
2972 nettle_cflags=$($pkg_config --cflags nettle)
2973 nettle_libs=$($pkg_config --libs nettle)
2974 nettle_version=$($pkg_config --modversion nettle)
a73e82ef
RH
2975 # Link test to make sure the given libraries work (e.g for static).
2976 write_c_skeleton
2977 if compile_prog "" "$nettle_libs" ; then
a73e82ef
RH
2978 if test -z "$gcrypt"; then
2979 gcrypt="no"
2980 fi
2981 pass="yes"
a0722409 2982 fi
a73e82ef 2983 fi
dc2207af
DB
2984 if test "$pass" = "yes"
2985 then
2986 cat > $TMPC << EOF
2987#include <nettle/xts.h>
2988int main(void) {
2989 return 0;
2990}
2991EOF
2992 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2993 nettle_xts=yes
2994 qemu_private_xts=no
2995 fi
2996 fi
a73e82ef
RH
2997 if test "$pass" = "no" && test "$nettle" = "yes"; then
2998 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
a0722409 2999 else
a73e82ef 3000 nettle="$pass"
a0722409
DB
3001 fi
3002fi
3003
91bfcdb0 3004if test "$gcrypt" != "no"; then
a73e82ef 3005 pass="no"
dea7a64e 3006 if has_libgcrypt; then
89138857
SW
3007 gcrypt_cflags=$(libgcrypt-config --cflags)
3008 gcrypt_libs=$(libgcrypt-config --libs)
a73e82ef 3009 # Debian has removed -lgpg-error from libgcrypt-config
91bfcdb0
DB
3010 # as it "spreads unnecessary dependencies" which in
3011 # turn breaks static builds...
3012 if test "$static" = "yes"
3013 then
3014 gcrypt_libs="$gcrypt_libs -lgpg-error"
3015 fi
1f923c70 3016
a73e82ef
RH
3017 # Link test to make sure the given libraries work (e.g for static).
3018 write_c_skeleton
3019 if compile_prog "" "$gcrypt_libs" ; then
a73e82ef
RH
3020 pass="yes"
3021 fi
3022 fi
3023 if test "$pass" = "yes"; then
3024 gcrypt="yes"
1f923c70
LM
3025 cat > $TMPC << EOF
3026#include <gcrypt.h>
3027int main(void) {
3028 gcry_mac_hd_t handle;
3029 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3030 GCRY_MAC_FLAG_SECURE, NULL);
3031 return 0;
3032}
3033EOF
3034 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3035 gcrypt_hmac=yes
3036 fi
e0576942
DB
3037 cat > $TMPC << EOF
3038#include <gcrypt.h>
3039int main(void) {
3040 gcry_cipher_hd_t handle;
3041 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3042 return 0;
3043}
3044EOF
3045 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3046 gcrypt_xts=yes
3047 qemu_private_xts=no
3048 fi
a73e82ef
RH
3049 elif test "$gcrypt" = "yes"; then
3050 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
62893b67 3051 else
a73e82ef 3052 gcrypt="no"
62893b67
DB
3053 fi
3054fi
3055
ddbb0d09 3056
91bfcdb0
DB
3057if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3058then
3059 error_exit "Only one of gcrypt & nettle can be enabled"
3060fi
3061
9a2fd434
DB
3062##########################################
3063# libtasn1 - only for the TLS creds/session test suite
3064
3065tasn1=yes
90246037
DB
3066tasn1_cflags=""
3067tasn1_libs=""
9a2fd434 3068if $pkg_config --exists "libtasn1"; then
89138857
SW
3069 tasn1_cflags=$($pkg_config --cflags libtasn1)
3070 tasn1_libs=$($pkg_config --libs libtasn1)
9a2fd434
DB
3071else
3072 tasn1=no
3073fi
3074
ed754746 3075
8953caf3
DB
3076##########################################
3077# PAM probe
3078
3079if test "$auth_pam" != "no"; then
3080 cat > $TMPC <<EOF
3081#include <security/pam_appl.h>
3082#include <stdio.h>
3083int main(void) {
3084 const char *service_name = "qemu";
3085 const char *user = "frank";
9c9642d0 3086 const struct pam_conv pam_conv = { 0 };
8953caf3 3087 pam_handle_t *pamh = NULL;
9c9642d0 3088 pam_start(service_name, user, &pam_conv, &pamh);
8953caf3
DB
3089 return 0;
3090}
3091EOF
3092 if compile_prog "" "-lpam" ; then
3093 auth_pam=yes
3094 else
3095 if test "$auth_pam" = "yes"; then
3096 feature_not_found "PAM" "Install PAM development package"
3097 else
3098 auth_pam=no
3099 fi
3100 fi
3101fi
3102
bbbf9bfb
SW
3103##########################################
3104# VTE probe
3105
3106if test "$vte" != "no"; then
89d85cde
DB
3107 vteminversion="0.32.0"
3108 if $pkg_config --exists "vte-2.91"; then
3109 vtepackage="vte-2.91"
528de90a 3110 else
89d85cde 3111 vtepackage="vte-2.90"
528de90a 3112 fi
c6feff9e 3113 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
89138857
SW
3114 vte_cflags=$($pkg_config --cflags $vtepackage)
3115 vte_libs=$($pkg_config --libs $vtepackage)
3116 vteversion=$($pkg_config --modversion $vtepackage)
bbbf9bfb
SW
3117 vte="yes"
3118 elif test "$vte" = "yes"; then
89d85cde 3119 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
0d185e63 3120 else
bbbf9bfb 3121 vte="no"
a4ccabcf
AL
3122 fi
3123fi
3124
2da776db
MH
3125##########################################
3126# RDMA needs OpenFabrics libraries
3127if test "$rdma" != "no" ; then
3128 cat > $TMPC <<EOF
3129#include <rdma/rdma_cma.h>
3130int main(void) { return 0; }
3131EOF
ef6d4ccd 3132 rdma_libs="-lrdmacm -libverbs -libumad"
2da776db
MH
3133 if compile_prog "" "$rdma_libs" ; then
3134 rdma="yes"
2da776db
MH
3135 else
3136 if test "$rdma" = "yes" ; then
3137 error_exit \
ef6d4ccd 3138 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
2da776db 3139 " Your options:" \
ef6d4ccd 3140 " (1) Fast: Install infiniband packages (devel) from your distro." \
2da776db
MH
3141 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3142 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3143 fi
3144 rdma="no"
3145 fi
3146fi
3147
21ab34c9
MA
3148##########################################
3149# PVRDMA detection
3150
3151cat > $TMPC <<EOF &&
3152#include <sys/mman.h>
3153
3154int
3155main(void)
3156{
3157 char buf = 0;
3158 void *addr = &buf;
3159 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3160
3161 return 0;
3162}
3163EOF
3164
3165if test "$rdma" = "yes" ; then
3166 case "$pvrdma" in
3167 "")
3168 if compile_prog "" ""; then
3169 pvrdma="yes"
3170 else
3171 pvrdma="no"
3172 fi
3173 ;;
3174 "yes")
3175 if ! compile_prog "" ""; then
3176 error_exit "PVRDMA is not supported since mremap is not implemented"
3177 fi
3178 pvrdma="yes"
3179 ;;
3180 "no")
3181 pvrdma="no"
3182 ;;
3183 esac
3184else
3185 if test "$pvrdma" = "yes" ; then
3186 error_exit "PVRDMA requires rdma suppport"
3187 fi
3188 pvrdma="no"
3189fi
95c6bff3 3190
ee108585
YS
3191# Let's see if enhanced reg_mr is supported
3192if test "$pvrdma" = "yes" ; then
3193
3194cat > $TMPC <<EOF &&
3195#include <infiniband/verbs.h>
3196
3197int
3198main(void)
3199{
3200 struct ibv_mr *mr;
3201 struct ibv_pd *pd = NULL;
3202 size_t length = 10;
3203 uint64_t iova = 0;
3204 int access = 0;
3205 void *addr = NULL;
3206
3207 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3208
3209 ibv_dereg_mr(mr);
3210
3211 return 0;
3212}
3213EOF
3214 if ! compile_prog "" "-libverbs"; then
3215 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3216 fi
3217fi
3218
ee682d27 3219##########################################
c1bb86cd 3220# xfsctl() probe, used for file-posix.c
dce512de
CH
3221if test "$xfs" != "no" ; then
3222 cat > $TMPC << EOF
ffc41d10 3223#include <stddef.h> /* NULL */
dce512de
CH
3224#include <xfs/xfs.h>
3225int main(void)
3226{
3227 xfsctl(NULL, 0, 0, NULL);
3228 return 0;
3229}
3230EOF
3231 if compile_prog "" "" ; then
3232 xfs="yes"
3233 else
3234 if test "$xfs" = "yes" ; then
e3a6e0da 3235 feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
dce512de
CH
3236 fi
3237 xfs=no
3238 fi
3239fi
3240
8a16d273
TS
3241##########################################
3242# vde libraries probe
dfb278bd 3243if test "$vde" != "no" ; then
4baae0ac 3244 vde_libs="-lvdeplug"
8a16d273
TS
3245 cat > $TMPC << EOF
3246#include <libvdeplug.h>
4a7f0e06
PB
3247int main(void)
3248{
3249 struct vde_open_args a = {0, 0, 0};
fea08e08
PM
3250 char s[] = "";
3251 vde_open(s, s, &a);
4a7f0e06
PB
3252 return 0;
3253}
8a16d273 3254EOF
52166aa0 3255 if compile_prog "" "$vde_libs" ; then
4baae0ac 3256 vde=yes
dfb278bd
JQ
3257 else
3258 if test "$vde" = "yes" ; then
21684af0 3259 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
dfb278bd
JQ
3260 fi
3261 vde=no
4baae0ac 3262 fi
8a16d273
TS
3263fi
3264
58952137 3265##########################################
0a985b37
VM
3266# netmap support probe
3267# Apart from looking for netmap headers, we make sure that the host API version
3268# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3269# a minor/major version number. Minor new features will be marked with values up
3270# to 15, and if something happens that requires a change to the backend we will
3271# move above 15, submit the backend fixes and modify this two bounds.
58952137
VM
3272if test "$netmap" != "no" ; then
3273 cat > $TMPC << EOF
3274#include <inttypes.h>
3275#include <net/if.h>
3276#include <net/netmap.h>
3277#include <net/netmap_user.h>
0a985b37
VM
3278#if (NETMAP_API < 11) || (NETMAP_API > 15)
3279#error
3280#endif
58952137
VM
3281int main(void) { return 0; }
3282EOF
3283 if compile_prog "" "" ; then
3284 netmap=yes
3285 else
3286 if test "$netmap" = "yes" ; then
3287 feature_not_found "netmap"
3288 fi
3289 netmap=no
3290 fi
3291fi
3292
47e98658
CB
3293##########################################
3294# libcap-ng library probe
3295if test "$cap_ng" != "no" ; then
3296 cap_libs="-lcap-ng"
3297 cat > $TMPC << EOF
3298#include <cap-ng.h>
3299int main(void)
3300{
3301 capng_capability_to_name(CAPNG_EFFECTIVE);
3302 return 0;
3303}
3304EOF
3305 if compile_prog "" "$cap_libs" ; then
3306 cap_ng=yes
47e98658
CB
3307 else
3308 if test "$cap_ng" = "yes" ; then
21684af0 3309 feature_not_found "cap_ng" "Install libcap-ng devel"
47e98658
CB
3310 fi
3311 cap_ng=no
3312 fi
3313fi
3314
8f28f3fb 3315##########################################
c2de5c91 3316# Sound support libraries probe
8f28f3fb 3317
89138857 3318audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
c2de5c91 3319for drv in $audio_drv_list; do
3320 case $drv in
e42975a1 3321 alsa | try-alsa)
c80a867f
GH
3322 if $pkg_config alsa --exists; then
3323 alsa_libs=$($pkg_config alsa --libs)
478e943f
PB
3324 alsa_cflags=$($pkg_config alsa --cflags)
3325 alsa=yes
e42975a1
GH
3326 if test "$drv" = "try-alsa"; then
3327 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3328 fi
c80a867f 3329 else
e42975a1
GH
3330 if test "$drv" = "try-alsa"; then
3331 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3332 else
3333 error_exit "$drv check failed" \
3334 "Make sure to have the $drv libs and headers installed."
3335 fi
c80a867f 3336 fi
c2de5c91 3337 ;;
3338
e42975a1 3339 pa | try-pa)
c80a867f 3340 if $pkg_config libpulse --exists; then
478e943f 3341 libpulse=yes
c80a867f 3342 pulse_libs=$($pkg_config libpulse --libs)
478e943f 3343 pulse_cflags=$($pkg_config libpulse --cflags)
e42975a1
GH
3344 if test "$drv" = "try-pa"; then
3345 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3346 fi
c80a867f 3347 else
e42975a1
GH
3348 if test "$drv" = "try-pa"; then
3349 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3350 else
3351 error_exit "$drv check failed" \
3352 "Make sure to have the $drv libs and headers installed."
3353 fi
c80a867f 3354 fi
b8e59f18 3355 ;;
3356
373967b2
GH
3357 sdl)
3358 if test "$sdl" = "no"; then
3359 error_exit "sdl not found or disabled, can not use sdl audio driver"
3360 fi
3361 ;;
3362
e42975a1
GH
3363 try-sdl)
3364 if test "$sdl" = "no"; then
3365 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3366 else
3367 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3368 fi
3369 ;;
3370
997e690a 3371 coreaudio)
b1149911 3372 coreaudio_libs="-framework CoreAudio"
997e690a
JQ
3373 ;;
3374
a4bf6780 3375 dsound)
b1149911 3376 dsound_libs="-lole32 -ldxguid"
d5631638 3377 audio_win_int="yes"
a4bf6780
JQ
3378 ;;
3379
3380 oss)
b1149911 3381 oss_libs="$oss_lib"
a4bf6780
JQ
3382 ;;
3383
2e445703
GM
3384 jack | try-jack)
3385 if $pkg_config jack --exists; then
478e943f 3386 libjack=yes
2e445703
GM
3387 jack_libs=$($pkg_config jack --libs)
3388 if test "$drv" = "try-jack"; then
3389 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3390 fi
3391 else
3392 if test "$drv" = "try-jack"; then
3393 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3394 else
3395 error_exit "$drv check failed" \
3396 "Make sure to have the $drv libs and headers installed."
3397 fi
3398 fi
3399 ;;
3400
e4c63a6a 3401 *)
1c9b2a52 3402 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
76ad07a4
PM
3403 error_exit "Unknown driver '$drv' selected" \
3404 "Possible drivers are: $audio_possible_drivers"
e4c63a6a 3405 }
3406 ;;
c2de5c91 3407 esac
3408done
8f28f3fb 3409
2e4d9fb1
AJ
3410##########################################
3411# BrlAPI probe
3412
4ffcedb6 3413if test "$brlapi" != "no" ; then
eb82284f
JQ
3414 brlapi_libs="-lbrlapi"
3415 cat > $TMPC << EOF
2e4d9fb1 3416#include <brlapi.h>
832ce9c2 3417#include <stddef.h>
2e4d9fb1
AJ
3418int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3419EOF
52166aa0 3420 if compile_prog "" "$brlapi_libs" ; then
eb82284f 3421 brlapi=yes
4ffcedb6
JQ
3422 else
3423 if test "$brlapi" = "yes" ; then
21684af0 3424 feature_not_found "brlapi" "Install brlapi devel"
4ffcedb6
JQ
3425 fi
3426 brlapi=no
eb82284f
JQ
3427 fi
3428fi
2e4d9fb1 3429
769ce76d
AG
3430##########################################
3431# curl probe
788c8196 3432if test "$curl" != "no" ; then
65d5d3f9 3433 if $pkg_config libcurl --exists; then
a3605bf6
MT
3434 curlconfig="$pkg_config libcurl"
3435 else
3436 curlconfig=curl-config
3437 fi
769ce76d
AG
3438 cat > $TMPC << EOF
3439#include <curl/curl.h>
0b862ced 3440int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
769ce76d 3441EOF
89138857
SW
3442 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3443 curl_libs=$($curlconfig --libs 2>/dev/null)
b1d5a277 3444 if compile_prog "$curl_cflags" "$curl_libs" ; then
769ce76d 3445 curl=yes
788c8196
JQ
3446 else
3447 if test "$curl" = "yes" ; then
21684af0 3448 feature_not_found "curl" "Install libcurl devel"
788c8196
JQ
3449 fi
3450 curl=no
769ce76d
AG
3451 fi
3452fi # test "$curl"
3453
e18df141
AL
3454##########################################
3455# glib support probe
a52d28af 3456
00f2cfbb 3457glib_req_ver=2.48
aa0d1f44
PB
3458glib_modules=gthread-2.0
3459if test "$modules" = yes; then
a88afc64 3460 glib_modules="$glib_modules gmodule-export-2.0"
aa0d1f44 3461fi
54cb65d8
EC
3462if test "$plugins" = yes; then
3463 glib_modules="$glib_modules gmodule-2.0"
3464fi
e26110cf 3465
aa0d1f44 3466for i in $glib_modules; do
e26110cf 3467 if $pkg_config --atleast-version=$glib_req_ver $i; then
89138857
SW
3468 glib_cflags=$($pkg_config --cflags $i)
3469 glib_libs=$($pkg_config --libs $i)
e26110cf
FZ
3470 else
3471 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3472 fi
3473done
3474
215b0c2f
PB
3475# This workaround is required due to a bug in pkg-config file for glib as it
3476# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3477
3478if test "$static" = yes && test "$mingw32" = yes; then
3479 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3480fi
3481
f876b765 3482if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
f876b765
MAL
3483 gio_cflags=$($pkg_config --cflags gio-2.0)
3484 gio_libs=$($pkg_config --libs gio-2.0)
25a97a56 3485 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
0dba4897
MAL
3486 if [ ! -x "$gdbus_codegen" ]; then
3487 gdbus_codegen=
3488 fi
76346b62
PM
3489 # Check that the libraries actually work -- Ubuntu 18.04 ships
3490 # with pkg-config --static --libs data for gio-2.0 that is missing
3491 # -lblkid and will give a link error.
13ceae66
PM
3492 cat > $TMPC <<EOF
3493#include <gio/gio.h>
3494int main(void)
3495{
3496 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3497 return 0;
3498}
3499EOF
3500 if compile_prog "$gio_cflags" "$gio_libs" ; then
76346b62
PM
3501 gio=yes
3502 else
3503 gio=no
3504 fi
f876b765
MAL
3505else
3506 gio=no
3507fi
3508
25a97a56
MAL
3509if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3510 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3511 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3512fi
3513
977a82ab
DB
3514# Sanity check that the current size_t matches the
3515# size that glib thinks it should be. This catches
3516# problems on multi-arch where people try to build
3517# 32-bit QEMU while pointing at 64-bit glib headers
3518cat > $TMPC <<EOF
3519#include <glib.h>
3520#include <unistd.h>
3521
3522#define QEMU_BUILD_BUG_ON(x) \
3523 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3524
3525int main(void) {
3526 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3527 return 0;
3528}
3529EOF
3530
215b0c2f 3531if ! compile_prog "$glib_cflags" "$glib_libs" ; then
977a82ab
DB
3532 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3533 "You probably need to set PKG_CONFIG_LIBDIR"\
3534 "to point to the right pkg-config files for your"\
3535 "build target"
3536fi
3537
bbbf2e04
JS
3538# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3539cat > $TMPC << EOF
3540#include <glib.h>
3541int main(void) { return 0; }
3542EOF
3543if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3544 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3545 glib_cflags="-Wno-unknown-attributes $glib_cflags"
5770e8af 3546 CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
bbbf2e04
JS
3547 fi
3548fi
3549
9bda600b
EB
3550# Silence clang warnings triggered by glib < 2.57.2
3551cat > $TMPC << EOF
3552#include <glib.h>
3553typedef struct Foo {
3554 int i;
3555} Foo;
3556static void foo_free(Foo *f)
3557{
3558 g_free(f);
3559}
3560G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3561int main(void) { return 0; }
3562EOF
3563if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3564 if cc_has_warning_flag "-Wno-unused-function"; then
3565 glib_cflags="$glib_cflags -Wno-unused-function"
5770e8af 3566 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
9bda600b
EB
3567 fi
3568fi
3569
e26110cf
FZ
3570##########################################
3571# SHA command probe for modules
3572if test "$modules" = yes; then
3573 shacmd_probe="sha1sum sha1 shasum"
3574 for c in $shacmd_probe; do
8ccefb91 3575 if has $c; then
e26110cf
FZ
3576 shacmd="$c"
3577 break
3578 fi
3579 done
3580 if test "$shacmd" = ""; then
3581 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3582 fi
e18df141
AL
3583fi
3584
414f0dab 3585##########################################
e5d355d1 3586# pthread probe
4b29ec41 3587PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3c529d93 3588
4dd75c70 3589pthread=no
e5d355d1 3590cat > $TMPC << EOF
3c529d93 3591#include <pthread.h>
7a42bbe4
SW
3592static void *f(void *p) { return NULL; }
3593int main(void) {
3594 pthread_t thread;
3595 pthread_create(&thread, 0, f, 0);
3596 return 0;
3597}
414f0dab 3598EOF
bd00d539
AF
3599if compile_prog "" "" ; then
3600 pthread=yes
3601else
3602 for pthread_lib in $PTHREADLIBS_LIST; do
3603 if compile_prog "" "$pthread_lib" ; then
3604 pthread=yes
e3c56761
PP
3605 found=no
3606 for lib_entry in $LIBS; do
3607 if test "$lib_entry" = "$pthread_lib"; then
3608 found=yes
3609 break
3610 fi
3611 done
3612 if test "$found" = "no"; then
3613 LIBS="$pthread_lib $LIBS"
3614 fi
bd00d539
AF
3615 break
3616 fi
3617 done
3618fi
414f0dab 3619
e633a5c6 3620if test "$mingw32" != yes && test "$pthread" = no; then
76ad07a4
PM
3621 error_exit "pthread check failed" \
3622 "Make sure to have the pthread libs and headers installed."
e5d355d1
AL
3623fi
3624
479a5747
RB
3625# check for pthread_setname_np with thread id
3626pthread_setname_np_w_tid=no
5c312079
DDAG
3627cat > $TMPC << EOF
3628#include <pthread.h>
3629
3630static void *f(void *p) { return NULL; }
3631int main(void)
3632{
3633 pthread_t thread;
3634 pthread_create(&thread, 0, f, 0);
3635 pthread_setname_np(thread, "QEMU");
3636 return 0;
3637}
3638EOF
3639if compile_prog "" "$pthread_lib" ; then
479a5747
RB
3640 pthread_setname_np_w_tid=yes
3641fi
3642
3643# check for pthread_setname_np without thread id
3644pthread_setname_np_wo_tid=no
3645cat > $TMPC << EOF
3646#include <pthread.h>
3647
12a9b8d8 3648static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
479a5747
RB
3649int main(void)
3650{
3651 pthread_t thread;
3652 pthread_create(&thread, 0, f, 0);
3653 return 0;
3654}
3655EOF
3656if compile_prog "" "$pthread_lib" ; then
3657 pthread_setname_np_wo_tid=yes
5c312079
DDAG
3658fi
3659
f27aaf4b
CB
3660##########################################
3661# rbd probe
3662if test "$rbd" != "no" ; then
3663 cat > $TMPC <<EOF
3664#include <stdio.h>
ad32e9c0 3665#include <rbd/librbd.h>
f27aaf4b 3666int main(void) {
ad32e9c0
JD
3667 rados_t cluster;
3668 rados_create(&cluster, NULL);
f27aaf4b
CB
3669 return 0;
3670}
3671EOF
ad32e9c0
JD
3672 rbd_libs="-lrbd -lrados"
3673 if compile_prog "" "$rbd_libs" ; then
3674 rbd=yes
f27aaf4b
CB
3675 else
3676 if test "$rbd" = "yes" ; then
21684af0 3677 feature_not_found "rados block device" "Install librbd/ceph devel"
f27aaf4b
CB
3678 fi
3679 rbd=no
3680 fi
f27aaf4b
CB
3681fi
3682
0a12ec87 3683##########################################
b10d49d7
PT
3684# libssh probe
3685if test "$libssh" != "no" ; then
3686 if $pkg_config --exists libssh; then
3687 libssh_cflags=$($pkg_config libssh --cflags)
3688 libssh_libs=$($pkg_config libssh --libs)
3689 libssh=yes
0a12ec87 3690 else
b10d49d7
PT
3691 if test "$libssh" = "yes" ; then
3692 error_exit "libssh required for --enable-libssh"
0a12ec87 3693 fi
b10d49d7 3694 libssh=no
0a12ec87
RJ
3695 fi
3696fi
3697
9a2d462e 3698##########################################
b10d49d7
PT
3699# Check for libssh 0.8
3700# This is done like this instead of using the LIBSSH_VERSION_* and
3701# SSH_VERSION_* macros because some distributions in the past shipped
3702# snapshots of the future 0.8 from Git, and those snapshots did not
3703# have updated version numbers (still referring to 0.7.0).
9a2d462e 3704
b10d49d7 3705if test "$libssh" = "yes"; then
9a2d462e 3706 cat > $TMPC <<EOF
b10d49d7
PT
3707#include <libssh/libssh.h>
3708int main(void) { return ssh_get_server_publickey(NULL, NULL); }
9a2d462e 3709EOF
b10d49d7
PT
3710 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3711 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
9a2d462e
RJ
3712 fi
3713fi
3714
5c6c3a6c
CH
3715##########################################
3716# linux-aio probe
5c6c3a6c
CH
3717
3718if test "$linux_aio" != "no" ; then
3719 cat > $TMPC <<EOF
3720#include <libaio.h>
3721#include <sys/eventfd.h>
832ce9c2 3722#include <stddef.h>
5c6c3a6c
CH
3723int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3724EOF
3725 if compile_prog "" "-laio" ; then
3726 linux_aio=yes
5c6c3a6c
CH
3727 else
3728 if test "$linux_aio" = "yes" ; then
21684af0 3729 feature_not_found "linux AIO" "Install libaio devel"
5c6c3a6c 3730 fi
3cfcae3c 3731 linux_aio=no
5c6c3a6c
CH
3732 fi
3733fi
c10dd856
AM
3734##########################################
3735# linux-io-uring probe
3736
3737if test "$linux_io_uring" != "no" ; then
3738 if $pkg_config liburing; then
3739 linux_io_uring_cflags=$($pkg_config --cflags liburing)
3740 linux_io_uring_libs=$($pkg_config --libs liburing)
3741 linux_io_uring=yes
3742 else
3743 if test "$linux_io_uring" = "yes" ; then
3744 feature_not_found "linux io_uring" "Install liburing devel"
3745 fi
3746 linux_io_uring=no
3747 fi
3748fi
5c6c3a6c 3749
3b8acc11 3750##########################################
7aaa6a16 3751# TPM emulation is only on POSIX
3b8acc11 3752
7aaa6a16
PB
3753if test "$tpm" = ""; then
3754 if test "$mingw32" = "yes"; then
3755 tpm=no
3756 else
3757 tpm=yes
3758 fi
3759elif test "$tpm" = "yes"; then
3760 if test "$mingw32" = "yes" ; then
3761 error_exit "TPM emulation only available on POSIX systems"
3762 fi
3b8acc11
PB
3763fi
3764
758e8e38
VJ
3765##########################################
3766# attr probe
3767
ec0d5893 3768libattr_libs=
758e8e38
VJ
3769if test "$attr" != "no" ; then
3770 cat > $TMPC <<EOF
3771#include <stdio.h>
3772#include <sys/types.h>
f2338fb4
PB
3773#ifdef CONFIG_LIBATTR
3774#include <attr/xattr.h>
3775#else
4f26f2b6 3776#include <sys/xattr.h>
f2338fb4 3777#endif
758e8e38
VJ
3778int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3779EOF
4f26f2b6
AK
3780 if compile_prog "" "" ; then
3781 attr=yes
3782 # Older distros have <attr/xattr.h>, and need -lattr:
f2338fb4 3783 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
758e8e38 3784 attr=yes
ec0d5893 3785 libattr_libs="-lattr"
4f26f2b6 3786 libattr=yes
758e8e38
VJ
3787 else
3788 if test "$attr" = "yes" ; then
21684af0 3789 feature_not_found "ATTR" "Install libc6 or libattr devel"
758e8e38
VJ
3790 fi
3791 attr=no
3792 fi
3793fi
3794
bf9298b9
AL
3795##########################################
3796# iovec probe
3797cat > $TMPC <<EOF
db34f0b3 3798#include <sys/types.h>
bf9298b9 3799#include <sys/uio.h>
db34f0b3 3800#include <unistd.h>
f91f9bee 3801int main(void) { return sizeof(struct iovec); }
bf9298b9
AL
3802EOF
3803iovec=no
52166aa0 3804if compile_prog "" "" ; then
bf9298b9
AL
3805 iovec=yes
3806fi
3807
ceb42de8
AL
3808##########################################
3809# preadv probe
3810cat > $TMPC <<EOF
3811#include <sys/types.h>
3812#include <sys/uio.h>
3813#include <unistd.h>
c075a723 3814int main(void) { return preadv(0, 0, 0, 0); }
ceb42de8
AL
3815EOF
3816preadv=no
52166aa0 3817if compile_prog "" "" ; then
ceb42de8
AL
3818 preadv=yes
3819fi
3820
f652e6af
AJ
3821##########################################
3822# fdt probe
d599938a 3823
fbb4121d
PB
3824case "$fdt" in
3825 auto | enabled | internal)
3826 # Simpler to always update submodule, even if not needed.
3827 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
3828 git_submodules="${git_submodules} dtc"
3829 fi
3830 ;;
3831esac
f652e6af 3832
20ff075b 3833##########################################
fb719563 3834# opengl probe (for sdl2, gtk, milkymist-tmu2)
b1546f32 3835
d52c454a
MAL
3836gbm="no"
3837if $pkg_config gbm; then
3838 gbm_cflags="$($pkg_config --cflags gbm)"
3839 gbm_libs="$($pkg_config --libs gbm)"
3840 gbm="yes"
3841fi
3842
da076ffe 3843if test "$opengl" != "no" ; then
4939a1df 3844 opengl_pkgs="epoxy gbm"
5f9b1e35
GH
3845 if $pkg_config $opengl_pkgs; then
3846 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3847 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
da076ffe 3848 opengl=yes
925a0400
GH
3849 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3850 gtk_gl="yes"
3851 fi
20ff075b 3852 else
da076ffe 3853 if test "$opengl" = "yes" ; then
dcf30025 3854 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
20ff075b 3855 fi
f676c67e 3856 opengl_cflags=""
da076ffe
GH
3857 opengl_libs=""
3858 opengl=no
20ff075b
MW
3859 fi
3860fi
3861
014cb152
GH
3862if test "$opengl" = "yes"; then
3863 cat > $TMPC << EOF
3864#include <epoxy/egl.h>
3865#ifndef EGL_MESA_image_dma_buf_export
3866# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3867#endif
3868int main(void) { return 0; }
3869EOF
3870 if compile_prog "" "" ; then
3871 opengl_dmabuf=yes
3872 fi
3873fi
c9a12e75 3874
e633a5c6 3875if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
99e1a93b
PMD
3876 for target in $target_list; do
3877 case $target in
3878 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
3879 need_x11=yes
3880 ;;
3881 esac
3882 done
3883fi
3884
ed279a06
KK
3885##########################################
3886# libxml2 probe
3887if test "$libxml2" != "no" ; then
3888 if $pkg_config --exists libxml-2.0; then
3889 libxml2="yes"
3890 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3891 libxml2_libs=$($pkg_config --libs libxml-2.0)
3892 else
3893 if test "$libxml2" = "yes"; then
3894 feature_not_found "libxml2" "Install libxml2 devel"
3895 fi
3896 libxml2="no"
3897 fi
3898fi
c9a12e75 3899
eb100396
BR
3900##########################################
3901# glusterfs probe
3902if test "$glusterfs" != "no" ; then
65d5d3f9 3903 if $pkg_config --atleast-version=3 glusterfs-api; then
e01bee08 3904 glusterfs="yes"
89138857
SW
3905 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3906 glusterfs_libs=$($pkg_config --libs glusterfs-api)
d85fa9eb
JC
3907 if $pkg_config --atleast-version=4 glusterfs-api; then
3908 glusterfs_xlator_opt="yes"
3909 fi
65d5d3f9 3910 if $pkg_config --atleast-version=5 glusterfs-api; then
0c14fb47
BR
3911 glusterfs_discard="yes"
3912 fi
7c815372 3913 if $pkg_config --atleast-version=6 glusterfs-api; then
df3a429a 3914 glusterfs_fallocate="yes"
7c815372
BR
3915 glusterfs_zerofill="yes"
3916 fi
e014dbe7
PKK
3917 cat > $TMPC << EOF
3918#include <glusterfs/api/glfs.h>
3919
3920int
3921main(void)
3922{
3923 /* new glfs_ftruncate() passes two additional args */
3924 return glfs_ftruncate(NULL, 0, NULL, NULL);
3925}
3926EOF
3927 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
3928 glusterfs_ftruncate_has_stat="yes"
3929 fi
0e3b891f
NV
3930 cat > $TMPC << EOF
3931#include <glusterfs/api/glfs.h>
3932
3933/* new glfs_io_cbk() passes two additional glfs_stat structs */
3934static void
3935glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
3936{}
3937
3938int
3939main(void)
3940{
3941 glfs_io_cbk iocb = &glusterfs_iocb;
3942 iocb(NULL, 0 , NULL, NULL, NULL);
3943 return 0;
3944}
3945EOF
3946 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
3947 glusterfs_iocb_has_stat="yes"
3948 fi
eb100396
BR
3949 else
3950 if test "$glusterfs" = "yes" ; then
8efc9363
HT
3951 feature_not_found "GlusterFS backend support" \
3952 "Install glusterfs-api devel >= 3"
eb100396 3953 fi
e01bee08 3954 glusterfs="no"
eb100396
BR
3955 fi
3956fi
3957
39386ac7 3958# Check for inotify functions when we are building linux-user
3b3f24ad
AJ
3959# emulator. This is done because older glibc versions don't
3960# have syscall stubs for these implemented. In that case we
3961# don't provide them even if kernel supports them.
3962#
3963inotify=no
67ba57f6 3964cat > $TMPC << EOF
3b3f24ad
AJ
3965#include <sys/inotify.h>
3966
3967int
3968main(void)
3969{
3970 /* try to start inotify */
8690e420 3971 return inotify_init();
3b3f24ad
AJ
3972}
3973EOF
52166aa0 3974if compile_prog "" "" ; then
67ba57f6 3975 inotify=yes
3b3f24ad
AJ
3976fi
3977
c05c7a73
RV
3978inotify1=no
3979cat > $TMPC << EOF
3980#include <sys/inotify.h>
3981
3982int
3983main(void)
3984{
3985 /* try to start inotify */
3986 return inotify_init1(0);
3987}
3988EOF
3989if compile_prog "" "" ; then
3990 inotify1=yes
3991fi
3992
099d6b0f
RV
3993# check if pipe2 is there
3994pipe2=no
3995cat > $TMPC << EOF
099d6b0f
RV
3996#include <unistd.h>
3997#include <fcntl.h>
3998
3999int main(void)
4000{
4001 int pipefd[2];
9bca8162 4002 return pipe2(pipefd, O_CLOEXEC);
099d6b0f
RV
4003}
4004EOF
52166aa0 4005if compile_prog "" "" ; then
099d6b0f
RV
4006 pipe2=yes
4007fi
4008
40ff6d7e
KW
4009# check if accept4 is there
4010accept4=no
4011cat > $TMPC << EOF
40ff6d7e
KW
4012#include <sys/socket.h>
4013#include <stddef.h>
4014
4015int main(void)
4016{
4017 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4018 return 0;
4019}
4020EOF
4021if compile_prog "" "" ; then
4022 accept4=yes
4023fi
4024
3ce34dfb
VS
4025# check if tee/splice is there. vmsplice was added same time.
4026splice=no
4027cat > $TMPC << EOF
3ce34dfb
VS
4028#include <unistd.h>
4029#include <fcntl.h>
4030#include <limits.h>
4031
4032int main(void)
4033{
66ea0f22 4034 int len, fd = 0;
3ce34dfb
VS
4035 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4036 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4037 return 0;
4038}
4039EOF
52166aa0 4040if compile_prog "" "" ; then
3ce34dfb
VS
4041 splice=yes
4042fi
4043
a99d57bb
WG
4044##########################################
4045# libnuma probe
4046
4047if test "$numa" != "no" ; then
4048 cat > $TMPC << EOF
4049#include <numa.h>
4050int main(void) { return numa_available(); }
4051EOF
4052
4053 if compile_prog "" "-lnuma" ; then
4054 numa=yes
ab318051 4055 numa_libs="-lnuma"
a99d57bb
WG
4056 else
4057 if test "$numa" = "yes" ; then
4058 feature_not_found "numa" "install numactl devel"
4059 fi
4060 numa=no
4061 fi
4062fi
4063
aa087962 4064malloc=system
7b01cb97
AD
4065if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4066 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4067 exit 1
aa087962
PB
4068elif test "$tcmalloc" = "yes" ; then
4069 malloc=tcmalloc
4070elif test "$jemalloc" = "yes" ; then
4071 malloc=jemalloc
7b01cb97
AD
4072fi
4073
dcc38d1c
MT
4074##########################################
4075# signalfd probe
4076signalfd="no"
4077cat > $TMPC << EOF
dcc38d1c
MT
4078#include <unistd.h>
4079#include <sys/syscall.h>
4080#include <signal.h>
4081int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4082EOF
4083
4084if compile_prog "" "" ; then
4085 signalfd=yes
4086fi
4087
d339d766
RJ
4088# check if optreset global is declared by <getopt.h>
4089optreset="no"
4090cat > $TMPC << EOF
4091#include <getopt.h>
4092int main(void) { return optreset; }
4093EOF
4094
4095if compile_prog "" "" ; then
4096 optreset=yes
4097fi
4098
c2882b96
RV
4099# check if eventfd is supported
4100eventfd=no
4101cat > $TMPC << EOF
4102#include <sys/eventfd.h>
4103
4104int main(void)
4105{
55cc7f3e 4106 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
c2882b96
RV
4107}
4108EOF
4109if compile_prog "" "" ; then
4110 eventfd=yes
4111fi
4112
751bcc39
MAL
4113# check if memfd is supported
4114memfd=no
4115cat > $TMPC << EOF
75e5b70e 4116#include <sys/mman.h>
751bcc39
MAL
4117
4118int main(void)
4119{
4120 return memfd_create("foo", MFD_ALLOW_SEALING);
4121}
4122EOF
4123if compile_prog "" "" ; then
4124 memfd=yes
4125fi
4126
955727d2
CT
4127# check for usbfs
4128have_usbfs=no
4129if test "$linux_user" = "yes"; then
96566d09
TP
4130 cat > $TMPC << EOF
4131#include <linux/usbdevice_fs.h>
4132
4133#ifndef USBDEVFS_GET_CAPABILITIES
4134#error "USBDEVFS_GET_CAPABILITIES undefined"
4135#endif
4136
4137#ifndef USBDEVFS_DISCONNECT_CLAIM
4138#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4139#endif
4140
4141int main(void)
4142{
4143 return 0;
4144}
4145EOF
4146 if compile_prog "" ""; then
955727d2
CT
4147 have_usbfs=yes
4148 fi
955727d2 4149fi
751bcc39 4150
d0927938
UH
4151# check for fallocate
4152fallocate=no
4153cat > $TMPC << EOF
4154#include <fcntl.h>
4155
4156int main(void)
4157{
4158 fallocate(0, 0, 0, 0);
4159 return 0;
4160}
4161EOF
8fb03151 4162if compile_prog "" "" ; then
d0927938
UH
4163 fallocate=yes
4164fi
4165
3d4fa43e
KK
4166# check for fallocate hole punching
4167fallocate_punch_hole=no
4168cat > $TMPC << EOF
4169#include <fcntl.h>
4170#include <linux/falloc.h>
4171
4172int main(void)
4173{
4174 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4175 return 0;
4176}
4177EOF
4178if compile_prog "" "" ; then
4179 fallocate_punch_hole=yes
4180fi
4181
b953f075
DL
4182# check that fallocate supports range zeroing inside the file
4183fallocate_zero_range=no
4184cat > $TMPC << EOF
4185#include <fcntl.h>
4186#include <linux/falloc.h>
4187
4188int main(void)
4189{
4190 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4191 return 0;
4192}
4193EOF
4194if compile_prog "" "" ; then
4195 fallocate_zero_range=yes
4196fi
4197
ed911435
KW
4198# check for posix_fallocate
4199posix_fallocate=no
4200cat > $TMPC << EOF
4201#include <fcntl.h>
4202
4203int main(void)
4204{
4205 posix_fallocate(0, 0, 0);
4206 return 0;
4207}
4208EOF
4209if compile_prog "" "" ; then
4210 posix_fallocate=yes
4211fi
4212
c727f47d
PM
4213# check for sync_file_range
4214sync_file_range=no
4215cat > $TMPC << EOF
4216#include <fcntl.h>
4217
4218int main(void)
4219{
4220 sync_file_range(0, 0, 0, 0);
4221 return 0;
4222}
4223EOF
8fb03151 4224if compile_prog "" "" ; then
c727f47d
PM
4225 sync_file_range=yes
4226fi
4227
dace20dc
PM
4228# check for linux/fiemap.h and FS_IOC_FIEMAP
4229fiemap=no
4230cat > $TMPC << EOF
4231#include <sys/ioctl.h>
4232#include <linux/fs.h>
4233#include <linux/fiemap.h>
4234
4235int main(void)
4236{
4237 ioctl(0, FS_IOC_FIEMAP, 0);
4238 return 0;
4239}
4240EOF
8fb03151 4241if compile_prog "" "" ; then
dace20dc
PM
4242 fiemap=yes
4243fi
4244
d0927938
UH
4245# check for dup3
4246dup3=no
4247cat > $TMPC << EOF
4248#include <unistd.h>
4249
4250int main(void)
4251{
4252 dup3(0, 0, 0);
4253 return 0;
4254}
4255EOF
78f5d726 4256if compile_prog "" "" ; then
d0927938
UH
4257 dup3=yes
4258fi
4259
4e0c6529
AB
4260# check for ppoll support
4261ppoll=no
4262cat > $TMPC << EOF
4263#include <poll.h>
4264
4265int main(void)
4266{
4267 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4268 ppoll(&pfd, 1, 0, 0);
4269 return 0;
4270}
4271EOF
4272if compile_prog "" "" ; then
4273 ppoll=yes
4274fi
4275
cd758dd0
AB
4276# check for prctl(PR_SET_TIMERSLACK , ... ) support
4277prctl_pr_set_timerslack=no
4278cat > $TMPC << EOF
4279#include <sys/prctl.h>
4280
4281int main(void)
4282{
4283 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4284 return 0;
4285}
4286EOF
4287if compile_prog "" "" ; then
4288 prctl_pr_set_timerslack=yes
4289fi
4290
3b6edd16
PM
4291# check for epoll support
4292epoll=no
4293cat > $TMPC << EOF
4294#include <sys/epoll.h>
4295
4296int main(void)
4297{
4298 epoll_create(0);
4299 return 0;
4300}
4301EOF
8fb03151 4302if compile_prog "" "" ; then
3b6edd16
PM
4303 epoll=yes
4304fi
4305
227f0214
PM
4306# epoll_create1 is a later addition
4307# so we must check separately for its presence
3b6edd16
PM
4308epoll_create1=no
4309cat > $TMPC << EOF
4310#include <sys/epoll.h>
4311
4312int main(void)
4313{
19e83f6b
PM
4314 /* Note that we use epoll_create1 as a value, not as
4315 * a function being called. This is necessary so that on
4316 * old SPARC glibc versions where the function was present in
4317 * the library but not declared in the header file we will
4318 * fail the configure check. (Otherwise we will get a compiler
4319 * warning but not an error, and will proceed to fail the
4320 * qemu compile where we compile with -Werror.)
4321 */
c075a723 4322 return (int)(uintptr_t)&epoll_create1;
3b6edd16
PM
4323}
4324EOF
8fb03151 4325if compile_prog "" "" ; then
3b6edd16
PM
4326 epoll_create1=yes
4327fi
4328
a8fd1aba
PM
4329# check for sendfile support
4330sendfile=no
4331cat > $TMPC << EOF
4332#include <sys/sendfile.h>
4333
4334int main(void)
4335{
4336 return sendfile(0, 0, 0, 0);
4337}
4338EOF
4339if compile_prog "" "" ; then
4340 sendfile=yes
4341fi
4342
51834341
RV
4343# check for timerfd support (glibc 2.8 and newer)
4344timerfd=no
4345cat > $TMPC << EOF
4346#include <sys/timerfd.h>
4347
4348int main(void)
4349{
4350 return(timerfd_create(CLOCK_REALTIME, 0));
4351}
4352EOF
4353if compile_prog "" "" ; then
4354 timerfd=yes
4355fi
4356
9af5c906
RV
4357# check for setns and unshare support
4358setns=no
4359cat > $TMPC << EOF
4360#include <sched.h>
4361
4362int main(void)
4363{
4364 int ret;
4365 ret = setns(0, 0);
4366 ret = unshare(0);
4367 return ret;
4368}
4369EOF
4370if compile_prog "" "" ; then
4371 setns=yes
4372fi
4373
38860a03
AM
4374# clock_adjtime probe
4375clock_adjtime=no
4376cat > $TMPC <<EOF
4377#include <time.h>
4378
4379int main(void)
4380{
4381 return clock_adjtime(0, 0);
4382}
4383EOF
4384clock_adjtime=no
4385if compile_prog "" "" ; then
4386 clock_adjtime=yes
4387fi
4388
5a03cd00
AM
4389# syncfs probe
4390syncfs=no
4391cat > $TMPC <<EOF
4392#include <unistd.h>
4393
4394int main(void)
4395{
4396 return syncfs(0);
4397}
4398EOF
4399syncfs=no
4400if compile_prog "" "" ; then
4401 syncfs=yes
4402fi
4403
f514f41c 4404# Search for bswap_32 function
6ae9a1f4
JQ
4405byteswap_h=no
4406cat > $TMPC << EOF
4407#include <byteswap.h>
4408int main(void) { return bswap_32(0); }
4409EOF
52166aa0 4410if compile_prog "" "" ; then
6ae9a1f4
JQ
4411 byteswap_h=yes
4412fi
4413
75f13596 4414# Search for bswap32 function
6ae9a1f4
JQ
4415bswap_h=no
4416cat > $TMPC << EOF
4417#include <sys/endian.h>
4418#include <sys/types.h>
4419#include <machine/bswap.h>
4420int main(void) { return bswap32(0); }
4421EOF
52166aa0 4422if compile_prog "" "" ; then
6ae9a1f4
JQ
4423 bswap_h=yes
4424fi
4425
c589b249 4426##########################################
e49ab19f 4427# Do we have libiscsi >= 1.9.0
c589b249 4428if test "$libiscsi" != "no" ; then
e49ab19f 4429 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3c33ea96 4430 libiscsi="yes"
ca871ec8
SW
4431 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4432 libiscsi_libs=$($pkg_config --libs libiscsi)
c589b249
RS
4433 else
4434 if test "$libiscsi" = "yes" ; then
e49ab19f 4435 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
c589b249
RS
4436 fi
4437 libiscsi="no"
4438 fi
4439fi
4440
da93a1fd
AL
4441##########################################
4442# Do we need librt
8bacde8d
NC
4443# uClibc provides 2 versions of clock_gettime(), one with realtime
4444# support and one without. This means that the clock_gettime() don't
4445# need -lrt. We still need it for timer_create() so we check for this
4446# function in addition.
da93a1fd
AL
4447cat > $TMPC <<EOF
4448#include <signal.h>
4449#include <time.h>
8bacde8d
NC
4450int main(void) {
4451 timer_create(CLOCK_REALTIME, NULL, NULL);
4452 return clock_gettime(CLOCK_REALTIME, NULL);
4453}
da93a1fd
AL
4454EOF
4455
52166aa0 4456if compile_prog "" "" ; then
07ffa4bd 4457 :
8bacde8d 4458# we need pthread for static linking. use previous pthread test result
18e588b1
RL
4459elif compile_prog "" "$pthread_lib -lrt" ; then
4460 LIBS="$LIBS -lrt"
da93a1fd
AL
4461fi
4462
f2995ee4 4463# Check whether we have openpty() in either libc or libutil
d99e97e6
TH
4464cat > $TMPC << EOF
4465extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4466int main(void) { return openpty(0, 0, 0, 0, 0); }
4467EOF
4468
9df8b20d
TH
4469have_openpty="no"
4470if compile_prog "" "" ; then
4471 have_openpty="yes"
4472else
d99e97e6 4473 if compile_prog "" "-lutil" ; then
9df8b20d 4474 have_openpty="yes"
d99e97e6 4475 fi
6362a53f
JQ
4476fi
4477
de5071c5 4478##########################################
cd4ec0b4
GH
4479# spice probe
4480if test "$spice" != "no" ; then
4481 cat > $TMPC << EOF
4482#include <spice.h>
4483int main(void) { spice_server_new(); return 0; }
4484EOF
710fc4f5
JD
4485 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4486 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
1b63665c 4487 if $pkg_config --atleast-version=0.12.5 spice-server && \
65d5d3f9 4488 $pkg_config --atleast-version=0.12.3 spice-protocol && \
cd4ec0b4
GH
4489 compile_prog "$spice_cflags" "$spice_libs" ; then
4490 spice="yes"
cd4ec0b4
GH
4491 else
4492 if test "$spice" = "yes" ; then
8efc9363 4493 feature_not_found "spice" \
1b63665c 4494 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
cd4ec0b4
GH
4495 fi
4496 spice="no"
4497 fi
4498fi
4499
7b02f544 4500# check for smartcard support
7b02f544 4501if test "$smartcard" != "no"; then
0f5c642d 4502 if $pkg_config --atleast-version=2.5.1 libcacard; then
7b02f544
MAL
4503 libcacard_cflags=$($pkg_config --cflags libcacard)
4504 libcacard_libs=$($pkg_config --libs libcacard)
7b02f544 4505 smartcard="yes"
afd347ab 4506 else
7b02f544
MAL
4507 if test "$smartcard" = "yes"; then
4508 feature_not_found "smartcard" "Install libcacard devel"
111a38b0 4509 fi
7b02f544 4510 smartcard="no"
111a38b0
RR
4511 fi
4512fi
111a38b0 4513
2b2325ff
GH
4514# check for libusb
4515if test "$libusb" != "no" ; then
65d5d3f9 4516 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
2b2325ff 4517 libusb="yes"
ca871ec8
SW
4518 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4519 libusb_libs=$($pkg_config --libs libusb-1.0)
2b2325ff
GH
4520 else
4521 if test "$libusb" = "yes"; then
8efc9363 4522 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
2b2325ff
GH
4523 fi
4524 libusb="no"
4525 fi
4526fi
4527
69354a83
HG
4528# check for usbredirparser for usb network redirection support
4529if test "$usb_redir" != "no" ; then
65d5d3f9 4530 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
69354a83 4531 usb_redir="yes"
ca871ec8
SW
4532 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4533 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
69354a83
HG
4534 else
4535 if test "$usb_redir" = "yes"; then
21684af0 4536 feature_not_found "usb-redir" "Install usbredir devel"
69354a83
HG
4537 fi
4538 usb_redir="no"
4539 fi
4540fi
4541
d9840e25
TS
4542##########################################
4543# check if we have VSS SDK headers for win
4544
e633a5c6
EB
4545if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4546 test "$vss_win32_sdk" != "no" ; then
d9840e25 4547 case "$vss_win32_sdk" in
690604f6 4548 "") vss_win32_include="-isystem $source_path" ;;
d9840e25
TS
4549 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4550 # handle path with spaces. So we symlink the headers into ".sdk/vss".
690604f6 4551 vss_win32_include="-isystem $source_path/.sdk/vss"
d9840e25
TS
4552 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4553 ;;
690604f6 4554 *) vss_win32_include="-isystem $vss_win32_sdk"
d9840e25
TS
4555 esac
4556 cat > $TMPC << EOF
4557#define __MIDL_user_allocate_free_DEFINED__
4558#include <inc/win2003/vss.h>
4559int main(void) { return VSS_CTX_BACKUP; }
4560EOF
4561 if compile_prog "$vss_win32_include" "" ; then
4562 guest_agent_with_vss="yes"
4563 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
315d3184 4564 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
f33ca81f 4565 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
d9840e25
TS
4566 else
4567 if test "$vss_win32_sdk" != "" ; then
4568 echo "ERROR: Please download and install Microsoft VSS SDK:"
4569 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4570 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4571 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4572 echo "ERROR: The headers are extracted in the directory \`inc'."
4573 feature_not_found "VSS support"
4574 fi
4575 guest_agent_with_vss="no"
4576 fi
4577fi
4578
4579##########################################
4580# lookup Windows platform SDK (if not specified)
4581# The SDK is needed only to build .tlb (type library) file of guest agent
4582# VSS provider from the source. It is usually unnecessary because the
4583# pre-compiled .tlb file is included.
4584
e633a5c6
EB
4585if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4586 test "$guest_agent_with_vss" = "yes" ; then
d9840e25
TS
4587 if test -z "$win_sdk"; then
4588 programfiles="$PROGRAMFILES"
4589 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4590 if test -n "$programfiles"; then
4591 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4592 else
4593 feature_not_found "Windows SDK"
4594 fi
4595 elif test "$win_sdk" = "no"; then
4596 win_sdk=""
4597 fi
4598fi
4599
50cbebb9
MR
4600##########################################
4601# check if mingw environment provides a recent ntddscsi.h
e633a5c6 4602if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
50cbebb9
MR
4603 cat > $TMPC << EOF
4604#include <windows.h>
4605#include <ntddscsi.h>
4606int main(void) {
4607#if !defined(IOCTL_SCSI_GET_ADDRESS)
4608#error Missing required ioctl definitions
4609#endif
4610 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4611 return addr.Lun;
4612}
4613EOF
4614 if compile_prog "" "" ; then
4615 guest_agent_ntddscsi=yes
996b9cdc 4616 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
50cbebb9
MR
4617 fi
4618fi
4619
9d9e1521
GH
4620##########################################
4621# virgl renderer probe
4622
4623if test "$virglrenderer" != "no" ; then
4624 cat > $TMPC << EOF
4625#include <virglrenderer.h>
4626int main(void) { virgl_renderer_poll(); return 0; }
4627EOF
4628 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4629 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
47479c55 4630 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
9d9e1521
GH
4631 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4632 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4633 virglrenderer="yes"
4634 else
4635 if test "$virglrenderer" = "yes" ; then
4636 feature_not_found "virglrenderer"
4637 fi
4638 virglrenderer="no"
4639 fi
4640fi
4641
8ca80760
RH
4642##########################################
4643# capstone
4644
e219c499 4645case "$capstone" in
8b18cdbf
RH
4646 auto | enabled | internal)
4647 # Simpler to always update submodule, even if not needed.
4648 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
e219c499
RH
4649 git_submodules="${git_submodules} capstone"
4650 fi
e219c499
RH
4651 ;;
4652esac
8ca80760 4653
5f6b9e8f
BS
4654##########################################
4655# check if we have fdatasync
4656
4657fdatasync=no
4658cat > $TMPC << EOF
4659#include <unistd.h>
d1722a27
AR
4660int main(void) {
4661#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4662return fdatasync(0);
4663#else
e172fe11 4664#error Not supported
d1722a27
AR
4665#endif
4666}
5f6b9e8f
BS
4667EOF
4668if compile_prog "" "" ; then
4669 fdatasync=yes
4670fi
4671
e78815a5
AF
4672##########################################
4673# check if we have madvise
4674
4675madvise=no
4676cat > $TMPC << EOF
4677#include <sys/types.h>
4678#include <sys/mman.h>
832ce9c2 4679#include <stddef.h>
e78815a5
AF
4680int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4681EOF
4682if compile_prog "" "" ; then
4683 madvise=yes
4684fi
4685
4686##########################################
4687# check if we have posix_madvise
4688
4689posix_madvise=no
4690cat > $TMPC << EOF
4691#include <sys/mman.h>
832ce9c2 4692#include <stddef.h>
e78815a5
AF
4693int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4694EOF
4695if compile_prog "" "" ; then
4696 posix_madvise=yes
4697fi
4698
9bc5a719
AG
4699##########################################
4700# check if we have posix_memalign()
4701
4702posix_memalign=no
4703cat > $TMPC << EOF
4704#include <stdlib.h>
4705int main(void) {
4706 void *p;
4707 return posix_memalign(&p, 8, 8);
4708}
4709EOF
4710if compile_prog "" "" ; then
4711 posix_memalign=yes
4712fi
4713
0a852417
PD
4714##########################################
4715# check if we have posix_syslog
4716
4717posix_syslog=no
4718cat > $TMPC << EOF
4719#include <syslog.h>
4720int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4721EOF
4722if compile_prog "" "" ; then
4723 posix_syslog=yes
4724fi
4725
401bc051
PM
4726##########################################
4727# check if we have sem_timedwait
4728
4729sem_timedwait=no
4730cat > $TMPC << EOF
4731#include <semaphore.h>
811294b7 4732int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
401bc051
PM
4733EOF
4734if compile_prog "" "" ; then
4735 sem_timedwait=yes
4736fi
4737
5c99fa37
KF
4738##########################################
4739# check if we have strchrnul
4740
4741strchrnul=no
4742cat > $TMPC << EOF
4743#include <string.h>
4744int main(void);
4745// Use a haystack that the compiler shouldn't be able to constant fold
4746char *haystack = (char*)&main;
4747int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4748EOF
4749if compile_prog "" "" ; then
4750 strchrnul=yes
4751fi
4752
8a792b03
JX
4753#########################################
4754# check if we have st_atim
4755
4756st_atim=no
4757cat > $TMPC << EOF
4758#include <sys/stat.h>
4759#include <stddef.h>
4760int main(void) { return offsetof(struct stat, st_atim); }
4761EOF
4762if compile_prog "" "" ; then
4763 st_atim=yes
4764fi
4765
94a420b1
SH
4766##########################################
4767# check if trace backend exists
4768
5b808275 4769$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 4770if test "$?" -ne 0 ; then
5b808275
LV
4771 error_exit "invalid trace backends" \
4772 "Please choose supported trace backends."
94a420b1
SH
4773fi
4774
7e24e92a
SH
4775##########################################
4776# For 'ust' backend, test if ust headers are present
5b808275 4777if have_backend "ust"; then
7e24e92a 4778 cat > $TMPC << EOF
bf15f63c 4779#include <lttng/tracepoint.h>
7e24e92a
SH
4780int main(void) { return 0; }
4781EOF
c79ed23d 4782 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
bf15f63c 4783 if $pkg_config lttng-ust --exists; then
89138857 4784 lttng_ust_libs=$($pkg_config --libs lttng-ust)
bf15f63c 4785 else
c79ed23d 4786 lttng_ust_libs="-llttng-ust -ldl"
bf15f63c
MG
4787 fi
4788 if $pkg_config liburcu-bp --exists; then
89138857 4789 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
bf15f63c
MG
4790 else
4791 urcu_bp_libs="-lurcu-bp"
4792 fi
7e24e92a 4793 else
bf15f63c 4794 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
4795 fi
4796fi
b3d08c02
DB
4797
4798##########################################
4799# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 4800if have_backend "dtrace"; then
b3d08c02 4801 if ! has 'dtrace' ; then
76ad07a4 4802 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 4803 fi
c276b17d
DB
4804 trace_backend_stap="no"
4805 if has 'stap' ; then
4806 trace_backend_stap="yes"
4b265c79
SH
4807
4808 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
4809 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
4810 # instead. QEMU --enable-modules depends on this because the SystemTap
4811 # semaphores are linked into the main binary and not the module's shared
4812 # object.
4813 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
c276b17d 4814 fi
b3d08c02
DB
4815fi
4816
023367e6 4817##########################################
519175a2 4818# check and set a backend for coroutine
d0e2fce5 4819
7c2acc70 4820# We prefer ucontext, but it's not always possible. The fallback
33c53c54
DB
4821# is sigcontext. On Windows the only valid backend is the Windows
4822# specific one.
7c2acc70
PM
4823
4824ucontext_works=no
4825if test "$darwin" != "yes"; then
4826 cat > $TMPC << EOF
d0e2fce5 4827#include <ucontext.h>
cdf84806
PM
4828#ifdef __stub_makecontext
4829#error Ignoring glibc stub makecontext which will always fail
4830#endif
75cafad7 4831int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 4832EOF
7c2acc70
PM
4833 if compile_prog "" "" ; then
4834 ucontext_works=yes
4835 fi
4836fi
4837
4838if test "$coroutine" = ""; then
4839 if test "$mingw32" = "yes"; then
4840 coroutine=win32
4841 elif test "$ucontext_works" = "yes"; then
4842 coroutine=ucontext
4843 else
4844 coroutine=sigaltstack
d0e2fce5 4845 fi
519175a2 4846else
7c2acc70
PM
4847 case $coroutine in
4848 windows)
4849 if test "$mingw32" != "yes"; then
4850 error_exit "'windows' coroutine backend only valid for Windows"
4851 fi
4852 # Unfortunately the user visible backend name doesn't match the
4853 # coroutine-*.c filename for this case, so we have to adjust it here.
4854 coroutine=win32
4855 ;;
4856 ucontext)
4857 if test "$ucontext_works" != "yes"; then
4858 feature_not_found "ucontext"
4859 fi
4860 ;;
33c53c54 4861 sigaltstack)
7c2acc70
PM
4862 if test "$mingw32" = "yes"; then
4863 error_exit "only the 'windows' coroutine backend is valid for Windows"
4864 fi
4865 ;;
4866 *)
4867 error_exit "unknown coroutine backend $coroutine"
4868 ;;
4869 esac
d0e2fce5
AK
4870fi
4871
70c60c08 4872if test "$coroutine_pool" = ""; then
33c53c54 4873 coroutine_pool=yes
70c60c08
SH
4874fi
4875
7d992e4d 4876if test "$debug_stack_usage" = "yes"; then
7d992e4d
PL
4877 if test "$coroutine_pool" = "yes"; then
4878 echo "WARN: disabling coroutine pool for stack usage debugging"
4879 coroutine_pool=no
4880 fi
4881fi
4882
1e4f6065
DB
4883##################################################
4884# SafeStack
4885
4886
4887if test "$safe_stack" = "yes"; then
4888cat > $TMPC << EOF
4889int main(int argc, char *argv[])
4890{
4891#if ! __has_feature(safe_stack)
4892#error SafeStack Disabled
4893#endif
4894 return 0;
4895}
4896EOF
4897 flag="-fsanitize=safe-stack"
4898 # Check that safe-stack is supported and enabled.
4899 if compile_prog "-Werror $flag" "$flag"; then
4900 # Flag needed both at compilation and at linking
4901 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4902 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4903 else
4904 error_exit "SafeStack not supported by your compiler"
4905 fi
4906 if test "$coroutine" != "ucontext"; then
4907 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4908 fi
4909else
4910cat > $TMPC << EOF
4911int main(int argc, char *argv[])
4912{
4913#if defined(__has_feature)
4914#if __has_feature(safe_stack)
4915#error SafeStack Enabled
4916#endif
4917#endif
4918 return 0;
4919}
4920EOF
4921if test "$safe_stack" = "no"; then
4922 # Make sure that safe-stack is disabled
4923 if ! compile_prog "-Werror" ""; then
4924 # SafeStack was already enabled, try to explicitly remove the feature
4925 flag="-fno-sanitize=safe-stack"
4926 if ! compile_prog "-Werror $flag" "$flag"; then
4927 error_exit "Configure cannot disable SafeStack"
4928 fi
4929 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4930 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4931 fi
4932else # "$safe_stack" = ""
4933 # Set safe_stack to yes or no based on pre-existing flags
4934 if compile_prog "-Werror" ""; then
4935 safe_stack="no"
4936 else
4937 safe_stack="yes"
4938 if test "$coroutine" != "ucontext"; then
4939 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4940 fi
4941 fi
4942fi
4943fi
7d992e4d 4944
d2042378
AK
4945##########################################
4946# check if we have open_by_handle_at
4947
4e1797f9 4948open_by_handle_at=no
d2042378
AK
4949cat > $TMPC << EOF
4950#include <fcntl.h>
acc55ba8
SW
4951#if !defined(AT_EMPTY_PATH)
4952# error missing definition
4953#else
75cafad7 4954int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
acc55ba8 4955#endif
d2042378
AK
4956EOF
4957if compile_prog "" "" ; then
4958 open_by_handle_at=yes
4959fi
4960
e06a765e
HPB
4961########################################
4962# check if we have linux/magic.h
4963
4964linux_magic_h=no
4965cat > $TMPC << EOF
4966#include <linux/magic.h>
4967int main(void) {
75cafad7 4968 return 0;
e06a765e
HPB
4969}
4970EOF
4971if compile_prog "" "" ; then
4972 linux_magic_h=yes
4973fi
4974
3f4349dc 4975########################################
541be927 4976# check if we have valgrind/valgrind.h
3f4349dc
KW
4977
4978valgrind_h=no
4979cat > $TMPC << EOF
4980#include <valgrind/valgrind.h>
3f4349dc 4981int main(void) {
3f4349dc
KW
4982 return 0;
4983}
4984EOF
4985if compile_prog "" "" ; then
4986 valgrind_h=yes
4987fi
4988
8ab1bf12
LC
4989########################################
4990# check if environ is declared
4991
4992has_environ=no
4993cat > $TMPC << EOF
4994#include <unistd.h>
4995int main(void) {
c075a723 4996 environ = 0;
8ab1bf12
LC
4997 return 0;
4998}
4999EOF
5000if compile_prog "" "" ; then
5001 has_environ=yes
5002fi
5003
76a347e1
RH
5004########################################
5005# check if cpuid.h is usable.
5006
76a347e1
RH
5007cat > $TMPC << EOF
5008#include <cpuid.h>
5009int main(void) {
774d566c
PM
5010 unsigned a, b, c, d;
5011 int max = __get_cpuid_max(0, 0);
5012
5013 if (max >= 1) {
5014 __cpuid(1, a, b, c, d);
5015 }
5016
5017 if (max >= 7) {
5018 __cpuid_count(7, 0, a, b, c, d);
5019 }
5020
5021 return 0;
76a347e1
RH
5022}
5023EOF
5024if compile_prog "" "" ; then
5025 cpuid_h=yes
5026fi
5027
5dd89908
RH
5028##########################################
5029# avx2 optimization requirement check
5030#
5031# There is no point enabling this if cpuid.h is not usable,
5032# since we won't be able to select the new routines.
5033
e633a5c6 5034if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5dd89908
RH
5035 cat > $TMPC << EOF
5036#pragma GCC push_options
5037#pragma GCC target("avx2")
5038#include <cpuid.h>
5039#include <immintrin.h>
5040static int bar(void *a) {
5041 __m256i x = *(__m256i *)a;
5042 return _mm256_testz_si256(x, x);
5043}
5044int main(int argc, char *argv[]) { return bar(argv[0]); }
5045EOF
5046 if compile_object "" ; then
5047 avx2_opt="yes"
86583a07
LM
5048 else
5049 avx2_opt="no"
5dd89908
RH
5050 fi
5051fi
5052
6b8cd447
RH
5053##########################################
5054# avx512f optimization requirement check
5055#
5056# There is no point enabling this if cpuid.h is not usable,
5057# since we won't be able to select the new routines.
5058# by default, it is turned off.
5059# if user explicitly want to enable it, check environment
5060
5061if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5062 cat > $TMPC << EOF
5063#pragma GCC push_options
5064#pragma GCC target("avx512f")
5065#include <cpuid.h>
5066#include <immintrin.h>
5067static int bar(void *a) {
5068 __m512i x = *(__m512i *)a;
5069 return _mm512_test_epi64_mask(x, x);
5070}
5071int main(int argc, char *argv[])
5072{
5073 return bar(argv[0]);
5074}
5075EOF
5076 if ! compile_object "" ; then
5077 avx512f_opt="no"
5078 fi
5079else
5080 avx512f_opt="no"
5081fi
5082
f540166b
RH
5083########################################
5084# check if __[u]int128_t is usable.
5085
5086int128=no
5087cat > $TMPC << EOF
5088__int128_t a;
5089__uint128_t b;
5090int main (void) {
5091 a = a + b;
5092 b = a * b;
464e3671 5093 a = a * a;
f540166b
RH
5094 return 0;
5095}
5096EOF
5097if compile_prog "" "" ; then
5098 int128=yes
5099fi
76a347e1 5100
7ebee43e
RH
5101#########################################
5102# See if 128-bit atomic operations are supported.
5103
5104atomic128=no
5105if test "$int128" = "yes"; then
5106 cat > $TMPC << EOF
5107int main(void)
5108{
5109 unsigned __int128 x = 0, y = 0;
5110 y = __atomic_load_16(&x, 0);
5111 __atomic_store_16(&x, y, 0);
5112 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5113 return 0;
5114}
5115EOF
5116 if compile_prog "" "" ; then
5117 atomic128=yes
5118 fi
5119fi
5120
e6cd4bb5 5121cmpxchg128=no
e633a5c6 5122if test "$int128" = yes && test "$atomic128" = no; then
e6cd4bb5
RH
5123 cat > $TMPC << EOF
5124int main(void)
5125{
5126 unsigned __int128 x = 0, y = 0;
5127 __sync_val_compare_and_swap_16(&x, y, x);
5128 return 0;
5129}
5130EOF
5131 if compile_prog "" "" ; then
5132 cmpxchg128=yes
5133 fi
5134fi
5135
df79b996
RH
5136#########################################
5137# See if 64-bit atomic operations are supported.
5138# Note that without __atomic builtins, we can only
5139# assume atomic loads/stores max at pointer size.
5140
5141cat > $TMPC << EOF
5142#include <stdint.h>
5143int main(void)
5144{
5145 uint64_t x = 0, y = 0;
5146#ifdef __ATOMIC_RELAXED
5fe40765
TH
5147 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
5148 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
5149 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
5150 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
5151 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
df79b996
RH
5152#else
5153 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5154 __sync_lock_test_and_set(&x, y);
5155 __sync_val_compare_and_swap(&x, y, 0);
5156 __sync_fetch_and_add(&x, y);
5157#endif
5158 return 0;
5159}
5160EOF
5161if compile_prog "" "" ; then
5162 atomic64=yes
5163fi
5164
26fffe29
EC
5165#########################################
5166# See if --dynamic-list is supported by the linker
5167ld_dynamic_list="no"
5168if test "$static" = "no" ; then
5169 cat > $TMPTXT <<EOF
5170{
5171 foo;
5172};
5173EOF
5174
5175 cat > $TMPC <<EOF
5176#include <stdio.h>
5177void foo(void);
5178
5179void foo(void)
5180{
5181 printf("foo\n");
5182}
5183
5184int main(void)
5185{
5186 foo();
5187 return 0;
5188}
5189EOF
5190
5191 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5192 ld_dynamic_list="yes"
5193 fi
5194fi
5195
5196#########################################
5197# See if -exported_symbols_list is supported by the linker
5198
5199ld_exported_symbols_list="no"
5200if test "$static" = "no" ; then
5201 cat > $TMPTXT <<EOF
5202 _foo
5203EOF
5204
5205 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5206 ld_exported_symbols_list="yes"
5207 fi
5208fi
5209
5210if test "$plugins" = "yes" &&
5211 test "$ld_dynamic_list" = "no" &&
5212 test "$ld_exported_symbols_list" = "no" ; then
5213 error_exit \
5214 "Plugin support requires dynamic linking and specifying a set of symbols " \
5215 "that are exported to plugins. Unfortunately your linker doesn't " \
5216 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5217 "for this purpose. You can't build with --static."
5218fi
5219
db8aaae8
RH
5220########################################
5221# See if __attribute__((alias)) is supported.
5222# This false for Xcode 9, but has been remedied for Xcode 10.
5223# Unfortunately, travis uses Xcode 9 by default.
5224
5225attralias=no
5226cat > $TMPC << EOF
5227int x = 1;
5228extern const int y __attribute__((alias("x")));
5229int main(void) { return 0; }
5230EOF
5231if compile_prog "" "" ; then
5232 attralias=yes
5233fi
5234
1e6e9aca
RH
5235########################################
5236# check if getauxval is available.
5237
5238getauxval=no
5239cat > $TMPC << EOF
5240#include <sys/auxv.h>
5241int main(void) {
5242 return getauxval(AT_HWCAP) == 0;
5243}
5244EOF
5245if compile_prog "" "" ; then
5246 getauxval=yes
5247fi
5248
fd0e6053
JS
5249########################################
5250# check if ccache is interfering with
5251# semantic analysis of macros
5252
5e4dfd3d 5253unset CCACHE_CPP2
fd0e6053
JS
5254ccache_cpp2=no
5255cat > $TMPC << EOF
5256static const int Z = 1;
5257#define fn() ({ Z; })
5258#define TAUT(X) ((X) == Z)
5259#define PAREN(X, Y) (X == Y)
5260#define ID(X) (X)
5261int main(int argc, char *argv[])
5262{
5263 int x = 0, y = 0;
5264 x = ID(x);
5265 x = fn();
5266 fn();
5267 if (PAREN(x, y)) return 0;
5268 if (TAUT(Z)) return 0;
5269 return 0;
5270}
5271EOF
5272
5273if ! compile_object "-Werror"; then
5274 ccache_cpp2=yes
5275fi
5276
b553a042
JS
5277#################################################
5278# clang does not support glibc + FORTIFY_SOURCE.
5279
5280if test "$fortify_source" != "no"; then
5281 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5282 fortify_source="no";
e189091f 5283 elif test -n "$cxx" && has $cxx &&
cfcc7c14 5284 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
b553a042
JS
5285 fortify_source="no";
5286 else
5287 fortify_source="yes"
5288 fi
5289fi
5290
1efad060
FZ
5291###############################################
5292# Check if copy_file_range is provided by glibc
5293have_copy_file_range=no
5294cat > $TMPC << EOF
5295#include <unistd.h>
5296int main(void) {
5297 copy_file_range(0, NULL, 0, NULL, 0, 0);
5298 return 0;
5299}
5300EOF
5301if compile_prog "" "" ; then
5302 have_copy_file_range=yes
5303fi
5304
277abf15
JV
5305##########################################
5306# check if struct fsxattr is available via linux/fs.h
5307
5308have_fsxattr=no
5309cat > $TMPC << EOF
5310#include <linux/fs.h>
5311struct fsxattr foo;
5312int main(void) {
5313 return 0;
5314}
5315EOF
5316if compile_prog "" "" ; then
5317 have_fsxattr=yes
5318fi
5319
a40161cb
PB
5320##########################################
5321# check for usable membarrier system call
5322if test "$membarrier" = "yes"; then
5323 have_membarrier=no
5324 if test "$mingw32" = "yes" ; then
5325 have_membarrier=yes
5326 elif test "$linux" = "yes" ; then
5327 cat > $TMPC << EOF
5328 #include <linux/membarrier.h>
5329 #include <sys/syscall.h>
5330 #include <unistd.h>
5331 #include <stdlib.h>
5332 int main(void) {
5333 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5334 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5335 exit(0);
5336 }
5337EOF
5338 if compile_prog "" "" ; then
5339 have_membarrier=yes
5340 fi
5341 fi
5342 if test "$have_membarrier" = "no"; then
5343 feature_not_found "membarrier" "membarrier system call not available"
5344 fi
5345else
5346 # Do not enable it by default even for Mingw32, because it doesn't
5347 # work on Wine.
5348 membarrier=no
5349fi
5350
b66e10e4
PM
5351##########################################
5352# check if rtnetlink.h exists and is useful
575b22b1
LV
5353have_rtnetlink=no
5354cat > $TMPC << EOF
5355#include <linux/rtnetlink.h>
5356int main(void) {
5357 return IFLA_PROTO_DOWN;
5358}
5359EOF
5360if compile_prog "" "" ; then
5361 have_rtnetlink=yes
5362fi
5363
6a02c806
SH
5364##########################################
5365# check for usable AF_VSOCK environment
5366have_af_vsock=no
5367cat > $TMPC << EOF
5368#include <errno.h>
5369#include <sys/types.h>
5370#include <sys/socket.h>
5371#if !defined(AF_VSOCK)
5372# error missing AF_VSOCK flag
5373#endif
5374#include <linux/vm_sockets.h>
5375int main(void) {
5376 int sock, ret;
5377 struct sockaddr_vm svm;
5378 socklen_t len = sizeof(svm);
5379 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5380 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5381 if ((ret == -1) && (errno == ENOTCONN)) {
5382 return 0;
5383 }
5384 return -1;
5385}
5386EOF
5387if compile_prog "" "" ; then
5388 have_af_vsock=yes
5389fi
5390
f0d92b56
LM
5391##########################################
5392# check for usable AF_ALG environment
4f67366e 5393have_afalg=no
f0d92b56
LM
5394cat > $TMPC << EOF
5395#include <errno.h>
5396#include <sys/types.h>
5397#include <sys/socket.h>
5398#include <linux/if_alg.h>
5399int main(void) {
5400 int sock;
5401 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5402 return sock;
5403}
5404EOF
5405if compile_prog "" "" ; then
5406 have_afalg=yes
5407fi
5408if test "$crypto_afalg" = "yes"
5409then
5410 if test "$have_afalg" != "yes"
5411 then
5412 error_exit "AF_ALG requested but could not be detected"
5413 fi
5414fi
5415
5416
c97d6d2c 5417#################################################
4d04351f
CC
5418# check for sysmacros.h
5419
5420have_sysmacros=no
5421cat > $TMPC << EOF
5422#include <sys/sysmacros.h>
5423int main(void) {
5424 return makedev(0, 0);
5425}
5426EOF
5427if compile_prog "" "" ; then
5428 have_sysmacros=yes
5429fi
5430
49e00a18
AG
5431##########################################
5432# check for _Static_assert()
5433
5434have_static_assert=no
5435cat > $TMPC << EOF
5436_Static_assert(1, "success");
5437int main(void) {
5438 return 0;
5439}
5440EOF
5441if compile_prog "" "" ; then
5442 have_static_assert=yes
5443fi
5444
e674605f
TG
5445##########################################
5446# check for utmpx.h, it is missing e.g. on OpenBSD
5447
5448have_utmpx=no
5449cat > $TMPC << EOF
5450#include <utmpx.h>
5451struct utmpx user_info;
5452int main(void) {
5453 return 0;
5454}
5455EOF
5456if compile_prog "" "" ; then
5457 have_utmpx=yes
5458fi
5459
db1ed1ab
RH
5460##########################################
5461# check for getrandom()
5462
5463have_getrandom=no
5464cat > $TMPC << EOF
5465#include <sys/random.h>
5466int main(void) {
5467 return getrandom(0, 0, GRND_NONBLOCK);
5468}
5469EOF
5470if compile_prog "" "" ; then
5471 have_getrandom=yes
5472fi
5473
247724cb
MAL
5474##########################################
5475# checks for sanitizers
5476
247724cb
MAL
5477have_asan=no
5478have_ubsan=no
d83414e1
MAL
5479have_asan_iface_h=no
5480have_asan_iface_fiber=no
247724cb
MAL
5481
5482if test "$sanitizers" = "yes" ; then
b9f44da2 5483 write_c_skeleton
247724cb
MAL
5484 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5485 have_asan=yes
5486 fi
b9f44da2
MAL
5487
5488 # we could use a simple skeleton for flags checks, but this also
5489 # detect the static linking issue of ubsan, see also:
5490 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5491 cat > $TMPC << EOF
5492#include <stdlib.h>
5493int main(void) {
5494 void *tmp = malloc(10);
f2dfe54c
LB
5495 if (tmp != NULL) {
5496 return *(int *)(tmp + 2);
5497 }
d1abf3fc 5498 return 1;
b9f44da2
MAL
5499}
5500EOF
247724cb
MAL
5501 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5502 have_ubsan=yes
5503 fi
d83414e1
MAL
5504
5505 if check_include "sanitizer/asan_interface.h" ; then
5506 have_asan_iface_h=yes
5507 fi
5508
5509 cat > $TMPC << EOF
5510#include <sanitizer/asan_interface.h>
5511int main(void) {
5512 __sanitizer_start_switch_fiber(0, 0, 0);
5513 return 0;
5514}
5515EOF
5516 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5517 have_asan_iface_fiber=yes
5518 fi
247724cb
MAL
5519fi
5520
adc28027
AB
5521##########################################
5522# checks for fuzzer
54c9e41d 5523if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
adc28027 5524 write_c_fuzzer_skeleton
dd016265 5525 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
64ed6f92
PB
5526 have_fuzzer=yes
5527 else
5528 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
5529 exit 1
adc28027
AB
5530 fi
5531fi
5532
0aebab04
LY
5533# Thread sanitizer is, for now, much noisier than the other sanitizers;
5534# keep it separate until that is not the case.
5535if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
5536 error_exit "TSAN is not supported with other sanitiziers."
5537fi
5538have_tsan=no
5539have_tsan_iface_fiber=no
5540if test "$tsan" = "yes" ; then
5541 write_c_skeleton
5542 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5543 have_tsan=yes
5544 fi
5545 cat > $TMPC << EOF
5546#include <sanitizer/tsan_interface.h>
5547int main(void) {
5548 __tsan_create_fiber(0);
5549 return 0;
5550}
5551EOF
5552 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5553 have_tsan_iface_fiber=yes
5554 fi
5555fi
5556
17824406
JH
5557##########################################
5558# check for libpmem
5559
5560if test "$libpmem" != "no"; then
5561 if $pkg_config --exists "libpmem"; then
5562 libpmem="yes"
5563 libpmem_libs=$($pkg_config --libs libpmem)
5564 libpmem_cflags=$($pkg_config --cflags libpmem)
17824406
JH
5565 else
5566 if test "$libpmem" = "yes" ; then
5567 feature_not_found "libpmem" "Install nvml or pmdk"
5568 fi
5569 libpmem="no"
5570 fi
5571fi
5572
21b2eca6
JL
5573##########################################
5574# check for libdaxctl
5575
5576if test "$libdaxctl" != "no"; then
5577 if $pkg_config --atleast-version=57 "libdaxctl"; then
5578 libdaxctl="yes"
5579 libdaxctl_libs=$($pkg_config --libs libdaxctl)
5580 libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
21b2eca6
JL
5581 else
5582 if test "$libdaxctl" = "yes" ; then
5583 feature_not_found "libdaxctl" "Install libdaxctl"
5584 fi
5585 libdaxctl="no"
5586 fi
5587fi
5588
675b9b53
MAL
5589##########################################
5590# check for slirp
5591
5592case "$slirp" in
4d34a86b
PB
5593 auto | enabled | internal)
5594 # Simpler to always update submodule, even if not needed.
5595 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
7c57bdd8
MAL
5596 git_submodules="${git_submodules} slirp"
5597 fi
675b9b53
MAL
5598 ;;
5599esac
5600
54e7aac0
AK
5601##########################################
5602# check for usable __NR_keyctl syscall
5603
5604if test "$linux" = "yes" ; then
5605
5606 have_keyring=no
5607 cat > $TMPC << EOF
5608#include <errno.h>
5609#include <asm/unistd.h>
5610#include <linux/keyctl.h>
5611#include <unistd.h>
5612int main(void) {
5613 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
5614}
5615EOF
5616 if compile_prog "" "" ; then
5617 have_keyring=yes
5618 fi
5619fi
5620if test "$secret_keyring" != "no"
5621then
b418d265 5622 if test "$have_keyring" = "yes"
54e7aac0
AK
5623 then
5624 secret_keyring=yes
5625 else
5626 if test "$secret_keyring" = "yes"
5627 then
5628 error_exit "syscall __NR_keyctl requested, \
5629but not implemented on your system"
5630 else
5631 secret_keyring=no
5632 fi
5633 fi
5634fi
5635
7e24e92a 5636##########################################
e86ecd4b
JQ
5637# End of CC checks
5638# After here, no more $cc or $ld runs
5639
d83414e1
MAL
5640write_c_skeleton
5641
1d728c39 5642if test "$gcov" = "yes" ; then
bf0e56a3 5643 :
b553a042 5644elif test "$fortify_source" = "yes" ; then
086d5f75
PB
5645 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
5646 debug=no
5647fi
086d5f75
PB
5648
5649case "$ARCH" in
5650alpha)
5651 # Ensure there's only a single GP
5652 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
5653;;
5654esac
5655
5656if test "$gprof" = "yes" ; then
5657 QEMU_CFLAGS="-p $QEMU_CFLAGS"
5658 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
5659fi
a316e378 5660
247724cb 5661if test "$have_asan" = "yes"; then
db5adeaa
PB
5662 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
5663 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
d83414e1
MAL
5664 if test "$have_asan_iface_h" = "no" ; then
5665 echo "ASAN build enabled, but ASAN header missing." \
5666 "Without code annotation, the report may be inferior."
5667 elif test "$have_asan_iface_fiber" = "no" ; then
5668 echo "ASAN build enabled, but ASAN header is too old." \
5669 "Without code annotation, the report may be inferior."
5670 fi
247724cb 5671fi
0aebab04
LY
5672if test "$have_tsan" = "yes" ; then
5673 if test "$have_tsan_iface_fiber" = "yes" ; then
5674 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
5675 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
5676 else
5677 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
5678 fi
5679elif test "$tsan" = "yes" ; then
5680 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
5681fi
247724cb 5682if test "$have_ubsan" = "yes"; then
db5adeaa
PB
5683 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
5684 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
247724cb
MAL
5685fi
5686
6542aa9c
PL
5687##########################################
5688# Do we have libnfs
5689if test "$libnfs" != "no" ; then
b7d769c9 5690 if $pkg_config --atleast-version=1.9.3 libnfs; then
6542aa9c
PL
5691 libnfs="yes"
5692 libnfs_libs=$($pkg_config --libs libnfs)
6542aa9c
PL
5693 else
5694 if test "$libnfs" = "yes" ; then
8efc9363 5695 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6542aa9c
PL
5696 fi
5697 libnfs="no"
5698 fi
5699fi
1d728c39 5700
3efac6eb 5701##########################################
3efac6eb 5702
0aebab04
LY
5703# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
5704if test "$solaris" = "no" && test "$tsan" = "no"; then
e86ecd4b 5705 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
db5adeaa 5706 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
e86ecd4b
JQ
5707 fi
5708fi
5709
952afb71
BS
5710# Use ASLR, no-SEH and DEP if available
5711if test "$mingw32" = "yes" ; then
cb8baa77
MCA
5712 flags="--no-seh --nxcompat"
5713
5714 # Disable ASLR for debug builds to allow debugging with gdb
5715 if test "$debug" = "no" ; then
5716 flags="--dynamicbase $flags"
5717 fi
5718
5719 for flag in $flags; do
e9a3591f 5720 if ld_has $flag ; then
db5adeaa 5721 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
952afb71
BS
5722 fi
5723 done
5724fi
5725
e0580342
KR
5726# We can only support ivshmem if we have eventfd
5727if [ "$eventfd" = "yes" ]; then
5728 ivshmem=yes
5729fi
5730
4b1c11fd 5731if test "$softmmu" = yes ; then
b855f8d1 5732 if test "$linux" = yes; then
7e462613 5733 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
aabfd88d 5734 virtfs=yes
aabfd88d
AF
5735 else
5736 if test "$virtfs" = yes; then
7e462613 5737 error_exit "VirtFS requires libcap-ng devel and libattr devel"
983eef5a 5738 fi
17500370 5739 virtfs=no
aabfd88d 5740 fi
b855f8d1
PB
5741 else
5742 if test "$virtfs" = yes; then
5743 error_exit "VirtFS is supported only on Linux"
5744 fi
5745 virtfs=no
17bff52b 5746 fi
6a021536 5747fi
9d6bc27b
MR
5748
5749# Probe for guest agent support/options
5750
e8ef31a3 5751if [ "$guest_agent" != "no" ]; then
a5125905
LV
5752 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
5753 guest_agent=no
5754 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
e8ef31a3
MT
5755 guest_agent=yes
5756 elif [ "$guest_agent" != yes ]; then
5757 guest_agent=no
5758 else
5759 error_exit "Guest agent is not supported on this platform"
ca35f780 5760 fi
00c705fb 5761fi
ca35f780 5762
9d6bc27b
MR
5763# Guest agent Window MSI package
5764
5765if test "$guest_agent" != yes; then
5766 if test "$guest_agent_msi" = yes; then
5767 error_exit "MSI guest agent package requires guest agent enabled"
5768 fi
5769 guest_agent_msi=no
5770elif test "$mingw32" != "yes"; then
5771 if test "$guest_agent_msi" = "yes"; then
5772 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5773 fi
5774 guest_agent_msi=no
5775elif ! has wixl; then
5776 if test "$guest_agent_msi" = "yes"; then
5777 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5778 fi
5779 guest_agent_msi=no
1a34904e
MR
5780else
5781 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5782 # disabled explicitly
5783 if test "$guest_agent_msi" != "no"; then
5784 guest_agent_msi=yes
5785 fi
9d6bc27b
MR
5786fi
5787
1a34904e 5788if test "$guest_agent_msi" = "yes"; then
9d6bc27b
MR
5789 if test "$guest_agent_with_vss" = "yes"; then
5790 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5791 fi
5792
5793 if test "$QEMU_GA_MANUFACTURER" = ""; then
5794 QEMU_GA_MANUFACTURER=QEMU
5795 fi
5796
5797 if test "$QEMU_GA_DISTRO" = ""; then
5798 QEMU_GA_DISTRO=Linux
5799 fi
5800
5801 if test "$QEMU_GA_VERSION" = ""; then
89138857 5802 QEMU_GA_VERSION=$(cat $source_path/VERSION)
9d6bc27b
MR
5803 fi
5804
89138857 5805 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
9d6bc27b
MR
5806
5807 case "$cpu" in
5808 x86_64)
5809 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5810 ;;
5811 i386)
5812 QEMU_GA_MSI_ARCH="-D Arch=32"
5813 ;;
5814 *)
5815 error_exit "CPU $cpu not supported for building installation package"
5816 ;;
5817 esac
5818fi
5819
ca35f780
PB
5820# Mac OS X ships with a broken assembler
5821roms=
e633a5c6
EB
5822if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
5823 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
7000a12e 5824 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
e57218b6 5825 # Different host OS linkers have different ideas about the name of the ELF
c65d5e4e
BS
5826 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5827 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5828 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
e57218b6
PM
5829 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5830 ld_i386_emulation="$emu"
5831 roms="optionrom"
5832 break
5833 fi
5834 done
ca35f780 5835fi
ca35f780 5836
2e33c3f8 5837# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
9933c305 5838if test "$cpu" = "s390x" ; then
2e33c3f8
TH
5839 write_c_skeleton
5840 if compile_prog "-march=z900" ""; then
5841 roms="$roms s390-ccw"
1ef6bfc2
PMD
5842 # SLOF is required for building the s390-ccw firmware on s390x,
5843 # since it is using the libnet code from SLOF for network booting.
5844 if test -e "${source_path}/.git" ; then
5845 git_submodules="${git_submodules} roms/SLOF"
5846 fi
2e33c3f8 5847 fi
9933c305
CB
5848fi
5849
11cde1c8
BD
5850# Check that the C++ compiler exists and works with the C compiler.
5851# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5852if has $cxx; then
5853 cat > $TMPC <<EOF
5854int c_function(void);
5855int main(void) { return c_function(); }
5856EOF
5857
5858 compile_object
5859
5860 cat > $TMPCXX <<EOF
5861extern "C" {
5862 int c_function(void);
5863}
5864int c_function(void) { return 42; }
5865EOF
5866
5867 update_cxxflags
5868
5770e8af 5869 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
11cde1c8
BD
5870 # C++ compiler $cxx works ok with C compiler $cc
5871 :
5872 else
5873 echo "C++ compiler $cxx does not work with C compiler $cc"
5874 echo "Disabling C++ specific optional code"
5875 cxx=
5876 fi
5877else
5878 echo "No C++ compiler available; disabling C++ specific optional code"
5879 cxx=
5880fi
5881
5d91a2ed
YL
5882if test $git_update = 'yes' ; then
5883 (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
5884fi
5d91a2ed 5885
98ec69ac 5886config_host_mak="config-host.mak"
98ec69ac 5887
98ec69ac 5888echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 5889echo >> $config_host_mak
98ec69ac 5890
e6c3b0f7 5891echo all: >> $config_host_mak
cc84d63a 5892echo "GIT=$git" >> $config_host_mak
aef45d51 5893echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
f62bbee5 5894echo "GIT_UPDATE=$git_update" >> $config_host_mak
804edf29 5895
98ec69ac 5896echo "ARCH=$ARCH" >> $config_host_mak
727e5283 5897
f3494749
PB
5898if test "$default_devices" = "yes" ; then
5899 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
5900else
5901 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
5902fi
f8393946 5903if test "$debug_tcg" = "yes" ; then
2358a494 5904 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 5905fi
1625af87 5906if test "$strip_opt" = "yes" ; then
52ba784d 5907 echo "STRIP=${strip}" >> $config_host_mak
1625af87 5908fi
7d13299d 5909if test "$bigendian" = "yes" ; then
e2542fe2 5910 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 5911fi
67b915a5 5912if test "$mingw32" = "yes" ; then
98ec69ac 5913 echo "CONFIG_WIN32=y" >> $config_host_mak
89138857 5914 rc_version=$(cat $source_path/VERSION)
9fe6de94
BS
5915 version_major=${rc_version%%.*}
5916 rc_version=${rc_version#*.}
5917 version_minor=${rc_version%%.*}
5918 rc_version=${rc_version#*.}
5919 version_subminor=${rc_version%%.*}
5920 version_micro=0
5921 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5922 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
d9840e25
TS
5923 if test "$guest_agent_with_vss" = "yes" ; then
5924 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 5925 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
5926 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5927 fi
50cbebb9 5928 if test "$guest_agent_ntddscsi" = "yes" ; then
76dc75ca 5929 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
50cbebb9 5930 fi
1a34904e 5931 if test "$guest_agent_msi" = "yes"; then
4bad7c3b 5932 echo "CONFIG_QGA_MSI=y" >> $config_host_mak
9dacf32d
YH
5933 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5934 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5935 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5936 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5937 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5938 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5939 fi
210fa556 5940else
35f4df27 5941 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
5942fi
5943
5944if test "$linux" = "yes" ; then
5945 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 5946fi
128ab2ff 5947
83fb7adf 5948if test "$darwin" = "yes" ; then
98ec69ac 5949 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 5950fi
b29fe3ed 5951
ec530c81 5952if test "$solaris" = "yes" ; then
98ec69ac 5953 echo "CONFIG_SOLARIS=y" >> $config_host_mak
ec530c81 5954fi
179cf400
AF
5955if test "$haiku" = "yes" ; then
5956 echo "CONFIG_HAIKU=y" >> $config_host_mak
5957fi
97a847bc 5958if test "$static" = "yes" ; then
98ec69ac 5959 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 5960fi
1ba16968 5961if test "$profiler" = "yes" ; then
2358a494 5962 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 5963fi
c932ce31
PB
5964if test "$want_tools" = "yes" ; then
5965 echo "CONFIG_TOOLS=y" >> $config_host_mak
5966fi
f15bff25
PB
5967if test "$guest_agent" = "yes" ; then
5968 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
5969fi
4d34a86b 5970echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
8a16d273 5971if test "$vde" = "yes" ; then
98ec69ac 5972 echo "CONFIG_VDE=y" >> $config_host_mak
e2ad6f16 5973 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
8a16d273 5974fi
58952137
VM
5975if test "$netmap" = "yes" ; then
5976 echo "CONFIG_NETMAP=y" >> $config_host_mak
5977fi
015a33bd
GA
5978if test "$l2tpv3" = "yes" ; then
5979 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5980fi
4cc600d2
PB
5981if test "$gprof" = "yes" ; then
5982 echo "CONFIG_GPROF=y" >> $config_host_mak
5983fi
47e98658 5984if test "$cap_ng" = "yes" ; then
a358bca2 5985 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
3f99cf57 5986 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak
47e98658 5987fi
2358a494 5988echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 5989for drv in $audio_drv_list; do
1ef1ec2a 5990 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
484e2cc7 5991 echo "$def=y" >> $config_host_mak
0c58ac1c 5992done
478e943f
PB
5993if test "$alsa" = "yes" ; then
5994 echo "CONFIG_ALSA=y" >> $config_host_mak
5995fi
b1149911 5996echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
478e943f
PB
5997echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
5998if test "$libpulse" = "yes" ; then
5999 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
6000fi
b1149911 6001echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
478e943f 6002echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
b1149911
FZ
6003echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6004echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6005echo "OSS_LIBS=$oss_libs" >> $config_host_mak
478e943f
PB
6006if test "$libjack" = "yes" ; then
6007 echo "CONFIG_LIBJACK=y" >> $config_host_mak
6008fi
2e445703 6009echo "JACK_LIBS=$jack_libs" >> $config_host_mak
d5631638 6010if test "$audio_win_int" = "yes" ; then
6011 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6012fi
b64ec4e4
FZ
6013echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6014echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
dce512de
CH
6015if test "$xfs" = "yes" ; then
6016 echo "CONFIG_XFS=y" >> $config_host_mak
6017fi
89138857 6018qemu_version=$(head $source_path/VERSION)
2358a494 6019echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 6020echo "SRC_PATH=$source_path" >> $config_host_mak
2b1f35b9 6021echo "TARGET_DIRS=$target_list" >> $config_host_mak
17969268 6022if test "$modules" = "yes"; then
e26110cf
FZ
6023 # $shacmd can generate a hash started with digit, which the compiler doesn't
6024 # like as an symbol. So prefix it with an underscore
89138857 6025 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
17969268
FZ
6026 echo "CONFIG_MODULES=y" >> $config_host_mak
6027fi
bd83c861
CE
6028if test "$module_upgrades" = "yes"; then
6029 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6030fi
e633a5c6 6031if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
8781595b
GH
6032 echo "CONFIG_X11=y" >> $config_host_mak
6033 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6034 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6035fi
099d6b0f 6036if test "$pipe2" = "yes" ; then
2358a494 6037 echo "CONFIG_PIPE2=y" >> $config_host_mak
099d6b0f 6038fi
40ff6d7e
KW
6039if test "$accept4" = "yes" ; then
6040 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6041fi
3ce34dfb 6042if test "$splice" = "yes" ; then
2358a494 6043 echo "CONFIG_SPLICE=y" >> $config_host_mak
3ce34dfb 6044fi
c2882b96
RV
6045if test "$eventfd" = "yes" ; then
6046 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6047fi
751bcc39
MAL
6048if test "$memfd" = "yes" ; then
6049 echo "CONFIG_MEMFD=y" >> $config_host_mak
6050fi
955727d2
CT
6051if test "$have_usbfs" = "yes" ; then
6052 echo "CONFIG_USBFS=y" >> $config_host_mak
6053fi
d0927938
UH
6054if test "$fallocate" = "yes" ; then
6055 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6056fi
3d4fa43e
KK
6057if test "$fallocate_punch_hole" = "yes" ; then
6058 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6059fi
b953f075
DL
6060if test "$fallocate_zero_range" = "yes" ; then
6061 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6062fi
ed911435
KW
6063if test "$posix_fallocate" = "yes" ; then
6064 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6065fi
c727f47d
PM
6066if test "$sync_file_range" = "yes" ; then
6067 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6068fi
dace20dc
PM
6069if test "$fiemap" = "yes" ; then
6070 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6071fi
d0927938
UH
6072if test "$dup3" = "yes" ; then
6073 echo "CONFIG_DUP3=y" >> $config_host_mak
6074fi
4e0c6529
AB
6075if test "$ppoll" = "yes" ; then
6076 echo "CONFIG_PPOLL=y" >> $config_host_mak
6077fi
cd758dd0
AB
6078if test "$prctl_pr_set_timerslack" = "yes" ; then
6079 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6080fi
3b6edd16
PM
6081if test "$epoll" = "yes" ; then
6082 echo "CONFIG_EPOLL=y" >> $config_host_mak
6083fi
6084if test "$epoll_create1" = "yes" ; then
6085 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6086fi
a8fd1aba
PM
6087if test "$sendfile" = "yes" ; then
6088 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6089fi
51834341
RV
6090if test "$timerfd" = "yes" ; then
6091 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6092fi
9af5c906
RV
6093if test "$setns" = "yes" ; then
6094 echo "CONFIG_SETNS=y" >> $config_host_mak
6095fi
38860a03
AM
6096if test "$clock_adjtime" = "yes" ; then
6097 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6098fi
5a03cd00
AM
6099if test "$syncfs" = "yes" ; then
6100 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6101fi
3b3f24ad 6102if test "$inotify" = "yes" ; then
2358a494 6103 echo "CONFIG_INOTIFY=y" >> $config_host_mak
3b3f24ad 6104fi
c05c7a73
RV
6105if test "$inotify1" = "yes" ; then
6106 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6107fi
401bc051
PM
6108if test "$sem_timedwait" = "yes" ; then
6109 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6110fi
5c99fa37
KF
6111if test "$strchrnul" = "yes" ; then
6112 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6113fi
8a792b03
JX
6114if test "$st_atim" = "yes" ; then
6115 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
6116fi
6ae9a1f4
JQ
6117if test "$byteswap_h" = "yes" ; then
6118 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6119fi
6120if test "$bswap_h" = "yes" ; then
6121 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6122fi
769ce76d 6123if test "$curl" = "yes" ; then
484e2cc7 6124 echo "CONFIG_CURL=y" >> $config_host_mak
b1d5a277 6125 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6ebc91e5 6126 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
769ce76d 6127fi
2e4d9fb1 6128if test "$brlapi" = "yes" ; then
98ec69ac 6129 echo "CONFIG_BRLAPI=y" >> $config_host_mak
8eca2889 6130 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
2e4d9fb1 6131fi
a4ccabcf 6132if test "$gtk" = "yes" ; then
484e2cc7 6133 echo "CONFIG_GTK=y" >> $config_host_mak
a4ccabcf 6134 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
014cb152 6135 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
925a0400
GH
6136 if test "$gtk_gl" = "yes" ; then
6137 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6138 fi
bbbf9bfb 6139fi
f876b765
MAL
6140if test "$gio" = "yes" ; then
6141 echo "CONFIG_GIO=y" >> $config_host_mak
6142 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6143 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
25a97a56 6144 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
f876b765 6145fi
a1c5e949 6146echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
ddbb0d09
DB
6147if test "$gnutls" = "yes" ; then
6148 echo "CONFIG_GNUTLS=y" >> $config_host_mak
a81df1b6
PB
6149 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
6150 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
ddbb0d09 6151fi
91bfcdb0
DB
6152if test "$gcrypt" = "yes" ; then
6153 echo "CONFIG_GCRYPT=y" >> $config_host_mak
1f923c70
LM
6154 if test "$gcrypt_hmac" = "yes" ; then
6155 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6156 fi
46859d93
DB
6157 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
6158 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
62893b67 6159fi
91bfcdb0
DB
6160if test "$nettle" = "yes" ; then
6161 echo "CONFIG_NETTLE=y" >> $config_host_mak
becaeb72 6162 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
a81df1b6
PB
6163 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
6164 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
ed754746 6165fi
e0576942
DB
6166if test "$qemu_private_xts" = "yes" ; then
6167 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
6168fi
9a2fd434
DB
6169if test "$tasn1" = "yes" ; then
6170 echo "CONFIG_TASN1=y" >> $config_host_mak
6171fi
8953caf3
DB
6172if test "$auth_pam" = "yes" ; then
6173 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6174fi
6b39b063
EB
6175if test "$have_broken_size_max" = "yes" ; then
6176 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6177fi
9df8b20d
TH
6178if test "$have_openpty" = "yes" ; then
6179 echo "HAVE_OPENPTY=y" >> $config_host_mak
6180fi
277abf15
JV
6181
6182# Work around a system header bug with some kernel/XFS header
6183# versions where they both try to define 'struct fsxattr':
6184# xfs headers will not try to redefine structs from linux headers
6185# if this macro is set.
6186if test "$have_fsxattr" = "yes" ; then
6187 echo "HAVE_FSXATTR=y" >> $config_host_mak
6188fi
1efad060
FZ
6189if test "$have_copy_file_range" = "yes" ; then
6190 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6191fi
bbbf9bfb
SW
6192if test "$vte" = "yes" ; then
6193 echo "CONFIG_VTE=y" >> $config_host_mak
a4ccabcf 6194 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
e0fb129c 6195 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
a4ccabcf 6196fi
9d9e1521
GH
6197if test "$virglrenderer" = "yes" ; then
6198 echo "CONFIG_VIRGL=y" >> $config_host_mak
6199 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6200 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6201fi
1badb709 6202if test "$xen" = "enabled" ; then
6dbd588a 6203 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 6204 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
582ea95f
MAL
6205 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
6206 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
e37630ca 6207fi
5c6c3a6c
CH
6208if test "$linux_aio" = "yes" ; then
6209 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6210fi
c10dd856
AM
6211if test "$linux_io_uring" = "yes" ; then
6212 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
6213 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
6214 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
6215fi
758e8e38
VJ
6216if test "$attr" = "yes" ; then
6217 echo "CONFIG_ATTR=y" >> $config_host_mak
ec0d5893 6218 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak
758e8e38 6219fi
4f26f2b6
AK
6220if test "$libattr" = "yes" ; then
6221 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6222fi
983eef5a
MI
6223if test "$virtfs" = "yes" ; then
6224 echo "CONFIG_VIRTFS=y" >> $config_host_mak
758e8e38 6225fi
5e9be92d
NB
6226if test "$vhost_scsi" = "yes" ; then
6227 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6228fi
af3bba76
PB
6229if test "$vhost_net" = "yes" ; then
6230 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6231fi
6232if test "$vhost_net_user" = "yes" ; then
56f41de7 6233 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
03ce5744 6234fi
108a6481
CL
6235if test "$vhost_net_vdpa" = "yes" ; then
6236 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
6237fi
042cea27
GA
6238if test "$vhost_crypto" = "yes" ; then
6239 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6240fi
fc0b9b0e
SH
6241if test "$vhost_vsock" = "yes" ; then
6242 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5fe97d88
SG
6243 if test "$vhost_user" = "yes" ; then
6244 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
6245 fi
fc0b9b0e 6246fi
299e6f19
PB
6247if test "$vhost_kernel" = "yes" ; then
6248 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6249fi
e6a74868
MAL
6250if test "$vhost_user" = "yes" ; then
6251 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6252fi
108a6481
CL
6253if test "$vhost_vdpa" = "yes" ; then
6254 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
6255fi
98fc1ada
DDAG
6256if test "$vhost_user_fs" = "yes" ; then
6257 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
6258fi
bf9298b9 6259if test "$iovec" = "yes" ; then
2358a494 6260 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 6261fi
ceb42de8 6262if test "$preadv" = "yes" ; then
2358a494 6263 echo "CONFIG_PREADV=y" >> $config_host_mak
ceb42de8 6264fi
a40161cb
PB
6265if test "$membarrier" = "yes" ; then
6266 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6267fi
dcc38d1c
MT
6268if test "$signalfd" = "yes" ; then
6269 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6270fi
d339d766
RJ
6271if test "$optreset" = "yes" ; then
6272 echo "HAVE_OPTRESET=y" >> $config_host_mak
6273fi
1badb709 6274if test "$tcg" = "enabled"; then
b3f6ea7e
PB
6275 if test "$tcg_interpreter" = "yes" ; then
6276 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6277 fi
9195b2c2 6278fi
5f6b9e8f
BS
6279if test "$fdatasync" = "yes" ; then
6280 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6281fi
e78815a5
AF
6282if test "$madvise" = "yes" ; then
6283 echo "CONFIG_MADVISE=y" >> $config_host_mak
6284fi
6285if test "$posix_madvise" = "yes" ; then
6286 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6287fi
9bc5a719
AG
6288if test "$posix_memalign" = "yes" ; then
6289 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6290fi
cd4ec0b4
GH
6291if test "$spice" = "yes" ; then
6292 echo "CONFIG_SPICE=y" >> $config_host_mak
2634733c
PB
6293 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
6294 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
cd4ec0b4 6295fi
36707144 6296
7b02f544
MAL
6297if test "$smartcard" = "yes" ; then
6298 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7b62bf5a
FZ
6299 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6300 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
111a38b0
RR
6301fi
6302
2b2325ff
GH
6303if test "$libusb" = "yes" ; then
6304 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
b878b652
FZ
6305 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6306 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
2b2325ff
GH
6307fi
6308
69354a83
HG
6309if test "$usb_redir" = "yes" ; then
6310 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
cc7923fc
FZ
6311 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6312 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
69354a83
HG
6313fi
6314
da076ffe
GH
6315if test "$opengl" = "yes" ; then
6316 echo "CONFIG_OPENGL=y" >> $config_host_mak
de2d3005 6317 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
da076ffe 6318 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
014cb152
GH
6319 if test "$opengl_dmabuf" = "yes" ; then
6320 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6321 fi
20ff075b
MW
6322fi
6323
d52c454a
MAL
6324if test "$gbm" = "yes" ; then
6325 echo "CONFIG_GBM=y" >> $config_host_mak
6326 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6327 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6328fi
6329
6330
99f2dbd3
LL
6331if test "$avx2_opt" = "yes" ; then
6332 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6333fi
6334
6b8cd447
RH
6335if test "$avx512f_opt" = "yes" ; then
6336 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
6337fi
6338
607dacd0
QN
6339if test "$lzo" = "yes" ; then
6340 echo "CONFIG_LZO=y" >> $config_host_mak
708eab42 6341 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak
607dacd0
QN
6342fi
6343
6344if test "$snappy" = "yes" ; then
6345 echo "CONFIG_SNAPPY=y" >> $config_host_mak
708eab42 6346 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak
607dacd0
QN
6347fi
6348
6b383c08
PW
6349if test "$bzip2" = "yes" ; then
6350 echo "CONFIG_BZIP2=y" >> $config_host_mak
6351 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6352fi
6353
83bc1f97
JF
6354if test "$lzfse" = "yes" ; then
6355 echo "CONFIG_LZFSE=y" >> $config_host_mak
6356 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6357fi
6358
3a678481
JQ
6359if test "$zstd" = "yes" ; then
6360 echo "CONFIG_ZSTD=y" >> $config_host_mak
5e5733e5
MAL
6361 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak
6362 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak
3a678481
JQ
6363fi
6364
c589b249 6365if test "$libiscsi" = "yes" ; then
484e2cc7 6366 echo "CONFIG_LIBISCSI=y" >> $config_host_mak
6ebc91e5
FZ
6367 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6368 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
c589b249
RS
6369fi
6370
6542aa9c 6371if test "$libnfs" = "yes" ; then
484e2cc7 6372 echo "CONFIG_LIBNFS=y" >> $config_host_mak
4be4879f 6373 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6542aa9c
PL
6374fi
6375
f794573e
EO
6376if test "$seccomp" = "yes"; then
6377 echo "CONFIG_SECCOMP=y" >> $config_host_mak
c3883e1f
FZ
6378 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6379 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
f794573e
EO
6380fi
6381
83fb7adf 6382# XXX: suppress that
7d3505c5 6383if [ "$bsd" = "yes" ] ; then
2358a494 6384 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
6385fi
6386
3556c233
PB
6387if test "$qom_cast_debug" = "yes" ; then
6388 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6389fi
f27aaf4b 6390if test "$rbd" = "yes" ; then
484e2cc7 6391 echo "CONFIG_RBD=y" >> $config_host_mak
6ebc91e5 6392 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
d0e2fce5
AK
6393fi
6394
7c2acc70 6395echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
6396if test "$coroutine_pool" = "yes" ; then
6397 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6398else
6399 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6400fi
20ff6c80 6401
7d992e4d
PL
6402if test "$debug_stack_usage" = "yes" ; then
6403 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6404fi
6405
f0d92b56
LM
6406if test "$crypto_afalg" = "yes" ; then
6407 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6408fi
6409
d2042378
AK
6410if test "$open_by_handle_at" = "yes" ; then
6411 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6412fi
6413
e06a765e
HPB
6414if test "$linux_magic_h" = "yes" ; then
6415 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
8ab1bf12
LC
6416fi
6417
3f4349dc
KW
6418if test "$valgrind_h" = "yes" ; then
6419 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6420fi
6421
d83414e1
MAL
6422if test "$have_asan_iface_fiber" = "yes" ; then
6423 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6424fi
6425
0aebab04
LY
6426if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
6427 echo "CONFIG_TSAN=y" >> $config_host_mak
6428fi
6429
8ab1bf12
LC
6430if test "$has_environ" = "yes" ; then
6431 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
e06a765e
HPB
6432fi
6433
76a347e1
RH
6434if test "$cpuid_h" = "yes" ; then
6435 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6436fi
6437
f540166b
RH
6438if test "$int128" = "yes" ; then
6439 echo "CONFIG_INT128=y" >> $config_host_mak
6440fi
6441
7ebee43e
RH
6442if test "$atomic128" = "yes" ; then
6443 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6444fi
6445
e6cd4bb5
RH
6446if test "$cmpxchg128" = "yes" ; then
6447 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6448fi
6449
df79b996
RH
6450if test "$atomic64" = "yes" ; then
6451 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6452fi
6453
db8aaae8
RH
6454if test "$attralias" = "yes" ; then
6455 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
6456fi
6457
1e6e9aca
RH
6458if test "$getauxval" = "yes" ; then
6459 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6460fi
6461
eb100396 6462if test "$glusterfs" = "yes" ; then
484e2cc7 6463 echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
6ebc91e5
FZ
6464 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6465 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
0c14fb47
BR
6466fi
6467
d85fa9eb
JC
6468if test "$glusterfs_xlator_opt" = "yes" ; then
6469 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6470fi
6471
0c14fb47
BR
6472if test "$glusterfs_discard" = "yes" ; then
6473 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
eb100396 6474fi
e06a765e 6475
df3a429a
NV
6476if test "$glusterfs_fallocate" = "yes" ; then
6477 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6478fi
6479
7c815372
BR
6480if test "$glusterfs_zerofill" = "yes" ; then
6481 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6482fi
6483
e014dbe7
PKK
6484if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
6485 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
6486fi
6487
0e3b891f
NV
6488if test "$glusterfs_iocb_has_stat" = "yes" ; then
6489 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
6490fi
6491
b10d49d7 6492if test "$libssh" = "yes" ; then
484e2cc7 6493 echo "CONFIG_LIBSSH=y" >> $config_host_mak
b10d49d7
PT
6494 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
6495 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
0a12ec87
RJ
6496fi
6497
ed1701c6
DDAG
6498if test "$live_block_migration" = "yes" ; then
6499 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6500fi
6501
3b8acc11 6502if test "$tpm" = "yes"; then
3cae16db 6503 echo 'CONFIG_TPM=y' >> $config_host_mak
3b8acc11
PB
6504fi
6505
5b808275
LV
6506echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6507if have_backend "nop"; then
6d8a764e 6508 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 6509fi
5b808275 6510if have_backend "simple"; then
6d8a764e
LV
6511 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6512 # Set the appropriate trace file.
953ffe0f 6513 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 6514fi
ed7f5f1d
PB
6515if have_backend "log"; then
6516 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6d8a764e 6517fi
5b808275 6518if have_backend "ust"; then
6d8a764e 6519 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
a81df1b6
PB
6520 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
6521 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
6d8a764e 6522fi
5b808275 6523if have_backend "dtrace"; then
6d8a764e
LV
6524 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6525 if test "$trace_backend_stap" = "yes" ; then
6526 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6527 fi
c276b17d 6528fi
5b808275 6529if have_backend "ftrace"; then
781e9545
ET
6530 if test "$linux" = "yes" ; then
6531 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 6532 else
21684af0 6533 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
6534 fi
6535fi
0a852417
PD
6536if have_backend "syslog"; then
6537 if test "$posix_syslog" = "yes" ; then
6538 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6539 else
6540 feature_not_found "syslog(trace backend)" "syslog not available"
6541 fi
6542fi
9410b56c
PS
6543echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6544
2da776db
MH
6545if test "$rdma" = "yes" ; then
6546 echo "CONFIG_RDMA=y" >> $config_host_mak
392fb643 6547 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
2da776db
MH
6548fi
6549
21ab34c9
MA
6550if test "$pvrdma" = "yes" ; then
6551 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6552fi
6553
575b22b1
LV
6554if test "$have_rtnetlink" = "yes" ; then
6555 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6556fi
6557
ed279a06
KK
6558if test "$libxml2" = "yes" ; then
6559 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6560 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6561 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6562fi
6563
a6b1d4c0
CX
6564if test "$replication" = "yes" ; then
6565 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6566fi
6567
6a02c806
SH
6568if test "$have_af_vsock" = "yes" ; then
6569 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6570fi
6571
4d04351f
CC
6572if test "$have_sysmacros" = "yes" ; then
6573 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6574fi
6575
49e00a18
AG
6576if test "$have_static_assert" = "yes" ; then
6577 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6578fi
6579
e674605f
TG
6580if test "$have_utmpx" = "yes" ; then
6581 echo "HAVE_UTMPX=y" >> $config_host_mak
6582fi
db1ed1ab
RH
6583if test "$have_getrandom" = "yes" ; then
6584 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
6585fi
e0580342
KR
6586if test "$ivshmem" = "yes" ; then
6587 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
8ca80760 6588fi
ba59fb77
PB
6589if test "$debug_mutex" = "yes" ; then
6590 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6591fi
e0580342 6592
5c312079
DDAG
6593# Hold two types of flag:
6594# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6595# a thread we have a handle to
479a5747 6596# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
5c312079 6597# platform
479a5747
RB
6598if test "$pthread_setname_np_w_tid" = "yes" ; then
6599 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6600 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6601elif test "$pthread_setname_np_wo_tid" = "yes" ; then
5c312079 6602 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
479a5747 6603 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
5c312079
DDAG
6604fi
6605
17824406
JH
6606if test "$libpmem" = "yes" ; then
6607 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
c9322ab5
MAL
6608 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
6609 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
17824406
JH
6610fi
6611
21b2eca6
JL
6612if test "$libdaxctl" = "yes" ; then
6613 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
c7c91a74 6614 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
21b2eca6
JL
6615fi
6616
2f740136
JC
6617if test "$bochs" = "yes" ; then
6618 echo "CONFIG_BOCHS=y" >> $config_host_mak
6619fi
6620if test "$cloop" = "yes" ; then
6621 echo "CONFIG_CLOOP=y" >> $config_host_mak
6622fi
6623if test "$dmg" = "yes" ; then
6624 echo "CONFIG_DMG=y" >> $config_host_mak
6625fi
6626if test "$qcow1" = "yes" ; then
6627 echo "CONFIG_QCOW1=y" >> $config_host_mak
6628fi
6629if test "$vdi" = "yes" ; then
6630 echo "CONFIG_VDI=y" >> $config_host_mak
6631fi
6632if test "$vvfat" = "yes" ; then
6633 echo "CONFIG_VVFAT=y" >> $config_host_mak
6634fi
6635if test "$qed" = "yes" ; then
6636 echo "CONFIG_QED=y" >> $config_host_mak
6637fi
6638if test "$parallels" = "yes" ; then
6639 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6640fi
6641if test "$sheepdog" = "yes" ; then
e1c42697 6642 add_to deprecated_features "sheepdog"
2f740136
JC
6643 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6644fi
195588cc
DC
6645if test "$have_mlockall" = "yes" ; then
6646 echo "HAVE_MLOCKALL=y" >> $config_host_mak
6647fi
adc28027 6648if test "$fuzzing" = "yes" ; then
54c9e41d
AB
6649 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
6650 # needed CFLAGS have already been provided
6651 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
6652 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
6653 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
6654 else
6655 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
6656 fi
adc28027 6657fi
2f740136 6658
40e8c6f4
AB
6659if test "$plugins" = "yes" ; then
6660 echo "CONFIG_PLUGIN=y" >> $config_host_mak
26fffe29
EC
6661 # Copy the export object list to the build dir
6662 if test "$ld_dynamic_list" = "yes" ; then
6663 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
6664 ld_symbols=qemu-plugins-ld.symbols
6665 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
6666 elif test "$ld_exported_symbols_list" = "yes" ; then
6667 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
6668 ld64_symbols=qemu-plugins-ld64.symbols
6669 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
6670 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
6671 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
6672 else
6673 error_exit \
6674 "If \$plugins=yes, either \$ld_dynamic_list or " \
6675 "\$ld_exported_symbols_list should have been set to 'yes'."
6676 fi
40e8c6f4
AB
6677fi
6678
f48e590a
AB
6679if test -n "$gdb_bin" ; then
6680 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
6681fi
6682
54e7aac0
AK
6683if test "$secret_keyring" = "yes" ; then
6684 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
6685fi
6686
98ec69ac 6687echo "ROMS=$roms" >> $config_host_mak
804edf29 6688echo "MAKE=$make" >> $config_host_mak
c886edfb 6689echo "PYTHON=$python" >> $config_host_mak
39d87c8c 6690echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
a5665051 6691echo "MESON=$meson" >> $config_host_mak
09e93326 6692echo "NINJA=$ninja" >> $config_host_mak
804edf29 6693echo "CC=$cc" >> $config_host_mak
a31a8642 6694if $iasl -h > /dev/null 2>&1; then
859aef02 6695 echo "CONFIG_IASL=$iasl" >> $config_host_mak
a31a8642 6696fi
83f73fce 6697echo "CXX=$cxx" >> $config_host_mak
3c4a4d0d 6698echo "OBJCC=$objcc" >> $config_host_mak
804edf29 6699echo "AR=$ar" >> $config_host_mak
45d285ab 6700echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
cdbd727c 6701echo "AS=$as" >> $config_host_mak
5f6f0e27 6702echo "CCAS=$ccas" >> $config_host_mak
3dd46c78 6703echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
6704echo "OBJCOPY=$objcopy" >> $config_host_mak
6705echo "LD=$ld" >> $config_host_mak
9f81aeb5 6706echo "RANLIB=$ranlib" >> $config_host_mak
4852ee95 6707echo "NM=$nm" >> $config_host_mak
daa79d9a 6708echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
9fe6de94 6709echo "WINDRES=$windres" >> $config_host_mak
46eef33b 6710echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 6711echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
11cde1c8 6712echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
a81df1b6
PB
6713echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6714echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
8a99e9a3 6715echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
e57218b6 6716echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
804edf29 6717echo "EXESUF=$EXESUF" >> $config_host_mak
484e2cc7 6718echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
f15bff25 6719echo "LIBS_QGA=$libs_qga" >> $config_host_mak
90246037
DB
6720echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6721echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
1d728c39
BS
6722if test "$gcov" = "yes" ; then
6723 echo "CONFIG_GCOV=y" >> $config_host_mak
1d728c39 6724fi
804edf29 6725
adc28027
AB
6726if test "$fuzzing" != "no"; then
6727 echo "CONFIG_FUZZ=y" >> $config_host_mak
adc28027 6728fi
54c9e41d 6729echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
3efac6eb 6730
b767d257
MMG
6731if test "$rng_none" = "yes"; then
6732 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
6733fi
6734
6efd7517
PM
6735# use included Linux headers
6736if test "$linux" = "yes" ; then
a307beb6 6737 mkdir -p linux-headers
6efd7517 6738 case "$cpu" in
c72b26ec 6739 i386|x86_64|x32)
08312a63 6740 linux_arch=x86
6efd7517 6741 ;;
f8378acc 6742 ppc|ppc64|ppc64le)
08312a63 6743 linux_arch=powerpc
6efd7517
PM
6744 ;;
6745 s390x)
08312a63
PM
6746 linux_arch=s390
6747 ;;
1f080313
CF
6748 aarch64)
6749 linux_arch=arm64
6750 ;;
222e7d11
SL
6751 mips64)
6752 linux_arch=mips
6753 ;;
08312a63
PM
6754 *)
6755 # For most CPUs the kernel architecture name and QEMU CPU name match.
6756 linux_arch="$cpu"
6efd7517
PM
6757 ;;
6758 esac
08312a63
PM
6759 # For non-KVM architectures we will not have asm headers
6760 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6761 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6762 fi
6efd7517
PM
6763fi
6764
1d14ffa9 6765for target in $target_list; do
fdb75aef
PB
6766 target_dir="$target"
6767 target_name=$(echo $target | cut -d '-' -f 1)
6768 mkdir -p $target_dir
6769 case $target in
6770 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
6771 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
6772 esac
6773done
7d13299d 6774
765686d6 6775echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
fdb75aef
PB
6776if test "$default_targets" = "yes"; then
6777 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
6778fi
a540f158 6779
a99d57bb
WG
6780if test "$numa" = "yes"; then
6781 echo "CONFIG_NUMA=y" >> $config_host_mak
ab318051 6782 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
a99d57bb
WG
6783fi
6784
fd0e6053
JS
6785if test "$ccache_cpp2" = "yes"; then
6786 echo "export CCACHE_CPP2=y" >> $config_host_mak
6787fi
6788
1e4f6065
DB
6789if test "$safe_stack" = "yes"; then
6790 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
6791fi
6792
e29e5c6e
PM
6793# If we're using a separate build tree, set it up now.
6794# DIRS are directories which we simply mkdir in the build tree;
6795# LINKS are things to symlink back into the source tree
6796# (these can be both files and directories).
6797# Caution: do not add files or directories here using wildcards. This
6798# will result in problems later if a new file matching the wildcard is
6799# added to the source tree -- nothing will cause configure to be rerun
6800# so the build tree will be missing the link back to the new file, and
6801# tests might fail. Prefer to keep the relevant files in their own
6802# directory and symlink the directory instead.
09db9b9d
GH
6803# UNLINK is used to remove symlinks from older development versions
6804# that might get into the way when doing "git update" without doing
6805# a "make distclean" in between.
1cf4323e
TH
6806DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
6807DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
b855f8d1 6808DIRS="$DIRS docs docs/interop fsdev scsi"
744a928c 6809DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
8db2a4fd 6810DIRS="$DIRS roms/seabios"
c17a386b 6811DIRS="$DIRS contrib/plugins/"
2038f8c8 6812LINKS="Makefile"
e8f3bd71 6813LINKS="$LINKS tests/tcg/lm32/Makefile"
3941996b 6814LINKS="$LINKS tests/tcg/Makefile.target"
ddcf607f 6815LINKS="$LINKS pc-bios/optionrom/Makefile"
e29e5c6e 6816LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8db2a4fd 6817LINKS="$LINKS roms/seabios/Makefile"
e29e5c6e
PM
6818LINKS="$LINKS pc-bios/qemu-icon.bmp"
6819LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
39950353
PM
6820LINKS="$LINKS tests/acceptance tests/data"
6821LINKS="$LINKS tests/qemu-iotests/check"
8f8fd9ed 6822LINKS="$LINKS python"
c17a386b 6823LINKS="$LINKS contrib/plugins/Makefile "
09db9b9d 6824UNLINK="pc-bios/keymaps"
753d11f2
RH
6825for bios_file in \
6826 $source_path/pc-bios/*.bin \
3a631b8e 6827 $source_path/pc-bios/*.elf \
225a9ab8 6828 $source_path/pc-bios/*.lid \
753d11f2
RH
6829 $source_path/pc-bios/*.rom \
6830 $source_path/pc-bios/*.dtb \
e89e33e1 6831 $source_path/pc-bios/*.img \
753d11f2 6832 $source_path/pc-bios/openbios-* \
4e73c781 6833 $source_path/pc-bios/u-boot.* \
26ce90fd 6834 $source_path/pc-bios/edk2-*.fd.bz2 \
753d11f2
RH
6835 $source_path/pc-bios/palcode-*
6836do
e29e5c6e 6837 LINKS="$LINKS pc-bios/$(basename $bios_file)"
d1807a4f
PB
6838done
6839mkdir -p $DIRS
e29e5c6e 6840for f in $LINKS ; do
0f4d8894 6841 if [ -e "$source_path/$f" ]; then
f9245e10
PM
6842 symlink "$source_path/$f" "$f"
6843 fi
d1807a4f 6844done
09db9b9d
GH
6845for f in $UNLINK ; do
6846 if [ -L "$f" ]; then
6847 rm -f "$f"
6848 fi
6849done
1ad2134f 6850
2038f8c8
PB
6851(for i in $cross_cc_vars; do
6852 export $i
6853done
afc3a8f9 6854export target_list source_path use_containers
2038f8c8
PB
6855$source_path/tests/tcg/configure.sh)
6856
c34ebfdc 6857# temporary config to build submodules
8db2a4fd 6858for rom in seabios; do
c34ebfdc 6859 config_mak=roms/$rom/config.mak
37116c89 6860 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 6861 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
cdbd727c 6862 echo "AS=$as" >> $config_mak
5f6f0e27 6863 echo "CCAS=$ccas" >> $config_mak
c34ebfdc
AL
6864 echo "CC=$cc" >> $config_mak
6865 echo "BCC=bcc" >> $config_mak
3dd46c78 6866 echo "CPP=$cpp" >> $config_mak
c34ebfdc 6867 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 6868 echo "IASL=$iasl" >> $config_mak
c34ebfdc 6869 echo "LD=$ld" >> $config_mak
9f81aeb5 6870 echo "RANLIB=$ranlib" >> $config_mak
c34ebfdc
AL
6871done
6872
76c7560a
HR
6873# set up qemu-iotests in this build directory
6874iotests_common_env="tests/qemu-iotests/common.env"
76c7560a
HR
6875
6876echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6877echo >> "$iotests_common_env"
6878echo "export PYTHON='$python'" >> "$iotests_common_env"
6879
a5665051 6880if test "$skip_meson" = no; then
fc929892
MAL
6881cross="config-meson.cross.new"
6882meson_quote() {
47b30835 6883 echo "'$(echo $* | sed "s/ /','/g")'"
fc929892
MAL
6884}
6885
6886echo "# Automatically generated by configure - do not modify" > $cross
6887echo "[properties]" >> $cross
6888test -z "$cxx" && echo "link_language = 'c'" >> $cross
47b30835
PB
6889echo "[built-in options]" >> $cross
6890echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
6891echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
6892echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6893echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
fc929892 6894echo "[binaries]" >> $cross
47b30835
PB
6895echo "c = [$(meson_quote $cc)]" >> $cross
6896test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
6897echo "ar = [$(meson_quote $ar)]" >> $cross
6898echo "nm = [$(meson_quote $nm)]" >> $cross
6899echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
6900echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
e8178514 6901if has $sdl2_config; then
47b30835 6902 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
e8178514 6903fi
47b30835
PB
6904echo "strip = [$(meson_quote $strip)]" >> $cross
6905echo "windres = [$(meson_quote $windres)]" >> $cross
fc929892
MAL
6906if test -n "$cross_prefix"; then
6907 cross_arg="--cross-file config-meson.cross"
fc929892
MAL
6908 echo "[host_machine]" >> $cross
6909 if test "$mingw32" = "yes" ; then
6910 echo "system = 'windows'" >> $cross
fc929892 6911 fi
853b4baf
TH
6912 if test "$linux" = "yes" ; then
6913 echo "system = 'linux'" >> $cross
6914 fi
fc929892
MAL
6915 case "$ARCH" in
6916 i386|x86_64)
6917 echo "cpu_family = 'x86'" >> $cross
6918 ;;
6919 ppc64le)
6920 echo "cpu_family = 'ppc64'" >> $cross
6921 ;;
6922 *)
6923 echo "cpu_family = '$ARCH'" >> $cross
6924 ;;
6925 esac
6926 echo "cpu = '$cpu'" >> $cross
6927 if test "$bigendian" = "yes" ; then
6928 echo "endian = 'big'" >> $cross
6929 else
6930 echo "endian = 'little'" >> $cross
6931 fi
6932else
6933 cross_arg="--native-file config-meson.cross"
6934fi
6935mv $cross config-meson.cross
6936
a5665051 6937rm -rf meson-private meson-info meson-logs
a5cb7c5a
PB
6938unset staticpic
6939if ! version_ge "$($meson --version)" 0.56.0; then
6940 staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi)
6941fi
09e93326 6942NINJA=$ninja $meson setup \
d17f305a
PB
6943 --prefix "$prefix" \
6944 --libdir "$libdir" \
6945 --libexecdir "$libexecdir" \
6946 --bindir "$bindir" \
6947 --includedir "$includedir" \
6948 --datadir "$datadir" \
6949 --mandir "$mandir" \
6950 --sysconfdir "$sysconfdir" \
16bf7a33 6951 --localedir "$localedir" \
d17f305a
PB
6952 --localstatedir "$local_statedir" \
6953 -Ddocdir="$docdir" \
16bf7a33 6954 -Dqemu_firmwarepath="$firmwarepath" \
73f3aa37 6955 -Dqemu_suffix="$qemu_suffix" \
a5665051
PB
6956 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
6957 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
6958 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
6959 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
da6d48b9 6960 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
a5cb7c5a 6961 ${staticpic:+-Db_staticpic=$staticpic} \
bf0e56a3 6962 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
5f8937d6
YL
6963 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
6964 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \
6965 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
6966 -Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
6967 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
cece116c 6968 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
5f8937d6 6969 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \
5c53015a 6970 -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
c8d5450b 6971 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
e5e856c1 6972 -Dvhost_user_blk_server=$vhost_user_blk_server \
df4ea709 6973 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek \
fc929892 6974 $cross_arg \
a5665051
PB
6975 "$PWD" "$source_path"
6976
6977if test "$?" -ne 0 ; then
6978 error_exit "meson setup failed"
6979fi
a5665051
PB
6980fi
6981
2d838d9b
AB
6982if test -n "${deprecated_features}"; then
6983 echo "Warning, deprecated features enabled."
6984 echo "Please see docs/system/deprecated.rst"
6985 echo " features: ${deprecated_features}"
6986fi
6987
dc655404
MT
6988# Save the configure command line for later reuse.
6989cat <<EOD >config.status
6990#!/bin/sh
6991# Generated by configure.
6992# Run this file to recreate the current configuration.
6993# Compiler output produced by configure, useful for debugging
6994# configure, is in config.log if it exists.
6995EOD
e811da7f
DB
6996
6997preserve_env() {
6998 envname=$1
6999
7000 eval envval=\$$envname
7001
7002 if test -n "$envval"
7003 then
7004 echo "$envname='$envval'" >> config.status
7005 echo "export $envname" >> config.status
7006 else
7007 echo "unset $envname" >> config.status
7008 fi
7009}
7010
7011# Preserve various env variables that influence what
7012# features/build target configure will detect
7013preserve_env AR
7014preserve_env AS
7015preserve_env CC
7016preserve_env CPP
7017preserve_env CXX
7018preserve_env INSTALL
7019preserve_env LD
7020preserve_env LD_LIBRARY_PATH
7021preserve_env LIBTOOL
7022preserve_env MAKE
7023preserve_env NM
7024preserve_env OBJCOPY
7025preserve_env PATH
7026preserve_env PKG_CONFIG
7027preserve_env PKG_CONFIG_LIBDIR
7028preserve_env PKG_CONFIG_PATH
7029preserve_env PYTHON
e811da7f
DB
7030preserve_env SDL2_CONFIG
7031preserve_env SMBD
7032preserve_env STRIP
7033preserve_env WINDRES
7034
dc655404 7035printf "exec" >>config.status
a5665051
PB
7036for i in "$0" "$@"; do
7037 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status
7038done
cf7cc929 7039echo ' "$@"' >>config.status
dc655404
MT
7040chmod +x config.status
7041
8cd05ab6 7042rm -r "$TMPDIR1"