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