]> git.proxmox.com Git - mirror_qemu.git/blame - configure
configure: don't allow plugins to be enabled for a non-TCG build
[mirror_qemu.git] / configure
CommitLineData
7d13299d
FB
1#!/bin/sh
2#
3ef693a0 3# qemu configure script (c) 2003 Fabrice Bellard
7d13299d 4#
8cd05ab6 5
99519e67
CH
6# Unset some variables known to interfere with behavior of common tools,
7# just as autoconf does.
8CLICOLOR_FORCE= GREP_OPTIONS=
9unset CLICOLOR_FORCE GREP_OPTIONS
10
5e4dfd3d
JS
11# Don't allow CCACHE, if present, to use cached results of compile tests!
12export CCACHE_RECACHE=yes
13
dedad027
DB
14# make source path absolute
15source_path=$(cd "$(dirname -- "$0")"; pwd)
16
17if test "$PWD" = "$source_path"
18then
19 echo "Using './build' as the directory for build output"
20
21 MARKER=build/auto-created-by-configure
22
23 if test -e build
24 then
25 if test -f $MARKER
26 then
27 rm -rf build
28 else
29 echo "ERROR: ./build dir already exists and was not previously created by configure"
30 exit 1
31 fi
32 fi
33
34 mkdir build
35 touch $MARKER
36
37 cat > GNUmakefile <<'EOF'
38# This file is auto-generated by configure to support in-source tree
39# 'make' command invocation
40
41ifeq ($(MAKECMDGOALS),)
42recurse: all
43endif
44
45.NOTPARALLEL: %
46%: force
47 @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
48 @$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
49 @if test "$(MAKECMDGOALS)" = "distclean" && \
50 test -e build/auto-created-by-configure ; \
51 then \
52 rm -rf build GNUmakefile ; \
53 fi
54force: ;
55.PHONY: force
56GNUmakefile: ;
57
58EOF
59 cd build
60 exec $source_path/configure "$@"
61fi
62
8cd05ab6
PM
63# Temporary directory used for files created while
64# configure runs. Since it is in the build directory
65# we can safely blow away any previous version of it
66# (and we need not jump through hoops to try to delete
67# it when configure exits.)
68TMPDIR1="config-temp"
69rm -rf "${TMPDIR1}"
70mkdir -p "${TMPDIR1}"
71if [ $? -ne 0 ]; then
72 echo "ERROR: failed to create temporary directory"
73 exit 1
7d13299d
FB
74fi
75
8cd05ab6
PM
76TMPB="qemu-conf"
77TMPC="${TMPDIR1}/${TMPB}.c"
66518bf6 78TMPO="${TMPDIR1}/${TMPB}.o"
9c83ffd8 79TMPCXX="${TMPDIR1}/${TMPB}.cxx"
8cd05ab6 80TMPE="${TMPDIR1}/${TMPB}.exe"
26fffe29 81TMPTXT="${TMPDIR1}/${TMPB}.txt"
7d13299d 82
da1d85e3 83rm -f config.log
9ac81bbb 84
b48e3611
PM
85# Print a helpful header at the top of config.log
86echo "# QEMU configure log $(date)" >> config.log
979ae168
PM
87printf "# Configured with:" >> config.log
88printf " '%s'" "$0" "$@" >> config.log
89echo >> config.log
b48e3611
PM
90echo "#" >> config.log
91
835af899
PB
92quote_sh() {
93 printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&',"
94}
95
d880a3ba
PB
96print_error() {
97 (echo
76ad07a4
PM
98 echo "ERROR: $1"
99 while test -n "$2"; do
100 echo " $2"
101 shift
102 done
d880a3ba
PB
103 echo) >&2
104}
105
106error_exit() {
107 print_error "$@"
76ad07a4
PM
108 exit 1
109}
110
9c83ffd8
PM
111do_compiler() {
112 # Run the compiler, capturing its output to the log. First argument
113 # is compiler binary to execute.
630d86b7 114 compiler="$1"
9c83ffd8 115 shift
8bbe05d7
IJ
116 if test -n "$BASH_VERSION"; then eval '
117 echo >>config.log "
118funcs: ${FUNCNAME[*]}
119lines: ${BASH_LINENO[*]}"
120 '; fi
9c83ffd8
PM
121 echo $compiler "$@" >> config.log
122 $compiler "$@" >> config.log 2>&1 || return $?
8dc38a78
PM
123 # Test passed. If this is an --enable-werror build, rerun
124 # the test with -Werror and bail out if it fails. This
125 # makes warning-generating-errors in configure test code
126 # obvious to developers.
127 if test "$werror" != "yes"; then
128 return 0
129 fi
130 # Don't bother rerunning the compile if we were already using -Werror
131 case "$*" in
132 *-Werror*)
133 return 0
134 ;;
135 esac
9c83ffd8
PM
136 echo $compiler -Werror "$@" >> config.log
137 $compiler -Werror "$@" >> config.log 2>&1 && return $?
76ad07a4
PM
138 error_exit "configure test passed without -Werror but failed with -Werror." \
139 "This is probably a bug in the configure script. The failing command" \
140 "will be at the bottom of config.log." \
141 "You can run configure with --disable-werror to bypass this check."
8dc38a78
PM
142}
143
9c83ffd8
PM
144do_cc() {
145 do_compiler "$cc" "$@"
146}
147
148do_cxx() {
149 do_compiler "$cxx" "$@"
150}
151
00849b92
RH
152# Append $2 to the variable named $1, with space separation
153add_to() {
154 eval $1=\${$1:+\"\$$1 \"}\$2
155}
156
9c83ffd8
PM
157update_cxxflags() {
158 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
159 # options which some versions of GCC's C++ compiler complain about
160 # because they only make sense for C programs.
53422040 161 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
8a9d3d56 162 CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu11/-std=gnu++11/)
9c83ffd8
PM
163 for arg in $QEMU_CFLAGS; do
164 case $arg in
165 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
166 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
167 ;;
168 *)
169 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
170 ;;
171 esac
172 done
173}
174
52166aa0 175compile_object() {
fd0e6053 176 local_cflags="$1"
5770e8af 177 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
52166aa0
JQ
178}
179
180compile_prog() {
181 local_cflags="$1"
182 local_ldflags="$2"
5770e8af
PB
183 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
184 $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
52166aa0
JQ
185}
186
11568d6d
PB
187# symbolically link $1 to $2. Portable version of "ln -sf".
188symlink() {
72b8b5a1 189 rm -rf "$2"
ec5b06d7 190 mkdir -p "$(dirname "$2")"
72b8b5a1 191 ln -s "$1" "$2"
11568d6d
PB
192}
193
0dba6195
LM
194# check whether a command is available to this shell (may be either an
195# executable or a builtin)
196has() {
197 type "$1" >/dev/null 2>&1
198}
199
0a01d76f 200version_ge () {
2df52b9b
AB
201 local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ')
202 local_ver2=$(echo "$2" | tr . ' ')
0a01d76f
MAL
203 while true; do
204 set x $local_ver1
205 local_first=${2-0}
c44a33e2
SG
206 # 'shift 2' if $2 is set, or 'shift' if $2 is not set
207 shift ${2:+2}
0a01d76f
MAL
208 local_ver1=$*
209 set x $local_ver2
210 # the second argument finished, the first must be greater or equal
211 test $# = 1 && return 0
212 test $local_first -lt $2 && return 1
213 test $local_first -gt $2 && return 0
c44a33e2 214 shift ${2:+2}
0a01d76f
MAL
215 local_ver2=$*
216 done
217}
218
5b808275
LV
219have_backend () {
220 echo "$trace_backends" | grep "$1" >/dev/null
221}
222
3b6b7550
PB
223glob() {
224 eval test -z '"${1#'"$2"'}"'
225}
226
e9a3591f
CB
227ld_has() {
228 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
229}
230
4ace32e2
AO
231if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
232then
233 error_exit "main directory cannot contain spaces nor colons"
234fi
235
14211825 236# default parameters
2ff6b91e 237cpu=""
a31a8642 238iasl="iasl"
1e43adfc 239interp_prefix="/usr/gnemul/qemu-%M"
43ce4dfe 240static="no"
3812c0c4 241cross_compile="no"
7d13299d 242cross_prefix=""
0c58ac1c 243audio_drv_list=""
b64ec4e4
FZ
244block_drv_rw_whitelist=""
245block_drv_ro_whitelist=""
e49d021e 246host_cc="cc"
d5631638 247audio_win_int=""
957f1f99 248libs_qga=""
5bc62e01 249debug_info="yes"
cdad781d 250lto="false"
63678e17 251stack_protector=""
1e4f6065 252safe_stack=""
afc3a8f9 253use_containers="yes"
f2385398 254gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
ac0df51d 255
92712822
DB
256if test -e "$source_path/.git"
257then
7d7dbf9d 258 git_submodules_action="update"
92712822 259else
7d7dbf9d 260 git_submodules_action="ignore"
92712822 261fi
2d652f24
PB
262
263git_submodules="ui/keycodemapdb"
cc84d63a 264git="git"
ac0df51d 265
afb63ebd
SW
266# Don't accept a target_list environment variable.
267unset target_list
447e133f 268unset target_list_exclude
377529c0
PB
269
270# Default value for a variable defining feature "foo".
271# * foo="no" feature will only be used if --enable-foo arg is given
272# * foo="" feature will be searched for, and if found, will be used
273# unless --disable-foo is given
274# * foo="yes" this value will only be set by --enable-foo flag.
275# feature will searched for,
276# if not found, configure exits with error
277#
278# Always add --enable-foo and --disable-foo command line args.
279# Distributions want to ensure that several features are compiled in, and it
280# is impossible without a --enable-foo that exits if a feature is not found.
281
c87ea116
AB
282default_feature=""
283# parse CC options second
284for opt do
285 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
286 case "$opt" in
287 --without-default-features)
288 default_feature="no"
289 ;;
290 esac
291done
292
8c6d4ff4 293brlapi="auto"
f9cd86fe 294curl="auto"
5285e593
YL
295iconv="auto"
296curses="auto"
e3667660 297docs="auto"
fbb4121d 298fdt="auto"
58952137 299netmap="no"
35be72ba
PB
300sdl="auto"
301sdl_image="auto"
422a5fd0 302coreaudio="auto"
cece116c 303virtiofsd="auto"
69202b40 304virtfs="auto"
5c53015a 305libudev="auto"
6ec0e15d 306mpath="auto"
a0b93237 307vnc="enabled"
deb62371 308sparse="auto"
c87ea116 309vde="$default_feature"
a0b93237
PB
310vnc_sasl="auto"
311vnc_jpeg="auto"
312vnc_png="auto"
4113f4cf 313xkbcommon="auto"
c87ea116
AB
314xen="$default_feature"
315xen_ctrl_version="$default_feature"
1badb709 316xen_pci_passthrough="auto"
c87ea116 317linux_aio="$default_feature"
53c22b68 318linux_io_uring="auto"
727c8bb8 319cap_ng="auto"
f7f2d651 320attr="auto"
c87ea116 321xfs="$default_feature"
1badb709 322tcg="enabled"
c87ea116
AB
323membarrier="$default_feature"
324vhost_net="$default_feature"
325vhost_crypto="$default_feature"
326vhost_scsi="$default_feature"
327vhost_vsock="$default_feature"
d88618f7 328vhost_user="no"
e5e856c1 329vhost_user_blk_server="auto"
c87ea116 330vhost_user_fs="$default_feature"
46627f41 331bpf="auto"
3bd40ec7
PB
332kvm="auto"
333hax="auto"
334hvf="auto"
335whpx="auto"
74a414a1 336nvmm="auto"
c87ea116
AB
337rdma="$default_feature"
338pvrdma="$default_feature"
377529c0
PB
339gprof="no"
340debug_tcg="no"
377529c0 341debug="no"
247724cb 342sanitizers="no"
0aebab04 343tsan="no"
c87ea116 344fortify_source="$default_feature"
377529c0 345strip_opt="yes"
23a77b2d 346tcg_interpreter="false"
377529c0
PB
347bigendian="no"
348mingw32="no"
1d728c39 349gcov="no"
c7328271 350EXESUF=""
484e2cc7 351HOST_DSOSUF=".so"
17969268 352modules="no"
bd83c861 353module_upgrades="no"
377529c0 354prefix="/usr/local"
10ff82d1 355qemu_suffix="qemu"
4d34a86b 356slirp="auto"
377529c0
PB
357oss_lib=""
358bsd="no"
359linux="no"
360solaris="no"
361profiler="no"
b4e312e9 362cocoa="auto"
377529c0
PB
363softmmu="yes"
364linux_user="no"
377529c0 365bsd_user="no"
c8d5450b 366blobs="true"
377529c0 367pkgversion=""
40d6444e 368pie=""
3556c233 369qom_cast_debug="yes"
baf86d6b 370trace_backends="log"
377529c0 371trace_file="trace"
c87ea116 372spice="$default_feature"
58d3f3ff 373spice_protocol="auto"
fabd1e93 374rbd="auto"
5f364c57 375smartcard="auto"
0a40bcb7 376u2f="auto"
90540f32 377libusb="auto"
18f31e60 378usb_redir="auto"
c87ea116 379opengl="$default_feature"
5dd89908 380cpuid_h="no"
c87ea116 381avx2_opt="$default_feature"
8b18cdbf 382capstone="auto"
0c32a0ae 383lzo="auto"
241611ea 384snappy="auto"
29ba6116 385bzip2="auto"
ecea3696 386lzfse="auto"
b1def33d 387zstd="auto"
c87ea116 388guest_agent="$default_feature"
d9840e25 389guest_agent_with_vss="no"
50cbebb9 390guest_agent_ntddscsi="no"
b846ab7c 391guest_agent_msi="auto"
c87ea116 392vss_win32_sdk="$default_feature"
d9840e25 393win_sdk="no"
c87ea116 394want_tools="$default_feature"
9db405a3 395libiscsi="auto"
30045c05 396libnfs="auto"
519175a2 397coroutine=""
c87ea116 398coroutine_pool="$default_feature"
7d992e4d 399debug_stack_usage="no"
f0d92b56 400crypto_afalg="no"
9e62ba48
DB
401cfi="false"
402cfi_debug="false"
90835c2b 403seccomp="auto"
08821ca2 404glusterfs="auto"
1b695471 405gtk="auto"
a1c5e949 406tls_priority="NORMAL"
57612511
PB
407gnutls="auto"
408nettle="auto"
409gcrypt="auto"
05e391ae 410auth_pam="auto"
c23d7b4e 411vte="auto"
587d59d6 412virglrenderer="auto"
c87ea116
AB
413tpm="$default_feature"
414libssh="$default_feature"
415live_block_migration=${default_feature:-yes}
416numa="$default_feature"
2847b469 417tcmalloc="no"
7b01cb97 418jemalloc="no"
c87ea116
AB
419replication=${default_feature:-yes}
420bochs=${default_feature:-yes}
421cloop=${default_feature:-yes}
422dmg=${default_feature:-yes}
423qcow1=${default_feature:-yes}
424vdi=${default_feature:-yes}
425vvfat=${default_feature:-yes}
426qed=${default_feature:-yes}
427parallels=${default_feature:-yes}
c5b36c25 428libxml2="auto"
ba59fb77 429debug_mutex="no"
e36e8c70 430libpmem="auto"
7bc3ca7f 431default_devices="true"
40e8c6f4 432plugins="no"
adc28027 433fuzzing="no"
b767d257 434rng_none="no"
c87ea116 435secret_keyring="$default_feature"
83ef1682 436libdaxctl="auto"
a5665051 437meson=""
48328880 438ninja=""
a5665051 439skip_meson=no
0e8e77d4 440gettext="auto"
a484a719 441fuse="auto"
df4ea709 442fuse_lseek="auto"
106ad1f9 443multiprocess="auto"
b8e0c493 444slirp_smbd="$default_feature"
377529c0 445
aa087962 446malloc_trim="auto"
20cf7b8e 447gio="$default_feature"
898be3e0 448
c87ea116 449# parse CC options second
ac0df51d 450for opt do
89138857 451 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
ac0df51d
AL
452 case "$opt" in
453 --cross-prefix=*) cross_prefix="$optarg"
3812c0c4 454 cross_compile="yes"
ac0df51d 455 ;;
3d8df640 456 --cc=*) CC="$optarg"
ac0df51d 457 ;;
83f73fce
TS
458 --cxx=*) CXX="$optarg"
459 ;;
2ff6b91e
JQ
460 --cpu=*) cpu="$optarg"
461 ;;
de385287 462 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
db5adeaa 463 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
e2a2ed06 464 ;;
11cde1c8 465 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
11cde1c8 466 ;;
db5adeaa 467 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
f9943cd5 468 EXTRA_LDFLAGS="$optarg"
e2a2ed06 469 ;;
5bc62e01
GH
470 --enable-debug-info) debug_info="yes"
471 ;;
472 --disable-debug-info) debug_info="no"
473 ;;
d75402b5
AB
474 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
475 ;;
d422b2bc
AB
476 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
477 eval "cross_cc_cflags_${cc_arch}=\$optarg"
2038f8c8 478 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
d422b2bc 479 ;;
d75402b5 480 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
2038f8c8 481 cc_archs="$cc_archs $cc_arch"
d75402b5 482 eval "cross_cc_${cc_arch}=\$optarg"
2038f8c8 483 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
d75402b5 484 ;;
ac0df51d
AL
485 esac
486done
ac0df51d
AL
487# OS specific
488# Using uname is really, really broken. Once we have the right set of checks
93148aa5 489# we can eliminate its usage altogether.
ac0df51d 490
e49d021e
PM
491# Preferred compiler:
492# ${CC} (if set)
493# ${cross_prefix}gcc (if cross-prefix specified)
494# system compiler
495if test -z "${CC}${cross_prefix}"; then
496 cc="$host_cc"
497else
498 cc="${CC-${cross_prefix}gcc}"
499fi
500
83f73fce
TS
501if test -z "${CXX}${cross_prefix}"; then
502 cxx="c++"
503else
504 cxx="${CXX-${cross_prefix}g++}"
505fi
506
b3198cc2 507ar="${AR-${cross_prefix}ar}"
cdbd727c 508as="${AS-${cross_prefix}as}"
5f6f0e27 509ccas="${CCAS-$cc}"
3dd46c78 510cpp="${CPP-$cc -E}"
b3198cc2
SY
511objcopy="${OBJCOPY-${cross_prefix}objcopy}"
512ld="${LD-${cross_prefix}ld}"
9f81aeb5 513ranlib="${RANLIB-${cross_prefix}ranlib}"
4852ee95 514nm="${NM-${cross_prefix}nm}"
b3198cc2
SY
515strip="${STRIP-${cross_prefix}strip}"
516windres="${WINDRES-${cross_prefix}windres}"
17884d7b
ST
517pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
518query_pkg_config() {
519 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
520}
521pkg_config=query_pkg_config
47c03744 522sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
ac0df51d 523
be17dc90 524# default flags for all hosts
2d31515b
PM
525# We use -fwrapv to tell the compiler that we require a C dialect where
526# left shift of signed integers is well defined and has the expected
527# 2s-complement style results. (Both clang and gcc agree that it
528# provides these semantics.)
086d5f75
PB
529QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
530QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
c95e3080 531QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
be17dc90 532QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
5770e8af
PB
533
534# Flags that are needed during configure but later taken care of by Meson
8a9d3d56 535CONFIGURE_CFLAGS="-std=gnu11 -Wall"
5770e8af 536CONFIGURE_LDFLAGS=
086d5f75 537
be17dc90 538
ac0df51d
AL
539check_define() {
540cat > $TMPC <<EOF
541#if !defined($1)
fd786e1a 542#error $1 not defined
ac0df51d
AL
543#endif
544int main(void) { return 0; }
545EOF
52166aa0 546 compile_object
ac0df51d
AL
547}
548
307119e7
GH
549check_include() {
550cat > $TMPC <<EOF
551#include <$1>
552int main(void) { return 0; }
553EOF
554 compile_object
555}
556
93b25869
JS
557write_c_skeleton() {
558 cat > $TMPC <<EOF
559int main(void) { return 0; }
560EOF
561}
562
adc28027
AB
563write_c_fuzzer_skeleton() {
564 cat > $TMPC <<EOF
565#include <stdint.h>
566#include <sys/types.h>
567int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
568int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
569EOF
570}
571
bbea4050
PM
572if check_define __linux__ ; then
573 targetos="Linux"
574elif check_define _WIN32 ; then
575 targetos='MINGW32'
576elif check_define __OpenBSD__ ; then
577 targetos='OpenBSD'
578elif check_define __sun__ ; then
579 targetos='SunOS'
580elif check_define __HAIKU__ ; then
581 targetos='Haiku'
951fedfc
PM
582elif check_define __FreeBSD__ ; then
583 targetos='FreeBSD'
584elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
585 targetos='GNU/kFreeBSD'
586elif check_define __DragonFly__ ; then
587 targetos='DragonFly'
588elif check_define __NetBSD__; then
589 targetos='NetBSD'
590elif check_define __APPLE__; then
591 targetos='Darwin'
bbea4050 592else
951fedfc
PM
593 # This is a fatal error, but don't report it yet, because we
594 # might be going to just print the --help text, or it might
595 # be the result of a missing compiler.
596 targetos='bogus'
bbea4050
PM
597fi
598
599# Some host OSes need non-standard checks for which CPU to use.
600# Note that these checks are broken for cross-compilation: if you're
601# cross-compiling to one of these OSes then you'll need to specify
602# the correct CPU with the --cpu option.
603case $targetos in
604Darwin)
5869f8dd 605 HOST_DSOSUF=".dylib"
bbea4050
PM
606 ;;
607SunOS)
89138857 608 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
bbea4050
PM
609 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
610 cpu="x86_64"
611 fi
612esac
613
2ff6b91e
JQ
614if test ! -z "$cpu" ; then
615 # command line argument
616 :
617elif check_define __i386__ ; then
ac0df51d
AL
618 cpu="i386"
619elif check_define __x86_64__ ; then
c72b26ec
RH
620 if check_define __ILP32__ ; then
621 cpu="x32"
622 else
623 cpu="x86_64"
624 fi
3aa9bd6c 625elif check_define __sparc__ ; then
3aa9bd6c
BS
626 if check_define __arch64__ ; then
627 cpu="sparc64"
628 else
629 cpu="sparc"
630 fi
fdf7ed96 631elif check_define _ARCH_PPC ; then
632 if check_define _ARCH_PPC64 ; then
f8378acc
RH
633 if check_define _LITTLE_ENDIAN ; then
634 cpu="ppc64le"
635 else
636 cpu="ppc64"
637 fi
fdf7ed96 638 else
639 cpu="ppc"
640 fi
afa05235
AJ
641elif check_define __mips__ ; then
642 cpu="mips"
d66ed0ea
AJ
643elif check_define __s390__ ; then
644 if check_define __s390x__ ; then
645 cpu="s390x"
646 else
647 cpu="s390"
648 fi
c4f80543
AF
649elif check_define __riscv ; then
650 if check_define _LP64 ; then
651 cpu="riscv64"
652 else
653 cpu="riscv32"
654 fi
21d89f84
PM
655elif check_define __arm__ ; then
656 cpu="arm"
1f080313
CF
657elif check_define __aarch64__ ; then
658 cpu="aarch64"
ac0df51d 659else
89138857 660 cpu=$(uname -m)
ac0df51d
AL
661fi
662
359bc95d
PM
663ARCH=
664# Normalise host CPU name and set ARCH.
665# Note that this case should only have supported host CPUs, not guests.
7d13299d 666case "$cpu" in
ee35e968 667 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
898be3e0 668 ;;
f8378acc
RH
669 ppc64le)
670 ARCH="ppc64"
f8378acc 671 ;;
7d13299d 672 i386|i486|i586|i686|i86pc|BePC)
97a847bc 673 cpu="i386"
7d13299d 674 ;;
aaa5fa14
AJ
675 x86_64|amd64)
676 cpu="x86_64"
677 ;;
21d89f84
PM
678 armv*b|armv*l|arm)
679 cpu="arm"
7d13299d 680 ;;
1f080313
CF
681 aarch64)
682 cpu="aarch64"
683 ;;
afa05235
AJ
684 mips*)
685 cpu="mips"
686 ;;
3142255c 687 sparc|sun4[cdmuv])
ae228531
FB
688 cpu="sparc"
689 ;;
7d13299d 690 *)
359bc95d
PM
691 # This will result in either an error or falling back to TCI later
692 ARCH=unknown
7d13299d
FB
693 ;;
694esac
359bc95d
PM
695if test -z "$ARCH"; then
696 ARCH="$cpu"
697fi
e2d52ad3 698
7d13299d 699# OS specific
0dbfc675 700
7d13299d 701case $targetos in
67b915a5 702MINGW32*)
0dbfc675 703 mingw32="yes"
3cec7cc2 704 audio_possible_drivers="dsound sdl"
307119e7
GH
705 if check_include dsound.h; then
706 audio_drv_list="dsound"
707 else
708 audio_drv_list=""
709 fi
898be3e0 710 supported_os="yes"
fb648e9c 711 pie="no"
67b915a5 712;;
5c40d2bd 713GNU/kFreeBSD)
a167ba50 714 bsd="yes"
6a485418 715 audio_drv_list="oss try-sdl"
0bac1111 716 audio_possible_drivers="oss sdl pa"
5c40d2bd 717;;
7d3505c5 718FreeBSD)
0dbfc675 719 bsd="yes"
0db4a067 720 make="${MAKE-gmake}"
6a485418 721 audio_drv_list="oss try-sdl"
0bac1111 722 audio_possible_drivers="oss sdl pa"
f01576f1 723 # needed for kinfo_getvmmap(3) in libutil.h
58952137 724 netmap="" # enable netmap autodetect
7d3505c5 725;;
c5e97233 726DragonFly)
0dbfc675 727 bsd="yes"
0db4a067 728 make="${MAKE-gmake}"
6a485418 729 audio_drv_list="oss try-sdl"
0bac1111 730 audio_possible_drivers="oss sdl pa"
c5e97233 731;;
7d3505c5 732NetBSD)
0dbfc675 733 bsd="yes"
0db4a067 734 make="${MAKE-gmake}"
6a485418 735 audio_drv_list="oss try-sdl"
0bac1111 736 audio_possible_drivers="oss sdl"
0dbfc675 737 oss_lib="-lossaudio"
7d3505c5
FB
738;;
739OpenBSD)
0dbfc675 740 bsd="yes"
0db4a067 741 make="${MAKE-gmake}"
f92c7168 742 audio_drv_list="try-sdl"
0bac1111 743 audio_possible_drivers="sdl"
7d3505c5 744;;
83fb7adf 745Darwin)
0dbfc675
JQ
746 bsd="yes"
747 darwin="yes"
422a5fd0 748 audio_drv_list="try-coreaudio try-sdl"
14382605 749 audio_possible_drivers="coreaudio sdl"
a0b7cf6b
PM
750 # Disable attempts to use ObjectiveC features in os/object.h since they
751 # won't work when we're compiling with gcc as a C compiler.
752 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
83fb7adf 753;;
ec530c81 754SunOS)
0dbfc675 755 solaris="yes"
0db4a067 756 make="${MAKE-gmake}"
e2d8830e 757 smbd="${SMBD-/usr/sfw/sbin/smbd}"
0dbfc675 758 if test -f /usr/include/sys/soundcard.h ; then
6a485418 759 audio_drv_list="oss try-sdl"
0dbfc675
JQ
760 fi
761 audio_possible_drivers="oss sdl"
d741429a
BS
762# needed for CMSG_ macros in sys/socket.h
763 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
764# needed for TIOCWIN* defines in termios.h
765 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
86b2bd93 766;;
179cf400
AF
767Haiku)
768 haiku="yes"
cde99253 769 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE $QEMU_CFLAGS"
179cf400 770;;
898be3e0 771Linux)
7183834a 772 audio_drv_list="try-pa oss"
0bac1111 773 audio_possible_drivers="oss alsa sdl pa"
0dbfc675
JQ
774 linux="yes"
775 linux_user="yes"
c87ea116 776 vhost_user=${default_feature:-yes}
898be3e0 777;;
7d13299d
FB
778esac
779
7d3505c5 780if [ "$bsd" = "yes" ] ; then
b1a550a0 781 if [ "$darwin" != "yes" ] ; then
08de3949 782 bsd_user="yes"
83fb7adf 783 fi
7d3505c5
FB
784fi
785
0db4a067 786: ${make=${MAKE-make}}
b6daf4d3 787
faf44142
DB
788# We prefer python 3.x. A bare 'python' is traditionally
789# python 2.x, but some distros have it as python 3.x, so
ddf90699 790# we check that too
faf44142 791python=
0a01d76f 792explicit_python=no
ddf90699 793for binary in "${PYTHON-python3}" python
faf44142
DB
794do
795 if has "$binary"
796 then
95c5f2de 797 python=$(command -v "$binary")
faf44142
DB
798 break
799 fi
800done
903458c8 801
903458c8 802
39d87c8c
AB
803# Check for ancillary tools used in testing
804genisoimage=
3df437c7 805for binary in genisoimage mkisofs
39d87c8c
AB
806do
807 if has $binary
808 then
809 genisoimage=$(command -v "$binary")
810 break
811 fi
812done
813
3c4a4d0d
PM
814# Default objcc to clang if available, otherwise use CC
815if has clang; then
816 objcc=clang
817else
818 objcc="$cc"
819fi
820
3457a3f8 821if test "$mingw32" = "yes" ; then
3457a3f8 822 EXESUF=".exe"
484e2cc7 823 HOST_DSOSUF=".dll"
78e9d4ad 824 # MinGW needs -mthreads for TLS and macro _MT.
5770e8af 825 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
93b25869 826 write_c_skeleton;
d17f305a 827 prefix="/qemu"
77433a5f 828 qemu_suffix=""
105fad6b 829 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
3457a3f8
JQ
830fi
831
487fefdb 832werror=""
85aa5189 833
7d13299d 834for opt do
89138857 835 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
7d13299d 836 case "$opt" in
2efc3265
FB
837 --help|-h) show_help=yes
838 ;;
99123e13
MF
839 --version|-V) exec cat $source_path/VERSION
840 ;;
b1a550a0 841 --prefix=*) prefix="$optarg"
7d13299d 842 ;;
b1a550a0 843 --interp-prefix=*) interp_prefix="$optarg"
32ce6337 844 ;;
ac0df51d 845 --cross-prefix=*)
7d13299d 846 ;;
ac0df51d 847 --cc=*)
7d13299d 848 ;;
b1a550a0 849 --host-cc=*) host_cc="$optarg"
83469015 850 ;;
83f73fce
TS
851 --cxx=*)
852 ;;
e007dbec
MT
853 --iasl=*) iasl="$optarg"
854 ;;
3c4a4d0d
PM
855 --objcc=*) objcc="$optarg"
856 ;;
b1a550a0 857 --make=*) make="$optarg"
7d13299d 858 ;;
b6daf4d3 859 --install=*)
6a882643 860 ;;
0a01d76f 861 --python=*) python="$optarg" ; explicit_python=yes
c886edfb 862 ;;
2eb054c2
PM
863 --sphinx-build=*) sphinx_build="$optarg"
864 ;;
a5665051
PB
865 --skip-meson) skip_meson=yes
866 ;;
867 --meson=*) meson="$optarg"
868 ;;
48328880
PB
869 --ninja=*) ninja="$optarg"
870 ;;
e2d8830e
BS
871 --smbd=*) smbd="$optarg"
872 ;;
e2a2ed06 873 --extra-cflags=*)
7d13299d 874 ;;
11cde1c8
BD
875 --extra-cxxflags=*)
876 ;;
e2a2ed06 877 --extra-ldflags=*)
7d13299d 878 ;;
5bc62e01
GH
879 --enable-debug-info)
880 ;;
881 --disable-debug-info)
882 ;;
d75402b5
AB
883 --cross-cc-*)
884 ;;
17969268
FZ
885 --enable-modules)
886 modules="yes"
3aa88b31
SH
887 ;;
888 --disable-modules)
889 modules="no"
17969268 890 ;;
bd83c861
CE
891 --disable-module-upgrades) module_upgrades="no"
892 ;;
893 --enable-module-upgrades) module_upgrades="yes"
894 ;;
2ff6b91e 895 --cpu=*)
7d13299d 896 ;;
b1a550a0 897 --target-list=*) target_list="$optarg"
447e133f
AB
898 if test "$target_list_exclude"; then
899 error_exit "Can't mix --target-list with --target-list-exclude"
900 fi
901 ;;
902 --target-list-exclude=*) target_list_exclude="$optarg"
903 if test "$target_list"; then
904 error_exit "Can't mix --target-list-exclude with --target-list"
905 fi
de83cd02 906 ;;
5b808275
LV
907 --enable-trace-backends=*) trace_backends="$optarg"
908 ;;
909 # XXX: backwards compatibility
910 --enable-trace-backend=*) trace_backends="$optarg"
94a420b1 911 ;;
74242e0f 912 --with-trace-file=*) trace_file="$optarg"
9410b56c 913 ;;
7bc3ca7f 914 --with-default-devices) default_devices="true"
f3494749 915 ;;
7bc3ca7f 916 --without-default-devices) default_devices="false"
f3494749 917 ;;
d1d5e9ee
AB
918 --with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
919 ;;
920 --with-devices-*) device_arch=${opt#--with-devices-};
921 device_arch=${device_arch%%=*}
922 cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak
923 if test -f "$cf"; then
924 device_archs="$device_archs $device_arch"
925 eval "devices_${device_arch}=\$optarg"
926 else
927 error_exit "File $cf does not exist"
928 fi
929 ;;
c87ea116
AB
930 --without-default-features) # processed above
931 ;;
7d13299d
FB
932 --enable-gprof) gprof="yes"
933 ;;
1d728c39
BS
934 --enable-gcov) gcov="yes"
935 ;;
79427693
LM
936 --static)
937 static="yes"
17884d7b 938 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
43ce4dfe 939 ;;
0b24e75f
PB
940 --mandir=*) mandir="$optarg"
941 ;;
942 --bindir=*) bindir="$optarg"
943 ;;
3aa5d2be
AL
944 --libdir=*) libdir="$optarg"
945 ;;
8bf188aa
MT
946 --libexecdir=*) libexecdir="$optarg"
947 ;;
0f94d6da
AL
948 --includedir=*) includedir="$optarg"
949 ;;
528ae5b8 950 --datadir=*) datadir="$optarg"
0b24e75f 951 ;;
77433a5f 952 --with-suffix=*) qemu_suffix="$optarg"
023d3d67 953 ;;
c6502638 954 --docdir=*) docdir="$optarg"
0b24e75f 955 ;;
fe0038be
PB
956 --localedir=*) localedir="$optarg"
957 ;;
ca2fb938 958 --sysconfdir=*) sysconfdir="$optarg"
07381cc1 959 ;;
785c23ae
LC
960 --localstatedir=*) local_statedir="$optarg"
961 ;;
3d5eecab
GH
962 --firmwarepath=*) firmwarepath="$optarg"
963 ;;
181ce1d0
OH
964 --host=*|--build=*|\
965 --disable-dependency-tracking|\
785c23ae 966 --sbindir=*|--sharedstatedir=*|\
fe0038be 967 --oldincludedir=*|--datarootdir=*|--infodir=*|\
023ddd74
MF
968 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
969 # These switches are silently ignored, for compatibility with
970 # autoconf-generated configure scripts. This allows QEMU's
971 # configure to be used by RPM and similar macros that set
972 # lots of directory switches by default.
973 ;;
35be72ba 974 --disable-sdl) sdl="disabled"
97a847bc 975 ;;
35be72ba 976 --enable-sdl) sdl="enabled"
c4198157 977 ;;
35be72ba 978 --disable-sdl-image) sdl_image="disabled"
a442fe2f 979 ;;
35be72ba 980 --enable-sdl-image) sdl_image="enabled"
a442fe2f 981 ;;
3556c233
PB
982 --disable-qom-cast-debug) qom_cast_debug="no"
983 ;;
984 --enable-qom-cast-debug) qom_cast_debug="yes"
985 ;;
69202b40 986 --disable-virtfs) virtfs="disabled"
983eef5a 987 ;;
69202b40 988 --enable-virtfs) virtfs="enabled"
983eef5a 989 ;;
5c53015a
PB
990 --disable-libudev) libudev="disabled"
991 ;;
992 --enable-libudev) libudev="enabled"
993 ;;
cece116c
MT
994 --disable-virtiofsd) virtiofsd="disabled"
995 ;;
996 --enable-virtiofsd) virtiofsd="enabled"
997 ;;
6ec0e15d 998 --disable-mpath) mpath="disabled"
fe8fc5ae 999 ;;
6ec0e15d 1000 --enable-mpath) mpath="enabled"
fe8fc5ae 1001 ;;
a0b93237 1002 --disable-vnc) vnc="disabled"
821601ea 1003 ;;
a0b93237 1004 --enable-vnc) vnc="enabled"
821601ea 1005 ;;
0e8e77d4 1006 --disable-gettext) gettext="disabled"
e8f3bd71 1007 ;;
0e8e77d4 1008 --enable-gettext) gettext="enabled"
e8f3bd71 1009 ;;
2f6a1ab0
BS
1010 --oss-lib=*) oss_lib="$optarg"
1011 ;;
0c58ac1c 1012 --audio-drv-list=*) audio_drv_list="$optarg"
102a52e4 1013 ;;
89138857 1014 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
b64ec4e4 1015 ;;
89138857 1016 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
eb852011 1017 ;;
f8393946
AJ
1018 --enable-debug-tcg) debug_tcg="yes"
1019 ;;
1020 --disable-debug-tcg) debug_tcg="no"
1021 ;;
f3d08ee6
PB
1022 --enable-debug)
1023 # Enable debugging options that aren't excessively noisy
1024 debug_tcg="yes"
1fcc6d42 1025 debug_mutex="yes"
f3d08ee6
PB
1026 debug="yes"
1027 strip_opt="no"
b553a042 1028 fortify_source="no"
f3d08ee6 1029 ;;
247724cb
MAL
1030 --enable-sanitizers) sanitizers="yes"
1031 ;;
1032 --disable-sanitizers) sanitizers="no"
1033 ;;
0aebab04
LY
1034 --enable-tsan) tsan="yes"
1035 ;;
1036 --disable-tsan) tsan="no"
1037 ;;
deb62371 1038 --enable-sparse) sparse="enabled"
03b4fe7d 1039 ;;
deb62371 1040 --disable-sparse) sparse="disabled"
03b4fe7d 1041 ;;
1625af87
AL
1042 --disable-strip) strip_opt="no"
1043 ;;
a0b93237 1044 --disable-vnc-sasl) vnc_sasl="disabled"
2f9606b3 1045 ;;
a0b93237 1046 --enable-vnc-sasl) vnc_sasl="enabled"
ea784e3b 1047 ;;
a0b93237 1048 --disable-vnc-jpeg) vnc_jpeg="disabled"
2f6f5c7a 1049 ;;
a0b93237 1050 --enable-vnc-jpeg) vnc_jpeg="enabled"
2f6f5c7a 1051 ;;
a0b93237 1052 --disable-vnc-png) vnc_png="disabled"
efe556ad 1053 ;;
a0b93237 1054 --enable-vnc-png) vnc_png="enabled"
efe556ad 1055 ;;
4d34a86b 1056 --disable-slirp) slirp="disabled"
1d14ffa9 1057 ;;
fd6fc214
PB
1058 --enable-slirp) slirp="enabled"
1059 ;;
4d34a86b 1060 --enable-slirp=git) slirp="internal"
7c57bdd8 1061 ;;
675b9b53
MAL
1062 --enable-slirp=system) slirp="system"
1063 ;;
e0e6c8c0 1064 --disable-vde) vde="no"
8a16d273 1065 ;;
dfb278bd
JQ
1066 --enable-vde) vde="yes"
1067 ;;
58952137
VM
1068 --disable-netmap) netmap="no"
1069 ;;
1070 --enable-netmap) netmap="yes"
1071 ;;
1badb709 1072 --disable-xen) xen="disabled"
e37630ca 1073 ;;
1badb709 1074 --enable-xen) xen="enabled"
fc321b4b 1075 ;;
1badb709 1076 --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
eb6fda0f 1077 ;;
1badb709 1078 --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
eb6fda0f 1079 ;;
8c6d4ff4 1080 --disable-brlapi) brlapi="disabled"
2e4d9fb1 1081 ;;
8c6d4ff4 1082 --enable-brlapi) brlapi="enabled"
4ffcedb6 1083 ;;
1badb709 1084 --disable-kvm) kvm="disabled"
7ba1e619 1085 ;;
1badb709 1086 --enable-kvm) kvm="enabled"
b31a0277 1087 ;;
1badb709 1088 --disable-hax) hax="disabled"
180fb750 1089 ;;
1badb709 1090 --enable-hax) hax="enabled"
180fb750 1091 ;;
1badb709 1092 --disable-hvf) hvf="disabled"
c97d6d2c 1093 ;;
1badb709 1094 --enable-hvf) hvf="enabled"
c97d6d2c 1095 ;;
74a414a1
RZ
1096 --disable-nvmm) nvmm="disabled"
1097 ;;
1098 --enable-nvmm) nvmm="enabled"
1099 ;;
1badb709 1100 --disable-whpx) whpx="disabled"
d661d9a4 1101 ;;
1badb709 1102 --enable-whpx) whpx="enabled"
d661d9a4 1103 ;;
c6fbea47 1104 --disable-tcg-interpreter) tcg_interpreter="false"
9195b2c2 1105 ;;
c6fbea47 1106 --enable-tcg-interpreter) tcg_interpreter="true"
9195b2c2 1107 ;;
727c8bb8 1108 --disable-cap-ng) cap_ng="disabled"
47e98658 1109 ;;
727c8bb8 1110 --enable-cap-ng) cap_ng="enabled"
47e98658 1111 ;;
1badb709 1112 --disable-tcg) tcg="disabled"
d1a14257 1113 plugins="no"
b3f6ea7e 1114 ;;
1badb709 1115 --enable-tcg) tcg="enabled"
b3f6ea7e 1116 ;;
aa087962 1117 --disable-malloc-trim) malloc_trim="disabled"
5a22ab71 1118 ;;
aa087962 1119 --enable-malloc-trim) malloc_trim="enabled"
5a22ab71 1120 ;;
cd4ec0b4
GH
1121 --disable-spice) spice="no"
1122 ;;
58d3f3ff
GH
1123 --enable-spice)
1124 spice_protocol="yes"
1125 spice="yes"
1126 ;;
1127 --disable-spice-protocol)
1128 spice_protocol="no"
1129 spice="no"
1130 ;;
1131 --enable-spice-protocol) spice_protocol="yes"
cd4ec0b4 1132 ;;
9db405a3 1133 --disable-libiscsi) libiscsi="disabled"
c589b249 1134 ;;
9db405a3 1135 --enable-libiscsi) libiscsi="enabled"
c589b249 1136 ;;
30045c05 1137 --disable-libnfs) libnfs="disabled"
6542aa9c 1138 ;;
30045c05 1139 --enable-libnfs) libnfs="enabled"
6542aa9c 1140 ;;
05c2a3e7
FB
1141 --enable-profiler) profiler="yes"
1142 ;;
b4e312e9 1143 --disable-cocoa) cocoa="disabled"
14821030 1144 ;;
a23a6789 1145 --enable-cocoa) cocoa="enabled"
1d14ffa9 1146 ;;
cad25d69 1147 --disable-system) softmmu="no"
0a8e90f4 1148 ;;
cad25d69 1149 --enable-system) softmmu="yes"
0a8e90f4 1150 ;;
0953a80f
ZA
1151 --disable-user)
1152 linux_user="no" ;
1153 bsd_user="no" ;
0953a80f
ZA
1154 ;;
1155 --enable-user) ;;
831b7825 1156 --disable-linux-user) linux_user="no"
0a8e90f4 1157 ;;
831b7825
TS
1158 --enable-linux-user) linux_user="yes"
1159 ;;
84778508
BS
1160 --disable-bsd-user) bsd_user="no"
1161 ;;
1162 --enable-bsd-user) bsd_user="yes"
1163 ;;
40d6444e 1164 --enable-pie) pie="yes"
34005a00 1165 ;;
40d6444e 1166 --disable-pie) pie="no"
34005a00 1167 ;;
85aa5189
FB
1168 --enable-werror) werror="yes"
1169 ;;
1170 --disable-werror) werror="no"
1171 ;;
cdad781d
DB
1172 --enable-lto) lto="true"
1173 ;;
1174 --disable-lto) lto="false"
1175 ;;
63678e17
SN
1176 --enable-stack-protector) stack_protector="yes"
1177 ;;
1178 --disable-stack-protector) stack_protector="no"
1179 ;;
1e4f6065
DB
1180 --enable-safe-stack) safe_stack="yes"
1181 ;;
1182 --disable-safe-stack) safe_stack="no"
1183 ;;
9e62ba48
DB
1184 --enable-cfi)
1185 cfi="true";
1186 lto="true";
1187 ;;
1188 --disable-cfi) cfi="false"
1189 ;;
1190 --enable-cfi-debug) cfi_debug="true"
1191 ;;
1192 --disable-cfi-debug) cfi_debug="false"
1193 ;;
5285e593 1194 --disable-curses) curses="disabled"
4d3b6f6e 1195 ;;
5285e593 1196 --enable-curses) curses="enabled"
c584a6d0 1197 ;;
5285e593 1198 --disable-iconv) iconv="disabled"
e08bb301 1199 ;;
5285e593 1200 --enable-iconv) iconv="enabled"
e08bb301 1201 ;;
f9cd86fe 1202 --disable-curl) curl="disabled"
769ce76d 1203 ;;
f9cd86fe 1204 --enable-curl) curl="enabled"
788c8196 1205 ;;
fbb4121d 1206 --disable-fdt) fdt="disabled"
2df87df7 1207 ;;
fbb4121d
PB
1208 --enable-fdt) fdt="enabled"
1209 ;;
1210 --enable-fdt=git) fdt="internal"
1211 ;;
1212 --enable-fdt=system) fdt="system"
2df87df7 1213 ;;
5c6c3a6c
CH
1214 --disable-linux-aio) linux_aio="no"
1215 ;;
1216 --enable-linux-aio) linux_aio="yes"
1217 ;;
53c22b68 1218 --disable-linux-io-uring) linux_io_uring="disabled"
c10dd856 1219 ;;
53c22b68 1220 --enable-linux-io-uring) linux_io_uring="enabled"
c10dd856 1221 ;;
f7f2d651 1222 --disable-attr) attr="disabled"
758e8e38 1223 ;;
f7f2d651 1224 --enable-attr) attr="enabled"
758e8e38 1225 ;;
a40161cb
PB
1226 --disable-membarrier) membarrier="no"
1227 ;;
1228 --enable-membarrier) membarrier="yes"
1229 ;;
46627f41
AM
1230 --disable-bpf) bpf="disabled"
1231 ;;
1232 --enable-bpf) bpf="enabled"
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 ;;
fabd1e93 1282 --disable-rbd) rbd="disabled"
f27aaf4b 1283 ;;
fabd1e93 1284 --enable-rbd) rbd="enabled"
f27aaf4b 1285 ;;
8c84cf11
ST
1286 --disable-xfsctl) xfs="no"
1287 ;;
1288 --enable-xfsctl) xfs="yes"
1289 ;;
5f364c57 1290 --disable-smartcard) smartcard="disabled"
111a38b0 1291 ;;
5f364c57 1292 --enable-smartcard) smartcard="enabled"
111a38b0 1293 ;;
0a40bcb7
CB
1294 --disable-u2f) u2f="disabled"
1295 ;;
1296 --enable-u2f) u2f="enabled"
1297 ;;
90540f32 1298 --disable-libusb) libusb="disabled"
2b2325ff 1299 ;;
90540f32 1300 --enable-libusb) libusb="enabled"
2b2325ff 1301 ;;
18f31e60 1302 --disable-usb-redir) usb_redir="disabled"
69354a83 1303 ;;
18f31e60 1304 --enable-usb-redir) usb_redir="enabled"
69354a83 1305 ;;
1ffb3bbb 1306 --disable-zlib-test)
1ece9905 1307 ;;
0c32a0ae 1308 --disable-lzo) lzo="disabled"
b25c9dff 1309 ;;
0c32a0ae 1310 --enable-lzo) lzo="enabled"
607dacd0 1311 ;;
241611ea 1312 --disable-snappy) snappy="disabled"
b25c9dff 1313 ;;
241611ea 1314 --enable-snappy) snappy="enabled"
607dacd0 1315 ;;
29ba6116 1316 --disable-bzip2) bzip2="disabled"
6b383c08 1317 ;;
29ba6116 1318 --enable-bzip2) bzip2="enabled"
6b383c08 1319 ;;
ecea3696 1320 --enable-lzfse) lzfse="enabled"
83bc1f97 1321 ;;
ecea3696 1322 --disable-lzfse) lzfse="disabled"
83bc1f97 1323 ;;
b1def33d 1324 --disable-zstd) zstd="disabled"
3a678481 1325 ;;
b1def33d 1326 --enable-zstd) zstd="enabled"
3a678481 1327 ;;
d138cee9
MR
1328 --enable-guest-agent) guest_agent="yes"
1329 ;;
1330 --disable-guest-agent) guest_agent="no"
1331 ;;
b846ab7c 1332 --enable-guest-agent-msi) guest_agent_msi="enabled"
9dacf32d 1333 ;;
b846ab7c 1334 --disable-guest-agent-msi) guest_agent_msi="disabled"
9dacf32d 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 ;;
90835c2b 1352 --enable-seccomp) seccomp="enabled"
f794573e 1353 ;;
90835c2b 1354 --disable-seccomp) seccomp="disabled"
f794573e 1355 ;;
08821ca2 1356 --disable-glusterfs) glusterfs="disabled"
eb100396 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
08821ca2 1367 --enable-glusterfs) glusterfs="enabled"
eb100396 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 ;;
1b695471 1378 --disable-gtk) gtk="disabled"
a4ccabcf 1379 ;;
1b695471 1380 --enable-gtk) gtk="enabled"
a4ccabcf 1381 ;;
a1c5e949
DB
1382 --tls-priority=*) tls_priority="$optarg"
1383 ;;
57612511 1384 --disable-gnutls) gnutls="disabled"
ddbb0d09 1385 ;;
57612511 1386 --enable-gnutls) gnutls="enabled"
ddbb0d09 1387 ;;
57612511 1388 --disable-nettle) nettle="disabled"
91bfcdb0 1389 ;;
57612511 1390 --enable-nettle) nettle="enabled"
91bfcdb0 1391 ;;
57612511 1392 --disable-gcrypt) gcrypt="disabled"
91bfcdb0 1393 ;;
57612511 1394 --enable-gcrypt) gcrypt="enabled"
91bfcdb0 1395 ;;
05e391ae 1396 --disable-auth-pam) auth_pam="disabled"
8953caf3 1397 ;;
05e391ae 1398 --enable-auth-pam) auth_pam="enabled"
8953caf3 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 ;;
c23d7b4e 1408 --disable-vte) vte="disabled"
bbbf9bfb 1409 ;;
c23d7b4e 1410 --enable-vte) vte="enabled"
bbbf9bfb 1411 ;;
587d59d6 1412 --disable-virglrenderer) virglrenderer="disabled"
9d9e1521 1413 ;;
587d59d6 1414 --enable-virglrenderer) virglrenderer="enabled"
9d9e1521 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 ;;
c5b36c25 1432 --disable-libxml2) libxml2="disabled"
ed279a06 1433 ;;
c5b36c25 1434 --enable-libxml2) libxml2="enabled"
ed279a06 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 ;;
e6a74868
MAL
1480 --disable-vhost-user) vhost_user="no"
1481 ;;
299e6f19
PB
1482 --enable-vhost-user) vhost_user="yes"
1483 ;;
108a6481
CL
1484 --disable-vhost-vdpa) vhost_vdpa="no"
1485 ;;
1486 --enable-vhost-vdpa) vhost_vdpa="yes"
1487 ;;
299e6f19
PB
1488 --disable-vhost-kernel) vhost_kernel="no"
1489 ;;
1490 --enable-vhost-kernel) vhost_kernel="yes"
e6a74868 1491 ;;
8b18cdbf 1492 --disable-capstone) capstone="disabled"
8ca80760 1493 ;;
8b18cdbf 1494 --enable-capstone) capstone="enabled"
8ca80760 1495 ;;
8b18cdbf 1496 --enable-capstone=git) capstone="internal"
e219c499
RH
1497 ;;
1498 --enable-capstone=system) capstone="system"
1499 ;;
cc84d63a
DB
1500 --with-git=*) git="$optarg"
1501 ;;
7d7dbf9d
DS
1502 --enable-git-update)
1503 git_submodules_action="update"
1504 echo "--enable-git-update deprecated, use --with-git-submodules=update"
f62bbee5 1505 ;;
7d7dbf9d
DS
1506 --disable-git-update)
1507 git_submodules_action="validate"
1508 echo "--disable-git-update deprecated, use --with-git-submodules=validate"
1509 ;;
1510 --with-git-submodules=*)
1511 git_submodules_action="$optarg"
f62bbee5 1512 ;;
ba59fb77
PB
1513 --enable-debug-mutex) debug_mutex=yes
1514 ;;
1515 --disable-debug-mutex) debug_mutex=no
1516 ;;
5cd5d8a7 1517 --enable-libpmem) libpmem="enabled"
17824406 1518 ;;
5cd5d8a7 1519 --disable-libpmem) libpmem="disabled"
17824406 1520 ;;
4113f4cf 1521 --enable-xkbcommon) xkbcommon="enabled"
75411919 1522 ;;
4113f4cf 1523 --disable-xkbcommon) xkbcommon="disabled"
75411919 1524 ;;
40e8c6f4
AB
1525 --enable-plugins) plugins="yes"
1526 ;;
1527 --disable-plugins) plugins="no"
1528 ;;
afc3a8f9
AB
1529 --enable-containers) use_containers="yes"
1530 ;;
1531 --disable-containers) use_containers="no"
1532 ;;
adc28027
AB
1533 --enable-fuzzing) fuzzing=yes
1534 ;;
1535 --disable-fuzzing) fuzzing=no
1536 ;;
f48e590a
AB
1537 --gdb=*) gdb_bin="$optarg"
1538 ;;
b767d257
MMG
1539 --enable-rng-none) rng_none=yes
1540 ;;
1541 --disable-rng-none) rng_none=no
1542 ;;
54e7aac0
AK
1543 --enable-keyring) secret_keyring="yes"
1544 ;;
1545 --disable-keyring) secret_keyring="no"
1546 ;;
12033e16 1547 --enable-libdaxctl) libdaxctl="enabled"
21b2eca6 1548 ;;
12033e16 1549 --disable-libdaxctl) libdaxctl="disabled"
21b2eca6 1550 ;;
a484a719
HR
1551 --enable-fuse) fuse="enabled"
1552 ;;
1553 --disable-fuse) fuse="disabled"
1554 ;;
df4ea709
HR
1555 --enable-fuse-lseek) fuse_lseek="enabled"
1556 ;;
1557 --disable-fuse-lseek) fuse_lseek="disabled"
1558 ;;
106ad1f9 1559 --enable-multiprocess) multiprocess="enabled"
3090de69 1560 ;;
106ad1f9 1561 --disable-multiprocess) multiprocess="disabled"
3090de69 1562 ;;
20cf7b8e
DP
1563 --enable-gio) gio=yes
1564 ;;
1565 --disable-gio) gio=no
1566 ;;
b8e0c493
JD
1567 --enable-slirp-smbd) slirp_smbd=yes
1568 ;;
1569 --disable-slirp-smbd) slirp_smbd=no
1570 ;;
2d2ad6d0
FZ
1571 *)
1572 echo "ERROR: unknown option $opt"
1573 echo "Try '$0 --help' for more information"
1574 exit 1
7f1559c6 1575 ;;
7d13299d
FB
1576 esac
1577done
1578
d1a14257
AB
1579# test for any invalid configuration combinations
1580if test "$plugins" = "yes" -a "$tcg" = "disabled"; then
1581 error_exit "Can't enable plugins on non-TCG builds"
1582fi
1583
7d7dbf9d
DS
1584case $git_submodules_action in
1585 update|validate)
1586 if test ! -e "$source_path/.git"; then
1587 echo "ERROR: cannot $git_submodules_action git submodules without .git"
1588 exit 1
1589 fi
1590 ;;
1591 ignore)
b80fd281
PB
1592 if ! test -f "$source_path/ui/keycodemapdb/README"
1593 then
1594 echo
1595 echo "ERROR: missing GIT submodules"
1596 echo
1597 if test -e "$source_path/.git"; then
1598 echo "--with-git-submodules=ignore specified but submodules were not"
1599 echo "checked out. Please initialize and update submodules."
1600 else
1601 echo "This is not a GIT checkout but module content appears to"
1602 echo "be missing. Do not use 'git archive' or GitHub download links"
1603 echo "to acquire QEMU source archives. Non-GIT builds are only"
1604 echo "supported with source archives linked from:"
1605 echo
1606 echo " https://www.qemu.org/download/#source"
1607 echo
1608 echo "Developers working with GIT can use scripts/archive-source.sh"
1609 echo "if they need to create valid source archives."
1610 fi
1611 echo
1612 exit 1
1613 fi
7d7dbf9d
DS
1614 ;;
1615 *)
1616 echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
1617 exit 1
1618 ;;
1619esac
1620
22a87800
MAL
1621libdir="${libdir:-$prefix/lib}"
1622libexecdir="${libexecdir:-$prefix/libexec}"
1623includedir="${includedir:-$prefix/include}"
1624
1625if test "$mingw32" = "yes" ; then
15588a62 1626 bindir="${bindir:-$prefix}"
22a87800 1627else
22a87800 1628 bindir="${bindir:-$prefix/bin}"
22a87800 1629fi
15588a62
JW
1630mandir="${mandir:-$prefix/share/man}"
1631datadir="${datadir:-$prefix/share}"
1632docdir="${docdir:-$prefix/share/doc}"
1633sysconfdir="${sysconfdir:-$prefix/etc}"
1634local_statedir="${local_statedir:-$prefix/var}"
16bf7a33
PB
1635firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
1636localedir="${localedir:-$datadir/locale}"
22a87800 1637
40293e58 1638case "$cpu" in
e3608d66
RH
1639 ppc)
1640 CPU_CFLAGS="-m32"
db5adeaa 1641 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
e3608d66
RH
1642 ;;
1643 ppc64)
1644 CPU_CFLAGS="-m64"
db5adeaa 1645 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
e3608d66 1646 ;;
9b9c37c3 1647 sparc)
f1079bb8 1648 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
db5adeaa 1649 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
3142255c 1650 ;;
ed968ff1 1651 sparc64)
79f3b12f 1652 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
db5adeaa 1653 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
3142255c 1654 ;;
76d83bde 1655 s390)
061cdd81 1656 CPU_CFLAGS="-m31"
db5adeaa 1657 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
28d7cc49
RH
1658 ;;
1659 s390x)
061cdd81 1660 CPU_CFLAGS="-m64"
db5adeaa 1661 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
76d83bde 1662 ;;
40293e58 1663 i386)
79f3b12f 1664 CPU_CFLAGS="-m32"
db5adeaa 1665 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
40293e58
FB
1666 ;;
1667 x86_64)
7ebee43e
RH
1668 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1669 # If we truly care, we should simply detect this case at
1670 # runtime and generate the fallback to serial emulation.
1671 CPU_CFLAGS="-m64 -mcx16"
db5adeaa 1672 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
d2fbca94 1673 ;;
c72b26ec
RH
1674 x32)
1675 CPU_CFLAGS="-mx32"
db5adeaa 1676 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
c72b26ec 1677 ;;
30163d89 1678 # No special flags required for other host CPUs
3142255c
BS
1679esac
1680
b1aa4de1 1681eval "cross_cc_${cpu}=\$cc"
2038f8c8 1682cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
79f3b12f 1683QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
79f3b12f 1684
affc88cc
PM
1685# For user-mode emulation the host arch has to be one we explicitly
1686# support, even if we're using TCI.
1687if [ "$ARCH" = "unknown" ]; then
1688 bsd_user="no"
1689 linux_user="no"
1690fi
1691
60e0df25 1692default_target_list=""
43692239 1693deprecated_targets_list=ppc64abi32-linux-user
fdb75aef 1694deprecated_features=""
6e92f823
PM
1695mak_wilds=""
1696
1697if [ "$softmmu" = "yes" ]; then
812b31d3 1698 mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
60e0df25 1699fi
6e92f823 1700if [ "$linux_user" = "yes" ]; then
812b31d3 1701 mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
60e0df25 1702fi
6e92f823 1703if [ "$bsd_user" = "yes" ]; then
812b31d3 1704 mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
60e0df25
PM
1705fi
1706
3a5ae4a9
AB
1707# If the user doesn't explicitly specify a deprecated target we will
1708# skip it.
1709if test -z "$target_list"; then
1710 if test -z "$target_list_exclude"; then
1711 target_list_exclude="$deprecated_targets_list"
1712 else
1713 target_list_exclude="$target_list_exclude,$deprecated_targets_list"
1714 fi
2d838d9b
AB
1715fi
1716
2d838d9b
AB
1717for config in $mak_wilds; do
1718 target="$(basename "$config" .mak)"
98db9a06 1719 if echo "$target_list_exclude" | grep -vq "$target"; then
2d838d9b
AB
1720 default_target_list="${default_target_list} $target"
1721 fi
1722done
6e92f823 1723
c53eeaf7 1724# Enumerate public trace backends for --help output
64a6047d 1725trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
c53eeaf7 1726
af5db58e
PB
1727if test x"$show_help" = x"yes" ; then
1728cat << EOF
1729
1730Usage: configure [options]
1731Options: [defaults in brackets after descriptions]
1732
08fb77ed
SW
1733Standard options:
1734 --help print this message
1735 --prefix=PREFIX install in PREFIX [$prefix]
1736 --interp-prefix=PREFIX where to find shared libraries, etc.
1737 use %M for cpu name [$interp_prefix]
2deca810 1738 --target-list=LIST set target list (default: build all non-deprecated)
08fb77ed
SW
1739$(echo Available targets: $default_target_list | \
1740 fold -s -w 53 | sed -e 's/^/ /')
2deca810
AB
1741$(echo Deprecated targets: $deprecated_targets_list | \
1742 fold -s -w 53 | sed -e 's/^/ /')
447e133f 1743 --target-list-exclude=LIST exclude a set of targets from the default target-list
08fb77ed
SW
1744
1745Advanced options (experts only):
3812c0c4 1746 --cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
08fb77ed
SW
1747 --cc=CC use C compiler CC [$cc]
1748 --iasl=IASL use ACPI compiler IASL [$iasl]
1749 --host-cc=CC use C compiler CC [$host_cc] for code run at
1750 build time
1751 --cxx=CXX use C++ compiler CXX [$cxx]
1752 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1753 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
11cde1c8 1754 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
08fb77ed 1755 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
d75402b5 1756 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
d422b2bc 1757 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
08fb77ed 1758 --make=MAKE use specified make [$make]
08fb77ed 1759 --python=PYTHON use specified python [$python]
2eb054c2 1760 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
a5665051 1761 --meson=MESON use specified meson [$meson]
48328880 1762 --ninja=NINJA use specified ninja [$ninja]
08fb77ed 1763 --smbd=SMBD use specified smbd [$smbd]
db1b5f13 1764 --with-git=GIT use specified git [$git]
7d7dbf9d
DS
1765 --with-git-submodules=update update git submodules (default if .git dir exists)
1766 --with-git-submodules=validate fail if git submodules are not up to date
1767 --with-git-submodules=ignore do not update or check git submodules (default if no .git dir)
08fb77ed
SW
1768 --static enable static build [$static]
1769 --mandir=PATH install man pages in PATH
10ff82d1 1770 --datadir=PATH install firmware in PATH/$qemu_suffix
fe0038be 1771 --localedir=PATH install translation in PATH/$qemu_suffix
10ff82d1 1772 --docdir=PATH install documentation in PATH/$qemu_suffix
08fb77ed
SW
1773 --bindir=PATH install binaries in PATH
1774 --libdir=PATH install libraries in PATH
db1b5f13 1775 --libexecdir=PATH install helper binaries in PATH
10ff82d1 1776 --sysconfdir=PATH install config in PATH/$qemu_suffix
08fb77ed 1777 --localstatedir=PATH install local state in PATH (set at runtime on win32)
3d5eecab 1778 --firmwarepath=PATH search PATH for firmware files
13336606 1779 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
ca8c0909 1780 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
db1b5f13 1781 --with-pkgversion=VERS use specified string as sub-version of the package
c035c8d6
PB
1782 --without-default-features default all --enable-* options to "disabled"
1783 --without-default-devices do not include any device that is not needed to
1784 start the emulator (only use if you are including
d1d5e9ee
AB
1785 desired devices in configs/devices/)
1786 --with-devices-ARCH=NAME override default configs/devices
08fb77ed 1787 --enable-debug enable common debug build options
247724cb 1788 --enable-sanitizers enable default sanitizers
0aebab04 1789 --enable-tsan enable thread sanitizer
08fb77ed
SW
1790 --disable-strip disable stripping binaries
1791 --disable-werror disable compilation abort on warning
63678e17 1792 --disable-stack-protector disable compiler-provided stack protection
08fb77ed
SW
1793 --audio-drv-list=LIST set audio drivers list:
1794 Available drivers: $audio_possible_drivers
1795 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1796 --block-drv-rw-whitelist=L
1797 set block driver read-write whitelist
1798 (affects only QEMU, not qemu-img)
1799 --block-drv-ro-whitelist=L
1800 set block driver read-only whitelist
1801 (affects only QEMU, not qemu-img)
5b808275 1802 --enable-trace-backends=B Set trace backend
c53eeaf7 1803 Available backends: $trace_backend_list
08fb77ed
SW
1804 --with-trace-file=NAME Full PATH,NAME of file to store traces
1805 Default:trace-<pid>
c23f23b9 1806 --disable-slirp disable SLIRP userspace network connectivity
e9a16e38 1807 --enable-tcg-interpreter enable TCI (TCG with bytecode interpreter, experimental and slow)
5a22ab71 1808 --enable-malloc-trim enable libc malloc_trim() for memory optimization
c23f23b9
MT
1809 --oss-lib path to OSS library
1810 --cpu=CPU Build for host CPU [$cpu]
08fb77ed 1811 --with-coroutine=BACKEND coroutine backend. Supported options:
33c53c54 1812 ucontext, sigaltstack, windows
08fb77ed 1813 --enable-gcov enable test coverage analysis with gcov
c23f23b9
MT
1814 --disable-blobs disable installing provided firmware blobs
1815 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1816 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
a1c5e949 1817 --tls-priority default TLS protocol/cipher priority string
c12d66aa
LM
1818 --enable-gprof QEMU profiling with gprof
1819 --enable-profiler profiler support
c12d66aa
LM
1820 --enable-debug-stack-usage
1821 track the maximum stack usage of stacks created by qemu_alloc_stack
40e8c6f4
AB
1822 --enable-plugins
1823 enable plugins via shared library loading
afc3a8f9 1824 --disable-containers don't use containers for cross-building
f48e590a 1825 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
c23f23b9
MT
1826
1827Optional features, enabled with --enable-FEATURE and
c87ea116
AB
1828disabled with --disable-FEATURE, default is enabled if available
1829(unless built with --without-default-features):
c23f23b9
MT
1830
1831 system all system emulation targets
1832 user supported user emulation targets
1833 linux-user all linux usermode emulation targets
1834 bsd-user all BSD usermode emulation targets
c23f23b9
MT
1835 docs build documentation
1836 guest-agent build the QEMU Guest Agent
1837 guest-agent-msi build guest agent Windows MSI installation package
1838 pie Position Independent Executables
21e709aa 1839 modules modules support (non-Windows)
bd83c861 1840 module-upgrades try to load modules from alternate paths for upgrades
c23f23b9
MT
1841 debug-tcg TCG debugging (default is disabled)
1842 debug-info debugging information
cdad781d 1843 lto Enable Link-Time Optimization.
c23f23b9 1844 sparse sparse checker
1e4f6065
DB
1845 safe-stack SafeStack Stack Smash Protection. Depends on
1846 clang/llvm >= 3.7 and requires coroutine backend ucontext.
9e62ba48
DB
1847 cfi Enable Control-Flow Integrity for indirect function calls.
1848 In case of a cfi violation, QEMU is terminated with SIGILL
1849 Depends on lto and is incompatible with modules
1850 Automatically enables Link-Time Optimization (lto)
1851 cfi-debug In case of a cfi violation, a message containing the line that
1852 triggered the error is written to stderr. After the error,
1853 QEMU is still terminated with SIGILL
ddbb0d09 1854 gnutls GNUTLS cryptography support
91bfcdb0
DB
1855 nettle nettle cryptography support
1856 gcrypt libgcrypt cryptography support
8953caf3 1857 auth-pam PAM access control
c23f23b9 1858 sdl SDL UI
04c6e16f 1859 sdl-image SDL Image support for icons
c23f23b9 1860 gtk gtk UI
c23f23b9
MT
1861 vte vte support for the gtk UI
1862 curses curses UI
e08bb301 1863 iconv font glyph conversion support
c23f23b9 1864 vnc VNC UI support
c23f23b9
MT
1865 vnc-sasl SASL encryption for VNC server
1866 vnc-jpeg JPEG lossy compression for VNC server
1867 vnc-png PNG compression for VNC server
c23f23b9
MT
1868 cocoa Cocoa UI (Mac OS X only)
1869 virtfs VirtFS
cece116c 1870 virtiofsd build virtiofs daemon (virtiofsd)
5c53015a 1871 libudev Use libudev to enumerate host devices
fe8fc5ae 1872 mpath Multipath persistent reservation passthrough
c23f23b9 1873 xen xen backend driver support
70c292af 1874 xen-pci-passthrough PCI passthrough support for Xen
c23f23b9
MT
1875 brlapi BrlAPI (Braile)
1876 curl curl connectivity
a40161cb 1877 membarrier membarrier system call (for Linux 4.14+ or Windows)
c23f23b9 1878 fdt fdt device tree
c23f23b9 1879 kvm KVM acceleration support
b0cb0a66 1880 hax HAX acceleration support
c97d6d2c 1881 hvf Hypervisor.framework acceleration support
74a414a1 1882 nvmm NVMM acceleration support
d661d9a4 1883 whpx Windows Hypervisor Platform acceleration support
21ab34c9
MA
1884 rdma Enable RDMA-based migration
1885 pvrdma Enable PVRDMA support
c23f23b9
MT
1886 vde support for vde network
1887 netmap support for netmap network
1888 linux-aio Linux AIO support
c10dd856 1889 linux-io-uring Linux io_uring support
c23f23b9
MT
1890 cap-ng libcap-ng support
1891 attr attr and xattr support
299e6f19
PB
1892 vhost-net vhost-net kernel acceleration support
1893 vhost-vsock virtio sockets device support
1894 vhost-scsi vhost-scsi kernel target support
1895 vhost-crypto vhost-user-crypto backend support
1896 vhost-kernel vhost kernel backend support
1897 vhost-user vhost-user backend support
bc15e44c 1898 vhost-user-blk-server vhost-user-blk server support
108a6481 1899 vhost-vdpa vhost-vdpa kernel backend support
46627f41 1900 bpf BPF kernel support
c23f23b9 1901 spice spice
58d3f3ff 1902 spice-protocol spice-protocol
c23f23b9
MT
1903 rbd rados block device (rbd)
1904 libiscsi iscsi support
1905 libnfs nfs support
7b02f544 1906 smartcard smartcard support (libcacard)
0a40bcb7 1907 u2f U2F support (u2f-emu)
c23f23b9 1908 libusb libusb (for usb passthrough)
ed1701c6 1909 live-block-migration Block migration in the main migration stream
c23f23b9
MT
1910 usb-redir usb network redirection support
1911 lzo support of lzo compression library
1912 snappy support of snappy compression library
1913 bzip2 support of bzip2 compression library
1914 (for reading bzip2-compressed dmg images)
83bc1f97
JF
1915 lzfse support of lzfse compression library
1916 (for reading lzfse-compressed dmg images)
3a678481 1917 zstd support for zstd compression library
d298ac10 1918 (for migration compression and qcow2 cluster compression)
c23f23b9
MT
1919 seccomp seccomp support
1920 coroutine-pool coroutine freelist (better performance)
1921 glusterfs GlusterFS backend
c23f23b9 1922 tpm TPM support
b10d49d7 1923 libssh ssh block device support
c23f23b9 1924 numa libnuma support
ed279a06 1925 libxml2 for Parallels image format
c23f23b9 1926 tcmalloc tcmalloc support
7b01cb97 1927 jemalloc jemalloc support
86583a07 1928 avx2 AVX2 optimization support
6b8cd447 1929 avx512f AVX512F optimization support
a6b1d4c0 1930 replication replication support
c12d66aa
LM
1931 opengl opengl support
1932 virglrenderer virgl rendering support
1933 xfsctl xfsctl support
1934 qom-cast-debug cast debugging support
8de73fa8 1935 tools build qemu-io, qemu-nbd and qemu-img tools
2f740136
JC
1936 bochs bochs image format support
1937 cloop cloop image format support
1938 dmg dmg image format support
1939 qcow1 qcow v1 image format support
1940 vdi vdi image format support
1941 vvfat vvfat image format support
1942 qed qed image format support
1943 parallels parallels image format support
f0d92b56 1944 crypto-afalg Linux AF_ALG crypto backend driver
8ca80760 1945 capstone capstone disassembler support
ba59fb77 1946 debug-mutex mutex debugging support
17824406 1947 libpmem libpmem support
75411919 1948 xkbcommon xkbcommon support
b767d257 1949 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
21b2eca6 1950 libdaxctl libdaxctl support
a484a719 1951 fuse FUSE block device export
df4ea709 1952 fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports
106ad1f9 1953 multiprocess Out of process device emulation support
20cf7b8e 1954 gio libgio support
b8e0c493 1955 slirp-smbd use smbd (at path --smbd=*) in slirp networking
08fb77ed
SW
1956
1957NOTE: The object files are built at the place where configure is launched
af5db58e 1958EOF
2d2ad6d0 1959exit 0
af5db58e
PB
1960fi
1961
9c790242 1962# Remove old dependency files to make sure that they get properly regenerated
bb768f71 1963rm -f */config-devices.mak.d
9c790242 1964
faf44142
DB
1965if test -z "$python"
1966then
1967 error_exit "Python not found. Use --python=/path/to/python"
c53eeaf7 1968fi
8e2c76bd
RB
1969if ! has "$make"
1970then
1971 error_exit "GNU make ($make) not found"
1972fi
c53eeaf7
SH
1973
1974# Note that if the Python conditional here evaluates True we will exit
1975# with status 1 which is a shell 'false' value.
1b11f28d
TH
1976if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1977 error_exit "Cannot use '$python', Python >= 3.6 is required." \
c53eeaf7
SH
1978 "Use --python=/path/to/python to specify a supported Python."
1979fi
1980
755ee70f 1981# Preserve python version since some functionality is dependent on it
406ab2f3 1982python_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 1983
c53eeaf7
SH
1984# Suppress writing compiled files
1985python="$python -B"
1986
0a01d76f 1987if test -z "$meson"; then
6ebd89cf 1988 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then
0a01d76f 1989 meson=meson
7d7dbf9d 1990 elif test $git_submodules_action != 'ignore' ; then
0a01d76f
MAL
1991 meson=git
1992 elif test -e "${source_path}/meson/meson.py" ; then
1993 meson=internal
1994 else
1995 if test "$explicit_python" = yes; then
1996 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
1997 else
1998 error_exit "Meson not found. Use --meson=/path/to/meson"
1999 fi
2000 fi
2001else
2002 # Meson uses its own Python interpreter to invoke other Python scripts,
2003 # but the user wants to use the one they specified with --python.
2004 #
2005 # We do not want to override the distro Python interpreter (and sometimes
2006 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
2007 # just require --meson=git|internal together with --python.
2008 if test "$explicit_python" = yes; then
2009 case "$meson" in
2010 git | internal) ;;
2011 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
2012 esac
2013 fi
a5665051 2014fi
a5665051 2015
0a01d76f
MAL
2016if test "$meson" = git; then
2017 git_submodules="${git_submodules} meson"
a5665051 2018fi
0a01d76f
MAL
2019
2020case "$meson" in
2021 git | internal)
0a01d76f
MAL
2022 meson="$python ${source_path}/meson/meson.py"
2023 ;;
84ec0c24 2024 *) meson=$(command -v "$meson") ;;
0a01d76f
MAL
2025esac
2026
09e93326 2027# Probe for ninja
48328880
PB
2028
2029if test -z "$ninja"; then
2030 for c in ninja ninja-build samu; do
2031 if has $c; then
2032 ninja=$(command -v "$c")
2033 break
2034 fi
2035 done
09e93326
PB
2036 if test -z "$ninja"; then
2037 error_exit "Cannot find Ninja"
2038 fi
48328880 2039fi
a5665051 2040
9aae6e54
DHB
2041# Check that the C compiler works. Doing this here before testing
2042# the host CPU ensures that we had a valid CC to autodetect the
2043# $cpu var (and we should bail right here if that's not the case).
2044# It also allows the help message to be printed without a CC.
2045write_c_skeleton;
2046if compile_object ; then
2047 : C compiler works ok
2048else
2049 error_exit "\"$cc\" either does not exist or does not work"
2050fi
2051if ! compile_prog ; then
2052 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
2053fi
2054
9c83ffd8
PM
2055# Consult white-list to determine whether to enable werror
2056# by default. Only enable by default for git builds
9c83ffd8 2057if test -z "$werror" ; then
7d7dbf9d 2058 if test "$git_submodules_action" != "ignore" && \
e633a5c6 2059 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
9c83ffd8
PM
2060 werror="yes"
2061 else
2062 werror="no"
2063 fi
2064fi
2065
975ff037 2066if test "$targetos" = "bogus"; then
fb59dabd
PM
2067 # Now that we know that we're not printing the help and that
2068 # the compiler works (so the results of the check_defines we used
2069 # to identify the OS are reliable), if we didn't recognize the
2070 # host OS we should stop now.
951fedfc 2071 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
fb59dabd
PM
2072fi
2073
efc6c070
TH
2074# Check whether the compiler matches our minimum requirements:
2075cat > $TMPC << EOF
2076#if defined(__clang_major__) && defined(__clang_minor__)
2077# ifdef __apple_build_version__
2a85a08c
DB
2078# if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0)
2079# error You need at least XCode Clang v10.0 to compile QEMU
efc6c070
TH
2080# endif
2081# else
2a85a08c
DB
2082# if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0)
2083# error You need at least Clang v6.0 to compile QEMU
efc6c070
TH
2084# endif
2085# endif
2086#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
56208a0d
DB
2087# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 5)
2088# error You need at least GCC v7.5.0 to compile QEMU
efc6c070
TH
2089# endif
2090#else
2091# error You either need GCC or Clang to compiler QEMU
2092#endif
2093int main (void) { return 0; }
2094EOF
2095if ! compile_prog "" "" ; then
2a85a08c 2096 error_exit "You need at least GCC v7.5 or Clang v6.0 (or XCode Clang v10.0)"
efc6c070
TH
2097fi
2098
00849b92
RH
2099# Accumulate -Wfoo and -Wno-bar separately.
2100# We will list all of the enable flags first, and the disable flags second.
2101# Note that we do not add -Werror, because that would enable it for all
2102# configure tests. If a configure test failed due to -Werror this would
2103# just silently disable some features, so it's too error prone.
2104
2105warn_flags=
2106add_to warn_flags -Wold-style-declaration
2107add_to warn_flags -Wold-style-definition
2108add_to warn_flags -Wtype-limits
2109add_to warn_flags -Wformat-security
2110add_to warn_flags -Wformat-y2k
2111add_to warn_flags -Winit-self
2112add_to warn_flags -Wignored-qualifiers
2113add_to warn_flags -Wempty-body
2114add_to warn_flags -Wnested-externs
2115add_to warn_flags -Wendif-labels
2116add_to warn_flags -Wexpansion-to-defined
0a2ebce9 2117add_to warn_flags -Wimplicit-fallthrough=2
00849b92
RH
2118
2119nowarn_flags=
2120add_to nowarn_flags -Wno-initializer-overrides
2121add_to nowarn_flags -Wno-missing-include-dirs
2122add_to nowarn_flags -Wno-shift-negative-value
2123add_to nowarn_flags -Wno-string-plus-int
2124add_to nowarn_flags -Wno-typedef-redefinition
aabab967 2125add_to nowarn_flags -Wno-tautological-type-limit-compare
bac8d222 2126add_to nowarn_flags -Wno-psabi
00849b92
RH
2127
2128gcc_flags="$warn_flags $nowarn_flags"
93b25869
JS
2129
2130cc_has_warning_flag() {
2131 write_c_skeleton;
2132
a1d29d6c
PM
2133 # Use the positive sense of the flag when testing for -Wno-wombat
2134 # support (gcc will happily accept the -Wno- form of unknown
2135 # warning options).
93b25869
JS
2136 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2137 compile_prog "-Werror $optflag" ""
2138}
2139
2140for flag in $gcc_flags; do
2141 if cc_has_warning_flag $flag ; then
2142 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
8d05095c
PB
2143 fi
2144done
2145
3b463a3f 2146if test "$stack_protector" != "no"; then
fccd35a0
RR
2147 cat > $TMPC << EOF
2148int main(int argc, char *argv[])
2149{
2150 char arr[64], *p = arr, *c = argv[0];
2151 while (*c) {
2152 *p++ = *c++;
2153 }
2154 return 0;
2155}
2156EOF
63678e17 2157 gcc_flags="-fstack-protector-strong -fstack-protector-all"
3b463a3f 2158 sp_on=0
63678e17 2159 for flag in $gcc_flags; do
590e5dd9
PM
2160 # We need to check both a compile and a link, since some compiler
2161 # setups fail only on a .c->.o compile and some only at link time
086d5f75 2162 if compile_object "-Werror $flag" &&
590e5dd9 2163 compile_prog "-Werror $flag" ""; then
63678e17 2164 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
db5adeaa 2165 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3b463a3f 2166 sp_on=1
63678e17
SN
2167 break
2168 fi
2169 done
3b463a3f
MR
2170 if test "$stack_protector" = yes; then
2171 if test $sp_on = 0; then
2172 error_exit "Stack protector not supported"
2173 fi
2174 fi
37746c5e
MAL
2175fi
2176
20bc94a2
PB
2177# Disable -Wmissing-braces on older compilers that warn even for
2178# the "universal" C zero initializer {0}.
2179cat > $TMPC << EOF
2180struct {
2181 int a[2];
2182} x = {0};
2183EOF
2184if compile_object "-Werror" "" ; then
2185 :
2186else
2187 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2188fi
2189
21e709aa
MAL
2190# Our module code doesn't support Windows
2191if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2192 error_exit "Modules are not available for Windows"
2193fi
2194
bd83c861
CE
2195# module_upgrades is only reasonable if modules are enabled
2196if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2197 error_exit "Can't enable module-upgrades as Modules are not enabled"
2198fi
2199
d376e9de 2200# Static linking is not possible with modules or PIE
40d6444e 2201if test "$static" = "yes" ; then
aa0d1f44
PB
2202 if test "$modules" = "yes" ; then
2203 error_exit "static and modules are mutually incompatible"
2204 fi
40d6444e
AK
2205fi
2206
768b7855
EC
2207# Unconditional check for compiler __thread support
2208 cat > $TMPC << EOF
2209static __thread int tls_var;
2210int main(void) { return tls_var; }
2211EOF
2212
2213if ! compile_prog "-Werror" "" ; then
2214 error_exit "Your compiler does not support the __thread specifier for " \
2215 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2216fi
2217
b2634124 2218cat > $TMPC << EOF
21d4a791
AK
2219
2220#ifdef __linux__
2221# define THREAD __thread
2222#else
2223# define THREAD
2224#endif
21d4a791 2225static THREAD int tls_var;
21d4a791 2226int main(void) { return tls_var; }
40d6444e 2227EOF
412aeacd 2228
b2634124
RH
2229# Check we support --no-pie first; we will need this for building ROMs.
2230if compile_prog "-Werror -fno-pie" "-no-pie"; then
2231 CFLAGS_NOPIE="-fno-pie"
b2634124
RH
2232fi
2233
12781462 2234if test "$static" = "yes"; then
eca7a8e6 2235 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
5770e8af 2236 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
12781462
RH
2237 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2238 pie="yes"
2239 elif test "$pie" = "yes"; then
2240 error_exit "-static-pie not available due to missing toolchain support"
2241 else
2242 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2243 pie="no"
2244 fi
2245elif test "$pie" = "no"; then
5770e8af 2246 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
eca7a8e6 2247elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
5770e8af
PB
2248 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2249 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
2c674109
RH
2250 pie="yes"
2251elif test "$pie" = "yes"; then
2252 error_exit "PIE not available due to missing toolchain support"
2253else
2254 echo "Disabling PIE due to missing toolchain support"
2255 pie="no"
40d6444e
AK
2256fi
2257
e6cbd751
RH
2258# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2259# The combination is known as "full relro", because .got.plt is read-only too.
2260if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2261 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2262fi
2263
09dada40
PB
2264##########################################
2265# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2266# use i686 as default anyway, but for those that don't, an explicit
2267# specification is necessary
2268
2269if test "$cpu" = "i386"; then
2270 cat > $TMPC << EOF
2271static int sfaa(int *ptr)
2272{
2273 return __sync_fetch_and_and(ptr, 0);
2274}
2275
2276int main(void)
2277{
2278 int val = 42;
1405b629 2279 val = __sync_val_compare_and_swap(&val, 0, 1);
09dada40
PB
2280 sfaa(&val);
2281 return val;
2282}
2283EOF
2284 if ! compile_prog "" "" ; then
2285 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2286 fi
2287fi
2288
2289#########################################
ec530c81 2290# Solaris specific configure tool chain decisions
09dada40 2291
ec530c81 2292if test "$solaris" = "yes" ; then
6792aa11
LM
2293 if has ar; then
2294 :
2295 else
ec530c81 2296 if test -f /usr/ccs/bin/ar ; then
76ad07a4
PM
2297 error_exit "No path includes ar" \
2298 "Add /usr/ccs/bin to your path and rerun configure"
ec530c81 2299 fi
76ad07a4 2300 error_exit "No path includes ar"
ec530c81 2301 fi
5fafdf24 2302fi
ec530c81 2303
56267b62
PMD
2304if test "$tcg" = "enabled"; then
2305 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
2306 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
2307fi
2308
afb63ebd 2309if test -z "${target_list+xxx}" ; then
fdb75aef 2310 default_targets=yes
d880a3ba 2311 for target in $default_target_list; do
fdb75aef 2312 target_list="$target_list $target"
d880a3ba
PB
2313 done
2314 target_list="${target_list# }"
121afa9e 2315else
fdb75aef 2316 default_targets=no
89138857 2317 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
d880a3ba
PB
2318 for target in $target_list; do
2319 # Check that we recognised the target name; this allows a more
2320 # friendly error message than if we let it fall through.
2321 case " $default_target_list " in
2322 *" $target "*)
2323 ;;
2324 *)
2325 error_exit "Unknown target name '$target'"
2326 ;;
2327 esac
d880a3ba 2328 done
121afa9e 2329fi
25b48338 2330
fdb75aef
PB
2331for target in $target_list; do
2332 # if a deprecated target is enabled we note it here
2333 if echo "$deprecated_targets_list" | grep -q "$target"; then
2334 add_to deprecated_features $target
2335 fi
2336done
2337
f55fe278
PB
2338# see if system emulation was really requested
2339case " $target_list " in
2340 *"-softmmu "*) softmmu=yes
2341 ;;
2342 *) softmmu=no
2343 ;;
2344esac
5327cf48 2345
249247c9
JQ
2346feature_not_found() {
2347 feature=$1
21684af0 2348 remedy=$2
249247c9 2349
76ad07a4 2350 error_exit "User requested feature $feature" \
21684af0
SS
2351 "configure was not able to find it." \
2352 "$remedy"
249247c9
JQ
2353}
2354
7d13299d
FB
2355# ---
2356# big/little endian test
2357cat > $TMPC << EOF
61cc919f
MF
2358short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2359short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2360extern int foo(short *, short *);
2361int main(int argc, char *argv[]) {
2362 return foo(big_endian, little_endian);
7d13299d
FB
2363}
2364EOF
2365
61cc919f 2366if compile_object ; then
12f15c91 2367 if strings -a $TMPO | grep -q BiGeNdIaN ; then
61cc919f 2368 bigendian="yes"
12f15c91 2369 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
61cc919f
MF
2370 bigendian="no"
2371 else
2372 echo big/little test failed
21d89f84 2373 fi
61cc919f
MF
2374else
2375 echo big/little test failed
7d13299d
FB
2376fi
2377
e10ee3f5
PMD
2378##########################################
2379# system tools
2380if test -z "$want_tools"; then
2381 if test "$softmmu" = "no"; then
2382 want_tools=no
2383 else
2384 want_tools=yes
2385 fi
2386fi
2387
90520ee4
PMD
2388##########################################
2389# Disable features only meaningful for system-mode emulation
2390if test "$softmmu" = "no"; then
2391 audio_drv_list=""
2392fi
2393
015a33bd
GA
2394##########################################
2395# L2TPV3 probe
2396
2397cat > $TMPC <<EOF
2398#include <sys/socket.h>
bff6cb72 2399#include <linux/ip.h>
015a33bd
GA
2400int main(void) { return sizeof(struct mmsghdr); }
2401EOF
2402if compile_prog "" "" ; then
2403 l2tpv3=yes
2404else
2405 l2tpv3=no
2406fi
2407
195588cc
DC
2408cat > $TMPC <<EOF
2409#include <sys/mman.h>
2410int main(int argc, char *argv[]) {
2411 return mlockall(MCL_FUTURE);
2412}
2413EOF
2414if compile_prog "" "" ; then
2415 have_mlockall=yes
2416else
2417 have_mlockall=no
2418fi
2419
299e6f19
PB
2420#########################################
2421# vhost interdependencies and host support
2422
2423# vhost backends
d88618f7
SH
2424if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2425 error_exit "vhost-user is only available on Linux"
299e6f19 2426fi
108a6481
CL
2427test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2428if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2429 error_exit "vhost-vdpa is only available on Linux"
2430fi
299e6f19
PB
2431test "$vhost_kernel" = "" && vhost_kernel=$linux
2432if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2433 error_exit "vhost-kernel is only available on Linux"
2434fi
2435
2436# vhost-kernel devices
2437test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2438if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2439 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2440fi
2441test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2442if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2443 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2444fi
2445
2446# vhost-user backends
2447test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2448if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2449 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2450fi
2451test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2452if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2453 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2454fi
98fc1ada
DDAG
2455test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2456if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2457 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2458fi
108a6481
CL
2459#vhost-vdpa backends
2460test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2461if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2462 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2463fi
299e6f19 2464
40bc0ca9 2465# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
299e6f19
PB
2466if test "$vhost_net" = ""; then
2467 test "$vhost_net_user" = "yes" && vhost_net=yes
40bc0ca9 2468 test "$vhost_net_vdpa" = "yes" && vhost_net=yes
299e6f19
PB
2469 test "$vhost_kernel" = "yes" && vhost_net=yes
2470fi
2471
779ab5e3
SW
2472##########################################
2473# pkg-config probe
2474
2475if ! has "$pkg_config_exe"; then
76ad07a4 2476 error_exit "pkg-config binary '$pkg_config_exe' not found"
779ab5e3
SW
2477fi
2478
b0a47e79
JQ
2479##########################################
2480# NPTL probe
2481
24cb36a6 2482if test "$linux_user" = "yes"; then
b0a47e79 2483 cat > $TMPC <<EOF
bd0c5661 2484#include <sched.h>
30813cea 2485#include <linux/futex.h>
182eacc0 2486int main(void) {
bd0c5661
PB
2487#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2488#error bork
2489#endif
182eacc0 2490 return 0;
bd0c5661
PB
2491}
2492EOF
24cb36a6 2493 if ! compile_object ; then
21684af0 2494 feature_not_found "nptl" "Install glibc and linux kernel headers."
b0a47e79 2495 fi
bd0c5661
PB
2496fi
2497
e37630ca
AL
2498##########################################
2499# xen probe
2500
1badb709 2501if test "$xen" != "disabled" ; then
c1cdd9d5
JG
2502 # Check whether Xen library path is specified via --extra-ldflags to avoid
2503 # overriding this setting with pkg-config output. If not, try pkg-config
2504 # to obtain all needed flags.
2505
2506 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2507 $pkg_config --exists xencontrol ; then
2508 xen_ctrl_version="$(printf '%d%02d%02d' \
2509 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
1badb709 2510 xen=enabled
5b6a8f43 2511 xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
c1cdd9d5 2512 xen_pc="$xen_pc xenevtchn xendevicemodel"
58ea9a7a
AP
2513 if $pkg_config --exists xentoolcore; then
2514 xen_pc="$xen_pc xentoolcore"
2515 fi
582ea95f
MAL
2516 xen_cflags="$($pkg_config --cflags $xen_pc)"
2517 xen_libs="$($pkg_config --libs $xen_pc)"
c1cdd9d5 2518 else
d5b93ddf 2519
5b6a8f43 2520 xen_libs="-lxenstore -lxenctrl"
d9506cab 2521 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
50ced5b3 2522
c1cdd9d5
JG
2523 # First we test whether Xen headers and libraries are available.
2524 # If no, we are done and there is no Xen support.
2525 # If yes, more tests are run to detect the Xen version.
2526
2527 # Xen (any)
2528 cat > $TMPC <<EOF
e37630ca 2529#include <xenctrl.h>
50ced5b3
SW
2530int main(void) {
2531 return 0;
2532}
2533EOF
c1cdd9d5
JG
2534 if ! compile_prog "" "$xen_libs" ; then
2535 # Xen not found
1badb709 2536 if test "$xen" = "enabled" ; then
c1cdd9d5
JG
2537 feature_not_found "xen" "Install xen devel"
2538 fi
1badb709 2539 xen=disabled
50ced5b3 2540
c1cdd9d5
JG
2541 # Xen unstable
2542 elif
2543 cat > $TMPC <<EOF &&
2cbf8903
RL
2544#undef XC_WANT_COMPAT_DEVICEMODEL_API
2545#define __XEN_TOOLS__
2546#include <xendevicemodel.h>
d3c49ebb 2547#include <xenforeignmemory.h>
2cbf8903
RL
2548int main(void) {
2549 xendevicemodel_handle *xd;
d3c49ebb 2550 xenforeignmemory_handle *xfmem;
2cbf8903
RL
2551
2552 xd = xendevicemodel_open(0, 0);
2553 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2554
d3c49ebb
PD
2555 xfmem = xenforeignmemory_open(0, 0);
2556 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2557
2cbf8903
RL
2558 return 0;
2559}
2560EOF
2561 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2562 then
2563 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2564 xen_ctrl_version=41100
1badb709 2565 xen=enabled
2cbf8903
RL
2566 elif
2567 cat > $TMPC <<EOF &&
5ba3d756
ID
2568#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2569#include <xenforeignmemory.h>
58ea9a7a 2570#include <xentoolcore.h>
5ba3d756
ID
2571int main(void) {
2572 xenforeignmemory_handle *xfmem;
2573
2574 xfmem = xenforeignmemory_open(0, 0);
2575 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
58ea9a7a 2576 xentoolcore_restrict_all(0);
5ba3d756
ID
2577
2578 return 0;
2579}
2580EOF
58ea9a7a 2581 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
5ba3d756 2582 then
58ea9a7a 2583 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
5ba3d756 2584 xen_ctrl_version=41000
1badb709 2585 xen=enabled
5ba3d756
ID
2586 elif
2587 cat > $TMPC <<EOF &&
da8090cc
PD
2588#undef XC_WANT_COMPAT_DEVICEMODEL_API
2589#define __XEN_TOOLS__
2590#include <xendevicemodel.h>
2591int main(void) {
2592 xendevicemodel_handle *xd;
2593
2594 xd = xendevicemodel_open(0, 0);
2595 xendevicemodel_close(xd);
50ced5b3 2596
da8090cc
PD
2597 return 0;
2598}
2599EOF
c1cdd9d5
JG
2600 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2601 then
2602 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2603 xen_ctrl_version=40900
1badb709 2604 xen=enabled
c1cdd9d5
JG
2605 elif
2606 cat > $TMPC <<EOF &&
b6eb9b45
PS
2607/*
2608 * If we have stable libs the we don't want the libxc compat
2609 * layers, regardless of what CFLAGS we may have been given.
2610 *
2611 * Also, check if xengnttab_grant_copy_segment_t is defined and
2612 * grant copy operation is implemented.
2613 */
2614#undef XC_WANT_COMPAT_EVTCHN_API
2615#undef XC_WANT_COMPAT_GNTTAB_API
2616#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2617#include <xenctrl.h>
2618#include <xenstore.h>
2619#include <xenevtchn.h>
2620#include <xengnttab.h>
2621#include <xenforeignmemory.h>
2622#include <stdint.h>
2623#include <xen/hvm/hvm_info_table.h>
2624#if !defined(HVM_MAX_VCPUS)
2625# error HVM_MAX_VCPUS not defined
2626#endif
2627int main(void) {
2628 xc_interface *xc = NULL;
2629 xenforeignmemory_handle *xfmem;
2630 xenevtchn_handle *xe;
2631 xengnttab_handle *xg;
b6eb9b45
PS
2632 xengnttab_grant_copy_segment_t* seg = NULL;
2633
2634 xs_daemon_open();
2635
2636 xc = xc_interface_open(0, 0, 0);
2637 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2638 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2639 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2640 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
b6eb9b45
PS
2641
2642 xfmem = xenforeignmemory_open(0, 0);
2643 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2644
2645 xe = xenevtchn_open(0, 0);
2646 xenevtchn_fd(xe);
2647
2648 xg = xengnttab_open(0, 0);
2649 xengnttab_grant_copy(xg, 0, seg);
2650
2651 return 0;
2652}
2653EOF
c1cdd9d5
JG
2654 compile_prog "" "$xen_libs $xen_stable_libs"
2655 then
2656 xen_ctrl_version=40800
1badb709 2657 xen=enabled
c1cdd9d5
JG
2658 elif
2659 cat > $TMPC <<EOF &&
5eeb39c2
IC
2660/*
2661 * If we have stable libs the we don't want the libxc compat
2662 * layers, regardless of what CFLAGS we may have been given.
2663 */
2664#undef XC_WANT_COMPAT_EVTCHN_API
2665#undef XC_WANT_COMPAT_GNTTAB_API
2666#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2667#include <xenctrl.h>
2668#include <xenstore.h>
2669#include <xenevtchn.h>
2670#include <xengnttab.h>
2671#include <xenforeignmemory.h>
2672#include <stdint.h>
2673#include <xen/hvm/hvm_info_table.h>
2674#if !defined(HVM_MAX_VCPUS)
2675# error HVM_MAX_VCPUS not defined
2676#endif
2677int main(void) {
2678 xc_interface *xc = NULL;
2679 xenforeignmemory_handle *xfmem;
2680 xenevtchn_handle *xe;
2681 xengnttab_handle *xg;
5eeb39c2
IC
2682
2683 xs_daemon_open();
2684
2685 xc = xc_interface_open(0, 0, 0);
2686 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2687 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2688 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2689 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
5eeb39c2
IC
2690
2691 xfmem = xenforeignmemory_open(0, 0);
2692 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2693
2694 xe = xenevtchn_open(0, 0);
2695 xenevtchn_fd(xe);
2696
2697 xg = xengnttab_open(0, 0);
2698 xengnttab_map_grant_ref(xg, 0, 0, 0);
2699
2700 return 0;
2701}
2702EOF
c1cdd9d5
JG
2703 compile_prog "" "$xen_libs $xen_stable_libs"
2704 then
2705 xen_ctrl_version=40701
1badb709 2706 xen=enabled
c1cdd9d5
JG
2707
2708 # Xen 4.6
2709 elif
2710 cat > $TMPC <<EOF &&
cdadde39 2711#include <xenctrl.h>
e108a3c1 2712#include <xenstore.h>
d5b93ddf
AP
2713#include <stdint.h>
2714#include <xen/hvm/hvm_info_table.h>
2715#if !defined(HVM_MAX_VCPUS)
2716# error HVM_MAX_VCPUS not defined
2717#endif
d8b441a3
JB
2718int main(void) {
2719 xc_interface *xc;
2720 xs_daemon_open();
2721 xc = xc_interface_open(0, 0, 0);
2722 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2723 xc_gnttab_open(NULL, 0);
2724 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2725 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2726 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
20a544c7 2727 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
d8b441a3
JB
2728 return 0;
2729}
2730EOF
c1cdd9d5
JG
2731 compile_prog "" "$xen_libs"
2732 then
2733 xen_ctrl_version=40600
1badb709 2734 xen=enabled
c1cdd9d5
JG
2735
2736 # Xen 4.5
2737 elif
2738 cat > $TMPC <<EOF &&
d8b441a3
JB
2739#include <xenctrl.h>
2740#include <xenstore.h>
2741#include <stdint.h>
2742#include <xen/hvm/hvm_info_table.h>
2743#if !defined(HVM_MAX_VCPUS)
2744# error HVM_MAX_VCPUS not defined
2745#endif
3996e85c
PD
2746int main(void) {
2747 xc_interface *xc;
2748 xs_daemon_open();
2749 xc = xc_interface_open(0, 0, 0);
2750 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2751 xc_gnttab_open(NULL, 0);
2752 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2753 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2754 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2755 return 0;
2756}
2757EOF
c1cdd9d5
JG
2758 compile_prog "" "$xen_libs"
2759 then
2760 xen_ctrl_version=40500
1badb709 2761 xen=enabled
3996e85c 2762
c1cdd9d5
JG
2763 elif
2764 cat > $TMPC <<EOF &&
3996e85c
PD
2765#include <xenctrl.h>
2766#include <xenstore.h>
2767#include <stdint.h>
2768#include <xen/hvm/hvm_info_table.h>
2769#if !defined(HVM_MAX_VCPUS)
2770# error HVM_MAX_VCPUS not defined
2771#endif
8688e065
SS
2772int main(void) {
2773 xc_interface *xc;
2774 xs_daemon_open();
2775 xc = xc_interface_open(0, 0, 0);
2776 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2777 xc_gnttab_open(NULL, 0);
2778 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2779 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2780 return 0;
2781}
2782EOF
c1cdd9d5
JG
2783 compile_prog "" "$xen_libs"
2784 then
2785 xen_ctrl_version=40200
1badb709 2786 xen=enabled
8688e065 2787
c1cdd9d5 2788 else
1badb709 2789 if test "$xen" = "enabled" ; then
c1cdd9d5
JG
2790 feature_not_found "xen (unsupported version)" \
2791 "Install a supported xen (xen 4.2 or newer)"
2792 fi
1badb709 2793 xen=disabled
fc321b4b 2794 fi
d5b93ddf 2795
1badb709 2796 if test "$xen" = enabled; then
c1cdd9d5 2797 if test $xen_ctrl_version -ge 40701 ; then
582ea95f 2798 xen_libs="$xen_libs $xen_stable_libs "
c1cdd9d5 2799 fi
5eeb39c2 2800 fi
d5b93ddf 2801 fi
e37630ca
AL
2802fi
2803
2da776db
MH
2804##########################################
2805# RDMA needs OpenFabrics libraries
2806if test "$rdma" != "no" ; then
2807 cat > $TMPC <<EOF
2808#include <rdma/rdma_cma.h>
2809int main(void) { return 0; }
2810EOF
ef6d4ccd 2811 rdma_libs="-lrdmacm -libverbs -libumad"
2da776db
MH
2812 if compile_prog "" "$rdma_libs" ; then
2813 rdma="yes"
2da776db
MH
2814 else
2815 if test "$rdma" = "yes" ; then
2816 error_exit \
ef6d4ccd 2817 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
2da776db 2818 " Your options:" \
ef6d4ccd 2819 " (1) Fast: Install infiniband packages (devel) from your distro." \
2da776db
MH
2820 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2821 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2822 fi
2823 rdma="no"
2824 fi
2825fi
2826
21ab34c9
MA
2827##########################################
2828# PVRDMA detection
2829
2830cat > $TMPC <<EOF &&
2831#include <sys/mman.h>
2832
2833int
2834main(void)
2835{
2836 char buf = 0;
2837 void *addr = &buf;
2838 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
2839
2840 return 0;
2841}
2842EOF
2843
2844if test "$rdma" = "yes" ; then
2845 case "$pvrdma" in
2846 "")
2847 if compile_prog "" ""; then
2848 pvrdma="yes"
2849 else
2850 pvrdma="no"
2851 fi
2852 ;;
2853 "yes")
2854 if ! compile_prog "" ""; then
2855 error_exit "PVRDMA is not supported since mremap is not implemented"
2856 fi
2857 pvrdma="yes"
2858 ;;
2859 "no")
2860 pvrdma="no"
2861 ;;
2862 esac
2863else
2864 if test "$pvrdma" = "yes" ; then
2865 error_exit "PVRDMA requires rdma suppport"
2866 fi
2867 pvrdma="no"
2868fi
95c6bff3 2869
ee108585
YS
2870# Let's see if enhanced reg_mr is supported
2871if test "$pvrdma" = "yes" ; then
2872
2873cat > $TMPC <<EOF &&
2874#include <infiniband/verbs.h>
2875
2876int
2877main(void)
2878{
2879 struct ibv_mr *mr;
2880 struct ibv_pd *pd = NULL;
2881 size_t length = 10;
2882 uint64_t iova = 0;
2883 int access = 0;
2884 void *addr = NULL;
2885
2886 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
2887
2888 ibv_dereg_mr(mr);
2889
2890 return 0;
2891}
2892EOF
2893 if ! compile_prog "" "-libverbs"; then
2894 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
2895 fi
2896fi
2897
ee682d27 2898##########################################
c1bb86cd 2899# xfsctl() probe, used for file-posix.c
dce512de
CH
2900if test "$xfs" != "no" ; then
2901 cat > $TMPC << EOF
ffc41d10 2902#include <stddef.h> /* NULL */
dce512de
CH
2903#include <xfs/xfs.h>
2904int main(void)
2905{
2906 xfsctl(NULL, 0, 0, NULL);
2907 return 0;
2908}
2909EOF
2910 if compile_prog "" "" ; then
2911 xfs="yes"
2912 else
2913 if test "$xfs" = "yes" ; then
e3a6e0da 2914 feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
dce512de
CH
2915 fi
2916 xfs=no
2917 fi
2918fi
2919
8a16d273
TS
2920##########################################
2921# vde libraries probe
dfb278bd 2922if test "$vde" != "no" ; then
4baae0ac 2923 vde_libs="-lvdeplug"
8a16d273
TS
2924 cat > $TMPC << EOF
2925#include <libvdeplug.h>
4a7f0e06
PB
2926int main(void)
2927{
2928 struct vde_open_args a = {0, 0, 0};
fea08e08
PM
2929 char s[] = "";
2930 vde_open(s, s, &a);
4a7f0e06
PB
2931 return 0;
2932}
8a16d273 2933EOF
52166aa0 2934 if compile_prog "" "$vde_libs" ; then
4baae0ac 2935 vde=yes
dfb278bd
JQ
2936 else
2937 if test "$vde" = "yes" ; then
21684af0 2938 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
dfb278bd
JQ
2939 fi
2940 vde=no
4baae0ac 2941 fi
8a16d273
TS
2942fi
2943
58952137 2944##########################################
0a985b37
VM
2945# netmap support probe
2946# Apart from looking for netmap headers, we make sure that the host API version
2947# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2948# a minor/major version number. Minor new features will be marked with values up
2949# to 15, and if something happens that requires a change to the backend we will
2950# move above 15, submit the backend fixes and modify this two bounds.
58952137
VM
2951if test "$netmap" != "no" ; then
2952 cat > $TMPC << EOF
2953#include <inttypes.h>
2954#include <net/if.h>
2955#include <net/netmap.h>
2956#include <net/netmap_user.h>
0a985b37
VM
2957#if (NETMAP_API < 11) || (NETMAP_API > 15)
2958#error
2959#endif
58952137
VM
2960int main(void) { return 0; }
2961EOF
2962 if compile_prog "" "" ; then
2963 netmap=yes
2964 else
2965 if test "$netmap" = "yes" ; then
2966 feature_not_found "netmap"
2967 fi
2968 netmap=no
2969 fi
2970fi
2971
422a5fd0
JD
2972##########################################
2973# detect CoreAudio
2974if test "$coreaudio" != "no" ; then
2975 coreaudio_libs="-framework CoreAudio"
2976 cat > $TMPC << EOF
2977#include <CoreAudio/CoreAudio.h>
2978int main(void)
2979{
2980 return (int)AudioGetCurrentHostTime();
2981}
2982EOF
2983 if compile_prog "" "$coreaudio_libs" ; then
2984 coreaudio=yes
2985 else
2986 coreaudio=no
2987 fi
2988fi
2989
8f28f3fb 2990##########################################
c2de5c91 2991# Sound support libraries probe
8f28f3fb 2992
89138857 2993audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
c2de5c91 2994for drv in $audio_drv_list; do
2995 case $drv in
e42975a1 2996 alsa | try-alsa)
c80a867f
GH
2997 if $pkg_config alsa --exists; then
2998 alsa_libs=$($pkg_config alsa --libs)
478e943f
PB
2999 alsa_cflags=$($pkg_config alsa --cflags)
3000 alsa=yes
e42975a1
GH
3001 if test "$drv" = "try-alsa"; then
3002 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3003 fi
c80a867f 3004 else
e42975a1
GH
3005 if test "$drv" = "try-alsa"; then
3006 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3007 else
3008 error_exit "$drv check failed" \
3009 "Make sure to have the $drv libs and headers installed."
3010 fi
c80a867f 3011 fi
c2de5c91 3012 ;;
3013
e42975a1 3014 pa | try-pa)
c80a867f 3015 if $pkg_config libpulse --exists; then
478e943f 3016 libpulse=yes
c80a867f 3017 pulse_libs=$($pkg_config libpulse --libs)
478e943f 3018 pulse_cflags=$($pkg_config libpulse --cflags)
e42975a1
GH
3019 if test "$drv" = "try-pa"; then
3020 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3021 fi
c80a867f 3022 else
e42975a1
GH
3023 if test "$drv" = "try-pa"; then
3024 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3025 else
3026 error_exit "$drv check failed" \
3027 "Make sure to have the $drv libs and headers installed."
3028 fi
c80a867f 3029 fi
b8e59f18 3030 ;;
3031
373967b2
GH
3032 sdl)
3033 if test "$sdl" = "no"; then
3034 error_exit "sdl not found or disabled, can not use sdl audio driver"
3035 fi
3036 ;;
3037
e42975a1
GH
3038 try-sdl)
3039 if test "$sdl" = "no"; then
3040 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3041 else
3042 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3043 fi
3044 ;;
3045
422a5fd0
JD
3046 coreaudio | try-coreaudio)
3047 if test "$coreaudio" = "no"; then
3048 if test "$drv" = "try-coreaudio"; then
3049 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio//')
3050 else
3051 error_exit "$drv check failed" \
3052 "Make sure to have the $drv is available."
3053 fi
3054 else
b1149911 3055 coreaudio_libs="-framework CoreAudio"
422a5fd0
JD
3056 if test "$drv" = "try-coreaudio"; then
3057 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio/coreaudio/')
3058 fi
3059 fi
997e690a
JQ
3060 ;;
3061
a4bf6780 3062 dsound)
b1149911 3063 dsound_libs="-lole32 -ldxguid"
d5631638 3064 audio_win_int="yes"
a4bf6780
JQ
3065 ;;
3066
3067 oss)
b1149911 3068 oss_libs="$oss_lib"
a4bf6780
JQ
3069 ;;
3070
2e445703
GM
3071 jack | try-jack)
3072 if $pkg_config jack --exists; then
478e943f 3073 libjack=yes
2e445703
GM
3074 jack_libs=$($pkg_config jack --libs)
3075 if test "$drv" = "try-jack"; then
3076 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3077 fi
3078 else
3079 if test "$drv" = "try-jack"; then
3080 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3081 else
3082 error_exit "$drv check failed" \
3083 "Make sure to have the $drv libs and headers installed."
3084 fi
3085 fi
3086 ;;
3087
e4c63a6a 3088 *)
1c9b2a52 3089 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
76ad07a4
PM
3090 error_exit "Unknown driver '$drv' selected" \
3091 "Possible drivers are: $audio_possible_drivers"
e4c63a6a 3092 }
3093 ;;
c2de5c91 3094 esac
3095done
8f28f3fb 3096
e18df141
AL
3097##########################################
3098# glib support probe
a52d28af 3099
b4c6036f 3100glib_req_ver=2.56
aa0d1f44
PB
3101glib_modules=gthread-2.0
3102if test "$modules" = yes; then
a88afc64 3103 glib_modules="$glib_modules gmodule-export-2.0"
aa0d1f44 3104fi
54cb65d8
EC
3105if test "$plugins" = yes; then
3106 glib_modules="$glib_modules gmodule-2.0"
3107fi
e26110cf 3108
aa0d1f44 3109for i in $glib_modules; do
e26110cf 3110 if $pkg_config --atleast-version=$glib_req_ver $i; then
89138857
SW
3111 glib_cflags=$($pkg_config --cflags $i)
3112 glib_libs=$($pkg_config --libs $i)
e26110cf
FZ
3113 else
3114 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3115 fi
3116done
3117
215b0c2f
PB
3118# This workaround is required due to a bug in pkg-config file for glib as it
3119# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3120
3121if test "$static" = yes && test "$mingw32" = yes; then
3122 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3123fi
3124
20cf7b8e
DP
3125if ! test "$gio" = "no"; then
3126 pass=no
3127 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3128 gio_cflags=$($pkg_config --cflags gio-2.0)
3129 gio_libs=$($pkg_config --libs gio-2.0)
3130 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
5ecfb76c 3131 if ! has "$gdbus_codegen"; then
20cf7b8e
DP
3132 gdbus_codegen=
3133 fi
3134 # Check that the libraries actually work -- Ubuntu 18.04 ships
3135 # with pkg-config --static --libs data for gio-2.0 that is missing
3136 # -lblkid and will give a link error.
3137 cat > $TMPC <<EOF
13ceae66
PM
3138#include <gio/gio.h>
3139int main(void)
3140{
3141 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3142 return 0;
3143}
3144EOF
20cf7b8e
DP
3145 if compile_prog "$gio_cflags" "$gio_libs" ; then
3146 pass=yes
3147 else
3148 pass=no
3149 fi
3150
3151 if test "$pass" = "yes" &&
3152 $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3153 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3154 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3155 fi
76346b62 3156 fi
f876b765 3157
20cf7b8e
DP
3158 if test "$pass" = "no"; then
3159 if test "$gio" = "yes"; then
3160 feature_not_found "gio" "Install libgio >= 2.0"
3161 else
3162 gio=no
3163 fi
3164 else
3165 gio=yes
3166 fi
25a97a56
MAL
3167fi
3168
977a82ab
DB
3169# Sanity check that the current size_t matches the
3170# size that glib thinks it should be. This catches
3171# problems on multi-arch where people try to build
3172# 32-bit QEMU while pointing at 64-bit glib headers
3173cat > $TMPC <<EOF
3174#include <glib.h>
3175#include <unistd.h>
3176
3177#define QEMU_BUILD_BUG_ON(x) \
3178 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3179
3180int main(void) {
3181 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3182 return 0;
3183}
3184EOF
3185
215b0c2f 3186if ! compile_prog "$glib_cflags" "$glib_libs" ; then
977a82ab
DB
3187 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3188 "You probably need to set PKG_CONFIG_LIBDIR"\
3189 "to point to the right pkg-config files for your"\
3190 "build target"
3191fi
3192
bbbf2e04
JS
3193# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3194cat > $TMPC << EOF
3195#include <glib.h>
3196int main(void) { return 0; }
3197EOF
3198if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3199 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3200 glib_cflags="-Wno-unknown-attributes $glib_cflags"
5770e8af 3201 CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
bbbf2e04
JS
3202 fi
3203fi
3204
9bda600b
EB
3205# Silence clang warnings triggered by glib < 2.57.2
3206cat > $TMPC << EOF
3207#include <glib.h>
3208typedef struct Foo {
3209 int i;
3210} Foo;
3211static void foo_free(Foo *f)
3212{
3213 g_free(f);
3214}
3215G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3216int main(void) { return 0; }
3217EOF
3218if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3219 if cc_has_warning_flag "-Wno-unused-function"; then
3220 glib_cflags="$glib_cflags -Wno-unused-function"
5770e8af 3221 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
9bda600b
EB
3222 fi
3223fi
3224
e26110cf
FZ
3225##########################################
3226# SHA command probe for modules
3227if test "$modules" = yes; then
3228 shacmd_probe="sha1sum sha1 shasum"
3229 for c in $shacmd_probe; do
8ccefb91 3230 if has $c; then
e26110cf
FZ
3231 shacmd="$c"
3232 break
3233 fi
3234 done
3235 if test "$shacmd" = ""; then
3236 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3237 fi
e18df141
AL
3238fi
3239
414f0dab 3240##########################################
e5d355d1 3241# pthread probe
4b29ec41 3242PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3c529d93 3243
4dd75c70 3244pthread=no
e5d355d1 3245cat > $TMPC << EOF
3c529d93 3246#include <pthread.h>
7a42bbe4
SW
3247static void *f(void *p) { return NULL; }
3248int main(void) {
3249 pthread_t thread;
3250 pthread_create(&thread, 0, f, 0);
3251 return 0;
3252}
414f0dab 3253EOF
bd00d539
AF
3254if compile_prog "" "" ; then
3255 pthread=yes
3256else
3257 for pthread_lib in $PTHREADLIBS_LIST; do
3258 if compile_prog "" "$pthread_lib" ; then
3259 pthread=yes
bd00d539
AF
3260 break
3261 fi
3262 done
3263fi
414f0dab 3264
e633a5c6 3265if test "$mingw32" != yes && test "$pthread" = no; then
76ad07a4
PM
3266 error_exit "pthread check failed" \
3267 "Make sure to have the pthread libs and headers installed."
e5d355d1
AL
3268fi
3269
479a5747
RB
3270# check for pthread_setname_np with thread id
3271pthread_setname_np_w_tid=no
5c312079
DDAG
3272cat > $TMPC << EOF
3273#include <pthread.h>
3274
3275static void *f(void *p) { return NULL; }
3276int main(void)
3277{
3278 pthread_t thread;
3279 pthread_create(&thread, 0, f, 0);
3280 pthread_setname_np(thread, "QEMU");
3281 return 0;
3282}
3283EOF
3284if compile_prog "" "$pthread_lib" ; then
479a5747
RB
3285 pthread_setname_np_w_tid=yes
3286fi
3287
3288# check for pthread_setname_np without thread id
3289pthread_setname_np_wo_tid=no
3290cat > $TMPC << EOF
3291#include <pthread.h>
3292
12a9b8d8 3293static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
479a5747
RB
3294int main(void)
3295{
3296 pthread_t thread;
3297 pthread_create(&thread, 0, f, 0);
3298 return 0;
3299}
3300EOF
3301if compile_prog "" "$pthread_lib" ; then
3302 pthread_setname_np_wo_tid=yes
5c312079
DDAG
3303fi
3304
0a12ec87 3305##########################################
b10d49d7
PT
3306# libssh probe
3307if test "$libssh" != "no" ; then
b4c10fc6 3308 if $pkg_config --exists "libssh >= 0.8.7"; then
b10d49d7
PT
3309 libssh_cflags=$($pkg_config libssh --cflags)
3310 libssh_libs=$($pkg_config libssh --libs)
3311 libssh=yes
0a12ec87 3312 else
b10d49d7
PT
3313 if test "$libssh" = "yes" ; then
3314 error_exit "libssh required for --enable-libssh"
0a12ec87 3315 fi
b10d49d7 3316 libssh=no
0a12ec87
RJ
3317 fi
3318fi
3319
5c6c3a6c
CH
3320##########################################
3321# linux-aio probe
5c6c3a6c
CH
3322
3323if test "$linux_aio" != "no" ; then
3324 cat > $TMPC <<EOF
3325#include <libaio.h>
3326#include <sys/eventfd.h>
832ce9c2 3327#include <stddef.h>
5c6c3a6c
CH
3328int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3329EOF
3330 if compile_prog "" "-laio" ; then
3331 linux_aio=yes
5c6c3a6c
CH
3332 else
3333 if test "$linux_aio" = "yes" ; then
21684af0 3334 feature_not_found "linux AIO" "Install libaio devel"
5c6c3a6c 3335 fi
3cfcae3c 3336 linux_aio=no
5c6c3a6c
CH
3337 fi
3338fi
3339
3b8acc11 3340##########################################
7aaa6a16 3341# TPM emulation is only on POSIX
3b8acc11 3342
7aaa6a16
PB
3343if test "$tpm" = ""; then
3344 if test "$mingw32" = "yes"; then
3345 tpm=no
3346 else
3347 tpm=yes
3348 fi
3349elif test "$tpm" = "yes"; then
3350 if test "$mingw32" = "yes" ; then
3351 error_exit "TPM emulation only available on POSIX systems"
3352 fi
3b8acc11
PB
3353fi
3354
bf9298b9
AL
3355##########################################
3356# iovec probe
3357cat > $TMPC <<EOF
db34f0b3 3358#include <sys/types.h>
bf9298b9 3359#include <sys/uio.h>
db34f0b3 3360#include <unistd.h>
f91f9bee 3361int main(void) { return sizeof(struct iovec); }
bf9298b9
AL
3362EOF
3363iovec=no
52166aa0 3364if compile_prog "" "" ; then
bf9298b9
AL
3365 iovec=yes
3366fi
3367
f652e6af
AJ
3368##########################################
3369# fdt probe
d599938a 3370
fbb4121d
PB
3371case "$fdt" in
3372 auto | enabled | internal)
3373 # Simpler to always update submodule, even if not needed.
2d652f24 3374 git_submodules="${git_submodules} dtc"
fbb4121d
PB
3375 ;;
3376esac
f652e6af 3377
20ff075b 3378##########################################
9d49bcf6 3379# opengl probe (for sdl2, gtk)
b1546f32 3380
d52c454a
MAL
3381gbm="no"
3382if $pkg_config gbm; then
3383 gbm_cflags="$($pkg_config --cflags gbm)"
3384 gbm_libs="$($pkg_config --libs gbm)"
3385 gbm="yes"
3386fi
3387
da076ffe 3388if test "$opengl" != "no" ; then
bc6a3565
AO
3389 epoxy=no
3390 if $pkg_config epoxy; then
3391 cat > $TMPC << EOF
3392#include <epoxy/egl.h>
3393int main(void) { return 0; }
3394EOF
3395 if compile_prog "" "" ; then
3396 epoxy=yes
3397 fi
3398 fi
3399
3400 if test "$epoxy" = "yes" ; then
3401 opengl_cflags="$($pkg_config --cflags epoxy)"
3402 opengl_libs="$($pkg_config --libs epoxy)"
da076ffe 3403 opengl=yes
20ff075b 3404 else
da076ffe 3405 if test "$opengl" = "yes" ; then
bc6a3565 3406 feature_not_found "opengl" "Please install epoxy with EGL"
20ff075b 3407 fi
f676c67e 3408 opengl_cflags=""
da076ffe
GH
3409 opengl_libs=""
3410 opengl=no
20ff075b
MW
3411 fi
3412fi
3413
a99d57bb
WG
3414##########################################
3415# libnuma probe
3416
3417if test "$numa" != "no" ; then
3418 cat > $TMPC << EOF
3419#include <numa.h>
3420int main(void) { return numa_available(); }
3421EOF
3422
3423 if compile_prog "" "-lnuma" ; then
3424 numa=yes
ab318051 3425 numa_libs="-lnuma"
a99d57bb
WG
3426 else
3427 if test "$numa" = "yes" ; then
3428 feature_not_found "numa" "install numactl devel"
3429 fi
3430 numa=no
3431 fi
3432fi
3433
aa087962 3434malloc=system
7b01cb97
AD
3435if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3436 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3437 exit 1
aa087962
PB
3438elif test "$tcmalloc" = "yes" ; then
3439 malloc=tcmalloc
3440elif test "$jemalloc" = "yes" ; then
3441 malloc=jemalloc
7b01cb97
AD
3442fi
3443
955727d2
CT
3444# check for usbfs
3445have_usbfs=no
3446if test "$linux_user" = "yes"; then
96566d09
TP
3447 cat > $TMPC << EOF
3448#include <linux/usbdevice_fs.h>
3449
3450#ifndef USBDEVFS_GET_CAPABILITIES
3451#error "USBDEVFS_GET_CAPABILITIES undefined"
3452#endif
3453
3454#ifndef USBDEVFS_DISCONNECT_CLAIM
3455#error "USBDEVFS_DISCONNECT_CLAIM undefined"
3456#endif
3457
3458int main(void)
3459{
3460 return 0;
3461}
3462EOF
3463 if compile_prog "" ""; then
955727d2
CT
3464 have_usbfs=yes
3465 fi
955727d2 3466fi
751bcc39 3467
de5071c5 3468##########################################
cd4ec0b4 3469# spice probe
58d3f3ff
GH
3470if test "$spice_protocol" != "no" ; then
3471 spice_protocol_cflags=$($pkg_config --cflags spice-protocol 2>/dev/null)
3472 if $pkg_config --atleast-version=0.12.3 spice-protocol; then
3473 spice_protocol="yes"
3474 else
3475 if test "$spice_protocol" = "yes" ; then
3476 feature_not_found "spice_protocol" \
3477 "Install spice-protocol(>=0.12.3) devel"
3478 fi
3479 spice_protocol="no"
3480 fi
3481fi
3482
cd4ec0b4
GH
3483if test "$spice" != "no" ; then
3484 cat > $TMPC << EOF
3485#include <spice.h>
3486int main(void) { spice_server_new(); return 0; }
3487EOF
710fc4f5
JD
3488 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3489 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
1b63665c 3490 if $pkg_config --atleast-version=0.12.5 spice-server && \
58d3f3ff 3491 test "$spice_protocol" = "yes" && \
cd4ec0b4
GH
3492 compile_prog "$spice_cflags" "$spice_libs" ; then
3493 spice="yes"
cd4ec0b4
GH
3494 else
3495 if test "$spice" = "yes" ; then
8efc9363 3496 feature_not_found "spice" \
58d3f3ff 3497 "Install spice-server(>=0.12.5) devel"
cd4ec0b4
GH
3498 fi
3499 spice="no"
3500 fi
3501fi
3502
d9840e25
TS
3503##########################################
3504# check if we have VSS SDK headers for win
3505
e633a5c6
EB
3506if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
3507 test "$vss_win32_sdk" != "no" ; then
d9840e25 3508 case "$vss_win32_sdk" in
690604f6 3509 "") vss_win32_include="-isystem $source_path" ;;
d9840e25
TS
3510 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3511 # handle path with spaces. So we symlink the headers into ".sdk/vss".
690604f6 3512 vss_win32_include="-isystem $source_path/.sdk/vss"
d9840e25
TS
3513 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3514 ;;
690604f6 3515 *) vss_win32_include="-isystem $vss_win32_sdk"
d9840e25
TS
3516 esac
3517 cat > $TMPC << EOF
3518#define __MIDL_user_allocate_free_DEFINED__
3519#include <inc/win2003/vss.h>
3520int main(void) { return VSS_CTX_BACKUP; }
3521EOF
3522 if compile_prog "$vss_win32_include" "" ; then
3523 guest_agent_with_vss="yes"
3524 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
315d3184 3525 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
f33ca81f 3526 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
d9840e25
TS
3527 else
3528 if test "$vss_win32_sdk" != "" ; then
3529 echo "ERROR: Please download and install Microsoft VSS SDK:"
3530 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3531 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3532 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
3533 echo "ERROR: The headers are extracted in the directory \`inc'."
3534 feature_not_found "VSS support"
3535 fi
3536 guest_agent_with_vss="no"
3537 fi
3538fi
3539
3540##########################################
3541# lookup Windows platform SDK (if not specified)
3542# The SDK is needed only to build .tlb (type library) file of guest agent
3543# VSS provider from the source. It is usually unnecessary because the
3544# pre-compiled .tlb file is included.
3545
e633a5c6
EB
3546if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
3547 test "$guest_agent_with_vss" = "yes" ; then
d9840e25
TS
3548 if test -z "$win_sdk"; then
3549 programfiles="$PROGRAMFILES"
3550 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3551 if test -n "$programfiles"; then
3552 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3553 else
3554 feature_not_found "Windows SDK"
3555 fi
3556 elif test "$win_sdk" = "no"; then
3557 win_sdk=""
3558 fi
3559fi
3560
50cbebb9
MR
3561##########################################
3562# check if mingw environment provides a recent ntddscsi.h
e633a5c6 3563if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
50cbebb9
MR
3564 cat > $TMPC << EOF
3565#include <windows.h>
3566#include <ntddscsi.h>
3567int main(void) {
3568#if !defined(IOCTL_SCSI_GET_ADDRESS)
3569#error Missing required ioctl definitions
3570#endif
3571 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
3572 return addr.Lun;
3573}
3574EOF
3575 if compile_prog "" "" ; then
3576 guest_agent_ntddscsi=yes
996b9cdc 3577 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
50cbebb9
MR
3578 fi
3579fi
3580
8ca80760
RH
3581##########################################
3582# capstone
3583
e219c499 3584case "$capstone" in
8b18cdbf
RH
3585 auto | enabled | internal)
3586 # Simpler to always update submodule, even if not needed.
2d652f24 3587 git_submodules="${git_submodules} capstone"
e219c499
RH
3588 ;;
3589esac
8ca80760 3590
0a852417
PD
3591##########################################
3592# check if we have posix_syslog
3593
3594posix_syslog=no
3595cat > $TMPC << EOF
3596#include <syslog.h>
3597int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
3598EOF
3599if compile_prog "" "" ; then
3600 posix_syslog=yes
3601fi
3602
94a420b1
SH
3603##########################################
3604# check if trace backend exists
3605
5b808275 3606$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 3607if test "$?" -ne 0 ; then
5b808275
LV
3608 error_exit "invalid trace backends" \
3609 "Please choose supported trace backends."
94a420b1
SH
3610fi
3611
7e24e92a
SH
3612##########################################
3613# For 'ust' backend, test if ust headers are present
5b808275 3614if have_backend "ust"; then
bbe47ed2
PB
3615 if $pkg_config lttng-ust --exists; then
3616 lttng_ust_libs=$($pkg_config --libs lttng-ust)
7e24e92a 3617 else
bf15f63c 3618 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
3619 fi
3620fi
b3d08c02
DB
3621
3622##########################################
3623# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 3624if have_backend "dtrace"; then
b3d08c02 3625 if ! has 'dtrace' ; then
76ad07a4 3626 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 3627 fi
c276b17d
DB
3628 trace_backend_stap="no"
3629 if has 'stap' ; then
3630 trace_backend_stap="yes"
4b265c79
SH
3631
3632 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
3633 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
3634 # instead. QEMU --enable-modules depends on this because the SystemTap
3635 # semaphores are linked into the main binary and not the module's shared
3636 # object.
3637 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
c276b17d 3638 fi
b3d08c02
DB
3639fi
3640
023367e6 3641##########################################
519175a2 3642# check and set a backend for coroutine
d0e2fce5 3643
7c2acc70 3644# We prefer ucontext, but it's not always possible. The fallback
33c53c54
DB
3645# is sigcontext. On Windows the only valid backend is the Windows
3646# specific one.
7c2acc70
PM
3647
3648ucontext_works=no
3649if test "$darwin" != "yes"; then
3650 cat > $TMPC << EOF
d0e2fce5 3651#include <ucontext.h>
cdf84806
PM
3652#ifdef __stub_makecontext
3653#error Ignoring glibc stub makecontext which will always fail
3654#endif
75cafad7 3655int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 3656EOF
7c2acc70
PM
3657 if compile_prog "" "" ; then
3658 ucontext_works=yes
3659 fi
3660fi
3661
3662if test "$coroutine" = ""; then
3663 if test "$mingw32" = "yes"; then
3664 coroutine=win32
3665 elif test "$ucontext_works" = "yes"; then
3666 coroutine=ucontext
3667 else
3668 coroutine=sigaltstack
d0e2fce5 3669 fi
519175a2 3670else
7c2acc70
PM
3671 case $coroutine in
3672 windows)
3673 if test "$mingw32" != "yes"; then
3674 error_exit "'windows' coroutine backend only valid for Windows"
3675 fi
3676 # Unfortunately the user visible backend name doesn't match the
3677 # coroutine-*.c filename for this case, so we have to adjust it here.
3678 coroutine=win32
3679 ;;
3680 ucontext)
3681 if test "$ucontext_works" != "yes"; then
3682 feature_not_found "ucontext"
3683 fi
3684 ;;
33c53c54 3685 sigaltstack)
7c2acc70
PM
3686 if test "$mingw32" = "yes"; then
3687 error_exit "only the 'windows' coroutine backend is valid for Windows"
3688 fi
3689 ;;
3690 *)
3691 error_exit "unknown coroutine backend $coroutine"
3692 ;;
3693 esac
d0e2fce5
AK
3694fi
3695
70c60c08 3696if test "$coroutine_pool" = ""; then
33c53c54 3697 coroutine_pool=yes
70c60c08
SH
3698fi
3699
7d992e4d 3700if test "$debug_stack_usage" = "yes"; then
7d992e4d
PL
3701 if test "$coroutine_pool" = "yes"; then
3702 echo "WARN: disabling coroutine pool for stack usage debugging"
3703 coroutine_pool=no
3704 fi
3705fi
3706
1e4f6065
DB
3707##################################################
3708# SafeStack
3709
3710
3711if test "$safe_stack" = "yes"; then
3712cat > $TMPC << EOF
3713int main(int argc, char *argv[])
3714{
3715#if ! __has_feature(safe_stack)
3716#error SafeStack Disabled
3717#endif
3718 return 0;
3719}
3720EOF
3721 flag="-fsanitize=safe-stack"
3722 # Check that safe-stack is supported and enabled.
3723 if compile_prog "-Werror $flag" "$flag"; then
3724 # Flag needed both at compilation and at linking
3725 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
3726 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3727 else
3728 error_exit "SafeStack not supported by your compiler"
3729 fi
3730 if test "$coroutine" != "ucontext"; then
3731 error_exit "SafeStack is only supported by the coroutine backend ucontext"
3732 fi
3733else
3734cat > $TMPC << EOF
3735int main(int argc, char *argv[])
3736{
3737#if defined(__has_feature)
3738#if __has_feature(safe_stack)
3739#error SafeStack Enabled
3740#endif
3741#endif
3742 return 0;
3743}
3744EOF
3745if test "$safe_stack" = "no"; then
3746 # Make sure that safe-stack is disabled
3747 if ! compile_prog "-Werror" ""; then
3748 # SafeStack was already enabled, try to explicitly remove the feature
3749 flag="-fno-sanitize=safe-stack"
3750 if ! compile_prog "-Werror $flag" "$flag"; then
3751 error_exit "Configure cannot disable SafeStack"
3752 fi
3753 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
3754 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3755 fi
3756else # "$safe_stack" = ""
3757 # Set safe_stack to yes or no based on pre-existing flags
3758 if compile_prog "-Werror" ""; then
3759 safe_stack="no"
3760 else
3761 safe_stack="yes"
3762 if test "$coroutine" != "ucontext"; then
3763 error_exit "SafeStack is only supported by the coroutine backend ucontext"
3764 fi
3765 fi
3766fi
3767fi
7d992e4d 3768
76a347e1
RH
3769########################################
3770# check if cpuid.h is usable.
3771
76a347e1
RH
3772cat > $TMPC << EOF
3773#include <cpuid.h>
3774int main(void) {
774d566c
PM
3775 unsigned a, b, c, d;
3776 int max = __get_cpuid_max(0, 0);
3777
3778 if (max >= 1) {
3779 __cpuid(1, a, b, c, d);
3780 }
3781
3782 if (max >= 7) {
3783 __cpuid_count(7, 0, a, b, c, d);
3784 }
3785
3786 return 0;
76a347e1
RH
3787}
3788EOF
3789if compile_prog "" "" ; then
3790 cpuid_h=yes
3791fi
3792
5dd89908
RH
3793##########################################
3794# avx2 optimization requirement check
3795#
3796# There is no point enabling this if cpuid.h is not usable,
3797# since we won't be able to select the new routines.
3798
e633a5c6 3799if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5dd89908
RH
3800 cat > $TMPC << EOF
3801#pragma GCC push_options
3802#pragma GCC target("avx2")
3803#include <cpuid.h>
3804#include <immintrin.h>
3805static int bar(void *a) {
3806 __m256i x = *(__m256i *)a;
3807 return _mm256_testz_si256(x, x);
3808}
3809int main(int argc, char *argv[]) { return bar(argv[0]); }
3810EOF
3811 if compile_object "" ; then
3812 avx2_opt="yes"
86583a07
LM
3813 else
3814 avx2_opt="no"
5dd89908
RH
3815 fi
3816fi
3817
6b8cd447
RH
3818##########################################
3819# avx512f optimization requirement check
3820#
3821# There is no point enabling this if cpuid.h is not usable,
3822# since we won't be able to select the new routines.
3823# by default, it is turned off.
3824# if user explicitly want to enable it, check environment
3825
3826if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
3827 cat > $TMPC << EOF
3828#pragma GCC push_options
3829#pragma GCC target("avx512f")
3830#include <cpuid.h>
3831#include <immintrin.h>
3832static int bar(void *a) {
3833 __m512i x = *(__m512i *)a;
3834 return _mm512_test_epi64_mask(x, x);
3835}
3836int main(int argc, char *argv[])
3837{
3838 return bar(argv[0]);
3839}
3840EOF
3841 if ! compile_object "" ; then
3842 avx512f_opt="no"
3843 fi
3844else
3845 avx512f_opt="no"
3846fi
3847
f540166b
RH
3848########################################
3849# check if __[u]int128_t is usable.
3850
3851int128=no
3852cat > $TMPC << EOF
3853__int128_t a;
3854__uint128_t b;
3855int main (void) {
3856 a = a + b;
3857 b = a * b;
464e3671 3858 a = a * a;
f540166b
RH
3859 return 0;
3860}
3861EOF
3862if compile_prog "" "" ; then
3863 int128=yes
3864fi
76a347e1 3865
7ebee43e
RH
3866#########################################
3867# See if 128-bit atomic operations are supported.
3868
3869atomic128=no
3870if test "$int128" = "yes"; then
3871 cat > $TMPC << EOF
3872int main(void)
3873{
3874 unsigned __int128 x = 0, y = 0;
bceac547
TH
3875 y = __atomic_load(&x, 0);
3876 __atomic_store(&x, y, 0);
3877 __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
7ebee43e
RH
3878 return 0;
3879}
3880EOF
3881 if compile_prog "" "" ; then
3882 atomic128=yes
3883 fi
3884fi
3885
e6cd4bb5 3886cmpxchg128=no
e633a5c6 3887if test "$int128" = yes && test "$atomic128" = no; then
e6cd4bb5
RH
3888 cat > $TMPC << EOF
3889int main(void)
3890{
3891 unsigned __int128 x = 0, y = 0;
3892 __sync_val_compare_and_swap_16(&x, y, x);
3893 return 0;
3894}
3895EOF
3896 if compile_prog "" "" ; then
3897 cmpxchg128=yes
3898 fi
3899fi
3900
df79b996
RH
3901#########################################
3902# See if 64-bit atomic operations are supported.
3903# Note that without __atomic builtins, we can only
3904# assume atomic loads/stores max at pointer size.
3905
3906cat > $TMPC << EOF
3907#include <stdint.h>
3908int main(void)
3909{
3910 uint64_t x = 0, y = 0;
3911#ifdef __ATOMIC_RELAXED
5fe40765
TH
3912 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
3913 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
3914 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
3915 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
3916 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
df79b996
RH
3917#else
3918 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
3919 __sync_lock_test_and_set(&x, y);
3920 __sync_val_compare_and_swap(&x, y, 0);
3921 __sync_fetch_and_add(&x, y);
3922#endif
3923 return 0;
3924}
3925EOF
3926if compile_prog "" "" ; then
3927 atomic64=yes
3928fi
3929
26fffe29
EC
3930#########################################
3931# See if --dynamic-list is supported by the linker
3932ld_dynamic_list="no"
3933if test "$static" = "no" ; then
3934 cat > $TMPTXT <<EOF
3935{
3936 foo;
3937};
3938EOF
3939
3940 cat > $TMPC <<EOF
3941#include <stdio.h>
3942void foo(void);
3943
3944void foo(void)
3945{
3946 printf("foo\n");
3947}
3948
3949int main(void)
3950{
3951 foo();
3952 return 0;
3953}
3954EOF
3955
3956 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
3957 ld_dynamic_list="yes"
3958 fi
3959fi
3960
3961#########################################
3962# See if -exported_symbols_list is supported by the linker
3963
3964ld_exported_symbols_list="no"
3965if test "$static" = "no" ; then
3966 cat > $TMPTXT <<EOF
3967 _foo
3968EOF
3969
3970 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
3971 ld_exported_symbols_list="yes"
3972 fi
3973fi
3974
3975if test "$plugins" = "yes" &&
3976 test "$ld_dynamic_list" = "no" &&
3977 test "$ld_exported_symbols_list" = "no" ; then
3978 error_exit \
3979 "Plugin support requires dynamic linking and specifying a set of symbols " \
3980 "that are exported to plugins. Unfortunately your linker doesn't " \
3981 "support the flag (--dynamic-list or -exported_symbols_list) used " \
3982 "for this purpose. You can't build with --static."
3983fi
3984
1e6e9aca
RH
3985########################################
3986# check if getauxval is available.
3987
3988getauxval=no
3989cat > $TMPC << EOF
3990#include <sys/auxv.h>
3991int main(void) {
3992 return getauxval(AT_HWCAP) == 0;
3993}
3994EOF
3995if compile_prog "" "" ; then
3996 getauxval=yes
3997fi
3998
fd0e6053
JS
3999########################################
4000# check if ccache is interfering with
4001# semantic analysis of macros
4002
5e4dfd3d 4003unset CCACHE_CPP2
fd0e6053
JS
4004ccache_cpp2=no
4005cat > $TMPC << EOF
4006static const int Z = 1;
4007#define fn() ({ Z; })
4008#define TAUT(X) ((X) == Z)
4009#define PAREN(X, Y) (X == Y)
4010#define ID(X) (X)
4011int main(int argc, char *argv[])
4012{
4013 int x = 0, y = 0;
4014 x = ID(x);
4015 x = fn();
4016 fn();
4017 if (PAREN(x, y)) return 0;
4018 if (TAUT(Z)) return 0;
4019 return 0;
4020}
4021EOF
4022
4023if ! compile_object "-Werror"; then
4024 ccache_cpp2=yes
4025fi
4026
b553a042
JS
4027#################################################
4028# clang does not support glibc + FORTIFY_SOURCE.
4029
4030if test "$fortify_source" != "no"; then
4031 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4032 fortify_source="no";
e189091f 4033 elif test -n "$cxx" && has $cxx &&
cfcc7c14 4034 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
b553a042
JS
4035 fortify_source="no";
4036 else
4037 fortify_source="yes"
4038 fi
4039fi
4040
277abf15
JV
4041##########################################
4042# check if struct fsxattr is available via linux/fs.h
4043
4044have_fsxattr=no
4045cat > $TMPC << EOF
4046#include <linux/fs.h>
4047struct fsxattr foo;
4048int main(void) {
4049 return 0;
4050}
4051EOF
4052if compile_prog "" "" ; then
4053 have_fsxattr=yes
4054fi
4055
a40161cb
PB
4056##########################################
4057# check for usable membarrier system call
4058if test "$membarrier" = "yes"; then
4059 have_membarrier=no
4060 if test "$mingw32" = "yes" ; then
4061 have_membarrier=yes
4062 elif test "$linux" = "yes" ; then
4063 cat > $TMPC << EOF
4064 #include <linux/membarrier.h>
4065 #include <sys/syscall.h>
4066 #include <unistd.h>
4067 #include <stdlib.h>
4068 int main(void) {
4069 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
4070 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
4071 exit(0);
4072 }
4073EOF
4074 if compile_prog "" "" ; then
4075 have_membarrier=yes
4076 fi
4077 fi
4078 if test "$have_membarrier" = "no"; then
4079 feature_not_found "membarrier" "membarrier system call not available"
4080 fi
4081else
4082 # Do not enable it by default even for Mingw32, because it doesn't
4083 # work on Wine.
4084 membarrier=no
4085fi
4086
6a02c806
SH
4087##########################################
4088# check for usable AF_VSOCK environment
4089have_af_vsock=no
4090cat > $TMPC << EOF
4091#include <errno.h>
4092#include <sys/types.h>
4093#include <sys/socket.h>
4094#if !defined(AF_VSOCK)
4095# error missing AF_VSOCK flag
4096#endif
4097#include <linux/vm_sockets.h>
4098int main(void) {
4099 int sock, ret;
4100 struct sockaddr_vm svm;
4101 socklen_t len = sizeof(svm);
4102 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4103 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4104 if ((ret == -1) && (errno == ENOTCONN)) {
4105 return 0;
4106 }
4107 return -1;
4108}
4109EOF
4110if compile_prog "" "" ; then
4111 have_af_vsock=yes
4112fi
4113
f0d92b56
LM
4114##########################################
4115# check for usable AF_ALG environment
4f67366e 4116have_afalg=no
f0d92b56
LM
4117cat > $TMPC << EOF
4118#include <errno.h>
4119#include <sys/types.h>
4120#include <sys/socket.h>
4121#include <linux/if_alg.h>
4122int main(void) {
4123 int sock;
4124 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
4125 return sock;
4126}
4127EOF
4128if compile_prog "" "" ; then
4129 have_afalg=yes
4130fi
4131if test "$crypto_afalg" = "yes"
4132then
4133 if test "$have_afalg" != "yes"
4134 then
4135 error_exit "AF_ALG requested but could not be detected"
4136 fi
4137fi
4138
4139
247724cb
MAL
4140##########################################
4141# checks for sanitizers
4142
247724cb
MAL
4143have_asan=no
4144have_ubsan=no
d83414e1
MAL
4145have_asan_iface_h=no
4146have_asan_iface_fiber=no
247724cb
MAL
4147
4148if test "$sanitizers" = "yes" ; then
b9f44da2 4149 write_c_skeleton
247724cb
MAL
4150 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
4151 have_asan=yes
4152 fi
b9f44da2
MAL
4153
4154 # we could use a simple skeleton for flags checks, but this also
4155 # detect the static linking issue of ubsan, see also:
4156 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
4157 cat > $TMPC << EOF
4158#include <stdlib.h>
4159int main(void) {
4160 void *tmp = malloc(10);
f2dfe54c
LB
4161 if (tmp != NULL) {
4162 return *(int *)(tmp + 2);
4163 }
d1abf3fc 4164 return 1;
b9f44da2
MAL
4165}
4166EOF
247724cb
MAL
4167 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
4168 have_ubsan=yes
4169 fi
d83414e1
MAL
4170
4171 if check_include "sanitizer/asan_interface.h" ; then
4172 have_asan_iface_h=yes
4173 fi
4174
4175 cat > $TMPC << EOF
4176#include <sanitizer/asan_interface.h>
4177int main(void) {
4178 __sanitizer_start_switch_fiber(0, 0, 0);
4179 return 0;
4180}
4181EOF
4182 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
4183 have_asan_iface_fiber=yes
4184 fi
247724cb
MAL
4185fi
4186
adc28027
AB
4187##########################################
4188# checks for fuzzer
54c9e41d 4189if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
adc28027 4190 write_c_fuzzer_skeleton
dd016265 4191 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
64ed6f92
PB
4192 have_fuzzer=yes
4193 else
4194 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
4195 exit 1
adc28027
AB
4196 fi
4197fi
4198
0aebab04
LY
4199# Thread sanitizer is, for now, much noisier than the other sanitizers;
4200# keep it separate until that is not the case.
4201if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
4202 error_exit "TSAN is not supported with other sanitiziers."
4203fi
4204have_tsan=no
4205have_tsan_iface_fiber=no
4206if test "$tsan" = "yes" ; then
4207 write_c_skeleton
4208 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
4209 have_tsan=yes
4210 fi
4211 cat > $TMPC << EOF
4212#include <sanitizer/tsan_interface.h>
4213int main(void) {
4214 __tsan_create_fiber(0);
4215 return 0;
4216}
4217EOF
4218 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
4219 have_tsan_iface_fiber=yes
4220 fi
4221fi
4222
675b9b53
MAL
4223##########################################
4224# check for slirp
4225
4226case "$slirp" in
4d34a86b
PB
4227 auto | enabled | internal)
4228 # Simpler to always update submodule, even if not needed.
2d652f24 4229 git_submodules="${git_submodules} slirp"
675b9b53
MAL
4230 ;;
4231esac
4232
b8e0c493
JD
4233# Check for slirp smbd dupport
4234: ${smbd=${SMBD-/usr/sbin/smbd}}
4235if test "$slirp_smbd" != "no" ; then
4236 if test "$mingw32" = "yes" ; then
4237 if test "$slirp_smbd" = "yes" ; then
4238 error_exit "Host smbd not supported on this platform."
4239 fi
4240 slirp_smbd=no
4241 else
4242 slirp_smbd=yes
4243 fi
4244fi
4245
54e7aac0
AK
4246##########################################
4247# check for usable __NR_keyctl syscall
4248
4249if test "$linux" = "yes" ; then
4250
4251 have_keyring=no
4252 cat > $TMPC << EOF
4253#include <errno.h>
4254#include <asm/unistd.h>
4255#include <linux/keyctl.h>
4256#include <unistd.h>
4257int main(void) {
4258 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
4259}
4260EOF
4261 if compile_prog "" "" ; then
4262 have_keyring=yes
4263 fi
4264fi
4265if test "$secret_keyring" != "no"
4266then
b418d265 4267 if test "$have_keyring" = "yes"
54e7aac0
AK
4268 then
4269 secret_keyring=yes
4270 else
4271 if test "$secret_keyring" = "yes"
4272 then
4273 error_exit "syscall __NR_keyctl requested, \
4274but not implemented on your system"
4275 else
4276 secret_keyring=no
4277 fi
4278 fi
4279fi
4280
7e24e92a 4281##########################################
e86ecd4b
JQ
4282# End of CC checks
4283# After here, no more $cc or $ld runs
4284
d83414e1
MAL
4285write_c_skeleton
4286
1d728c39 4287if test "$gcov" = "yes" ; then
bf0e56a3 4288 :
b553a042 4289elif test "$fortify_source" = "yes" ; then
086d5f75
PB
4290 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
4291 debug=no
4292fi
086d5f75
PB
4293
4294case "$ARCH" in
4295alpha)
4296 # Ensure there's only a single GP
4297 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
4298;;
4299esac
4300
4301if test "$gprof" = "yes" ; then
4302 QEMU_CFLAGS="-p $QEMU_CFLAGS"
4303 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
4304fi
a316e378 4305
247724cb 4306if test "$have_asan" = "yes"; then
db5adeaa
PB
4307 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
4308 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
d83414e1
MAL
4309 if test "$have_asan_iface_h" = "no" ; then
4310 echo "ASAN build enabled, but ASAN header missing." \
4311 "Without code annotation, the report may be inferior."
4312 elif test "$have_asan_iface_fiber" = "no" ; then
4313 echo "ASAN build enabled, but ASAN header is too old." \
4314 "Without code annotation, the report may be inferior."
4315 fi
247724cb 4316fi
0aebab04
LY
4317if test "$have_tsan" = "yes" ; then
4318 if test "$have_tsan_iface_fiber" = "yes" ; then
4319 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
4320 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
4321 else
4322 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
4323 fi
4324elif test "$tsan" = "yes" ; then
4325 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
4326fi
247724cb 4327if test "$have_ubsan" = "yes"; then
db5adeaa
PB
4328 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
4329 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
247724cb
MAL
4330fi
4331
3efac6eb 4332##########################################
3efac6eb 4333
0aebab04
LY
4334# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
4335if test "$solaris" = "no" && test "$tsan" = "no"; then
e86ecd4b 4336 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
db5adeaa 4337 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
e86ecd4b
JQ
4338 fi
4339fi
4340
952afb71
BS
4341# Use ASLR, no-SEH and DEP if available
4342if test "$mingw32" = "yes" ; then
cb8baa77
MCA
4343 flags="--no-seh --nxcompat"
4344
4345 # Disable ASLR for debug builds to allow debugging with gdb
4346 if test "$debug" = "no" ; then
4347 flags="--dynamicbase $flags"
4348 fi
4349
4350 for flag in $flags; do
e9a3591f 4351 if ld_has $flag ; then
db5adeaa 4352 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
952afb71
BS
4353 fi
4354 done
4355fi
4356
9d6bc27b
MR
4357# Probe for guest agent support/options
4358
e8ef31a3 4359if [ "$guest_agent" != "no" ]; then
a5125905
LV
4360 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
4361 guest_agent=no
4362 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
e8ef31a3
MT
4363 guest_agent=yes
4364 elif [ "$guest_agent" != yes ]; then
4365 guest_agent=no
4366 else
4367 error_exit "Guest agent is not supported on this platform"
ca35f780 4368 fi
00c705fb 4369fi
ca35f780 4370
b846ab7c 4371# Guest agent Windows MSI package
9d6bc27b 4372
b846ab7c
PB
4373if test "$QEMU_GA_MANUFACTURER" = ""; then
4374 QEMU_GA_MANUFACTURER=QEMU
9d6bc27b 4375fi
b846ab7c
PB
4376if test "$QEMU_GA_DISTRO" = ""; then
4377 QEMU_GA_DISTRO=Linux
9d6bc27b 4378fi
b846ab7c
PB
4379if test "$QEMU_GA_VERSION" = ""; then
4380 QEMU_GA_VERSION=$(cat $source_path/VERSION)
4381fi
4382
4383QEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
9d6bc27b 4384
ca35f780
PB
4385# Mac OS X ships with a broken assembler
4386roms=
e633a5c6
EB
4387if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
4388 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
7000a12e 4389 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
e57218b6 4390 # Different host OS linkers have different ideas about the name of the ELF
c65d5e4e
BS
4391 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
4392 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
4393 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
e57218b6
PM
4394 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
4395 ld_i386_emulation="$emu"
4396 roms="optionrom"
4397 break
4398 fi
4399 done
ca35f780 4400fi
ca35f780 4401
2e33c3f8 4402# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
a5b2afd5 4403# or -march=z10 (which is the lowest architecture level that Clang supports)
9933c305 4404if test "$cpu" = "s390x" ; then
2e33c3f8 4405 write_c_skeleton
a5b2afd5
TH
4406 compile_prog "-march=z900" ""
4407 has_z900=$?
3af448b3 4408 if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then
a5b2afd5
TH
4409 if [ $has_z900 != 0 ]; then
4410 echo "WARNING: Your compiler does not support the z900!"
4411 echo " The s390-ccw bios will only work with guest CPUs >= z10."
4412 fi
2e33c3f8 4413 roms="$roms s390-ccw"
1ef6bfc2
PMD
4414 # SLOF is required for building the s390-ccw firmware on s390x,
4415 # since it is using the libnet code from SLOF for network booting.
2d652f24 4416 git_submodules="${git_submodules} roms/SLOF"
2e33c3f8 4417 fi
9933c305
CB
4418fi
4419
11cde1c8
BD
4420# Check that the C++ compiler exists and works with the C compiler.
4421# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
4422if has $cxx; then
4423 cat > $TMPC <<EOF
4424int c_function(void);
4425int main(void) { return c_function(); }
4426EOF
4427
4428 compile_object
4429
4430 cat > $TMPCXX <<EOF
4431extern "C" {
4432 int c_function(void);
4433}
4434int c_function(void) { return 42; }
4435EOF
4436
4437 update_cxxflags
4438
5770e8af 4439 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
11cde1c8
BD
4440 # C++ compiler $cxx works ok with C compiler $cc
4441 :
4442 else
4443 echo "C++ compiler $cxx does not work with C compiler $cc"
4444 echo "Disabling C++ specific optional code"
4445 cxx=
4446 fi
4447else
4448 echo "No C++ compiler available; disabling C++ specific optional code"
4449 cxx=
4450fi
4451
7d7dbf9d
DS
4452if !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
4453 exit 1
5d91a2ed 4454fi
5d91a2ed 4455
98ec69ac 4456config_host_mak="config-host.mak"
98ec69ac 4457
98ec69ac 4458echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 4459echo >> $config_host_mak
98ec69ac 4460
e6c3b0f7 4461echo all: >> $config_host_mak
cc84d63a 4462echo "GIT=$git" >> $config_host_mak
aef45d51 4463echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
7d7dbf9d 4464echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
804edf29 4465
98ec69ac 4466echo "ARCH=$ARCH" >> $config_host_mak
727e5283 4467
f8393946 4468if test "$debug_tcg" = "yes" ; then
2358a494 4469 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 4470fi
1625af87 4471if test "$strip_opt" = "yes" ; then
52ba784d 4472 echo "STRIP=${strip}" >> $config_host_mak
1625af87 4473fi
7d13299d 4474if test "$bigendian" = "yes" ; then
e2542fe2 4475 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 4476fi
67b915a5 4477if test "$mingw32" = "yes" ; then
98ec69ac 4478 echo "CONFIG_WIN32=y" >> $config_host_mak
d9840e25
TS
4479 if test "$guest_agent_with_vss" = "yes" ; then
4480 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 4481 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
4482 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4483 fi
50cbebb9 4484 if test "$guest_agent_ntddscsi" = "yes" ; then
76dc75ca 4485 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
50cbebb9 4486 fi
b846ab7c
PB
4487 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4488 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4489 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4490 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
210fa556 4491else
35f4df27 4492 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
4493fi
4494
4495if test "$linux" = "yes" ; then
4496 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 4497fi
128ab2ff 4498
83fb7adf 4499if test "$darwin" = "yes" ; then
98ec69ac 4500 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 4501fi
b29fe3ed 4502
ec530c81 4503if test "$solaris" = "yes" ; then
98ec69ac 4504 echo "CONFIG_SOLARIS=y" >> $config_host_mak
ec530c81 4505fi
179cf400
AF
4506if test "$haiku" = "yes" ; then
4507 echo "CONFIG_HAIKU=y" >> $config_host_mak
4508fi
97a847bc 4509if test "$static" = "yes" ; then
98ec69ac 4510 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 4511fi
1ba16968 4512if test "$profiler" = "yes" ; then
2358a494 4513 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 4514fi
c932ce31
PB
4515if test "$want_tools" = "yes" ; then
4516 echo "CONFIG_TOOLS=y" >> $config_host_mak
4517fi
f15bff25
PB
4518if test "$guest_agent" = "yes" ; then
4519 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
4520fi
b8e0c493
JD
4521if test "$slirp_smbd" = "yes" ; then
4522 echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
4523 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4524fi
8a16d273 4525if test "$vde" = "yes" ; then
98ec69ac 4526 echo "CONFIG_VDE=y" >> $config_host_mak
e2ad6f16 4527 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
8a16d273 4528fi
58952137
VM
4529if test "$netmap" = "yes" ; then
4530 echo "CONFIG_NETMAP=y" >> $config_host_mak
4531fi
015a33bd
GA
4532if test "$l2tpv3" = "yes" ; then
4533 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4534fi
4cc600d2
PB
4535if test "$gprof" = "yes" ; then
4536 echo "CONFIG_GPROF=y" >> $config_host_mak
4537fi
2358a494 4538echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 4539for drv in $audio_drv_list; do
1ef1ec2a 4540 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
484e2cc7 4541 echo "$def=y" >> $config_host_mak
0c58ac1c 4542done
478e943f
PB
4543if test "$alsa" = "yes" ; then
4544 echo "CONFIG_ALSA=y" >> $config_host_mak
4545fi
b1149911 4546echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
478e943f
PB
4547echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
4548if test "$libpulse" = "yes" ; then
4549 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
4550fi
b1149911 4551echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
478e943f 4552echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
b1149911
FZ
4553echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
4554echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
4555echo "OSS_LIBS=$oss_libs" >> $config_host_mak
478e943f
PB
4556if test "$libjack" = "yes" ; then
4557 echo "CONFIG_LIBJACK=y" >> $config_host_mak
4558fi
2e445703 4559echo "JACK_LIBS=$jack_libs" >> $config_host_mak
d5631638 4560if test "$audio_win_int" = "yes" ; then
4561 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4562fi
b64ec4e4
FZ
4563echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4564echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
dce512de
CH
4565if test "$xfs" = "yes" ; then
4566 echo "CONFIG_XFS=y" >> $config_host_mak
4567fi
89138857 4568qemu_version=$(head $source_path/VERSION)
2358a494 4569echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 4570echo "SRC_PATH=$source_path" >> $config_host_mak
2b1f35b9 4571echo "TARGET_DIRS=$target_list" >> $config_host_mak
17969268 4572if test "$modules" = "yes"; then
e26110cf
FZ
4573 # $shacmd can generate a hash started with digit, which the compiler doesn't
4574 # like as an symbol. So prefix it with an underscore
89138857 4575 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
17969268
FZ
4576 echo "CONFIG_MODULES=y" >> $config_host_mak
4577fi
bd83c861
CE
4578if test "$module_upgrades" = "yes"; then
4579 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
4580fi
955727d2
CT
4581if test "$have_usbfs" = "yes" ; then
4582 echo "CONFIG_USBFS=y" >> $config_host_mak
4583fi
f876b765
MAL
4584if test "$gio" = "yes" ; then
4585 echo "CONFIG_GIO=y" >> $config_host_mak
4586 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
4587 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
5ecfb76c
PB
4588fi
4589if test "$gdbus_codegen" != "" ; then
25a97a56 4590 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
f876b765 4591fi
a1c5e949 4592echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
277abf15
JV
4593
4594# Work around a system header bug with some kernel/XFS header
4595# versions where they both try to define 'struct fsxattr':
4596# xfs headers will not try to redefine structs from linux headers
4597# if this macro is set.
4598if test "$have_fsxattr" = "yes" ; then
4599 echo "HAVE_FSXATTR=y" >> $config_host_mak
4600fi
1badb709 4601if test "$xen" = "enabled" ; then
6dbd588a 4602 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 4603 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
582ea95f
MAL
4604 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
4605 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
e37630ca 4606fi
5c6c3a6c
CH
4607if test "$linux_aio" = "yes" ; then
4608 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4609fi
5e9be92d
NB
4610if test "$vhost_scsi" = "yes" ; then
4611 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4612fi
af3bba76
PB
4613if test "$vhost_net" = "yes" ; then
4614 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
4615fi
4616if test "$vhost_net_user" = "yes" ; then
56f41de7 4617 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
03ce5744 4618fi
108a6481
CL
4619if test "$vhost_net_vdpa" = "yes" ; then
4620 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
4621fi
042cea27
GA
4622if test "$vhost_crypto" = "yes" ; then
4623 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
4624fi
fc0b9b0e
SH
4625if test "$vhost_vsock" = "yes" ; then
4626 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5fe97d88
SG
4627 if test "$vhost_user" = "yes" ; then
4628 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
4629 fi
fc0b9b0e 4630fi
299e6f19
PB
4631if test "$vhost_kernel" = "yes" ; then
4632 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
4633fi
e6a74868
MAL
4634if test "$vhost_user" = "yes" ; then
4635 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
4636fi
108a6481
CL
4637if test "$vhost_vdpa" = "yes" ; then
4638 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
4639fi
98fc1ada
DDAG
4640if test "$vhost_user_fs" = "yes" ; then
4641 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
4642fi
bf9298b9 4643if test "$iovec" = "yes" ; then
2358a494 4644 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 4645fi
a40161cb
PB
4646if test "$membarrier" = "yes" ; then
4647 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
4648fi
e5b46549
RH
4649if test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then
4650 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4651fi
58d3f3ff
GH
4652
4653if test "$spice_protocol" = "yes" ; then
4654 echo "CONFIG_SPICE_PROTOCOL=y" >> $config_host_mak
4655 echo "SPICE_PROTOCOL_CFLAGS=$spice_protocol_cflags" >> $config_host_mak
4656fi
cd4ec0b4
GH
4657if test "$spice" = "yes" ; then
4658 echo "CONFIG_SPICE=y" >> $config_host_mak
58d3f3ff 4659 echo "SPICE_CFLAGS=$spice_cflags $spice_protocol_cflags" >> $config_host_mak
2634733c 4660 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
cd4ec0b4 4661fi
36707144 4662
da076ffe
GH
4663if test "$opengl" = "yes" ; then
4664 echo "CONFIG_OPENGL=y" >> $config_host_mak
de2d3005 4665 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
da076ffe 4666 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
20ff075b
MW
4667fi
4668
d52c454a
MAL
4669if test "$gbm" = "yes" ; then
4670 echo "CONFIG_GBM=y" >> $config_host_mak
4671 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
4672 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
4673fi
4674
4675
99f2dbd3
LL
4676if test "$avx2_opt" = "yes" ; then
4677 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
4678fi
4679
6b8cd447
RH
4680if test "$avx512f_opt" = "yes" ; then
4681 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
4682fi
4683
83fb7adf 4684# XXX: suppress that
7d3505c5 4685if [ "$bsd" = "yes" ] ; then
2358a494 4686 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
4687fi
4688
3556c233
PB
4689if test "$qom_cast_debug" = "yes" ; then
4690 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
4691fi
d0e2fce5 4692
7c2acc70 4693echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
4694if test "$coroutine_pool" = "yes" ; then
4695 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
4696else
4697 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
4698fi
20ff6c80 4699
7d992e4d
PL
4700if test "$debug_stack_usage" = "yes" ; then
4701 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
4702fi
4703
f0d92b56
LM
4704if test "$crypto_afalg" = "yes" ; then
4705 echo "CONFIG_AF_ALG=y" >> $config_host_mak
4706fi
4707
d83414e1
MAL
4708if test "$have_asan_iface_fiber" = "yes" ; then
4709 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
4710fi
4711
0aebab04
LY
4712if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
4713 echo "CONFIG_TSAN=y" >> $config_host_mak
4714fi
4715
76a347e1
RH
4716if test "$cpuid_h" = "yes" ; then
4717 echo "CONFIG_CPUID_H=y" >> $config_host_mak
4718fi
4719
f540166b
RH
4720if test "$int128" = "yes" ; then
4721 echo "CONFIG_INT128=y" >> $config_host_mak
4722fi
4723
7ebee43e
RH
4724if test "$atomic128" = "yes" ; then
4725 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
4726fi
4727
e6cd4bb5
RH
4728if test "$cmpxchg128" = "yes" ; then
4729 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
4730fi
4731
df79b996
RH
4732if test "$atomic64" = "yes" ; then
4733 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
4734fi
4735
1e6e9aca
RH
4736if test "$getauxval" = "yes" ; then
4737 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
4738fi
4739
b10d49d7 4740if test "$libssh" = "yes" ; then
484e2cc7 4741 echo "CONFIG_LIBSSH=y" >> $config_host_mak
b10d49d7
PT
4742 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
4743 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
0a12ec87
RJ
4744fi
4745
ed1701c6
DDAG
4746if test "$live_block_migration" = "yes" ; then
4747 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
4748fi
4749
3b8acc11 4750if test "$tpm" = "yes"; then
3cae16db 4751 echo 'CONFIG_TPM=y' >> $config_host_mak
3b8acc11
PB
4752fi
4753
5b808275
LV
4754echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
4755if have_backend "nop"; then
6d8a764e 4756 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 4757fi
5b808275 4758if have_backend "simple"; then
6d8a764e
LV
4759 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
4760 # Set the appropriate trace file.
953ffe0f 4761 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 4762fi
ed7f5f1d
PB
4763if have_backend "log"; then
4764 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6d8a764e 4765fi
5b808275 4766if have_backend "ust"; then
6d8a764e 4767 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
a81df1b6 4768 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
6d8a764e 4769fi
5b808275 4770if have_backend "dtrace"; then
6d8a764e
LV
4771 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
4772 if test "$trace_backend_stap" = "yes" ; then
4773 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
4774 fi
c276b17d 4775fi
5b808275 4776if have_backend "ftrace"; then
781e9545
ET
4777 if test "$linux" = "yes" ; then
4778 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 4779 else
21684af0 4780 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
4781 fi
4782fi
0a852417
PD
4783if have_backend "syslog"; then
4784 if test "$posix_syslog" = "yes" ; then
4785 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
4786 else
4787 feature_not_found "syslog(trace backend)" "syslog not available"
4788 fi
4789fi
9410b56c
PS
4790echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
4791
2da776db
MH
4792if test "$rdma" = "yes" ; then
4793 echo "CONFIG_RDMA=y" >> $config_host_mak
392fb643 4794 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
2da776db
MH
4795fi
4796
21ab34c9
MA
4797if test "$pvrdma" = "yes" ; then
4798 echo "CONFIG_PVRDMA=y" >> $config_host_mak
4799fi
4800
a6b1d4c0
CX
4801if test "$replication" = "yes" ; then
4802 echo "CONFIG_REPLICATION=y" >> $config_host_mak
4803fi
4804
6a02c806
SH
4805if test "$have_af_vsock" = "yes" ; then
4806 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
4807fi
4808
ba59fb77
PB
4809if test "$debug_mutex" = "yes" ; then
4810 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
4811fi
e0580342 4812
5c312079
DDAG
4813# Hold two types of flag:
4814# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
4815# a thread we have a handle to
479a5747 4816# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
5c312079 4817# platform
479a5747
RB
4818if test "$pthread_setname_np_w_tid" = "yes" ; then
4819 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
4820 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
4821elif test "$pthread_setname_np_wo_tid" = "yes" ; then
5c312079 4822 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
479a5747 4823 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
5c312079
DDAG
4824fi
4825
2f740136
JC
4826if test "$bochs" = "yes" ; then
4827 echo "CONFIG_BOCHS=y" >> $config_host_mak
4828fi
4829if test "$cloop" = "yes" ; then
4830 echo "CONFIG_CLOOP=y" >> $config_host_mak
4831fi
4832if test "$dmg" = "yes" ; then
4833 echo "CONFIG_DMG=y" >> $config_host_mak
4834fi
4835if test "$qcow1" = "yes" ; then
4836 echo "CONFIG_QCOW1=y" >> $config_host_mak
4837fi
4838if test "$vdi" = "yes" ; then
4839 echo "CONFIG_VDI=y" >> $config_host_mak
4840fi
4841if test "$vvfat" = "yes" ; then
4842 echo "CONFIG_VVFAT=y" >> $config_host_mak
4843fi
4844if test "$qed" = "yes" ; then
4845 echo "CONFIG_QED=y" >> $config_host_mak
4846fi
4847if test "$parallels" = "yes" ; then
4848 echo "CONFIG_PARALLELS=y" >> $config_host_mak
4849fi
195588cc
DC
4850if test "$have_mlockall" = "yes" ; then
4851 echo "HAVE_MLOCKALL=y" >> $config_host_mak
4852fi
adc28027 4853if test "$fuzzing" = "yes" ; then
54c9e41d
AB
4854 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
4855 # needed CFLAGS have already been provided
4856 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
efce01bc
AB
4857 # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the
4858 # compiled code.
54c9e41d 4859 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
efce01bc
AB
4860 # To build non-fuzzer binaries with --enable-fuzzing, link everything with
4861 # fsanitize=fuzzer-no-link. Otherwise, the linker will be unable to bind
4862 # the fuzzer-related callbacks added by instrumentation.
4863 QEMU_LDFLAGS="$QEMU_LDFLAGS -fsanitize=fuzzer-no-link"
4864 # For the actual fuzzer binaries, we need to link against the libfuzzer
4865 # library. Provide the flags for doing this in FUZZ_EXE_LDFLAGS. The meson
4866 # rule for the fuzzer adds these to the link_args. They need to be
4867 # configurable, to support OSS-Fuzz
54c9e41d
AB
4868 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
4869 else
4870 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
4871 fi
adc28027 4872fi
2f740136 4873
40e8c6f4
AB
4874if test "$plugins" = "yes" ; then
4875 echo "CONFIG_PLUGIN=y" >> $config_host_mak
26fffe29
EC
4876 # Copy the export object list to the build dir
4877 if test "$ld_dynamic_list" = "yes" ; then
4878 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
4879 ld_symbols=qemu-plugins-ld.symbols
4880 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
4881 elif test "$ld_exported_symbols_list" = "yes" ; then
4882 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
4883 ld64_symbols=qemu-plugins-ld64.symbols
4884 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
4885 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
4886 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
4887 else
4888 error_exit \
4889 "If \$plugins=yes, either \$ld_dynamic_list or " \
4890 "\$ld_exported_symbols_list should have been set to 'yes'."
4891 fi
40e8c6f4
AB
4892fi
4893
b1863ccc
AB
4894if test -n "$gdb_bin"; then
4895 gdb_version=$($gdb_bin --version | head -n 1)
d6a66c81 4896 if version_ge ${gdb_version##* } 9.1; then
b1863ccc
AB
4897 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
4898 fi
f48e590a
AB
4899fi
4900
54e7aac0
AK
4901if test "$secret_keyring" = "yes" ; then
4902 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
4903fi
4904
98ec69ac 4905echo "ROMS=$roms" >> $config_host_mak
804edf29 4906echo "MAKE=$make" >> $config_host_mak
c886edfb 4907echo "PYTHON=$python" >> $config_host_mak
39d87c8c 4908echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
a5665051 4909echo "MESON=$meson" >> $config_host_mak
09e93326 4910echo "NINJA=$ninja" >> $config_host_mak
804edf29 4911echo "CC=$cc" >> $config_host_mak
433de74c 4912echo "HOST_CC=$host_cc" >> $config_host_mak
a31a8642 4913if $iasl -h > /dev/null 2>&1; then
859aef02 4914 echo "CONFIG_IASL=$iasl" >> $config_host_mak
a31a8642 4915fi
804edf29 4916echo "AR=$ar" >> $config_host_mak
cdbd727c 4917echo "AS=$as" >> $config_host_mak
5f6f0e27 4918echo "CCAS=$ccas" >> $config_host_mak
3dd46c78 4919echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
4920echo "OBJCOPY=$objcopy" >> $config_host_mak
4921echo "LD=$ld" >> $config_host_mak
46eef33b 4922echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 4923echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
11cde1c8 4924echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
a81df1b6
PB
4925echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4926echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
8a99e9a3 4927echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
e57218b6 4928echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
804edf29 4929echo "EXESUF=$EXESUF" >> $config_host_mak
484e2cc7 4930echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
f15bff25 4931echo "LIBS_QGA=$libs_qga" >> $config_host_mak
1d728c39
BS
4932if test "$gcov" = "yes" ; then
4933 echo "CONFIG_GCOV=y" >> $config_host_mak
1d728c39 4934fi
804edf29 4935
adc28027
AB
4936if test "$fuzzing" != "no"; then
4937 echo "CONFIG_FUZZ=y" >> $config_host_mak
adc28027 4938fi
54c9e41d 4939echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
3efac6eb 4940
b767d257
MMG
4941if test "$rng_none" = "yes"; then
4942 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
4943fi
4944
6efd7517
PM
4945# use included Linux headers
4946if test "$linux" = "yes" ; then
a307beb6 4947 mkdir -p linux-headers
6efd7517 4948 case "$cpu" in
c72b26ec 4949 i386|x86_64|x32)
08312a63 4950 linux_arch=x86
6efd7517 4951 ;;
f8378acc 4952 ppc|ppc64|ppc64le)
08312a63 4953 linux_arch=powerpc
6efd7517
PM
4954 ;;
4955 s390x)
08312a63
PM
4956 linux_arch=s390
4957 ;;
1f080313
CF
4958 aarch64)
4959 linux_arch=arm64
4960 ;;
222e7d11
SL
4961 mips64)
4962 linux_arch=mips
4963 ;;
08312a63
PM
4964 *)
4965 # For most CPUs the kernel architecture name and QEMU CPU name match.
4966 linux_arch="$cpu"
6efd7517
PM
4967 ;;
4968 esac
08312a63
PM
4969 # For non-KVM architectures we will not have asm headers
4970 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
4971 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
4972 fi
6efd7517
PM
4973fi
4974
1d14ffa9 4975for target in $target_list; do
fdb75aef
PB
4976 target_dir="$target"
4977 target_name=$(echo $target | cut -d '-' -f 1)
4978 mkdir -p $target_dir
4979 case $target in
4980 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
4981 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
4982 esac
4983done
7d13299d 4984
765686d6 4985echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
fdb75aef
PB
4986if test "$default_targets" = "yes"; then
4987 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
4988fi
a540f158 4989
a99d57bb
WG
4990if test "$numa" = "yes"; then
4991 echo "CONFIG_NUMA=y" >> $config_host_mak
ab318051 4992 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
a99d57bb
WG
4993fi
4994
fd0e6053
JS
4995if test "$ccache_cpp2" = "yes"; then
4996 echo "export CCACHE_CPP2=y" >> $config_host_mak
4997fi
4998
1e4f6065
DB
4999if test "$safe_stack" = "yes"; then
5000 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
5001fi
5002
e29e5c6e
PM
5003# If we're using a separate build tree, set it up now.
5004# DIRS are directories which we simply mkdir in the build tree;
5005# LINKS are things to symlink back into the source tree
5006# (these can be both files and directories).
5007# Caution: do not add files or directories here using wildcards. This
5008# will result in problems later if a new file matching the wildcard is
5009# added to the source tree -- nothing will cause configure to be rerun
5010# so the build tree will be missing the link back to the new file, and
5011# tests might fail. Prefer to keep the relevant files in their own
5012# directory and symlink the directory instead.
09db9b9d
GH
5013# UNLINK is used to remove symlinks from older development versions
5014# that might get into the way when doing "git update" without doing
5015# a "make distclean" in between.
9d49bcf6 5016DIRS="tests tests/tcg tests/qapi-schema tests/qtest/libqos"
1cf4323e 5017DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
b855f8d1 5018DIRS="$DIRS docs docs/interop fsdev scsi"
744a928c 5019DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
8db2a4fd 5020DIRS="$DIRS roms/seabios"
c17a386b 5021DIRS="$DIRS contrib/plugins/"
2038f8c8 5022LINKS="Makefile"
3941996b 5023LINKS="$LINKS tests/tcg/Makefile.target"
ddcf607f 5024LINKS="$LINKS pc-bios/optionrom/Makefile"
e29e5c6e 5025LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8db2a4fd 5026LINKS="$LINKS roms/seabios/Makefile"
e29e5c6e
PM
5027LINKS="$LINKS pc-bios/qemu-icon.bmp"
5028LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
39950353
PM
5029LINKS="$LINKS tests/acceptance tests/data"
5030LINKS="$LINKS tests/qemu-iotests/check"
8f8fd9ed 5031LINKS="$LINKS python"
c17a386b 5032LINKS="$LINKS contrib/plugins/Makefile "
09db9b9d 5033UNLINK="pc-bios/keymaps"
753d11f2
RH
5034for bios_file in \
5035 $source_path/pc-bios/*.bin \
3a631b8e 5036 $source_path/pc-bios/*.elf \
225a9ab8 5037 $source_path/pc-bios/*.lid \
753d11f2
RH
5038 $source_path/pc-bios/*.rom \
5039 $source_path/pc-bios/*.dtb \
e89e33e1 5040 $source_path/pc-bios/*.img \
753d11f2 5041 $source_path/pc-bios/openbios-* \
4e73c781 5042 $source_path/pc-bios/u-boot.* \
26ce90fd 5043 $source_path/pc-bios/edk2-*.fd.bz2 \
753d11f2
RH
5044 $source_path/pc-bios/palcode-*
5045do
e29e5c6e 5046 LINKS="$LINKS pc-bios/$(basename $bios_file)"
d1807a4f
PB
5047done
5048mkdir -p $DIRS
e29e5c6e 5049for f in $LINKS ; do
0f4d8894 5050 if [ -e "$source_path/$f" ]; then
f9245e10
PM
5051 symlink "$source_path/$f" "$f"
5052 fi
d1807a4f 5053done
09db9b9d
GH
5054for f in $UNLINK ; do
5055 if [ -L "$f" ]; then
5056 rm -f "$f"
5057 fi
5058done
1ad2134f 5059
2038f8c8
PB
5060(for i in $cross_cc_vars; do
5061 export $i
5062done
de6d7e6b 5063export target_list source_path use_containers ARCH
2038f8c8
PB
5064$source_path/tests/tcg/configure.sh)
5065
c34ebfdc 5066# temporary config to build submodules
8db2a4fd 5067for rom in seabios; do
c34ebfdc 5068 config_mak=roms/$rom/config.mak
37116c89 5069 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 5070 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
cdbd727c 5071 echo "AS=$as" >> $config_mak
5f6f0e27 5072 echo "CCAS=$ccas" >> $config_mak
c34ebfdc
AL
5073 echo "CC=$cc" >> $config_mak
5074 echo "BCC=bcc" >> $config_mak
3dd46c78 5075 echo "CPP=$cpp" >> $config_mak
c34ebfdc 5076 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 5077 echo "IASL=$iasl" >> $config_mak
c34ebfdc 5078 echo "LD=$ld" >> $config_mak
9f81aeb5 5079 echo "RANLIB=$ranlib" >> $config_mak
c34ebfdc
AL
5080done
5081
a5665051 5082if test "$skip_meson" = no; then
d77e90fa
PB
5083 cross="config-meson.cross.new"
5084 meson_quote() {
47b30835 5085 echo "'$(echo $* | sed "s/ /','/g")'"
d77e90fa
PB
5086 }
5087
5088 echo "# Automatically generated by configure - do not modify" > $cross
5089 echo "[properties]" >> $cross
d1d5e9ee
AB
5090
5091 # unroll any custom device configs
5092 if test -n "$device_archs"; then
5093 for a in $device_archs; do
5094 eval "c=\$devices_${a}"
5095 echo "${a}-softmmu = '$c'" >> $cross
5096 done
5097 fi
5098
d77e90fa
PB
5099 test -z "$cxx" && echo "link_language = 'c'" >> $cross
5100 echo "[built-in options]" >> $cross
5101 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
5102 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
5103 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
5104 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
5105 echo "[binaries]" >> $cross
5106 echo "c = [$(meson_quote $cc)]" >> $cross
5107 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
5108 test -n "$objcc" && echo "objc = [$(meson_quote $objcc)]" >> $cross
5109 echo "ar = [$(meson_quote $ar)]" >> $cross
5110 echo "nm = [$(meson_quote $nm)]" >> $cross
5111 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
5112 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
5113 if has $sdl2_config; then
5114 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
5115 fi
5116 echo "strip = [$(meson_quote $strip)]" >> $cross
5117 echo "windres = [$(meson_quote $windres)]" >> $cross
5118 if test "$cross_compile" = "yes"; then
fc929892 5119 cross_arg="--cross-file config-meson.cross"
fc929892
MAL
5120 echo "[host_machine]" >> $cross
5121 if test "$mingw32" = "yes" ; then
5122 echo "system = 'windows'" >> $cross
fc929892 5123 fi
853b4baf
TH
5124 if test "$linux" = "yes" ; then
5125 echo "system = 'linux'" >> $cross
5126 fi
0ca321ea
JD
5127 if test "$darwin" = "yes" ; then
5128 echo "system = 'darwin'" >> $cross
5129 fi
fc929892 5130 case "$ARCH" in
f6bca9df 5131 i386)
fc929892
MAL
5132 echo "cpu_family = 'x86'" >> $cross
5133 ;;
f8bb7e1c 5134 x86_64|x32)
f6bca9df
JD
5135 echo "cpu_family = 'x86_64'" >> $cross
5136 ;;
fc929892
MAL
5137 ppc64le)
5138 echo "cpu_family = 'ppc64'" >> $cross
5139 ;;
5140 *)
5141 echo "cpu_family = '$ARCH'" >> $cross
5142 ;;
5143 esac
5144 echo "cpu = '$cpu'" >> $cross
5145 if test "$bigendian" = "yes" ; then
5146 echo "endian = 'big'" >> $cross
5147 else
5148 echo "endian = 'little'" >> $cross
5149 fi
d77e90fa 5150 else
fc929892 5151 cross_arg="--native-file config-meson.cross"
d77e90fa
PB
5152 fi
5153 mv $cross config-meson.cross
fc929892 5154
d77e90fa
PB
5155 rm -rf meson-private meson-info meson-logs
5156 unset staticpic
5157 if ! version_ge "$($meson --version)" 0.56.0; then
5158 staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi)
5159 fi
5160 NINJA=$ninja $meson setup \
d17f305a
PB
5161 --prefix "$prefix" \
5162 --libdir "$libdir" \
5163 --libexecdir "$libexecdir" \
5164 --bindir "$bindir" \
5165 --includedir "$includedir" \
5166 --datadir "$datadir" \
5167 --mandir "$mandir" \
5168 --sysconfdir "$sysconfdir" \
16bf7a33 5169 --localedir "$localedir" \
d17f305a
PB
5170 --localstatedir "$local_statedir" \
5171 -Ddocdir="$docdir" \
16bf7a33 5172 -Dqemu_firmwarepath="$firmwarepath" \
73f3aa37 5173 -Dqemu_suffix="$qemu_suffix" \
a5665051
PB
5174 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
5175 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
5176 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
5177 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
da6d48b9 5178 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
a5cb7c5a 5179 ${staticpic:+-Db_staticpic=$staticpic} \
bf0e56a3 5180 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
9e62ba48 5181 -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug \
5f8937d6 5182 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
74a414a1 5183 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \
5f8937d6 5184 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
1b695471 5185 -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
c23d7b4e 5186 -Dlibusb=$libusb -Dsmartcard=$smartcard -Dusb_redir=$usb_redir -Dvte=$vte \
5f8937d6 5187 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
cece116c 5188 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
8c6d4ff4 5189 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
9db405a3 5190 -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \
30045c05 5191 -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
c5b36c25 5192 -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse -Dlibxml2=$libxml2 \
53c22b68 5193 -Dlibdaxctl=$libdaxctl -Dlibpmem=$libpmem -Dlinux_io_uring=$linux_io_uring \
05e391ae 5194 -Dgnutls=$gnutls -Dnettle=$nettle -Dgcrypt=$gcrypt -Dauth_pam=$auth_pam \
727c8bb8 5195 -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \
587d59d6 5196 -Dattr=$attr -Ddefault_devices=$default_devices -Dvirglrenderer=$virglrenderer \
c8d5450b 5197 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
106ad1f9 5198 -Dvhost_user_blk_server=$vhost_user_blk_server -Dmultiprocess=$multiprocess \
46627f41 5199 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek -Dguest_agent_msi=$guest_agent_msi -Dbpf=$bpf\
c87ea116 5200 $(if test "$default_features" = no; then echo "-Dauto_features=disabled"; fi) \
c6fbea47 5201 -Dtcg_interpreter=$tcg_interpreter \
fc929892 5202 $cross_arg \
a5665051
PB
5203 "$PWD" "$source_path"
5204
d77e90fa
PB
5205 if test "$?" -ne 0 ; then
5206 error_exit "meson setup failed"
5207 fi
699d3884
PB
5208else
5209 if test -f meson-private/cmd_line.txt; then
5210 # Adjust old command line options whose type was changed
5211 # Avoids having to use "setup --wipe" when Meson is upgraded
5212 perl -i -ne '
5213 s/^gettext = true$/gettext = auto/;
5214 s/^gettext = false$/gettext = disabled/;
5215 print;' meson-private/cmd_line.txt
5216 fi
a5665051
PB
5217fi
5218
2d838d9b
AB
5219if test -n "${deprecated_features}"; then
5220 echo "Warning, deprecated features enabled."
5221 echo "Please see docs/system/deprecated.rst"
5222 echo " features: ${deprecated_features}"
5223fi
5224
e0447a83
TH
5225# Create list of config switches that should be poisoned in common code...
5226# but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special.
54b0306e
TH
5227target_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null)
5228if test -n "$target_configs_h" ; then
5229 sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \
5230 -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \
5231 $target_configs_h | sort -u > config-poison.h
5232else
5233 :> config-poison.h
5234fi
e0447a83 5235
dc655404
MT
5236# Save the configure command line for later reuse.
5237cat <<EOD >config.status
5238#!/bin/sh
5239# Generated by configure.
5240# Run this file to recreate the current configuration.
5241# Compiler output produced by configure, useful for debugging
5242# configure, is in config.log if it exists.
5243EOD
e811da7f
DB
5244
5245preserve_env() {
5246 envname=$1
5247
5248 eval envval=\$$envname
5249
5250 if test -n "$envval"
5251 then
5252 echo "$envname='$envval'" >> config.status
5253 echo "export $envname" >> config.status
5254 else
5255 echo "unset $envname" >> config.status
5256 fi
5257}
5258
5259# Preserve various env variables that influence what
5260# features/build target configure will detect
5261preserve_env AR
5262preserve_env AS
5263preserve_env CC
5264preserve_env CPP
5265preserve_env CXX
5266preserve_env INSTALL
5267preserve_env LD
5268preserve_env LD_LIBRARY_PATH
5269preserve_env LIBTOOL
5270preserve_env MAKE
5271preserve_env NM
5272preserve_env OBJCOPY
5273preserve_env PATH
5274preserve_env PKG_CONFIG
5275preserve_env PKG_CONFIG_LIBDIR
5276preserve_env PKG_CONFIG_PATH
5277preserve_env PYTHON
e811da7f
DB
5278preserve_env SDL2_CONFIG
5279preserve_env SMBD
5280preserve_env STRIP
5281preserve_env WINDRES
5282
dc655404 5283printf "exec" >>config.status
a5665051 5284for i in "$0" "$@"; do
835af899 5285 test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
a5665051 5286done
cf7cc929 5287echo ' "$@"' >>config.status
dc655404
MT
5288chmod +x config.status
5289
8cd05ab6 5290rm -r "$TMPDIR1"