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