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