]> git.proxmox.com Git - mirror_qemu.git/blame - configure
accel/tcg: Restrict TCGCPUOps::tlb_fill() to sysemu
[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 144do_cc() {
4dba2789 145 do_compiler "$cc" $CPU_CFLAGS "$@"
9c83ffd8
PM
146}
147
148do_cxx() {
4dba2789 149 do_compiler "$cxx" $CPU_CFLAGS "$@"
9c83ffd8
PM
150}
151
00849b92
RH
152# Append $2 to the variable named $1, with space separation
153add_to() {
154 eval $1=\${$1:+\"\$$1 \"}\$2
155}
156
9c83ffd8
PM
157update_cxxflags() {
158 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
159 # options which some versions of GCC's C++ compiler complain about
160 # because they only make sense for C programs.
53422040 161 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
8a9d3d56 162 CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu11/-std=gnu++11/)
9c83ffd8
PM
163 for arg in $QEMU_CFLAGS; do
164 case $arg in
165 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
166 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
167 ;;
168 *)
169 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
170 ;;
171 esac
172 done
173}
174
52166aa0 175compile_object() {
fd0e6053 176 local_cflags="$1"
5770e8af 177 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
52166aa0
JQ
178}
179
180compile_prog() {
181 local_cflags="$1"
182 local_ldflags="$2"
5770e8af
PB
183 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
184 $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
52166aa0
JQ
185}
186
11568d6d
PB
187# symbolically link $1 to $2. Portable version of "ln -sf".
188symlink() {
72b8b5a1 189 rm -rf "$2"
ec5b06d7 190 mkdir -p "$(dirname "$2")"
72b8b5a1 191 ln -s "$1" "$2"
11568d6d
PB
192}
193
0dba6195
LM
194# check whether a command is available to this shell (may be either an
195# executable or a builtin)
196has() {
197 type "$1" >/dev/null 2>&1
198}
199
0a01d76f 200version_ge () {
2df52b9b
AB
201 local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ')
202 local_ver2=$(echo "$2" | tr . ' ')
0a01d76f
MAL
203 while true; do
204 set x $local_ver1
205 local_first=${2-0}
c44a33e2
SG
206 # 'shift 2' if $2 is set, or 'shift' if $2 is not set
207 shift ${2:+2}
0a01d76f
MAL
208 local_ver1=$*
209 set x $local_ver2
210 # the second argument finished, the first must be greater or equal
211 test $# = 1 && return 0
212 test $local_first -lt $2 && return 1
213 test $local_first -gt $2 && return 0
c44a33e2 214 shift ${2:+2}
0a01d76f
MAL
215 local_ver2=$*
216 done
217}
218
3b6b7550
PB
219glob() {
220 eval test -z '"${1#'"$2"'}"'
221}
222
e9a3591f
CB
223ld_has() {
224 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
225}
226
4ace32e2
AO
227if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
228then
229 error_exit "main directory cannot contain spaces nor colons"
230fi
231
14211825 232# default parameters
2ff6b91e 233cpu=""
a31a8642 234iasl="iasl"
1e43adfc 235interp_prefix="/usr/gnemul/qemu-%M"
43ce4dfe 236static="no"
3812c0c4 237cross_compile="no"
7d13299d 238cross_prefix=""
87430d5b 239audio_drv_list="default"
b64ec4e4
FZ
240block_drv_rw_whitelist=""
241block_drv_ro_whitelist=""
e5f05f8c 242block_drv_whitelist_tools="no"
e49d021e 243host_cc="cc"
957f1f99 244libs_qga=""
5bc62e01 245debug_info="yes"
cdad781d 246lto="false"
63678e17 247stack_protector=""
1e4f6065 248safe_stack=""
afc3a8f9 249use_containers="yes"
f2385398 250gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
ac0df51d 251
92712822
DB
252if test -e "$source_path/.git"
253then
7d7dbf9d 254 git_submodules_action="update"
92712822 255else
7d7dbf9d 256 git_submodules_action="ignore"
92712822 257fi
2d652f24
PB
258
259git_submodules="ui/keycodemapdb"
cc84d63a 260git="git"
ac0df51d 261
afb63ebd
SW
262# Don't accept a target_list environment variable.
263unset target_list
447e133f 264unset target_list_exclude
377529c0
PB
265
266# Default value for a variable defining feature "foo".
267# * foo="no" feature will only be used if --enable-foo arg is given
268# * foo="" feature will be searched for, and if found, will be used
269# unless --disable-foo is given
270# * foo="yes" this value will only be set by --enable-foo flag.
271# feature will searched for,
272# if not found, configure exits with error
273#
274# Always add --enable-foo and --disable-foo command line args.
275# Distributions want to ensure that several features are compiled in, and it
276# is impossible without a --enable-foo that exits if a feature is not found.
277
c87ea116
AB
278default_feature=""
279# parse CC options second
280for opt do
281 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
282 case "$opt" in
283 --without-default-features)
284 default_feature="no"
285 ;;
286 esac
287done
288
c87ea116 289xen_ctrl_version="$default_feature"
c87ea116 290xfs="$default_feature"
c87ea116 291membarrier="$default_feature"
0848f8ac 292vhost_kernel="$default_feature"
c87ea116
AB
293vhost_net="$default_feature"
294vhost_crypto="$default_feature"
295vhost_scsi="$default_feature"
296vhost_vsock="$default_feature"
d88618f7 297vhost_user="no"
c87ea116 298vhost_user_fs="$default_feature"
0848f8ac 299vhost_vdpa="$default_feature"
c87ea116
AB
300rdma="$default_feature"
301pvrdma="$default_feature"
377529c0
PB
302gprof="no"
303debug_tcg="no"
377529c0 304debug="no"
247724cb 305sanitizers="no"
0aebab04 306tsan="no"
c87ea116 307fortify_source="$default_feature"
377529c0 308strip_opt="yes"
377529c0 309mingw32="no"
1d728c39 310gcov="no"
c7328271 311EXESUF=""
17969268 312modules="no"
bd83c861 313module_upgrades="no"
377529c0 314prefix="/usr/local"
10ff82d1 315qemu_suffix="qemu"
377529c0
PB
316bsd="no"
317linux="no"
318solaris="no"
319profiler="no"
377529c0
PB
320softmmu="yes"
321linux_user="no"
377529c0 322bsd_user="no"
377529c0 323pkgversion=""
40d6444e 324pie=""
3556c233 325qom_cast_debug="yes"
baf86d6b 326trace_backends="log"
377529c0 327trace_file="trace"
c87ea116 328opengl="$default_feature"
5dd89908 329cpuid_h="no"
c87ea116 330avx2_opt="$default_feature"
c87ea116 331guest_agent="$default_feature"
d9840e25 332guest_agent_with_vss="no"
50cbebb9 333guest_agent_ntddscsi="no"
c87ea116 334vss_win32_sdk="$default_feature"
d9840e25 335win_sdk="no"
c87ea116 336want_tools="$default_feature"
519175a2 337coroutine=""
c87ea116 338coroutine_pool="$default_feature"
7d992e4d 339debug_stack_usage="no"
f0d92b56 340crypto_afalg="no"
a1c5e949 341tls_priority="NORMAL"
c87ea116
AB
342tpm="$default_feature"
343libssh="$default_feature"
344live_block_migration=${default_feature:-yes}
345numa="$default_feature"
c87ea116
AB
346replication=${default_feature:-yes}
347bochs=${default_feature:-yes}
348cloop=${default_feature:-yes}
349dmg=${default_feature:-yes}
350qcow1=${default_feature:-yes}
351vdi=${default_feature:-yes}
352vvfat=${default_feature:-yes}
353qed=${default_feature:-yes}
354parallels=${default_feature:-yes}
ba59fb77 355debug_mutex="no"
ba4dd2aa 356plugins="$default_feature"
b767d257 357rng_none="no"
c87ea116 358secret_keyring="$default_feature"
a5665051 359meson=""
3b4da132 360meson_args=""
48328880 361ninja=""
3b4da132 362gio="$default_feature"
a5665051 363skip_meson=no
b8e0c493 364slirp_smbd="$default_feature"
377529c0 365
3b4da132
PB
366# The following Meson options are handled manually (still they
367# are included in the automatically generated help message)
368
369# 1. Track which submodules are needed
370capstone="auto"
371fdt="auto"
372slirp="auto"
373
374# 2. Support --with/--without option
375default_devices="true"
376
377# 3. Automatically enable/disable other options
378tcg="enabled"
379cfi="false"
380
381# 4. Detection partly done in configure
382xen=${default_feature:+disabled}
898be3e0 383
c87ea116 384# parse CC options second
ac0df51d 385for opt do
89138857 386 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
ac0df51d
AL
387 case "$opt" in
388 --cross-prefix=*) cross_prefix="$optarg"
3812c0c4 389 cross_compile="yes"
ac0df51d 390 ;;
3d8df640 391 --cc=*) CC="$optarg"
ac0df51d 392 ;;
83f73fce
TS
393 --cxx=*) CXX="$optarg"
394 ;;
2ff6b91e
JQ
395 --cpu=*) cpu="$optarg"
396 ;;
de385287 397 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
db5adeaa 398 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
e2a2ed06 399 ;;
11cde1c8 400 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
11cde1c8 401 ;;
db5adeaa 402 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
f9943cd5 403 EXTRA_LDFLAGS="$optarg"
e2a2ed06 404 ;;
5bc62e01
GH
405 --enable-debug-info) debug_info="yes"
406 ;;
407 --disable-debug-info) debug_info="no"
408 ;;
d75402b5
AB
409 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
410 ;;
d422b2bc
AB
411 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
412 eval "cross_cc_cflags_${cc_arch}=\$optarg"
2038f8c8 413 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
d422b2bc 414 ;;
d75402b5 415 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
2038f8c8 416 cc_archs="$cc_archs $cc_arch"
d75402b5 417 eval "cross_cc_${cc_arch}=\$optarg"
2038f8c8 418 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
d75402b5 419 ;;
ac0df51d
AL
420 esac
421done
ac0df51d
AL
422# OS specific
423# Using uname is really, really broken. Once we have the right set of checks
93148aa5 424# we can eliminate its usage altogether.
ac0df51d 425
e49d021e
PM
426# Preferred compiler:
427# ${CC} (if set)
428# ${cross_prefix}gcc (if cross-prefix specified)
429# system compiler
430if test -z "${CC}${cross_prefix}"; then
431 cc="$host_cc"
432else
433 cc="${CC-${cross_prefix}gcc}"
434fi
435
83f73fce
TS
436if test -z "${CXX}${cross_prefix}"; then
437 cxx="c++"
438else
439 cxx="${CXX-${cross_prefix}g++}"
440fi
441
b3198cc2 442ar="${AR-${cross_prefix}ar}"
cdbd727c 443as="${AS-${cross_prefix}as}"
5f6f0e27 444ccas="${CCAS-$cc}"
3dd46c78 445cpp="${CPP-$cc -E}"
b3198cc2
SY
446objcopy="${OBJCOPY-${cross_prefix}objcopy}"
447ld="${LD-${cross_prefix}ld}"
9f81aeb5 448ranlib="${RANLIB-${cross_prefix}ranlib}"
4852ee95 449nm="${NM-${cross_prefix}nm}"
b3198cc2
SY
450strip="${STRIP-${cross_prefix}strip}"
451windres="${WINDRES-${cross_prefix}windres}"
17884d7b
ST
452pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
453query_pkg_config() {
454 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
455}
456pkg_config=query_pkg_config
47c03744 457sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
ac0df51d 458
be17dc90 459# default flags for all hosts
2d31515b
PM
460# We use -fwrapv to tell the compiler that we require a C dialect where
461# left shift of signed integers is well defined and has the expected
462# 2s-complement style results. (Both clang and gcc agree that it
463# provides these semantics.)
086d5f75
PB
464QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
465QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
c95e3080 466QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
be17dc90 467QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
5770e8af
PB
468
469# Flags that are needed during configure but later taken care of by Meson
8a9d3d56 470CONFIGURE_CFLAGS="-std=gnu11 -Wall"
5770e8af 471CONFIGURE_LDFLAGS=
086d5f75 472
be17dc90 473
ac0df51d
AL
474check_define() {
475cat > $TMPC <<EOF
476#if !defined($1)
fd786e1a 477#error $1 not defined
ac0df51d
AL
478#endif
479int main(void) { return 0; }
480EOF
52166aa0 481 compile_object
ac0df51d
AL
482}
483
307119e7
GH
484check_include() {
485cat > $TMPC <<EOF
486#include <$1>
487int main(void) { return 0; }
488EOF
489 compile_object
490}
491
93b25869
JS
492write_c_skeleton() {
493 cat > $TMPC <<EOF
494int main(void) { return 0; }
495EOF
496}
497
bbea4050
PM
498if check_define __linux__ ; then
499 targetos="Linux"
500elif check_define _WIN32 ; then
501 targetos='MINGW32'
502elif check_define __OpenBSD__ ; then
503 targetos='OpenBSD'
504elif check_define __sun__ ; then
505 targetos='SunOS'
506elif check_define __HAIKU__ ; then
507 targetos='Haiku'
951fedfc
PM
508elif check_define __FreeBSD__ ; then
509 targetos='FreeBSD'
510elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
511 targetos='GNU/kFreeBSD'
512elif check_define __DragonFly__ ; then
513 targetos='DragonFly'
514elif check_define __NetBSD__; then
515 targetos='NetBSD'
516elif check_define __APPLE__; then
517 targetos='Darwin'
bbea4050 518else
951fedfc
PM
519 # This is a fatal error, but don't report it yet, because we
520 # might be going to just print the --help text, or it might
521 # be the result of a missing compiler.
522 targetos='bogus'
bbea4050
PM
523fi
524
525# Some host OSes need non-standard checks for which CPU to use.
526# Note that these checks are broken for cross-compilation: if you're
527# cross-compiling to one of these OSes then you'll need to specify
528# the correct CPU with the --cpu option.
529case $targetos in
bbea4050 530SunOS)
89138857 531 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
bbea4050
PM
532 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
533 cpu="x86_64"
534 fi
535esac
536
2ff6b91e
JQ
537if test ! -z "$cpu" ; then
538 # command line argument
539 :
540elif check_define __i386__ ; then
ac0df51d
AL
541 cpu="i386"
542elif check_define __x86_64__ ; then
c72b26ec
RH
543 if check_define __ILP32__ ; then
544 cpu="x32"
545 else
546 cpu="x86_64"
547 fi
3aa9bd6c 548elif check_define __sparc__ ; then
3aa9bd6c
BS
549 if check_define __arch64__ ; then
550 cpu="sparc64"
551 else
552 cpu="sparc"
553 fi
fdf7ed96 554elif check_define _ARCH_PPC ; then
555 if check_define _ARCH_PPC64 ; then
f8378acc
RH
556 if check_define _LITTLE_ENDIAN ; then
557 cpu="ppc64le"
558 else
559 cpu="ppc64"
560 fi
fdf7ed96 561 else
562 cpu="ppc"
563 fi
afa05235
AJ
564elif check_define __mips__ ; then
565 cpu="mips"
d66ed0ea
AJ
566elif check_define __s390__ ; then
567 if check_define __s390x__ ; then
568 cpu="s390x"
569 else
570 cpu="s390"
571 fi
c4f80543 572elif check_define __riscv ; then
ba0e7333 573 cpu="riscv"
21d89f84
PM
574elif check_define __arm__ ; then
575 cpu="arm"
1f080313
CF
576elif check_define __aarch64__ ; then
577 cpu="aarch64"
ac0df51d 578else
89138857 579 cpu=$(uname -m)
ac0df51d
AL
580fi
581
359bc95d
PM
582ARCH=
583# Normalise host CPU name and set ARCH.
584# Note that this case should only have supported host CPUs, not guests.
7d13299d 585case "$cpu" in
ba0e7333 586 ppc|ppc64|s390x|sparc64|x32|riscv)
898be3e0 587 ;;
f8378acc
RH
588 ppc64le)
589 ARCH="ppc64"
f8378acc 590 ;;
7d13299d 591 i386|i486|i586|i686|i86pc|BePC)
97a847bc 592 cpu="i386"
7d13299d 593 ;;
aaa5fa14
AJ
594 x86_64|amd64)
595 cpu="x86_64"
596 ;;
21d89f84
PM
597 armv*b|armv*l|arm)
598 cpu="arm"
7d13299d 599 ;;
1f080313
CF
600 aarch64)
601 cpu="aarch64"
602 ;;
afa05235
AJ
603 mips*)
604 cpu="mips"
605 ;;
3142255c 606 sparc|sun4[cdmuv])
ae228531
FB
607 cpu="sparc"
608 ;;
7d13299d 609 *)
359bc95d
PM
610 # This will result in either an error or falling back to TCI later
611 ARCH=unknown
7d13299d
FB
612 ;;
613esac
359bc95d
PM
614if test -z "$ARCH"; then
615 ARCH="$cpu"
616fi
e2d52ad3 617
7d13299d 618# OS specific
0dbfc675 619
7d13299d 620case $targetos in
67b915a5 621MINGW32*)
0dbfc675 622 mingw32="yes"
898be3e0 623 supported_os="yes"
9b8e4298 624 plugins="no"
fb648e9c 625 pie="no"
67b915a5 626;;
5c40d2bd 627GNU/kFreeBSD)
a167ba50 628 bsd="yes"
5c40d2bd 629;;
7d3505c5 630FreeBSD)
0dbfc675 631 bsd="yes"
e2a74729 632 bsd_user="yes"
0db4a067 633 make="${MAKE-gmake}"
f01576f1 634 # needed for kinfo_getvmmap(3) in libutil.h
7d3505c5 635;;
c5e97233 636DragonFly)
0dbfc675 637 bsd="yes"
0db4a067 638 make="${MAKE-gmake}"
c5e97233 639;;
7d3505c5 640NetBSD)
0dbfc675 641 bsd="yes"
0db4a067 642 make="${MAKE-gmake}"
7d3505c5
FB
643;;
644OpenBSD)
0dbfc675 645 bsd="yes"
0db4a067 646 make="${MAKE-gmake}"
7d3505c5 647;;
83fb7adf 648Darwin)
0dbfc675
JQ
649 bsd="yes"
650 darwin="yes"
a0b7cf6b
PM
651 # Disable attempts to use ObjectiveC features in os/object.h since they
652 # won't work when we're compiling with gcc as a C compiler.
653 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
83fb7adf 654;;
ec530c81 655SunOS)
0dbfc675 656 solaris="yes"
0db4a067 657 make="${MAKE-gmake}"
e2d8830e 658 smbd="${SMBD-/usr/sfw/sbin/smbd}"
d741429a
BS
659# needed for CMSG_ macros in sys/socket.h
660 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
661# needed for TIOCWIN* defines in termios.h
662 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
86b2bd93 663;;
179cf400
AF
664Haiku)
665 haiku="yes"
b8ee198d
RZ
666 pie="no"
667 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC $QEMU_CFLAGS"
179cf400 668;;
898be3e0 669Linux)
0dbfc675
JQ
670 linux="yes"
671 linux_user="yes"
c87ea116 672 vhost_user=${default_feature:-yes}
898be3e0 673;;
7d13299d
FB
674esac
675
0db4a067 676: ${make=${MAKE-make}}
b6daf4d3 677
faf44142
DB
678# We prefer python 3.x. A bare 'python' is traditionally
679# python 2.x, but some distros have it as python 3.x, so
ddf90699 680# we check that too
faf44142 681python=
0a01d76f 682explicit_python=no
ddf90699 683for binary in "${PYTHON-python3}" python
faf44142
DB
684do
685 if has "$binary"
686 then
95c5f2de 687 python=$(command -v "$binary")
faf44142
DB
688 break
689 fi
690done
903458c8 691
903458c8 692
39d87c8c
AB
693# Check for ancillary tools used in testing
694genisoimage=
3df437c7 695for binary in genisoimage mkisofs
39d87c8c
AB
696do
697 if has $binary
698 then
699 genisoimage=$(command -v "$binary")
700 break
701 fi
702done
703
3c4a4d0d
PM
704# Default objcc to clang if available, otherwise use CC
705if has clang; then
706 objcc=clang
707else
708 objcc="$cc"
709fi
710
3457a3f8 711if test "$mingw32" = "yes" ; then
3457a3f8 712 EXESUF=".exe"
78e9d4ad 713 # MinGW needs -mthreads for TLS and macro _MT.
5770e8af 714 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
93b25869 715 write_c_skeleton;
d17f305a 716 prefix="/qemu"
77433a5f 717 qemu_suffix=""
105fad6b 718 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
3457a3f8
JQ
719fi
720
487fefdb 721werror=""
85aa5189 722
61d63097
PB
723. $source_path/scripts/meson-buildoptions.sh
724
725meson_options=
726meson_option_parse() {
727 meson_options="$meson_options $(_meson_option_parse "$@")"
728 if test $? -eq 1; then
729 echo "ERROR: unknown option $1"
730 echo "Try '$0 --help' for more information"
731 exit 1
732 fi
733}
734
7d13299d 735for opt do
89138857 736 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
7d13299d 737 case "$opt" in
2efc3265
FB
738 --help|-h) show_help=yes
739 ;;
99123e13
MF
740 --version|-V) exec cat $source_path/VERSION
741 ;;
b1a550a0 742 --prefix=*) prefix="$optarg"
7d13299d 743 ;;
b1a550a0 744 --interp-prefix=*) interp_prefix="$optarg"
32ce6337 745 ;;
ac0df51d 746 --cross-prefix=*)
7d13299d 747 ;;
ac0df51d 748 --cc=*)
7d13299d 749 ;;
b1a550a0 750 --host-cc=*) host_cc="$optarg"
83469015 751 ;;
83f73fce
TS
752 --cxx=*)
753 ;;
e007dbec
MT
754 --iasl=*) iasl="$optarg"
755 ;;
3c4a4d0d
PM
756 --objcc=*) objcc="$optarg"
757 ;;
b1a550a0 758 --make=*) make="$optarg"
7d13299d 759 ;;
b6daf4d3 760 --install=*)
6a882643 761 ;;
0a01d76f 762 --python=*) python="$optarg" ; explicit_python=yes
c886edfb 763 ;;
2eb054c2
PM
764 --sphinx-build=*) sphinx_build="$optarg"
765 ;;
a5665051
PB
766 --skip-meson) skip_meson=yes
767 ;;
768 --meson=*) meson="$optarg"
769 ;;
48328880
PB
770 --ninja=*) ninja="$optarg"
771 ;;
e2d8830e
BS
772 --smbd=*) smbd="$optarg"
773 ;;
e2a2ed06 774 --extra-cflags=*)
7d13299d 775 ;;
11cde1c8
BD
776 --extra-cxxflags=*)
777 ;;
e2a2ed06 778 --extra-ldflags=*)
7d13299d 779 ;;
5bc62e01
GH
780 --enable-debug-info)
781 ;;
782 --disable-debug-info)
783 ;;
d75402b5
AB
784 --cross-cc-*)
785 ;;
17969268
FZ
786 --enable-modules)
787 modules="yes"
3aa88b31
SH
788 ;;
789 --disable-modules)
790 modules="no"
17969268 791 ;;
bd83c861
CE
792 --disable-module-upgrades) module_upgrades="no"
793 ;;
794 --enable-module-upgrades) module_upgrades="yes"
795 ;;
2ff6b91e 796 --cpu=*)
7d13299d 797 ;;
b1a550a0 798 --target-list=*) target_list="$optarg"
447e133f
AB
799 if test "$target_list_exclude"; then
800 error_exit "Can't mix --target-list with --target-list-exclude"
801 fi
802 ;;
803 --target-list-exclude=*) target_list_exclude="$optarg"
804 if test "$target_list"; then
805 error_exit "Can't mix --target-list-exclude with --target-list"
806 fi
de83cd02 807 ;;
74242e0f 808 --with-trace-file=*) trace_file="$optarg"
9410b56c 809 ;;
7bc3ca7f 810 --with-default-devices) default_devices="true"
f3494749 811 ;;
7bc3ca7f 812 --without-default-devices) default_devices="false"
f3494749 813 ;;
d1d5e9ee
AB
814 --with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
815 ;;
816 --with-devices-*) device_arch=${opt#--with-devices-};
817 device_arch=${device_arch%%=*}
818 cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak
819 if test -f "$cf"; then
820 device_archs="$device_archs $device_arch"
821 eval "devices_${device_arch}=\$optarg"
822 else
823 error_exit "File $cf does not exist"
824 fi
825 ;;
c87ea116
AB
826 --without-default-features) # processed above
827 ;;
7d13299d
FB
828 --enable-gprof) gprof="yes"
829 ;;
1d728c39
BS
830 --enable-gcov) gcov="yes"
831 ;;
79427693
LM
832 --static)
833 static="yes"
17884d7b 834 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
43ce4dfe 835 ;;
0b24e75f
PB
836 --mandir=*) mandir="$optarg"
837 ;;
838 --bindir=*) bindir="$optarg"
839 ;;
3aa5d2be
AL
840 --libdir=*) libdir="$optarg"
841 ;;
8bf188aa
MT
842 --libexecdir=*) libexecdir="$optarg"
843 ;;
0f94d6da
AL
844 --includedir=*) includedir="$optarg"
845 ;;
528ae5b8 846 --datadir=*) datadir="$optarg"
0b24e75f 847 ;;
77433a5f 848 --with-suffix=*) qemu_suffix="$optarg"
023d3d67 849 ;;
c6502638 850 --docdir=*) docdir="$optarg"
0b24e75f 851 ;;
fe0038be
PB
852 --localedir=*) localedir="$optarg"
853 ;;
ca2fb938 854 --sysconfdir=*) sysconfdir="$optarg"
07381cc1 855 ;;
785c23ae
LC
856 --localstatedir=*) local_statedir="$optarg"
857 ;;
3d5eecab
GH
858 --firmwarepath=*) firmwarepath="$optarg"
859 ;;
181ce1d0
OH
860 --host=*|--build=*|\
861 --disable-dependency-tracking|\
785c23ae 862 --sbindir=*|--sharedstatedir=*|\
fe0038be 863 --oldincludedir=*|--datarootdir=*|--infodir=*|\
023ddd74
MF
864 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
865 # These switches are silently ignored, for compatibility with
866 # autoconf-generated configure scripts. This allows QEMU's
867 # configure to be used by RPM and similar macros that set
868 # lots of directory switches by default.
869 ;;
3556c233
PB
870 --disable-qom-cast-debug) qom_cast_debug="no"
871 ;;
872 --enable-qom-cast-debug) qom_cast_debug="yes"
873 ;;
0c58ac1c 874 --audio-drv-list=*) audio_drv_list="$optarg"
102a52e4 875 ;;
89138857 876 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
b64ec4e4 877 ;;
89138857 878 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
eb852011 879 ;;
e5f05f8c
KW
880 --enable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="yes"
881 ;;
882 --disable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="no"
883 ;;
f8393946
AJ
884 --enable-debug-tcg) debug_tcg="yes"
885 ;;
886 --disable-debug-tcg) debug_tcg="no"
887 ;;
f3d08ee6
PB
888 --enable-debug)
889 # Enable debugging options that aren't excessively noisy
890 debug_tcg="yes"
1fcc6d42 891 debug_mutex="yes"
f3d08ee6
PB
892 debug="yes"
893 strip_opt="no"
b553a042 894 fortify_source="no"
f3d08ee6 895 ;;
247724cb
MAL
896 --enable-sanitizers) sanitizers="yes"
897 ;;
898 --disable-sanitizers) sanitizers="no"
899 ;;
0aebab04
LY
900 --enable-tsan) tsan="yes"
901 ;;
902 --disable-tsan) tsan="no"
903 ;;
1625af87
AL
904 --disable-strip) strip_opt="no"
905 ;;
4d34a86b 906 --disable-slirp) slirp="disabled"
1d14ffa9 907 ;;
fd6fc214
PB
908 --enable-slirp) slirp="enabled"
909 ;;
4d34a86b 910 --enable-slirp=git) slirp="internal"
7c57bdd8 911 ;;
03a3c0b3 912 --enable-slirp=*) slirp="$optarg"
675b9b53 913 ;;
1badb709 914 --disable-xen) xen="disabled"
e37630ca 915 ;;
1badb709 916 --enable-xen) xen="enabled"
fc321b4b 917 ;;
1badb709 918 --disable-tcg) tcg="disabled"
d1a14257 919 plugins="no"
b3f6ea7e 920 ;;
1badb709 921 --enable-tcg) tcg="enabled"
b3f6ea7e 922 ;;
05c2a3e7
FB
923 --enable-profiler) profiler="yes"
924 ;;
cad25d69 925 --disable-system) softmmu="no"
0a8e90f4 926 ;;
cad25d69 927 --enable-system) softmmu="yes"
0a8e90f4 928 ;;
0953a80f
ZA
929 --disable-user)
930 linux_user="no" ;
931 bsd_user="no" ;
0953a80f
ZA
932 ;;
933 --enable-user) ;;
831b7825 934 --disable-linux-user) linux_user="no"
0a8e90f4 935 ;;
831b7825
TS
936 --enable-linux-user) linux_user="yes"
937 ;;
84778508
BS
938 --disable-bsd-user) bsd_user="no"
939 ;;
940 --enable-bsd-user) bsd_user="yes"
941 ;;
40d6444e 942 --enable-pie) pie="yes"
34005a00 943 ;;
40d6444e 944 --disable-pie) pie="no"
34005a00 945 ;;
85aa5189
FB
946 --enable-werror) werror="yes"
947 ;;
948 --disable-werror) werror="no"
949 ;;
cdad781d
DB
950 --enable-lto) lto="true"
951 ;;
952 --disable-lto) lto="false"
953 ;;
63678e17
SN
954 --enable-stack-protector) stack_protector="yes"
955 ;;
956 --disable-stack-protector) stack_protector="no"
957 ;;
1e4f6065
DB
958 --enable-safe-stack) safe_stack="yes"
959 ;;
960 --disable-safe-stack) safe_stack="no"
961 ;;
9e62ba48
DB
962 --enable-cfi)
963 cfi="true";
964 lto="true";
965 ;;
966 --disable-cfi) cfi="false"
967 ;;
fbb4121d 968 --disable-fdt) fdt="disabled"
2df87df7 969 ;;
fbb4121d
PB
970 --enable-fdt) fdt="enabled"
971 ;;
972 --enable-fdt=git) fdt="internal"
973 ;;
03a3c0b3 974 --enable-fdt=*) fdt="$optarg"
2df87df7 975 ;;
a40161cb
PB
976 --disable-membarrier) membarrier="no"
977 ;;
978 --enable-membarrier) membarrier="yes"
979 ;;
7e563bfb 980 --with-pkgversion=*) pkgversion="$optarg"
4a19f1ec 981 ;;
519175a2
AB
982 --with-coroutine=*) coroutine="$optarg"
983 ;;
70c60c08
SH
984 --disable-coroutine-pool) coroutine_pool="no"
985 ;;
986 --enable-coroutine-pool) coroutine_pool="yes"
987 ;;
7d992e4d
PL
988 --enable-debug-stack-usage) debug_stack_usage="yes"
989 ;;
f0d92b56
LM
990 --enable-crypto-afalg) crypto_afalg="yes"
991 ;;
992 --disable-crypto-afalg) crypto_afalg="no"
993 ;;
d5970055
MT
994 --disable-vhost-net) vhost_net="no"
995 ;;
996 --enable-vhost-net) vhost_net="yes"
997 ;;
042cea27
GA
998 --disable-vhost-crypto) vhost_crypto="no"
999 ;;
299e6f19 1000 --enable-vhost-crypto) vhost_crypto="yes"
042cea27 1001 ;;
5e9be92d
NB
1002 --disable-vhost-scsi) vhost_scsi="no"
1003 ;;
1004 --enable-vhost-scsi) vhost_scsi="yes"
1005 ;;
fc0b9b0e
SH
1006 --disable-vhost-vsock) vhost_vsock="no"
1007 ;;
1008 --enable-vhost-vsock) vhost_vsock="yes"
1009 ;;
98fc1ada
DDAG
1010 --disable-vhost-user-fs) vhost_user_fs="no"
1011 ;;
1012 --enable-vhost-user-fs) vhost_user_fs="yes"
1013 ;;
da076ffe 1014 --disable-opengl) opengl="no"
20ff075b 1015 ;;
da076ffe 1016 --enable-opengl) opengl="yes"
20ff075b 1017 ;;
8c84cf11
ST
1018 --disable-xfsctl) xfs="no"
1019 ;;
1020 --enable-xfsctl) xfs="yes"
1021 ;;
1ffb3bbb 1022 --disable-zlib-test)
1ece9905 1023 ;;
d138cee9
MR
1024 --enable-guest-agent) guest_agent="yes"
1025 ;;
1026 --disable-guest-agent) guest_agent="no"
1027 ;;
d9840e25
TS
1028 --with-vss-sdk) vss_win32_sdk=""
1029 ;;
1030 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1031 ;;
1032 --without-vss-sdk) vss_win32_sdk="no"
1033 ;;
1034 --with-win-sdk) win_sdk=""
1035 ;;
1036 --with-win-sdk=*) win_sdk="$optarg"
1037 ;;
1038 --without-win-sdk) win_sdk="no"
1039 ;;
4b1c11fd
DB
1040 --enable-tools) want_tools="yes"
1041 ;;
1042 --disable-tools) want_tools="no"
1043 ;;
86583a07
LM
1044 --disable-avx2) avx2_opt="no"
1045 ;;
1046 --enable-avx2) avx2_opt="yes"
1047 ;;
6b8cd447
RH
1048 --disable-avx512f) avx512f_opt="no"
1049 ;;
1050 --enable-avx512f) avx512f_opt="yes"
1051 ;;
52b53c04
FZ
1052 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1053 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
583f6e7b 1054 ;;
cb6414df
FZ
1055 --enable-vhdx|--disable-vhdx)
1056 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1057 ;;
315d3184
FZ
1058 --enable-uuid|--disable-uuid)
1059 echo "$0: $opt is obsolete, UUID support is always built" >&2
1060 ;;
a1c5e949
DB
1061 --tls-priority=*) tls_priority="$optarg"
1062 ;;
2da776db
MH
1063 --enable-rdma) rdma="yes"
1064 ;;
1065 --disable-rdma) rdma="no"
1066 ;;
21ab34c9
MA
1067 --enable-pvrdma) pvrdma="yes"
1068 ;;
1069 --disable-pvrdma) pvrdma="no"
1070 ;;
e91c793c
CR
1071 --disable-tpm) tpm="no"
1072 ;;
ab214c29
SB
1073 --enable-tpm) tpm="yes"
1074 ;;
b10d49d7 1075 --disable-libssh) libssh="no"
0a12ec87 1076 ;;
b10d49d7 1077 --enable-libssh) libssh="yes"
0a12ec87 1078 ;;
ed1701c6
DDAG
1079 --disable-live-block-migration) live_block_migration="no"
1080 ;;
1081 --enable-live-block-migration) live_block_migration="yes"
1082 ;;
a99d57bb
WG
1083 --disable-numa) numa="no"
1084 ;;
1085 --enable-numa) numa="yes"
1086 ;;
a6b1d4c0
CX
1087 --disable-replication) replication="no"
1088 ;;
1089 --enable-replication) replication="yes"
1090 ;;
2f740136
JC
1091 --disable-bochs) bochs="no"
1092 ;;
1093 --enable-bochs) bochs="yes"
1094 ;;
1095 --disable-cloop) cloop="no"
1096 ;;
1097 --enable-cloop) cloop="yes"
1098 ;;
1099 --disable-dmg) dmg="no"
1100 ;;
1101 --enable-dmg) dmg="yes"
1102 ;;
1103 --disable-qcow1) qcow1="no"
1104 ;;
1105 --enable-qcow1) qcow1="yes"
1106 ;;
1107 --disable-vdi) vdi="no"
1108 ;;
1109 --enable-vdi) vdi="yes"
1110 ;;
1111 --disable-vvfat) vvfat="no"
1112 ;;
1113 --enable-vvfat) vvfat="yes"
1114 ;;
1115 --disable-qed) qed="no"
1116 ;;
1117 --enable-qed) qed="yes"
1118 ;;
1119 --disable-parallels) parallels="no"
1120 ;;
1121 --enable-parallels) parallels="yes"
1122 ;;
e6a74868
MAL
1123 --disable-vhost-user) vhost_user="no"
1124 ;;
299e6f19
PB
1125 --enable-vhost-user) vhost_user="yes"
1126 ;;
108a6481
CL
1127 --disable-vhost-vdpa) vhost_vdpa="no"
1128 ;;
1129 --enable-vhost-vdpa) vhost_vdpa="yes"
1130 ;;
299e6f19
PB
1131 --disable-vhost-kernel) vhost_kernel="no"
1132 ;;
1133 --enable-vhost-kernel) vhost_kernel="yes"
e6a74868 1134 ;;
8b18cdbf 1135 --disable-capstone) capstone="disabled"
8ca80760 1136 ;;
8b18cdbf 1137 --enable-capstone) capstone="enabled"
8ca80760 1138 ;;
8b18cdbf 1139 --enable-capstone=git) capstone="internal"
e219c499 1140 ;;
03a3c0b3 1141 --enable-capstone=*) capstone="$optarg"
e219c499 1142 ;;
cc84d63a
DB
1143 --with-git=*) git="$optarg"
1144 ;;
7d7dbf9d
DS
1145 --with-git-submodules=*)
1146 git_submodules_action="$optarg"
f62bbee5 1147 ;;
ba59fb77
PB
1148 --enable-debug-mutex) debug_mutex=yes
1149 ;;
1150 --disable-debug-mutex) debug_mutex=no
1151 ;;
9b8e4298
AB
1152 --enable-plugins) if test "$mingw32" = "yes"; then
1153 error_exit "TCG plugins not currently supported on Windows platforms"
1154 else
1155 plugins="yes"
1156 fi
40e8c6f4
AB
1157 ;;
1158 --disable-plugins) plugins="no"
1159 ;;
afc3a8f9
AB
1160 --enable-containers) use_containers="yes"
1161 ;;
1162 --disable-containers) use_containers="no"
1163 ;;
f48e590a
AB
1164 --gdb=*) gdb_bin="$optarg"
1165 ;;
b767d257
MMG
1166 --enable-rng-none) rng_none=yes
1167 ;;
1168 --disable-rng-none) rng_none=no
1169 ;;
54e7aac0
AK
1170 --enable-keyring) secret_keyring="yes"
1171 ;;
1172 --disable-keyring) secret_keyring="no"
1173 ;;
20cf7b8e
DP
1174 --enable-gio) gio=yes
1175 ;;
1176 --disable-gio) gio=no
1177 ;;
b8e0c493
JD
1178 --enable-slirp-smbd) slirp_smbd=yes
1179 ;;
1180 --disable-slirp-smbd) slirp_smbd=no
1181 ;;
3b4da132
PB
1182 # backwards compatibility options
1183 --enable-trace-backend=*) meson_option_parse "--enable-trace-backends=$optarg" "$optarg"
1184 ;;
1185 --disable-blobs) meson_option_parse --disable-install-blobs ""
1186 ;;
1187 --enable-tcmalloc) meson_option_parse --enable-malloc=tcmalloc tcmalloc
1188 ;;
1189 --enable-jemalloc) meson_option_parse --enable-malloc=jemalloc jemalloc
1190 ;;
1191 # everything else has the same name in configure and meson
61d63097
PB
1192 --enable-* | --disable-*) meson_option_parse "$opt" "$optarg"
1193 ;;
2d2ad6d0
FZ
1194 *)
1195 echo "ERROR: unknown option $opt"
1196 echo "Try '$0 --help' for more information"
1197 exit 1
7f1559c6 1198 ;;
7d13299d
FB
1199 esac
1200done
1201
d1a14257
AB
1202# test for any invalid configuration combinations
1203if test "$plugins" = "yes" -a "$tcg" = "disabled"; then
1204 error_exit "Can't enable plugins on non-TCG builds"
1205fi
1206
7d7dbf9d
DS
1207case $git_submodules_action in
1208 update|validate)
1209 if test ! -e "$source_path/.git"; then
1210 echo "ERROR: cannot $git_submodules_action git submodules without .git"
1211 exit 1
1212 fi
1213 ;;
1214 ignore)
b80fd281
PB
1215 if ! test -f "$source_path/ui/keycodemapdb/README"
1216 then
1217 echo
1218 echo "ERROR: missing GIT submodules"
1219 echo
1220 if test -e "$source_path/.git"; then
1221 echo "--with-git-submodules=ignore specified but submodules were not"
1222 echo "checked out. Please initialize and update submodules."
1223 else
1224 echo "This is not a GIT checkout but module content appears to"
1225 echo "be missing. Do not use 'git archive' or GitHub download links"
1226 echo "to acquire QEMU source archives. Non-GIT builds are only"
1227 echo "supported with source archives linked from:"
1228 echo
1229 echo " https://www.qemu.org/download/#source"
1230 echo
1231 echo "Developers working with GIT can use scripts/archive-source.sh"
1232 echo "if they need to create valid source archives."
1233 fi
1234 echo
1235 exit 1
1236 fi
7d7dbf9d
DS
1237 ;;
1238 *)
1239 echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
1240 exit 1
1241 ;;
1242esac
1243
22a87800
MAL
1244libdir="${libdir:-$prefix/lib}"
1245libexecdir="${libexecdir:-$prefix/libexec}"
1246includedir="${includedir:-$prefix/include}"
1247
1248if test "$mingw32" = "yes" ; then
15588a62 1249 bindir="${bindir:-$prefix}"
22a87800 1250else
22a87800 1251 bindir="${bindir:-$prefix/bin}"
22a87800 1252fi
15588a62
JW
1253mandir="${mandir:-$prefix/share/man}"
1254datadir="${datadir:-$prefix/share}"
1255docdir="${docdir:-$prefix/share/doc}"
1256sysconfdir="${sysconfdir:-$prefix/etc}"
1257local_statedir="${local_statedir:-$prefix/var}"
16bf7a33
PB
1258firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
1259localedir="${localedir:-$datadir/locale}"
22a87800 1260
40293e58 1261case "$cpu" in
e3608d66
RH
1262 ppc)
1263 CPU_CFLAGS="-m32"
db5adeaa 1264 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
e3608d66
RH
1265 ;;
1266 ppc64)
1267 CPU_CFLAGS="-m64"
db5adeaa 1268 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
e3608d66 1269 ;;
9b9c37c3 1270 sparc)
f1079bb8 1271 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
db5adeaa 1272 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
3142255c 1273 ;;
ed968ff1 1274 sparc64)
79f3b12f 1275 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
db5adeaa 1276 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
3142255c 1277 ;;
76d83bde 1278 s390)
061cdd81 1279 CPU_CFLAGS="-m31"
db5adeaa 1280 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
28d7cc49
RH
1281 ;;
1282 s390x)
061cdd81 1283 CPU_CFLAGS="-m64"
db5adeaa 1284 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
76d83bde 1285 ;;
40293e58 1286 i386)
79f3b12f 1287 CPU_CFLAGS="-m32"
db5adeaa 1288 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
40293e58
FB
1289 ;;
1290 x86_64)
7ebee43e
RH
1291 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1292 # If we truly care, we should simply detect this case at
1293 # runtime and generate the fallback to serial emulation.
1294 CPU_CFLAGS="-m64 -mcx16"
db5adeaa 1295 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
d2fbca94 1296 ;;
c72b26ec
RH
1297 x32)
1298 CPU_CFLAGS="-mx32"
db5adeaa 1299 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
c72b26ec 1300 ;;
30163d89 1301 # No special flags required for other host CPUs
3142255c
BS
1302esac
1303
9557af9c
AB
1304if eval test -z "\${cross_cc_$cpu}"; then
1305 eval "cross_cc_${cpu}=\$cc"
1306 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1307fi
79f3b12f 1308
affc88cc
PM
1309# For user-mode emulation the host arch has to be one we explicitly
1310# support, even if we're using TCI.
1311if [ "$ARCH" = "unknown" ]; then
1312 bsd_user="no"
1313 linux_user="no"
1314fi
1315
60e0df25 1316default_target_list=""
43692239 1317deprecated_targets_list=ppc64abi32-linux-user
fdb75aef 1318deprecated_features=""
6e92f823
PM
1319mak_wilds=""
1320
1321if [ "$softmmu" = "yes" ]; then
812b31d3 1322 mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
60e0df25 1323fi
6e92f823 1324if [ "$linux_user" = "yes" ]; then
812b31d3 1325 mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
60e0df25 1326fi
6e92f823 1327if [ "$bsd_user" = "yes" ]; then
812b31d3 1328 mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
60e0df25
PM
1329fi
1330
3a5ae4a9
AB
1331# If the user doesn't explicitly specify a deprecated target we will
1332# skip it.
1333if test -z "$target_list"; then
1334 if test -z "$target_list_exclude"; then
1335 target_list_exclude="$deprecated_targets_list"
1336 else
1337 target_list_exclude="$target_list_exclude,$deprecated_targets_list"
1338 fi
2d838d9b
AB
1339fi
1340
2d838d9b
AB
1341for config in $mak_wilds; do
1342 target="$(basename "$config" .mak)"
98db9a06 1343 if echo "$target_list_exclude" | grep -vq "$target"; then
2d838d9b
AB
1344 default_target_list="${default_target_list} $target"
1345 fi
1346done
6e92f823 1347
af5db58e
PB
1348if test x"$show_help" = x"yes" ; then
1349cat << EOF
1350
1351Usage: configure [options]
1352Options: [defaults in brackets after descriptions]
1353
08fb77ed
SW
1354Standard options:
1355 --help print this message
1356 --prefix=PREFIX install in PREFIX [$prefix]
1357 --interp-prefix=PREFIX where to find shared libraries, etc.
1358 use %M for cpu name [$interp_prefix]
2deca810 1359 --target-list=LIST set target list (default: build all non-deprecated)
08fb77ed
SW
1360$(echo Available targets: $default_target_list | \
1361 fold -s -w 53 | sed -e 's/^/ /')
2deca810
AB
1362$(echo Deprecated targets: $deprecated_targets_list | \
1363 fold -s -w 53 | sed -e 's/^/ /')
447e133f 1364 --target-list-exclude=LIST exclude a set of targets from the default target-list
08fb77ed
SW
1365
1366Advanced options (experts only):
3812c0c4 1367 --cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
08fb77ed
SW
1368 --cc=CC use C compiler CC [$cc]
1369 --iasl=IASL use ACPI compiler IASL [$iasl]
1370 --host-cc=CC use C compiler CC [$host_cc] for code run at
1371 build time
1372 --cxx=CXX use C++ compiler CXX [$cxx]
1373 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1374 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
11cde1c8 1375 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
08fb77ed 1376 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
d75402b5 1377 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
d422b2bc 1378 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
08fb77ed 1379 --make=MAKE use specified make [$make]
08fb77ed 1380 --python=PYTHON use specified python [$python]
2eb054c2 1381 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
a5665051 1382 --meson=MESON use specified meson [$meson]
48328880 1383 --ninja=NINJA use specified ninja [$ninja]
08fb77ed 1384 --smbd=SMBD use specified smbd [$smbd]
db1b5f13 1385 --with-git=GIT use specified git [$git]
7d7dbf9d
DS
1386 --with-git-submodules=update update git submodules (default if .git dir exists)
1387 --with-git-submodules=validate fail if git submodules are not up to date
1388 --with-git-submodules=ignore do not update or check git submodules (default if no .git dir)
08fb77ed
SW
1389 --static enable static build [$static]
1390 --mandir=PATH install man pages in PATH
10ff82d1 1391 --datadir=PATH install firmware in PATH/$qemu_suffix
fe0038be 1392 --localedir=PATH install translation in PATH/$qemu_suffix
10ff82d1 1393 --docdir=PATH install documentation in PATH/$qemu_suffix
08fb77ed
SW
1394 --bindir=PATH install binaries in PATH
1395 --libdir=PATH install libraries in PATH
db1b5f13 1396 --libexecdir=PATH install helper binaries in PATH
10ff82d1 1397 --sysconfdir=PATH install config in PATH/$qemu_suffix
08fb77ed 1398 --localstatedir=PATH install local state in PATH (set at runtime on win32)
3d5eecab 1399 --firmwarepath=PATH search PATH for firmware files
13336606 1400 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
ca8c0909 1401 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
db1b5f13 1402 --with-pkgversion=VERS use specified string as sub-version of the package
c035c8d6
PB
1403 --without-default-features default all --enable-* options to "disabled"
1404 --without-default-devices do not include any device that is not needed to
1405 start the emulator (only use if you are including
d1d5e9ee
AB
1406 desired devices in configs/devices/)
1407 --with-devices-ARCH=NAME override default configs/devices
08fb77ed 1408 --enable-debug enable common debug build options
247724cb 1409 --enable-sanitizers enable default sanitizers
0aebab04 1410 --enable-tsan enable thread sanitizer
08fb77ed
SW
1411 --disable-strip disable stripping binaries
1412 --disable-werror disable compilation abort on warning
63678e17 1413 --disable-stack-protector disable compiler-provided stack protection
87430d5b 1414 --audio-drv-list=LIST set audio drivers list
08fb77ed
SW
1415 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1416 --block-drv-rw-whitelist=L
1417 set block driver read-write whitelist
e5f05f8c 1418 (by default affects only QEMU, not tools like qemu-img)
08fb77ed
SW
1419 --block-drv-ro-whitelist=L
1420 set block driver read-only whitelist
e5f05f8c
KW
1421 (by default affects only QEMU, not tools like qemu-img)
1422 --enable-block-drv-whitelist-in-tools
1423 use block whitelist also in tools instead of only QEMU
08fb77ed
SW
1424 --with-trace-file=NAME Full PATH,NAME of file to store traces
1425 Default:trace-<pid>
c23f23b9 1426 --cpu=CPU Build for host CPU [$cpu]
08fb77ed 1427 --with-coroutine=BACKEND coroutine backend. Supported options:
33c53c54 1428 ucontext, sigaltstack, windows
08fb77ed 1429 --enable-gcov enable test coverage analysis with gcov
c23f23b9
MT
1430 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1431 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
a1c5e949 1432 --tls-priority default TLS protocol/cipher priority string
c12d66aa
LM
1433 --enable-gprof QEMU profiling with gprof
1434 --enable-profiler profiler support
c12d66aa
LM
1435 --enable-debug-stack-usage
1436 track the maximum stack usage of stacks created by qemu_alloc_stack
40e8c6f4
AB
1437 --enable-plugins
1438 enable plugins via shared library loading
afc3a8f9 1439 --disable-containers don't use containers for cross-building
f48e590a 1440 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
61d63097
PB
1441EOF
1442 meson_options_help
1443cat << EOF
c23f23b9
MT
1444 system all system emulation targets
1445 user supported user emulation targets
1446 linux-user all linux usermode emulation targets
1447 bsd-user all BSD usermode emulation targets
c23f23b9 1448 guest-agent build the QEMU Guest Agent
c23f23b9 1449 pie Position Independent Executables
21e709aa 1450 modules modules support (non-Windows)
bd83c861 1451 module-upgrades try to load modules from alternate paths for upgrades
c23f23b9
MT
1452 debug-tcg TCG debugging (default is disabled)
1453 debug-info debugging information
cdad781d 1454 lto Enable Link-Time Optimization.
1e4f6065
DB
1455 safe-stack SafeStack Stack Smash Protection. Depends on
1456 clang/llvm >= 3.7 and requires coroutine backend ucontext.
a40161cb 1457 membarrier membarrier system call (for Linux 4.14+ or Windows)
21ab34c9
MA
1458 rdma Enable RDMA-based migration
1459 pvrdma Enable PVRDMA support
299e6f19
PB
1460 vhost-net vhost-net kernel acceleration support
1461 vhost-vsock virtio sockets device support
1462 vhost-scsi vhost-scsi kernel target support
1463 vhost-crypto vhost-user-crypto backend support
1464 vhost-kernel vhost kernel backend support
1465 vhost-user vhost-user backend support
108a6481 1466 vhost-vdpa vhost-vdpa kernel backend support
ed1701c6 1467 live-block-migration Block migration in the main migration stream
c23f23b9 1468 coroutine-pool coroutine freelist (better performance)
c23f23b9 1469 tpm TPM support
b10d49d7 1470 libssh ssh block device support
c23f23b9 1471 numa libnuma support
86583a07 1472 avx2 AVX2 optimization support
6b8cd447 1473 avx512f AVX512F optimization support
a6b1d4c0 1474 replication replication support
c12d66aa 1475 opengl opengl support
c12d66aa
LM
1476 xfsctl xfsctl support
1477 qom-cast-debug cast debugging support
8de73fa8 1478 tools build qemu-io, qemu-nbd and qemu-img tools
2f740136
JC
1479 bochs bochs image format support
1480 cloop cloop image format support
1481 dmg dmg image format support
1482 qcow1 qcow v1 image format support
1483 vdi vdi image format support
1484 vvfat vvfat image format support
1485 qed qed image format support
1486 parallels parallels image format support
f0d92b56 1487 crypto-afalg Linux AF_ALG crypto backend driver
ba59fb77 1488 debug-mutex mutex debugging support
b767d257 1489 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
20cf7b8e 1490 gio libgio support
b8e0c493 1491 slirp-smbd use smbd (at path --smbd=*) in slirp networking
08fb77ed
SW
1492
1493NOTE: The object files are built at the place where configure is launched
af5db58e 1494EOF
2d2ad6d0 1495exit 0
af5db58e
PB
1496fi
1497
9c790242 1498# Remove old dependency files to make sure that they get properly regenerated
bb768f71 1499rm -f */config-devices.mak.d
9c790242 1500
faf44142
DB
1501if test -z "$python"
1502then
1503 error_exit "Python not found. Use --python=/path/to/python"
c53eeaf7 1504fi
8e2c76bd
RB
1505if ! has "$make"
1506then
1507 error_exit "GNU make ($make) not found"
1508fi
c53eeaf7
SH
1509
1510# Note that if the Python conditional here evaluates True we will exit
1511# with status 1 which is a shell 'false' value.
1b11f28d
TH
1512if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1513 error_exit "Cannot use '$python', Python >= 3.6 is required." \
c53eeaf7
SH
1514 "Use --python=/path/to/python to specify a supported Python."
1515fi
1516
755ee70f 1517# Preserve python version since some functionality is dependent on it
406ab2f3 1518python_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 1519
c53eeaf7
SH
1520# Suppress writing compiled files
1521python="$python -B"
1522
0a01d76f 1523if test -z "$meson"; then
654d6b04 1524 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.59.2; then
0a01d76f 1525 meson=meson
7d7dbf9d 1526 elif test $git_submodules_action != 'ignore' ; then
0a01d76f
MAL
1527 meson=git
1528 elif test -e "${source_path}/meson/meson.py" ; then
1529 meson=internal
1530 else
1531 if test "$explicit_python" = yes; then
1532 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
1533 else
1534 error_exit "Meson not found. Use --meson=/path/to/meson"
1535 fi
1536 fi
1537else
1538 # Meson uses its own Python interpreter to invoke other Python scripts,
1539 # but the user wants to use the one they specified with --python.
1540 #
1541 # We do not want to override the distro Python interpreter (and sometimes
1542 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
1543 # just require --meson=git|internal together with --python.
1544 if test "$explicit_python" = yes; then
1545 case "$meson" in
1546 git | internal) ;;
1547 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
1548 esac
1549 fi
a5665051 1550fi
a5665051 1551
0a01d76f
MAL
1552if test "$meson" = git; then
1553 git_submodules="${git_submodules} meson"
a5665051 1554fi
0a01d76f
MAL
1555
1556case "$meson" in
1557 git | internal)
0a01d76f
MAL
1558 meson="$python ${source_path}/meson/meson.py"
1559 ;;
84ec0c24 1560 *) meson=$(command -v "$meson") ;;
0a01d76f
MAL
1561esac
1562
09e93326 1563# Probe for ninja
48328880
PB
1564
1565if test -z "$ninja"; then
1566 for c in ninja ninja-build samu; do
1567 if has $c; then
1568 ninja=$(command -v "$c")
1569 break
1570 fi
1571 done
09e93326
PB
1572 if test -z "$ninja"; then
1573 error_exit "Cannot find Ninja"
1574 fi
48328880 1575fi
a5665051 1576
9aae6e54
DHB
1577# Check that the C compiler works. Doing this here before testing
1578# the host CPU ensures that we had a valid CC to autodetect the
1579# $cpu var (and we should bail right here if that's not the case).
1580# It also allows the help message to be printed without a CC.
1581write_c_skeleton;
1582if compile_object ; then
1583 : C compiler works ok
1584else
1585 error_exit "\"$cc\" either does not exist or does not work"
1586fi
1587if ! compile_prog ; then
1588 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1589fi
1590
9c83ffd8
PM
1591# Consult white-list to determine whether to enable werror
1592# by default. Only enable by default for git builds
9c83ffd8 1593if test -z "$werror" ; then
7d7dbf9d 1594 if test "$git_submodules_action" != "ignore" && \
e633a5c6 1595 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
9c83ffd8
PM
1596 werror="yes"
1597 else
1598 werror="no"
1599 fi
1600fi
1601
975ff037 1602if test "$targetos" = "bogus"; then
fb59dabd
PM
1603 # Now that we know that we're not printing the help and that
1604 # the compiler works (so the results of the check_defines we used
1605 # to identify the OS are reliable), if we didn't recognize the
1606 # host OS we should stop now.
951fedfc 1607 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
fb59dabd
PM
1608fi
1609
efc6c070
TH
1610# Check whether the compiler matches our minimum requirements:
1611cat > $TMPC << EOF
1612#if defined(__clang_major__) && defined(__clang_minor__)
1613# ifdef __apple_build_version__
2a85a08c
DB
1614# if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0)
1615# error You need at least XCode Clang v10.0 to compile QEMU
efc6c070
TH
1616# endif
1617# else
2a85a08c
DB
1618# if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0)
1619# error You need at least Clang v6.0 to compile QEMU
efc6c070
TH
1620# endif
1621# endif
1622#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
3830df5f 1623# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4)
1624# error You need at least GCC v7.4.0 to compile QEMU
efc6c070
TH
1625# endif
1626#else
1627# error You either need GCC or Clang to compiler QEMU
1628#endif
1629int main (void) { return 0; }
1630EOF
1631if ! compile_prog "" "" ; then
3830df5f 1632 error_exit "You need at least GCC v7.4 or Clang v6.0 (or XCode Clang v10.0)"
efc6c070
TH
1633fi
1634
00849b92
RH
1635# Accumulate -Wfoo and -Wno-bar separately.
1636# We will list all of the enable flags first, and the disable flags second.
1637# Note that we do not add -Werror, because that would enable it for all
1638# configure tests. If a configure test failed due to -Werror this would
1639# just silently disable some features, so it's too error prone.
1640
1641warn_flags=
1642add_to warn_flags -Wold-style-declaration
1643add_to warn_flags -Wold-style-definition
1644add_to warn_flags -Wtype-limits
1645add_to warn_flags -Wformat-security
1646add_to warn_flags -Wformat-y2k
1647add_to warn_flags -Winit-self
1648add_to warn_flags -Wignored-qualifiers
1649add_to warn_flags -Wempty-body
1650add_to warn_flags -Wnested-externs
1651add_to warn_flags -Wendif-labels
1652add_to warn_flags -Wexpansion-to-defined
0a2ebce9 1653add_to warn_flags -Wimplicit-fallthrough=2
00849b92
RH
1654
1655nowarn_flags=
1656add_to nowarn_flags -Wno-initializer-overrides
1657add_to nowarn_flags -Wno-missing-include-dirs
1658add_to nowarn_flags -Wno-shift-negative-value
1659add_to nowarn_flags -Wno-string-plus-int
1660add_to nowarn_flags -Wno-typedef-redefinition
aabab967 1661add_to nowarn_flags -Wno-tautological-type-limit-compare
bac8d222 1662add_to nowarn_flags -Wno-psabi
00849b92
RH
1663
1664gcc_flags="$warn_flags $nowarn_flags"
93b25869
JS
1665
1666cc_has_warning_flag() {
1667 write_c_skeleton;
1668
a1d29d6c
PM
1669 # Use the positive sense of the flag when testing for -Wno-wombat
1670 # support (gcc will happily accept the -Wno- form of unknown
1671 # warning options).
93b25869
JS
1672 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1673 compile_prog "-Werror $optflag" ""
1674}
1675
1676for flag in $gcc_flags; do
1677 if cc_has_warning_flag $flag ; then
1678 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
8d05095c
PB
1679 fi
1680done
1681
3b463a3f 1682if test "$stack_protector" != "no"; then
fccd35a0
RR
1683 cat > $TMPC << EOF
1684int main(int argc, char *argv[])
1685{
1686 char arr[64], *p = arr, *c = argv[0];
1687 while (*c) {
1688 *p++ = *c++;
1689 }
1690 return 0;
1691}
1692EOF
63678e17 1693 gcc_flags="-fstack-protector-strong -fstack-protector-all"
3b463a3f 1694 sp_on=0
63678e17 1695 for flag in $gcc_flags; do
590e5dd9
PM
1696 # We need to check both a compile and a link, since some compiler
1697 # setups fail only on a .c->.o compile and some only at link time
086d5f75 1698 if compile_object "-Werror $flag" &&
590e5dd9 1699 compile_prog "-Werror $flag" ""; then
63678e17 1700 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
db5adeaa 1701 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3b463a3f 1702 sp_on=1
63678e17
SN
1703 break
1704 fi
1705 done
3b463a3f
MR
1706 if test "$stack_protector" = yes; then
1707 if test $sp_on = 0; then
1708 error_exit "Stack protector not supported"
1709 fi
1710 fi
37746c5e
MAL
1711fi
1712
20bc94a2
PB
1713# Disable -Wmissing-braces on older compilers that warn even for
1714# the "universal" C zero initializer {0}.
1715cat > $TMPC << EOF
1716struct {
1717 int a[2];
1718} x = {0};
1719EOF
1720if compile_object "-Werror" "" ; then
1721 :
1722else
1723 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1724fi
1725
21e709aa
MAL
1726# Our module code doesn't support Windows
1727if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
1728 error_exit "Modules are not available for Windows"
1729fi
1730
bd83c861
CE
1731# module_upgrades is only reasonable if modules are enabled
1732if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
1733 error_exit "Can't enable module-upgrades as Modules are not enabled"
1734fi
1735
5f2453ac 1736# Static linking is not possible with plugins, modules or PIE
40d6444e 1737if test "$static" = "yes" ; then
aa0d1f44
PB
1738 if test "$modules" = "yes" ; then
1739 error_exit "static and modules are mutually incompatible"
1740 fi
5f2453ac
AB
1741 if test "$plugins" = "yes"; then
1742 error_exit "static and plugins are mutually incompatible"
ba4dd2aa
AB
1743 else
1744 plugins="no"
5f2453ac 1745 fi
40d6444e
AK
1746fi
1747
768b7855
EC
1748# Unconditional check for compiler __thread support
1749 cat > $TMPC << EOF
1750static __thread int tls_var;
1751int main(void) { return tls_var; }
1752EOF
1753
1754if ! compile_prog "-Werror" "" ; then
1755 error_exit "Your compiler does not support the __thread specifier for " \
1756 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1757fi
1758
b2634124 1759cat > $TMPC << EOF
21d4a791
AK
1760
1761#ifdef __linux__
1762# define THREAD __thread
1763#else
1764# define THREAD
1765#endif
21d4a791 1766static THREAD int tls_var;
21d4a791 1767int main(void) { return tls_var; }
40d6444e 1768EOF
412aeacd 1769
b2634124
RH
1770# Check we support --no-pie first; we will need this for building ROMs.
1771if compile_prog "-Werror -fno-pie" "-no-pie"; then
1772 CFLAGS_NOPIE="-fno-pie"
b2634124
RH
1773fi
1774
12781462 1775if test "$static" = "yes"; then
eca7a8e6 1776 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
5770e8af 1777 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
12781462
RH
1778 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
1779 pie="yes"
1780 elif test "$pie" = "yes"; then
1781 error_exit "-static-pie not available due to missing toolchain support"
1782 else
1783 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
1784 pie="no"
1785 fi
1786elif test "$pie" = "no"; then
5770e8af 1787 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
eca7a8e6 1788elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
5770e8af
PB
1789 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
1790 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
2c674109
RH
1791 pie="yes"
1792elif test "$pie" = "yes"; then
1793 error_exit "PIE not available due to missing toolchain support"
1794else
1795 echo "Disabling PIE due to missing toolchain support"
1796 pie="no"
40d6444e
AK
1797fi
1798
e6cbd751
RH
1799# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
1800# The combination is known as "full relro", because .got.plt is read-only too.
1801if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1802 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
1803fi
1804
09dada40
PB
1805##########################################
1806# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1807# use i686 as default anyway, but for those that don't, an explicit
1808# specification is necessary
1809
1810if test "$cpu" = "i386"; then
1811 cat > $TMPC << EOF
1812static int sfaa(int *ptr)
1813{
1814 return __sync_fetch_and_and(ptr, 0);
1815}
1816
1817int main(void)
1818{
1819 int val = 42;
1405b629 1820 val = __sync_val_compare_and_swap(&val, 0, 1);
09dada40
PB
1821 sfaa(&val);
1822 return val;
1823}
1824EOF
1825 if ! compile_prog "" "" ; then
1826 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1827 fi
1828fi
1829
56267b62
PMD
1830if test "$tcg" = "enabled"; then
1831 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
1832 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
1833fi
1834
afb63ebd 1835if test -z "${target_list+xxx}" ; then
fdb75aef 1836 default_targets=yes
d880a3ba 1837 for target in $default_target_list; do
fdb75aef 1838 target_list="$target_list $target"
d880a3ba
PB
1839 done
1840 target_list="${target_list# }"
121afa9e 1841else
fdb75aef 1842 default_targets=no
89138857 1843 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
d880a3ba
PB
1844 for target in $target_list; do
1845 # Check that we recognised the target name; this allows a more
1846 # friendly error message than if we let it fall through.
1847 case " $default_target_list " in
1848 *" $target "*)
1849 ;;
1850 *)
1851 error_exit "Unknown target name '$target'"
1852 ;;
1853 esac
d880a3ba 1854 done
121afa9e 1855fi
25b48338 1856
fdb75aef
PB
1857for target in $target_list; do
1858 # if a deprecated target is enabled we note it here
1859 if echo "$deprecated_targets_list" | grep -q "$target"; then
1860 add_to deprecated_features $target
1861 fi
1862done
1863
f55fe278
PB
1864# see if system emulation was really requested
1865case " $target_list " in
1866 *"-softmmu "*) softmmu=yes
1867 ;;
1868 *) softmmu=no
1869 ;;
1870esac
5327cf48 1871
249247c9
JQ
1872feature_not_found() {
1873 feature=$1
21684af0 1874 remedy=$2
249247c9 1875
76ad07a4 1876 error_exit "User requested feature $feature" \
21684af0
SS
1877 "configure was not able to find it." \
1878 "$remedy"
249247c9
JQ
1879}
1880
7d13299d
FB
1881# ---
1882# big/little endian test
1883cat > $TMPC << EOF
659eb157 1884#include <stdio.h>
61cc919f
MF
1885short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1886short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
659eb157
TH
1887int main(int argc, char *argv[])
1888{
1889 return printf("%s %s\n", (char *)big_endian, (char *)little_endian);
7d13299d
FB
1890}
1891EOF
1892
659eb157
TH
1893if compile_prog ; then
1894 if strings -a $TMPE | grep -q BiGeNdIaN ; then
61cc919f 1895 bigendian="yes"
659eb157 1896 elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then
61cc919f
MF
1897 bigendian="no"
1898 else
1899 echo big/little test failed
659eb157 1900 exit 1
21d89f84 1901 fi
61cc919f
MF
1902else
1903 echo big/little test failed
659eb157 1904 exit 1
7d13299d
FB
1905fi
1906
e10ee3f5
PMD
1907##########################################
1908# system tools
1909if test -z "$want_tools"; then
1910 if test "$softmmu" = "no"; then
1911 want_tools=no
1912 else
1913 want_tools=yes
1914 fi
1915fi
1916
015a33bd
GA
1917##########################################
1918# L2TPV3 probe
1919
1920cat > $TMPC <<EOF
1921#include <sys/socket.h>
bff6cb72 1922#include <linux/ip.h>
015a33bd
GA
1923int main(void) { return sizeof(struct mmsghdr); }
1924EOF
1925if compile_prog "" "" ; then
1926 l2tpv3=yes
1927else
1928 l2tpv3=no
1929fi
1930
299e6f19
PB
1931#########################################
1932# vhost interdependencies and host support
1933
1934# vhost backends
d88618f7
SH
1935if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
1936 error_exit "vhost-user is only available on Linux"
299e6f19 1937fi
108a6481
CL
1938test "$vhost_vdpa" = "" && vhost_vdpa=$linux
1939if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
1940 error_exit "vhost-vdpa is only available on Linux"
1941fi
299e6f19
PB
1942test "$vhost_kernel" = "" && vhost_kernel=$linux
1943if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
1944 error_exit "vhost-kernel is only available on Linux"
1945fi
1946
1947# vhost-kernel devices
1948test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
1949if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
1950 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
1951fi
1952test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
1953if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
1954 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
1955fi
1956
1957# vhost-user backends
1958test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
1959if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
1960 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
1961fi
1962test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
1963if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
1964 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
1965fi
98fc1ada
DDAG
1966test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
1967if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
1968 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
1969fi
108a6481
CL
1970#vhost-vdpa backends
1971test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
1972if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
1973 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
1974fi
299e6f19 1975
40bc0ca9 1976# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
299e6f19
PB
1977if test "$vhost_net" = ""; then
1978 test "$vhost_net_user" = "yes" && vhost_net=yes
40bc0ca9 1979 test "$vhost_net_vdpa" = "yes" && vhost_net=yes
299e6f19
PB
1980 test "$vhost_kernel" = "yes" && vhost_net=yes
1981fi
1982
779ab5e3
SW
1983##########################################
1984# pkg-config probe
1985
1986if ! has "$pkg_config_exe"; then
76ad07a4 1987 error_exit "pkg-config binary '$pkg_config_exe' not found"
779ab5e3
SW
1988fi
1989
b0a47e79
JQ
1990##########################################
1991# NPTL probe
1992
24cb36a6 1993if test "$linux_user" = "yes"; then
b0a47e79 1994 cat > $TMPC <<EOF
bd0c5661 1995#include <sched.h>
30813cea 1996#include <linux/futex.h>
182eacc0 1997int main(void) {
bd0c5661
PB
1998#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1999#error bork
2000#endif
182eacc0 2001 return 0;
bd0c5661
PB
2002}
2003EOF
24cb36a6 2004 if ! compile_object ; then
21684af0 2005 feature_not_found "nptl" "Install glibc and linux kernel headers."
b0a47e79 2006 fi
bd0c5661
PB
2007fi
2008
e37630ca
AL
2009##########################################
2010# xen probe
2011
1badb709 2012if test "$xen" != "disabled" ; then
c1cdd9d5
JG
2013 # Check whether Xen library path is specified via --extra-ldflags to avoid
2014 # overriding this setting with pkg-config output. If not, try pkg-config
2015 # to obtain all needed flags.
2016
2017 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2018 $pkg_config --exists xencontrol ; then
2019 xen_ctrl_version="$(printf '%d%02d%02d' \
2020 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
1badb709 2021 xen=enabled
5b6a8f43 2022 xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
c1cdd9d5 2023 xen_pc="$xen_pc xenevtchn xendevicemodel"
58ea9a7a
AP
2024 if $pkg_config --exists xentoolcore; then
2025 xen_pc="$xen_pc xentoolcore"
2026 fi
582ea95f
MAL
2027 xen_cflags="$($pkg_config --cflags $xen_pc)"
2028 xen_libs="$($pkg_config --libs $xen_pc)"
c1cdd9d5 2029 else
d5b93ddf 2030
5b6a8f43 2031 xen_libs="-lxenstore -lxenctrl"
d9506cab 2032 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
50ced5b3 2033
c1cdd9d5
JG
2034 # First we test whether Xen headers and libraries are available.
2035 # If no, we are done and there is no Xen support.
2036 # If yes, more tests are run to detect the Xen version.
2037
2038 # Xen (any)
2039 cat > $TMPC <<EOF
e37630ca 2040#include <xenctrl.h>
50ced5b3
SW
2041int main(void) {
2042 return 0;
2043}
2044EOF
c1cdd9d5
JG
2045 if ! compile_prog "" "$xen_libs" ; then
2046 # Xen not found
1badb709 2047 if test "$xen" = "enabled" ; then
c1cdd9d5
JG
2048 feature_not_found "xen" "Install xen devel"
2049 fi
1badb709 2050 xen=disabled
50ced5b3 2051
c1cdd9d5
JG
2052 # Xen unstable
2053 elif
2054 cat > $TMPC <<EOF &&
2cbf8903
RL
2055#undef XC_WANT_COMPAT_DEVICEMODEL_API
2056#define __XEN_TOOLS__
2057#include <xendevicemodel.h>
d3c49ebb 2058#include <xenforeignmemory.h>
2cbf8903
RL
2059int main(void) {
2060 xendevicemodel_handle *xd;
d3c49ebb 2061 xenforeignmemory_handle *xfmem;
2cbf8903
RL
2062
2063 xd = xendevicemodel_open(0, 0);
2064 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2065
d3c49ebb
PD
2066 xfmem = xenforeignmemory_open(0, 0);
2067 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2068
2cbf8903
RL
2069 return 0;
2070}
2071EOF
2072 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2073 then
2074 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2075 xen_ctrl_version=41100
1badb709 2076 xen=enabled
2cbf8903
RL
2077 elif
2078 cat > $TMPC <<EOF &&
5ba3d756
ID
2079#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2080#include <xenforeignmemory.h>
58ea9a7a 2081#include <xentoolcore.h>
5ba3d756
ID
2082int main(void) {
2083 xenforeignmemory_handle *xfmem;
2084
2085 xfmem = xenforeignmemory_open(0, 0);
2086 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
58ea9a7a 2087 xentoolcore_restrict_all(0);
5ba3d756
ID
2088
2089 return 0;
2090}
2091EOF
58ea9a7a 2092 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
5ba3d756 2093 then
58ea9a7a 2094 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
5ba3d756 2095 xen_ctrl_version=41000
1badb709 2096 xen=enabled
5ba3d756
ID
2097 elif
2098 cat > $TMPC <<EOF &&
da8090cc
PD
2099#undef XC_WANT_COMPAT_DEVICEMODEL_API
2100#define __XEN_TOOLS__
2101#include <xendevicemodel.h>
2102int main(void) {
2103 xendevicemodel_handle *xd;
2104
2105 xd = xendevicemodel_open(0, 0);
2106 xendevicemodel_close(xd);
50ced5b3 2107
da8090cc
PD
2108 return 0;
2109}
2110EOF
c1cdd9d5
JG
2111 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2112 then
2113 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2114 xen_ctrl_version=40900
1badb709 2115 xen=enabled
c1cdd9d5
JG
2116 elif
2117 cat > $TMPC <<EOF &&
b6eb9b45
PS
2118/*
2119 * If we have stable libs the we don't want the libxc compat
2120 * layers, regardless of what CFLAGS we may have been given.
2121 *
2122 * Also, check if xengnttab_grant_copy_segment_t is defined and
2123 * grant copy operation is implemented.
2124 */
2125#undef XC_WANT_COMPAT_EVTCHN_API
2126#undef XC_WANT_COMPAT_GNTTAB_API
2127#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2128#include <xenctrl.h>
2129#include <xenstore.h>
2130#include <xenevtchn.h>
2131#include <xengnttab.h>
2132#include <xenforeignmemory.h>
2133#include <stdint.h>
2134#include <xen/hvm/hvm_info_table.h>
2135#if !defined(HVM_MAX_VCPUS)
2136# error HVM_MAX_VCPUS not defined
2137#endif
2138int main(void) {
2139 xc_interface *xc = NULL;
2140 xenforeignmemory_handle *xfmem;
2141 xenevtchn_handle *xe;
2142 xengnttab_handle *xg;
b6eb9b45
PS
2143 xengnttab_grant_copy_segment_t* seg = NULL;
2144
2145 xs_daemon_open();
2146
2147 xc = xc_interface_open(0, 0, 0);
2148 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2149 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2150 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2151 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
b6eb9b45
PS
2152
2153 xfmem = xenforeignmemory_open(0, 0);
2154 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2155
2156 xe = xenevtchn_open(0, 0);
2157 xenevtchn_fd(xe);
2158
2159 xg = xengnttab_open(0, 0);
2160 xengnttab_grant_copy(xg, 0, seg);
2161
2162 return 0;
2163}
2164EOF
c1cdd9d5
JG
2165 compile_prog "" "$xen_libs $xen_stable_libs"
2166 then
2167 xen_ctrl_version=40800
1badb709 2168 xen=enabled
c1cdd9d5
JG
2169 elif
2170 cat > $TMPC <<EOF &&
5eeb39c2
IC
2171/*
2172 * If we have stable libs the we don't want the libxc compat
2173 * layers, regardless of what CFLAGS we may have been given.
2174 */
2175#undef XC_WANT_COMPAT_EVTCHN_API
2176#undef XC_WANT_COMPAT_GNTTAB_API
2177#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2178#include <xenctrl.h>
2179#include <xenstore.h>
2180#include <xenevtchn.h>
2181#include <xengnttab.h>
2182#include <xenforeignmemory.h>
2183#include <stdint.h>
2184#include <xen/hvm/hvm_info_table.h>
2185#if !defined(HVM_MAX_VCPUS)
2186# error HVM_MAX_VCPUS not defined
2187#endif
2188int main(void) {
2189 xc_interface *xc = NULL;
2190 xenforeignmemory_handle *xfmem;
2191 xenevtchn_handle *xe;
2192 xengnttab_handle *xg;
5eeb39c2
IC
2193
2194 xs_daemon_open();
2195
2196 xc = xc_interface_open(0, 0, 0);
2197 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2198 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2199 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2200 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
5eeb39c2
IC
2201
2202 xfmem = xenforeignmemory_open(0, 0);
2203 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2204
2205 xe = xenevtchn_open(0, 0);
2206 xenevtchn_fd(xe);
2207
2208 xg = xengnttab_open(0, 0);
2209 xengnttab_map_grant_ref(xg, 0, 0, 0);
2210
2211 return 0;
2212}
2213EOF
c1cdd9d5
JG
2214 compile_prog "" "$xen_libs $xen_stable_libs"
2215 then
2216 xen_ctrl_version=40701
1badb709 2217 xen=enabled
c1cdd9d5
JG
2218
2219 # Xen 4.6
2220 elif
2221 cat > $TMPC <<EOF &&
cdadde39 2222#include <xenctrl.h>
e108a3c1 2223#include <xenstore.h>
d5b93ddf
AP
2224#include <stdint.h>
2225#include <xen/hvm/hvm_info_table.h>
2226#if !defined(HVM_MAX_VCPUS)
2227# error HVM_MAX_VCPUS not defined
2228#endif
d8b441a3
JB
2229int main(void) {
2230 xc_interface *xc;
2231 xs_daemon_open();
2232 xc = xc_interface_open(0, 0, 0);
2233 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2234 xc_gnttab_open(NULL, 0);
2235 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2236 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2237 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
20a544c7 2238 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
d8b441a3
JB
2239 return 0;
2240}
2241EOF
c1cdd9d5
JG
2242 compile_prog "" "$xen_libs"
2243 then
2244 xen_ctrl_version=40600
1badb709 2245 xen=enabled
c1cdd9d5
JG
2246
2247 # Xen 4.5
2248 elif
2249 cat > $TMPC <<EOF &&
d8b441a3
JB
2250#include <xenctrl.h>
2251#include <xenstore.h>
2252#include <stdint.h>
2253#include <xen/hvm/hvm_info_table.h>
2254#if !defined(HVM_MAX_VCPUS)
2255# error HVM_MAX_VCPUS not defined
2256#endif
3996e85c
PD
2257int main(void) {
2258 xc_interface *xc;
2259 xs_daemon_open();
2260 xc = xc_interface_open(0, 0, 0);
2261 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2262 xc_gnttab_open(NULL, 0);
2263 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2264 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2265 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2266 return 0;
2267}
2268EOF
c1cdd9d5
JG
2269 compile_prog "" "$xen_libs"
2270 then
2271 xen_ctrl_version=40500
1badb709 2272 xen=enabled
3996e85c 2273
c1cdd9d5
JG
2274 elif
2275 cat > $TMPC <<EOF &&
3996e85c
PD
2276#include <xenctrl.h>
2277#include <xenstore.h>
2278#include <stdint.h>
2279#include <xen/hvm/hvm_info_table.h>
2280#if !defined(HVM_MAX_VCPUS)
2281# error HVM_MAX_VCPUS not defined
2282#endif
8688e065
SS
2283int main(void) {
2284 xc_interface *xc;
2285 xs_daemon_open();
2286 xc = xc_interface_open(0, 0, 0);
2287 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2288 xc_gnttab_open(NULL, 0);
2289 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2290 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2291 return 0;
2292}
2293EOF
c1cdd9d5
JG
2294 compile_prog "" "$xen_libs"
2295 then
2296 xen_ctrl_version=40200
1badb709 2297 xen=enabled
8688e065 2298
c1cdd9d5 2299 else
1badb709 2300 if test "$xen" = "enabled" ; then
c1cdd9d5
JG
2301 feature_not_found "xen (unsupported version)" \
2302 "Install a supported xen (xen 4.2 or newer)"
2303 fi
1badb709 2304 xen=disabled
fc321b4b 2305 fi
d5b93ddf 2306
1badb709 2307 if test "$xen" = enabled; then
c1cdd9d5 2308 if test $xen_ctrl_version -ge 40701 ; then
582ea95f 2309 xen_libs="$xen_libs $xen_stable_libs "
c1cdd9d5 2310 fi
5eeb39c2 2311 fi
d5b93ddf 2312 fi
e37630ca
AL
2313fi
2314
2da776db
MH
2315##########################################
2316# RDMA needs OpenFabrics libraries
2317if test "$rdma" != "no" ; then
2318 cat > $TMPC <<EOF
2319#include <rdma/rdma_cma.h>
2320int main(void) { return 0; }
2321EOF
ef6d4ccd 2322 rdma_libs="-lrdmacm -libverbs -libumad"
2da776db
MH
2323 if compile_prog "" "$rdma_libs" ; then
2324 rdma="yes"
2da776db
MH
2325 else
2326 if test "$rdma" = "yes" ; then
2327 error_exit \
ef6d4ccd 2328 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
2da776db 2329 " Your options:" \
ef6d4ccd 2330 " (1) Fast: Install infiniband packages (devel) from your distro." \
2da776db
MH
2331 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2332 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2333 fi
2334 rdma="no"
2335 fi
2336fi
2337
21ab34c9
MA
2338##########################################
2339# PVRDMA detection
2340
2341cat > $TMPC <<EOF &&
2342#include <sys/mman.h>
2343
2344int
2345main(void)
2346{
2347 char buf = 0;
2348 void *addr = &buf;
2349 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
2350
2351 return 0;
2352}
2353EOF
2354
2355if test "$rdma" = "yes" ; then
2356 case "$pvrdma" in
2357 "")
2358 if compile_prog "" ""; then
2359 pvrdma="yes"
2360 else
2361 pvrdma="no"
2362 fi
2363 ;;
2364 "yes")
2365 if ! compile_prog "" ""; then
2366 error_exit "PVRDMA is not supported since mremap is not implemented"
2367 fi
2368 pvrdma="yes"
2369 ;;
2370 "no")
2371 pvrdma="no"
2372 ;;
2373 esac
2374else
2375 if test "$pvrdma" = "yes" ; then
2376 error_exit "PVRDMA requires rdma suppport"
2377 fi
2378 pvrdma="no"
2379fi
95c6bff3 2380
ee108585
YS
2381# Let's see if enhanced reg_mr is supported
2382if test "$pvrdma" = "yes" ; then
2383
2384cat > $TMPC <<EOF &&
2385#include <infiniband/verbs.h>
2386
2387int
2388main(void)
2389{
2390 struct ibv_mr *mr;
2391 struct ibv_pd *pd = NULL;
2392 size_t length = 10;
2393 uint64_t iova = 0;
2394 int access = 0;
2395 void *addr = NULL;
2396
2397 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
2398
2399 ibv_dereg_mr(mr);
2400
2401 return 0;
2402}
2403EOF
2404 if ! compile_prog "" "-libverbs"; then
2405 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
2406 fi
2407fi
2408
ee682d27 2409##########################################
c1bb86cd 2410# xfsctl() probe, used for file-posix.c
dce512de
CH
2411if test "$xfs" != "no" ; then
2412 cat > $TMPC << EOF
ffc41d10 2413#include <stddef.h> /* NULL */
dce512de
CH
2414#include <xfs/xfs.h>
2415int main(void)
2416{
2417 xfsctl(NULL, 0, 0, NULL);
2418 return 0;
2419}
2420EOF
2421 if compile_prog "" "" ; then
2422 xfs="yes"
2423 else
2424 if test "$xfs" = "yes" ; then
e3a6e0da 2425 feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
dce512de
CH
2426 fi
2427 xfs=no
2428 fi
2429fi
2430
ba4dd2aa
AB
2431##########################################
2432# plugin linker support probe
2433
2434if test "$plugins" != "no"; then
2435
2436 #########################################
2437 # See if --dynamic-list is supported by the linker
2438
2439 ld_dynamic_list="no"
2440 cat > $TMPTXT <<EOF
2441{
2442 foo;
2443};
2444EOF
2445
2446 cat > $TMPC <<EOF
2447#include <stdio.h>
2448void foo(void);
2449
2450void foo(void)
2451{
2452 printf("foo\n");
2453}
2454
2455int main(void)
2456{
2457 foo();
2458 return 0;
2459}
2460EOF
2461
2462 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
2463 ld_dynamic_list="yes"
2464 fi
2465
2466 #########################################
2467 # See if -exported_symbols_list is supported by the linker
2468
2469 ld_exported_symbols_list="no"
2470 cat > $TMPTXT <<EOF
2471 _foo
2472EOF
2473
2474 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
2475 ld_exported_symbols_list="yes"
2476 fi
2477
2478 if test "$ld_dynamic_list" = "no" &&
2479 test "$ld_exported_symbols_list" = "no" ; then
2480 if test "$plugins" = "yes"; then
2481 error_exit \
2482 "Plugin support requires dynamic linking and specifying a set of symbols " \
2483 "that are exported to plugins. Unfortunately your linker doesn't " \
2484 "support the flag (--dynamic-list or -exported_symbols_list) used " \
2485 "for this purpose."
2486 else
2487 plugins="no"
2488 fi
2489 else
2490 plugins="yes"
2491 fi
2492fi
2493
e18df141
AL
2494##########################################
2495# glib support probe
a52d28af 2496
b4c6036f 2497glib_req_ver=2.56
aa0d1f44
PB
2498glib_modules=gthread-2.0
2499if test "$modules" = yes; then
a88afc64 2500 glib_modules="$glib_modules gmodule-export-2.0"
b906acac
PB
2501elif test "$plugins" = "yes"; then
2502 glib_modules="$glib_modules gmodule-no-export-2.0"
54cb65d8 2503fi
e26110cf 2504
aa0d1f44 2505for i in $glib_modules; do
e26110cf 2506 if $pkg_config --atleast-version=$glib_req_ver $i; then
89138857
SW
2507 glib_cflags=$($pkg_config --cflags $i)
2508 glib_libs=$($pkg_config --libs $i)
e26110cf
FZ
2509 else
2510 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2511 fi
2512done
2513
215b0c2f
PB
2514# This workaround is required due to a bug in pkg-config file for glib as it
2515# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
2516
2517if test "$static" = yes && test "$mingw32" = yes; then
2518 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
2519fi
2520
20cf7b8e
DP
2521if ! test "$gio" = "no"; then
2522 pass=no
2523 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
2524 gio_cflags=$($pkg_config --cflags gio-2.0)
2525 gio_libs=$($pkg_config --libs gio-2.0)
2526 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
5ecfb76c 2527 if ! has "$gdbus_codegen"; then
20cf7b8e
DP
2528 gdbus_codegen=
2529 fi
2530 # Check that the libraries actually work -- Ubuntu 18.04 ships
2531 # with pkg-config --static --libs data for gio-2.0 that is missing
2532 # -lblkid and will give a link error.
2533 cat > $TMPC <<EOF
13ceae66
PM
2534#include <gio/gio.h>
2535int main(void)
2536{
2537 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
2538 return 0;
2539}
2540EOF
20cf7b8e
DP
2541 if compile_prog "$gio_cflags" "$gio_libs" ; then
2542 pass=yes
2543 else
2544 pass=no
2545 fi
2546
2547 if test "$pass" = "yes" &&
2548 $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
2549 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
2550 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
2551 fi
76346b62 2552 fi
f876b765 2553
20cf7b8e
DP
2554 if test "$pass" = "no"; then
2555 if test "$gio" = "yes"; then
2556 feature_not_found "gio" "Install libgio >= 2.0"
2557 else
2558 gio=no
2559 fi
2560 else
2561 gio=yes
2562 fi
25a97a56
MAL
2563fi
2564
977a82ab
DB
2565# Sanity check that the current size_t matches the
2566# size that glib thinks it should be. This catches
2567# problems on multi-arch where people try to build
2568# 32-bit QEMU while pointing at 64-bit glib headers
2569cat > $TMPC <<EOF
2570#include <glib.h>
2571#include <unistd.h>
2572
2573#define QEMU_BUILD_BUG_ON(x) \
2574 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
2575
2576int main(void) {
2577 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
2578 return 0;
2579}
2580EOF
2581
215b0c2f 2582if ! compile_prog "$glib_cflags" "$glib_libs" ; then
977a82ab
DB
2583 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
2584 "You probably need to set PKG_CONFIG_LIBDIR"\
2585 "to point to the right pkg-config files for your"\
2586 "build target"
2587fi
2588
9bda600b
EB
2589# Silence clang warnings triggered by glib < 2.57.2
2590cat > $TMPC << EOF
2591#include <glib.h>
2592typedef struct Foo {
2593 int i;
2594} Foo;
2595static void foo_free(Foo *f)
2596{
2597 g_free(f);
2598}
2599G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
2600int main(void) { return 0; }
2601EOF
2602if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
2603 if cc_has_warning_flag "-Wno-unused-function"; then
2604 glib_cflags="$glib_cflags -Wno-unused-function"
5770e8af 2605 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
9bda600b
EB
2606 fi
2607fi
2608
e26110cf
FZ
2609##########################################
2610# SHA command probe for modules
2611if test "$modules" = yes; then
2612 shacmd_probe="sha1sum sha1 shasum"
2613 for c in $shacmd_probe; do
8ccefb91 2614 if has $c; then
e26110cf
FZ
2615 shacmd="$c"
2616 break
2617 fi
2618 done
2619 if test "$shacmd" = ""; then
2620 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2621 fi
e18df141
AL
2622fi
2623
0a12ec87 2624##########################################
b10d49d7
PT
2625# libssh probe
2626if test "$libssh" != "no" ; then
b4c10fc6 2627 if $pkg_config --exists "libssh >= 0.8.7"; then
b10d49d7
PT
2628 libssh_cflags=$($pkg_config libssh --cflags)
2629 libssh_libs=$($pkg_config libssh --libs)
2630 libssh=yes
0a12ec87 2631 else
b10d49d7
PT
2632 if test "$libssh" = "yes" ; then
2633 error_exit "libssh required for --enable-libssh"
0a12ec87 2634 fi
b10d49d7 2635 libssh=no
0a12ec87
RJ
2636 fi
2637fi
2638
3b8acc11 2639##########################################
7aaa6a16 2640# TPM emulation is only on POSIX
3b8acc11 2641
7aaa6a16
PB
2642if test "$tpm" = ""; then
2643 if test "$mingw32" = "yes"; then
2644 tpm=no
2645 else
2646 tpm=yes
2647 fi
2648elif test "$tpm" = "yes"; then
2649 if test "$mingw32" = "yes" ; then
2650 error_exit "TPM emulation only available on POSIX systems"
2651 fi
3b8acc11
PB
2652fi
2653
f652e6af
AJ
2654##########################################
2655# fdt probe
d599938a 2656
fbb4121d
PB
2657case "$fdt" in
2658 auto | enabled | internal)
2659 # Simpler to always update submodule, even if not needed.
2d652f24 2660 git_submodules="${git_submodules} dtc"
fbb4121d
PB
2661 ;;
2662esac
f652e6af 2663
20ff075b 2664##########################################
9d49bcf6 2665# opengl probe (for sdl2, gtk)
b1546f32 2666
da076ffe 2667if test "$opengl" != "no" ; then
bc6a3565
AO
2668 epoxy=no
2669 if $pkg_config epoxy; then
2670 cat > $TMPC << EOF
2671#include <epoxy/egl.h>
2672int main(void) { return 0; }
2673EOF
2674 if compile_prog "" "" ; then
2675 epoxy=yes
2676 fi
2677 fi
2678
2679 if test "$epoxy" = "yes" ; then
2680 opengl_cflags="$($pkg_config --cflags epoxy)"
2681 opengl_libs="$($pkg_config --libs epoxy)"
da076ffe 2682 opengl=yes
20ff075b 2683 else
da076ffe 2684 if test "$opengl" = "yes" ; then
bc6a3565 2685 feature_not_found "opengl" "Please install epoxy with EGL"
20ff075b 2686 fi
f676c67e 2687 opengl_cflags=""
da076ffe
GH
2688 opengl_libs=""
2689 opengl=no
20ff075b
MW
2690 fi
2691fi
2692
a99d57bb
WG
2693##########################################
2694# libnuma probe
2695
2696if test "$numa" != "no" ; then
2697 cat > $TMPC << EOF
2698#include <numa.h>
2699int main(void) { return numa_available(); }
2700EOF
2701
2702 if compile_prog "" "-lnuma" ; then
2703 numa=yes
ab318051 2704 numa_libs="-lnuma"
a99d57bb
WG
2705 else
2706 if test "$numa" = "yes" ; then
2707 feature_not_found "numa" "install numactl devel"
2708 fi
2709 numa=no
2710 fi
2711fi
2712
955727d2
CT
2713# check for usbfs
2714have_usbfs=no
2715if test "$linux_user" = "yes"; then
96566d09
TP
2716 cat > $TMPC << EOF
2717#include <linux/usbdevice_fs.h>
2718
2719#ifndef USBDEVFS_GET_CAPABILITIES
2720#error "USBDEVFS_GET_CAPABILITIES undefined"
2721#endif
2722
2723#ifndef USBDEVFS_DISCONNECT_CLAIM
2724#error "USBDEVFS_DISCONNECT_CLAIM undefined"
2725#endif
2726
2727int main(void)
2728{
2729 return 0;
2730}
2731EOF
2732 if compile_prog "" ""; then
955727d2
CT
2733 have_usbfs=yes
2734 fi
955727d2 2735fi
751bcc39 2736
d9840e25
TS
2737##########################################
2738# check if we have VSS SDK headers for win
2739
e633a5c6
EB
2740if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
2741 test "$vss_win32_sdk" != "no" ; then
d9840e25 2742 case "$vss_win32_sdk" in
690604f6 2743 "") vss_win32_include="-isystem $source_path" ;;
d9840e25
TS
2744 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
2745 # handle path with spaces. So we symlink the headers into ".sdk/vss".
690604f6 2746 vss_win32_include="-isystem $source_path/.sdk/vss"
d9840e25
TS
2747 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
2748 ;;
690604f6 2749 *) vss_win32_include="-isystem $vss_win32_sdk"
d9840e25
TS
2750 esac
2751 cat > $TMPC << EOF
2752#define __MIDL_user_allocate_free_DEFINED__
2753#include <inc/win2003/vss.h>
2754int main(void) { return VSS_CTX_BACKUP; }
2755EOF
2756 if compile_prog "$vss_win32_include" "" ; then
2757 guest_agent_with_vss="yes"
2758 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
315d3184 2759 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
f33ca81f 2760 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
d9840e25
TS
2761 else
2762 if test "$vss_win32_sdk" != "" ; then
2763 echo "ERROR: Please download and install Microsoft VSS SDK:"
2764 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
2765 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
2766 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
2767 echo "ERROR: The headers are extracted in the directory \`inc'."
2768 feature_not_found "VSS support"
2769 fi
2770 guest_agent_with_vss="no"
2771 fi
2772fi
2773
2774##########################################
2775# lookup Windows platform SDK (if not specified)
2776# The SDK is needed only to build .tlb (type library) file of guest agent
2777# VSS provider from the source. It is usually unnecessary because the
2778# pre-compiled .tlb file is included.
2779
e633a5c6
EB
2780if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
2781 test "$guest_agent_with_vss" = "yes" ; then
d9840e25
TS
2782 if test -z "$win_sdk"; then
2783 programfiles="$PROGRAMFILES"
2784 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
2785 if test -n "$programfiles"; then
2786 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
2787 else
2788 feature_not_found "Windows SDK"
2789 fi
2790 elif test "$win_sdk" = "no"; then
2791 win_sdk=""
2792 fi
2793fi
2794
50cbebb9
MR
2795##########################################
2796# check if mingw environment provides a recent ntddscsi.h
e633a5c6 2797if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
50cbebb9
MR
2798 cat > $TMPC << EOF
2799#include <windows.h>
2800#include <ntddscsi.h>
2801int main(void) {
2802#if !defined(IOCTL_SCSI_GET_ADDRESS)
2803#error Missing required ioctl definitions
2804#endif
2805 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
2806 return addr.Lun;
2807}
2808EOF
2809 if compile_prog "" "" ; then
2810 guest_agent_ntddscsi=yes
996b9cdc 2811 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
50cbebb9
MR
2812 fi
2813fi
2814
8ca80760
RH
2815##########################################
2816# capstone
2817
e219c499 2818case "$capstone" in
8b18cdbf
RH
2819 auto | enabled | internal)
2820 # Simpler to always update submodule, even if not needed.
2d652f24 2821 git_submodules="${git_submodules} capstone"
e219c499
RH
2822 ;;
2823esac
8ca80760 2824
023367e6 2825##########################################
519175a2 2826# check and set a backend for coroutine
d0e2fce5 2827
7c2acc70 2828# We prefer ucontext, but it's not always possible. The fallback
33c53c54
DB
2829# is sigcontext. On Windows the only valid backend is the Windows
2830# specific one.
7c2acc70
PM
2831
2832ucontext_works=no
2833if test "$darwin" != "yes"; then
2834 cat > $TMPC << EOF
d0e2fce5 2835#include <ucontext.h>
cdf84806
PM
2836#ifdef __stub_makecontext
2837#error Ignoring glibc stub makecontext which will always fail
2838#endif
75cafad7 2839int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 2840EOF
7c2acc70
PM
2841 if compile_prog "" "" ; then
2842 ucontext_works=yes
2843 fi
2844fi
2845
2846if test "$coroutine" = ""; then
2847 if test "$mingw32" = "yes"; then
2848 coroutine=win32
2849 elif test "$ucontext_works" = "yes"; then
2850 coroutine=ucontext
2851 else
2852 coroutine=sigaltstack
d0e2fce5 2853 fi
519175a2 2854else
7c2acc70
PM
2855 case $coroutine in
2856 windows)
2857 if test "$mingw32" != "yes"; then
2858 error_exit "'windows' coroutine backend only valid for Windows"
2859 fi
2860 # Unfortunately the user visible backend name doesn't match the
2861 # coroutine-*.c filename for this case, so we have to adjust it here.
2862 coroutine=win32
2863 ;;
2864 ucontext)
2865 if test "$ucontext_works" != "yes"; then
2866 feature_not_found "ucontext"
2867 fi
2868 ;;
33c53c54 2869 sigaltstack)
7c2acc70
PM
2870 if test "$mingw32" = "yes"; then
2871 error_exit "only the 'windows' coroutine backend is valid for Windows"
2872 fi
2873 ;;
2874 *)
2875 error_exit "unknown coroutine backend $coroutine"
2876 ;;
2877 esac
d0e2fce5
AK
2878fi
2879
70c60c08 2880if test "$coroutine_pool" = ""; then
33c53c54 2881 coroutine_pool=yes
70c60c08
SH
2882fi
2883
7d992e4d 2884if test "$debug_stack_usage" = "yes"; then
7d992e4d
PL
2885 if test "$coroutine_pool" = "yes"; then
2886 echo "WARN: disabling coroutine pool for stack usage debugging"
2887 coroutine_pool=no
2888 fi
2889fi
2890
1e4f6065
DB
2891##################################################
2892# SafeStack
2893
2894
2895if test "$safe_stack" = "yes"; then
2896cat > $TMPC << EOF
2897int main(int argc, char *argv[])
2898{
2899#if ! __has_feature(safe_stack)
2900#error SafeStack Disabled
2901#endif
2902 return 0;
2903}
2904EOF
2905 flag="-fsanitize=safe-stack"
2906 # Check that safe-stack is supported and enabled.
2907 if compile_prog "-Werror $flag" "$flag"; then
2908 # Flag needed both at compilation and at linking
2909 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2910 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2911 else
2912 error_exit "SafeStack not supported by your compiler"
2913 fi
2914 if test "$coroutine" != "ucontext"; then
2915 error_exit "SafeStack is only supported by the coroutine backend ucontext"
2916 fi
2917else
2918cat > $TMPC << EOF
2919int main(int argc, char *argv[])
2920{
2921#if defined(__has_feature)
2922#if __has_feature(safe_stack)
2923#error SafeStack Enabled
2924#endif
2925#endif
2926 return 0;
2927}
2928EOF
2929if test "$safe_stack" = "no"; then
2930 # Make sure that safe-stack is disabled
2931 if ! compile_prog "-Werror" ""; then
2932 # SafeStack was already enabled, try to explicitly remove the feature
2933 flag="-fno-sanitize=safe-stack"
2934 if ! compile_prog "-Werror $flag" "$flag"; then
2935 error_exit "Configure cannot disable SafeStack"
2936 fi
2937 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2938 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2939 fi
2940else # "$safe_stack" = ""
2941 # Set safe_stack to yes or no based on pre-existing flags
2942 if compile_prog "-Werror" ""; then
2943 safe_stack="no"
2944 else
2945 safe_stack="yes"
2946 if test "$coroutine" != "ucontext"; then
2947 error_exit "SafeStack is only supported by the coroutine backend ucontext"
2948 fi
2949 fi
2950fi
2951fi
7d992e4d 2952
76a347e1
RH
2953########################################
2954# check if cpuid.h is usable.
2955
76a347e1
RH
2956cat > $TMPC << EOF
2957#include <cpuid.h>
2958int main(void) {
774d566c
PM
2959 unsigned a, b, c, d;
2960 int max = __get_cpuid_max(0, 0);
2961
2962 if (max >= 1) {
2963 __cpuid(1, a, b, c, d);
2964 }
2965
2966 if (max >= 7) {
2967 __cpuid_count(7, 0, a, b, c, d);
2968 }
2969
2970 return 0;
76a347e1
RH
2971}
2972EOF
2973if compile_prog "" "" ; then
2974 cpuid_h=yes
2975fi
2976
5dd89908
RH
2977##########################################
2978# avx2 optimization requirement check
2979#
2980# There is no point enabling this if cpuid.h is not usable,
2981# since we won't be able to select the new routines.
2982
e633a5c6 2983if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5dd89908
RH
2984 cat > $TMPC << EOF
2985#pragma GCC push_options
2986#pragma GCC target("avx2")
2987#include <cpuid.h>
2988#include <immintrin.h>
2989static int bar(void *a) {
2990 __m256i x = *(__m256i *)a;
2991 return _mm256_testz_si256(x, x);
2992}
2993int main(int argc, char *argv[]) { return bar(argv[0]); }
2994EOF
5b945f23 2995 if compile_object "-Werror" ; then
5dd89908 2996 avx2_opt="yes"
86583a07
LM
2997 else
2998 avx2_opt="no"
5dd89908
RH
2999 fi
3000fi
3001
6b8cd447
RH
3002##########################################
3003# avx512f optimization requirement check
3004#
3005# There is no point enabling this if cpuid.h is not usable,
3006# since we won't be able to select the new routines.
3007# by default, it is turned off.
3008# if user explicitly want to enable it, check environment
3009
3010if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
3011 cat > $TMPC << EOF
3012#pragma GCC push_options
3013#pragma GCC target("avx512f")
3014#include <cpuid.h>
3015#include <immintrin.h>
3016static int bar(void *a) {
3017 __m512i x = *(__m512i *)a;
3018 return _mm512_test_epi64_mask(x, x);
3019}
3020int main(int argc, char *argv[])
3021{
3022 return bar(argv[0]);
3023}
3024EOF
5b945f23 3025 if ! compile_object "-Werror" ; then
6b8cd447
RH
3026 avx512f_opt="no"
3027 fi
3028else
3029 avx512f_opt="no"
3030fi
3031
f540166b
RH
3032########################################
3033# check if __[u]int128_t is usable.
3034
3035int128=no
3036cat > $TMPC << EOF
3037__int128_t a;
3038__uint128_t b;
3039int main (void) {
3040 a = a + b;
3041 b = a * b;
464e3671 3042 a = a * a;
f540166b
RH
3043 return 0;
3044}
3045EOF
3046if compile_prog "" "" ; then
3047 int128=yes
3048fi
76a347e1 3049
7ebee43e
RH
3050#########################################
3051# See if 128-bit atomic operations are supported.
3052
3053atomic128=no
3054if test "$int128" = "yes"; then
3055 cat > $TMPC << EOF
3056int main(void)
3057{
3058 unsigned __int128 x = 0, y = 0;
bceac547
TH
3059 y = __atomic_load(&x, 0);
3060 __atomic_store(&x, y, 0);
3061 __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
7ebee43e
RH
3062 return 0;
3063}
3064EOF
3065 if compile_prog "" "" ; then
3066 atomic128=yes
3067 fi
3068fi
3069
e6cd4bb5 3070cmpxchg128=no
e633a5c6 3071if test "$int128" = yes && test "$atomic128" = no; then
e6cd4bb5
RH
3072 cat > $TMPC << EOF
3073int main(void)
3074{
3075 unsigned __int128 x = 0, y = 0;
3076 __sync_val_compare_and_swap_16(&x, y, x);
3077 return 0;
3078}
3079EOF
3080 if compile_prog "" "" ; then
3081 cmpxchg128=yes
3082 fi
3083fi
3084
fd0e6053
JS
3085########################################
3086# check if ccache is interfering with
3087# semantic analysis of macros
3088
5e4dfd3d 3089unset CCACHE_CPP2
fd0e6053
JS
3090ccache_cpp2=no
3091cat > $TMPC << EOF
3092static const int Z = 1;
3093#define fn() ({ Z; })
3094#define TAUT(X) ((X) == Z)
3095#define PAREN(X, Y) (X == Y)
3096#define ID(X) (X)
3097int main(int argc, char *argv[])
3098{
3099 int x = 0, y = 0;
3100 x = ID(x);
3101 x = fn();
3102 fn();
3103 if (PAREN(x, y)) return 0;
3104 if (TAUT(Z)) return 0;
3105 return 0;
3106}
3107EOF
3108
3109if ! compile_object "-Werror"; then
3110 ccache_cpp2=yes
3111fi
3112
b553a042
JS
3113#################################################
3114# clang does not support glibc + FORTIFY_SOURCE.
3115
3116if test "$fortify_source" != "no"; then
3117 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
3118 fortify_source="no";
e189091f 3119 elif test -n "$cxx" && has $cxx &&
cfcc7c14 3120 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
b553a042
JS
3121 fortify_source="no";
3122 else
3123 fortify_source="yes"
3124 fi
3125fi
3126
a40161cb
PB
3127##########################################
3128# check for usable membarrier system call
3129if test "$membarrier" = "yes"; then
3130 have_membarrier=no
3131 if test "$mingw32" = "yes" ; then
3132 have_membarrier=yes
3133 elif test "$linux" = "yes" ; then
3134 cat > $TMPC << EOF
3135 #include <linux/membarrier.h>
3136 #include <sys/syscall.h>
3137 #include <unistd.h>
3138 #include <stdlib.h>
3139 int main(void) {
3140 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
3141 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
3142 exit(0);
3143 }
3144EOF
3145 if compile_prog "" "" ; then
3146 have_membarrier=yes
3147 fi
3148 fi
3149 if test "$have_membarrier" = "no"; then
3150 feature_not_found "membarrier" "membarrier system call not available"
3151 fi
3152else
3153 # Do not enable it by default even for Mingw32, because it doesn't
3154 # work on Wine.
3155 membarrier=no
3156fi
3157
f0d92b56
LM
3158##########################################
3159# check for usable AF_ALG environment
4f67366e 3160have_afalg=no
f0d92b56
LM
3161cat > $TMPC << EOF
3162#include <errno.h>
3163#include <sys/types.h>
3164#include <sys/socket.h>
3165#include <linux/if_alg.h>
3166int main(void) {
3167 int sock;
3168 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
3169 return sock;
3170}
3171EOF
3172if compile_prog "" "" ; then
3173 have_afalg=yes
3174fi
3175if test "$crypto_afalg" = "yes"
3176then
3177 if test "$have_afalg" != "yes"
3178 then
3179 error_exit "AF_ALG requested but could not be detected"
3180 fi
3181fi
3182
3183
247724cb
MAL
3184##########################################
3185# checks for sanitizers
3186
247724cb
MAL
3187have_asan=no
3188have_ubsan=no
d83414e1
MAL
3189have_asan_iface_h=no
3190have_asan_iface_fiber=no
247724cb
MAL
3191
3192if test "$sanitizers" = "yes" ; then
b9f44da2 3193 write_c_skeleton
247724cb
MAL
3194 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
3195 have_asan=yes
3196 fi
b9f44da2
MAL
3197
3198 # we could use a simple skeleton for flags checks, but this also
3199 # detect the static linking issue of ubsan, see also:
3200 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
3201 cat > $TMPC << EOF
3202#include <stdlib.h>
3203int main(void) {
3204 void *tmp = malloc(10);
f2dfe54c
LB
3205 if (tmp != NULL) {
3206 return *(int *)(tmp + 2);
3207 }
d1abf3fc 3208 return 1;
b9f44da2
MAL
3209}
3210EOF
247724cb
MAL
3211 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
3212 have_ubsan=yes
3213 fi
d83414e1
MAL
3214
3215 if check_include "sanitizer/asan_interface.h" ; then
3216 have_asan_iface_h=yes
3217 fi
3218
3219 cat > $TMPC << EOF
3220#include <sanitizer/asan_interface.h>
3221int main(void) {
3222 __sanitizer_start_switch_fiber(0, 0, 0);
3223 return 0;
3224}
3225EOF
3226 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
3227 have_asan_iface_fiber=yes
3228 fi
247724cb
MAL
3229fi
3230
0aebab04
LY
3231# Thread sanitizer is, for now, much noisier than the other sanitizers;
3232# keep it separate until that is not the case.
3233if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
3234 error_exit "TSAN is not supported with other sanitiziers."
3235fi
3236have_tsan=no
3237have_tsan_iface_fiber=no
3238if test "$tsan" = "yes" ; then
3239 write_c_skeleton
3240 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
3241 have_tsan=yes
3242 fi
3243 cat > $TMPC << EOF
3244#include <sanitizer/tsan_interface.h>
3245int main(void) {
3246 __tsan_create_fiber(0);
3247 return 0;
3248}
3249EOF
3250 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
3251 have_tsan_iface_fiber=yes
3252 fi
3253fi
3254
675b9b53
MAL
3255##########################################
3256# check for slirp
3257
3258case "$slirp" in
4d34a86b
PB
3259 auto | enabled | internal)
3260 # Simpler to always update submodule, even if not needed.
2d652f24 3261 git_submodules="${git_submodules} slirp"
675b9b53
MAL
3262 ;;
3263esac
3264
b8e0c493
JD
3265# Check for slirp smbd dupport
3266: ${smbd=${SMBD-/usr/sbin/smbd}}
3267if test "$slirp_smbd" != "no" ; then
3268 if test "$mingw32" = "yes" ; then
3269 if test "$slirp_smbd" = "yes" ; then
3270 error_exit "Host smbd not supported on this platform."
3271 fi
3272 slirp_smbd=no
3273 else
3274 slirp_smbd=yes
3275 fi
3276fi
3277
54e7aac0
AK
3278##########################################
3279# check for usable __NR_keyctl syscall
3280
3281if test "$linux" = "yes" ; then
3282
3283 have_keyring=no
3284 cat > $TMPC << EOF
3285#include <errno.h>
3286#include <asm/unistd.h>
3287#include <linux/keyctl.h>
3288#include <unistd.h>
3289int main(void) {
3290 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
3291}
3292EOF
3293 if compile_prog "" "" ; then
3294 have_keyring=yes
3295 fi
3296fi
3297if test "$secret_keyring" != "no"
3298then
b418d265 3299 if test "$have_keyring" = "yes"
54e7aac0
AK
3300 then
3301 secret_keyring=yes
3302 else
3303 if test "$secret_keyring" = "yes"
3304 then
3305 error_exit "syscall __NR_keyctl requested, \
3306but not implemented on your system"
3307 else
3308 secret_keyring=no
3309 fi
3310 fi
3311fi
3312
7e24e92a 3313##########################################
e86ecd4b
JQ
3314# End of CC checks
3315# After here, no more $cc or $ld runs
3316
d83414e1
MAL
3317write_c_skeleton
3318
1d728c39 3319if test "$gcov" = "yes" ; then
bf0e56a3 3320 :
b553a042 3321elif test "$fortify_source" = "yes" ; then
086d5f75
PB
3322 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
3323 debug=no
3324fi
086d5f75
PB
3325
3326case "$ARCH" in
3327alpha)
3328 # Ensure there's only a single GP
3329 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
3330;;
3331esac
3332
3333if test "$gprof" = "yes" ; then
3334 QEMU_CFLAGS="-p $QEMU_CFLAGS"
3335 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
3336fi
a316e378 3337
247724cb 3338if test "$have_asan" = "yes"; then
db5adeaa
PB
3339 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
3340 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
d83414e1
MAL
3341 if test "$have_asan_iface_h" = "no" ; then
3342 echo "ASAN build enabled, but ASAN header missing." \
3343 "Without code annotation, the report may be inferior."
3344 elif test "$have_asan_iface_fiber" = "no" ; then
3345 echo "ASAN build enabled, but ASAN header is too old." \
3346 "Without code annotation, the report may be inferior."
3347 fi
247724cb 3348fi
0aebab04
LY
3349if test "$have_tsan" = "yes" ; then
3350 if test "$have_tsan_iface_fiber" = "yes" ; then
3351 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
3352 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
3353 else
3354 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
3355 fi
3356elif test "$tsan" = "yes" ; then
3357 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
3358fi
247724cb 3359if test "$have_ubsan" = "yes"; then
db5adeaa
PB
3360 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
3361 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
247724cb
MAL
3362fi
3363
3efac6eb 3364##########################################
3efac6eb 3365
0aebab04
LY
3366# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
3367if test "$solaris" = "no" && test "$tsan" = "no"; then
e86ecd4b 3368 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
db5adeaa 3369 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
e86ecd4b
JQ
3370 fi
3371fi
3372
952afb71
BS
3373# Use ASLR, no-SEH and DEP if available
3374if test "$mingw32" = "yes" ; then
cb8baa77
MCA
3375 flags="--no-seh --nxcompat"
3376
3377 # Disable ASLR for debug builds to allow debugging with gdb
3378 if test "$debug" = "no" ; then
3379 flags="--dynamicbase $flags"
3380 fi
3381
3382 for flag in $flags; do
e9a3591f 3383 if ld_has $flag ; then
db5adeaa 3384 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
952afb71
BS
3385 fi
3386 done
3387fi
3388
9d6bc27b
MR
3389# Probe for guest agent support/options
3390
e8ef31a3 3391if [ "$guest_agent" != "no" ]; then
a5125905
LV
3392 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
3393 guest_agent=no
3394 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
e8ef31a3
MT
3395 guest_agent=yes
3396 elif [ "$guest_agent" != yes ]; then
3397 guest_agent=no
3398 else
3399 error_exit "Guest agent is not supported on this platform"
ca35f780 3400 fi
00c705fb 3401fi
ca35f780 3402
b846ab7c 3403# Guest agent Windows MSI package
9d6bc27b 3404
b846ab7c
PB
3405if test "$QEMU_GA_MANUFACTURER" = ""; then
3406 QEMU_GA_MANUFACTURER=QEMU
9d6bc27b 3407fi
b846ab7c
PB
3408if test "$QEMU_GA_DISTRO" = ""; then
3409 QEMU_GA_DISTRO=Linux
9d6bc27b 3410fi
b846ab7c
PB
3411if test "$QEMU_GA_VERSION" = ""; then
3412 QEMU_GA_VERSION=$(cat $source_path/VERSION)
3413fi
3414
3415QEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
9d6bc27b 3416
ca35f780
PB
3417# Mac OS X ships with a broken assembler
3418roms=
e633a5c6
EB
3419if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
3420 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
7000a12e 3421 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
e57218b6 3422 # Different host OS linkers have different ideas about the name of the ELF
c65d5e4e
BS
3423 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
3424 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
3425 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
e57218b6
PM
3426 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
3427 ld_i386_emulation="$emu"
3428 roms="optionrom"
3429 break
3430 fi
3431 done
ca35f780 3432fi
ca35f780 3433
2e33c3f8 3434# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
a5b2afd5 3435# or -march=z10 (which is the lowest architecture level that Clang supports)
9933c305 3436if test "$cpu" = "s390x" ; then
2e33c3f8 3437 write_c_skeleton
a5b2afd5
TH
3438 compile_prog "-march=z900" ""
3439 has_z900=$?
3af448b3 3440 if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then
a5b2afd5
TH
3441 if [ $has_z900 != 0 ]; then
3442 echo "WARNING: Your compiler does not support the z900!"
3443 echo " The s390-ccw bios will only work with guest CPUs >= z10."
3444 fi
2e33c3f8 3445 roms="$roms s390-ccw"
1ef6bfc2
PMD
3446 # SLOF is required for building the s390-ccw firmware on s390x,
3447 # since it is using the libnet code from SLOF for network booting.
2d652f24 3448 git_submodules="${git_submodules} roms/SLOF"
2e33c3f8 3449 fi
9933c305
CB
3450fi
3451
11cde1c8
BD
3452# Check that the C++ compiler exists and works with the C compiler.
3453# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
3454if has $cxx; then
3455 cat > $TMPC <<EOF
3456int c_function(void);
3457int main(void) { return c_function(); }
3458EOF
3459
3460 compile_object
3461
3462 cat > $TMPCXX <<EOF
3463extern "C" {
3464 int c_function(void);
3465}
3466int c_function(void) { return 42; }
3467EOF
3468
3469 update_cxxflags
3470
5770e8af 3471 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
11cde1c8
BD
3472 # C++ compiler $cxx works ok with C compiler $cc
3473 :
3474 else
3475 echo "C++ compiler $cxx does not work with C compiler $cc"
3476 echo "Disabling C++ specific optional code"
3477 cxx=
3478 fi
3479else
3480 echo "No C++ compiler available; disabling C++ specific optional code"
3481 cxx=
3482fi
3483
7d7dbf9d
DS
3484if !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
3485 exit 1
5d91a2ed 3486fi
5d91a2ed 3487
98ec69ac 3488config_host_mak="config-host.mak"
98ec69ac 3489
98ec69ac 3490echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 3491echo >> $config_host_mak
98ec69ac 3492
e6c3b0f7 3493echo all: >> $config_host_mak
cc84d63a 3494echo "GIT=$git" >> $config_host_mak
aef45d51 3495echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
7d7dbf9d 3496echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
804edf29 3497
98ec69ac 3498echo "ARCH=$ARCH" >> $config_host_mak
727e5283 3499
f8393946 3500if test "$debug_tcg" = "yes" ; then
2358a494 3501 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 3502fi
1625af87 3503if test "$strip_opt" = "yes" ; then
52ba784d 3504 echo "STRIP=${strip}" >> $config_host_mak
1625af87 3505fi
67b915a5 3506if test "$mingw32" = "yes" ; then
98ec69ac 3507 echo "CONFIG_WIN32=y" >> $config_host_mak
d9840e25
TS
3508 if test "$guest_agent_with_vss" = "yes" ; then
3509 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 3510 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
3511 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
3512 fi
50cbebb9 3513 if test "$guest_agent_ntddscsi" = "yes" ; then
76dc75ca 3514 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
50cbebb9 3515 fi
b846ab7c
PB
3516 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
3517 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
3518 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
3519 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
210fa556 3520else
35f4df27 3521 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
3522fi
3523
3524if test "$linux" = "yes" ; then
3525 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 3526fi
128ab2ff 3527
83fb7adf 3528if test "$darwin" = "yes" ; then
98ec69ac 3529 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 3530fi
b29fe3ed 3531
ec530c81 3532if test "$solaris" = "yes" ; then
98ec69ac 3533 echo "CONFIG_SOLARIS=y" >> $config_host_mak
ec530c81 3534fi
179cf400
AF
3535if test "$haiku" = "yes" ; then
3536 echo "CONFIG_HAIKU=y" >> $config_host_mak
3537fi
97a847bc 3538if test "$static" = "yes" ; then
98ec69ac 3539 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 3540fi
1ba16968 3541if test "$profiler" = "yes" ; then
2358a494 3542 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 3543fi
c932ce31
PB
3544if test "$want_tools" = "yes" ; then
3545 echo "CONFIG_TOOLS=y" >> $config_host_mak
3546fi
f15bff25
PB
3547if test "$guest_agent" = "yes" ; then
3548 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
3549fi
b8e0c493
JD
3550if test "$slirp_smbd" = "yes" ; then
3551 echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
3552 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
3553fi
015a33bd
GA
3554if test "$l2tpv3" = "yes" ; then
3555 echo "CONFIG_L2TPV3=y" >> $config_host_mak
3556fi
4cc600d2
PB
3557if test "$gprof" = "yes" ; then
3558 echo "CONFIG_GPROF=y" >> $config_host_mak
3559fi
b64ec4e4
FZ
3560echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
3561echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
e5f05f8c
KW
3562if test "$block_drv_whitelist_tools" = "yes" ; then
3563 echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
3564fi
dce512de
CH
3565if test "$xfs" = "yes" ; then
3566 echo "CONFIG_XFS=y" >> $config_host_mak
3567fi
89138857 3568qemu_version=$(head $source_path/VERSION)
2358a494 3569echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 3570echo "SRC_PATH=$source_path" >> $config_host_mak
2b1f35b9 3571echo "TARGET_DIRS=$target_list" >> $config_host_mak
17969268 3572if test "$modules" = "yes"; then
e26110cf
FZ
3573 # $shacmd can generate a hash started with digit, which the compiler doesn't
3574 # like as an symbol. So prefix it with an underscore
89138857 3575 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
17969268
FZ
3576 echo "CONFIG_MODULES=y" >> $config_host_mak
3577fi
bd83c861
CE
3578if test "$module_upgrades" = "yes"; then
3579 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
3580fi
955727d2
CT
3581if test "$have_usbfs" = "yes" ; then
3582 echo "CONFIG_USBFS=y" >> $config_host_mak
3583fi
f876b765
MAL
3584if test "$gio" = "yes" ; then
3585 echo "CONFIG_GIO=y" >> $config_host_mak
3586 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
3587 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
5ecfb76c
PB
3588fi
3589if test "$gdbus_codegen" != "" ; then
25a97a56 3590 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
f876b765 3591fi
a1c5e949 3592echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
277abf15 3593
1badb709 3594if test "$xen" = "enabled" ; then
6dbd588a 3595 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 3596 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
582ea95f
MAL
3597 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
3598 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
e37630ca 3599fi
5e9be92d
NB
3600if test "$vhost_scsi" = "yes" ; then
3601 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
3602fi
af3bba76
PB
3603if test "$vhost_net" = "yes" ; then
3604 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
3605fi
3606if test "$vhost_net_user" = "yes" ; then
56f41de7 3607 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
03ce5744 3608fi
108a6481
CL
3609if test "$vhost_net_vdpa" = "yes" ; then
3610 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
3611fi
042cea27
GA
3612if test "$vhost_crypto" = "yes" ; then
3613 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
3614fi
fc0b9b0e
SH
3615if test "$vhost_vsock" = "yes" ; then
3616 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5fe97d88
SG
3617 if test "$vhost_user" = "yes" ; then
3618 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
3619 fi
fc0b9b0e 3620fi
299e6f19
PB
3621if test "$vhost_kernel" = "yes" ; then
3622 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
3623fi
e6a74868
MAL
3624if test "$vhost_user" = "yes" ; then
3625 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
3626fi
108a6481
CL
3627if test "$vhost_vdpa" = "yes" ; then
3628 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
3629fi
98fc1ada
DDAG
3630if test "$vhost_user_fs" = "yes" ; then
3631 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
3632fi
a40161cb
PB
3633if test "$membarrier" = "yes" ; then
3634 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
3635fi
e5b46549
RH
3636if test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then
3637 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
3638fi
58d3f3ff 3639
da076ffe
GH
3640if test "$opengl" = "yes" ; then
3641 echo "CONFIG_OPENGL=y" >> $config_host_mak
de2d3005 3642 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
da076ffe 3643 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
20ff075b
MW
3644fi
3645
99f2dbd3
LL
3646if test "$avx2_opt" = "yes" ; then
3647 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
3648fi
3649
6b8cd447
RH
3650if test "$avx512f_opt" = "yes" ; then
3651 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
3652fi
3653
83fb7adf 3654# XXX: suppress that
7d3505c5 3655if [ "$bsd" = "yes" ] ; then
2358a494 3656 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
3657fi
3658
3556c233
PB
3659if test "$qom_cast_debug" = "yes" ; then
3660 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
3661fi
d0e2fce5 3662
7c2acc70 3663echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
3664if test "$coroutine_pool" = "yes" ; then
3665 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
3666else
3667 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
3668fi
20ff6c80 3669
7d992e4d
PL
3670if test "$debug_stack_usage" = "yes" ; then
3671 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
3672fi
3673
f0d92b56
LM
3674if test "$crypto_afalg" = "yes" ; then
3675 echo "CONFIG_AF_ALG=y" >> $config_host_mak
3676fi
3677
d83414e1
MAL
3678if test "$have_asan_iface_fiber" = "yes" ; then
3679 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
3680fi
3681
0aebab04
LY
3682if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
3683 echo "CONFIG_TSAN=y" >> $config_host_mak
3684fi
3685
76a347e1
RH
3686if test "$cpuid_h" = "yes" ; then
3687 echo "CONFIG_CPUID_H=y" >> $config_host_mak
3688fi
3689
f540166b
RH
3690if test "$int128" = "yes" ; then
3691 echo "CONFIG_INT128=y" >> $config_host_mak
3692fi
3693
7ebee43e
RH
3694if test "$atomic128" = "yes" ; then
3695 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
3696fi
3697
e6cd4bb5
RH
3698if test "$cmpxchg128" = "yes" ; then
3699 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
3700fi
3701
b10d49d7 3702if test "$libssh" = "yes" ; then
484e2cc7 3703 echo "CONFIG_LIBSSH=y" >> $config_host_mak
b10d49d7
PT
3704 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
3705 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
0a12ec87
RJ
3706fi
3707
ed1701c6
DDAG
3708if test "$live_block_migration" = "yes" ; then
3709 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
3710fi
3711
3b8acc11 3712if test "$tpm" = "yes"; then
3cae16db 3713 echo 'CONFIG_TPM=y' >> $config_host_mak
3b8acc11
PB
3714fi
3715
2da776db
MH
3716if test "$rdma" = "yes" ; then
3717 echo "CONFIG_RDMA=y" >> $config_host_mak
392fb643 3718 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
2da776db
MH
3719fi
3720
21ab34c9
MA
3721if test "$pvrdma" = "yes" ; then
3722 echo "CONFIG_PVRDMA=y" >> $config_host_mak
3723fi
3724
a6b1d4c0
CX
3725if test "$replication" = "yes" ; then
3726 echo "CONFIG_REPLICATION=y" >> $config_host_mak
3727fi
3728
ba59fb77
PB
3729if test "$debug_mutex" = "yes" ; then
3730 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
3731fi
e0580342 3732
2f740136
JC
3733if test "$bochs" = "yes" ; then
3734 echo "CONFIG_BOCHS=y" >> $config_host_mak
3735fi
3736if test "$cloop" = "yes" ; then
3737 echo "CONFIG_CLOOP=y" >> $config_host_mak
3738fi
3739if test "$dmg" = "yes" ; then
3740 echo "CONFIG_DMG=y" >> $config_host_mak
3741fi
3742if test "$qcow1" = "yes" ; then
3743 echo "CONFIG_QCOW1=y" >> $config_host_mak
3744fi
3745if test "$vdi" = "yes" ; then
3746 echo "CONFIG_VDI=y" >> $config_host_mak
3747fi
3748if test "$vvfat" = "yes" ; then
3749 echo "CONFIG_VVFAT=y" >> $config_host_mak
3750fi
3751if test "$qed" = "yes" ; then
3752 echo "CONFIG_QED=y" >> $config_host_mak
3753fi
3754if test "$parallels" = "yes" ; then
3755 echo "CONFIG_PARALLELS=y" >> $config_host_mak
3756fi
2f740136 3757
40e8c6f4
AB
3758if test "$plugins" = "yes" ; then
3759 echo "CONFIG_PLUGIN=y" >> $config_host_mak
26fffe29
EC
3760 # Copy the export object list to the build dir
3761 if test "$ld_dynamic_list" = "yes" ; then
3762 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
3763 ld_symbols=qemu-plugins-ld.symbols
3764 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
3765 elif test "$ld_exported_symbols_list" = "yes" ; then
3766 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
3767 ld64_symbols=qemu-plugins-ld64.symbols
3768 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
3769 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
3770 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
3771 else
3772 error_exit \
3773 "If \$plugins=yes, either \$ld_dynamic_list or " \
3774 "\$ld_exported_symbols_list should have been set to 'yes'."
3775 fi
40e8c6f4
AB
3776fi
3777
b1863ccc
AB
3778if test -n "$gdb_bin"; then
3779 gdb_version=$($gdb_bin --version | head -n 1)
d6a66c81 3780 if version_ge ${gdb_version##* } 9.1; then
b1863ccc
AB
3781 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
3782 fi
f48e590a
AB
3783fi
3784
54e7aac0
AK
3785if test "$secret_keyring" = "yes" ; then
3786 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
3787fi
3788
98ec69ac 3789echo "ROMS=$roms" >> $config_host_mak
804edf29 3790echo "MAKE=$make" >> $config_host_mak
c886edfb 3791echo "PYTHON=$python" >> $config_host_mak
39d87c8c 3792echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
a5665051 3793echo "MESON=$meson" >> $config_host_mak
09e93326 3794echo "NINJA=$ninja" >> $config_host_mak
804edf29 3795echo "CC=$cc" >> $config_host_mak
433de74c 3796echo "HOST_CC=$host_cc" >> $config_host_mak
a31a8642 3797if $iasl -h > /dev/null 2>&1; then
859aef02 3798 echo "CONFIG_IASL=$iasl" >> $config_host_mak
a31a8642 3799fi
804edf29 3800echo "AR=$ar" >> $config_host_mak
cdbd727c 3801echo "AS=$as" >> $config_host_mak
5f6f0e27 3802echo "CCAS=$ccas" >> $config_host_mak
3dd46c78 3803echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
3804echo "OBJCOPY=$objcopy" >> $config_host_mak
3805echo "LD=$ld" >> $config_host_mak
46eef33b 3806echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 3807echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
11cde1c8 3808echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
a81df1b6
PB
3809echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
3810echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
8a99e9a3 3811echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
e57218b6 3812echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
804edf29 3813echo "EXESUF=$EXESUF" >> $config_host_mak
f15bff25 3814echo "LIBS_QGA=$libs_qga" >> $config_host_mak
804edf29 3815
b767d257
MMG
3816if test "$rng_none" = "yes"; then
3817 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
3818fi
3819
6efd7517
PM
3820# use included Linux headers
3821if test "$linux" = "yes" ; then
a307beb6 3822 mkdir -p linux-headers
6efd7517 3823 case "$cpu" in
c72b26ec 3824 i386|x86_64|x32)
08312a63 3825 linux_arch=x86
6efd7517 3826 ;;
f8378acc 3827 ppc|ppc64|ppc64le)
08312a63 3828 linux_arch=powerpc
6efd7517
PM
3829 ;;
3830 s390x)
08312a63
PM
3831 linux_arch=s390
3832 ;;
1f080313
CF
3833 aarch64)
3834 linux_arch=arm64
3835 ;;
222e7d11
SL
3836 mips64)
3837 linux_arch=mips
3838 ;;
08312a63
PM
3839 *)
3840 # For most CPUs the kernel architecture name and QEMU CPU name match.
3841 linux_arch="$cpu"
6efd7517
PM
3842 ;;
3843 esac
08312a63
PM
3844 # For non-KVM architectures we will not have asm headers
3845 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
3846 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
3847 fi
6efd7517
PM
3848fi
3849
1d14ffa9 3850for target in $target_list; do
fdb75aef
PB
3851 target_dir="$target"
3852 target_name=$(echo $target | cut -d '-' -f 1)
3853 mkdir -p $target_dir
3854 case $target in
3855 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
3856 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
3857 esac
3858done
7d13299d 3859
765686d6 3860echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
fdb75aef
PB
3861if test "$default_targets" = "yes"; then
3862 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
3863fi
a540f158 3864
a99d57bb
WG
3865if test "$numa" = "yes"; then
3866 echo "CONFIG_NUMA=y" >> $config_host_mak
ab318051 3867 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
a99d57bb
WG
3868fi
3869
fd0e6053
JS
3870if test "$ccache_cpp2" = "yes"; then
3871 echo "export CCACHE_CPP2=y" >> $config_host_mak
3872fi
3873
1e4f6065
DB
3874if test "$safe_stack" = "yes"; then
3875 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
3876fi
3877
e29e5c6e
PM
3878# If we're using a separate build tree, set it up now.
3879# DIRS are directories which we simply mkdir in the build tree;
3880# LINKS are things to symlink back into the source tree
3881# (these can be both files and directories).
3882# Caution: do not add files or directories here using wildcards. This
3883# will result in problems later if a new file matching the wildcard is
3884# added to the source tree -- nothing will cause configure to be rerun
3885# so the build tree will be missing the link back to the new file, and
3886# tests might fail. Prefer to keep the relevant files in their own
3887# directory and symlink the directory instead.
09db9b9d
GH
3888# UNLINK is used to remove symlinks from older development versions
3889# that might get into the way when doing "git update" without doing
3890# a "make distclean" in between.
9d49bcf6 3891DIRS="tests tests/tcg tests/qapi-schema tests/qtest/libqos"
1cf4323e 3892DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
b855f8d1 3893DIRS="$DIRS docs docs/interop fsdev scsi"
744a928c 3894DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
8db2a4fd 3895DIRS="$DIRS roms/seabios"
c17a386b 3896DIRS="$DIRS contrib/plugins/"
2038f8c8 3897LINKS="Makefile"
3941996b 3898LINKS="$LINKS tests/tcg/Makefile.target"
ddcf607f 3899LINKS="$LINKS pc-bios/optionrom/Makefile"
e29e5c6e 3900LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8db2a4fd 3901LINKS="$LINKS roms/seabios/Makefile"
e29e5c6e
PM
3902LINKS="$LINKS pc-bios/qemu-icon.bmp"
3903LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
39950353
PM
3904LINKS="$LINKS tests/acceptance tests/data"
3905LINKS="$LINKS tests/qemu-iotests/check"
8f8fd9ed 3906LINKS="$LINKS python"
c17a386b 3907LINKS="$LINKS contrib/plugins/Makefile "
09db9b9d 3908UNLINK="pc-bios/keymaps"
753d11f2
RH
3909for bios_file in \
3910 $source_path/pc-bios/*.bin \
3a631b8e 3911 $source_path/pc-bios/*.elf \
225a9ab8 3912 $source_path/pc-bios/*.lid \
753d11f2
RH
3913 $source_path/pc-bios/*.rom \
3914 $source_path/pc-bios/*.dtb \
e89e33e1 3915 $source_path/pc-bios/*.img \
753d11f2 3916 $source_path/pc-bios/openbios-* \
4e73c781 3917 $source_path/pc-bios/u-boot.* \
26ce90fd 3918 $source_path/pc-bios/edk2-*.fd.bz2 \
cd946e5c
JA
3919 $source_path/pc-bios/palcode-* \
3920 $source_path/pc-bios/qemu_vga.ndrv
3921
753d11f2 3922do
e29e5c6e 3923 LINKS="$LINKS pc-bios/$(basename $bios_file)"
d1807a4f
PB
3924done
3925mkdir -p $DIRS
e29e5c6e 3926for f in $LINKS ; do
0f4d8894 3927 if [ -e "$source_path/$f" ]; then
f9245e10
PM
3928 symlink "$source_path/$f" "$f"
3929 fi
d1807a4f 3930done
09db9b9d
GH
3931for f in $UNLINK ; do
3932 if [ -L "$f" ]; then
3933 rm -f "$f"
3934 fi
3935done
1ad2134f 3936
2038f8c8
PB
3937(for i in $cross_cc_vars; do
3938 export $i
3939done
de6d7e6b 3940export target_list source_path use_containers ARCH
2038f8c8
PB
3941$source_path/tests/tcg/configure.sh)
3942
c34ebfdc 3943# temporary config to build submodules
8db2a4fd 3944for rom in seabios; do
c34ebfdc 3945 config_mak=roms/$rom/config.mak
37116c89 3946 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 3947 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
cdbd727c 3948 echo "AS=$as" >> $config_mak
5f6f0e27 3949 echo "CCAS=$ccas" >> $config_mak
c34ebfdc
AL
3950 echo "CC=$cc" >> $config_mak
3951 echo "BCC=bcc" >> $config_mak
3dd46c78 3952 echo "CPP=$cpp" >> $config_mak
c34ebfdc 3953 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 3954 echo "IASL=$iasl" >> $config_mak
c34ebfdc 3955 echo "LD=$ld" >> $config_mak
9f81aeb5 3956 echo "RANLIB=$ranlib" >> $config_mak
c34ebfdc
AL
3957done
3958
a5665051 3959if test "$skip_meson" = no; then
d77e90fa
PB
3960 cross="config-meson.cross.new"
3961 meson_quote() {
47b30835 3962 echo "'$(echo $* | sed "s/ /','/g")'"
d77e90fa
PB
3963 }
3964
3965 echo "# Automatically generated by configure - do not modify" > $cross
3966 echo "[properties]" >> $cross
d1d5e9ee
AB
3967
3968 # unroll any custom device configs
11bdcfcd
AB
3969 for a in $device_archs; do
3970 eval "c=\$devices_${a}"
3971 echo "${a}-softmmu = '$c'" >> $cross
3972 done
d1d5e9ee 3973
d77e90fa
PB
3974 test -z "$cxx" && echo "link_language = 'c'" >> $cross
3975 echo "[built-in options]" >> $cross
3976 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
3977 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
3978 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
3979 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
3980 echo "[binaries]" >> $cross
4dba2789
PB
3981 echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross
3982 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross
3983 test -n "$objcc" && echo "objc = [$(meson_quote $objcc $CPU_CFLAGS)]" >> $cross
d77e90fa
PB
3984 echo "ar = [$(meson_quote $ar)]" >> $cross
3985 echo "nm = [$(meson_quote $nm)]" >> $cross
3986 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
3987 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
3988 if has $sdl2_config; then
3989 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
3990 fi
3991 echo "strip = [$(meson_quote $strip)]" >> $cross
3992 echo "windres = [$(meson_quote $windres)]" >> $cross
3993 if test "$cross_compile" = "yes"; then
fc929892 3994 cross_arg="--cross-file config-meson.cross"
fc929892
MAL
3995 echo "[host_machine]" >> $cross
3996 if test "$mingw32" = "yes" ; then
3997 echo "system = 'windows'" >> $cross
fc929892 3998 fi
853b4baf
TH
3999 if test "$linux" = "yes" ; then
4000 echo "system = 'linux'" >> $cross
4001 fi
0ca321ea
JD
4002 if test "$darwin" = "yes" ; then
4003 echo "system = 'darwin'" >> $cross
4004 fi
fc929892 4005 case "$ARCH" in
f6bca9df 4006 i386)
fc929892
MAL
4007 echo "cpu_family = 'x86'" >> $cross
4008 ;;
f8bb7e1c 4009 x86_64|x32)
f6bca9df
JD
4010 echo "cpu_family = 'x86_64'" >> $cross
4011 ;;
fc929892
MAL
4012 ppc64le)
4013 echo "cpu_family = 'ppc64'" >> $cross
4014 ;;
4015 *)
4016 echo "cpu_family = '$ARCH'" >> $cross
4017 ;;
4018 esac
4019 echo "cpu = '$cpu'" >> $cross
4020 if test "$bigendian" = "yes" ; then
4021 echo "endian = 'big'" >> $cross
4022 else
4023 echo "endian = 'little'" >> $cross
4024 fi
d77e90fa 4025 else
fc929892 4026 cross_arg="--native-file config-meson.cross"
d77e90fa
PB
4027 fi
4028 mv $cross config-meson.cross
fc929892 4029
d77e90fa 4030 rm -rf meson-private meson-info meson-logs
61d63097
PB
4031 run_meson() {
4032 NINJA=$ninja $meson setup \
d17f305a
PB
4033 --prefix "$prefix" \
4034 --libdir "$libdir" \
4035 --libexecdir "$libexecdir" \
4036 --bindir "$bindir" \
4037 --includedir "$includedir" \
4038 --datadir "$datadir" \
4039 --mandir "$mandir" \
4040 --sysconfdir "$sysconfdir" \
16bf7a33 4041 --localedir "$localedir" \
d17f305a 4042 --localstatedir "$local_statedir" \
3b4da132
PB
4043 -Daudio_drv_list=$audio_drv_list \
4044 -Ddefault_devices=$default_devices \
d17f305a 4045 -Ddocdir="$docdir" \
16bf7a33 4046 -Dqemu_firmwarepath="$firmwarepath" \
73f3aa37 4047 -Dqemu_suffix="$qemu_suffix" \
3b4da132
PB
4048 -Dsphinx_build="$sphinx_build" \
4049 -Dtrace_file="$trace_file" \
a5665051
PB
4050 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
4051 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
4052 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
4053 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
da6d48b9 4054 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
bf0e56a3 4055 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
3b4da132
PB
4056 -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
4057 -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
537b7248 4058 $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
332008e0 4059 $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
61d63097
PB
4060 "$@" $cross_arg "$PWD" "$source_path"
4061 }
4062 eval run_meson $meson_options
d77e90fa
PB
4063 if test "$?" -ne 0 ; then
4064 error_exit "meson setup failed"
4065 fi
699d3884
PB
4066else
4067 if test -f meson-private/cmd_line.txt; then
4068 # Adjust old command line options whose type was changed
4069 # Avoids having to use "setup --wipe" when Meson is upgraded
4070 perl -i -ne '
4071 s/^gettext = true$/gettext = auto/;
4072 s/^gettext = false$/gettext = disabled/;
654d6b04 4073 /^b_staticpic/ && next;
699d3884
PB
4074 print;' meson-private/cmd_line.txt
4075 fi
a5665051
PB
4076fi
4077
2d838d9b
AB
4078if test -n "${deprecated_features}"; then
4079 echo "Warning, deprecated features enabled."
a476b216 4080 echo "Please see docs/about/deprecated.rst"
2d838d9b
AB
4081 echo " features: ${deprecated_features}"
4082fi
4083
e0447a83
TH
4084# Create list of config switches that should be poisoned in common code...
4085# but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special.
54b0306e
TH
4086target_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null)
4087if test -n "$target_configs_h" ; then
4088 sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \
4089 -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \
4090 $target_configs_h | sort -u > config-poison.h
4091else
4092 :> config-poison.h
4093fi
e0447a83 4094
dc655404
MT
4095# Save the configure command line for later reuse.
4096cat <<EOD >config.status
4097#!/bin/sh
4098# Generated by configure.
4099# Run this file to recreate the current configuration.
4100# Compiler output produced by configure, useful for debugging
4101# configure, is in config.log if it exists.
4102EOD
e811da7f
DB
4103
4104preserve_env() {
4105 envname=$1
4106
4107 eval envval=\$$envname
4108
4109 if test -n "$envval"
4110 then
4111 echo "$envname='$envval'" >> config.status
4112 echo "export $envname" >> config.status
4113 else
4114 echo "unset $envname" >> config.status
4115 fi
4116}
4117
4118# Preserve various env variables that influence what
4119# features/build target configure will detect
4120preserve_env AR
4121preserve_env AS
4122preserve_env CC
4123preserve_env CPP
4124preserve_env CXX
4125preserve_env INSTALL
4126preserve_env LD
4127preserve_env LD_LIBRARY_PATH
4128preserve_env LIBTOOL
4129preserve_env MAKE
4130preserve_env NM
4131preserve_env OBJCOPY
4132preserve_env PATH
4133preserve_env PKG_CONFIG
4134preserve_env PKG_CONFIG_LIBDIR
4135preserve_env PKG_CONFIG_PATH
4136preserve_env PYTHON
e811da7f
DB
4137preserve_env SDL2_CONFIG
4138preserve_env SMBD
4139preserve_env STRIP
4140preserve_env WINDRES
4141
dc655404 4142printf "exec" >>config.status
a5665051 4143for i in "$0" "$@"; do
835af899 4144 test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
a5665051 4145done
cf7cc929 4146echo ' "$@"' >>config.status
dc655404
MT
4147chmod +x config.status
4148
8cd05ab6 4149rm -r "$TMPDIR1"