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