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