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