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