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