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