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