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