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