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