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