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