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