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