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