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