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