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