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