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