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