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