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