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