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