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