]> Git Repo - qemu.git/blame - configure
fuzz: add target/fuzz makefile rules
[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
8cd05ab6
PM
14# Temporary directory used for files created while
15# configure runs. Since it is in the build directory
16# we can safely blow away any previous version of it
17# (and we need not jump through hoops to try to delete
18# it when configure exits.)
19TMPDIR1="config-temp"
20rm -rf "${TMPDIR1}"
21mkdir -p "${TMPDIR1}"
22if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
7d13299d
FB
25fi
26
8cd05ab6
PM
27TMPB="qemu-conf"
28TMPC="${TMPDIR1}/${TMPB}.c"
66518bf6 29TMPO="${TMPDIR1}/${TMPB}.o"
9c83ffd8 30TMPCXX="${TMPDIR1}/${TMPB}.cxx"
8cd05ab6 31TMPE="${TMPDIR1}/${TMPB}.exe"
6969ec6c 32TMPMO="${TMPDIR1}/${TMPB}.mo"
26fffe29 33TMPTXT="${TMPDIR1}/${TMPB}.txt"
7d13299d 34
da1d85e3 35rm -f config.log
9ac81bbb 36
b48e3611
PM
37# Print a helpful header at the top of config.log
38echo "# QEMU configure log $(date)" >> config.log
979ae168
PM
39printf "# Configured with:" >> config.log
40printf " '%s'" "$0" "$@" >> config.log
41echo >> config.log
b48e3611
PM
42echo "#" >> config.log
43
d880a3ba
PB
44print_error() {
45 (echo
76ad07a4
PM
46 echo "ERROR: $1"
47 while test -n "$2"; do
48 echo " $2"
49 shift
50 done
d880a3ba
PB
51 echo) >&2
52}
53
54error_exit() {
55 print_error "$@"
76ad07a4
PM
56 exit 1
57}
58
9c83ffd8
PM
59do_compiler() {
60 # Run the compiler, capturing its output to the log. First argument
61 # is compiler binary to execute.
62 local compiler="$1"
63 shift
8bbe05d7
IJ
64 if test -n "$BASH_VERSION"; then eval '
65 echo >>config.log "
66funcs: ${FUNCNAME[*]}
67lines: ${BASH_LINENO[*]}"
68 '; fi
9c83ffd8
PM
69 echo $compiler "$@" >> config.log
70 $compiler "$@" >> config.log 2>&1 || return $?
8dc38a78
PM
71 # Test passed. If this is an --enable-werror build, rerun
72 # the test with -Werror and bail out if it fails. This
73 # makes warning-generating-errors in configure test code
74 # obvious to developers.
75 if test "$werror" != "yes"; then
76 return 0
77 fi
78 # Don't bother rerunning the compile if we were already using -Werror
79 case "$*" in
80 *-Werror*)
81 return 0
82 ;;
83 esac
9c83ffd8
PM
84 echo $compiler -Werror "$@" >> config.log
85 $compiler -Werror "$@" >> config.log 2>&1 && return $?
76ad07a4
PM
86 error_exit "configure test passed without -Werror but failed with -Werror." \
87 "This is probably a bug in the configure script. The failing command" \
88 "will be at the bottom of config.log." \
89 "You can run configure with --disable-werror to bypass this check."
8dc38a78
PM
90}
91
9c83ffd8
PM
92do_cc() {
93 do_compiler "$cc" "$@"
94}
95
96do_cxx() {
97 do_compiler "$cxx" "$@"
98}
99
100update_cxxflags() {
101 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
102 # options which some versions of GCC's C++ compiler complain about
103 # because they only make sense for C programs.
53422040 104 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
11cde1c8 105
9c83ffd8
PM
106 for arg in $QEMU_CFLAGS; do
107 case $arg in
108 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
109 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
110 ;;
7be41675
TH
111 -std=gnu99)
112 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
113 ;;
9c83ffd8
PM
114 *)
115 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
116 ;;
117 esac
118 done
119}
120
52166aa0 121compile_object() {
fd0e6053
JS
122 local_cflags="$1"
123 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
52166aa0
JQ
124}
125
126compile_prog() {
127 local_cflags="$1"
128 local_ldflags="$2"
db5adeaa 129 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $QEMU_LDFLAGS $local_ldflags
52166aa0
JQ
130}
131
11568d6d
PB
132# symbolically link $1 to $2. Portable version of "ln -sf".
133symlink() {
72b8b5a1 134 rm -rf "$2"
ec5b06d7 135 mkdir -p "$(dirname "$2")"
72b8b5a1 136 ln -s "$1" "$2"
11568d6d
PB
137}
138
0dba6195
LM
139# check whether a command is available to this shell (may be either an
140# executable or a builtin)
141has() {
142 type "$1" >/dev/null 2>&1
143}
144
145# search for an executable in PATH
146path_of() {
147 local_command="$1"
148 local_ifs="$IFS"
149 local_dir=""
150
151 # pathname has a dir component?
152 if [ "${local_command#*/}" != "$local_command" ]; then
153 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
154 echo "$local_command"
155 return 0
156 fi
157 fi
158 if [ -z "$local_command" ]; then
159 return 1
160 fi
161
162 IFS=:
163 for local_dir in $PATH; do
164 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
165 echo "$local_dir/$local_command"
166 IFS="${local_ifs:-$(printf ' \t\n')}"
167 return 0
168 fi
169 done
170 # not found
171 IFS="${local_ifs:-$(printf ' \t\n')}"
172 return 1
173}
174
5b808275
LV
175have_backend () {
176 echo "$trace_backends" | grep "$1" >/dev/null
177}
178
3b6b7550
PB
179glob() {
180 eval test -z '"${1#'"$2"'}"'
181}
182
183supported_hax_target() {
184 test "$hax" = "yes" || return 1
185 glob "$1" "*-softmmu" || return 1
186 case "${1%-softmmu}" in
187 i386|x86_64)
188 return 0
189 ;;
190 esac
191 return 1
192}
193
194supported_kvm_target() {
195 test "$kvm" = "yes" || return 1
196 glob "$1" "*-softmmu" || return 1
197 case "${1%-softmmu}:$cpu" in
198 arm:arm | aarch64:aarch64 | \
199 i386:i386 | i386:x86_64 | i386:x32 | \
200 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
201 mips:mips | mipsel:mips | \
f8378acc 202 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
3b6b7550
PB
203 s390x:s390x)
204 return 0
205 ;;
206 esac
207 return 1
208}
209
210supported_xen_target() {
211 test "$xen" = "yes" || return 1
212 glob "$1" "*-softmmu" || return 1
b5ed2e11
PB
213 # Only i386 and x86_64 provide the xenpv machine.
214 case "${1%-softmmu}" in
215 i386|x86_64)
3b6b7550
PB
216 return 0
217 ;;
218 esac
219 return 1
220}
221
c97d6d2c
SAGDR
222supported_hvf_target() {
223 test "$hvf" = "yes" || return 1
224 glob "$1" "*-softmmu" || return 1
225 case "${1%-softmmu}" in
226 x86_64)
227 return 0
228 ;;
229 esac
230 return 1
231}
232
d661d9a4
JTV
233supported_whpx_target() {
234 test "$whpx" = "yes" || return 1
235 glob "$1" "*-softmmu" || return 1
236 case "${1%-softmmu}" in
237 i386|x86_64)
238 return 0
239 ;;
240 esac
241 return 1
242}
243
d880a3ba
PB
244supported_target() {
245 case "$1" in
246 *-softmmu)
247 ;;
248 *-linux-user)
249 if test "$linux" != "yes"; then
250 print_error "Target '$target' is only available on a Linux host"
251 return 1
252 fi
253 ;;
254 *-bsd-user)
255 if test "$bsd" != "yes"; then
256 print_error "Target '$target' is only available on a BSD host"
257 return 1
258 fi
259 ;;
260 *)
261 print_error "Invalid target name '$target'"
262 return 1
263 ;;
264 esac
b3f6ea7e
PB
265 test "$tcg" = "yes" && return 0
266 supported_kvm_target "$1" && return 0
267 supported_xen_target "$1" && return 0
268 supported_hax_target "$1" && return 0
c97d6d2c 269 supported_hvf_target "$1" && return 0
d661d9a4 270 supported_whpx_target "$1" && return 0
b3f6ea7e
PB
271 print_error "TCG disabled, but hardware accelerator not available for '$target'"
272 return 1
d880a3ba
PB
273}
274
e9a3591f
CB
275
276ld_has() {
277 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
278}
279
79d77bcd 280# make source path absolute
14211825
AO
281source_path=$(cd "$(dirname -- "$0")"; pwd)
282
4ace32e2
AO
283if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
284then
285 error_exit "main directory cannot contain spaces nor colons"
286fi
287
14211825 288# default parameters
2ff6b91e 289cpu=""
a31a8642 290iasl="iasl"
1e43adfc 291interp_prefix="/usr/gnemul/qemu-%M"
43ce4dfe 292static="no"
7d13299d 293cross_prefix=""
0c58ac1c 294audio_drv_list=""
b64ec4e4
FZ
295block_drv_rw_whitelist=""
296block_drv_ro_whitelist=""
e49d021e 297host_cc="cc"
02f9135b 298libs_cpu=""
73da375e 299libs_softmmu=""
3e2e0e6b 300libs_tools=""
d5631638 301audio_win_int=""
957f1f99 302libs_qga=""
5bc62e01 303debug_info="yes"
63678e17 304stack_protector=""
afc3a8f9 305use_containers="yes"
ac0df51d 306
92712822
DB
307if test -e "$source_path/.git"
308then
f62bbee5 309 git_update=yes
92712822 310 git_submodules="ui/keycodemapdb"
3ac1f813
EC
311 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
312 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
92712822 313else
f62bbee5 314 git_update=no
92712822 315 git_submodules=""
5c0ef67a
DB
316
317 if ! test -f "$source_path/ui/keycodemapdb/README"
318 then
319 echo
320 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
321 echo
322 echo "This is not a GIT checkout but module content appears to"
323 echo "be missing. Do not use 'git archive' or GitHub download links"
324 echo "to acquire QEMU source archives. Non-GIT builds are only"
325 echo "supported with source archives linked from:"
326 echo
a3e3b521 327 echo " https://www.qemu.org/download/#source"
5c0ef67a
DB
328 echo
329 echo "Developers working with GIT can use scripts/archive-source.sh"
330 echo "if they need to create valid source archives."
331 echo
332 exit 1
333 fi
92712822 334fi
cc84d63a 335git="git"
ac0df51d 336
afb63ebd
SW
337# Don't accept a target_list environment variable.
338unset target_list
447e133f 339unset target_list_exclude
377529c0
PB
340
341# Default value for a variable defining feature "foo".
342# * foo="no" feature will only be used if --enable-foo arg is given
343# * foo="" feature will be searched for, and if found, will be used
344# unless --disable-foo is given
345# * foo="yes" this value will only be set by --enable-foo flag.
346# feature will searched for,
347# if not found, configure exits with error
348#
349# Always add --enable-foo and --disable-foo command line args.
350# Distributions want to ensure that several features are compiled in, and it
351# is impossible without a --enable-foo that exits if a feature is not found.
352
377529c0
PB
353brlapi=""
354curl=""
355curses=""
356docs=""
357fdt=""
58952137 358netmap="no"
377529c0 359sdl=""
a442fe2f 360sdl_image=""
983eef5a 361virtfs=""
fe8fc5ae 362mpath=""
821601ea 363vnc="yes"
377529c0 364sparse="no"
377529c0 365vde=""
377529c0
PB
366vnc_sasl=""
367vnc_jpeg=""
368vnc_png=""
6a021536 369xkbcommon=""
377529c0 370xen=""
d5b93ddf 371xen_ctrl_version=""
eb6fda0f 372xen_pci_passthrough=""
377529c0 373linux_aio=""
c10dd856 374linux_io_uring=""
47e98658 375cap_ng=""
377529c0 376attr=""
4f26f2b6 377libattr=""
377529c0 378xfs=""
b3f6ea7e 379tcg="yes"
a40161cb 380membarrier=""
299e6f19
PB
381vhost_net=""
382vhost_crypto=""
383vhost_scsi=""
384vhost_vsock=""
e6a74868 385vhost_user=""
98fc1ada 386vhost_user_fs=""
d41a75a2 387kvm="no"
b0cb0a66 388hax="no"
c97d6d2c 389hvf="no"
d661d9a4 390whpx="no"
2da776db 391rdma=""
21ab34c9 392pvrdma=""
377529c0
PB
393gprof="no"
394debug_tcg="no"
377529c0 395debug="no"
247724cb 396sanitizers="no"
b553a042 397fortify_source=""
377529c0 398strip_opt="yes"
9195b2c2 399tcg_interpreter="no"
377529c0
PB
400bigendian="no"
401mingw32="no"
1d728c39
BS
402gcov="no"
403gcov_tool="gcov"
377529c0 404EXESUF=""
17969268
FZ
405DSOSUF=".so"
406LDFLAGS_SHARED="-shared"
407modules="no"
377529c0
PB
408prefix="/usr/local"
409mandir="\${prefix}/share/man"
528ae5b8 410datadir="\${prefix}/share"
3d5eecab 411firmwarepath="\${prefix}/share/qemu-firmware"
850da188 412qemu_docdir="\${prefix}/share/doc/qemu"
377529c0 413bindir="\${prefix}/bin"
3aa5d2be 414libdir="\${prefix}/lib"
8bf188aa 415libexecdir="\${prefix}/libexec"
0f94d6da 416includedir="\${prefix}/include"
377529c0 417sysconfdir="\${prefix}/etc"
785c23ae 418local_statedir="\${prefix}/var"
377529c0 419confsuffix="/qemu"
675b9b53 420slirp=""
377529c0
PB
421oss_lib=""
422bsd="no"
423linux="no"
424solaris="no"
425profiler="no"
426cocoa="no"
427softmmu="yes"
428linux_user="no"
377529c0 429bsd_user="no"
377529c0 430blobs="yes"
05dfa22b 431edk2_blobs="no"
377529c0 432pkgversion=""
40d6444e 433pie=""
3556c233 434qom_cast_debug="yes"
baf86d6b 435trace_backends="log"
377529c0
PB
436trace_file="trace"
437spice=""
438rbd=""
7b02f544 439smartcard=""
2b2325ff 440libusb=""
69354a83 441usb_redir=""
da076ffe 442opengl=""
014cb152 443opengl_dmabuf="no"
5dd89908 444cpuid_h="no"
86583a07 445avx2_opt=""
1ece9905 446zlib="yes"
8ca80760 447capstone=""
b25c9dff
SW
448lzo=""
449snappy=""
6b383c08 450bzip2=""
83bc1f97 451lzfse=""
e8ef31a3 452guest_agent=""
d9840e25 453guest_agent_with_vss="no"
50cbebb9 454guest_agent_ntddscsi="no"
9dacf32d 455guest_agent_msi=""
d9840e25
TS
456vss_win32_sdk=""
457win_sdk="no"
e10ee3f5 458want_tools=""
c589b249 459libiscsi=""
6542aa9c 460libnfs=""
519175a2 461coroutine=""
70c60c08 462coroutine_pool=""
7d992e4d 463debug_stack_usage="no"
f0d92b56 464crypto_afalg="no"
f794573e 465seccomp=""
eb100396 466glusterfs=""
d85fa9eb 467glusterfs_xlator_opt="no"
0c14fb47 468glusterfs_discard="no"
df3a429a 469glusterfs_fallocate="no"
7c815372 470glusterfs_zerofill="no"
e014dbe7 471glusterfs_ftruncate_has_stat="no"
0e3b891f 472glusterfs_iocb_has_stat="no"
a4ccabcf 473gtk=""
925a0400 474gtk_gl="no"
a1c5e949 475tls_priority="NORMAL"
ddbb0d09 476gnutls=""
91bfcdb0 477nettle=""
dc2207af 478nettle_xts="no"
91bfcdb0 479gcrypt=""
1f923c70 480gcrypt_hmac="no"
e0576942
DB
481gcrypt_xts="no"
482qemu_private_xts="yes"
8953caf3 483auth_pam=""
bbbf9bfb 484vte=""
9d9e1521 485virglrenderer=""
7aaa6a16 486tpm=""
b10d49d7 487libssh=""
ed1701c6 488live_block_migration="yes"
a99d57bb 489numa=""
2847b469 490tcmalloc="no"
7b01cb97 491jemalloc="no"
a6b1d4c0 492replication="yes"
da92c3ff 493vxhs=""
2f740136
JC
494bochs="yes"
495cloop="yes"
496dmg="yes"
497qcow1="yes"
498vdi="yes"
499vvfat="yes"
500qed="yes"
501parallels="yes"
502sheepdog="yes"
ed279a06 503libxml2=""
ba59fb77 504debug_mutex="no"
17824406 505libpmem=""
f3494749 506default_devices="yes"
40e8c6f4 507plugins="no"
377529c0 508
898be3e0
PM
509supported_cpu="no"
510supported_os="no"
fb59dabd 511bogus_os="no"
5a22ab71 512malloc_trim=""
898be3e0 513
ac0df51d
AL
514# parse CC options first
515for opt do
89138857 516 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
ac0df51d
AL
517 case "$opt" in
518 --cross-prefix=*) cross_prefix="$optarg"
519 ;;
3d8df640 520 --cc=*) CC="$optarg"
ac0df51d 521 ;;
83f73fce
TS
522 --cxx=*) CXX="$optarg"
523 ;;
2ff6b91e
JQ
524 --cpu=*) cpu="$optarg"
525 ;;
de385287 526 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
db5adeaa 527 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
e2a2ed06 528 ;;
11cde1c8 529 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
11cde1c8 530 ;;
db5adeaa 531 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
f9943cd5 532 EXTRA_LDFLAGS="$optarg"
e2a2ed06 533 ;;
5bc62e01
GH
534 --enable-debug-info) debug_info="yes"
535 ;;
536 --disable-debug-info) debug_info="no"
537 ;;
d75402b5
AB
538 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
539 ;;
d422b2bc
AB
540 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
541 eval "cross_cc_cflags_${cc_arch}=\$optarg"
2038f8c8 542 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
d422b2bc 543 ;;
d75402b5 544 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
2038f8c8 545 cc_archs="$cc_archs $cc_arch"
d75402b5 546 eval "cross_cc_${cc_arch}=\$optarg"
2038f8c8 547 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
d75402b5 548 ;;
ac0df51d
AL
549 esac
550done
ac0df51d
AL
551# OS specific
552# Using uname is really, really broken. Once we have the right set of checks
93148aa5 553# we can eliminate its usage altogether.
ac0df51d 554
e49d021e
PM
555# Preferred compiler:
556# ${CC} (if set)
557# ${cross_prefix}gcc (if cross-prefix specified)
558# system compiler
559if test -z "${CC}${cross_prefix}"; then
560 cc="$host_cc"
561else
562 cc="${CC-${cross_prefix}gcc}"
563fi
564
83f73fce
TS
565if test -z "${CXX}${cross_prefix}"; then
566 cxx="c++"
567else
568 cxx="${CXX-${cross_prefix}g++}"
569fi
570
b3198cc2 571ar="${AR-${cross_prefix}ar}"
cdbd727c 572as="${AS-${cross_prefix}as}"
5f6f0e27 573ccas="${CCAS-$cc}"
3dd46c78 574cpp="${CPP-$cc -E}"
b3198cc2
SY
575objcopy="${OBJCOPY-${cross_prefix}objcopy}"
576ld="${LD-${cross_prefix}ld}"
9f81aeb5 577ranlib="${RANLIB-${cross_prefix}ranlib}"
4852ee95 578nm="${NM-${cross_prefix}nm}"
b3198cc2
SY
579strip="${STRIP-${cross_prefix}strip}"
580windres="${WINDRES-${cross_prefix}windres}"
17884d7b
ST
581pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
582query_pkg_config() {
583 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
584}
585pkg_config=query_pkg_config
47c03744 586sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
ac0df51d 587
45d285ab
PM
588# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
589ARFLAGS="${ARFLAGS-rv}"
590
be17dc90 591# default flags for all hosts
2d31515b
PM
592# We use -fwrapv to tell the compiler that we require a C dialect where
593# left shift of signed integers is well defined and has the expected
594# 2s-complement style results. (Both clang and gcc agree that it
595# provides these semantics.)
7be41675 596QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
f9188227 597QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
c95e3080 598QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
be17dc90 599QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
9edc19c9 600QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
53422040 601QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
5bc62e01
GH
602if test "$debug_info" = "yes"; then
603 CFLAGS="-g $CFLAGS"
5bc62e01 604fi
be17dc90 605
cab00a5a
MT
606# running configure in the source tree?
607# we know that's the case if configure is there.
608if test -f "./configure"; then
609 pwd_is_source_path="y"
610else
611 pwd_is_source_path="n"
612fi
613
ac0df51d
AL
614check_define() {
615cat > $TMPC <<EOF
616#if !defined($1)
fd786e1a 617#error $1 not defined
ac0df51d
AL
618#endif
619int main(void) { return 0; }
620EOF
52166aa0 621 compile_object
ac0df51d
AL
622}
623
307119e7
GH
624check_include() {
625cat > $TMPC <<EOF
626#include <$1>
627int main(void) { return 0; }
628EOF
629 compile_object
630}
631
93b25869
JS
632write_c_skeleton() {
633 cat > $TMPC <<EOF
634int main(void) { return 0; }
635EOF
636}
637
bbea4050
PM
638if check_define __linux__ ; then
639 targetos="Linux"
640elif check_define _WIN32 ; then
641 targetos='MINGW32'
642elif check_define __OpenBSD__ ; then
643 targetos='OpenBSD'
644elif check_define __sun__ ; then
645 targetos='SunOS'
646elif check_define __HAIKU__ ; then
647 targetos='Haiku'
951fedfc
PM
648elif check_define __FreeBSD__ ; then
649 targetos='FreeBSD'
650elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
651 targetos='GNU/kFreeBSD'
652elif check_define __DragonFly__ ; then
653 targetos='DragonFly'
654elif check_define __NetBSD__; then
655 targetos='NetBSD'
656elif check_define __APPLE__; then
657 targetos='Darwin'
bbea4050 658else
951fedfc
PM
659 # This is a fatal error, but don't report it yet, because we
660 # might be going to just print the --help text, or it might
661 # be the result of a missing compiler.
662 targetos='bogus'
663 bogus_os='yes'
bbea4050
PM
664fi
665
666# Some host OSes need non-standard checks for which CPU to use.
667# Note that these checks are broken for cross-compilation: if you're
668# cross-compiling to one of these OSes then you'll need to specify
669# the correct CPU with the --cpu option.
670case $targetos in
671Darwin)
672 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
673 # run 64-bit userspace code.
674 # If the user didn't specify a CPU explicitly and the kernel says this is
675 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
676 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
677 cpu="x86_64"
678 fi
679 ;;
680SunOS)
89138857 681 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
bbea4050
PM
682 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
683 cpu="x86_64"
684 fi
685esac
686
2ff6b91e
JQ
687if test ! -z "$cpu" ; then
688 # command line argument
689 :
690elif check_define __i386__ ; then
ac0df51d
AL
691 cpu="i386"
692elif check_define __x86_64__ ; then
c72b26ec
RH
693 if check_define __ILP32__ ; then
694 cpu="x32"
695 else
696 cpu="x86_64"
697 fi
3aa9bd6c 698elif check_define __sparc__ ; then
3aa9bd6c
BS
699 if check_define __arch64__ ; then
700 cpu="sparc64"
701 else
702 cpu="sparc"
703 fi
fdf7ed96 704elif check_define _ARCH_PPC ; then
705 if check_define _ARCH_PPC64 ; then
f8378acc
RH
706 if check_define _LITTLE_ENDIAN ; then
707 cpu="ppc64le"
708 else
709 cpu="ppc64"
710 fi
fdf7ed96 711 else
712 cpu="ppc"
713 fi
afa05235
AJ
714elif check_define __mips__ ; then
715 cpu="mips"
d66ed0ea
AJ
716elif check_define __s390__ ; then
717 if check_define __s390x__ ; then
718 cpu="s390x"
719 else
720 cpu="s390"
721 fi
c4f80543
AF
722elif check_define __riscv ; then
723 if check_define _LP64 ; then
724 cpu="riscv64"
725 else
726 cpu="riscv32"
727 fi
21d89f84
PM
728elif check_define __arm__ ; then
729 cpu="arm"
1f080313
CF
730elif check_define __aarch64__ ; then
731 cpu="aarch64"
ac0df51d 732else
89138857 733 cpu=$(uname -m)
ac0df51d
AL
734fi
735
359bc95d
PM
736ARCH=
737# Normalise host CPU name and set ARCH.
738# Note that this case should only have supported host CPUs, not guests.
7d13299d 739case "$cpu" in
ee35e968 740 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
898be3e0
PM
741 supported_cpu="yes"
742 ;;
f8378acc
RH
743 ppc64le)
744 ARCH="ppc64"
745 supported_cpu="yes"
f8378acc 746 ;;
7d13299d 747 i386|i486|i586|i686|i86pc|BePC)
97a847bc 748 cpu="i386"
898be3e0 749 supported_cpu="yes"
7d13299d 750 ;;
aaa5fa14
AJ
751 x86_64|amd64)
752 cpu="x86_64"
898be3e0 753 supported_cpu="yes"
aaa5fa14 754 ;;
21d89f84
PM
755 armv*b|armv*l|arm)
756 cpu="arm"
898be3e0 757 supported_cpu="yes"
7d13299d 758 ;;
1f080313
CF
759 aarch64)
760 cpu="aarch64"
898be3e0 761 supported_cpu="yes"
1f080313 762 ;;
afa05235
AJ
763 mips*)
764 cpu="mips"
898be3e0 765 supported_cpu="yes"
afa05235 766 ;;
3142255c 767 sparc|sun4[cdmuv])
ae228531 768 cpu="sparc"
6499fd15 769 supported_cpu="yes"
ae228531 770 ;;
7d13299d 771 *)
359bc95d
PM
772 # This will result in either an error or falling back to TCI later
773 ARCH=unknown
7d13299d
FB
774 ;;
775esac
359bc95d
PM
776if test -z "$ARCH"; then
777 ARCH="$cpu"
778fi
e2d52ad3 779
7d13299d 780# OS specific
0dbfc675 781
adfc3e91
SS
782# host *BSD for user mode
783HOST_VARIANT_DIR=""
784
7d13299d 785case $targetos in
67b915a5 786MINGW32*)
0dbfc675 787 mingw32="yes"
b0cb0a66 788 hax="yes"
299e6f19 789 vhost_user="no"
3cec7cc2 790 audio_possible_drivers="dsound sdl"
307119e7
GH
791 if check_include dsound.h; then
792 audio_drv_list="dsound"
793 else
794 audio_drv_list=""
795 fi
898be3e0 796 supported_os="yes"
67b915a5 797;;
5c40d2bd 798GNU/kFreeBSD)
a167ba50 799 bsd="yes"
6a485418 800 audio_drv_list="oss try-sdl"
0bac1111 801 audio_possible_drivers="oss sdl pa"
5c40d2bd 802;;
7d3505c5 803FreeBSD)
0dbfc675 804 bsd="yes"
0db4a067 805 make="${MAKE-gmake}"
6a485418 806 audio_drv_list="oss try-sdl"
0bac1111 807 audio_possible_drivers="oss sdl pa"
f01576f1
JL
808 # needed for kinfo_getvmmap(3) in libutil.h
809 LIBS="-lutil $LIBS"
a7764f15
EM
810 # needed for kinfo_getproc
811 libs_qga="-lutil $libs_qga"
58952137 812 netmap="" # enable netmap autodetect
adfc3e91 813 HOST_VARIANT_DIR="freebsd"
898be3e0 814 supported_os="yes"
7d3505c5 815;;
c5e97233 816DragonFly)
0dbfc675 817 bsd="yes"
0db4a067 818 make="${MAKE-gmake}"
6a485418 819 audio_drv_list="oss try-sdl"
0bac1111 820 audio_possible_drivers="oss sdl pa"
adfc3e91 821 HOST_VARIANT_DIR="dragonfly"
c5e97233 822;;
7d3505c5 823NetBSD)
0dbfc675 824 bsd="yes"
604a5b99 825 hax="yes"
0db4a067 826 make="${MAKE-gmake}"
6a485418 827 audio_drv_list="oss try-sdl"
0bac1111 828 audio_possible_drivers="oss sdl"
0dbfc675 829 oss_lib="-lossaudio"
adfc3e91 830 HOST_VARIANT_DIR="netbsd"
3c2bdbc1 831 supported_os="yes"
7d3505c5
FB
832;;
833OpenBSD)
0dbfc675 834 bsd="yes"
0db4a067 835 make="${MAKE-gmake}"
f92c7168 836 audio_drv_list="try-sdl"
0bac1111 837 audio_possible_drivers="sdl"
adfc3e91 838 HOST_VARIANT_DIR="openbsd"
0a773d55 839 supported_os="yes"
7d3505c5 840;;
83fb7adf 841Darwin)
0dbfc675
JQ
842 bsd="yes"
843 darwin="yes"
b0cb0a66 844 hax="yes"
c97d6d2c 845 hvf="yes"
17969268 846 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
0dbfc675 847 if [ "$cpu" = "x86_64" ] ; then
a558ee17 848 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
db5adeaa 849 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
0dbfc675 850 fi
0dbfc675 851 cocoa="yes"
6a485418 852 audio_drv_list="coreaudio try-sdl"
14382605 853 audio_possible_drivers="coreaudio sdl"
db5adeaa 854 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
7973f21c 855 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
a0b7cf6b
PM
856 # Disable attempts to use ObjectiveC features in os/object.h since they
857 # won't work when we're compiling with gcc as a C compiler.
858 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
adfc3e91 859 HOST_VARIANT_DIR="darwin"
898be3e0 860 supported_os="yes"
83fb7adf 861;;
ec530c81 862SunOS)
0dbfc675 863 solaris="yes"
0db4a067
PB
864 make="${MAKE-gmake}"
865 install="${INSTALL-ginstall}"
e2d8830e 866 smbd="${SMBD-/usr/sfw/sbin/smbd}"
0dbfc675 867 if test -f /usr/include/sys/soundcard.h ; then
6a485418 868 audio_drv_list="oss try-sdl"
0dbfc675
JQ
869 fi
870 audio_possible_drivers="oss sdl"
d741429a
BS
871# needed for CMSG_ macros in sys/socket.h
872 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
873# needed for TIOCWIN* defines in termios.h
874 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
a558ee17 875 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
560d375f
AF
876 solarisnetlibs="-lsocket -lnsl -lresolv"
877 LIBS="$solarisnetlibs $LIBS"
878 libs_qga="$solarisnetlibs $libs_qga"
86b2bd93 879;;
179cf400
AF
880Haiku)
881 haiku="yes"
882 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
883 LIBS="-lposix_error_mapper -lnetwork $LIBS"
884;;
898be3e0 885Linux)
7183834a 886 audio_drv_list="try-pa oss"
0bac1111 887 audio_possible_drivers="oss alsa sdl pa"
0dbfc675
JQ
888 linux="yes"
889 linux_user="yes"
af2be207 890 kvm="yes"
e8d81a61 891 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
898be3e0 892 supported_os="yes"
3efac6eb 893 libudev="yes"
898be3e0 894;;
7d13299d
FB
895esac
896
7d3505c5 897if [ "$bsd" = "yes" ] ; then
b1a550a0 898 if [ "$darwin" != "yes" ] ; then
08de3949 899 bsd_user="yes"
83fb7adf 900 fi
7d3505c5
FB
901fi
902
0db4a067
PB
903: ${make=${MAKE-make}}
904: ${install=${INSTALL-install}}
faf44142
DB
905# We prefer python 3.x. A bare 'python' is traditionally
906# python 2.x, but some distros have it as python 3.x, so
ddf90699 907# we check that too
faf44142 908python=
ddf90699 909for binary in "${PYTHON-python3}" python
faf44142
DB
910do
911 if has "$binary"
912 then
95c5f2de 913 python=$(command -v "$binary")
faf44142
DB
914 break
915 fi
916done
903458c8
MA
917
918sphinx_build=
919for binary in sphinx-build-3 sphinx-build
920do
921 if has "$binary"
922 then
923 sphinx_build=$(command -v "$binary")
924 break
925 fi
926done
927
e2d8830e 928: ${smbd=${SMBD-/usr/sbin/smbd}}
0db4a067 929
3c4a4d0d
PM
930# Default objcc to clang if available, otherwise use CC
931if has clang; then
932 objcc=clang
933else
934 objcc="$cc"
935fi
936
3457a3f8 937if test "$mingw32" = "yes" ; then
3457a3f8 938 EXESUF=".exe"
17969268 939 DSOSUF=".dll"
78e9d4ad
SW
940 # MinGW needs -mthreads for TLS and macro _MT.
941 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
b965e8c5 942 LIBS="-lwinmm -lws2_32 $LIBS"
93b25869 943 write_c_skeleton;
f7cf5d5b
SW
944 if compile_prog "" "-liberty" ; then
945 LIBS="-liberty $LIBS"
946 fi
c5ec15ea 947 prefix="c:/Program Files/QEMU"
683035de 948 mandir="\${prefix}"
528ae5b8 949 datadir="\${prefix}"
850da188 950 qemu_docdir="\${prefix}"
683035de
PB
951 bindir="\${prefix}"
952 sysconfdir="\${prefix}"
5a699bbb 953 local_statedir=
683035de 954 confsuffix=""
105fad6b 955 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
3457a3f8
JQ
956fi
957
487fefdb 958werror=""
85aa5189 959
7d13299d 960for opt do
89138857 961 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
7d13299d 962 case "$opt" in
2efc3265
FB
963 --help|-h) show_help=yes
964 ;;
99123e13
MF
965 --version|-V) exec cat $source_path/VERSION
966 ;;
b1a550a0 967 --prefix=*) prefix="$optarg"
7d13299d 968 ;;
b1a550a0 969 --interp-prefix=*) interp_prefix="$optarg"
32ce6337 970 ;;
ac0df51d 971 --cross-prefix=*)
7d13299d 972 ;;
ac0df51d 973 --cc=*)
7d13299d 974 ;;
b1a550a0 975 --host-cc=*) host_cc="$optarg"
83469015 976 ;;
83f73fce
TS
977 --cxx=*)
978 ;;
e007dbec
MT
979 --iasl=*) iasl="$optarg"
980 ;;
3c4a4d0d
PM
981 --objcc=*) objcc="$optarg"
982 ;;
b1a550a0 983 --make=*) make="$optarg"
7d13299d 984 ;;
6a882643
PB
985 --install=*) install="$optarg"
986 ;;
c886edfb
BS
987 --python=*) python="$optarg"
988 ;;
2eb054c2
PM
989 --sphinx-build=*) sphinx_build="$optarg"
990 ;;
1d728c39
BS
991 --gcov=*) gcov_tool="$optarg"
992 ;;
e2d8830e
BS
993 --smbd=*) smbd="$optarg"
994 ;;
e2a2ed06 995 --extra-cflags=*)
7d13299d 996 ;;
11cde1c8
BD
997 --extra-cxxflags=*)
998 ;;
e2a2ed06 999 --extra-ldflags=*)
7d13299d 1000 ;;
5bc62e01
GH
1001 --enable-debug-info)
1002 ;;
1003 --disable-debug-info)
1004 ;;
d75402b5
AB
1005 --cross-cc-*)
1006 ;;
17969268
FZ
1007 --enable-modules)
1008 modules="yes"
3aa88b31
SH
1009 ;;
1010 --disable-modules)
1011 modules="no"
17969268 1012 ;;
2ff6b91e 1013 --cpu=*)
7d13299d 1014 ;;
b1a550a0 1015 --target-list=*) target_list="$optarg"
447e133f
AB
1016 if test "$target_list_exclude"; then
1017 error_exit "Can't mix --target-list with --target-list-exclude"
1018 fi
1019 ;;
1020 --target-list-exclude=*) target_list_exclude="$optarg"
1021 if test "$target_list"; then
1022 error_exit "Can't mix --target-list-exclude with --target-list"
1023 fi
de83cd02 1024 ;;
5b808275
LV
1025 --enable-trace-backends=*) trace_backends="$optarg"
1026 ;;
1027 # XXX: backwards compatibility
1028 --enable-trace-backend=*) trace_backends="$optarg"
94a420b1 1029 ;;
74242e0f 1030 --with-trace-file=*) trace_file="$optarg"
9410b56c 1031 ;;
f3494749
PB
1032 --with-default-devices) default_devices="yes"
1033 ;;
1034 --without-default-devices) default_devices="no"
1035 ;;
7d13299d
FB
1036 --enable-gprof) gprof="yes"
1037 ;;
1d728c39
BS
1038 --enable-gcov) gcov="yes"
1039 ;;
79427693
LM
1040 --static)
1041 static="yes"
db5adeaa 1042 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
17884d7b 1043 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
43ce4dfe 1044 ;;
0b24e75f
PB
1045 --mandir=*) mandir="$optarg"
1046 ;;
1047 --bindir=*) bindir="$optarg"
1048 ;;
3aa5d2be
AL
1049 --libdir=*) libdir="$optarg"
1050 ;;
8bf188aa
MT
1051 --libexecdir=*) libexecdir="$optarg"
1052 ;;
0f94d6da
AL
1053 --includedir=*) includedir="$optarg"
1054 ;;
528ae5b8 1055 --datadir=*) datadir="$optarg"
0b24e75f 1056 ;;
023d3d67
EH
1057 --with-confsuffix=*) confsuffix="$optarg"
1058 ;;
850da188 1059 --docdir=*) qemu_docdir="$optarg"
0b24e75f 1060 ;;
ca2fb938 1061 --sysconfdir=*) sysconfdir="$optarg"
07381cc1 1062 ;;
785c23ae
LC
1063 --localstatedir=*) local_statedir="$optarg"
1064 ;;
3d5eecab
GH
1065 --firmwarepath=*) firmwarepath="$optarg"
1066 ;;
181ce1d0
OH
1067 --host=*|--build=*|\
1068 --disable-dependency-tracking|\
785c23ae 1069 --sbindir=*|--sharedstatedir=*|\
023ddd74
MF
1070 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1071 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1072 # These switches are silently ignored, for compatibility with
1073 # autoconf-generated configure scripts. This allows QEMU's
1074 # configure to be used by RPM and similar macros that set
1075 # lots of directory switches by default.
1076 ;;
97a847bc
FB
1077 --disable-sdl) sdl="no"
1078 ;;
c4198157
JQ
1079 --enable-sdl) sdl="yes"
1080 ;;
a442fe2f
DB
1081 --disable-sdl-image) sdl_image="no"
1082 ;;
1083 --enable-sdl-image) sdl_image="yes"
1084 ;;
3556c233
PB
1085 --disable-qom-cast-debug) qom_cast_debug="no"
1086 ;;
1087 --enable-qom-cast-debug) qom_cast_debug="yes"
1088 ;;
983eef5a
MI
1089 --disable-virtfs) virtfs="no"
1090 ;;
1091 --enable-virtfs) virtfs="yes"
1092 ;;
fe8fc5ae
PB
1093 --disable-mpath) mpath="no"
1094 ;;
1095 --enable-mpath) mpath="yes"
1096 ;;
821601ea
JS
1097 --disable-vnc) vnc="no"
1098 ;;
1099 --enable-vnc) vnc="yes"
1100 ;;
2f6a1ab0
BS
1101 --oss-lib=*) oss_lib="$optarg"
1102 ;;
0c58ac1c 1103 --audio-drv-list=*) audio_drv_list="$optarg"
102a52e4 1104 ;;
89138857 1105 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
b64ec4e4 1106 ;;
89138857 1107 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
eb852011 1108 ;;
f8393946
AJ
1109 --enable-debug-tcg) debug_tcg="yes"
1110 ;;
1111 --disable-debug-tcg) debug_tcg="no"
1112 ;;
f3d08ee6
PB
1113 --enable-debug)
1114 # Enable debugging options that aren't excessively noisy
1115 debug_tcg="yes"
1fcc6d42 1116 debug_mutex="yes"
f3d08ee6
PB
1117 debug="yes"
1118 strip_opt="no"
b553a042 1119 fortify_source="no"
f3d08ee6 1120 ;;
247724cb
MAL
1121 --enable-sanitizers) sanitizers="yes"
1122 ;;
1123 --disable-sanitizers) sanitizers="no"
1124 ;;
03b4fe7d
AL
1125 --enable-sparse) sparse="yes"
1126 ;;
1127 --disable-sparse) sparse="no"
1128 ;;
1625af87
AL
1129 --disable-strip) strip_opt="no"
1130 ;;
2f9606b3
AL
1131 --disable-vnc-sasl) vnc_sasl="no"
1132 ;;
ea784e3b
JQ
1133 --enable-vnc-sasl) vnc_sasl="yes"
1134 ;;
2f6f5c7a
CC
1135 --disable-vnc-jpeg) vnc_jpeg="no"
1136 ;;
1137 --enable-vnc-jpeg) vnc_jpeg="yes"
1138 ;;
efe556ad
CC
1139 --disable-vnc-png) vnc_png="no"
1140 ;;
1141 --enable-vnc-png) vnc_png="yes"
1142 ;;
443f1376 1143 --disable-slirp) slirp="no"
1d14ffa9 1144 ;;
7c57bdd8
MAL
1145 --enable-slirp=git) slirp="git"
1146 ;;
675b9b53
MAL
1147 --enable-slirp=system) slirp="system"
1148 ;;
e0e6c8c0 1149 --disable-vde) vde="no"
8a16d273 1150 ;;
dfb278bd
JQ
1151 --enable-vde) vde="yes"
1152 ;;
58952137
VM
1153 --disable-netmap) netmap="no"
1154 ;;
1155 --enable-netmap) netmap="yes"
1156 ;;
e37630ca
AL
1157 --disable-xen) xen="no"
1158 ;;
fc321b4b
JQ
1159 --enable-xen) xen="yes"
1160 ;;
eb6fda0f
AP
1161 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1162 ;;
1163 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1164 ;;
2e4d9fb1
AJ
1165 --disable-brlapi) brlapi="no"
1166 ;;
4ffcedb6
JQ
1167 --enable-brlapi) brlapi="yes"
1168 ;;
7ba1e619
AL
1169 --disable-kvm) kvm="no"
1170 ;;
b31a0277
JQ
1171 --enable-kvm) kvm="yes"
1172 ;;
b0cb0a66 1173 --disable-hax) hax="no"
180fb750 1174 ;;
b0cb0a66 1175 --enable-hax) hax="yes"
180fb750 1176 ;;
c97d6d2c
SAGDR
1177 --disable-hvf) hvf="no"
1178 ;;
1179 --enable-hvf) hvf="yes"
1180 ;;
d661d9a4
JTV
1181 --disable-whpx) whpx="no"
1182 ;;
1183 --enable-whpx) whpx="yes"
1184 ;;
9195b2c2
SW
1185 --disable-tcg-interpreter) tcg_interpreter="no"
1186 ;;
1187 --enable-tcg-interpreter) tcg_interpreter="yes"
1188 ;;
47e98658
CB
1189 --disable-cap-ng) cap_ng="no"
1190 ;;
1191 --enable-cap-ng) cap_ng="yes"
1192 ;;
b3f6ea7e
PB
1193 --disable-tcg) tcg="no"
1194 ;;
1195 --enable-tcg) tcg="yes"
1196 ;;
5a22ab71
YZ
1197 --disable-malloc-trim) malloc_trim="no"
1198 ;;
1199 --enable-malloc-trim) malloc_trim="yes"
1200 ;;
cd4ec0b4
GH
1201 --disable-spice) spice="no"
1202 ;;
1203 --enable-spice) spice="yes"
1204 ;;
c589b249
RS
1205 --disable-libiscsi) libiscsi="no"
1206 ;;
1207 --enable-libiscsi) libiscsi="yes"
1208 ;;
6542aa9c
PL
1209 --disable-libnfs) libnfs="no"
1210 ;;
1211 --enable-libnfs) libnfs="yes"
1212 ;;
05c2a3e7
FB
1213 --enable-profiler) profiler="yes"
1214 ;;
14821030
PB
1215 --disable-cocoa) cocoa="no"
1216 ;;
c2de5c91 1217 --enable-cocoa)
1218 cocoa="yes" ;
89138857 1219 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1d14ffa9 1220 ;;
cad25d69 1221 --disable-system) softmmu="no"
0a8e90f4 1222 ;;
cad25d69 1223 --enable-system) softmmu="yes"
0a8e90f4 1224 ;;
0953a80f
ZA
1225 --disable-user)
1226 linux_user="no" ;
1227 bsd_user="no" ;
0953a80f
ZA
1228 ;;
1229 --enable-user) ;;
831b7825 1230 --disable-linux-user) linux_user="no"
0a8e90f4 1231 ;;
831b7825
TS
1232 --enable-linux-user) linux_user="yes"
1233 ;;
84778508
BS
1234 --disable-bsd-user) bsd_user="no"
1235 ;;
1236 --enable-bsd-user) bsd_user="yes"
1237 ;;
40d6444e 1238 --enable-pie) pie="yes"
34005a00 1239 ;;
40d6444e 1240 --disable-pie) pie="no"
34005a00 1241 ;;
85aa5189
FB
1242 --enable-werror) werror="yes"
1243 ;;
1244 --disable-werror) werror="no"
1245 ;;
63678e17
SN
1246 --enable-stack-protector) stack_protector="yes"
1247 ;;
1248 --disable-stack-protector) stack_protector="no"
1249 ;;
4d3b6f6e
AZ
1250 --disable-curses) curses="no"
1251 ;;
c584a6d0
JQ
1252 --enable-curses) curses="yes"
1253 ;;
e08bb301
ST
1254 --disable-iconv) iconv="no"
1255 ;;
1256 --enable-iconv) iconv="yes"
1257 ;;
769ce76d
AG
1258 --disable-curl) curl="no"
1259 ;;
788c8196
JQ
1260 --enable-curl) curl="yes"
1261 ;;
2df87df7
JQ
1262 --disable-fdt) fdt="no"
1263 ;;
1264 --enable-fdt) fdt="yes"
1265 ;;
5c6c3a6c
CH
1266 --disable-linux-aio) linux_aio="no"
1267 ;;
1268 --enable-linux-aio) linux_aio="yes"
1269 ;;
c10dd856
AM
1270 --disable-linux-io-uring) linux_io_uring="no"
1271 ;;
1272 --enable-linux-io-uring) linux_io_uring="yes"
1273 ;;
758e8e38
VJ
1274 --disable-attr) attr="no"
1275 ;;
1276 --enable-attr) attr="yes"
1277 ;;
a40161cb
PB
1278 --disable-membarrier) membarrier="no"
1279 ;;
1280 --enable-membarrier) membarrier="yes"
1281 ;;
77755340
TS
1282 --disable-blobs) blobs="no"
1283 ;;
7e563bfb 1284 --with-pkgversion=*) pkgversion="$optarg"
4a19f1ec 1285 ;;
519175a2
AB
1286 --with-coroutine=*) coroutine="$optarg"
1287 ;;
70c60c08
SH
1288 --disable-coroutine-pool) coroutine_pool="no"
1289 ;;
1290 --enable-coroutine-pool) coroutine_pool="yes"
1291 ;;
7d992e4d
PL
1292 --enable-debug-stack-usage) debug_stack_usage="yes"
1293 ;;
f0d92b56
LM
1294 --enable-crypto-afalg) crypto_afalg="yes"
1295 ;;
1296 --disable-crypto-afalg) crypto_afalg="no"
1297 ;;
a25dba17 1298 --disable-docs) docs="no"
70ec5dc0 1299 ;;
a25dba17 1300 --enable-docs) docs="yes"
83a3ab8b 1301 ;;
d5970055
MT
1302 --disable-vhost-net) vhost_net="no"
1303 ;;
1304 --enable-vhost-net) vhost_net="yes"
1305 ;;
042cea27
GA
1306 --disable-vhost-crypto) vhost_crypto="no"
1307 ;;
299e6f19 1308 --enable-vhost-crypto) vhost_crypto="yes"
042cea27 1309 ;;
5e9be92d
NB
1310 --disable-vhost-scsi) vhost_scsi="no"
1311 ;;
1312 --enable-vhost-scsi) vhost_scsi="yes"
1313 ;;
fc0b9b0e
SH
1314 --disable-vhost-vsock) vhost_vsock="no"
1315 ;;
1316 --enable-vhost-vsock) vhost_vsock="yes"
1317 ;;
98fc1ada
DDAG
1318 --disable-vhost-user-fs) vhost_user_fs="no"
1319 ;;
1320 --enable-vhost-user-fs) vhost_user_fs="yes"
1321 ;;
da076ffe 1322 --disable-opengl) opengl="no"
20ff075b 1323 ;;
da076ffe 1324 --enable-opengl) opengl="yes"
20ff075b 1325 ;;
f27aaf4b
CB
1326 --disable-rbd) rbd="no"
1327 ;;
1328 --enable-rbd) rbd="yes"
1329 ;;
8c84cf11
ST
1330 --disable-xfsctl) xfs="no"
1331 ;;
1332 --enable-xfsctl) xfs="yes"
1333 ;;
7b02f544 1334 --disable-smartcard) smartcard="no"
111a38b0 1335 ;;
7b02f544 1336 --enable-smartcard) smartcard="yes"
111a38b0 1337 ;;
2b2325ff
GH
1338 --disable-libusb) libusb="no"
1339 ;;
1340 --enable-libusb) libusb="yes"
1341 ;;
69354a83
HG
1342 --disable-usb-redir) usb_redir="no"
1343 ;;
1344 --enable-usb-redir) usb_redir="yes"
1345 ;;
1ece9905
AL
1346 --disable-zlib-test) zlib="no"
1347 ;;
b25c9dff
SW
1348 --disable-lzo) lzo="no"
1349 ;;
607dacd0
QN
1350 --enable-lzo) lzo="yes"
1351 ;;
b25c9dff
SW
1352 --disable-snappy) snappy="no"
1353 ;;
607dacd0
QN
1354 --enable-snappy) snappy="yes"
1355 ;;
6b383c08
PW
1356 --disable-bzip2) bzip2="no"
1357 ;;
1358 --enable-bzip2) bzip2="yes"
1359 ;;
83bc1f97
JF
1360 --enable-lzfse) lzfse="yes"
1361 ;;
1362 --disable-lzfse) lzfse="no"
1363 ;;
d138cee9
MR
1364 --enable-guest-agent) guest_agent="yes"
1365 ;;
1366 --disable-guest-agent) guest_agent="no"
1367 ;;
9dacf32d
YH
1368 --enable-guest-agent-msi) guest_agent_msi="yes"
1369 ;;
1370 --disable-guest-agent-msi) guest_agent_msi="no"
1371 ;;
d9840e25
TS
1372 --with-vss-sdk) vss_win32_sdk=""
1373 ;;
1374 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1375 ;;
1376 --without-vss-sdk) vss_win32_sdk="no"
1377 ;;
1378 --with-win-sdk) win_sdk=""
1379 ;;
1380 --with-win-sdk=*) win_sdk="$optarg"
1381 ;;
1382 --without-win-sdk) win_sdk="no"
1383 ;;
4b1c11fd
DB
1384 --enable-tools) want_tools="yes"
1385 ;;
1386 --disable-tools) want_tools="no"
1387 ;;
f794573e
EO
1388 --enable-seccomp) seccomp="yes"
1389 ;;
1390 --disable-seccomp) seccomp="no"
1391 ;;
eb100396
BR
1392 --disable-glusterfs) glusterfs="no"
1393 ;;
86583a07
LM
1394 --disable-avx2) avx2_opt="no"
1395 ;;
1396 --enable-avx2) avx2_opt="yes"
1397 ;;
eb100396
BR
1398 --enable-glusterfs) glusterfs="yes"
1399 ;;
52b53c04
FZ
1400 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1401 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
583f6e7b 1402 ;;
cb6414df
FZ
1403 --enable-vhdx|--disable-vhdx)
1404 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1405 ;;
315d3184
FZ
1406 --enable-uuid|--disable-uuid)
1407 echo "$0: $opt is obsolete, UUID support is always built" >&2
1408 ;;
a4ccabcf
AL
1409 --disable-gtk) gtk="no"
1410 ;;
1411 --enable-gtk) gtk="yes"
1412 ;;
a1c5e949
DB
1413 --tls-priority=*) tls_priority="$optarg"
1414 ;;
ddbb0d09
DB
1415 --disable-gnutls) gnutls="no"
1416 ;;
1417 --enable-gnutls) gnutls="yes"
1418 ;;
91bfcdb0
DB
1419 --disable-nettle) nettle="no"
1420 ;;
1421 --enable-nettle) nettle="yes"
1422 ;;
1423 --disable-gcrypt) gcrypt="no"
1424 ;;
1425 --enable-gcrypt) gcrypt="yes"
1426 ;;
8953caf3
DB
1427 --disable-auth-pam) auth_pam="no"
1428 ;;
1429 --enable-auth-pam) auth_pam="yes"
1430 ;;
2da776db
MH
1431 --enable-rdma) rdma="yes"
1432 ;;
1433 --disable-rdma) rdma="no"
1434 ;;
21ab34c9
MA
1435 --enable-pvrdma) pvrdma="yes"
1436 ;;
1437 --disable-pvrdma) pvrdma="no"
1438 ;;
bbbf9bfb
SW
1439 --disable-vte) vte="no"
1440 ;;
1441 --enable-vte) vte="yes"
1442 ;;
9d9e1521
GH
1443 --disable-virglrenderer) virglrenderer="no"
1444 ;;
1445 --enable-virglrenderer) virglrenderer="yes"
1446 ;;
e91c793c
CR
1447 --disable-tpm) tpm="no"
1448 ;;
ab214c29
SB
1449 --enable-tpm) tpm="yes"
1450 ;;
b10d49d7 1451 --disable-libssh) libssh="no"
0a12ec87 1452 ;;
b10d49d7 1453 --enable-libssh) libssh="yes"
0a12ec87 1454 ;;
ed1701c6
DDAG
1455 --disable-live-block-migration) live_block_migration="no"
1456 ;;
1457 --enable-live-block-migration) live_block_migration="yes"
1458 ;;
a99d57bb
WG
1459 --disable-numa) numa="no"
1460 ;;
1461 --enable-numa) numa="yes"
1462 ;;
ed279a06
KK
1463 --disable-libxml2) libxml2="no"
1464 ;;
1465 --enable-libxml2) libxml2="yes"
1466 ;;
2847b469
FZ
1467 --disable-tcmalloc) tcmalloc="no"
1468 ;;
1469 --enable-tcmalloc) tcmalloc="yes"
1470 ;;
7b01cb97
AD
1471 --disable-jemalloc) jemalloc="no"
1472 ;;
1473 --enable-jemalloc) jemalloc="yes"
1474 ;;
a6b1d4c0
CX
1475 --disable-replication) replication="no"
1476 ;;
1477 --enable-replication) replication="yes"
1478 ;;
da92c3ff
AM
1479 --disable-vxhs) vxhs="no"
1480 ;;
1481 --enable-vxhs) vxhs="yes"
1482 ;;
2f740136
JC
1483 --disable-bochs) bochs="no"
1484 ;;
1485 --enable-bochs) bochs="yes"
1486 ;;
1487 --disable-cloop) cloop="no"
1488 ;;
1489 --enable-cloop) cloop="yes"
1490 ;;
1491 --disable-dmg) dmg="no"
1492 ;;
1493 --enable-dmg) dmg="yes"
1494 ;;
1495 --disable-qcow1) qcow1="no"
1496 ;;
1497 --enable-qcow1) qcow1="yes"
1498 ;;
1499 --disable-vdi) vdi="no"
1500 ;;
1501 --enable-vdi) vdi="yes"
1502 ;;
1503 --disable-vvfat) vvfat="no"
1504 ;;
1505 --enable-vvfat) vvfat="yes"
1506 ;;
1507 --disable-qed) qed="no"
1508 ;;
1509 --enable-qed) qed="yes"
1510 ;;
1511 --disable-parallels) parallels="no"
1512 ;;
1513 --enable-parallels) parallels="yes"
1514 ;;
1515 --disable-sheepdog) sheepdog="no"
1516 ;;
1517 --enable-sheepdog) sheepdog="yes"
1518 ;;
e6a74868
MAL
1519 --disable-vhost-user) vhost_user="no"
1520 ;;
299e6f19
PB
1521 --enable-vhost-user) vhost_user="yes"
1522 ;;
1523 --disable-vhost-kernel) vhost_kernel="no"
1524 ;;
1525 --enable-vhost-kernel) vhost_kernel="yes"
e6a74868 1526 ;;
8ca80760
RH
1527 --disable-capstone) capstone="no"
1528 ;;
1529 --enable-capstone) capstone="yes"
1530 ;;
e219c499
RH
1531 --enable-capstone=git) capstone="git"
1532 ;;
1533 --enable-capstone=system) capstone="system"
1534 ;;
cc84d63a
DB
1535 --with-git=*) git="$optarg"
1536 ;;
f62bbee5
DB
1537 --enable-git-update) git_update=yes
1538 ;;
1539 --disable-git-update) git_update=no
1540 ;;
ba59fb77
PB
1541 --enable-debug-mutex) debug_mutex=yes
1542 ;;
1543 --disable-debug-mutex) debug_mutex=no
1544 ;;
17824406
JH
1545 --enable-libpmem) libpmem=yes
1546 ;;
1547 --disable-libpmem) libpmem=no
1548 ;;
75411919
JLC
1549 --enable-xkbcommon) xkbcommon=yes
1550 ;;
1551 --disable-xkbcommon) xkbcommon=no
1552 ;;
40e8c6f4
AB
1553 --enable-plugins) plugins="yes"
1554 ;;
1555 --disable-plugins) plugins="no"
1556 ;;
afc3a8f9
AB
1557 --enable-containers) use_containers="yes"
1558 ;;
1559 --disable-containers) use_containers="no"
1560 ;;
2d2ad6d0
FZ
1561 *)
1562 echo "ERROR: unknown option $opt"
1563 echo "Try '$0 --help' for more information"
1564 exit 1
7f1559c6 1565 ;;
7d13299d
FB
1566 esac
1567done
1568
40293e58 1569case "$cpu" in
e3608d66
RH
1570 ppc)
1571 CPU_CFLAGS="-m32"
db5adeaa 1572 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
e3608d66
RH
1573 ;;
1574 ppc64)
1575 CPU_CFLAGS="-m64"
db5adeaa 1576 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
e3608d66 1577 ;;
9b9c37c3 1578 sparc)
f1079bb8 1579 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
db5adeaa 1580 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
3142255c 1581 ;;
ed968ff1 1582 sparc64)
79f3b12f 1583 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
db5adeaa 1584 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
3142255c 1585 ;;
76d83bde 1586 s390)
061cdd81 1587 CPU_CFLAGS="-m31"
db5adeaa 1588 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
28d7cc49
RH
1589 ;;
1590 s390x)
061cdd81 1591 CPU_CFLAGS="-m64"
db5adeaa 1592 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
76d83bde 1593 ;;
40293e58 1594 i386)
79f3b12f 1595 CPU_CFLAGS="-m32"
db5adeaa 1596 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
40293e58
FB
1597 ;;
1598 x86_64)
7ebee43e
RH
1599 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1600 # If we truly care, we should simply detect this case at
1601 # runtime and generate the fallback to serial emulation.
1602 CPU_CFLAGS="-m64 -mcx16"
db5adeaa 1603 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
d2fbca94 1604 ;;
c72b26ec
RH
1605 x32)
1606 CPU_CFLAGS="-mx32"
db5adeaa 1607 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
c72b26ec 1608 ;;
30163d89 1609 # No special flags required for other host CPUs
3142255c
BS
1610esac
1611
2038f8c8
PB
1612eval "cross_cc_${cpu}=\$host_cc"
1613cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
79f3b12f 1614QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
79f3b12f 1615
affc88cc
PM
1616# For user-mode emulation the host arch has to be one we explicitly
1617# support, even if we're using TCI.
1618if [ "$ARCH" = "unknown" ]; then
1619 bsd_user="no"
1620 linux_user="no"
1621fi
1622
60e0df25
PM
1623default_target_list=""
1624
6e92f823
PM
1625mak_wilds=""
1626
1627if [ "$softmmu" = "yes" ]; then
1628 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
60e0df25 1629fi
6e92f823
PM
1630if [ "$linux_user" = "yes" ]; then
1631 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
60e0df25 1632fi
6e92f823
PM
1633if [ "$bsd_user" = "yes" ]; then
1634 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
60e0df25
PM
1635fi
1636
447e133f
AB
1637if test -z "$target_list_exclude"; then
1638 for config in $mak_wilds; do
1639 default_target_list="${default_target_list} $(basename "$config" .mak)"
1640 done
1641else
1642 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1643 for config in $mak_wilds; do
1644 target="$(basename "$config" .mak)"
1645 exclude="no"
1646 for excl in $exclude_list; do
1647 if test "$excl" = "$target"; then
1648 exclude="yes"
1649 break;
1650 fi
1651 done
1652 if test "$exclude" = "no"; then
1653 default_target_list="${default_target_list} $target"
1654 fi
1655 done
1656fi
6e92f823 1657
c53eeaf7 1658# Enumerate public trace backends for --help output
64a6047d 1659trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
c53eeaf7 1660
af5db58e
PB
1661if test x"$show_help" = x"yes" ; then
1662cat << EOF
1663
1664Usage: configure [options]
1665Options: [defaults in brackets after descriptions]
1666
08fb77ed
SW
1667Standard options:
1668 --help print this message
1669 --prefix=PREFIX install in PREFIX [$prefix]
1670 --interp-prefix=PREFIX where to find shared libraries, etc.
1671 use %M for cpu name [$interp_prefix]
1672 --target-list=LIST set target list (default: build everything)
1673$(echo Available targets: $default_target_list | \
1674 fold -s -w 53 | sed -e 's/^/ /')
447e133f 1675 --target-list-exclude=LIST exclude a set of targets from the default target-list
08fb77ed
SW
1676
1677Advanced options (experts only):
08fb77ed
SW
1678 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1679 --cc=CC use C compiler CC [$cc]
1680 --iasl=IASL use ACPI compiler IASL [$iasl]
1681 --host-cc=CC use C compiler CC [$host_cc] for code run at
1682 build time
1683 --cxx=CXX use C++ compiler CXX [$cxx]
1684 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1685 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
11cde1c8 1686 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
08fb77ed 1687 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
d75402b5 1688 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
d422b2bc 1689 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
08fb77ed
SW
1690 --make=MAKE use specified make [$make]
1691 --install=INSTALL use specified install [$install]
1692 --python=PYTHON use specified python [$python]
2eb054c2 1693 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
08fb77ed 1694 --smbd=SMBD use specified smbd [$smbd]
db1b5f13 1695 --with-git=GIT use specified git [$git]
08fb77ed
SW
1696 --static enable static build [$static]
1697 --mandir=PATH install man pages in PATH
1698 --datadir=PATH install firmware in PATH$confsuffix
1699 --docdir=PATH install documentation in PATH$confsuffix
1700 --bindir=PATH install binaries in PATH
1701 --libdir=PATH install libraries in PATH
db1b5f13 1702 --libexecdir=PATH install helper binaries in PATH
08fb77ed
SW
1703 --sysconfdir=PATH install config in PATH$confsuffix
1704 --localstatedir=PATH install local state in PATH (set at runtime on win32)
3d5eecab 1705 --firmwarepath=PATH search PATH for firmware files
e26110cf 1706 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
db1b5f13 1707 --with-pkgversion=VERS use specified string as sub-version of the package
08fb77ed 1708 --enable-debug enable common debug build options
247724cb 1709 --enable-sanitizers enable default sanitizers
08fb77ed
SW
1710 --disable-strip disable stripping binaries
1711 --disable-werror disable compilation abort on warning
63678e17 1712 --disable-stack-protector disable compiler-provided stack protection
08fb77ed
SW
1713 --audio-drv-list=LIST set audio drivers list:
1714 Available drivers: $audio_possible_drivers
1715 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1716 --block-drv-rw-whitelist=L
1717 set block driver read-write whitelist
1718 (affects only QEMU, not qemu-img)
1719 --block-drv-ro-whitelist=L
1720 set block driver read-only whitelist
1721 (affects only QEMU, not qemu-img)
5b808275 1722 --enable-trace-backends=B Set trace backend
c53eeaf7 1723 Available backends: $trace_backend_list
08fb77ed
SW
1724 --with-trace-file=NAME Full PATH,NAME of file to store traces
1725 Default:trace-<pid>
c23f23b9
MT
1726 --disable-slirp disable SLIRP userspace network connectivity
1727 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
5a22ab71 1728 --enable-malloc-trim enable libc malloc_trim() for memory optimization
c23f23b9
MT
1729 --oss-lib path to OSS library
1730 --cpu=CPU Build for host CPU [$cpu]
08fb77ed 1731 --with-coroutine=BACKEND coroutine backend. Supported options:
33c53c54 1732 ucontext, sigaltstack, windows
08fb77ed
SW
1733 --enable-gcov enable test coverage analysis with gcov
1734 --gcov=GCOV use specified gcov [$gcov_tool]
c23f23b9
MT
1735 --disable-blobs disable installing provided firmware blobs
1736 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1737 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
a1c5e949 1738 --tls-priority default TLS protocol/cipher priority string
c12d66aa
LM
1739 --enable-gprof QEMU profiling with gprof
1740 --enable-profiler profiler support
c12d66aa
LM
1741 --enable-debug-stack-usage
1742 track the maximum stack usage of stacks created by qemu_alloc_stack
40e8c6f4
AB
1743 --enable-plugins
1744 enable plugins via shared library loading
afc3a8f9 1745 --disable-containers don't use containers for cross-building
c23f23b9
MT
1746
1747Optional features, enabled with --enable-FEATURE and
1748disabled with --disable-FEATURE, default is enabled if available:
1749
1750 system all system emulation targets
1751 user supported user emulation targets
1752 linux-user all linux usermode emulation targets
1753 bsd-user all BSD usermode emulation targets
c23f23b9
MT
1754 docs build documentation
1755 guest-agent build the QEMU Guest Agent
1756 guest-agent-msi build guest agent Windows MSI installation package
1757 pie Position Independent Executables
21e709aa 1758 modules modules support (non-Windows)
c23f23b9
MT
1759 debug-tcg TCG debugging (default is disabled)
1760 debug-info debugging information
1761 sparse sparse checker
1762
ddbb0d09 1763 gnutls GNUTLS cryptography support
91bfcdb0
DB
1764 nettle nettle cryptography support
1765 gcrypt libgcrypt cryptography support
8953caf3 1766 auth-pam PAM access control
c23f23b9 1767 sdl SDL UI
04c6e16f 1768 sdl-image SDL Image support for icons
c23f23b9 1769 gtk gtk UI
c23f23b9
MT
1770 vte vte support for the gtk UI
1771 curses curses UI
e08bb301 1772 iconv font glyph conversion support
c23f23b9 1773 vnc VNC UI support
c23f23b9
MT
1774 vnc-sasl SASL encryption for VNC server
1775 vnc-jpeg JPEG lossy compression for VNC server
1776 vnc-png PNG compression for VNC server
c23f23b9
MT
1777 cocoa Cocoa UI (Mac OS X only)
1778 virtfs VirtFS
fe8fc5ae 1779 mpath Multipath persistent reservation passthrough
c23f23b9 1780 xen xen backend driver support
70c292af 1781 xen-pci-passthrough PCI passthrough support for Xen
c23f23b9
MT
1782 brlapi BrlAPI (Braile)
1783 curl curl connectivity
a40161cb 1784 membarrier membarrier system call (for Linux 4.14+ or Windows)
c23f23b9 1785 fdt fdt device tree
c23f23b9 1786 kvm KVM acceleration support
b0cb0a66 1787 hax HAX acceleration support
c97d6d2c 1788 hvf Hypervisor.framework acceleration support
d661d9a4 1789 whpx Windows Hypervisor Platform acceleration support
21ab34c9
MA
1790 rdma Enable RDMA-based migration
1791 pvrdma Enable PVRDMA support
c23f23b9
MT
1792 vde support for vde network
1793 netmap support for netmap network
1794 linux-aio Linux AIO support
c10dd856 1795 linux-io-uring Linux io_uring support
c23f23b9
MT
1796 cap-ng libcap-ng support
1797 attr attr and xattr support
299e6f19
PB
1798 vhost-net vhost-net kernel acceleration support
1799 vhost-vsock virtio sockets device support
1800 vhost-scsi vhost-scsi kernel target support
1801 vhost-crypto vhost-user-crypto backend support
1802 vhost-kernel vhost kernel backend support
1803 vhost-user vhost-user backend support
c23f23b9
MT
1804 spice spice
1805 rbd rados block device (rbd)
1806 libiscsi iscsi support
1807 libnfs nfs support
7b02f544 1808 smartcard smartcard support (libcacard)
c23f23b9 1809 libusb libusb (for usb passthrough)
ed1701c6 1810 live-block-migration Block migration in the main migration stream
c23f23b9
MT
1811 usb-redir usb network redirection support
1812 lzo support of lzo compression library
1813 snappy support of snappy compression library
1814 bzip2 support of bzip2 compression library
1815 (for reading bzip2-compressed dmg images)
83bc1f97
JF
1816 lzfse support of lzfse compression library
1817 (for reading lzfse-compressed dmg images)
c23f23b9
MT
1818 seccomp seccomp support
1819 coroutine-pool coroutine freelist (better performance)
1820 glusterfs GlusterFS backend
c23f23b9 1821 tpm TPM support
b10d49d7 1822 libssh ssh block device support
c23f23b9 1823 numa libnuma support
ed279a06 1824 libxml2 for Parallels image format
c23f23b9 1825 tcmalloc tcmalloc support
7b01cb97 1826 jemalloc jemalloc support
86583a07 1827 avx2 AVX2 optimization support
a6b1d4c0 1828 replication replication support
c12d66aa
LM
1829 opengl opengl support
1830 virglrenderer virgl rendering support
1831 xfsctl xfsctl support
1832 qom-cast-debug cast debugging support
8de73fa8 1833 tools build qemu-io, qemu-nbd and qemu-img tools
da92c3ff 1834 vxhs Veritas HyperScale vDisk backend support
2f740136
JC
1835 bochs bochs image format support
1836 cloop cloop image format support
1837 dmg dmg image format support
1838 qcow1 qcow v1 image format support
1839 vdi vdi image format support
1840 vvfat vvfat image format support
1841 qed qed image format support
1842 parallels parallels image format support
1843 sheepdog sheepdog block driver support
f0d92b56 1844 crypto-afalg Linux AF_ALG crypto backend driver
8ca80760 1845 capstone capstone disassembler support
ba59fb77 1846 debug-mutex mutex debugging support
17824406 1847 libpmem libpmem support
75411919 1848 xkbcommon xkbcommon support
08fb77ed
SW
1849
1850NOTE: The object files are built at the place where configure is launched
af5db58e 1851EOF
2d2ad6d0 1852exit 0
af5db58e
PB
1853fi
1854
9c790242 1855# Remove old dependency files to make sure that they get properly regenerated
bb768f71 1856rm -f */config-devices.mak.d
9c790242 1857
faf44142
DB
1858if test -z "$python"
1859then
1860 error_exit "Python not found. Use --python=/path/to/python"
c53eeaf7
SH
1861fi
1862
1863# Note that if the Python conditional here evaluates True we will exit
1864# with status 1 which is a shell 'false' value.
ddf90699
EH
1865if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1866 error_exit "Cannot use '$python', Python >= 3.5 is required." \
c53eeaf7
SH
1867 "Use --python=/path/to/python to specify a supported Python."
1868fi
1869
755ee70f 1870# Preserve python version since some functionality is dependent on it
406ab2f3 1871python_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 1872
c53eeaf7
SH
1873# Suppress writing compiled files
1874python="$python -B"
1875
9aae6e54
DHB
1876# Check that the C compiler works. Doing this here before testing
1877# the host CPU ensures that we had a valid CC to autodetect the
1878# $cpu var (and we should bail right here if that's not the case).
1879# It also allows the help message to be printed without a CC.
1880write_c_skeleton;
1881if compile_object ; then
1882 : C compiler works ok
1883else
1884 error_exit "\"$cc\" either does not exist or does not work"
1885fi
1886if ! compile_prog ; then
1887 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1888fi
1889
359bc95d
PM
1890# Now we have handled --enable-tcg-interpreter and know we're not just
1891# printing the help message, bail out if the host CPU isn't supported.
1892if test "$ARCH" = "unknown"; then
1893 if test "$tcg_interpreter" = "yes" ; then
1894 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
359bc95d 1895 else
76ad07a4 1896 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
359bc95d
PM
1897 fi
1898fi
1899
9c83ffd8
PM
1900# Consult white-list to determine whether to enable werror
1901# by default. Only enable by default for git builds
9c83ffd8 1902if test -z "$werror" ; then
fd73745d 1903 if test -e "$source_path/.git" && \
e633a5c6 1904 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
9c83ffd8
PM
1905 werror="yes"
1906 else
1907 werror="no"
1908 fi
1909fi
1910
fb59dabd
PM
1911if test "$bogus_os" = "yes"; then
1912 # Now that we know that we're not printing the help and that
1913 # the compiler works (so the results of the check_defines we used
1914 # to identify the OS are reliable), if we didn't recognize the
1915 # host OS we should stop now.
951fedfc 1916 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
fb59dabd
PM
1917fi
1918
efc6c070
TH
1919# Check whether the compiler matches our minimum requirements:
1920cat > $TMPC << EOF
1921#if defined(__clang_major__) && defined(__clang_minor__)
1922# ifdef __apple_build_version__
1923# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1924# error You need at least XCode Clang v5.1 to compile QEMU
1925# endif
1926# else
1927# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1928# error You need at least Clang v3.4 to compile QEMU
1929# endif
1930# endif
1931#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1932# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1933# error You need at least GCC v4.8 to compile QEMU
1934# endif
1935#else
1936# error You either need GCC or Clang to compiler QEMU
1937#endif
1938int main (void) { return 0; }
1939EOF
1940if ! compile_prog "" "" ; then
1941 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1942fi
1943
8d05095c
PB
1944gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1945gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
ac7568bd 1946gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
435405ac 1947gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
b98fcfd8 1948gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
e6e90fee 1949gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
6ca026cb
PM
1950# Note that we do not add -Werror to gcc_flags here, because that would
1951# enable it for all configure tests. If a configure test failed due
1952# to -Werror this would just silently disable some features,
1953# so it's too error prone.
93b25869
JS
1954
1955cc_has_warning_flag() {
1956 write_c_skeleton;
1957
a1d29d6c
PM
1958 # Use the positive sense of the flag when testing for -Wno-wombat
1959 # support (gcc will happily accept the -Wno- form of unknown
1960 # warning options).
93b25869
JS
1961 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1962 compile_prog "-Werror $optflag" ""
1963}
1964
1965for flag in $gcc_flags; do
1966 if cc_has_warning_flag $flag ; then
1967 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
8d05095c
PB
1968 fi
1969done
1970
3b463a3f 1971if test "$stack_protector" != "no"; then
fccd35a0
RR
1972 cat > $TMPC << EOF
1973int main(int argc, char *argv[])
1974{
1975 char arr[64], *p = arr, *c = argv[0];
1976 while (*c) {
1977 *p++ = *c++;
1978 }
1979 return 0;
1980}
1981EOF
63678e17 1982 gcc_flags="-fstack-protector-strong -fstack-protector-all"
3b463a3f 1983 sp_on=0
63678e17 1984 for flag in $gcc_flags; do
590e5dd9
PM
1985 # We need to check both a compile and a link, since some compiler
1986 # setups fail only on a .c->.o compile and some only at link time
1987 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1988 compile_prog "-Werror $flag" ""; then
63678e17 1989 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
db5adeaa 1990 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3b463a3f 1991 sp_on=1
63678e17
SN
1992 break
1993 fi
1994 done
3b463a3f
MR
1995 if test "$stack_protector" = yes; then
1996 if test $sp_on = 0; then
1997 error_exit "Stack protector not supported"
1998 fi
1999 fi
37746c5e
MAL
2000fi
2001
20bc94a2
PB
2002# Disable -Wmissing-braces on older compilers that warn even for
2003# the "universal" C zero initializer {0}.
2004cat > $TMPC << EOF
2005struct {
2006 int a[2];
2007} x = {0};
2008EOF
2009if compile_object "-Werror" "" ; then
2010 :
2011else
2012 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2013fi
2014
21e709aa
MAL
2015# Our module code doesn't support Windows
2016if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2017 error_exit "Modules are not available for Windows"
2018fi
2019
d376e9de 2020# Static linking is not possible with modules or PIE
40d6444e 2021if test "$static" = "yes" ; then
aa0d1f44
PB
2022 if test "$modules" = "yes" ; then
2023 error_exit "static and modules are mutually incompatible"
2024 fi
40d6444e 2025 if test "$pie" = "yes" ; then
76ad07a4 2026 error_exit "static and pie are mutually incompatible"
40d6444e
AK
2027 else
2028 pie="no"
2029 fi
2030fi
2031
768b7855
EC
2032# Unconditional check for compiler __thread support
2033 cat > $TMPC << EOF
2034static __thread int tls_var;
2035int main(void) { return tls_var; }
2036EOF
2037
2038if ! compile_prog "-Werror" "" ; then
2039 error_exit "Your compiler does not support the __thread specifier for " \
2040 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2041fi
2042
40d6444e
AK
2043if test "$pie" = ""; then
2044 case "$cpu-$targetos" in
c72b26ec 2045 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
40d6444e
AK
2046 ;;
2047 *)
2048 pie="no"
2049 ;;
2050 esac
2051fi
2052
2053if test "$pie" != "no" ; then
2054 cat > $TMPC << EOF
21d4a791
AK
2055
2056#ifdef __linux__
2057# define THREAD __thread
2058#else
2059# define THREAD
2060#endif
2061
2062static THREAD int tls_var;
2063
2064int main(void) { return tls_var; }
2065
40d6444e 2066EOF
412aeacd
AB
2067 # check we support --no-pie first...
2068 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2069 CFLAGS_NOPIE="-fno-pie"
2070 LDFLAGS_NOPIE="-nopie"
2071 fi
2072
40d6444e
AK
2073 if compile_prog "-fPIE -DPIE" "-pie"; then
2074 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
db5adeaa 2075 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
40d6444e
AK
2076 pie="yes"
2077 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
db5adeaa 2078 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
40d6444e
AK
2079 fi
2080 else
2081 if test "$pie" = "yes"; then
76ad07a4 2082 error_exit "PIE not available due to missing toolchain support"
40d6444e
AK
2083 else
2084 echo "Disabling PIE due to missing toolchain support"
2085 pie="no"
2086 fi
2087 fi
2088fi
2089
09dada40
PB
2090##########################################
2091# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2092# use i686 as default anyway, but for those that don't, an explicit
2093# specification is necessary
2094
2095if test "$cpu" = "i386"; then
2096 cat > $TMPC << EOF
2097static int sfaa(int *ptr)
2098{
2099 return __sync_fetch_and_and(ptr, 0);
2100}
2101
2102int main(void)
2103{
2104 int val = 42;
1405b629 2105 val = __sync_val_compare_and_swap(&val, 0, 1);
09dada40
PB
2106 sfaa(&val);
2107 return val;
2108}
2109EOF
2110 if ! compile_prog "" "" ; then
2111 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2112 fi
2113fi
2114
2115#########################################
ec530c81 2116# Solaris specific configure tool chain decisions
09dada40 2117
ec530c81 2118if test "$solaris" = "yes" ; then
6792aa11
LM
2119 if has $install; then
2120 :
2121 else
76ad07a4
PM
2122 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2123 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2124 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
ec530c81 2125 fi
89138857 2126 if test "$(path_of $install)" = "/usr/sbin/install" ; then
76ad07a4
PM
2127 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2128 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2129 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
ec530c81 2130 fi
6792aa11
LM
2131 if has ar; then
2132 :
2133 else
ec530c81 2134 if test -f /usr/ccs/bin/ar ; then
76ad07a4
PM
2135 error_exit "No path includes ar" \
2136 "Add /usr/ccs/bin to your path and rerun configure"
ec530c81 2137 fi
76ad07a4 2138 error_exit "No path includes ar"
ec530c81 2139 fi
5fafdf24 2140fi
ec530c81 2141
afb63ebd 2142if test -z "${target_list+xxx}" ; then
d880a3ba
PB
2143 for target in $default_target_list; do
2144 supported_target $target 2>/dev/null && \
2145 target_list="$target_list $target"
2146 done
2147 target_list="${target_list# }"
121afa9e 2148else
89138857 2149 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
d880a3ba
PB
2150 for target in $target_list; do
2151 # Check that we recognised the target name; this allows a more
2152 # friendly error message than if we let it fall through.
2153 case " $default_target_list " in
2154 *" $target "*)
2155 ;;
2156 *)
2157 error_exit "Unknown target name '$target'"
2158 ;;
2159 esac
2160 supported_target $target || exit 1
2161 done
121afa9e 2162fi
25b48338 2163
f55fe278
PB
2164# see if system emulation was really requested
2165case " $target_list " in
2166 *"-softmmu "*) softmmu=yes
2167 ;;
2168 *) softmmu=no
2169 ;;
2170esac
5327cf48 2171
05dfa22b
PMD
2172for target in $target_list; do
2173 case "$target" in
2174 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2175 edk2_blobs="yes"
2176 ;;
2177 esac
2178done
623ef637
PMD
2179# The EDK2 binaries are compressed with bzip2
2180if test "$edk2_blobs" = "yes" && ! has bzip2; then
2181 error_exit "The bzip2 program is required for building QEMU"
2182fi
05dfa22b 2183
249247c9
JQ
2184feature_not_found() {
2185 feature=$1
21684af0 2186 remedy=$2
249247c9 2187
76ad07a4 2188 error_exit "User requested feature $feature" \
21684af0
SS
2189 "configure was not able to find it." \
2190 "$remedy"
249247c9
JQ
2191}
2192
7d13299d
FB
2193# ---
2194# big/little endian test
2195cat > $TMPC << EOF
61cc919f
MF
2196short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2197short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2198extern int foo(short *, short *);
2199int main(int argc, char *argv[]) {
2200 return foo(big_endian, little_endian);
7d13299d
FB
2201}
2202EOF
2203
61cc919f 2204if compile_object ; then
12f15c91 2205 if strings -a $TMPO | grep -q BiGeNdIaN ; then
61cc919f 2206 bigendian="yes"
12f15c91 2207 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
61cc919f
MF
2208 bigendian="no"
2209 else
2210 echo big/little test failed
21d89f84 2211 fi
61cc919f
MF
2212else
2213 echo big/little test failed
7d13299d
FB
2214fi
2215
e10ee3f5
PMD
2216##########################################
2217# system tools
2218if test -z "$want_tools"; then
2219 if test "$softmmu" = "no"; then
2220 want_tools=no
2221 else
2222 want_tools=yes
2223 fi
2224fi
2225
a30878e7
PM
2226##########################################
2227# cocoa implies not SDL or GTK
2228# (the cocoa UI code currently assumes it is always the active UI
2229# and doesn't interact well with other UI frontend code)
2230if test "$cocoa" = "yes"; then
2231 if test "$sdl" = "yes"; then
2232 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2233 fi
2234 if test "$gtk" = "yes"; then
2235 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2236 fi
2237 gtk=no
2238 sdl=no
2239fi
2240
6b39b063
EB
2241# Some versions of Mac OS X incorrectly define SIZE_MAX
2242cat > $TMPC << EOF
2243#include <stdint.h>
2244#include <stdio.h>
2245int main(int argc, char *argv[]) {
2246 return printf("%zu", SIZE_MAX);
2247}
2248EOF
2249have_broken_size_max=no
2250if ! compile_object -Werror ; then
2251 have_broken_size_max=yes
2252fi
2253
015a33bd
GA
2254##########################################
2255# L2TPV3 probe
2256
2257cat > $TMPC <<EOF
2258#include <sys/socket.h>
bff6cb72 2259#include <linux/ip.h>
015a33bd
GA
2260int main(void) { return sizeof(struct mmsghdr); }
2261EOF
2262if compile_prog "" "" ; then
2263 l2tpv3=yes
2264else
2265 l2tpv3=no
2266fi
2267
299e6f19
PB
2268#########################################
2269# vhost interdependencies and host support
2270
2271# vhost backends
2272test "$vhost_user" = "" && vhost_user=yes
2273if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2274 error_exit "vhost-user isn't available on win32"
2275fi
2276test "$vhost_kernel" = "" && vhost_kernel=$linux
2277if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2278 error_exit "vhost-kernel is only available on Linux"
2279fi
2280
2281# vhost-kernel devices
2282test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2283if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2284 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2285fi
2286test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2287if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2288 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2289fi
2290
2291# vhost-user backends
2292test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2293if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2294 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2295fi
2296test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2297if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2298 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2299fi
98fc1ada
DDAG
2300test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2301if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2302 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2303fi
299e6f19
PB
2304
2305# OR the vhost-kernel and vhost-user values for simplicity
2306if test "$vhost_net" = ""; then
2307 test "$vhost_net_user" = "yes" && vhost_net=yes
2308 test "$vhost_kernel" = "yes" && vhost_net=yes
2309fi
2310
4d9310f4
DB
2311##########################################
2312# MinGW / Mingw-w64 localtime_r/gmtime_r check
2313
2314if test "$mingw32" = "yes"; then
2315 # Some versions of MinGW / Mingw-w64 lack localtime_r
2316 # and gmtime_r entirely.
2317 #
2318 # Some versions of Mingw-w64 define a macro for
2319 # localtime_r/gmtime_r.
2320 #
2321 # Some versions of Mingw-w64 will define functions
2322 # for localtime_r/gmtime_r, but only if you have
2323 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2324 # though, unistd.h and pthread.h both define
2325 # that for you.
2326 #
2327 # So this #undef localtime_r and #include <unistd.h>
2328 # are not in fact redundant.
2329cat > $TMPC << EOF
2330#include <unistd.h>
2331#include <time.h>
2332#undef localtime_r
2333int main(void) { localtime_r(NULL, NULL); return 0; }
2334EOF
2335 if compile_prog "" "" ; then
2336 localtime_r="yes"
2337 else
2338 localtime_r="no"
2339 fi
2340fi
2341
779ab5e3
SW
2342##########################################
2343# pkg-config probe
2344
2345if ! has "$pkg_config_exe"; then
76ad07a4 2346 error_exit "pkg-config binary '$pkg_config_exe' not found"
779ab5e3
SW
2347fi
2348
b0a47e79
JQ
2349##########################################
2350# NPTL probe
2351
24cb36a6 2352if test "$linux_user" = "yes"; then
b0a47e79 2353 cat > $TMPC <<EOF
bd0c5661 2354#include <sched.h>
30813cea 2355#include <linux/futex.h>
182eacc0 2356int main(void) {
bd0c5661
PB
2357#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2358#error bork
2359#endif
182eacc0 2360 return 0;
bd0c5661
PB
2361}
2362EOF
24cb36a6 2363 if ! compile_object ; then
21684af0 2364 feature_not_found "nptl" "Install glibc and linux kernel headers."
b0a47e79 2365 fi
bd0c5661
PB
2366fi
2367
607dacd0
QN
2368##########################################
2369# lzo check
2370
2371if test "$lzo" != "no" ; then
2372 cat > $TMPC << EOF
2373#include <lzo/lzo1x.h>
2374int main(void) { lzo_version(); return 0; }
2375EOF
2376 if compile_prog "" "-llzo2" ; then
b25c9dff
SW
2377 libs_softmmu="$libs_softmmu -llzo2"
2378 lzo="yes"
607dacd0 2379 else
b25c9dff
SW
2380 if test "$lzo" = "yes"; then
2381 feature_not_found "liblzo2" "Install liblzo2 devel"
2382 fi
2383 lzo="no"
607dacd0 2384 fi
607dacd0
QN
2385fi
2386
2387##########################################
2388# snappy check
2389
2390if test "$snappy" != "no" ; then
2391 cat > $TMPC << EOF
2392#include <snappy-c.h>
2393int main(void) { snappy_max_compressed_length(4096); return 0; }
2394EOF
2395 if compile_prog "" "-lsnappy" ; then
b25c9dff
SW
2396 libs_softmmu="$libs_softmmu -lsnappy"
2397 snappy="yes"
607dacd0 2398 else
b25c9dff
SW
2399 if test "$snappy" = "yes"; then
2400 feature_not_found "libsnappy" "Install libsnappy devel"
2401 fi
2402 snappy="no"
607dacd0 2403 fi
607dacd0
QN
2404fi
2405
6b383c08
PW
2406##########################################
2407# bzip2 check
2408
2409if test "$bzip2" != "no" ; then
2410 cat > $TMPC << EOF
2411#include <bzlib.h>
2412int main(void) { BZ2_bzlibVersion(); return 0; }
2413EOF
2414 if compile_prog "" "-lbz2" ; then
2415 bzip2="yes"
2416 else
2417 if test "$bzip2" = "yes"; then
2418 feature_not_found "libbzip2" "Install libbzip2 devel"
2419 fi
2420 bzip2="no"
2421 fi
2422fi
2423
83bc1f97
JF
2424##########################################
2425# lzfse check
2426
2427if test "$lzfse" != "no" ; then
2428 cat > $TMPC << EOF
2429#include <lzfse.h>
2430int main(void) { lzfse_decode_scratch_size(); return 0; }
2431EOF
2432 if compile_prog "" "-llzfse" ; then
2433 lzfse="yes"
2434 else
2435 if test "$lzfse" = "yes"; then
2436 feature_not_found "lzfse" "Install lzfse devel"
2437 fi
2438 lzfse="no"
2439 fi
2440fi
2441
f794573e
EO
2442##########################################
2443# libseccomp check
2444
2445if test "$seccomp" != "no" ; then
25ed0ecc
HD
2446 libseccomp_minver="2.3.0"
2447 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
c3883e1f
FZ
2448 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2449 seccomp_libs="$($pkg_config --libs libseccomp)"
693e5910 2450 seccomp="yes"
f794573e 2451 else
693e5910 2452 if test "$seccomp" = "yes" ; then
25ed0ecc
HD
2453 feature_not_found "libseccomp" \
2454 "Install libseccomp devel >= $libseccomp_minver"
693e5910
AJ
2455 fi
2456 seccomp="no"
f794573e
EO
2457 fi
2458fi
e37630ca
AL
2459##########################################
2460# xen probe
2461
fc321b4b 2462if test "$xen" != "no" ; then
c1cdd9d5
JG
2463 # Check whether Xen library path is specified via --extra-ldflags to avoid
2464 # overriding this setting with pkg-config output. If not, try pkg-config
2465 # to obtain all needed flags.
2466
2467 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2468 $pkg_config --exists xencontrol ; then
2469 xen_ctrl_version="$(printf '%d%02d%02d' \
2470 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2471 xen=yes
2472 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2473 xen_pc="$xen_pc xenevtchn xendevicemodel"
58ea9a7a
AP
2474 if $pkg_config --exists xentoolcore; then
2475 xen_pc="$xen_pc xentoolcore"
2476 fi
c1cdd9d5
JG
2477 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2478 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
c1cdd9d5 2479 else
d5b93ddf 2480
c1cdd9d5 2481 xen_libs="-lxenstore -lxenctrl -lxenguest"
d9506cab 2482 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
50ced5b3 2483
c1cdd9d5
JG
2484 # First we test whether Xen headers and libraries are available.
2485 # If no, we are done and there is no Xen support.
2486 # If yes, more tests are run to detect the Xen version.
2487
2488 # Xen (any)
2489 cat > $TMPC <<EOF
e37630ca 2490#include <xenctrl.h>
50ced5b3
SW
2491int main(void) {
2492 return 0;
2493}
2494EOF
c1cdd9d5
JG
2495 if ! compile_prog "" "$xen_libs" ; then
2496 # Xen not found
2497 if test "$xen" = "yes" ; then
2498 feature_not_found "xen" "Install xen devel"
2499 fi
2500 xen=no
50ced5b3 2501
c1cdd9d5
JG
2502 # Xen unstable
2503 elif
2504 cat > $TMPC <<EOF &&
2cbf8903
RL
2505#undef XC_WANT_COMPAT_DEVICEMODEL_API
2506#define __XEN_TOOLS__
2507#include <xendevicemodel.h>
d3c49ebb 2508#include <xenforeignmemory.h>
2cbf8903
RL
2509int main(void) {
2510 xendevicemodel_handle *xd;
d3c49ebb 2511 xenforeignmemory_handle *xfmem;
2cbf8903
RL
2512
2513 xd = xendevicemodel_open(0, 0);
2514 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2515
d3c49ebb
PD
2516 xfmem = xenforeignmemory_open(0, 0);
2517 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2518
2cbf8903
RL
2519 return 0;
2520}
2521EOF
2522 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2523 then
2524 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2525 xen_ctrl_version=41100
2526 xen=yes
2527 elif
2528 cat > $TMPC <<EOF &&
5ba3d756
ID
2529#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2530#include <xenforeignmemory.h>
58ea9a7a 2531#include <xentoolcore.h>
5ba3d756
ID
2532int main(void) {
2533 xenforeignmemory_handle *xfmem;
2534
2535 xfmem = xenforeignmemory_open(0, 0);
2536 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
58ea9a7a 2537 xentoolcore_restrict_all(0);
5ba3d756
ID
2538
2539 return 0;
2540}
2541EOF
58ea9a7a 2542 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
5ba3d756 2543 then
58ea9a7a 2544 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
5ba3d756
ID
2545 xen_ctrl_version=41000
2546 xen=yes
2547 elif
2548 cat > $TMPC <<EOF &&
da8090cc
PD
2549#undef XC_WANT_COMPAT_DEVICEMODEL_API
2550#define __XEN_TOOLS__
2551#include <xendevicemodel.h>
2552int main(void) {
2553 xendevicemodel_handle *xd;
2554
2555 xd = xendevicemodel_open(0, 0);
2556 xendevicemodel_close(xd);
50ced5b3 2557
da8090cc
PD
2558 return 0;
2559}
2560EOF
c1cdd9d5
JG
2561 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2562 then
2563 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2564 xen_ctrl_version=40900
2565 xen=yes
2566 elif
2567 cat > $TMPC <<EOF &&
b6eb9b45
PS
2568/*
2569 * If we have stable libs the we don't want the libxc compat
2570 * layers, regardless of what CFLAGS we may have been given.
2571 *
2572 * Also, check if xengnttab_grant_copy_segment_t is defined and
2573 * grant copy operation is implemented.
2574 */
2575#undef XC_WANT_COMPAT_EVTCHN_API
2576#undef XC_WANT_COMPAT_GNTTAB_API
2577#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2578#include <xenctrl.h>
2579#include <xenstore.h>
2580#include <xenevtchn.h>
2581#include <xengnttab.h>
2582#include <xenforeignmemory.h>
2583#include <stdint.h>
2584#include <xen/hvm/hvm_info_table.h>
2585#if !defined(HVM_MAX_VCPUS)
2586# error HVM_MAX_VCPUS not defined
2587#endif
2588int main(void) {
2589 xc_interface *xc = NULL;
2590 xenforeignmemory_handle *xfmem;
2591 xenevtchn_handle *xe;
2592 xengnttab_handle *xg;
b6eb9b45
PS
2593 xengnttab_grant_copy_segment_t* seg = NULL;
2594
2595 xs_daemon_open();
2596
2597 xc = xc_interface_open(0, 0, 0);
2598 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2599 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2600 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2601 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
b6eb9b45
PS
2602
2603 xfmem = xenforeignmemory_open(0, 0);
2604 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2605
2606 xe = xenevtchn_open(0, 0);
2607 xenevtchn_fd(xe);
2608
2609 xg = xengnttab_open(0, 0);
2610 xengnttab_grant_copy(xg, 0, seg);
2611
2612 return 0;
2613}
2614EOF
c1cdd9d5
JG
2615 compile_prog "" "$xen_libs $xen_stable_libs"
2616 then
2617 xen_ctrl_version=40800
2618 xen=yes
2619 elif
2620 cat > $TMPC <<EOF &&
5eeb39c2
IC
2621/*
2622 * If we have stable libs the we don't want the libxc compat
2623 * layers, regardless of what CFLAGS we may have been given.
2624 */
2625#undef XC_WANT_COMPAT_EVTCHN_API
2626#undef XC_WANT_COMPAT_GNTTAB_API
2627#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2628#include <xenctrl.h>
2629#include <xenstore.h>
2630#include <xenevtchn.h>
2631#include <xengnttab.h>
2632#include <xenforeignmemory.h>
2633#include <stdint.h>
2634#include <xen/hvm/hvm_info_table.h>
2635#if !defined(HVM_MAX_VCPUS)
2636# error HVM_MAX_VCPUS not defined
2637#endif
2638int main(void) {
2639 xc_interface *xc = NULL;
2640 xenforeignmemory_handle *xfmem;
2641 xenevtchn_handle *xe;
2642 xengnttab_handle *xg;
5eeb39c2
IC
2643
2644 xs_daemon_open();
2645
2646 xc = xc_interface_open(0, 0, 0);
2647 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2648 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2649 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2650 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
5eeb39c2
IC
2651
2652 xfmem = xenforeignmemory_open(0, 0);
2653 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2654
2655 xe = xenevtchn_open(0, 0);
2656 xenevtchn_fd(xe);
2657
2658 xg = xengnttab_open(0, 0);
2659 xengnttab_map_grant_ref(xg, 0, 0, 0);
2660
2661 return 0;
2662}
2663EOF
c1cdd9d5
JG
2664 compile_prog "" "$xen_libs $xen_stable_libs"
2665 then
2666 xen_ctrl_version=40701
2667 xen=yes
c1cdd9d5
JG
2668
2669 # Xen 4.6
2670 elif
2671 cat > $TMPC <<EOF &&
cdadde39 2672#include <xenctrl.h>
e108a3c1 2673#include <xenstore.h>
d5b93ddf
AP
2674#include <stdint.h>
2675#include <xen/hvm/hvm_info_table.h>
2676#if !defined(HVM_MAX_VCPUS)
2677# error HVM_MAX_VCPUS not defined
2678#endif
d8b441a3
JB
2679int main(void) {
2680 xc_interface *xc;
2681 xs_daemon_open();
2682 xc = xc_interface_open(0, 0, 0);
2683 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2684 xc_gnttab_open(NULL, 0);
2685 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2686 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2687 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
20a544c7 2688 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
d8b441a3
JB
2689 return 0;
2690}
2691EOF
c1cdd9d5
JG
2692 compile_prog "" "$xen_libs"
2693 then
2694 xen_ctrl_version=40600
2695 xen=yes
2696
2697 # Xen 4.5
2698 elif
2699 cat > $TMPC <<EOF &&
d8b441a3
JB
2700#include <xenctrl.h>
2701#include <xenstore.h>
2702#include <stdint.h>
2703#include <xen/hvm/hvm_info_table.h>
2704#if !defined(HVM_MAX_VCPUS)
2705# error HVM_MAX_VCPUS not defined
2706#endif
3996e85c
PD
2707int main(void) {
2708 xc_interface *xc;
2709 xs_daemon_open();
2710 xc = xc_interface_open(0, 0, 0);
2711 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2712 xc_gnttab_open(NULL, 0);
2713 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2714 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2715 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2716 return 0;
2717}
2718EOF
c1cdd9d5
JG
2719 compile_prog "" "$xen_libs"
2720 then
2721 xen_ctrl_version=40500
2722 xen=yes
3996e85c 2723
c1cdd9d5
JG
2724 elif
2725 cat > $TMPC <<EOF &&
3996e85c
PD
2726#include <xenctrl.h>
2727#include <xenstore.h>
2728#include <stdint.h>
2729#include <xen/hvm/hvm_info_table.h>
2730#if !defined(HVM_MAX_VCPUS)
2731# error HVM_MAX_VCPUS not defined
2732#endif
8688e065
SS
2733int main(void) {
2734 xc_interface *xc;
2735 xs_daemon_open();
2736 xc = xc_interface_open(0, 0, 0);
2737 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2738 xc_gnttab_open(NULL, 0);
2739 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2740 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2741 return 0;
2742}
2743EOF
c1cdd9d5
JG
2744 compile_prog "" "$xen_libs"
2745 then
2746 xen_ctrl_version=40200
2747 xen=yes
8688e065 2748
c1cdd9d5
JG
2749 else
2750 if test "$xen" = "yes" ; then
2751 feature_not_found "xen (unsupported version)" \
2752 "Install a supported xen (xen 4.2 or newer)"
2753 fi
2754 xen=no
fc321b4b 2755 fi
d5b93ddf 2756
c1cdd9d5
JG
2757 if test "$xen" = yes; then
2758 if test $xen_ctrl_version -ge 40701 ; then
2759 libs_softmmu="$xen_stable_libs $libs_softmmu"
2760 fi
2761 libs_softmmu="$xen_libs $libs_softmmu"
5eeb39c2 2762 fi
d5b93ddf 2763 fi
e37630ca
AL
2764fi
2765
eb6fda0f 2766if test "$xen_pci_passthrough" != "no"; then
edfb07ed 2767 if test "$xen" = "yes" && test "$linux" = "yes"; then
eb6fda0f
AP
2768 xen_pci_passthrough=yes
2769 else
2770 if test "$xen_pci_passthrough" = "yes"; then
76ad07a4
PM
2771 error_exit "User requested feature Xen PCI Passthrough" \
2772 " but this feature requires /sys from Linux"
eb6fda0f
AP
2773 fi
2774 xen_pci_passthrough=no
2775 fi
2776fi
2777
d661d9a4
JTV
2778##########################################
2779# Windows Hypervisor Platform accelerator (WHPX) check
2780if test "$whpx" != "no" ; then
327fccb2 2781 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
d661d9a4
JTV
2782 whpx="yes"
2783 else
2784 if test "$whpx" = "yes"; then
53537bb1 2785 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
d661d9a4
JTV
2786 fi
2787 whpx="no"
2788 fi
2789fi
2790
dfffc653
JQ
2791##########################################
2792# Sparse probe
2793if test "$sparse" != "no" ; then
0dba6195 2794 if has cgcc; then
dfffc653
JQ
2795 sparse=yes
2796 else
2797 if test "$sparse" = "yes" ; then
21684af0 2798 feature_not_found "sparse" "Install sparse binary"
dfffc653
JQ
2799 fi
2800 sparse=no
2801 fi
2802fi
2803
f676c67e
JW
2804##########################################
2805# X11 probe
f676c67e 2806if $pkg_config --exists "x11"; then
8781595b 2807 have_x11=yes
89138857
SW
2808 x11_cflags=$($pkg_config --cflags x11)
2809 x11_libs=$($pkg_config --libs x11)
f676c67e
JW
2810fi
2811
a4ccabcf
AL
2812##########################################
2813# GTK probe
2814
2815if test "$gtk" != "no"; then
89d85cde
DB
2816 gtkpackage="gtk+-3.0"
2817 gtkx11package="gtk+-x11-3.0"
58296cb6 2818 gtkversion="3.14.0"
bbbf9bfb 2819 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
89138857
SW
2820 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2821 gtk_libs=$($pkg_config --libs $gtkpackage)
2822 gtk_version=$($pkg_config --modversion $gtkpackage)
0a337ed0 2823 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
8781595b 2824 need_x11=yes
f676c67e
JW
2825 gtk_cflags="$gtk_cflags $x11_cflags"
2826 gtk_libs="$gtk_libs $x11_libs"
0a337ed0 2827 fi
bbbf9bfb
SW
2828 gtk="yes"
2829 elif test "$gtk" = "yes"; then
5fe309ff 2830 feature_not_found "gtk" "Install gtk3-devel"
bbbf9bfb
SW
2831 else
2832 gtk="no"
2833 fi
2834fi
2835
ddbb0d09
DB
2836
2837##########################################
2838# GNUTLS probe
2839
2840if test "$gnutls" != "no"; then
a73e82ef 2841 pass="no"
a0722409 2842 if $pkg_config --exists "gnutls >= 3.1.18"; then
89138857
SW
2843 gnutls_cflags=$($pkg_config --cflags gnutls)
2844 gnutls_libs=$($pkg_config --libs gnutls)
a73e82ef
RH
2845 # Packaging for the static libraries is not always correct.
2846 # At least ubuntu 18.04 ships only shared libraries.
2847 write_c_skeleton
2848 if compile_prog "" "$gnutls_libs" ; then
243dc2cf 2849 LIBS="$gnutls_libs $LIBS"
a73e82ef
RH
2850 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2851 pass="yes"
2852 fi
2853 fi
2854 if test "$pass" = "no" && test "$gnutls" = "yes"; then
a0722409 2855 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
ddbb0d09 2856 else
a73e82ef 2857 gnutls="$pass"
ddbb0d09 2858 fi
ddbb0d09
DB
2859fi
2860
91bfcdb0
DB
2861
2862# If user didn't give a --disable/enable-gcrypt flag,
2863# then mark as disabled if user requested nettle
a0722409 2864# explicitly
91bfcdb0
DB
2865if test -z "$gcrypt"
2866then
a0722409 2867 if test "$nettle" = "yes"
91bfcdb0
DB
2868 then
2869 gcrypt="no"
2870 fi
2871fi
2872
2873# If user didn't give a --disable/enable-nettle flag,
2874# then mark as disabled if user requested gcrypt
a0722409 2875# explicitly
91bfcdb0
DB
2876if test -z "$nettle"
2877then
a0722409 2878 if test "$gcrypt" = "yes"
91bfcdb0
DB
2879 then
2880 nettle="no"
2881 fi
2882fi
2883
dea7a64e 2884has_libgcrypt() {
91bfcdb0
DB
2885 if ! has "libgcrypt-config"
2886 then
2887 return 1
2888 fi
2889
2890 if test -n "$cross_prefix"
2891 then
89138857 2892 host=$(libgcrypt-config --host)
91bfcdb0
DB
2893 if test "$host-" != $cross_prefix
2894 then
2895 return 1
2896 fi
2897 fi
2898
dea7a64e
DB
2899 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2900 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2901
2902 if test $maj != 1 || test $min -lt 5
2903 then
2904 return 1
2905 fi
2906
91bfcdb0
DB
2907 return 0
2908}
2909
a0722409
DB
2910
2911if test "$nettle" != "no"; then
a73e82ef 2912 pass="no"
64dd2f3b 2913 if $pkg_config --exists "nettle >= 2.7.1"; then
a0722409
DB
2914 nettle_cflags=$($pkg_config --cflags nettle)
2915 nettle_libs=$($pkg_config --libs nettle)
2916 nettle_version=$($pkg_config --modversion nettle)
a73e82ef
RH
2917 # Link test to make sure the given libraries work (e.g for static).
2918 write_c_skeleton
2919 if compile_prog "" "$nettle_libs" ; then
243dc2cf 2920 LIBS="$nettle_libs $LIBS"
a73e82ef
RH
2921 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2922 if test -z "$gcrypt"; then
2923 gcrypt="no"
2924 fi
2925 pass="yes"
a0722409 2926 fi
a73e82ef 2927 fi
dc2207af
DB
2928 if test "$pass" = "yes"
2929 then
2930 cat > $TMPC << EOF
2931#include <nettle/xts.h>
2932int main(void) {
2933 return 0;
2934}
2935EOF
2936 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2937 nettle_xts=yes
2938 qemu_private_xts=no
2939 fi
2940 fi
a73e82ef
RH
2941 if test "$pass" = "no" && test "$nettle" = "yes"; then
2942 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
a0722409 2943 else
a73e82ef 2944 nettle="$pass"
a0722409
DB
2945 fi
2946fi
2947
91bfcdb0 2948if test "$gcrypt" != "no"; then
a73e82ef 2949 pass="no"
dea7a64e 2950 if has_libgcrypt; then
89138857
SW
2951 gcrypt_cflags=$(libgcrypt-config --cflags)
2952 gcrypt_libs=$(libgcrypt-config --libs)
a73e82ef 2953 # Debian has removed -lgpg-error from libgcrypt-config
91bfcdb0
DB
2954 # as it "spreads unnecessary dependencies" which in
2955 # turn breaks static builds...
2956 if test "$static" = "yes"
2957 then
2958 gcrypt_libs="$gcrypt_libs -lgpg-error"
2959 fi
1f923c70 2960
a73e82ef
RH
2961 # Link test to make sure the given libraries work (e.g for static).
2962 write_c_skeleton
2963 if compile_prog "" "$gcrypt_libs" ; then
243dc2cf 2964 LIBS="$gcrypt_libs $LIBS"
a73e82ef
RH
2965 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2966 pass="yes"
2967 fi
2968 fi
2969 if test "$pass" = "yes"; then
2970 gcrypt="yes"
1f923c70
LM
2971 cat > $TMPC << EOF
2972#include <gcrypt.h>
2973int main(void) {
2974 gcry_mac_hd_t handle;
2975 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2976 GCRY_MAC_FLAG_SECURE, NULL);
2977 return 0;
2978}
2979EOF
2980 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2981 gcrypt_hmac=yes
2982 fi
e0576942
DB
2983 cat > $TMPC << EOF
2984#include <gcrypt.h>
2985int main(void) {
2986 gcry_cipher_hd_t handle;
2987 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
2988 return 0;
2989}
2990EOF
2991 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2992 gcrypt_xts=yes
2993 qemu_private_xts=no
2994 fi
a73e82ef
RH
2995 elif test "$gcrypt" = "yes"; then
2996 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
62893b67 2997 else
a73e82ef 2998 gcrypt="no"
62893b67
DB
2999 fi
3000fi
3001
ddbb0d09 3002
91bfcdb0
DB
3003if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3004then
3005 error_exit "Only one of gcrypt & nettle can be enabled"
3006fi
3007
9a2fd434
DB
3008##########################################
3009# libtasn1 - only for the TLS creds/session test suite
3010
3011tasn1=yes
90246037
DB
3012tasn1_cflags=""
3013tasn1_libs=""
9a2fd434 3014if $pkg_config --exists "libtasn1"; then
89138857
SW
3015 tasn1_cflags=$($pkg_config --cflags libtasn1)
3016 tasn1_libs=$($pkg_config --libs libtasn1)
9a2fd434
DB
3017else
3018 tasn1=no
3019fi
3020
ed754746 3021
8953caf3
DB
3022##########################################
3023# PAM probe
3024
3025if test "$auth_pam" != "no"; then
3026 cat > $TMPC <<EOF
3027#include <security/pam_appl.h>
3028#include <stdio.h>
3029int main(void) {
3030 const char *service_name = "qemu";
3031 const char *user = "frank";
9c9642d0 3032 const struct pam_conv pam_conv = { 0 };
8953caf3 3033 pam_handle_t *pamh = NULL;
9c9642d0 3034 pam_start(service_name, user, &pam_conv, &pamh);
8953caf3
DB
3035 return 0;
3036}
3037EOF
3038 if compile_prog "" "-lpam" ; then
3039 auth_pam=yes
3040 else
3041 if test "$auth_pam" = "yes"; then
3042 feature_not_found "PAM" "Install PAM development package"
3043 else
3044 auth_pam=no
3045 fi
3046 fi
3047fi
3048
559607ea
DB
3049##########################################
3050# getifaddrs (for tests/test-io-channel-socket )
3051
3052have_ifaddrs_h=yes
3053if ! check_include "ifaddrs.h" ; then
3054 have_ifaddrs_h=no
3055fi
3056
bbbf9bfb
SW
3057##########################################
3058# VTE probe
3059
3060if test "$vte" != "no"; then
89d85cde
DB
3061 vteminversion="0.32.0"
3062 if $pkg_config --exists "vte-2.91"; then
3063 vtepackage="vte-2.91"
528de90a 3064 else
89d85cde 3065 vtepackage="vte-2.90"
528de90a 3066 fi
c6feff9e 3067 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
89138857
SW
3068 vte_cflags=$($pkg_config --cflags $vtepackage)
3069 vte_libs=$($pkg_config --libs $vtepackage)
3070 vteversion=$($pkg_config --modversion $vtepackage)
bbbf9bfb
SW
3071 vte="yes"
3072 elif test "$vte" = "yes"; then
89d85cde 3073 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
0d185e63 3074 else
bbbf9bfb 3075 vte="no"
a4ccabcf
AL
3076 fi
3077fi
3078
11d9f695
FB
3079##########################################
3080# SDL probe
3081
aee8a619
CMAB
3082# Look for sdl configuration program (pkg-config or sdl2-config). Try
3083# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
47c03744 3084
c6093a05
PX
3085sdl_probe ()
3086{
0015ca5c
DB
3087 if $pkg_config sdl2 --exists; then
3088 sdlconfig="$pkg_config sdl2"
c6093a05 3089 sdlversion=$($sdlconfig --modversion 2>/dev/null)
aee8a619 3090 elif has "$sdl2_config"; then
0015ca5c 3091 sdlconfig="$sdl2_config"
c6093a05
PX
3092 sdlversion=$($sdlconfig --version)
3093 else
3094 if test "$sdl" = "yes" ; then
3095 feature_not_found "sdl" "Install SDL2-devel"
3096 fi
3097 sdl=no
3098 # no need to do the rest
3099 return
3100 fi
aee8a619 3101 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
c6093a05 3102 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
a0dfd8a4 3103 fi
11d9f695 3104
ac119f9d 3105 cat > $TMPC << EOF
11d9f695
FB
3106#include <SDL.h>
3107#undef main /* We don't want SDL to override our main() */
3108int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3109EOF
89138857 3110 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2ca5c430 3111 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
74f42e18 3112 if test "$static" = "yes" ; then
0015ca5c
DB
3113 if $pkg_config sdl2 --exists; then
3114 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
5f37e6d4
TH
3115 else
3116 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3117 fi
74f42e18 3118 else
89138857 3119 sdl_libs=$($sdlconfig --libs 2>/dev/null)
74f42e18 3120 fi
52166aa0 3121 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
0015ca5c 3122 sdl=yes
cd01b4a3 3123
67c274d3 3124 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
e633a5c6 3125 if test "$sdl" = "yes" && test "$static" = "yes" ; then
67c274d3 3126 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
89138857
SW
3127 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3128 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
ac119f9d 3129 fi
52166aa0 3130 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
ac119f9d
JQ
3131 :
3132 else
3133 sdl=no
3134 fi
3135 fi # static link
c4198157
JQ
3136 else # sdl not found
3137 if test "$sdl" = "yes" ; then
0015ca5c 3138 feature_not_found "sdl" "Install SDL2 devel"
c4198157
JQ
3139 fi
3140 sdl=no
ac119f9d 3141 fi # sdl compile test
c6093a05
PX
3142}
3143
a442fe2f
DB
3144sdl_image_probe ()
3145{
3146 if test "$sdl_image" != "no" ; then
3147 if $pkg_config SDL2_image --exists; then
3148 if test "$static" = "yes"; then
3149 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3150 else
3151 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3152 fi
3153 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3154 sdl_image=yes
3155
3156 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3157 sdl_libs="$sdl_libs $sdl_image_libs"
3158 else
3159 if test "$sdl_image" = "yes" ; then
3160 feature_not_found "sdl_image" "Install SDL Image devel"
3161 else
3162 sdl_image=no
3163 fi
3164 fi
3165 fi
3166}
3167
c6093a05
PX
3168if test "$sdl" != "no" ; then
3169 sdl_probe
a68551bc 3170fi
11d9f695 3171
a442fe2f
DB
3172if test "$sdl" = "yes" ; then
3173 sdl_image_probe
3174else
3175 if test "$sdl_image" = "yes"; then
3176 echo "warning: SDL Image requested, but SDL is not available, disabling"
3177 fi
3178 sdl_image=no
3179fi
3180
5368a422 3181if test "$sdl" = "yes" ; then
ac119f9d 3182 cat > $TMPC <<EOF
5368a422
AL
3183#include <SDL.h>
3184#if defined(SDL_VIDEO_DRIVER_X11)
3185#include <X11/XKBlib.h>
3186#else
3187#error No x11 support
3188#endif
3189int main(void) { return 0; }
3190EOF
f676c67e 3191 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
8781595b 3192 need_x11=yes
f676c67e
JW
3193 sdl_cflags="$sdl_cflags $x11_cflags"
3194 sdl_libs="$sdl_libs $x11_libs"
ac119f9d 3195 fi
5368a422
AL
3196fi
3197
2da776db
MH
3198##########################################
3199# RDMA needs OpenFabrics libraries
3200if test "$rdma" != "no" ; then
3201 cat > $TMPC <<EOF
3202#include <rdma/rdma_cma.h>
3203int main(void) { return 0; }
3204EOF
ef6d4ccd 3205 rdma_libs="-lrdmacm -libverbs -libumad"
2da776db
MH
3206 if compile_prog "" "$rdma_libs" ; then
3207 rdma="yes"
ef6d4ccd 3208 libs_softmmu="$libs_softmmu $rdma_libs"
2da776db
MH
3209 else
3210 if test "$rdma" = "yes" ; then
3211 error_exit \
ef6d4ccd 3212 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
2da776db 3213 " Your options:" \
ef6d4ccd 3214 " (1) Fast: Install infiniband packages (devel) from your distro." \
2da776db
MH
3215 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3216 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3217 fi
3218 rdma="no"
3219 fi
3220fi
3221
21ab34c9
MA
3222##########################################
3223# PVRDMA detection
3224
3225cat > $TMPC <<EOF &&
3226#include <sys/mman.h>
3227
3228int
3229main(void)
3230{
3231 char buf = 0;
3232 void *addr = &buf;
3233 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3234
3235 return 0;
3236}
3237EOF
3238
3239if test "$rdma" = "yes" ; then
3240 case "$pvrdma" in
3241 "")
3242 if compile_prog "" ""; then
3243 pvrdma="yes"
3244 else
3245 pvrdma="no"
3246 fi
3247 ;;
3248 "yes")
3249 if ! compile_prog "" ""; then
3250 error_exit "PVRDMA is not supported since mremap is not implemented"
3251 fi
3252 pvrdma="yes"
3253 ;;
3254 "no")
3255 pvrdma="no"
3256 ;;
3257 esac
3258else
3259 if test "$pvrdma" = "yes" ; then
3260 error_exit "PVRDMA requires rdma suppport"
3261 fi
3262 pvrdma="no"
3263fi
95c6bff3 3264
ee108585
YS
3265# Let's see if enhanced reg_mr is supported
3266if test "$pvrdma" = "yes" ; then
3267
3268cat > $TMPC <<EOF &&
3269#include <infiniband/verbs.h>
3270
3271int
3272main(void)
3273{
3274 struct ibv_mr *mr;
3275 struct ibv_pd *pd = NULL;
3276 size_t length = 10;
3277 uint64_t iova = 0;
3278 int access = 0;
3279 void *addr = NULL;
3280
3281 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3282
3283 ibv_dereg_mr(mr);
3284
3285 return 0;
3286}
3287EOF
3288 if ! compile_prog "" "-libverbs"; then
3289 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3290 fi
3291fi
3292
2f9606b3
AL
3293##########################################
3294# VNC SASL detection
e633a5c6 3295if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
ea784e3b 3296 cat > $TMPC <<EOF
2f9606b3
AL
3297#include <sasl/sasl.h>
3298#include <stdio.h>
3299int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3300EOF
ea784e3b
JQ
3301 # Assuming Cyrus-SASL installed in /usr prefix
3302 vnc_sasl_cflags=""
3303 vnc_sasl_libs="-lsasl2"
3304 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3305 vnc_sasl=yes
3306 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
ca273d58 3307 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
ea784e3b
JQ
3308 else
3309 if test "$vnc_sasl" = "yes" ; then
21684af0 3310 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2f9606b3 3311 fi
ea784e3b
JQ
3312 vnc_sasl=no
3313 fi
2f9606b3
AL
3314fi
3315
2f6f5c7a
CC
3316##########################################
3317# VNC JPEG detection
e633a5c6 3318if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
2f6f5c7a
CC
3319cat > $TMPC <<EOF
3320#include <stdio.h>
3321#include <jpeglib.h>
3322int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3323EOF
3324 vnc_jpeg_cflags=""
3325 vnc_jpeg_libs="-ljpeg"
3326 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3327 vnc_jpeg=yes
3328 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
ca273d58 3329 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2f6f5c7a
CC
3330 else
3331 if test "$vnc_jpeg" = "yes" ; then
21684af0 3332 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2f6f5c7a
CC
3333 fi
3334 vnc_jpeg=no
3335 fi
3336fi
3337
efe556ad
CC
3338##########################################
3339# VNC PNG detection
e633a5c6 3340if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
efe556ad
CC
3341cat > $TMPC <<EOF
3342//#include <stdio.h>
3343#include <png.h>
832ce9c2 3344#include <stddef.h>
efe556ad
CC
3345int main(void) {
3346 png_structp png_ptr;
3347 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
7edc3fed 3348 return png_ptr != 0;
efe556ad
CC
3349}
3350EOF
65d5d3f9 3351 if $pkg_config libpng --exists; then
89138857
SW
3352 vnc_png_cflags=$($pkg_config libpng --cflags)
3353 vnc_png_libs=$($pkg_config libpng --libs)
9af8025e 3354 else
efe556ad
CC
3355 vnc_png_cflags=""
3356 vnc_png_libs="-lpng"
9af8025e 3357 fi
efe556ad
CC
3358 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3359 vnc_png=yes
3360 libs_softmmu="$vnc_png_libs $libs_softmmu"
9af8025e 3361 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
efe556ad
CC
3362 else
3363 if test "$vnc_png" = "yes" ; then
21684af0 3364 feature_not_found "vnc-png" "Install libpng devel"
efe556ad
CC
3365 fi
3366 vnc_png=no
3367 fi
3368fi
3369
6a021536
GH
3370##########################################
3371# xkbcommon probe
3372if test "$xkbcommon" != "no" ; then
3373 if $pkg_config xkbcommon --exists; then
3374 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3375 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3376 xkbcommon=yes
3377 else
3378 if test "$xkbcommon" = "yes" ; then
3379 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3380 fi
3381 xkbcommon=no
3382 fi
3383fi
3384
76655d6d 3385
ee682d27 3386##########################################
c1bb86cd 3387# xfsctl() probe, used for file-posix.c
dce512de
CH
3388if test "$xfs" != "no" ; then
3389 cat > $TMPC << EOF
ffc41d10 3390#include <stddef.h> /* NULL */
dce512de
CH
3391#include <xfs/xfs.h>
3392int main(void)
3393{
3394 xfsctl(NULL, 0, 0, NULL);
3395 return 0;
3396}
3397EOF
3398 if compile_prog "" "" ; then
3399 xfs="yes"
3400 else
3401 if test "$xfs" = "yes" ; then
21684af0 3402 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
dce512de
CH
3403 fi
3404 xfs=no
3405 fi
3406fi
3407
8a16d273
TS
3408##########################################
3409# vde libraries probe
dfb278bd 3410if test "$vde" != "no" ; then
4baae0ac 3411 vde_libs="-lvdeplug"
8a16d273
TS
3412 cat > $TMPC << EOF
3413#include <libvdeplug.h>
4a7f0e06
PB
3414int main(void)
3415{
3416 struct vde_open_args a = {0, 0, 0};
fea08e08
PM
3417 char s[] = "";
3418 vde_open(s, s, &a);
4a7f0e06
PB
3419 return 0;
3420}
8a16d273 3421EOF
52166aa0 3422 if compile_prog "" "$vde_libs" ; then
4baae0ac 3423 vde=yes
dfb278bd
JQ
3424 else
3425 if test "$vde" = "yes" ; then
21684af0 3426 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
dfb278bd
JQ
3427 fi
3428 vde=no
4baae0ac 3429 fi
8a16d273
TS
3430fi
3431
58952137 3432##########################################
0a985b37
VM
3433# netmap support probe
3434# Apart from looking for netmap headers, we make sure that the host API version
3435# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3436# a minor/major version number. Minor new features will be marked with values up
3437# to 15, and if something happens that requires a change to the backend we will
3438# move above 15, submit the backend fixes and modify this two bounds.
58952137
VM
3439if test "$netmap" != "no" ; then
3440 cat > $TMPC << EOF
3441#include <inttypes.h>
3442#include <net/if.h>
3443#include <net/netmap.h>
3444#include <net/netmap_user.h>
0a985b37
VM
3445#if (NETMAP_API < 11) || (NETMAP_API > 15)
3446#error
3447#endif
58952137
VM
3448int main(void) { return 0; }
3449EOF
3450 if compile_prog "" "" ; then
3451 netmap=yes
3452 else
3453 if test "$netmap" = "yes" ; then
3454 feature_not_found "netmap"
3455 fi
3456 netmap=no
3457 fi
3458fi
3459
47e98658
CB
3460##########################################
3461# libcap-ng library probe
3462if test "$cap_ng" != "no" ; then
3463 cap_libs="-lcap-ng"
3464 cat > $TMPC << EOF
3465#include <cap-ng.h>
3466int main(void)
3467{
3468 capng_capability_to_name(CAPNG_EFFECTIVE);
3469 return 0;
3470}
3471EOF
3472 if compile_prog "" "$cap_libs" ; then
3473 cap_ng=yes
3474 libs_tools="$cap_libs $libs_tools"
3475 else
3476 if test "$cap_ng" = "yes" ; then
21684af0 3477 feature_not_found "cap_ng" "Install libcap-ng devel"
47e98658
CB
3478 fi
3479 cap_ng=no
3480 fi
3481fi
3482
8f28f3fb 3483##########################################
c2de5c91 3484# Sound support libraries probe
8f28f3fb 3485
89138857 3486audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
c2de5c91 3487for drv in $audio_drv_list; do
3488 case $drv in
e42975a1 3489 alsa | try-alsa)
c80a867f
GH
3490 if $pkg_config alsa --exists; then
3491 alsa_libs=$($pkg_config alsa --libs)
e42975a1
GH
3492 if test "$drv" = "try-alsa"; then
3493 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3494 fi
c80a867f 3495 else
e42975a1
GH
3496 if test "$drv" = "try-alsa"; then
3497 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3498 else
3499 error_exit "$drv check failed" \
3500 "Make sure to have the $drv libs and headers installed."
3501 fi
c80a867f 3502 fi
c2de5c91 3503 ;;
3504
e42975a1 3505 pa | try-pa)
c80a867f
GH
3506 if $pkg_config libpulse --exists; then
3507 pulse_libs=$($pkg_config libpulse --libs)
e42975a1
GH
3508 if test "$drv" = "try-pa"; then
3509 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3510 fi
c80a867f 3511 else
e42975a1
GH
3512 if test "$drv" = "try-pa"; then
3513 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3514 else
3515 error_exit "$drv check failed" \
3516 "Make sure to have the $drv libs and headers installed."
3517 fi
c80a867f 3518 fi
b8e59f18 3519 ;;
3520
373967b2
GH
3521 sdl)
3522 if test "$sdl" = "no"; then
3523 error_exit "sdl not found or disabled, can not use sdl audio driver"
3524 fi
3525 ;;
3526
e42975a1
GH
3527 try-sdl)
3528 if test "$sdl" = "no"; then
3529 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3530 else
3531 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3532 fi
3533 ;;
3534
997e690a 3535 coreaudio)
b1149911 3536 coreaudio_libs="-framework CoreAudio"
997e690a
JQ
3537 ;;
3538
a4bf6780 3539 dsound)
b1149911 3540 dsound_libs="-lole32 -ldxguid"
d5631638 3541 audio_win_int="yes"
a4bf6780
JQ
3542 ;;
3543
3544 oss)
b1149911 3545 oss_libs="$oss_lib"
a4bf6780
JQ
3546 ;;
3547
e4c63a6a 3548 *)
1c9b2a52 3549 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
76ad07a4
PM
3550 error_exit "Unknown driver '$drv' selected" \
3551 "Possible drivers are: $audio_possible_drivers"
e4c63a6a 3552 }
3553 ;;
c2de5c91 3554 esac
3555done
8f28f3fb 3556
2e4d9fb1
AJ
3557##########################################
3558# BrlAPI probe
3559
4ffcedb6 3560if test "$brlapi" != "no" ; then
eb82284f
JQ
3561 brlapi_libs="-lbrlapi"
3562 cat > $TMPC << EOF
2e4d9fb1 3563#include <brlapi.h>
832ce9c2 3564#include <stddef.h>
2e4d9fb1
AJ
3565int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3566EOF
52166aa0 3567 if compile_prog "" "$brlapi_libs" ; then
eb82284f 3568 brlapi=yes
4ffcedb6
JQ
3569 else
3570 if test "$brlapi" = "yes" ; then
21684af0 3571 feature_not_found "brlapi" "Install brlapi devel"
4ffcedb6
JQ
3572 fi
3573 brlapi=no
eb82284f
JQ
3574 fi
3575fi
2e4d9fb1 3576
e08bb301
ST
3577##########################################
3578# iconv probe
3579if test "$iconv" != "no" ; then
3580 cat > $TMPC << EOF
3581#include <iconv.h>
3582int main(void) {
3583 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3584 return conv != (iconv_t) -1;
3585}
3586EOF
3587 iconv_prefix_list="/usr/local:/usr"
3588 iconv_lib_list=":-liconv"
3589 IFS=:
3590 for iconv_prefix in $iconv_prefix_list; do
3591 IFS=:
3592 iconv_cflags="-I$iconv_prefix/include"
3593 iconv_ldflags="-L$iconv_prefix/lib"
3594 for iconv_link in $iconv_lib_list; do
3595 unset IFS
3596 iconv_lib="$iconv_ldflags $iconv_link"
3597 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3598 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3599 iconv_found=yes
3600 break
3601 fi
3602 done
3603 if test "$iconv_found" = yes ; then
3604 break
3605 fi
3606 done
3607 if test "$iconv_found" = "yes" ; then
3608 iconv=yes
3609 else
3610 if test "$iconv" = "yes" ; then
3611 feature_not_found "iconv" "Install iconv devel"
3612 fi
3613 iconv=no
3614 fi
3615fi
3616
4d3b6f6e
AZ
3617##########################################
3618# curses probe
e08bb301
ST
3619if test "$iconv" = "no" ; then
3620 # curses will need iconv
3621 curses=no
3622fi
a3605bf6
MT
3623if test "$curses" != "no" ; then
3624 if test "$mingw32" = "yes" ; then
8ddc5bf9
ST
3625 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3626 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
a3605bf6 3627 else
7c703002 3628 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
8ddc5bf9 3629 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
a3605bf6 3630 fi
c584a6d0 3631 curses_found=no
4d3b6f6e 3632 cat > $TMPC << EOF
8ddc5bf9 3633#include <locale.h>
4d3b6f6e 3634#include <curses.h>
8ddc5bf9 3635#include <wchar.h>
2f8b7cd5 3636#include <langinfo.h>
ef9a2524 3637int main(void) {
2f8b7cd5 3638 const char *codeset;
8ddc5bf9
ST
3639 wchar_t wch = L'w';
3640 setlocale(LC_ALL, "");
ef9a2524 3641 resize_term(0, 0);
8ddc5bf9
ST
3642 addwstr(L"wide chars\n");
3643 addnwstr(&wch, 1);
7c703002 3644 add_wch(WACS_DEGREE);
2f8b7cd5
ST
3645 codeset = nl_langinfo(CODESET);
3646 return codeset != 0;
ef9a2524 3647}
4d3b6f6e 3648EOF
ecbe251f 3649 IFS=:
8ddc5bf9 3650 for curses_inc in $curses_inc_list; do
b01a4fd3
PM
3651 # Make sure we get the wide character prototypes
3652 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
7c703002 3653 IFS=:
8ddc5bf9
ST
3654 for curses_lib in $curses_lib_list; do
3655 unset IFS
3656 if compile_prog "$curses_inc" "$curses_lib" ; then
3657 curses_found=yes
8ddc5bf9
ST
3658 break
3659 fi
3660 done
7c703002
ST
3661 if test "$curses_found" = yes ; then
3662 break
3663 fi
4f78ef9a 3664 done
ecbe251f 3665 unset IFS
c584a6d0
JQ
3666 if test "$curses_found" = "yes" ; then
3667 curses=yes
3668 else
3669 if test "$curses" = "yes" ; then
21684af0 3670 feature_not_found "curses" "Install ncurses devel"
c584a6d0
JQ
3671 fi
3672 curses=no
3673 fi
4f78ef9a 3674fi
4d3b6f6e 3675
769ce76d
AG
3676##########################################
3677# curl probe
788c8196 3678if test "$curl" != "no" ; then
65d5d3f9 3679 if $pkg_config libcurl --exists; then
a3605bf6
MT
3680 curlconfig="$pkg_config libcurl"
3681 else
3682 curlconfig=curl-config
3683 fi
769ce76d
AG
3684 cat > $TMPC << EOF
3685#include <curl/curl.h>
0b862ced 3686int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
769ce76d 3687EOF
89138857
SW
3688 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3689 curl_libs=$($curlconfig --libs 2>/dev/null)
b1d5a277 3690 if compile_prog "$curl_cflags" "$curl_libs" ; then
769ce76d 3691 curl=yes
788c8196
JQ
3692 else
3693 if test "$curl" = "yes" ; then
21684af0 3694 feature_not_found "curl" "Install libcurl devel"
788c8196
JQ
3695 fi
3696 curl=no
769ce76d
AG
3697 fi
3698fi # test "$curl"
3699
e18df141
AL
3700##########################################
3701# glib support probe
a52d28af 3702
00f2cfbb 3703glib_req_ver=2.48
aa0d1f44
PB
3704glib_modules=gthread-2.0
3705if test "$modules" = yes; then
a88afc64 3706 glib_modules="$glib_modules gmodule-export-2.0"
aa0d1f44 3707fi
54cb65d8
EC
3708if test "$plugins" = yes; then
3709 glib_modules="$glib_modules gmodule-2.0"
3710fi
e26110cf 3711
4eaf7202
SJ
3712# This workaround is required due to a bug in pkg-config file for glib as it
3713# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3714
e633a5c6 3715if test "$static" = yes && test "$mingw32" = yes; then
4eaf7202
SJ
3716 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3717fi
3718
aa0d1f44 3719for i in $glib_modules; do
e26110cf 3720 if $pkg_config --atleast-version=$glib_req_ver $i; then
89138857
SW
3721 glib_cflags=$($pkg_config --cflags $i)
3722 glib_libs=$($pkg_config --libs $i)
4a058899 3723 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
e26110cf
FZ
3724 LIBS="$glib_libs $LIBS"
3725 libs_qga="$glib_libs $libs_qga"
3726 else
3727 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3728 fi
3729done
3730
f876b765
MAL
3731if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3732 gio=yes
3733 gio_cflags=$($pkg_config --cflags gio-2.0)
3734 gio_libs=$($pkg_config --libs gio-2.0)
25a97a56 3735 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
0dba4897
MAL
3736 if [ ! -x "$gdbus_codegen" ]; then
3737 gdbus_codegen=
3738 fi
f876b765
MAL
3739else
3740 gio=no
3741fi
3742
25a97a56
MAL
3743if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3744 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3745 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3746fi
3747
977a82ab
DB
3748# Sanity check that the current size_t matches the
3749# size that glib thinks it should be. This catches
3750# problems on multi-arch where people try to build
3751# 32-bit QEMU while pointing at 64-bit glib headers
3752cat > $TMPC <<EOF
3753#include <glib.h>
3754#include <unistd.h>
3755
3756#define QEMU_BUILD_BUG_ON(x) \
3757 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3758
3759int main(void) {
3760 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3761 return 0;
3762}
3763EOF
3764
5919e032 3765if ! compile_prog "$CFLAGS" "$LIBS" ; then
977a82ab
DB
3766 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3767 "You probably need to set PKG_CONFIG_LIBDIR"\
3768 "to point to the right pkg-config files for your"\
3769 "build target"
3770fi
3771
bbbf2e04
JS
3772# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3773cat > $TMPC << EOF
3774#include <glib.h>
3775int main(void) { return 0; }
3776EOF
3777if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3778 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3779 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3780 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3781 fi
3782fi
3783
6a1f42bd
SW
3784#########################################
3785# zlib check
3786
3787if test "$zlib" != "no" ; then
3788 if $pkg_config --exists zlib; then
3789 zlib_cflags=$($pkg_config --cflags zlib)
3790 zlib_libs=$($pkg_config --libs zlib)
3791 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3792 LIBS="$zlib_libs $LIBS"
3793 else
3794 cat > $TMPC << EOF
3795#include <zlib.h>
3796int main(void) { zlibVersion(); return 0; }
3797EOF
3798 if compile_prog "" "-lz" ; then
3799 LIBS="$LIBS -lz"
3800 else
3801 error_exit "zlib check failed" \
3802 "Make sure to have the zlib libs and headers installed."
3803 fi
3804 fi
3805fi
3806
e26110cf
FZ
3807##########################################
3808# SHA command probe for modules
3809if test "$modules" = yes; then
3810 shacmd_probe="sha1sum sha1 shasum"
3811 for c in $shacmd_probe; do
8ccefb91 3812 if has $c; then
e26110cf
FZ
3813 shacmd="$c"
3814 break
3815 fi
3816 done
3817 if test "$shacmd" = ""; then
3818 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3819 fi
e18df141
AL
3820fi
3821
e2134eb9
GH
3822##########################################
3823# pixman support probe
3824
e633a5c6 3825if test "$want_tools" = "no" && test "$softmmu" = "no"; then
74880fe2
RS
3826 pixman_cflags=
3827 pixman_libs=
35c4e86c 3828elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
89138857
SW
3829 pixman_cflags=$($pkg_config --cflags pixman-1)
3830 pixman_libs=$($pkg_config --libs pixman-1)
e2134eb9 3831else
c12b6d70
GH
3832 error_exit "pixman >= 0.21.8 not present." \
3833 "Please install the pixman devel package."
e2134eb9 3834fi
e2134eb9 3835
fe8fc5ae
PB
3836##########################################
3837# libmpathpersist probe
3838
3839if test "$mpath" != "no" ; then
1b0578f5 3840 # probe for the new API
fe8fc5ae
PB
3841 cat > $TMPC <<EOF
3842#include <libudev.h>
3843#include <mpath_persist.h>
3844unsigned mpath_mx_alloc_len = 1024;
3845int logsink;
b3f1c8c4
PB
3846static struct config *multipath_conf;
3847extern struct udev *udev;
3848extern struct config *get_multipath_config(void);
3849extern void put_multipath_config(struct config *conf);
3850struct udev *udev;
3851struct config *get_multipath_config(void) { return multipath_conf; }
3852void put_multipath_config(struct config *conf) { }
3853
fe8fc5ae 3854int main(void) {
b3f1c8c4
PB
3855 udev = udev_new();
3856 multipath_conf = mpath_lib_init();
fe8fc5ae
PB
3857 return 0;
3858}
3859EOF
3860 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3861 mpathpersist=yes
1b0578f5 3862 mpathpersist_new_api=yes
fe8fc5ae 3863 else
1b0578f5
MOA
3864 # probe for the old API
3865 cat > $TMPC <<EOF
3866#include <libudev.h>
3867#include <mpath_persist.h>
3868unsigned mpath_mx_alloc_len = 1024;
3869int logsink;
3870int main(void) {
3871 struct udev *udev = udev_new();
3872 mpath_lib_init(udev);
3873 return 0;
3874}
3875EOF
3876 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3877 mpathpersist=yes
3878 mpathpersist_new_api=no
3879 else
3880 mpathpersist=no
3881 fi
fe8fc5ae
PB
3882 fi
3883else
3884 mpathpersist=no
3885fi
3886
414f0dab 3887##########################################
e5d355d1 3888# pthread probe
4b29ec41 3889PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3c529d93 3890
4dd75c70 3891pthread=no
e5d355d1 3892cat > $TMPC << EOF
3c529d93 3893#include <pthread.h>
7a42bbe4
SW
3894static void *f(void *p) { return NULL; }
3895int main(void) {
3896 pthread_t thread;
3897 pthread_create(&thread, 0, f, 0);
3898 return 0;
3899}
414f0dab 3900EOF
bd00d539
AF
3901if compile_prog "" "" ; then
3902 pthread=yes
3903else
3904 for pthread_lib in $PTHREADLIBS_LIST; do
3905 if compile_prog "" "$pthread_lib" ; then
3906 pthread=yes
e3c56761
PP
3907 found=no
3908 for lib_entry in $LIBS; do
3909 if test "$lib_entry" = "$pthread_lib"; then
3910 found=yes
3911 break
3912 fi
3913 done
3914 if test "$found" = "no"; then
3915 LIBS="$pthread_lib $LIBS"
14ab3aa7 3916 libs_qga="$pthread_lib $libs_qga"
e3c56761 3917 fi
409437e1 3918 PTHREAD_LIB="$pthread_lib"
bd00d539
AF
3919 break
3920 fi
3921 done
3922fi
414f0dab 3923
e633a5c6 3924if test "$mingw32" != yes && test "$pthread" = no; then
76ad07a4
PM
3925 error_exit "pthread check failed" \
3926 "Make sure to have the pthread libs and headers installed."
e5d355d1
AL
3927fi
3928
479a5747
RB
3929# check for pthread_setname_np with thread id
3930pthread_setname_np_w_tid=no
5c312079
DDAG
3931cat > $TMPC << EOF
3932#include <pthread.h>
3933
3934static void *f(void *p) { return NULL; }
3935int main(void)
3936{
3937 pthread_t thread;
3938 pthread_create(&thread, 0, f, 0);
3939 pthread_setname_np(thread, "QEMU");
3940 return 0;
3941}
3942EOF
3943if compile_prog "" "$pthread_lib" ; then
479a5747
RB
3944 pthread_setname_np_w_tid=yes
3945fi
3946
3947# check for pthread_setname_np without thread id
3948pthread_setname_np_wo_tid=no
3949cat > $TMPC << EOF
3950#include <pthread.h>
3951
3952static void *f(void *p) { pthread_setname_np("QEMU"); }
3953int main(void)
3954{
3955 pthread_t thread;
3956 pthread_create(&thread, 0, f, 0);
3957 return 0;
3958}
3959EOF
3960if compile_prog "" "$pthread_lib" ; then
3961 pthread_setname_np_wo_tid=yes
5c312079
DDAG
3962fi
3963
f27aaf4b
CB
3964##########################################
3965# rbd probe
3966if test "$rbd" != "no" ; then
3967 cat > $TMPC <<EOF
3968#include <stdio.h>
ad32e9c0 3969#include <rbd/librbd.h>
f27aaf4b 3970int main(void) {
ad32e9c0
JD
3971 rados_t cluster;
3972 rados_create(&cluster, NULL);
f27aaf4b
CB
3973 return 0;
3974}
3975EOF
ad32e9c0
JD
3976 rbd_libs="-lrbd -lrados"
3977 if compile_prog "" "$rbd_libs" ; then
3978 rbd=yes
f27aaf4b
CB
3979 else
3980 if test "$rbd" = "yes" ; then
21684af0 3981 feature_not_found "rados block device" "Install librbd/ceph devel"
f27aaf4b
CB
3982 fi
3983 rbd=no
3984 fi
f27aaf4b
CB
3985fi
3986
0a12ec87 3987##########################################
b10d49d7
PT
3988# libssh probe
3989if test "$libssh" != "no" ; then
3990 if $pkg_config --exists libssh; then
3991 libssh_cflags=$($pkg_config libssh --cflags)
3992 libssh_libs=$($pkg_config libssh --libs)
3993 libssh=yes
0a12ec87 3994 else
b10d49d7
PT
3995 if test "$libssh" = "yes" ; then
3996 error_exit "libssh required for --enable-libssh"
0a12ec87 3997 fi
b10d49d7 3998 libssh=no
0a12ec87
RJ
3999 fi
4000fi
4001
9a2d462e 4002##########################################
b10d49d7
PT
4003# Check for libssh 0.8
4004# This is done like this instead of using the LIBSSH_VERSION_* and
4005# SSH_VERSION_* macros because some distributions in the past shipped
4006# snapshots of the future 0.8 from Git, and those snapshots did not
4007# have updated version numbers (still referring to 0.7.0).
9a2d462e 4008
b10d49d7 4009if test "$libssh" = "yes"; then
9a2d462e 4010 cat > $TMPC <<EOF
b10d49d7
PT
4011#include <libssh/libssh.h>
4012int main(void) { return ssh_get_server_publickey(NULL, NULL); }
9a2d462e 4013EOF
b10d49d7
PT
4014 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4015 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
9a2d462e
RJ
4016 fi
4017fi
4018
5c6c3a6c
CH
4019##########################################
4020# linux-aio probe
5c6c3a6c
CH
4021
4022if test "$linux_aio" != "no" ; then
4023 cat > $TMPC <<EOF
4024#include <libaio.h>
4025#include <sys/eventfd.h>
832ce9c2 4026#include <stddef.h>
5c6c3a6c
CH
4027int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4028EOF
4029 if compile_prog "" "-laio" ; then
4030 linux_aio=yes
5c6c3a6c
CH
4031 else
4032 if test "$linux_aio" = "yes" ; then
21684af0 4033 feature_not_found "linux AIO" "Install libaio devel"
5c6c3a6c 4034 fi
3cfcae3c 4035 linux_aio=no
5c6c3a6c
CH
4036 fi
4037fi
c10dd856
AM
4038##########################################
4039# linux-io-uring probe
4040
4041if test "$linux_io_uring" != "no" ; then
4042 if $pkg_config liburing; then
4043 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4044 linux_io_uring_libs=$($pkg_config --libs liburing)
4045 linux_io_uring=yes
4046 else
4047 if test "$linux_io_uring" = "yes" ; then
4048 feature_not_found "linux io_uring" "Install liburing devel"
4049 fi
4050 linux_io_uring=no
4051 fi
4052fi
5c6c3a6c 4053
3b8acc11 4054##########################################
7aaa6a16 4055# TPM emulation is only on POSIX
3b8acc11 4056
7aaa6a16
PB
4057if test "$tpm" = ""; then
4058 if test "$mingw32" = "yes"; then
4059 tpm=no
4060 else
4061 tpm=yes
4062 fi
4063elif test "$tpm" = "yes"; then
4064 if test "$mingw32" = "yes" ; then
4065 error_exit "TPM emulation only available on POSIX systems"
4066 fi
3b8acc11
PB
4067fi
4068
758e8e38
VJ
4069##########################################
4070# attr probe
4071
4072if test "$attr" != "no" ; then
4073 cat > $TMPC <<EOF
4074#include <stdio.h>
4075#include <sys/types.h>
f2338fb4
PB
4076#ifdef CONFIG_LIBATTR
4077#include <attr/xattr.h>
4078#else
4f26f2b6 4079#include <sys/xattr.h>
f2338fb4 4080#endif
758e8e38
VJ
4081int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4082EOF
4f26f2b6
AK
4083 if compile_prog "" "" ; then
4084 attr=yes
4085 # Older distros have <attr/xattr.h>, and need -lattr:
f2338fb4 4086 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
758e8e38
VJ
4087 attr=yes
4088 LIBS="-lattr $LIBS"
4f26f2b6 4089 libattr=yes
758e8e38
VJ
4090 else
4091 if test "$attr" = "yes" ; then
21684af0 4092 feature_not_found "ATTR" "Install libc6 or libattr devel"
758e8e38
VJ
4093 fi
4094 attr=no
4095 fi
4096fi
4097
bf9298b9
AL
4098##########################################
4099# iovec probe
4100cat > $TMPC <<EOF
db34f0b3 4101#include <sys/types.h>
bf9298b9 4102#include <sys/uio.h>
db34f0b3 4103#include <unistd.h>
f91f9bee 4104int main(void) { return sizeof(struct iovec); }
bf9298b9
AL
4105EOF
4106iovec=no
52166aa0 4107if compile_prog "" "" ; then
bf9298b9
AL
4108 iovec=yes
4109fi
4110
ceb42de8
AL
4111##########################################
4112# preadv probe
4113cat > $TMPC <<EOF
4114#include <sys/types.h>
4115#include <sys/uio.h>
4116#include <unistd.h>
c075a723 4117int main(void) { return preadv(0, 0, 0, 0); }
ceb42de8
AL
4118EOF
4119preadv=no
52166aa0 4120if compile_prog "" "" ; then
ceb42de8
AL
4121 preadv=yes
4122fi
4123
f652e6af
AJ
4124##########################################
4125# fdt probe
e169e1e1
PM
4126# fdt support is mandatory for at least some target architectures,
4127# so insist on it if we're building those system emulators.
4128fdt_required=no
4129for target in $target_list; do
4130 case $target in
a666409f 4131 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
e169e1e1
PM
4132 fdt_required=yes
4133 ;;
4134 esac
4135done
4136
4137if test "$fdt_required" = "yes"; then
4138 if test "$fdt" = "no"; then
4139 error_exit "fdt disabled but some requested targets require it." \
4140 "You can turn off fdt only if you also disable all the system emulation" \
4141 "targets which need it (by specifying a cut down --target-list)."
4142 fi
4143 fdt=yes
7ba4a4d3
PMD
4144elif test "$fdt" != "yes" ; then
4145 fdt=no
e169e1e1
PM
4146fi
4147
d599938a
LV
4148# fdt is only required when building softmmu targets
4149if test -z "$fdt" -a "$softmmu" != "yes" ; then
4150 fdt="no"
4151fi
4152
2df87df7 4153if test "$fdt" != "no" ; then
b41af4ba 4154 fdt_libs="-lfdt"
96ce6545 4155 # explicitly check for libfdt_env.h as it is missing in some stable installs
6e85fce0 4156 # and test for required functions to make sure we are on a version >= 1.4.2
b41af4ba 4157 cat > $TMPC << EOF
31ce0adb 4158#include <libfdt.h>
96ce6545 4159#include <libfdt_env.h>
fea35ca4 4160int main(void) { fdt_check_full(NULL, 0); return 0; }
f652e6af 4161EOF
52166aa0 4162 if compile_prog "" "$fdt_libs" ; then
a540f158 4163 # system DTC is good - use it
e3971d61 4164 fdt=system
a540f158 4165 else
aef45d51
DB
4166 # have GIT checkout, so activate dtc submodule
4167 if test -e "${source_path}/.git" ; then
4168 git_submodules="${git_submodules} dtc"
4169 fi
4170 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
e3971d61 4171 fdt=git
aef45d51
DB
4172 mkdir -p dtc
4173 if [ "$pwd_is_source_path" != "y" ] ; then
4174 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4175 symlink "$source_path/dtc/scripts" "dtc/scripts"
4176 fi
4177 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
8a99e9a3
PMD
4178 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4179 fdt_libs="$fdt_libs"
aef45d51
DB
4180 elif test "$fdt" = "yes" ; then
4181 # Not a git build & no libfdt found, prompt for system install
4182 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4183 "Please install the DTC (libfdt) devel package"
4184 else
4185 # don't have and don't want
4186 fdt_libs=
4187 fdt=no
4188 fi
f652e6af
AJ
4189 fi
4190fi
4191
a540f158
PC
4192libs_softmmu="$libs_softmmu $fdt_libs"
4193
20ff075b 4194##########################################
fb719563 4195# opengl probe (for sdl2, gtk, milkymist-tmu2)
b1546f32 4196
d52c454a
MAL
4197gbm="no"
4198if $pkg_config gbm; then
4199 gbm_cflags="$($pkg_config --cflags gbm)"
4200 gbm_libs="$($pkg_config --libs gbm)"
4201 gbm="yes"
4202fi
4203
da076ffe 4204if test "$opengl" != "no" ; then
4939a1df 4205 opengl_pkgs="epoxy gbm"
5f9b1e35
GH
4206 if $pkg_config $opengl_pkgs; then
4207 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4208 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
da076ffe 4209 opengl=yes
925a0400
GH
4210 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4211 gtk_gl="yes"
4212 fi
cc720a5d 4213 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
20ff075b 4214 else
da076ffe 4215 if test "$opengl" = "yes" ; then
dcf30025 4216 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
20ff075b 4217 fi
f676c67e 4218 opengl_cflags=""
da076ffe
GH
4219 opengl_libs=""
4220 opengl=no
20ff075b
MW
4221 fi
4222fi
4223
014cb152
GH
4224if test "$opengl" = "yes"; then
4225 cat > $TMPC << EOF
4226#include <epoxy/egl.h>
4227#ifndef EGL_MESA_image_dma_buf_export
4228# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4229#endif
4230int main(void) { return 0; }
4231EOF
4232 if compile_prog "" "" ; then
4233 opengl_dmabuf=yes
4234 fi
4235fi
c9a12e75 4236
e633a5c6 4237if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
99e1a93b
PMD
4238 for target in $target_list; do
4239 case $target in
4240 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4241 need_x11=yes
4242 ;;
4243 esac
4244 done
4245fi
4246
ed279a06
KK
4247##########################################
4248# libxml2 probe
4249if test "$libxml2" != "no" ; then
4250 if $pkg_config --exists libxml-2.0; then
4251 libxml2="yes"
4252 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4253 libxml2_libs=$($pkg_config --libs libxml-2.0)
4254 else
4255 if test "$libxml2" = "yes"; then
4256 feature_not_found "libxml2" "Install libxml2 devel"
4257 fi
4258 libxml2="no"
4259 fi
4260fi
c9a12e75 4261
eb100396
BR
4262##########################################
4263# glusterfs probe
4264if test "$glusterfs" != "no" ; then
65d5d3f9 4265 if $pkg_config --atleast-version=3 glusterfs-api; then
e01bee08 4266 glusterfs="yes"
89138857
SW
4267 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4268 glusterfs_libs=$($pkg_config --libs glusterfs-api)
d85fa9eb
JC
4269 if $pkg_config --atleast-version=4 glusterfs-api; then
4270 glusterfs_xlator_opt="yes"
4271 fi
65d5d3f9 4272 if $pkg_config --atleast-version=5 glusterfs-api; then
0c14fb47
BR
4273 glusterfs_discard="yes"
4274 fi
7c815372 4275 if $pkg_config --atleast-version=6 glusterfs-api; then
df3a429a 4276 glusterfs_fallocate="yes"
7c815372
BR
4277 glusterfs_zerofill="yes"
4278 fi
e014dbe7
PKK
4279 cat > $TMPC << EOF
4280#include <glusterfs/api/glfs.h>
4281
4282int
4283main(void)
4284{
4285 /* new glfs_ftruncate() passes two additional args */
4286 return glfs_ftruncate(NULL, 0, NULL, NULL);
4287}
4288EOF
4289 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4290 glusterfs_ftruncate_has_stat="yes"
4291 fi
0e3b891f
NV
4292 cat > $TMPC << EOF
4293#include <glusterfs/api/glfs.h>
4294
4295/* new glfs_io_cbk() passes two additional glfs_stat structs */
4296static void
4297glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4298{}
4299
4300int
4301main(void)
4302{
4303 glfs_io_cbk iocb = &glusterfs_iocb;
4304 iocb(NULL, 0 , NULL, NULL, NULL);
4305 return 0;
4306}
4307EOF
4308 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4309 glusterfs_iocb_has_stat="yes"
4310 fi
eb100396
BR
4311 else
4312 if test "$glusterfs" = "yes" ; then
8efc9363
HT
4313 feature_not_found "GlusterFS backend support" \
4314 "Install glusterfs-api devel >= 3"
eb100396 4315 fi
e01bee08 4316 glusterfs="no"
eb100396
BR
4317 fi
4318fi
4319
39386ac7 4320# Check for inotify functions when we are building linux-user
3b3f24ad
AJ
4321# emulator. This is done because older glibc versions don't
4322# have syscall stubs for these implemented. In that case we
4323# don't provide them even if kernel supports them.
4324#
4325inotify=no
67ba57f6 4326cat > $TMPC << EOF
3b3f24ad
AJ
4327#include <sys/inotify.h>
4328
4329int
4330main(void)
4331{
4332 /* try to start inotify */
8690e420 4333 return inotify_init();
3b3f24ad
AJ
4334}
4335EOF
52166aa0 4336if compile_prog "" "" ; then
67ba57f6 4337 inotify=yes
3b3f24ad
AJ
4338fi
4339
c05c7a73
RV
4340inotify1=no
4341cat > $TMPC << EOF
4342#include <sys/inotify.h>
4343
4344int
4345main(void)
4346{
4347 /* try to start inotify */
4348 return inotify_init1(0);
4349}
4350EOF
4351if compile_prog "" "" ; then
4352 inotify1=yes
4353fi
4354
099d6b0f
RV
4355# check if pipe2 is there
4356pipe2=no
4357cat > $TMPC << EOF
099d6b0f
RV
4358#include <unistd.h>
4359#include <fcntl.h>
4360
4361int main(void)
4362{
4363 int pipefd[2];
9bca8162 4364 return pipe2(pipefd, O_CLOEXEC);
099d6b0f
RV
4365}
4366EOF
52166aa0 4367if compile_prog "" "" ; then
099d6b0f
RV
4368 pipe2=yes
4369fi
4370
40ff6d7e
KW
4371# check if accept4 is there
4372accept4=no
4373cat > $TMPC << EOF
40ff6d7e
KW
4374#include <sys/socket.h>
4375#include <stddef.h>
4376
4377int main(void)
4378{
4379 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4380 return 0;
4381}
4382EOF
4383if compile_prog "" "" ; then
4384 accept4=yes
4385fi
4386
3ce34dfb
VS
4387# check if tee/splice is there. vmsplice was added same time.
4388splice=no
4389cat > $TMPC << EOF
3ce34dfb
VS
4390#include <unistd.h>
4391#include <fcntl.h>
4392#include <limits.h>
4393
4394int main(void)
4395{
66ea0f22 4396 int len, fd = 0;
3ce34dfb
VS
4397 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4398 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4399 return 0;
4400}
4401EOF
52166aa0 4402if compile_prog "" "" ; then
3ce34dfb
VS
4403 splice=yes
4404fi
4405
a99d57bb
WG
4406##########################################
4407# libnuma probe
4408
4409if test "$numa" != "no" ; then
4410 cat > $TMPC << EOF
4411#include <numa.h>
4412int main(void) { return numa_available(); }
4413EOF
4414
4415 if compile_prog "" "-lnuma" ; then
4416 numa=yes
4417 libs_softmmu="-lnuma $libs_softmmu"
4418 else
4419 if test "$numa" = "yes" ; then
4420 feature_not_found "numa" "install numactl devel"
4421 fi
4422 numa=no
4423 fi
4424fi
4425
7b01cb97
AD
4426if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4427 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4428 exit 1
4429fi
4430
5a22ab71
YZ
4431# Even if malloc_trim() is available, these non-libc memory allocators
4432# do not support it.
4433if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4434 if test "$malloc_trim" = "yes" ; then
4435 echo "Disabling malloc_trim with non-libc memory allocator"
4436 fi
4437 malloc_trim="no"
4438fi
4439
4440#######################################
4441# malloc_trim
4442
4443if test "$malloc_trim" != "no" ; then
4444 cat > $TMPC << EOF
4445#include <malloc.h>
4446int main(void) { malloc_trim(0); return 0; }
4447EOF
4448 if compile_prog "" "" ; then
4449 malloc_trim="yes"
4450 else
4451 malloc_trim="no"
4452 fi
4453fi
4454
2847b469
FZ
4455##########################################
4456# tcmalloc probe
4457
4458if test "$tcmalloc" = "yes" ; then
4459 cat > $TMPC << EOF
4460#include <stdlib.h>
4461int main(void) { malloc(1); return 0; }
4462EOF
4463
4464 if compile_prog "" "-ltcmalloc" ; then
4465 LIBS="-ltcmalloc $LIBS"
4466 else
4467 feature_not_found "tcmalloc" "install gperftools devel"
4468 fi
4469fi
4470
7b01cb97
AD
4471##########################################
4472# jemalloc probe
4473
4474if test "$jemalloc" = "yes" ; then
4475 cat > $TMPC << EOF
4476#include <stdlib.h>
4477int main(void) { malloc(1); return 0; }
4478EOF
4479
4480 if compile_prog "" "-ljemalloc" ; then
4481 LIBS="-ljemalloc $LIBS"
4482 else
4483 feature_not_found "jemalloc" "install jemalloc devel"
4484 fi
4485fi
4486
dcc38d1c
MT
4487##########################################
4488# signalfd probe
4489signalfd="no"
4490cat > $TMPC << EOF
dcc38d1c
MT
4491#include <unistd.h>
4492#include <sys/syscall.h>
4493#include <signal.h>
4494int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4495EOF
4496
4497if compile_prog "" "" ; then
4498 signalfd=yes
4499fi
4500
d339d766
RJ
4501# check if optreset global is declared by <getopt.h>
4502optreset="no"
4503cat > $TMPC << EOF
4504#include <getopt.h>
4505int main(void) { return optreset; }
4506EOF
4507
4508if compile_prog "" "" ; then
4509 optreset=yes
4510fi
4511
c2882b96
RV
4512# check if eventfd is supported
4513eventfd=no
4514cat > $TMPC << EOF
4515#include <sys/eventfd.h>
4516
4517int main(void)
4518{
55cc7f3e 4519 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
c2882b96
RV
4520}
4521EOF
4522if compile_prog "" "" ; then
4523 eventfd=yes
4524fi
4525
751bcc39
MAL
4526# check if memfd is supported
4527memfd=no
4528cat > $TMPC << EOF
75e5b70e 4529#include <sys/mman.h>
751bcc39
MAL
4530
4531int main(void)
4532{
4533 return memfd_create("foo", MFD_ALLOW_SEALING);
4534}
4535EOF
4536if compile_prog "" "" ; then
4537 memfd=yes
4538fi
4539
955727d2
CT
4540# check for usbfs
4541have_usbfs=no
4542if test "$linux_user" = "yes"; then
96566d09
TP
4543 cat > $TMPC << EOF
4544#include <linux/usbdevice_fs.h>
4545
4546#ifndef USBDEVFS_GET_CAPABILITIES
4547#error "USBDEVFS_GET_CAPABILITIES undefined"
4548#endif
4549
4550#ifndef USBDEVFS_DISCONNECT_CLAIM
4551#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4552#endif
4553
4554int main(void)
4555{
4556 return 0;
4557}
4558EOF
4559 if compile_prog "" ""; then
955727d2
CT
4560 have_usbfs=yes
4561 fi
955727d2 4562fi
751bcc39 4563
d0927938
UH
4564# check for fallocate
4565fallocate=no
4566cat > $TMPC << EOF
4567#include <fcntl.h>
4568
4569int main(void)
4570{
4571 fallocate(0, 0, 0, 0);
4572 return 0;
4573}
4574EOF
8fb03151 4575if compile_prog "" "" ; then
d0927938
UH
4576 fallocate=yes
4577fi
4578
3d4fa43e
KK
4579# check for fallocate hole punching
4580fallocate_punch_hole=no
4581cat > $TMPC << EOF
4582#include <fcntl.h>
4583#include <linux/falloc.h>
4584
4585int main(void)
4586{
4587 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4588 return 0;
4589}
4590EOF
4591if compile_prog "" "" ; then
4592 fallocate_punch_hole=yes
4593fi
4594
b953f075
DL
4595# check that fallocate supports range zeroing inside the file
4596fallocate_zero_range=no
4597cat > $TMPC << EOF
4598#include <fcntl.h>
4599#include <linux/falloc.h>
4600
4601int main(void)
4602{
4603 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4604 return 0;
4605}
4606EOF
4607if compile_prog "" "" ; then
4608 fallocate_zero_range=yes
4609fi
4610
ed911435
KW
4611# check for posix_fallocate
4612posix_fallocate=no
4613cat > $TMPC << EOF
4614#include <fcntl.h>
4615
4616int main(void)
4617{
4618 posix_fallocate(0, 0, 0);
4619 return 0;
4620}
4621EOF
4622if compile_prog "" "" ; then
4623 posix_fallocate=yes
4624fi
4625
c727f47d
PM
4626# check for sync_file_range
4627sync_file_range=no
4628cat > $TMPC << EOF
4629#include <fcntl.h>
4630
4631int main(void)
4632{
4633 sync_file_range(0, 0, 0, 0);
4634 return 0;
4635}
4636EOF
8fb03151 4637if compile_prog "" "" ; then
c727f47d
PM
4638 sync_file_range=yes
4639fi
4640
dace20dc
PM
4641# check for linux/fiemap.h and FS_IOC_FIEMAP
4642fiemap=no
4643cat > $TMPC << EOF
4644#include <sys/ioctl.h>
4645#include <linux/fs.h>
4646#include <linux/fiemap.h>
4647
4648int main(void)
4649{
4650 ioctl(0, FS_IOC_FIEMAP, 0);
4651 return 0;
4652}
4653EOF
8fb03151 4654if compile_prog "" "" ; then
dace20dc
PM
4655 fiemap=yes
4656fi
4657
d0927938
UH
4658# check for dup3
4659dup3=no
4660cat > $TMPC << EOF
4661#include <unistd.h>
4662
4663int main(void)
4664{
4665 dup3(0, 0, 0);
4666 return 0;
4667}
4668EOF
78f5d726 4669if compile_prog "" "" ; then
d0927938
UH
4670 dup3=yes
4671fi
4672
4e0c6529
AB
4673# check for ppoll support
4674ppoll=no
4675cat > $TMPC << EOF
4676#include <poll.h>
4677
4678int main(void)
4679{
4680 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4681 ppoll(&pfd, 1, 0, 0);
4682 return 0;
4683}
4684EOF
4685if compile_prog "" "" ; then
4686 ppoll=yes
4687fi
4688
cd758dd0
AB
4689# check for prctl(PR_SET_TIMERSLACK , ... ) support
4690prctl_pr_set_timerslack=no
4691cat > $TMPC << EOF
4692#include <sys/prctl.h>
4693
4694int main(void)
4695{
4696 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4697 return 0;
4698}
4699EOF
4700if compile_prog "" "" ; then
4701 prctl_pr_set_timerslack=yes
4702fi
4703
3b6edd16
PM
4704# check for epoll support
4705epoll=no
4706cat > $TMPC << EOF
4707#include <sys/epoll.h>
4708
4709int main(void)
4710{
4711 epoll_create(0);
4712 return 0;
4713}
4714EOF
8fb03151 4715if compile_prog "" "" ; then
3b6edd16
PM
4716 epoll=yes
4717fi
4718
227f0214
PM
4719# epoll_create1 is a later addition
4720# so we must check separately for its presence
3b6edd16
PM
4721epoll_create1=no
4722cat > $TMPC << EOF
4723#include <sys/epoll.h>
4724
4725int main(void)
4726{
19e83f6b
PM
4727 /* Note that we use epoll_create1 as a value, not as
4728 * a function being called. This is necessary so that on
4729 * old SPARC glibc versions where the function was present in
4730 * the library but not declared in the header file we will
4731 * fail the configure check. (Otherwise we will get a compiler
4732 * warning but not an error, and will proceed to fail the
4733 * qemu compile where we compile with -Werror.)
4734 */
c075a723 4735 return (int)(uintptr_t)&epoll_create1;
3b6edd16
PM
4736}
4737EOF
8fb03151 4738if compile_prog "" "" ; then
3b6edd16
PM
4739 epoll_create1=yes
4740fi
4741
a8fd1aba
PM
4742# check for sendfile support
4743sendfile=no
4744cat > $TMPC << EOF
4745#include <sys/sendfile.h>
4746
4747int main(void)
4748{
4749 return sendfile(0, 0, 0, 0);
4750}
4751EOF
4752if compile_prog "" "" ; then
4753 sendfile=yes
4754fi
4755
51834341
RV
4756# check for timerfd support (glibc 2.8 and newer)
4757timerfd=no
4758cat > $TMPC << EOF
4759#include <sys/timerfd.h>
4760
4761int main(void)
4762{
4763 return(timerfd_create(CLOCK_REALTIME, 0));
4764}
4765EOF
4766if compile_prog "" "" ; then
4767 timerfd=yes
4768fi
4769
9af5c906
RV
4770# check for setns and unshare support
4771setns=no
4772cat > $TMPC << EOF
4773#include <sched.h>
4774
4775int main(void)
4776{
4777 int ret;
4778 ret = setns(0, 0);
4779 ret = unshare(0);
4780 return ret;
4781}
4782EOF
4783if compile_prog "" "" ; then
4784 setns=yes
4785fi
4786
38860a03
AM
4787# clock_adjtime probe
4788clock_adjtime=no
4789cat > $TMPC <<EOF
4790#include <time.h>
4791
4792int main(void)
4793{
4794 return clock_adjtime(0, 0);
4795}
4796EOF
4797clock_adjtime=no
4798if compile_prog "" "" ; then
4799 clock_adjtime=yes
4800fi
4801
5a03cd00
AM
4802# syncfs probe
4803syncfs=no
4804cat > $TMPC <<EOF
4805#include <unistd.h>
4806
4807int main(void)
4808{
4809 return syncfs(0);
4810}
4811EOF
4812syncfs=no
4813if compile_prog "" "" ; then
4814 syncfs=yes
4815fi
4816
db37dd89
AM
4817# check for kcov support (kernel must be 4.4+, compiled with certain options)
4818kcov=no
4819if check_include sys/kcov.h ; then
4820 kcov=yes
4821fi
4822
5f71eac0
PM
4823# Check we have a new enough version of sphinx-build
4824has_sphinx_build() {
4825 # This is a bit awkward but works: create a trivial document and
4826 # try to run it with our configuration file (which enforces a
4827 # version requirement). This will fail if either
4828 # sphinx-build doesn't exist at all or if it is too old.
4829 mkdir -p "$TMPDIR1/sphinx"
4830 touch "$TMPDIR1/sphinx/index.rst"
903458c8 4831 "$sphinx_build" -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
5f71eac0
PM
4832}
4833
cc8ae6de 4834# Check if tools are available to build documentation.
a25dba17 4835if test "$docs" != "no" ; then
758b617a
PM
4836 if has_sphinx_build; then
4837 sphinx_ok=yes
4838 else
4839 sphinx_ok=no
4840 fi
4841 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
a25dba17 4842 docs=yes
83a3ab8b 4843 else
a25dba17 4844 if test "$docs" = "yes" ; then
758b617a
PM
4845 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4846 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4847 fi
4848 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
83a3ab8b 4849 fi
a25dba17 4850 docs=no
83a3ab8b 4851 fi
cc8ae6de
PB
4852fi
4853
f514f41c 4854# Search for bswap_32 function
6ae9a1f4
JQ
4855byteswap_h=no
4856cat > $TMPC << EOF
4857#include <byteswap.h>
4858int main(void) { return bswap_32(0); }
4859EOF
52166aa0 4860if compile_prog "" "" ; then
6ae9a1f4
JQ
4861 byteswap_h=yes
4862fi
4863
75f13596 4864# Search for bswap32 function
6ae9a1f4
JQ
4865bswap_h=no
4866cat > $TMPC << EOF
4867#include <sys/endian.h>
4868#include <sys/types.h>
4869#include <machine/bswap.h>
4870int main(void) { return bswap32(0); }
4871EOF
52166aa0 4872if compile_prog "" "" ; then
6ae9a1f4
JQ
4873 bswap_h=yes
4874fi
4875
c589b249 4876##########################################
e49ab19f 4877# Do we have libiscsi >= 1.9.0
c589b249 4878if test "$libiscsi" != "no" ; then
e49ab19f 4879 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3c33ea96 4880 libiscsi="yes"
ca871ec8
SW
4881 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4882 libiscsi_libs=$($pkg_config --libs libiscsi)
c589b249
RS
4883 else
4884 if test "$libiscsi" = "yes" ; then
e49ab19f 4885 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
c589b249
RS
4886 fi
4887 libiscsi="no"
4888 fi
4889fi
4890
8bacde8d
NC
4891##########################################
4892# Do we need libm
4893cat > $TMPC << EOF
4894#include <math.h>
f80ea986 4895int main(int argc, char **argv) { return isnan(sin((double)argc)); }
8bacde8d
NC
4896EOF
4897if compile_prog "" "" ; then
4898 :
4899elif compile_prog "" "-lm" ; then
4900 LIBS="-lm $LIBS"
4901 libs_qga="-lm $libs_qga"
4902else
76ad07a4 4903 error_exit "libm check failed"
8bacde8d
NC
4904fi
4905
da93a1fd
AL
4906##########################################
4907# Do we need librt
8bacde8d
NC
4908# uClibc provides 2 versions of clock_gettime(), one with realtime
4909# support and one without. This means that the clock_gettime() don't
4910# need -lrt. We still need it for timer_create() so we check for this
4911# function in addition.
da93a1fd
AL
4912cat > $TMPC <<EOF
4913#include <signal.h>
4914#include <time.h>
8bacde8d
NC
4915int main(void) {
4916 timer_create(CLOCK_REALTIME, NULL, NULL);
4917 return clock_gettime(CLOCK_REALTIME, NULL);
4918}
da93a1fd
AL
4919EOF
4920
52166aa0 4921if compile_prog "" "" ; then
07ffa4bd 4922 :
8bacde8d 4923# we need pthread for static linking. use previous pthread test result
18e588b1
RL
4924elif compile_prog "" "$pthread_lib -lrt" ; then
4925 LIBS="$LIBS -lrt"
4926 libs_qga="$libs_qga -lrt"
da93a1fd
AL
4927fi
4928
d99e97e6
TH
4929# Check whether we need to link libutil for openpty()
4930cat > $TMPC << EOF
4931extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4932int main(void) { return openpty(0, 0, 0, 0, 0); }
4933EOF
4934
4935if ! compile_prog "" "" ; then
4936 if compile_prog "" "-lutil" ; then
6362a53f 4937 libs_softmmu="-lutil $libs_softmmu"
d99e97e6
TH
4938 libs_tools="-lutil $libs_tools"
4939 fi
6362a53f
JQ
4940fi
4941
de5071c5 4942##########################################
cd4ec0b4
GH
4943# spice probe
4944if test "$spice" != "no" ; then
4945 cat > $TMPC << EOF
4946#include <spice.h>
4947int main(void) { spice_server_new(); return 0; }
4948EOF
710fc4f5
JD
4949 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4950 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
1b63665c 4951 if $pkg_config --atleast-version=0.12.5 spice-server && \
65d5d3f9 4952 $pkg_config --atleast-version=0.12.3 spice-protocol && \
cd4ec0b4
GH
4953 compile_prog "$spice_cflags" "$spice_libs" ; then
4954 spice="yes"
4955 libs_softmmu="$libs_softmmu $spice_libs"
4956 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
2e0e3c39
AL
4957 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4958 spice_server_version=$($pkg_config --modversion spice-server)
cd4ec0b4
GH
4959 else
4960 if test "$spice" = "yes" ; then
8efc9363 4961 feature_not_found "spice" \
1b63665c 4962 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
cd4ec0b4
GH
4963 fi
4964 spice="no"
4965 fi
4966fi
4967
7b02f544 4968# check for smartcard support
7b02f544 4969if test "$smartcard" != "no"; then
0f5c642d 4970 if $pkg_config --atleast-version=2.5.1 libcacard; then
7b02f544
MAL
4971 libcacard_cflags=$($pkg_config --cflags libcacard)
4972 libcacard_libs=$($pkg_config --libs libcacard)
7b02f544 4973 smartcard="yes"
afd347ab 4974 else
7b02f544
MAL
4975 if test "$smartcard" = "yes"; then
4976 feature_not_found "smartcard" "Install libcacard devel"
111a38b0 4977 fi
7b02f544 4978 smartcard="no"
111a38b0
RR
4979 fi
4980fi
111a38b0 4981
2b2325ff
GH
4982# check for libusb
4983if test "$libusb" != "no" ; then
65d5d3f9 4984 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
2b2325ff 4985 libusb="yes"
ca871ec8
SW
4986 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4987 libusb_libs=$($pkg_config --libs libusb-1.0)
2b2325ff
GH
4988 else
4989 if test "$libusb" = "yes"; then
8efc9363 4990 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
2b2325ff
GH
4991 fi
4992 libusb="no"
4993 fi
4994fi
4995
69354a83
HG
4996# check for usbredirparser for usb network redirection support
4997if test "$usb_redir" != "no" ; then
65d5d3f9 4998 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
69354a83 4999 usb_redir="yes"
ca871ec8
SW
5000 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5001 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
69354a83
HG
5002 else
5003 if test "$usb_redir" = "yes"; then
21684af0 5004 feature_not_found "usb-redir" "Install usbredir devel"
69354a83
HG
5005 fi
5006 usb_redir="no"
5007 fi
5008fi
5009
d9840e25
TS
5010##########################################
5011# check if we have VSS SDK headers for win
5012
e633a5c6
EB
5013if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5014 test "$vss_win32_sdk" != "no" ; then
d9840e25 5015 case "$vss_win32_sdk" in
690604f6 5016 "") vss_win32_include="-isystem $source_path" ;;
d9840e25
TS
5017 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5018 # handle path with spaces. So we symlink the headers into ".sdk/vss".
690604f6 5019 vss_win32_include="-isystem $source_path/.sdk/vss"
d9840e25
TS
5020 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5021 ;;
690604f6 5022 *) vss_win32_include="-isystem $vss_win32_sdk"
d9840e25
TS
5023 esac
5024 cat > $TMPC << EOF
5025#define __MIDL_user_allocate_free_DEFINED__
5026#include <inc/win2003/vss.h>
5027int main(void) { return VSS_CTX_BACKUP; }
5028EOF
5029 if compile_prog "$vss_win32_include" "" ; then
5030 guest_agent_with_vss="yes"
5031 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
315d3184 5032 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
f33ca81f 5033 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
d9840e25
TS
5034 else
5035 if test "$vss_win32_sdk" != "" ; then
5036 echo "ERROR: Please download and install Microsoft VSS SDK:"
5037 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5038 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5039 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5040 echo "ERROR: The headers are extracted in the directory \`inc'."
5041 feature_not_found "VSS support"
5042 fi
5043 guest_agent_with_vss="no"
5044 fi
5045fi
5046
5047##########################################
5048# lookup Windows platform SDK (if not specified)
5049# The SDK is needed only to build .tlb (type library) file of guest agent
5050# VSS provider from the source. It is usually unnecessary because the
5051# pre-compiled .tlb file is included.
5052
e633a5c6
EB
5053if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5054 test "$guest_agent_with_vss" = "yes" ; then
d9840e25
TS
5055 if test -z "$win_sdk"; then
5056 programfiles="$PROGRAMFILES"
5057 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5058 if test -n "$programfiles"; then
5059 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5060 else
5061 feature_not_found "Windows SDK"
5062 fi
5063 elif test "$win_sdk" = "no"; then
5064 win_sdk=""
5065 fi
5066fi
5067
50cbebb9
MR
5068##########################################
5069# check if mingw environment provides a recent ntddscsi.h
e633a5c6 5070if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
50cbebb9
MR
5071 cat > $TMPC << EOF
5072#include <windows.h>
5073#include <ntddscsi.h>
5074int main(void) {
5075#if !defined(IOCTL_SCSI_GET_ADDRESS)
5076#error Missing required ioctl definitions
5077#endif
5078 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5079 return addr.Lun;
5080}
5081EOF
5082 if compile_prog "" "" ; then
5083 guest_agent_ntddscsi=yes
996b9cdc 5084 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
50cbebb9
MR
5085 fi
5086fi
5087
9d9e1521
GH
5088##########################################
5089# virgl renderer probe
5090
5091if test "$virglrenderer" != "no" ; then
5092 cat > $TMPC << EOF
5093#include <virglrenderer.h>
5094int main(void) { virgl_renderer_poll(); return 0; }
5095EOF
5096 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5097 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
47479c55 5098 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
9d9e1521
GH
5099 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5100 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5101 virglrenderer="yes"
5102 else
5103 if test "$virglrenderer" = "yes" ; then
5104 feature_not_found "virglrenderer"
5105 fi
5106 virglrenderer="no"
5107 fi
5108fi
5109
8ca80760
RH
5110##########################################
5111# capstone
5112
e219c499
RH
5113case "$capstone" in
5114 "" | yes)
5115 if $pkg_config capstone; then
5116 capstone=system
e633a5c6 5117 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
e219c499
RH
5118 capstone=git
5119 elif test -e "${source_path}/capstone/Makefile" ; then
5120 capstone=internal
5121 elif test -z "$capstone" ; then
5122 capstone=no
5123 else
5124 feature_not_found "capstone" "Install capstone devel or git submodule"
5125 fi
5126 ;;
5127
5128 system)
5129 if ! $pkg_config capstone; then
5130 feature_not_found "capstone" "Install capstone devel"
5131 fi
5132 ;;
5133esac
5134
5135case "$capstone" in
5136 git | internal)
5137 if test "$capstone" = git; then
5138 git_submodules="${git_submodules} capstone"
5139 fi
5140 mkdir -p capstone
5141 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5142 if test "$mingw32" = "yes"; then
5143 LIBCAPSTONE=capstone.lib
5144 else
5145 LIBCAPSTONE=libcapstone.a
5146 fi
02f9135b 5147 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
e219c499
RH
5148 ;;
5149
5150 system)
8ca80760 5151 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
02f9135b 5152 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
e219c499
RH
5153 ;;
5154
5155 no)
5156 ;;
5157 *)
5158 error_exit "Unknown state for capstone: $capstone"
5159 ;;
5160esac
8ca80760 5161
5f6b9e8f
BS
5162##########################################
5163# check if we have fdatasync
5164
5165fdatasync=no
5166cat > $TMPC << EOF
5167#include <unistd.h>
d1722a27
AR
5168int main(void) {
5169#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5170return fdatasync(0);
5171#else
e172fe11 5172#error Not supported
d1722a27
AR
5173#endif
5174}
5f6b9e8f
BS
5175EOF
5176if compile_prog "" "" ; then
5177 fdatasync=yes
5178fi
5179
e78815a5
AF
5180##########################################
5181# check if we have madvise
5182
5183madvise=no
5184cat > $TMPC << EOF
5185#include <sys/types.h>
5186#include <sys/mman.h>
832ce9c2 5187#include <stddef.h>
e78815a5
AF
5188int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5189EOF
5190if compile_prog "" "" ; then
5191 madvise=yes
5192fi
5193
5194##########################################
5195# check if we have posix_madvise
5196
5197posix_madvise=no
5198cat > $TMPC << EOF
5199#include <sys/mman.h>
832ce9c2 5200#include <stddef.h>
e78815a5
AF
5201int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5202EOF
5203if compile_prog "" "" ; then
5204 posix_madvise=yes
5205fi
5206
9bc5a719
AG
5207##########################################
5208# check if we have posix_memalign()
5209
5210posix_memalign=no
5211cat > $TMPC << EOF
5212#include <stdlib.h>
5213int main(void) {
5214 void *p;
5215 return posix_memalign(&p, 8, 8);
5216}
5217EOF
5218if compile_prog "" "" ; then
5219 posix_memalign=yes
5220fi
5221
0a852417
PD
5222##########################################
5223# check if we have posix_syslog
5224
5225posix_syslog=no
5226cat > $TMPC << EOF
5227#include <syslog.h>
5228int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5229EOF
5230if compile_prog "" "" ; then
5231 posix_syslog=yes
5232fi
5233
401bc051
PM
5234##########################################
5235# check if we have sem_timedwait
5236
5237sem_timedwait=no
5238cat > $TMPC << EOF
5239#include <semaphore.h>
811294b7 5240int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
401bc051
PM
5241EOF
5242if compile_prog "" "" ; then
5243 sem_timedwait=yes
5244fi
5245
5c99fa37
KF
5246##########################################
5247# check if we have strchrnul
5248
5249strchrnul=no
5250cat > $TMPC << EOF
5251#include <string.h>
5252int main(void);
5253// Use a haystack that the compiler shouldn't be able to constant fold
5254char *haystack = (char*)&main;
5255int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5256EOF
5257if compile_prog "" "" ; then
5258 strchrnul=yes
5259fi
5260
8a792b03
JX
5261#########################################
5262# check if we have st_atim
5263
5264st_atim=no
5265cat > $TMPC << EOF
5266#include <sys/stat.h>
5267#include <stddef.h>
5268int main(void) { return offsetof(struct stat, st_atim); }
5269EOF
5270if compile_prog "" "" ; then
5271 st_atim=yes
5272fi
5273
94a420b1
SH
5274##########################################
5275# check if trace backend exists
5276
5b808275 5277$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 5278if test "$?" -ne 0 ; then
5b808275
LV
5279 error_exit "invalid trace backends" \
5280 "Please choose supported trace backends."
94a420b1
SH
5281fi
5282
7e24e92a
SH
5283##########################################
5284# For 'ust' backend, test if ust headers are present
5b808275 5285if have_backend "ust"; then
7e24e92a 5286 cat > $TMPC << EOF
bf15f63c 5287#include <lttng/tracepoint.h>
7e24e92a
SH
5288int main(void) { return 0; }
5289EOF
c79ed23d 5290 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
bf15f63c 5291 if $pkg_config lttng-ust --exists; then
89138857 5292 lttng_ust_libs=$($pkg_config --libs lttng-ust)
bf15f63c 5293 else
c79ed23d 5294 lttng_ust_libs="-llttng-ust -ldl"
bf15f63c
MG
5295 fi
5296 if $pkg_config liburcu-bp --exists; then
89138857 5297 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
bf15f63c
MG
5298 else
5299 urcu_bp_libs="-lurcu-bp"
5300 fi
5301
5302 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5303 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
7e24e92a 5304 else
bf15f63c 5305 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
5306 fi
5307fi
b3d08c02
DB
5308
5309##########################################
5310# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 5311if have_backend "dtrace"; then
b3d08c02 5312 if ! has 'dtrace' ; then
76ad07a4 5313 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 5314 fi
c276b17d
DB
5315 trace_backend_stap="no"
5316 if has 'stap' ; then
5317 trace_backend_stap="yes"
5318 fi
b3d08c02
DB
5319fi
5320
023367e6 5321##########################################
519175a2 5322# check and set a backend for coroutine
d0e2fce5 5323
7c2acc70 5324# We prefer ucontext, but it's not always possible. The fallback
33c53c54
DB
5325# is sigcontext. On Windows the only valid backend is the Windows
5326# specific one.
7c2acc70
PM
5327
5328ucontext_works=no
5329if test "$darwin" != "yes"; then
5330 cat > $TMPC << EOF
d0e2fce5 5331#include <ucontext.h>
cdf84806
PM
5332#ifdef __stub_makecontext
5333#error Ignoring glibc stub makecontext which will always fail
5334#endif
75cafad7 5335int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 5336EOF
7c2acc70
PM
5337 if compile_prog "" "" ; then
5338 ucontext_works=yes
5339 fi
5340fi
5341
5342if test "$coroutine" = ""; then
5343 if test "$mingw32" = "yes"; then
5344 coroutine=win32
5345 elif test "$ucontext_works" = "yes"; then
5346 coroutine=ucontext
5347 else
5348 coroutine=sigaltstack
d0e2fce5 5349 fi
519175a2 5350else
7c2acc70
PM
5351 case $coroutine in
5352 windows)
5353 if test "$mingw32" != "yes"; then
5354 error_exit "'windows' coroutine backend only valid for Windows"
5355 fi
5356 # Unfortunately the user visible backend name doesn't match the
5357 # coroutine-*.c filename for this case, so we have to adjust it here.
5358 coroutine=win32
5359 ;;
5360 ucontext)
5361 if test "$ucontext_works" != "yes"; then
5362 feature_not_found "ucontext"
5363 fi
5364 ;;
33c53c54 5365 sigaltstack)
7c2acc70
PM
5366 if test "$mingw32" = "yes"; then
5367 error_exit "only the 'windows' coroutine backend is valid for Windows"
5368 fi
5369 ;;
5370 *)
5371 error_exit "unknown coroutine backend $coroutine"
5372 ;;
5373 esac
d0e2fce5
AK
5374fi
5375
70c60c08 5376if test "$coroutine_pool" = ""; then
33c53c54 5377 coroutine_pool=yes
70c60c08
SH
5378fi
5379
7d992e4d 5380if test "$debug_stack_usage" = "yes"; then
7d992e4d
PL
5381 if test "$coroutine_pool" = "yes"; then
5382 echo "WARN: disabling coroutine pool for stack usage debugging"
5383 coroutine_pool=no
5384 fi
5385fi
5386
5387
d2042378
AK
5388##########################################
5389# check if we have open_by_handle_at
5390
4e1797f9 5391open_by_handle_at=no
d2042378
AK
5392cat > $TMPC << EOF
5393#include <fcntl.h>
acc55ba8
SW
5394#if !defined(AT_EMPTY_PATH)
5395# error missing definition
5396#else
75cafad7 5397int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
acc55ba8 5398#endif
d2042378
AK
5399EOF
5400if compile_prog "" "" ; then
5401 open_by_handle_at=yes
5402fi
5403
e06a765e
HPB
5404########################################
5405# check if we have linux/magic.h
5406
5407linux_magic_h=no
5408cat > $TMPC << EOF
5409#include <linux/magic.h>
5410int main(void) {
75cafad7 5411 return 0;
e06a765e
HPB
5412}
5413EOF
5414if compile_prog "" "" ; then
5415 linux_magic_h=yes
5416fi
5417
06d71fa1 5418########################################
c95e3080
KW
5419# check whether we can disable warning option with a pragma (this is needed
5420# to silence warnings in the headers of some versions of external libraries).
5421# This test has to be compiled with -Werror as otherwise an unknown pragma is
5422# only a warning.
5423#
5424# If we can't selectively disable warning in the code, disable -Werror so that
5425# the build doesn't fail anyway.
5426
06d71fa1
PM
5427pragma_disable_unused_but_set=no
5428cat > $TMPC << EOF
e6f53fd5 5429#pragma GCC diagnostic push
c95e3080 5430#pragma GCC diagnostic ignored "-Wstrict-prototypes"
e6f53fd5 5431#pragma GCC diagnostic pop
c95e3080 5432
06d71fa1
PM
5433int main(void) {
5434 return 0;
5435}
5436EOF
5437if compile_prog "-Werror" "" ; then
cc6e3ca9 5438 pragma_diagnostic_available=yes
c95e3080
KW
5439else
5440 werror=no
06d71fa1
PM
5441fi
5442
3f4349dc 5443########################################
541be927 5444# check if we have valgrind/valgrind.h
3f4349dc
KW
5445
5446valgrind_h=no
5447cat > $TMPC << EOF
5448#include <valgrind/valgrind.h>
3f4349dc 5449int main(void) {
3f4349dc
KW
5450 return 0;
5451}
5452EOF
5453if compile_prog "" "" ; then
5454 valgrind_h=yes
5455fi
5456
8ab1bf12
LC
5457########################################
5458# check if environ is declared
5459
5460has_environ=no
5461cat > $TMPC << EOF
5462#include <unistd.h>
5463int main(void) {
c075a723 5464 environ = 0;
8ab1bf12
LC
5465 return 0;
5466}
5467EOF
5468if compile_prog "" "" ; then
5469 has_environ=yes
5470fi
5471
76a347e1
RH
5472########################################
5473# check if cpuid.h is usable.
5474
76a347e1
RH
5475cat > $TMPC << EOF
5476#include <cpuid.h>
5477int main(void) {
774d566c
PM
5478 unsigned a, b, c, d;
5479 int max = __get_cpuid_max(0, 0);
5480
5481 if (max >= 1) {
5482 __cpuid(1, a, b, c, d);
5483 }
5484
5485 if (max >= 7) {
5486 __cpuid_count(7, 0, a, b, c, d);
5487 }
5488
5489 return 0;
76a347e1
RH
5490}
5491EOF
5492if compile_prog "" "" ; then
5493 cpuid_h=yes
5494fi
5495
5dd89908
RH
5496##########################################
5497# avx2 optimization requirement check
5498#
5499# There is no point enabling this if cpuid.h is not usable,
5500# since we won't be able to select the new routines.
5501
e633a5c6 5502if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5dd89908
RH
5503 cat > $TMPC << EOF
5504#pragma GCC push_options
5505#pragma GCC target("avx2")
5506#include <cpuid.h>
5507#include <immintrin.h>
5508static int bar(void *a) {
5509 __m256i x = *(__m256i *)a;
5510 return _mm256_testz_si256(x, x);
5511}
5512int main(int argc, char *argv[]) { return bar(argv[0]); }
5513EOF
5514 if compile_object "" ; then
5515 avx2_opt="yes"
86583a07
LM
5516 else
5517 avx2_opt="no"
5dd89908
RH
5518 fi
5519fi
5520
f540166b
RH
5521########################################
5522# check if __[u]int128_t is usable.
5523
5524int128=no
5525cat > $TMPC << EOF
5526__int128_t a;
5527__uint128_t b;
5528int main (void) {
5529 a = a + b;
5530 b = a * b;
464e3671 5531 a = a * a;
f540166b
RH
5532 return 0;
5533}
5534EOF
5535if compile_prog "" "" ; then
5536 int128=yes
5537fi
76a347e1 5538
7ebee43e
RH
5539#########################################
5540# See if 128-bit atomic operations are supported.
5541
5542atomic128=no
5543if test "$int128" = "yes"; then
5544 cat > $TMPC << EOF
5545int main(void)
5546{
5547 unsigned __int128 x = 0, y = 0;
5548 y = __atomic_load_16(&x, 0);
5549 __atomic_store_16(&x, y, 0);
5550 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5551 return 0;
5552}
5553EOF
5554 if compile_prog "" "" ; then
5555 atomic128=yes
5556 fi
5557fi
5558
e6cd4bb5 5559cmpxchg128=no
e633a5c6 5560if test "$int128" = yes && test "$atomic128" = no; then
e6cd4bb5
RH
5561 cat > $TMPC << EOF
5562int main(void)
5563{
5564 unsigned __int128 x = 0, y = 0;
5565 __sync_val_compare_and_swap_16(&x, y, x);
5566 return 0;
5567}
5568EOF
5569 if compile_prog "" "" ; then
5570 cmpxchg128=yes
5571 fi
5572fi
5573
df79b996
RH
5574#########################################
5575# See if 64-bit atomic operations are supported.
5576# Note that without __atomic builtins, we can only
5577# assume atomic loads/stores max at pointer size.
5578
5579cat > $TMPC << EOF
5580#include <stdint.h>
5581int main(void)
5582{
5583 uint64_t x = 0, y = 0;
5584#ifdef __ATOMIC_RELAXED
5585 y = __atomic_load_8(&x, 0);
5586 __atomic_store_8(&x, y, 0);
5587 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5588 __atomic_exchange_8(&x, y, 0);
5589 __atomic_fetch_add_8(&x, y, 0);
5590#else
5591 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5592 __sync_lock_test_and_set(&x, y);
5593 __sync_val_compare_and_swap(&x, y, 0);
5594 __sync_fetch_and_add(&x, y);
5595#endif
5596 return 0;
5597}
5598EOF
5599if compile_prog "" "" ; then
5600 atomic64=yes
5601fi
5602
26fffe29
EC
5603#########################################
5604# See if --dynamic-list is supported by the linker
5605ld_dynamic_list="no"
5606if test "$static" = "no" ; then
5607 cat > $TMPTXT <<EOF
5608{
5609 foo;
5610};
5611EOF
5612
5613 cat > $TMPC <<EOF
5614#include <stdio.h>
5615void foo(void);
5616
5617void foo(void)
5618{
5619 printf("foo\n");
5620}
5621
5622int main(void)
5623{
5624 foo();
5625 return 0;
5626}
5627EOF
5628
5629 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5630 ld_dynamic_list="yes"
5631 fi
5632fi
5633
5634#########################################
5635# See if -exported_symbols_list is supported by the linker
5636
5637ld_exported_symbols_list="no"
5638if test "$static" = "no" ; then
5639 cat > $TMPTXT <<EOF
5640 _foo
5641EOF
5642
5643 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5644 ld_exported_symbols_list="yes"
5645 fi
5646fi
5647
5648if test "$plugins" = "yes" &&
5649 test "$ld_dynamic_list" = "no" &&
5650 test "$ld_exported_symbols_list" = "no" ; then
5651 error_exit \
5652 "Plugin support requires dynamic linking and specifying a set of symbols " \
5653 "that are exported to plugins. Unfortunately your linker doesn't " \
5654 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5655 "for this purpose. You can't build with --static."
5656fi
5657
db432672
RH
5658########################################
5659# See if 16-byte vector operations are supported.
5660# Even without a vector unit the compiler may expand these.
5661# There is a bug in old GCC for PPC that crashes here.
5662# Unfortunately it's the system compiler for Centos 7.
5663
5664cat > $TMPC << EOF
5665typedef unsigned char U1 __attribute__((vector_size(16)));
5666typedef unsigned short U2 __attribute__((vector_size(16)));
5667typedef unsigned int U4 __attribute__((vector_size(16)));
5668typedef unsigned long long U8 __attribute__((vector_size(16)));
5669typedef signed char S1 __attribute__((vector_size(16)));
5670typedef signed short S2 __attribute__((vector_size(16)));
5671typedef signed int S4 __attribute__((vector_size(16)));
5672typedef signed long long S8 __attribute__((vector_size(16)));
5673static U1 a1, b1;
5674static U2 a2, b2;
5675static U4 a4, b4;
5676static U8 a8, b8;
5677static S1 c1;
5678static S2 c2;
5679static S4 c4;
5680static S8 c8;
5681static int i;
74912f6d
LV
5682void helper(void *d, void *a, int shift, int i);
5683void helper(void *d, void *a, int shift, int i)
5684{
5685 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5686 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5687 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5688 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5689}
db432672
RH
5690int main(void)
5691{
5692 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5693 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5694 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5695 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5696 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5697 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5698 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5699 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5700 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5701 return 0;
5702}
5703EOF
5704
5705vector16=no
5706if compile_prog "" "" ; then
5707 vector16=yes
5708fi
5709
db8aaae8
RH
5710########################################
5711# See if __attribute__((alias)) is supported.
5712# This false for Xcode 9, but has been remedied for Xcode 10.
5713# Unfortunately, travis uses Xcode 9 by default.
5714
5715attralias=no
5716cat > $TMPC << EOF
5717int x = 1;
5718extern const int y __attribute__((alias("x")));
5719int main(void) { return 0; }
5720EOF
5721if compile_prog "" "" ; then
5722 attralias=yes
5723fi
5724
1e6e9aca
RH
5725########################################
5726# check if getauxval is available.
5727
5728getauxval=no
5729cat > $TMPC << EOF
5730#include <sys/auxv.h>
5731int main(void) {
5732 return getauxval(AT_HWCAP) == 0;
5733}
5734EOF
5735if compile_prog "" "" ; then
5736 getauxval=yes
5737fi
5738
fd0e6053
JS
5739########################################
5740# check if ccache is interfering with
5741# semantic analysis of macros
5742
5e4dfd3d 5743unset CCACHE_CPP2
fd0e6053
JS
5744ccache_cpp2=no
5745cat > $TMPC << EOF
5746static const int Z = 1;
5747#define fn() ({ Z; })
5748#define TAUT(X) ((X) == Z)
5749#define PAREN(X, Y) (X == Y)
5750#define ID(X) (X)
5751int main(int argc, char *argv[])
5752{
5753 int x = 0, y = 0;
5754 x = ID(x);
5755 x = fn();
5756 fn();
5757 if (PAREN(x, y)) return 0;
5758 if (TAUT(Z)) return 0;
5759 return 0;
5760}
5761EOF
5762
5763if ! compile_object "-Werror"; then
5764 ccache_cpp2=yes
5765fi
5766
b553a042
JS
5767#################################################
5768# clang does not support glibc + FORTIFY_SOURCE.
5769
5770if test "$fortify_source" != "no"; then
5771 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5772 fortify_source="no";
e189091f 5773 elif test -n "$cxx" && has $cxx &&
cfcc7c14 5774 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
b553a042
JS
5775 fortify_source="no";
5776 else
5777 fortify_source="yes"
5778 fi
5779fi
5780
1efad060
FZ
5781###############################################
5782# Check if copy_file_range is provided by glibc
5783have_copy_file_range=no
5784cat > $TMPC << EOF
5785#include <unistd.h>
5786int main(void) {
5787 copy_file_range(0, NULL, 0, NULL, 0, 0);
5788 return 0;
5789}
5790EOF
5791if compile_prog "" "" ; then
5792 have_copy_file_range=yes
5793fi
5794
277abf15
JV
5795##########################################
5796# check if struct fsxattr is available via linux/fs.h
5797
5798have_fsxattr=no
5799cat > $TMPC << EOF
5800#include <linux/fs.h>
5801struct fsxattr foo;
5802int main(void) {
5803 return 0;
5804}
5805EOF
5806if compile_prog "" "" ; then
5807 have_fsxattr=yes
5808fi
5809
a40161cb
PB
5810##########################################
5811# check for usable membarrier system call
5812if test "$membarrier" = "yes"; then
5813 have_membarrier=no
5814 if test "$mingw32" = "yes" ; then
5815 have_membarrier=yes
5816 elif test "$linux" = "yes" ; then
5817 cat > $TMPC << EOF
5818 #include <linux/membarrier.h>
5819 #include <sys/syscall.h>
5820 #include <unistd.h>
5821 #include <stdlib.h>
5822 int main(void) {
5823 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5824 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5825 exit(0);
5826 }
5827EOF
5828 if compile_prog "" "" ; then
5829 have_membarrier=yes
5830 fi
5831 fi
5832 if test "$have_membarrier" = "no"; then
5833 feature_not_found "membarrier" "membarrier system call not available"
5834 fi
5835else
5836 # Do not enable it by default even for Mingw32, because it doesn't
5837 # work on Wine.
5838 membarrier=no
5839fi
5840
b66e10e4
PM
5841##########################################
5842# check if rtnetlink.h exists and is useful
575b22b1
LV
5843have_rtnetlink=no
5844cat > $TMPC << EOF
5845#include <linux/rtnetlink.h>
5846int main(void) {
5847 return IFLA_PROTO_DOWN;
5848}
5849EOF
5850if compile_prog "" "" ; then
5851 have_rtnetlink=yes
5852fi
5853
6a02c806
SH
5854##########################################
5855# check for usable AF_VSOCK environment
5856have_af_vsock=no
5857cat > $TMPC << EOF
5858#include <errno.h>
5859#include <sys/types.h>
5860#include <sys/socket.h>
5861#if !defined(AF_VSOCK)
5862# error missing AF_VSOCK flag
5863#endif
5864#include <linux/vm_sockets.h>
5865int main(void) {
5866 int sock, ret;
5867 struct sockaddr_vm svm;
5868 socklen_t len = sizeof(svm);
5869 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5870 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5871 if ((ret == -1) && (errno == ENOTCONN)) {
5872 return 0;
5873 }
5874 return -1;
5875}
5876EOF
5877if compile_prog "" "" ; then
5878 have_af_vsock=yes
5879fi
5880
f0d92b56
LM
5881##########################################
5882# check for usable AF_ALG environment
4f67366e 5883have_afalg=no
f0d92b56
LM
5884cat > $TMPC << EOF
5885#include <errno.h>
5886#include <sys/types.h>
5887#include <sys/socket.h>
5888#include <linux/if_alg.h>
5889int main(void) {
5890 int sock;
5891 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5892 return sock;
5893}
5894EOF
5895if compile_prog "" "" ; then
5896 have_afalg=yes
5897fi
5898if test "$crypto_afalg" = "yes"
5899then
5900 if test "$have_afalg" != "yes"
5901 then
5902 error_exit "AF_ALG requested but could not be detected"
5903 fi
5904fi
5905
5906
c97d6d2c
SAGDR
5907#################################################
5908# Check to see if we have the Hypervisor framework
d2d08522 5909if [ "$darwin" = "yes" ] ; then
c97d6d2c
SAGDR
5910 cat > $TMPC << EOF
5911#include <Hypervisor/hv.h>
5912int main() { return 0;}
5913EOF
5914 if ! compile_object ""; then
5915 hvf='no'
5916 else
5917 hvf='yes'
db5adeaa 5918 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
c97d6d2c
SAGDR
5919 fi
5920fi
5921
6969ec6c
JC
5922#################################################
5923# Sparc implicitly links with --relax, which is
5924# incompatible with -r, so --no-relax should be
5925# given. It does no harm to give it on other
5926# platforms too.
5927
5928# Note: the prototype is needed since QEMU_CFLAGS
5929# contains -Wmissing-prototypes
5930cat > $TMPC << EOF
5931extern int foo(void);
5932int foo(void) { return 0; }
5933EOF
5934if ! compile_object ""; then
5935 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5936fi
7ecf44a5
PB
5937for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5938 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5939 LD_REL_FLAGS=$i
5940 break
5941 fi
5942done
5943if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5944 feature_not_found "modules" "Cannot find how to build relocatable objects"
6969ec6c
JC
5945fi
5946
4d04351f
CC
5947##########################################
5948# check for sysmacros.h
5949
5950have_sysmacros=no
5951cat > $TMPC << EOF
5952#include <sys/sysmacros.h>
5953int main(void) {
5954 return makedev(0, 0);
5955}
5956EOF
5957if compile_prog "" "" ; then
5958 have_sysmacros=yes
5959fi
5960
da92c3ff
AM
5961##########################################
5962# Veritas HyperScale block driver VxHS
5963# Check if libvxhs is installed
5964
5965if test "$vxhs" != "no" ; then
5966 cat > $TMPC <<EOF
5967#include <stdint.h>
5968#include <qnio/qnio_api.h>
5969
5970void *vxhs_callback;
5971
5972int main(void) {
5973 iio_init(QNIO_VERSION, vxhs_callback);
5974 return 0;
5975}
5976EOF
5977 vxhs_libs="-lvxhs -lssl"
5978 if compile_prog "" "$vxhs_libs" ; then
5979 vxhs=yes
5980 else
5981 if test "$vxhs" = "yes" ; then
5982 feature_not_found "vxhs block device" "Install libvxhs See github"
5983 fi
5984 vxhs=no
5985 fi
5986fi
5987
49e00a18
AG
5988##########################################
5989# check for _Static_assert()
5990
5991have_static_assert=no
5992cat > $TMPC << EOF
5993_Static_assert(1, "success");
5994int main(void) {
5995 return 0;
5996}
5997EOF
5998if compile_prog "" "" ; then
5999 have_static_assert=yes
6000fi
6001
e674605f
TG
6002##########################################
6003# check for utmpx.h, it is missing e.g. on OpenBSD
6004
6005have_utmpx=no
6006cat > $TMPC << EOF
6007#include <utmpx.h>
6008struct utmpx user_info;
6009int main(void) {
6010 return 0;
6011}
6012EOF
6013if compile_prog "" "" ; then
6014 have_utmpx=yes
6015fi
6016
db1ed1ab
RH
6017##########################################
6018# check for getrandom()
6019
6020have_getrandom=no
6021cat > $TMPC << EOF
6022#include <sys/random.h>
6023int main(void) {
6024 return getrandom(0, 0, GRND_NONBLOCK);
6025}
6026EOF
6027if compile_prog "" "" ; then
6028 have_getrandom=yes
6029fi
6030
247724cb
MAL
6031##########################################
6032# checks for sanitizers
6033
247724cb
MAL
6034have_asan=no
6035have_ubsan=no
d83414e1
MAL
6036have_asan_iface_h=no
6037have_asan_iface_fiber=no
247724cb
MAL
6038
6039if test "$sanitizers" = "yes" ; then
b9f44da2 6040 write_c_skeleton
247724cb
MAL
6041 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6042 have_asan=yes
6043 fi
b9f44da2
MAL
6044
6045 # we could use a simple skeleton for flags checks, but this also
6046 # detect the static linking issue of ubsan, see also:
6047 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6048 cat > $TMPC << EOF
6049#include <stdlib.h>
6050int main(void) {
6051 void *tmp = malloc(10);
6052 return *(int *)(tmp + 2);
6053}
6054EOF
247724cb
MAL
6055 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6056 have_ubsan=yes
6057 fi
d83414e1
MAL
6058
6059 if check_include "sanitizer/asan_interface.h" ; then
6060 have_asan_iface_h=yes
6061 fi
6062
6063 cat > $TMPC << EOF
6064#include <sanitizer/asan_interface.h>
6065int main(void) {
6066 __sanitizer_start_switch_fiber(0, 0, 0);
6067 return 0;
6068}
6069EOF
6070 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6071 have_asan_iface_fiber=yes
6072 fi
247724cb
MAL
6073fi
6074
17824406
JH
6075##########################################
6076# check for libpmem
6077
6078if test "$libpmem" != "no"; then
6079 if $pkg_config --exists "libpmem"; then
6080 libpmem="yes"
6081 libpmem_libs=$($pkg_config --libs libpmem)
6082 libpmem_cflags=$($pkg_config --cflags libpmem)
6083 libs_softmmu="$libs_softmmu $libpmem_libs"
6084 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6085 else
6086 if test "$libpmem" = "yes" ; then
6087 feature_not_found "libpmem" "Install nvml or pmdk"
6088 fi
6089 libpmem="no"
6090 fi
6091fi
6092
675b9b53
MAL
6093##########################################
6094# check for slirp
6095
d599938a
LV
6096# slirp is only required when building softmmu targets
6097if test -z "$slirp" -a "$softmmu" != "yes" ; then
6098 slirp="no"
6099fi
6100
675b9b53
MAL
6101case "$slirp" in
6102 "" | yes)
6103 if $pkg_config slirp; then
6104 slirp=system
7c57bdd8
MAL
6105 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6106 slirp=git
675b9b53
MAL
6107 elif test -e "${source_path}/slirp/Makefile" ; then
6108 slirp=internal
6109 elif test -z "$slirp" ; then
6110 slirp=no
6111 else
6112 feature_not_found "slirp" "Install slirp devel or git submodule"
6113 fi
6114 ;;
6115
6116 system)
6117 if ! $pkg_config slirp; then
6118 feature_not_found "slirp" "Install slirp devel"
6119 fi
6120 ;;
6121esac
6122
6123case "$slirp" in
7c57bdd8
MAL
6124 git | internal)
6125 if test "$slirp" = git; then
6126 git_submodules="${git_submodules} slirp"
6127 fi
675b9b53
MAL
6128 mkdir -p slirp
6129 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6130 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
b965e8c5
PB
6131 if test "$mingw32" = "yes" ; then
6132 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6133 fi
675b9b53
MAL
6134 ;;
6135
6136 system)
6137 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6138 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6139 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6140 ;;
6141
6142 no)
6143 ;;
6144 *)
6145 error_exit "Unknown state for slirp: $slirp"
6146 ;;
6147esac
6148
6149
7e24e92a 6150##########################################
e86ecd4b
JQ
6151# End of CC checks
6152# After here, no more $cc or $ld runs
6153
d83414e1
MAL
6154write_c_skeleton
6155
1d728c39 6156if test "$gcov" = "yes" ; then
db5adeaa
PB
6157 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6158 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
b553a042 6159elif test "$fortify_source" = "yes" ; then
e600cdf3 6160 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
48e56d50
PB
6161elif test "$debug" = "no"; then
6162 CFLAGS="-O2 $CFLAGS"
e86ecd4b 6163fi
a316e378 6164
247724cb 6165if test "$have_asan" = "yes"; then
db5adeaa
PB
6166 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6167 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
d83414e1
MAL
6168 if test "$have_asan_iface_h" = "no" ; then
6169 echo "ASAN build enabled, but ASAN header missing." \
6170 "Without code annotation, the report may be inferior."
6171 elif test "$have_asan_iface_fiber" = "no" ; then
6172 echo "ASAN build enabled, but ASAN header is too old." \
6173 "Without code annotation, the report may be inferior."
6174 fi
247724cb
MAL
6175fi
6176if test "$have_ubsan" = "yes"; then
db5adeaa
PB
6177 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6178 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
247724cb
MAL
6179fi
6180
6542aa9c
PL
6181##########################################
6182# Do we have libnfs
6183if test "$libnfs" != "no" ; then
b7d769c9 6184 if $pkg_config --atleast-version=1.9.3 libnfs; then
6542aa9c
PL
6185 libnfs="yes"
6186 libnfs_libs=$($pkg_config --libs libnfs)
6542aa9c
PL
6187 else
6188 if test "$libnfs" = "yes" ; then
8efc9363 6189 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6542aa9c
PL
6190 fi
6191 libnfs="no"
6192 fi
6193fi
1d728c39 6194
3efac6eb
TG
6195##########################################
6196# Do we have libudev
6197if test "$libudev" != "no" ; then
6198 if $pkg_config libudev && test "$static" != "yes"; then
6199 libudev="yes"
6200 libudev_libs=$($pkg_config --libs libudev)
6201 else
6202 libudev="no"
6203 fi
6204fi
6205
6ca026cb
PM
6206# Now we've finished running tests it's OK to add -Werror to the compiler flags
6207if test "$werror" = "yes"; then
6208 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6209fi
6210
e86ecd4b
JQ
6211if test "$solaris" = "no" ; then
6212 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
db5adeaa 6213 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
e86ecd4b
JQ
6214 fi
6215fi
6216
94dd53c5
GH
6217# test if pod2man has --utf8 option
6218if pod2man --help | grep -q utf8; then
6219 POD2MAN="pod2man --utf8"
6220else
6221 POD2MAN="pod2man"
6222fi
6223
952afb71
BS
6224# Use ASLR, no-SEH and DEP if available
6225if test "$mingw32" = "yes" ; then
6226 for flag in --dynamicbase --no-seh --nxcompat; do
e9a3591f 6227 if ld_has $flag ; then
db5adeaa 6228 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
952afb71
BS
6229 fi
6230 done
6231fi
6232
7776ea6b
PMD
6233# Disable OpenBSD W^X if available
6234if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6235 cat > $TMPC <<EOF
6236 int main(void) { return 0; }
6237EOF
6238 wx_ldflags="-Wl,-z,wxneeded"
6239 if compile_prog "" "$wx_ldflags"; then
6240 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6241 fi
6242fi
6243
10ea68b3 6244qemu_confdir=$sysconfdir$confsuffix
e26110cf 6245qemu_moddir=$libdir$confsuffix
528ae5b8 6246qemu_datadir=$datadir$confsuffix
834574ea 6247qemu_localedir="$datadir/locale"
a8260d38 6248qemu_icondir="$datadir/icons"
67ea9546 6249qemu_desktopdir="$datadir/applications"
e7b45cc4 6250
e0580342
KR
6251# We can only support ivshmem if we have eventfd
6252if [ "$eventfd" = "yes" ]; then
6253 ivshmem=yes
6254fi
6255
4b1c11fd
DB
6256tools=""
6257if test "$want_tools" = "yes" ; then
72d277a7 6258 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
4b1c11fd
DB
6259 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6260 tools="qemu-nbd\$(EXESUF) $tools"
b1449edb
KR
6261 fi
6262 if [ "$ivshmem" = "yes" ]; then
a75eb03b 6263 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4b1c11fd 6264 fi
1b9d35f3
VP
6265 if [ "$curl" = "yes" ]; then
6266 tools="elf2dmp\$(EXESUF) $tools"
3fa2d384 6267 fi
4b1c11fd
DB
6268fi
6269if test "$softmmu" = yes ; then
b855f8d1 6270 if test "$linux" = yes; then
7e462613 6271 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
aabfd88d
AF
6272 virtfs=yes
6273 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6274 else
6275 if test "$virtfs" = yes; then
7e462613 6276 error_exit "VirtFS requires libcap-ng devel and libattr devel"
983eef5a 6277 fi
17500370 6278 virtfs=no
aabfd88d 6279 fi
fe8fc5ae
PB
6280 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6281 mpath=yes
6282 else
6283 if test "$mpath" = yes; then
6284 error_exit "Multipath requires libmpathpersist devel"
6285 fi
6286 mpath=no
6287 fi
b855f8d1
PB
6288 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6289 else
6290 if test "$virtfs" = yes; then
6291 error_exit "VirtFS is supported only on Linux"
6292 fi
6293 virtfs=no
fe8fc5ae
PB
6294 if test "$mpath" = yes; then
6295 error_exit "Multipath is supported only on Linux"
6296 fi
6297 mpath=no
17bff52b 6298 fi
ff69fd8c
LV
6299 if test "$xkbcommon" = "yes"; then
6300 tools="qemu-keymap\$(EXESUF) $tools"
6301 fi
6a021536 6302fi
9d6bc27b
MR
6303
6304# Probe for guest agent support/options
6305
e8ef31a3 6306if [ "$guest_agent" != "no" ]; then
a5125905
LV
6307 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6308 guest_agent=no
6309 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
0814465a 6310 tools="qemu-ga\$(EXESUF) $tools"
e8ef31a3
MT
6311 guest_agent=yes
6312 elif [ "$guest_agent" != yes ]; then
6313 guest_agent=no
6314 else
6315 error_exit "Guest agent is not supported on this platform"
ca35f780 6316 fi
00c705fb 6317fi
ca35f780 6318
9d6bc27b
MR
6319# Guest agent Window MSI package
6320
6321if test "$guest_agent" != yes; then
6322 if test "$guest_agent_msi" = yes; then
6323 error_exit "MSI guest agent package requires guest agent enabled"
6324 fi
6325 guest_agent_msi=no
6326elif test "$mingw32" != "yes"; then
6327 if test "$guest_agent_msi" = "yes"; then
6328 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6329 fi
6330 guest_agent_msi=no
6331elif ! has wixl; then
6332 if test "$guest_agent_msi" = "yes"; then
6333 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6334 fi
6335 guest_agent_msi=no
1a34904e
MR
6336else
6337 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6338 # disabled explicitly
6339 if test "$guest_agent_msi" != "no"; then
6340 guest_agent_msi=yes
6341 fi
9d6bc27b
MR
6342fi
6343
1a34904e 6344if test "$guest_agent_msi" = "yes"; then
9d6bc27b
MR
6345 if test "$guest_agent_with_vss" = "yes"; then
6346 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6347 fi
6348
6349 if test "$QEMU_GA_MANUFACTURER" = ""; then
6350 QEMU_GA_MANUFACTURER=QEMU
6351 fi
6352
6353 if test "$QEMU_GA_DISTRO" = ""; then
6354 QEMU_GA_DISTRO=Linux
6355 fi
6356
6357 if test "$QEMU_GA_VERSION" = ""; then
89138857 6358 QEMU_GA_VERSION=$(cat $source_path/VERSION)
9d6bc27b
MR
6359 fi
6360
89138857 6361 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
9d6bc27b
MR
6362
6363 case "$cpu" in
6364 x86_64)
6365 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6366 ;;
6367 i386)
6368 QEMU_GA_MSI_ARCH="-D Arch=32"
6369 ;;
6370 *)
6371 error_exit "CPU $cpu not supported for building installation package"
6372 ;;
6373 esac
6374fi
6375
ca35f780
PB
6376# Mac OS X ships with a broken assembler
6377roms=
e633a5c6
EB
6378if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6379 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6380 test "$softmmu" = yes ; then
e57218b6 6381 # Different host OS linkers have different ideas about the name of the ELF
c65d5e4e
BS
6382 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6383 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6384 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
e57218b6
PM
6385 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6386 ld_i386_emulation="$emu"
6387 roms="optionrom"
6388 break
6389 fi
6390 done
ca35f780 6391fi
ca35f780 6392
2e33c3f8 6393# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
9933c305 6394if test "$cpu" = "s390x" ; then
2e33c3f8
TH
6395 write_c_skeleton
6396 if compile_prog "-march=z900" ""; then
6397 roms="$roms s390-ccw"
6398 fi
9933c305
CB
6399fi
6400
964c6fa1 6401# Probe for the need for relocating the user-only binary.
92fe2ba8 6402if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
964c6fa1
RH
6403 textseg_addr=
6404 case "$cpu" in
479eb121
RH
6405 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6406 # ??? Rationale for choosing this address
964c6fa1
RH
6407 textseg_addr=0x60000000
6408 ;;
6409 mips)
479eb121
RH
6410 # A 256M aligned address, high in the address space, with enough
6411 # room for the code_gen_buffer above it before the stack.
6412 textseg_addr=0x60000000
964c6fa1
RH
6413 ;;
6414 esac
6415 if [ -n "$textseg_addr" ]; then
6416 cat > $TMPC <<EOF
6417 int main(void) { return 0; }
6418EOF
6419 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6420 if ! compile_prog "" "$textseg_ldflags"; then
6421 # In case ld does not support -Ttext-segment, edit the default linker
6422 # script via sed to set the .text start addr. This is needed on FreeBSD
6423 # at least.
92fe2ba8
PM
6424 if ! $ld --verbose >/dev/null 2>&1; then
6425 error_exit \
6426 "We need to link the QEMU user mode binaries at a" \
6427 "specific text address. Unfortunately your linker" \
6428 "doesn't support either the -Ttext-segment option or" \
6429 "printing the default linker script with --verbose." \
6430 "If you don't want the user mode binaries, pass the" \
6431 "--disable-user option to configure."
6432 fi
6433
964c6fa1
RH
6434 $ld --verbose | sed \
6435 -e '1,/==================================================/d' \
6436 -e '/==================================================/,$d' \
6437 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6438 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6439 textseg_ldflags="-Wl,-T../config-host.ld"
6440 fi
6441 fi
6442fi
6443
11cde1c8
BD
6444# Check that the C++ compiler exists and works with the C compiler.
6445# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6446if has $cxx; then
6447 cat > $TMPC <<EOF
6448int c_function(void);
6449int main(void) { return c_function(); }
6450EOF
6451
6452 compile_object
6453
6454 cat > $TMPCXX <<EOF
6455extern "C" {
6456 int c_function(void);
6457}
6458int c_function(void) { return 42; }
6459EOF
6460
6461 update_cxxflags
6462
db5adeaa 6463 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
11cde1c8
BD
6464 # C++ compiler $cxx works ok with C compiler $cc
6465 :
6466 else
6467 echo "C++ compiler $cxx does not work with C compiler $cc"
6468 echo "Disabling C++ specific optional code"
6469 cxx=
6470 fi
6471else
6472 echo "No C++ compiler available; disabling C++ specific optional code"
6473 cxx=
6474fi
6475
02d34f62
CR
6476echo_version() {
6477 if test "$1" = "yes" ; then
6478 echo "($2)"
6479 fi
6480}
6481
50e12060
JK
6482# prepend pixman and ftd flags after all config tests are done
6483QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
8a99e9a3 6484QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
50e12060 6485libs_softmmu="$pixman_libs $libs_softmmu"
5ca9388a 6486
43ce4dfe 6487echo "Install prefix $prefix"
89138857 6488echo "BIOS directory $(eval echo $qemu_datadir)"
3d5eecab 6489echo "firmware path $(eval echo $firmwarepath)"
89138857
SW
6490echo "binary directory $(eval echo $bindir)"
6491echo "library directory $(eval echo $libdir)"
6492echo "module directory $(eval echo $qemu_moddir)"
6493echo "libexec directory $(eval echo $libexecdir)"
6494echo "include directory $(eval echo $includedir)"
6495echo "config directory $(eval echo $sysconfdir)"
11d9f695 6496if test "$mingw32" = "no" ; then
89138857
SW
6497echo "local state directory $(eval echo $local_statedir)"
6498echo "Manual directory $(eval echo $mandir)"
43ce4dfe 6499echo "ELF interp prefix $interp_prefix"
5a699bbb
LE
6500else
6501echo "local state directory queried at runtime"
d9840e25 6502echo "Windows SDK $win_sdk"
11d9f695 6503fi
bc4486fb 6504echo "Build directory $(pwd)"
5a67135a 6505echo "Source path $source_path"
cc84d63a 6506echo "GIT binary $git"
aef45d51 6507echo "GIT submodules $git_submodules"
43ce4dfe 6508echo "C compiler $cc"
83469015 6509echo "Host C compiler $host_cc"
83f73fce 6510echo "C++ compiler $cxx"
3c4a4d0d 6511echo "Objective-C compiler $objcc"
45d285ab 6512echo "ARFLAGS $ARFLAGS"
0c439cbf 6513echo "CFLAGS $CFLAGS"
a558ee17 6514echo "QEMU_CFLAGS $QEMU_CFLAGS"
8a99e9a3 6515echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
43ce4dfe 6516echo "make $make"
6a882643 6517echo "install $install"
755ee70f 6518echo "python $python ($python_version)"
2eb054c2
PM
6519if test "$docs" != "no"; then
6520 echo "sphinx-build $sphinx_build"
6521fi
675b9b53
MAL
6522echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6523if test "$slirp" != "no" ; then
e2d8830e
BS
6524 echo "smbd $smbd"
6525fi
17969268 6526echo "module support $modules"
43ce4dfe 6527echo "host CPU $cpu"
de83cd02 6528echo "host big endian $bigendian"
97a847bc 6529echo "target list $target_list"
43ce4dfe 6530echo "gprof enabled $gprof"
03b4fe7d 6531echo "sparse enabled $sparse"
1625af87 6532echo "strip binaries $strip_opt"
05c2a3e7 6533echo "profiler $profiler"
43ce4dfe 6534echo "static build $static"
5b0753e0
FB
6535if test "$darwin" = "yes" ; then
6536 echo "Cocoa support $cocoa"
6537fi
89138857 6538echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
a442fe2f 6539echo "SDL image support $sdl_image"
89138857 6540echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
925a0400 6541echo "GTK GL support $gtk_gl"
89138857 6542echo "VTE support $vte $(echo_version $vte $vteversion)"
a1c5e949 6543echo "TLS priority $tls_priority"
ddbb0d09 6544echo "GNUTLS support $gnutls"
91bfcdb0 6545echo "libgcrypt $gcrypt"
e0576942
DB
6546if test "$gcrypt" = "yes"
6547then
6548 echo " hmac $gcrypt_hmac"
6549 echo " XTS $gcrypt_xts"
6550fi
89138857 6551echo "nettle $nettle $(echo_version $nettle $nettle_version)"
dc2207af
DB
6552if test "$nettle" = "yes"
6553then
6554 echo " XTS $nettle_xts"
6555fi
9a2fd434 6556echo "libtasn1 $tasn1"
8953caf3 6557echo "PAM $auth_pam"
e08bb301 6558echo "iconv support $iconv"
4d3b6f6e 6559echo "curses support $curses"
47479c55 6560echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
769ce76d 6561echo "curl support $curl"
67b915a5 6562echo "mingw32 support $mingw32"
0c58ac1c 6563echo "Audio drivers $audio_drv_list"
b64ec4e4
FZ
6564echo "Block whitelist (rw) $block_drv_rw_whitelist"
6565echo "Block whitelist (ro) $block_drv_ro_whitelist"
983eef5a 6566echo "VirtFS support $virtfs"
fe8fc5ae 6567echo "Multipath support $mpath"
821601ea
JS
6568echo "VNC support $vnc"
6569if test "$vnc" = "yes" ; then
821601ea
JS
6570 echo "VNC SASL support $vnc_sasl"
6571 echo "VNC JPEG support $vnc_jpeg"
6572 echo "VNC PNG support $vnc_png"
821601ea 6573fi
e37630ca 6574echo "xen support $xen"
3996e85c
PD
6575if test "$xen" = "yes" ; then
6576 echo "xen ctrl version $xen_ctrl_version"
6577fi
2e4d9fb1 6578echo "brlapi support $brlapi"
a25dba17 6579echo "Documentation $docs"
40d6444e 6580echo "PIE $pie"
8a16d273 6581echo "vde support $vde"
58952137 6582echo "netmap support $netmap"
5c6c3a6c 6583echo "Linux AIO support $linux_aio"
c10dd856 6584echo "Linux io_uring support $linux_io_uring"
758e8e38 6585echo "ATTR/XATTR support $attr"
77755340 6586echo "Install blobs $blobs"
b31a0277 6587echo "KVM support $kvm"
b0cb0a66 6588echo "HAX support $hax"
c97d6d2c 6589echo "HVF support $hvf"
d661d9a4 6590echo "WHPX support $whpx"
b3f6ea7e
PB
6591echo "TCG support $tcg"
6592if test "$tcg" = "yes" ; then
6593 echo "TCG debug enabled $debug_tcg"
6594 echo "TCG interpreter $tcg_interpreter"
6595fi
5a22ab71 6596echo "malloc trim support $malloc_trim"
2da776db 6597echo "RDMA support $rdma"
21ab34c9 6598echo "PVRDMA support $pvrdma"
f652e6af 6599echo "fdt support $fdt"
a40161cb 6600echo "membarrier $membarrier"
ceb42de8 6601echo "preadv support $preadv"
5f6b9e8f 6602echo "fdatasync $fdatasync"
e78815a5
AF
6603echo "madvise $madvise"
6604echo "posix_madvise $posix_madvise"
9bc5a719 6605echo "posix_memalign $posix_memalign"
47e98658 6606echo "libcap-ng support $cap_ng"
d5970055 6607echo "vhost-net support $vhost_net"
042cea27 6608echo "vhost-crypto support $vhost_crypto"
5e9be92d 6609echo "vhost-scsi support $vhost_scsi"
fc0b9b0e 6610echo "vhost-vsock support $vhost_vsock"
e6a74868 6611echo "vhost-user support $vhost_user"
98fc1ada 6612echo "vhost-user-fs support $vhost_user_fs"
5b808275 6613echo "Trace backends $trace_backends"
713572a7 6614if have_backend "simple"; then
9410b56c 6615echo "Trace output file $trace_file-<pid>"
e00e36fb 6616fi
89138857 6617echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
f27aaf4b 6618echo "rbd support $rbd"
dce512de 6619echo "xfsctl support $xfs"
7b02f544 6620echo "smartcard support $smartcard"
2b2325ff 6621echo "libusb $libusb"
69354a83 6622echo "usb net redir $usb_redir"
da076ffe 6623echo "OpenGL support $opengl"
014cb152 6624echo "OpenGL dmabufs $opengl_dmabuf"
c589b249 6625echo "libiscsi support $libiscsi"
6542aa9c 6626echo "libnfs support $libnfs"
d138cee9 6627echo "build guest agent $guest_agent"
d9840e25 6628echo "QGA VSS support $guest_agent_with_vss"
50cbebb9 6629echo "QGA w32 disk info $guest_agent_ntddscsi"
4c875d89 6630echo "QGA MSI support $guest_agent_msi"
f794573e 6631echo "seccomp support $seccomp"
7c2acc70 6632echo "coroutine backend $coroutine"
70c60c08 6633echo "coroutine pool $coroutine_pool"
7d992e4d 6634echo "debug stack usage $debug_stack_usage"
ba59fb77 6635echo "mutex debugging $debug_mutex"
f0d92b56 6636echo "crypto afalg $crypto_afalg"
eb100396 6637echo "GlusterFS support $glusterfs"
1d728c39
BS
6638echo "gcov $gcov_tool"
6639echo "gcov enabled $gcov"
ab214c29 6640echo "TPM support $tpm"
b10d49d7 6641echo "libssh support $libssh"
3556c233 6642echo "QOM debugging $qom_cast_debug"
ed1701c6 6643echo "Live block migration $live_block_migration"
607dacd0
QN
6644echo "lzo support $lzo"
6645echo "snappy support $snappy"
6b383c08 6646echo "bzip2 support $bzip2"
83bc1f97 6647echo "lzfse support $lzfse"
a99d57bb 6648echo "NUMA host support $numa"
ed279a06 6649echo "libxml2 $libxml2"
2847b469 6650echo "tcmalloc support $tcmalloc"
7b01cb97 6651echo "jemalloc support $jemalloc"
99f2dbd3 6652echo "avx2 optimization $avx2_opt"
a6b1d4c0 6653echo "replication support $replication"
da92c3ff 6654echo "VxHS block device $vxhs"
2f740136
JC
6655echo "bochs support $bochs"
6656echo "cloop support $cloop"
6657echo "dmg support $dmg"
6658echo "qcow v1 support $qcow1"
6659echo "vdi support $vdi"
6660echo "vvfat support $vvfat"
6661echo "qed support $qed"
6662echo "parallels support $parallels"
6663echo "sheepdog support $sheepdog"
8ca80760 6664echo "capstone $capstone"
17824406 6665echo "libpmem support $libpmem"
3efac6eb 6666echo "libudev $libudev"
f3494749 6667echo "default devices $default_devices"
40e8c6f4 6668echo "plugin support $plugins"
67b915a5 6669
898be3e0
PM
6670if test "$supported_cpu" = "no"; then
6671 echo
6672 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6673 echo
6674 echo "CPU host architecture $cpu support is not currently maintained."
6675 echo "The QEMU project intends to remove support for this host CPU in"
6676 echo "a future release if nobody volunteers to maintain it and to"
6677 echo "provide a build host for our continuous integration setup."
6678 echo "configure has succeeded and you can continue to build, but"
6679 echo "if you care about QEMU on this platform you should contact"
6680 echo "us upstream at [email protected]."
6681fi
6682
6683if test "$supported_os" = "no"; then
6684 echo
6685 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6686 echo
c50126aa
PM
6687 echo "Host OS $targetos support is not currently maintained."
6688 echo "The QEMU project intends to remove support for this host OS in"
898be3e0
PM
6689 echo "a future release if nobody volunteers to maintain it and to"
6690 echo "provide a build host for our continuous integration setup."
6691 echo "configure has succeeded and you can continue to build, but"
6692 echo "if you care about QEMU on this platform you should contact"
6693 echo "us upstream at [email protected]."
6694fi
6695
98ec69ac 6696config_host_mak="config-host.mak"
98ec69ac 6697
dbd99ae3
SW
6698echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6699
98ec69ac 6700echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 6701echo >> $config_host_mak
98ec69ac 6702
e6c3b0f7 6703echo all: >> $config_host_mak
99d7cc75
PB
6704echo "prefix=$prefix" >> $config_host_mak
6705echo "bindir=$bindir" >> $config_host_mak
3aa5d2be 6706echo "libdir=$libdir" >> $config_host_mak
8bf188aa 6707echo "libexecdir=$libexecdir" >> $config_host_mak
0f94d6da 6708echo "includedir=$includedir" >> $config_host_mak
99d7cc75 6709echo "mandir=$mandir" >> $config_host_mak
99d7cc75 6710echo "sysconfdir=$sysconfdir" >> $config_host_mak
22d07038 6711echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
9afa52ce 6712echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
3d5eecab 6713echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
9afa52ce 6714echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
e26110cf 6715echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5a699bbb
LE
6716if test "$mingw32" = "no" ; then
6717 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6718fi
f354b1a1 6719echo "qemu_helperdir=$libexecdir" >> $config_host_mak
834574ea 6720echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
a8260d38 6721echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
67ea9546 6722echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
02f9135b 6723echo "libs_cpu=$libs_cpu" >> $config_host_mak
f544a488 6724echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
cc84d63a 6725echo "GIT=$git" >> $config_host_mak
aef45d51 6726echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
f62bbee5 6727echo "GIT_UPDATE=$git_update" >> $config_host_mak
804edf29 6728
98ec69ac 6729echo "ARCH=$ARCH" >> $config_host_mak
727e5283 6730
f3494749
PB
6731if test "$default_devices" = "yes" ; then
6732 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6733else
6734 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6735fi
f8393946 6736if test "$debug_tcg" = "yes" ; then
2358a494 6737 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 6738fi
1625af87 6739if test "$strip_opt" = "yes" ; then
52ba784d 6740 echo "STRIP=${strip}" >> $config_host_mak
1625af87 6741fi
7d13299d 6742if test "$bigendian" = "yes" ; then
e2542fe2 6743 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 6744fi
67b915a5 6745if test "$mingw32" = "yes" ; then
98ec69ac 6746 echo "CONFIG_WIN32=y" >> $config_host_mak
89138857 6747 rc_version=$(cat $source_path/VERSION)
9fe6de94
BS
6748 version_major=${rc_version%%.*}
6749 rc_version=${rc_version#*.}
6750 version_minor=${rc_version%%.*}
6751 rc_version=${rc_version#*.}
6752 version_subminor=${rc_version%%.*}
6753 version_micro=0
6754 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6755 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
d9840e25
TS
6756 if test "$guest_agent_with_vss" = "yes" ; then
6757 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 6758 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
6759 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6760 fi
50cbebb9 6761 if test "$guest_agent_ntddscsi" = "yes" ; then
76dc75ca 6762 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
50cbebb9 6763 fi
1a34904e 6764 if test "$guest_agent_msi" = "yes"; then
d661d9a4 6765 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
9dacf32d
YH
6766 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6767 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6768 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6769 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6770 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6771 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6772 fi
210fa556 6773else
35f4df27 6774 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
6775fi
6776
6777if test "$linux" = "yes" ; then
6778 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 6779fi
128ab2ff 6780
83fb7adf 6781if test "$darwin" = "yes" ; then
98ec69ac 6782 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 6783fi
b29fe3ed 6784
ec530c81 6785if test "$solaris" = "yes" ; then
98ec69ac 6786 echo "CONFIG_SOLARIS=y" >> $config_host_mak
ec530c81 6787fi
179cf400
AF
6788if test "$haiku" = "yes" ; then
6789 echo "CONFIG_HAIKU=y" >> $config_host_mak
6790fi
97a847bc 6791if test "$static" = "yes" ; then
98ec69ac 6792 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 6793fi
1ba16968 6794if test "$profiler" = "yes" ; then
2358a494 6795 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 6796fi
c932ce31
PB
6797if test "$want_tools" = "yes" ; then
6798 echo "CONFIG_TOOLS=y" >> $config_host_mak
6799fi
675b9b53 6800if test "$slirp" != "no"; then
98ec69ac 6801 echo "CONFIG_SLIRP=y" >> $config_host_mak
e2d8830e 6802 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
675b9b53
MAL
6803 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6804 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6805fi
7c57bdd8 6806if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
3b8593ee 6807 echo "config-host.h: slirp/all" >> $config_host_mak
c20709aa 6808fi
8a16d273 6809if test "$vde" = "yes" ; then
98ec69ac 6810 echo "CONFIG_VDE=y" >> $config_host_mak
e2ad6f16 6811 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
8a16d273 6812fi
58952137
VM
6813if test "$netmap" = "yes" ; then
6814 echo "CONFIG_NETMAP=y" >> $config_host_mak
6815fi
015a33bd
GA
6816if test "$l2tpv3" = "yes" ; then
6817 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6818fi
4cc600d2
PB
6819if test "$gprof" = "yes" ; then
6820 echo "CONFIG_GPROF=y" >> $config_host_mak
6821fi
47e98658 6822if test "$cap_ng" = "yes" ; then
a358bca2 6823 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
47e98658 6824fi
2358a494 6825echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 6826for drv in $audio_drv_list; do
1ef1ec2a 6827 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
ce3dc033 6828 case "$drv" in
051c7d5c 6829 alsa | oss | pa | sdl)
ce3dc033
GH
6830 echo "$def=m" >> $config_host_mak ;;
6831 *)
6832 echo "$def=y" >> $config_host_mak ;;
6833 esac
0c58ac1c 6834done
b1149911
FZ
6835echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6836echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6837echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6838echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6839echo "OSS_LIBS=$oss_libs" >> $config_host_mak
d5631638 6840if test "$audio_win_int" = "yes" ; then
6841 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6842fi
b64ec4e4
FZ
6843echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6844echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
821601ea
JS
6845if test "$vnc" = "yes" ; then
6846 echo "CONFIG_VNC=y" >> $config_host_mak
6847fi
2f9606b3 6848if test "$vnc_sasl" = "yes" ; then
98ec69ac 6849 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
2f9606b3 6850fi
821601ea 6851if test "$vnc_jpeg" = "yes" ; then
2f6f5c7a 6852 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
2f6f5c7a 6853fi
821601ea 6854if test "$vnc_png" = "yes" ; then
efe556ad 6855 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
efe556ad 6856fi
6a021536
GH
6857if test "$xkbcommon" = "yes" ; then
6858 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6859 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6860fi
dce512de
CH
6861if test "$xfs" = "yes" ; then
6862 echo "CONFIG_XFS=y" >> $config_host_mak
6863fi
89138857 6864qemu_version=$(head $source_path/VERSION)
98ec69ac 6865echo "VERSION=$qemu_version" >>$config_host_mak
2358a494 6866echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 6867echo "SRC_PATH=$source_path" >> $config_host_mak
2b1f35b9 6868echo "TARGET_DIRS=$target_list" >> $config_host_mak
a25dba17 6869if [ "$docs" = "yes" ] ; then
98ec69ac 6870 echo "BUILD_DOCS=yes" >> $config_host_mak
cc8ae6de 6871fi
17969268 6872if test "$modules" = "yes"; then
e26110cf
FZ
6873 # $shacmd can generate a hash started with digit, which the compiler doesn't
6874 # like as an symbol. So prefix it with an underscore
89138857 6875 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
17969268
FZ
6876 echo "CONFIG_MODULES=y" >> $config_host_mak
6877fi
e633a5c6 6878if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
8781595b
GH
6879 echo "CONFIG_X11=y" >> $config_host_mak
6880 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6881 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6882fi
1ac88f28 6883if test "$sdl" = "yes" ; then
96400a14 6884 echo "CONFIG_SDL=m" >> $config_host_mak
1ac88f28 6885 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
8ecc89f6 6886 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
a442fe2f
DB
6887 if test "$sdl_image" = "yes" ; then
6888 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6889 fi
49ecc3fa
FB
6890fi
6891if test "$cocoa" = "yes" ; then
98ec69ac 6892 echo "CONFIG_COCOA=y" >> $config_host_mak
4d3b6f6e 6893fi
e08bb301
ST
6894if test "$iconv" = "yes" ; then
6895 echo "CONFIG_ICONV=y" >> $config_host_mak
6896 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6897 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6898fi
4d3b6f6e 6899if test "$curses" = "yes" ; then
2373f7d5
GH
6900 echo "CONFIG_CURSES=m" >> $config_host_mak
6901 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6902 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
49ecc3fa 6903fi
099d6b0f 6904if test "$pipe2" = "yes" ; then
2358a494 6905 echo "CONFIG_PIPE2=y" >> $config_host_mak
099d6b0f 6906fi
40ff6d7e
KW
6907if test "$accept4" = "yes" ; then
6908 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6909fi
3ce34dfb 6910if test "$splice" = "yes" ; then
2358a494 6911 echo "CONFIG_SPLICE=y" >> $config_host_mak
3ce34dfb 6912fi
c2882b96
RV
6913if test "$eventfd" = "yes" ; then
6914 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6915fi
751bcc39
MAL
6916if test "$memfd" = "yes" ; then
6917 echo "CONFIG_MEMFD=y" >> $config_host_mak
6918fi
955727d2
CT
6919if test "$have_usbfs" = "yes" ; then
6920 echo "CONFIG_USBFS=y" >> $config_host_mak
6921fi
d0927938
UH
6922if test "$fallocate" = "yes" ; then
6923 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6924fi
3d4fa43e
KK
6925if test "$fallocate_punch_hole" = "yes" ; then
6926 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6927fi
b953f075
DL
6928if test "$fallocate_zero_range" = "yes" ; then
6929 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6930fi
ed911435
KW
6931if test "$posix_fallocate" = "yes" ; then
6932 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6933fi
c727f47d
PM
6934if test "$sync_file_range" = "yes" ; then
6935 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6936fi
dace20dc
PM
6937if test "$fiemap" = "yes" ; then
6938 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6939fi
d0927938
UH
6940if test "$dup3" = "yes" ; then
6941 echo "CONFIG_DUP3=y" >> $config_host_mak
6942fi
4e0c6529
AB
6943if test "$ppoll" = "yes" ; then
6944 echo "CONFIG_PPOLL=y" >> $config_host_mak
6945fi
cd758dd0
AB
6946if test "$prctl_pr_set_timerslack" = "yes" ; then
6947 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6948fi
3b6edd16
PM
6949if test "$epoll" = "yes" ; then
6950 echo "CONFIG_EPOLL=y" >> $config_host_mak
6951fi
6952if test "$epoll_create1" = "yes" ; then
6953 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6954fi
a8fd1aba
PM
6955if test "$sendfile" = "yes" ; then
6956 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6957fi
51834341
RV
6958if test "$timerfd" = "yes" ; then
6959 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6960fi
9af5c906
RV
6961if test "$setns" = "yes" ; then
6962 echo "CONFIG_SETNS=y" >> $config_host_mak
6963fi
38860a03
AM
6964if test "$clock_adjtime" = "yes" ; then
6965 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6966fi
5a03cd00
AM
6967if test "$syncfs" = "yes" ; then
6968 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6969fi
db37dd89
AM
6970if test "$kcov" = "yes" ; then
6971 echo "CONFIG_KCOV=y" >> $config_host_mak
6972fi
3b3f24ad 6973if test "$inotify" = "yes" ; then
2358a494 6974 echo "CONFIG_INOTIFY=y" >> $config_host_mak
3b3f24ad 6975fi
c05c7a73
RV
6976if test "$inotify1" = "yes" ; then
6977 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6978fi
401bc051
PM
6979if test "$sem_timedwait" = "yes" ; then
6980 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6981fi
5c99fa37
KF
6982if test "$strchrnul" = "yes" ; then
6983 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6984fi
8a792b03
JX
6985if test "$st_atim" = "yes" ; then
6986 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
6987fi
6ae9a1f4
JQ
6988if test "$byteswap_h" = "yes" ; then
6989 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6990fi
6991if test "$bswap_h" = "yes" ; then
6992 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6993fi
769ce76d 6994if test "$curl" = "yes" ; then
d3399d7c 6995 echo "CONFIG_CURL=m" >> $config_host_mak
b1d5a277 6996 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6ebc91e5 6997 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
769ce76d 6998fi
2e4d9fb1 6999if test "$brlapi" = "yes" ; then
98ec69ac 7000 echo "CONFIG_BRLAPI=y" >> $config_host_mak
8eca2889 7001 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
2e4d9fb1 7002fi
a4ccabcf 7003if test "$gtk" = "yes" ; then
e0fb129c 7004 echo "CONFIG_GTK=m" >> $config_host_mak
a4ccabcf 7005 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
014cb152 7006 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
925a0400
GH
7007 if test "$gtk_gl" = "yes" ; then
7008 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7009 fi
bbbf9bfb 7010fi
f876b765
MAL
7011if test "$gio" = "yes" ; then
7012 echo "CONFIG_GIO=y" >> $config_host_mak
7013 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7014 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
25a97a56 7015 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
f876b765 7016fi
a1c5e949 7017echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
ddbb0d09
DB
7018if test "$gnutls" = "yes" ; then
7019 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7020fi
91bfcdb0
DB
7021if test "$gcrypt" = "yes" ; then
7022 echo "CONFIG_GCRYPT=y" >> $config_host_mak
1f923c70
LM
7023 if test "$gcrypt_hmac" = "yes" ; then
7024 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7025 fi
62893b67 7026fi
91bfcdb0
DB
7027if test "$nettle" = "yes" ; then
7028 echo "CONFIG_NETTLE=y" >> $config_host_mak
becaeb72 7029 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
ed754746 7030fi
e0576942
DB
7031if test "$qemu_private_xts" = "yes" ; then
7032 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7033fi
9a2fd434
DB
7034if test "$tasn1" = "yes" ; then
7035 echo "CONFIG_TASN1=y" >> $config_host_mak
7036fi
8953caf3
DB
7037if test "$auth_pam" = "yes" ; then
7038 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7039fi
559607ea
DB
7040if test "$have_ifaddrs_h" = "yes" ; then
7041 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7042fi
6b39b063
EB
7043if test "$have_broken_size_max" = "yes" ; then
7044 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7045fi
277abf15
JV
7046
7047# Work around a system header bug with some kernel/XFS header
7048# versions where they both try to define 'struct fsxattr':
7049# xfs headers will not try to redefine structs from linux headers
7050# if this macro is set.
7051if test "$have_fsxattr" = "yes" ; then
7052 echo "HAVE_FSXATTR=y" >> $config_host_mak
7053fi
1efad060
FZ
7054if test "$have_copy_file_range" = "yes" ; then
7055 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7056fi
bbbf9bfb
SW
7057if test "$vte" = "yes" ; then
7058 echo "CONFIG_VTE=y" >> $config_host_mak
a4ccabcf 7059 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
e0fb129c 7060 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
a4ccabcf 7061fi
9d9e1521
GH
7062if test "$virglrenderer" = "yes" ; then
7063 echo "CONFIG_VIRGL=y" >> $config_host_mak
7064 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7065 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7066fi
e37630ca 7067if test "$xen" = "yes" ; then
6dbd588a 7068 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 7069 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
e37630ca 7070fi
5c6c3a6c
CH
7071if test "$linux_aio" = "yes" ; then
7072 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7073fi
c10dd856
AM
7074if test "$linux_io_uring" = "yes" ; then
7075 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7076 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7077 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7078fi
758e8e38
VJ
7079if test "$attr" = "yes" ; then
7080 echo "CONFIG_ATTR=y" >> $config_host_mak
7081fi
4f26f2b6
AK
7082if test "$libattr" = "yes" ; then
7083 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7084fi
983eef5a
MI
7085if test "$virtfs" = "yes" ; then
7086 echo "CONFIG_VIRTFS=y" >> $config_host_mak
758e8e38 7087fi
fe8fc5ae
PB
7088if test "$mpath" = "yes" ; then
7089 echo "CONFIG_MPATH=y" >> $config_host_mak
1b0578f5
MOA
7090 if test "$mpathpersist_new_api" = "yes"; then
7091 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7092 fi
fe8fc5ae 7093fi
5e9be92d
NB
7094if test "$vhost_scsi" = "yes" ; then
7095 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7096fi
af3bba76
PB
7097if test "$vhost_net" = "yes" ; then
7098 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7099fi
7100if test "$vhost_net_user" = "yes" ; then
56f41de7 7101 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
03ce5744 7102fi
042cea27
GA
7103if test "$vhost_crypto" = "yes" ; then
7104 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7105fi
fc0b9b0e
SH
7106if test "$vhost_vsock" = "yes" ; then
7107 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7108fi
299e6f19
PB
7109if test "$vhost_kernel" = "yes" ; then
7110 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7111fi
e6a74868
MAL
7112if test "$vhost_user" = "yes" ; then
7113 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7114fi
98fc1ada
DDAG
7115if test "$vhost_user_fs" = "yes" ; then
7116 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7117fi
77755340 7118if test "$blobs" = "yes" ; then
98ec69ac 7119 echo "INSTALL_BLOBS=yes" >> $config_host_mak
77755340 7120fi
bf9298b9 7121if test "$iovec" = "yes" ; then
2358a494 7122 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 7123fi
ceb42de8 7124if test "$preadv" = "yes" ; then
2358a494 7125 echo "CONFIG_PREADV=y" >> $config_host_mak
ceb42de8 7126fi
e3971d61 7127if test "$fdt" != "no" ; then
3f0855b1 7128 echo "CONFIG_FDT=y" >> $config_host_mak
f652e6af 7129fi
a40161cb
PB
7130if test "$membarrier" = "yes" ; then
7131 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7132fi
dcc38d1c
MT
7133if test "$signalfd" = "yes" ; then
7134 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7135fi
d339d766
RJ
7136if test "$optreset" = "yes" ; then
7137 echo "HAVE_OPTRESET=y" >> $config_host_mak
7138fi
b3f6ea7e
PB
7139if test "$tcg" = "yes"; then
7140 echo "CONFIG_TCG=y" >> $config_host_mak
7141 if test "$tcg_interpreter" = "yes" ; then
7142 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7143 fi
9195b2c2 7144fi
5f6b9e8f
BS
7145if test "$fdatasync" = "yes" ; then
7146 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7147fi
e78815a5
AF
7148if test "$madvise" = "yes" ; then
7149 echo "CONFIG_MADVISE=y" >> $config_host_mak
7150fi
7151if test "$posix_madvise" = "yes" ; then
7152 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7153fi
9bc5a719
AG
7154if test "$posix_memalign" = "yes" ; then
7155 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7156fi
97a847bc 7157
cd4ec0b4
GH
7158if test "$spice" = "yes" ; then
7159 echo "CONFIG_SPICE=y" >> $config_host_mak
7160fi
36707144 7161
7b02f544
MAL
7162if test "$smartcard" = "yes" ; then
7163 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7b62bf5a
FZ
7164 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7165 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
111a38b0
RR
7166fi
7167
2b2325ff
GH
7168if test "$libusb" = "yes" ; then
7169 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
b878b652
FZ
7170 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7171 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
2b2325ff
GH
7172fi
7173
69354a83
HG
7174if test "$usb_redir" = "yes" ; then
7175 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
cc7923fc
FZ
7176 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7177 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
69354a83
HG
7178fi
7179
da076ffe
GH
7180if test "$opengl" = "yes" ; then
7181 echo "CONFIG_OPENGL=y" >> $config_host_mak
7182 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
014cb152
GH
7183 if test "$opengl_dmabuf" = "yes" ; then
7184 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7185 fi
20ff075b
MW
7186fi
7187
d52c454a
MAL
7188if test "$gbm" = "yes" ; then
7189 echo "CONFIG_GBM=y" >> $config_host_mak
7190 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7191 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7192fi
7193
7194
5a22ab71
YZ
7195if test "$malloc_trim" = "yes" ; then
7196 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7197fi
7198
99f2dbd3
LL
7199if test "$avx2_opt" = "yes" ; then
7200 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7201fi
7202
607dacd0
QN
7203if test "$lzo" = "yes" ; then
7204 echo "CONFIG_LZO=y" >> $config_host_mak
7205fi
7206
7207if test "$snappy" = "yes" ; then
7208 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7209fi
7210
6b383c08
PW
7211if test "$bzip2" = "yes" ; then
7212 echo "CONFIG_BZIP2=y" >> $config_host_mak
7213 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7214fi
7215
83bc1f97
JF
7216if test "$lzfse" = "yes" ; then
7217 echo "CONFIG_LZFSE=y" >> $config_host_mak
7218 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7219fi
7220
c589b249 7221if test "$libiscsi" = "yes" ; then
d3399d7c 7222 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6ebc91e5
FZ
7223 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7224 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
c589b249
RS
7225fi
7226
6542aa9c 7227if test "$libnfs" = "yes" ; then
4be4879f
CL
7228 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7229 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6542aa9c
PL
7230fi
7231
f794573e
EO
7232if test "$seccomp" = "yes"; then
7233 echo "CONFIG_SECCOMP=y" >> $config_host_mak
c3883e1f
FZ
7234 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7235 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
f794573e
EO
7236fi
7237
83fb7adf 7238# XXX: suppress that
7d3505c5 7239if [ "$bsd" = "yes" ] ; then
2358a494 7240 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
7241fi
7242
4d9310f4
DB
7243if test "$localtime_r" = "yes" ; then
7244 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7245fi
3556c233
PB
7246if test "$qom_cast_debug" = "yes" ; then
7247 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7248fi
f27aaf4b 7249if test "$rbd" = "yes" ; then
d3399d7c 7250 echo "CONFIG_RBD=m" >> $config_host_mak
6ebc91e5
FZ
7251 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7252 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
d0e2fce5
AK
7253fi
7254
7c2acc70 7255echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
7256if test "$coroutine_pool" = "yes" ; then
7257 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7258else
7259 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7260fi
20ff6c80 7261
7d992e4d
PL
7262if test "$debug_stack_usage" = "yes" ; then
7263 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7264fi
7265
f0d92b56
LM
7266if test "$crypto_afalg" = "yes" ; then
7267 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7268fi
7269
d2042378
AK
7270if test "$open_by_handle_at" = "yes" ; then
7271 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7272fi
7273
e06a765e
HPB
7274if test "$linux_magic_h" = "yes" ; then
7275 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
8ab1bf12
LC
7276fi
7277
cc6e3ca9
GH
7278if test "$pragma_diagnostic_available" = "yes" ; then
7279 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
06d71fa1
PM
7280fi
7281
3f4349dc
KW
7282if test "$valgrind_h" = "yes" ; then
7283 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7284fi
7285
d83414e1
MAL
7286if test "$have_asan_iface_fiber" = "yes" ; then
7287 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7288fi
7289
8ab1bf12
LC
7290if test "$has_environ" = "yes" ; then
7291 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
e06a765e
HPB
7292fi
7293
76a347e1
RH
7294if test "$cpuid_h" = "yes" ; then
7295 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7296fi
7297
f540166b
RH
7298if test "$int128" = "yes" ; then
7299 echo "CONFIG_INT128=y" >> $config_host_mak
7300fi
7301
7ebee43e
RH
7302if test "$atomic128" = "yes" ; then
7303 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7304fi
7305
e6cd4bb5
RH
7306if test "$cmpxchg128" = "yes" ; then
7307 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7308fi
7309
df79b996
RH
7310if test "$atomic64" = "yes" ; then
7311 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7312fi
7313
db432672
RH
7314if test "$vector16" = "yes" ; then
7315 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7316fi
7317
db8aaae8
RH
7318if test "$attralias" = "yes" ; then
7319 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7320fi
7321
1e6e9aca
RH
7322if test "$getauxval" = "yes" ; then
7323 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7324fi
7325
eb100396 7326if test "$glusterfs" = "yes" ; then
d3399d7c 7327 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6ebc91e5
FZ
7328 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7329 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
0c14fb47
BR
7330fi
7331
d85fa9eb
JC
7332if test "$glusterfs_xlator_opt" = "yes" ; then
7333 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7334fi
7335
0c14fb47
BR
7336if test "$glusterfs_discard" = "yes" ; then
7337 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
eb100396 7338fi
e06a765e 7339
df3a429a
NV
7340if test "$glusterfs_fallocate" = "yes" ; then
7341 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7342fi
7343
7c815372
BR
7344if test "$glusterfs_zerofill" = "yes" ; then
7345 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7346fi
7347
e014dbe7
PKK
7348if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7349 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7350fi
7351
0e3b891f
NV
7352if test "$glusterfs_iocb_has_stat" = "yes" ; then
7353 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7354fi
7355
b10d49d7
PT
7356if test "$libssh" = "yes" ; then
7357 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7358 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7359 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
0a12ec87
RJ
7360fi
7361
ed1701c6
DDAG
7362if test "$live_block_migration" = "yes" ; then
7363 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7364fi
7365
3b8acc11 7366if test "$tpm" = "yes"; then
3cae16db 7367 echo 'CONFIG_TPM=y' >> $config_host_mak
3b8acc11
PB
7368fi
7369
5b808275
LV
7370echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7371if have_backend "nop"; then
6d8a764e 7372 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 7373fi
5b808275 7374if have_backend "simple"; then
6d8a764e
LV
7375 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7376 # Set the appropriate trace file.
953ffe0f 7377 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 7378fi
ed7f5f1d
PB
7379if have_backend "log"; then
7380 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6d8a764e 7381fi
5b808275 7382if have_backend "ust"; then
6d8a764e
LV
7383 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7384fi
5b808275 7385if have_backend "dtrace"; then
6d8a764e
LV
7386 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7387 if test "$trace_backend_stap" = "yes" ; then
7388 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7389 fi
c276b17d 7390fi
5b808275 7391if have_backend "ftrace"; then
781e9545
ET
7392 if test "$linux" = "yes" ; then
7393 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 7394 else
21684af0 7395 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
7396 fi
7397fi
0a852417
PD
7398if have_backend "syslog"; then
7399 if test "$posix_syslog" = "yes" ; then
7400 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7401 else
7402 feature_not_found "syslog(trace backend)" "syslog not available"
7403 fi
7404fi
9410b56c
PS
7405echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7406
2da776db
MH
7407if test "$rdma" = "yes" ; then
7408 echo "CONFIG_RDMA=y" >> $config_host_mak
392fb643 7409 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
2da776db
MH
7410fi
7411
21ab34c9
MA
7412if test "$pvrdma" = "yes" ; then
7413 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7414fi
7415
575b22b1
LV
7416if test "$have_rtnetlink" = "yes" ; then
7417 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7418fi
7419
ed279a06
KK
7420if test "$libxml2" = "yes" ; then
7421 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7422 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7423 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7424fi
7425
a6b1d4c0
CX
7426if test "$replication" = "yes" ; then
7427 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7428fi
7429
6a02c806
SH
7430if test "$have_af_vsock" = "yes" ; then
7431 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7432fi
7433
4d04351f
CC
7434if test "$have_sysmacros" = "yes" ; then
7435 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7436fi
7437
49e00a18
AG
7438if test "$have_static_assert" = "yes" ; then
7439 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7440fi
7441
e674605f
TG
7442if test "$have_utmpx" = "yes" ; then
7443 echo "HAVE_UTMPX=y" >> $config_host_mak
7444fi
db1ed1ab
RH
7445if test "$have_getrandom" = "yes" ; then
7446 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7447fi
e0580342
KR
7448if test "$ivshmem" = "yes" ; then
7449 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
8ca80760 7450fi
e219c499 7451if test "$capstone" != "no" ; then
8ca80760 7452 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
e0580342 7453fi
ba59fb77
PB
7454if test "$debug_mutex" = "yes" ; then
7455 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7456fi
e0580342 7457
5c312079
DDAG
7458# Hold two types of flag:
7459# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7460# a thread we have a handle to
479a5747 7461# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
5c312079 7462# platform
479a5747
RB
7463if test "$pthread_setname_np_w_tid" = "yes" ; then
7464 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7465 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7466elif test "$pthread_setname_np_wo_tid" = "yes" ; then
5c312079 7467 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
479a5747 7468 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
5c312079
DDAG
7469fi
7470
da92c3ff
AM
7471if test "$vxhs" = "yes" ; then
7472 echo "CONFIG_VXHS=y" >> $config_host_mak
7473 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7474fi
7475
17824406
JH
7476if test "$libpmem" = "yes" ; then
7477 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7478fi
7479
2f740136
JC
7480if test "$bochs" = "yes" ; then
7481 echo "CONFIG_BOCHS=y" >> $config_host_mak
7482fi
7483if test "$cloop" = "yes" ; then
7484 echo "CONFIG_CLOOP=y" >> $config_host_mak
7485fi
7486if test "$dmg" = "yes" ; then
7487 echo "CONFIG_DMG=y" >> $config_host_mak
7488fi
7489if test "$qcow1" = "yes" ; then
7490 echo "CONFIG_QCOW1=y" >> $config_host_mak
7491fi
7492if test "$vdi" = "yes" ; then
7493 echo "CONFIG_VDI=y" >> $config_host_mak
7494fi
7495if test "$vvfat" = "yes" ; then
7496 echo "CONFIG_VVFAT=y" >> $config_host_mak
7497fi
7498if test "$qed" = "yes" ; then
7499 echo "CONFIG_QED=y" >> $config_host_mak
7500fi
7501if test "$parallels" = "yes" ; then
7502 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7503fi
7504if test "$sheepdog" = "yes" ; then
7505 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7506fi
7507
40e8c6f4
AB
7508if test "$plugins" = "yes" ; then
7509 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7510 LIBS="-ldl $LIBS"
26fffe29
EC
7511 # Copy the export object list to the build dir
7512 if test "$ld_dynamic_list" = "yes" ; then
7513 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7514 ld_symbols=qemu-plugins-ld.symbols
7515 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7516 elif test "$ld_exported_symbols_list" = "yes" ; then
7517 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7518 ld64_symbols=qemu-plugins-ld64.symbols
7519 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7520 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7521 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7522 else
7523 error_exit \
7524 "If \$plugins=yes, either \$ld_dynamic_list or " \
7525 "\$ld_exported_symbols_list should have been set to 'yes'."
7526 fi
40e8c6f4
AB
7527fi
7528
5b5e3037 7529if test "$tcg_interpreter" = "yes"; then
9edc19c9 7530 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5b5e3037 7531elif test "$ARCH" = "sparc64" ; then
9edc19c9 7532 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5b5e3037 7533elif test "$ARCH" = "s390x" ; then
9edc19c9 7534 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
e633a5c6 7535elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
9edc19c9 7536 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
40d964b5 7537elif test "$ARCH" = "ppc64" ; then
9edc19c9 7538 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
e633a5c6 7539elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
c4f80543 7540 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
5b5e3037 7541else
9edc19c9 7542 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5b5e3037 7543fi
5b5e3037 7544
98ec69ac 7545echo "TOOLS=$tools" >> $config_host_mak
98ec69ac 7546echo "ROMS=$roms" >> $config_host_mak
804edf29
JQ
7547echo "MAKE=$make" >> $config_host_mak
7548echo "INSTALL=$install" >> $config_host_mak
1901cb14
BS
7549echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7550echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
e999ee44
MT
7551echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7552echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
c886edfb 7553echo "PYTHON=$python" >> $config_host_mak
2eb054c2 7554echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
804edf29 7555echo "CC=$cc" >> $config_host_mak
a31a8642
MT
7556if $iasl -h > /dev/null 2>&1; then
7557 echo "IASL=$iasl" >> $config_host_mak
7558fi
804edf29 7559echo "HOST_CC=$host_cc" >> $config_host_mak
83f73fce 7560echo "CXX=$cxx" >> $config_host_mak
3c4a4d0d 7561echo "OBJCC=$objcc" >> $config_host_mak
804edf29 7562echo "AR=$ar" >> $config_host_mak
45d285ab 7563echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
cdbd727c 7564echo "AS=$as" >> $config_host_mak
5f6f0e27 7565echo "CCAS=$ccas" >> $config_host_mak
3dd46c78 7566echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
7567echo "OBJCOPY=$objcopy" >> $config_host_mak
7568echo "LD=$ld" >> $config_host_mak
9f81aeb5 7569echo "RANLIB=$ranlib" >> $config_host_mak
4852ee95 7570echo "NM=$nm" >> $config_host_mak
daa79d9a 7571echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
9fe6de94 7572echo "WINDRES=$windres" >> $config_host_mak
e2a2ed06 7573echo "CFLAGS=$CFLAGS" >> $config_host_mak
46eef33b 7574echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 7575echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
11cde1c8 7576echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
f9728943 7577echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
e39f0062
PB
7578if test "$sparse" = "yes" ; then
7579 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
80fd48df 7580 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
2944d742 7581 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
e39f0062
PB
7582 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7583 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7584fi
8a99e9a3 7585echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
db5adeaa 7586echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6969ec6c 7587echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
e57218b6 7588echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
73da375e 7589echo "LIBS+=$LIBS" >> $config_host_mak
3e2e0e6b 7590echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
409437e1 7591echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
804edf29 7592echo "EXESUF=$EXESUF" >> $config_host_mak
17969268
FZ
7593echo "DSOSUF=$DSOSUF" >> $config_host_mak
7594echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
957f1f99 7595echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
90246037
DB
7596echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7597echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
94dd53c5 7598echo "POD2MAN=$POD2MAN" >> $config_host_mak
1d728c39
BS
7599if test "$gcov" = "yes" ; then
7600 echo "CONFIG_GCOV=y" >> $config_host_mak
7601 echo "GCOV=$gcov_tool" >> $config_host_mak
7602fi
804edf29 7603
3efac6eb
TG
7604if test "$libudev" != "no"; then
7605 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7606 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7607fi
7608
05dfa22b
PMD
7609if test "$edk2_blobs" = "yes" ; then
7610 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7611fi
7612
6efd7517
PM
7613# use included Linux headers
7614if test "$linux" = "yes" ; then
a307beb6 7615 mkdir -p linux-headers
6efd7517 7616 case "$cpu" in
c72b26ec 7617 i386|x86_64|x32)
08312a63 7618 linux_arch=x86
6efd7517 7619 ;;
f8378acc 7620 ppc|ppc64|ppc64le)
08312a63 7621 linux_arch=powerpc
6efd7517
PM
7622 ;;
7623 s390x)
08312a63
PM
7624 linux_arch=s390
7625 ;;
1f080313
CF
7626 aarch64)
7627 linux_arch=arm64
7628 ;;
222e7d11
SL
7629 mips64)
7630 linux_arch=mips
7631 ;;
08312a63
PM
7632 *)
7633 # For most CPUs the kernel architecture name and QEMU CPU name match.
7634 linux_arch="$cpu"
6efd7517
PM
7635 ;;
7636 esac
08312a63
PM
7637 # For non-KVM architectures we will not have asm headers
7638 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7639 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7640 fi
6efd7517
PM
7641fi
7642
1d14ffa9 7643for target in $target_list; do
97a847bc 7644target_dir="$target"
25be210f 7645config_target_mak=$target_dir/config-target.mak
89138857 7646target_name=$(echo $target | cut -d '-' -f 1)
52bf9771
TN
7647target_aligned_only="no"
7648case "$target_name" in
7649 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7650 target_aligned_only="yes"
7651 ;;
7652esac
97a847bc 7653target_bigendian="no"
c1799a84 7654case "$target_name" in
a69dc537 7655 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
52bf9771 7656 target_bigendian="yes"
ea2d6a39
JQ
7657 ;;
7658esac
97a847bc 7659target_softmmu="no"
997344f3 7660target_user_only="no"
831b7825 7661target_linux_user="no"
84778508 7662target_bsd_user="no"
9e407a85 7663case "$target" in
c1799a84 7664 ${target_name}-softmmu)
9e407a85
PB
7665 target_softmmu="yes"
7666 ;;
c1799a84 7667 ${target_name}-linux-user)
9e407a85
PB
7668 target_user_only="yes"
7669 target_linux_user="yes"
7670 ;;
c1799a84 7671 ${target_name}-bsd-user)
84778508
BS
7672 target_user_only="yes"
7673 target_bsd_user="yes"
7674 ;;
9e407a85 7675 *)
76ad07a4 7676 error_exit "Target '$target' not recognised"
9e407a85
PB
7677 exit 1
7678 ;;
7679esac
831b7825 7680
97a847bc 7681mkdir -p $target_dir
25be210f 7682echo "# Automatically generated by configure - do not modify" > $config_target_mak
de83cd02 7683
e5fe0c52 7684bflt="no"
ca759f9e 7685mttcg="no"
89138857 7686interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
56aebc89 7687gdb_xml_files=""
7ba1e619 7688
c1799a84 7689TARGET_ARCH="$target_name"
6acff7da 7690TARGET_BASE_ARCH=""
e6e91b9c 7691TARGET_ABI_DIR=""
e73aae67 7692
c1799a84 7693case "$target_name" in
2408a527 7694 i386)
0a7fa00a 7695 mttcg="yes"
7b0f97ba 7696 gdb_xml_files="i386-32bit.xml"
2408a527
AJ
7697 ;;
7698 x86_64)
6acff7da 7699 TARGET_BASE_ARCH=i386
0a7fa00a 7700 mttcg="yes"
7b0f97ba 7701 gdb_xml_files="i386-64bit.xml"
2408a527
AJ
7702 ;;
7703 alpha)
5ee4f3c2 7704 mttcg="yes"
2408a527
AJ
7705 ;;
7706 arm|armeb)
b498c8a0 7707 TARGET_ARCH=arm
2408a527 7708 bflt="yes"
ca759f9e 7709 mttcg="yes"
56aebc89 7710 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
2408a527 7711 ;;
722dd7be
MW
7712 aarch64|aarch64_be)
7713 TARGET_ARCH=aarch64
6a49fa95
AG
7714 TARGET_BASE_ARCH=arm
7715 bflt="yes"
ca759f9e 7716 mttcg="yes"
8f95ce2e 7717 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6a49fa95 7718 ;;
2408a527 7719 cris)
2408a527 7720 ;;
61766fe9 7721 hppa)
7b93dab5 7722 mttcg="yes"
61766fe9 7723 ;;
613a22c9 7724 lm32)
613a22c9 7725 ;;
2408a527 7726 m68k)
2408a527 7727 bflt="yes"
5a4526b2 7728 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
2408a527 7729 ;;
877fdc12
EI
7730 microblaze|microblazeel)
7731 TARGET_ARCH=microblaze
72b675ca 7732 bflt="yes"
be73ef64 7733 echo "TARGET_ABI32=y" >> $config_target_mak
72b675ca 7734 ;;
0adcffb1 7735 mips|mipsel)
0454728c 7736 mttcg="yes"
b498c8a0 7737 TARGET_ARCH=mips
25be210f 7738 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
2408a527
AJ
7739 ;;
7740 mipsn32|mipsn32el)
0454728c 7741 mttcg="yes"
597e2cec 7742 TARGET_ARCH=mips64
6acff7da 7743 TARGET_BASE_ARCH=mips
25be210f 7744 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
597e2cec 7745 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527
AJ
7746 ;;
7747 mips64|mips64el)
0454728c 7748 mttcg="yes"
b498c8a0 7749 TARGET_ARCH=mips64
6acff7da 7750 TARGET_BASE_ARCH=mips
25be210f 7751 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
2408a527 7752 ;;
d15a9c23
AG
7753 moxie)
7754 ;;
e671711c
MV
7755 nios2)
7756 ;;
4a09d0bb 7757 or1k)
e67db06e
JL
7758 TARGET_ARCH=openrisc
7759 TARGET_BASE_ARCH=openrisc
e67db06e 7760 ;;
2408a527 7761 ppc)
c8b3532d 7762 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527 7763 ;;
2408a527 7764 ppc64)
6acff7da 7765 TARGET_BASE_ARCH=ppc
e6e91b9c 7766 TARGET_ABI_DIR=ppc
f0b0685d 7767 mttcg=yes
1438eff3 7768 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
2408a527 7769 ;;
9c35126c
DK
7770 ppc64le)
7771 TARGET_ARCH=ppc64
7772 TARGET_BASE_ARCH=ppc
7773 TARGET_ABI_DIR=ppc
f0b0685d 7774 mttcg=yes
1438eff3 7775 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
9c35126c 7776 ;;
2408a527 7777 ppc64abi32)
b498c8a0 7778 TARGET_ARCH=ppc64
6acff7da 7779 TARGET_BASE_ARCH=ppc
e6e91b9c 7780 TARGET_ABI_DIR=ppc
25be210f 7781 echo "TARGET_ABI32=y" >> $config_target_mak
1438eff3 7782 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
2408a527 7783 ;;
25fa194b
MC
7784 riscv32)
7785 TARGET_BASE_ARCH=riscv
7786 TARGET_ABI_DIR=riscv
7787 mttcg=yes
ae4a70c0 7788 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml"
25fa194b
MC
7789 ;;
7790 riscv64)
7791 TARGET_BASE_ARCH=riscv
7792 TARGET_ABI_DIR=riscv
7793 mttcg=yes
ae4a70c0 7794 gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml"
25fa194b 7795 ;;
2408a527 7796 sh4|sh4eb)
b498c8a0 7797 TARGET_ARCH=sh4
2408a527
AJ
7798 bflt="yes"
7799 ;;
7800 sparc)
2408a527
AJ
7801 ;;
7802 sparc64)
6acff7da 7803 TARGET_BASE_ARCH=sparc
2408a527
AJ
7804 ;;
7805 sparc32plus)
b498c8a0 7806 TARGET_ARCH=sparc64
6acff7da 7807 TARGET_BASE_ARCH=sparc
e6e91b9c 7808 TARGET_ABI_DIR=sparc
25be210f 7809 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527 7810 ;;
24e804ec 7811 s390x)
63685bc4 7812 mttcg=yes
86158a2a 7813 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
24e804ec 7814 ;;
444e06b1
CG
7815 tilegx)
7816 ;;
5ecaa4ed
PC
7817 tricore)
7818 ;;
d2fbca94 7819 unicore32)
d2fbca94 7820 ;;
cfa550c6
MF
7821 xtensa|xtensaeb)
7822 TARGET_ARCH=xtensa
02e33e9f 7823 bflt="yes"
9fb40342 7824 mttcg="yes"
cfa550c6 7825 ;;
2408a527 7826 *)
76ad07a4 7827 error_exit "Unsupported target CPU"
2408a527
AJ
7828 ;;
7829esac
5e8861a0
PB
7830# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7831if [ "$TARGET_BASE_ARCH" = "" ]; then
7832 TARGET_BASE_ARCH=$TARGET_ARCH
7833fi
7834
5e8861a0
PB
7835symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7836
99afc91d
DB
7837upper() {
7838 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7839}
7840
89138857 7841target_arch_name="$(upper $TARGET_ARCH)"
25be210f 7842echo "TARGET_$target_arch_name=y" >> $config_target_mak
c1799a84 7843echo "TARGET_NAME=$target_name" >> $config_target_mak
25be210f 7844echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
e6e91b9c
JQ
7845if [ "$TARGET_ABI_DIR" = "" ]; then
7846 TARGET_ABI_DIR=$TARGET_ARCH
7847fi
25be210f 7848echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
adfc3e91
SS
7849if [ "$HOST_VARIANT_DIR" != "" ]; then
7850 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7851fi
3b6b7550
PB
7852
7853if supported_xen_target $target; then
7854 echo "CONFIG_XEN=y" >> $config_target_mak
e0e312f3 7855 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
3b6b7550 7856 if test "$xen_pci_passthrough" = yes; then
eb6fda0f 7857 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
1b0c87fc 7858 fi
e0e312f3
PB
7859else
7860 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
3b6b7550
PB
7861fi
7862if supported_kvm_target $target; then
7863 echo "CONFIG_KVM=y" >> $config_target_mak
e0e312f3
PB
7864 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7865else
7866 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
3b6b7550
PB
7867fi
7868if supported_hax_target $target; then
7869 echo "CONFIG_HAX=y" >> $config_target_mak
b0cb0a66 7870fi
c97d6d2c
SAGDR
7871if supported_hvf_target $target; then
7872 echo "CONFIG_HVF=y" >> $config_target_mak
7873fi
d661d9a4
JTV
7874if supported_whpx_target $target; then
7875 echo "CONFIG_WHPX=y" >> $config_target_mak
7876fi
52bf9771
TN
7877if test "$target_aligned_only" = "yes" ; then
7878 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7879fi
de83cd02 7880if test "$target_bigendian" = "yes" ; then
25be210f 7881 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
de83cd02 7882fi
97a847bc 7883if test "$target_softmmu" = "yes" ; then
25be210f 7884 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
ca759f9e
AB
7885 if test "$mttcg" = "yes" ; then
7886 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7887 fi
43ce4dfe 7888fi
997344f3 7889if test "$target_user_only" = "yes" ; then
25be210f 7890 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
a2c80be9 7891 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
997344f3 7892fi
831b7825 7893if test "$target_linux_user" = "yes" ; then
25be210f 7894 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
831b7825 7895fi
56aebc89
PB
7896list=""
7897if test ! -z "$gdb_xml_files" ; then
7898 for x in $gdb_xml_files; do
7899 list="$list $source_path/gdb-xml/$x"
7900 done
3d0f1517 7901 echo "TARGET_XML_FILES=$list" >> $config_target_mak
56aebc89 7902fi
97a847bc 7903
e633a5c6 7904if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
25be210f 7905 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
e5fe0c52 7906fi
84778508 7907if test "$target_bsd_user" = "yes" ; then
25be210f 7908 echo "CONFIG_BSD_USER=y" >> $config_target_mak
84778508 7909fi
5b0753e0 7910
716a507c 7911
db5adeaa 7912# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
fa282484 7913
4afddb55 7914cflags=""
fa282484 7915ldflags=""
9b8e111f 7916
c765fcac
PC
7917disas_config() {
7918 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7919 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7920}
7921
64656024
JQ
7922for i in $ARCH $TARGET_BASE_ARCH ; do
7923 case "$i" in
7924 alpha)
c765fcac 7925 disas_config "ALPHA"
64656024 7926 ;;
82295d8a
RH
7927 aarch64)
7928 if test -n "${cxx}"; then
c765fcac 7929 disas_config "ARM_A64"
82295d8a
RH
7930 fi
7931 ;;
64656024 7932 arm)
c765fcac 7933 disas_config "ARM"
999b53ec 7934 if test -n "${cxx}"; then
c765fcac 7935 disas_config "ARM_A64"
999b53ec 7936 fi
64656024
JQ
7937 ;;
7938 cris)
c765fcac 7939 disas_config "CRIS"
64656024 7940 ;;
429b31a2
RH
7941 hppa)
7942 disas_config "HPPA"
7943 ;;
c72b26ec 7944 i386|x86_64|x32)
c765fcac 7945 disas_config "I386"
64656024 7946 ;;
79368f49 7947 lm32)
c765fcac 7948 disas_config "LM32"
79368f49 7949 ;;
64656024 7950 m68k)
c765fcac 7951 disas_config "M68K"
64656024 7952 ;;
877fdc12 7953 microblaze*)
c765fcac 7954 disas_config "MICROBLAZE"
64656024
JQ
7955 ;;
7956 mips*)
c765fcac 7957 disas_config "MIPS"
89a955e8
AM
7958 if test -n "${cxx}"; then
7959 disas_config "NANOMIPS"
7960 fi
64656024 7961 ;;
d15a9c23 7962 moxie*)
c765fcac 7963 disas_config "MOXIE"
d15a9c23 7964 ;;
e671711c
MV
7965 nios2)
7966 disas_config "NIOS2"
7967 ;;
4a09d0bb 7968 or1k)
c765fcac 7969 disas_config "OPENRISC"
e67db06e 7970 ;;
64656024 7971 ppc*)
c765fcac 7972 disas_config "PPC"
64656024 7973 ;;
c4f80543 7974 riscv*)
25fa194b
MC
7975 disas_config "RISCV"
7976 ;;
24e804ec 7977 s390*)
c765fcac 7978 disas_config "S390"
64656024
JQ
7979 ;;
7980 sh4)
c765fcac 7981 disas_config "SH4"
64656024
JQ
7982 ;;
7983 sparc*)
c765fcac 7984 disas_config "SPARC"
64656024 7985 ;;
cfa550c6 7986 xtensa*)
c765fcac 7987 disas_config "XTENSA"
cfa550c6 7988 ;;
64656024
JQ
7989 esac
7990done
9195b2c2 7991if test "$tcg_interpreter" = "yes" ; then
c765fcac 7992 disas_config "TCI"
9195b2c2 7993fi
64656024 7994
6ee7126f
JQ
7995case "$ARCH" in
7996alpha)
7997 # Ensure there's only a single GP
7998 cflags="-msmall-data $cflags"
7999;;
8000esac
8001
d02c1db3 8002if test "$gprof" = "yes" ; then
d02c1db3
JQ
8003 if test "$target_linux_user" = "yes" ; then
8004 cflags="-p $cflags"
8005 ldflags="-p $ldflags"
8006 fi
8007 if test "$target_softmmu" = "yes" ; then
8008 ldflags="-p $ldflags"
25be210f 8009 echo "GPROF_CFLAGS=-p" >> $config_target_mak
d02c1db3
JQ
8010 fi
8011fi
8012
e633a5c6 8013if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
964c6fa1 8014 ldflags="$ldflags $textseg_ldflags"
fa282484 8015fi
fa282484 8016
e9a3591f
CB
8017# Newer kernels on s390 check for an S390_PGSTE program header and
8018# enable the pgste page table extensions in that case. This makes
8019# the vm.allocate_pgste sysctl unnecessary. We enable this program
8020# header if
8021# - we build on s390x
8022# - we build the system emulation for s390x (qemu-system-s390x)
8023# - KVM is enabled
8024# - the linker supports --s390-pgste
e633a5c6
EB
8025if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8026 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
e9a3591f
CB
8027 if ld_has --s390-pgste ; then
8028 ldflags="-Wl,--s390-pgste $ldflags"
8029 fi
8030fi
8031
db5adeaa 8032echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
25be210f 8033echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
fa282484 8034
97a847bc 8035done # for target in $targets
7d13299d 8036
d52c454a
MAL
8037echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8038echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8039
e3971d61 8040if [ "$fdt" = "git" ]; then
3b8593ee 8041 echo "config-host.h: dtc/all" >> $config_host_mak
a540f158 8042fi
e219c499 8043if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
3b8593ee 8044 echo "config-host.h: capstone/all" >> $config_host_mak
e219c499
RH
8045fi
8046if test -n "$LIBCAPSTONE"; then
8047 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8048fi
a540f158 8049
a99d57bb
WG
8050if test "$numa" = "yes"; then
8051 echo "CONFIG_NUMA=y" >> $config_host_mak
8052fi
8053
fd0e6053
JS
8054if test "$ccache_cpp2" = "yes"; then
8055 echo "export CCACHE_CPP2=y" >> $config_host_mak
8056fi
8057
e29e5c6e
PM
8058# If we're using a separate build tree, set it up now.
8059# DIRS are directories which we simply mkdir in the build tree;
8060# LINKS are things to symlink back into the source tree
8061# (these can be both files and directories).
8062# Caution: do not add files or directories here using wildcards. This
8063# will result in problems later if a new file matching the wildcard is
8064# added to the source tree -- nothing will cause configure to be rerun
8065# so the build tree will be missing the link back to the new file, and
8066# tests might fail. Prefer to keep the relevant files in their own
8067# directory and symlink the directory instead.
1cf4323e
TH
8068DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8069DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
b855f8d1 8070DIRS="$DIRS docs docs/interop fsdev scsi"
744a928c 8071DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
d1807a4f 8072DIRS="$DIRS roms/seabios roms/vgabios"
2038f8c8
PB
8073LINKS="Makefile"
8074LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8075LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
671f760b 8076LINKS="$LINKS tests/plugin/Makefile"
e29e5c6e 8077LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
e29e5c6e
PM
8078LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8079LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8080LINKS="$LINKS pc-bios/qemu-icon.bmp"
8081LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
39950353
PM
8082LINKS="$LINKS tests/acceptance tests/data"
8083LINKS="$LINKS tests/qemu-iotests/check"
8f8fd9ed 8084LINKS="$LINKS python"
753d11f2
RH
8085for bios_file in \
8086 $source_path/pc-bios/*.bin \
225a9ab8 8087 $source_path/pc-bios/*.lid \
753d11f2
RH
8088 $source_path/pc-bios/*.rom \
8089 $source_path/pc-bios/*.dtb \
e89e33e1 8090 $source_path/pc-bios/*.img \
753d11f2 8091 $source_path/pc-bios/openbios-* \
4e73c781 8092 $source_path/pc-bios/u-boot.* \
26ce90fd 8093 $source_path/pc-bios/edk2-*.fd.bz2 \
753d11f2
RH
8094 $source_path/pc-bios/palcode-*
8095do
e29e5c6e 8096 LINKS="$LINKS pc-bios/$(basename $bios_file)"
d1807a4f
PB
8097done
8098mkdir -p $DIRS
e29e5c6e 8099for f in $LINKS ; do
cab00a5a 8100 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
f9245e10
PM
8101 symlink "$source_path/$f" "$f"
8102 fi
d1807a4f 8103done
1ad2134f 8104
2038f8c8
PB
8105(for i in $cross_cc_vars; do
8106 export $i
8107done
afc3a8f9 8108export target_list source_path use_containers
2038f8c8
PB
8109$source_path/tests/tcg/configure.sh)
8110
c34ebfdc 8111# temporary config to build submodules
2d9f27d2 8112for rom in seabios vgabios ; do
c34ebfdc 8113 config_mak=roms/$rom/config.mak
37116c89 8114 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 8115 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
cdbd727c 8116 echo "AS=$as" >> $config_mak
5f6f0e27 8117 echo "CCAS=$ccas" >> $config_mak
c34ebfdc
AL
8118 echo "CC=$cc" >> $config_mak
8119 echo "BCC=bcc" >> $config_mak
3dd46c78 8120 echo "CPP=$cpp" >> $config_mak
c34ebfdc 8121 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 8122 echo "IASL=$iasl" >> $config_mak
c34ebfdc 8123 echo "LD=$ld" >> $config_mak
9f81aeb5 8124 echo "RANLIB=$ranlib" >> $config_mak
c34ebfdc
AL
8125done
8126
76c7560a
HR
8127# set up qemu-iotests in this build directory
8128iotests_common_env="tests/qemu-iotests/common.env"
76c7560a
HR
8129
8130echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8131echo >> "$iotests_common_env"
8132echo "export PYTHON='$python'" >> "$iotests_common_env"
8133
dc655404
MT
8134# Save the configure command line for later reuse.
8135cat <<EOD >config.status
8136#!/bin/sh
8137# Generated by configure.
8138# Run this file to recreate the current configuration.
8139# Compiler output produced by configure, useful for debugging
8140# configure, is in config.log if it exists.
8141EOD
e811da7f
DB
8142
8143preserve_env() {
8144 envname=$1
8145
8146 eval envval=\$$envname
8147
8148 if test -n "$envval"
8149 then
8150 echo "$envname='$envval'" >> config.status
8151 echo "export $envname" >> config.status
8152 else
8153 echo "unset $envname" >> config.status
8154 fi
8155}
8156
8157# Preserve various env variables that influence what
8158# features/build target configure will detect
8159preserve_env AR
8160preserve_env AS
8161preserve_env CC
8162preserve_env CPP
8163preserve_env CXX
8164preserve_env INSTALL
8165preserve_env LD
8166preserve_env LD_LIBRARY_PATH
8167preserve_env LIBTOOL
8168preserve_env MAKE
8169preserve_env NM
8170preserve_env OBJCOPY
8171preserve_env PATH
8172preserve_env PKG_CONFIG
8173preserve_env PKG_CONFIG_LIBDIR
8174preserve_env PKG_CONFIG_PATH
8175preserve_env PYTHON
e811da7f
DB
8176preserve_env SDL2_CONFIG
8177preserve_env SMBD
8178preserve_env STRIP
8179preserve_env WINDRES
8180
dc655404
MT
8181printf "exec" >>config.status
8182printf " '%s'" "$0" "$@" >>config.status
cf7cc929 8183echo ' "$@"' >>config.status
dc655404
MT
8184chmod +x config.status
8185
8cd05ab6 8186rm -r "$TMPDIR1"
This page took 3.292811 seconds and 4 git commands to generate.