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