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