]> git.proxmox.com Git - mirror_qemu.git/blame - configure
configure: add X11 vars to config-host.mak
[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
f676c67e 2523if $pkg_config --exists "x11"; then
8781595b 2524 have_x11=yes
89138857
SW
2525 x11_cflags=$($pkg_config --cflags x11)
2526 x11_libs=$($pkg_config --libs x11)
f676c67e
JW
2527fi
2528
a4ccabcf
AL
2529##########################################
2530# GTK probe
2531
9e04c683 2532if test "$gtkabi" = ""; then
5fe309ff
GH
2533 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2534 # Use 2.0 as a fallback if that is available.
2535 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
9e04c683 2536 gtkabi=3.0
5fe309ff 2537 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
9e04c683 2538 gtkabi=2.0
5fe309ff
GH
2539 else
2540 gtkabi=3.0
9e04c683
SW
2541 fi
2542fi
2543
a4ccabcf 2544if test "$gtk" != "no"; then
528de90a 2545 gtkpackage="gtk+-$gtkabi"
0a337ed0 2546 gtkx11package="gtk+-x11-$gtkabi"
528de90a
DB
2547 if test "$gtkabi" = "3.0" ; then
2548 gtkversion="3.0.0"
bbbf9bfb
SW
2549 else
2550 gtkversion="2.18.0"
2551 fi
2552 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
89138857
SW
2553 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2554 gtk_libs=$($pkg_config --libs $gtkpackage)
2555 gtk_version=$($pkg_config --modversion $gtkpackage)
0a337ed0 2556 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
8781595b 2557 need_x11=yes
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 2925 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
8781595b 2926 need_x11=yes
f676c67e
JW
2927 sdl_cflags="$sdl_cflags $x11_cflags"
2928 sdl_libs="$sdl_libs $x11_libs"
ac119f9d 2929 fi
5368a422
AL
2930fi
2931
2da776db
MH
2932##########################################
2933# RDMA needs OpenFabrics libraries
2934if test "$rdma" != "no" ; then
2935 cat > $TMPC <<EOF
2936#include <rdma/rdma_cma.h>
2937int main(void) { return 0; }
2938EOF
ef6d4ccd 2939 rdma_libs="-lrdmacm -libverbs -libumad"
2da776db
MH
2940 if compile_prog "" "$rdma_libs" ; then
2941 rdma="yes"
ef6d4ccd 2942 libs_softmmu="$libs_softmmu $rdma_libs"
2da776db
MH
2943 else
2944 if test "$rdma" = "yes" ; then
2945 error_exit \
ef6d4ccd 2946 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
2da776db 2947 " Your options:" \
ef6d4ccd 2948 " (1) Fast: Install infiniband packages (devel) from your distro." \
2da776db
MH
2949 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2950 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2951 fi
2952 rdma="no"
2953 fi
2954fi
2955
95c6bff3 2956
2f9606b3
AL
2957##########################################
2958# VNC SASL detection
821601ea 2959if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
ea784e3b 2960 cat > $TMPC <<EOF
2f9606b3
AL
2961#include <sasl/sasl.h>
2962#include <stdio.h>
2963int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2964EOF
ea784e3b
JQ
2965 # Assuming Cyrus-SASL installed in /usr prefix
2966 vnc_sasl_cflags=""
2967 vnc_sasl_libs="-lsasl2"
2968 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2969 vnc_sasl=yes
2970 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
ca273d58 2971 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
ea784e3b
JQ
2972 else
2973 if test "$vnc_sasl" = "yes" ; then
21684af0 2974 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2f9606b3 2975 fi
ea784e3b
JQ
2976 vnc_sasl=no
2977 fi
2f9606b3
AL
2978fi
2979
2f6f5c7a
CC
2980##########################################
2981# VNC JPEG detection
821601ea 2982if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2f6f5c7a
CC
2983cat > $TMPC <<EOF
2984#include <stdio.h>
2985#include <jpeglib.h>
2986int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2987EOF
2988 vnc_jpeg_cflags=""
2989 vnc_jpeg_libs="-ljpeg"
2990 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2991 vnc_jpeg=yes
2992 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
ca273d58 2993 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2f6f5c7a
CC
2994 else
2995 if test "$vnc_jpeg" = "yes" ; then
21684af0 2996 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2f6f5c7a
CC
2997 fi
2998 vnc_jpeg=no
2999 fi
3000fi
3001
efe556ad
CC
3002##########################################
3003# VNC PNG detection
821601ea 3004if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
efe556ad
CC
3005cat > $TMPC <<EOF
3006//#include <stdio.h>
3007#include <png.h>
832ce9c2 3008#include <stddef.h>
efe556ad
CC
3009int main(void) {
3010 png_structp png_ptr;
3011 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
7edc3fed 3012 return png_ptr != 0;
efe556ad
CC
3013}
3014EOF
65d5d3f9 3015 if $pkg_config libpng --exists; then
89138857
SW
3016 vnc_png_cflags=$($pkg_config libpng --cflags)
3017 vnc_png_libs=$($pkg_config libpng --libs)
9af8025e 3018 else
efe556ad
CC
3019 vnc_png_cflags=""
3020 vnc_png_libs="-lpng"
9af8025e 3021 fi
efe556ad
CC
3022 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3023 vnc_png=yes
3024 libs_softmmu="$vnc_png_libs $libs_softmmu"
9af8025e 3025 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
efe556ad
CC
3026 else
3027 if test "$vnc_png" = "yes" ; then
21684af0 3028 feature_not_found "vnc-png" "Install libpng devel"
efe556ad
CC
3029 fi
3030 vnc_png=no
3031 fi
3032fi
3033
6a021536
GH
3034##########################################
3035# xkbcommon probe
3036if test "$xkbcommon" != "no" ; then
3037 if $pkg_config xkbcommon --exists; then
3038 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3039 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3040 xkbcommon=yes
3041 else
3042 if test "$xkbcommon" = "yes" ; then
3043 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3044 fi
3045 xkbcommon=no
3046 fi
3047fi
3048
76655d6d
AL
3049##########################################
3050# fnmatch() probe, used for ACL routines
3051fnmatch="no"
3052cat > $TMPC << EOF
3053#include <fnmatch.h>
3054int main(void)
3055{
3056 fnmatch("foo", "foo", 0);
3057 return 0;
3058}
3059EOF
52166aa0 3060if compile_prog "" "" ; then
76655d6d
AL
3061 fnmatch="yes"
3062fi
3063
ee682d27 3064##########################################
c1bb86cd 3065# xfsctl() probe, used for file-posix.c
dce512de
CH
3066if test "$xfs" != "no" ; then
3067 cat > $TMPC << EOF
ffc41d10 3068#include <stddef.h> /* NULL */
dce512de
CH
3069#include <xfs/xfs.h>
3070int main(void)
3071{
3072 xfsctl(NULL, 0, 0, NULL);
3073 return 0;
3074}
3075EOF
3076 if compile_prog "" "" ; then
3077 xfs="yes"
3078 else
3079 if test "$xfs" = "yes" ; then
21684af0 3080 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
dce512de
CH
3081 fi
3082 xfs=no
3083 fi
3084fi
3085
8a16d273
TS
3086##########################################
3087# vde libraries probe
dfb278bd 3088if test "$vde" != "no" ; then
4baae0ac 3089 vde_libs="-lvdeplug"
8a16d273
TS
3090 cat > $TMPC << EOF
3091#include <libvdeplug.h>
4a7f0e06
PB
3092int main(void)
3093{
3094 struct vde_open_args a = {0, 0, 0};
fea08e08
PM
3095 char s[] = "";
3096 vde_open(s, s, &a);
4a7f0e06
PB
3097 return 0;
3098}
8a16d273 3099EOF
52166aa0 3100 if compile_prog "" "$vde_libs" ; then
4baae0ac 3101 vde=yes
dfb278bd
JQ
3102 else
3103 if test "$vde" = "yes" ; then
21684af0 3104 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
dfb278bd
JQ
3105 fi
3106 vde=no
4baae0ac 3107 fi
8a16d273
TS
3108fi
3109
58952137 3110##########################################
0a985b37
VM
3111# netmap support probe
3112# Apart from looking for netmap headers, we make sure that the host API version
3113# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3114# a minor/major version number. Minor new features will be marked with values up
3115# to 15, and if something happens that requires a change to the backend we will
3116# move above 15, submit the backend fixes and modify this two bounds.
58952137
VM
3117if test "$netmap" != "no" ; then
3118 cat > $TMPC << EOF
3119#include <inttypes.h>
3120#include <net/if.h>
3121#include <net/netmap.h>
3122#include <net/netmap_user.h>
0a985b37
VM
3123#if (NETMAP_API < 11) || (NETMAP_API > 15)
3124#error
3125#endif
58952137
VM
3126int main(void) { return 0; }
3127EOF
3128 if compile_prog "" "" ; then
3129 netmap=yes
3130 else
3131 if test "$netmap" = "yes" ; then
3132 feature_not_found "netmap"
3133 fi
3134 netmap=no
3135 fi
3136fi
3137
47e98658
CB
3138##########################################
3139# libcap-ng library probe
3140if test "$cap_ng" != "no" ; then
3141 cap_libs="-lcap-ng"
3142 cat > $TMPC << EOF
3143#include <cap-ng.h>
3144int main(void)
3145{
3146 capng_capability_to_name(CAPNG_EFFECTIVE);
3147 return 0;
3148}
3149EOF
3150 if compile_prog "" "$cap_libs" ; then
3151 cap_ng=yes
3152 libs_tools="$cap_libs $libs_tools"
3153 else
3154 if test "$cap_ng" = "yes" ; then
21684af0 3155 feature_not_found "cap_ng" "Install libcap-ng devel"
47e98658
CB
3156 fi
3157 cap_ng=no
3158 fi
3159fi
3160
8f28f3fb 3161##########################################
c2de5c91 3162# Sound support libraries probe
8f28f3fb 3163
c2de5c91 3164audio_drv_probe()
3165{
3166 drv=$1
3167 hdr=$2
3168 lib=$3
3169 exp=$4
3170 cfl=$5
3171 cat > $TMPC << EOF
3172#include <$hdr>
3173int main(void) { $exp }
8f28f3fb 3174EOF
52166aa0 3175 if compile_prog "$cfl" "$lib" ; then
c2de5c91 3176 :
3177 else
76ad07a4
PM
3178 error_exit "$drv check failed" \
3179 "Make sure to have the $drv libs and headers installed."
c2de5c91 3180 fi
3181}
3182
89138857 3183audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
c2de5c91 3184for drv in $audio_drv_list; do
3185 case $drv in
3186 alsa)
3187 audio_drv_probe $drv alsa/asoundlib.h -lasound \
e35bcb0c 3188 "return snd_pcm_close((snd_pcm_t *)0);"
b1149911 3189 alsa_libs="-lasound"
c2de5c91 3190 ;;
3191
b8e59f18 3192 pa)
e58ff62d
PK
3193 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3194 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
b1149911 3195 pulse_libs="-lpulse"
67f86e8e 3196 audio_pt_int="yes"
b8e59f18 3197 ;;
3198
373967b2
GH
3199 sdl)
3200 if test "$sdl" = "no"; then
3201 error_exit "sdl not found or disabled, can not use sdl audio driver"
3202 fi
3203 ;;
3204
997e690a 3205 coreaudio)
b1149911 3206 coreaudio_libs="-framework CoreAudio"
997e690a
JQ
3207 ;;
3208
a4bf6780 3209 dsound)
b1149911 3210 dsound_libs="-lole32 -ldxguid"
d5631638 3211 audio_win_int="yes"
a4bf6780
JQ
3212 ;;
3213
3214 oss)
b1149911 3215 oss_libs="$oss_lib"
a4bf6780
JQ
3216 ;;
3217
373967b2
GH
3218 wav)
3219 # XXX: Probes for CoreAudio, DirectSound
2f6a1ab0
BS
3220 ;;
3221
e4c63a6a 3222 *)
1c9b2a52 3223 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
76ad07a4
PM
3224 error_exit "Unknown driver '$drv' selected" \
3225 "Possible drivers are: $audio_possible_drivers"
e4c63a6a 3226 }
3227 ;;
c2de5c91 3228 esac
3229done
8f28f3fb 3230
2e4d9fb1
AJ
3231##########################################
3232# BrlAPI probe
3233
4ffcedb6 3234if test "$brlapi" != "no" ; then
eb82284f
JQ
3235 brlapi_libs="-lbrlapi"
3236 cat > $TMPC << EOF
2e4d9fb1 3237#include <brlapi.h>
832ce9c2 3238#include <stddef.h>
2e4d9fb1
AJ
3239int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3240EOF
52166aa0 3241 if compile_prog "" "$brlapi_libs" ; then
eb82284f 3242 brlapi=yes
4ffcedb6
JQ
3243 else
3244 if test "$brlapi" = "yes" ; then
21684af0 3245 feature_not_found "brlapi" "Install brlapi devel"
4ffcedb6
JQ
3246 fi
3247 brlapi=no
eb82284f
JQ
3248 fi
3249fi
2e4d9fb1 3250
4d3b6f6e
AZ
3251##########################################
3252# curses probe
a3605bf6
MT
3253if test "$curses" != "no" ; then
3254 if test "$mingw32" = "yes" ; then
8ddc5bf9
ST
3255 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3256 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
a3605bf6 3257 else
7c703002 3258 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
8ddc5bf9 3259 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
a3605bf6 3260 fi
c584a6d0 3261 curses_found=no
4d3b6f6e 3262 cat > $TMPC << EOF
8ddc5bf9 3263#include <locale.h>
4d3b6f6e 3264#include <curses.h>
8ddc5bf9 3265#include <wchar.h>
ef9a2524 3266int main(void) {
8ddc5bf9
ST
3267 wchar_t wch = L'w';
3268 setlocale(LC_ALL, "");
ef9a2524 3269 resize_term(0, 0);
8ddc5bf9
ST
3270 addwstr(L"wide chars\n");
3271 addnwstr(&wch, 1);
7c703002 3272 add_wch(WACS_DEGREE);
271f37ab 3273 return 0;
ef9a2524 3274}
4d3b6f6e 3275EOF
ecbe251f 3276 IFS=:
8ddc5bf9 3277 for curses_inc in $curses_inc_list; do
b01a4fd3
PM
3278 # Make sure we get the wide character prototypes
3279 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
7c703002 3280 IFS=:
8ddc5bf9
ST
3281 for curses_lib in $curses_lib_list; do
3282 unset IFS
3283 if compile_prog "$curses_inc" "$curses_lib" ; then
3284 curses_found=yes
3285 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
3286 libs_softmmu="$curses_lib $libs_softmmu"
3287 break
3288 fi
3289 done
7c703002
ST
3290 if test "$curses_found" = yes ; then
3291 break
3292 fi
4f78ef9a 3293 done
ecbe251f 3294 unset IFS
c584a6d0
JQ
3295 if test "$curses_found" = "yes" ; then
3296 curses=yes
3297 else
3298 if test "$curses" = "yes" ; then
21684af0 3299 feature_not_found "curses" "Install ncurses devel"
c584a6d0
JQ
3300 fi
3301 curses=no
3302 fi
4f78ef9a 3303fi
4d3b6f6e 3304
769ce76d
AG
3305##########################################
3306# curl probe
788c8196 3307if test "$curl" != "no" ; then
65d5d3f9 3308 if $pkg_config libcurl --exists; then
a3605bf6
MT
3309 curlconfig="$pkg_config libcurl"
3310 else
3311 curlconfig=curl-config
3312 fi
769ce76d
AG
3313 cat > $TMPC << EOF
3314#include <curl/curl.h>
0b862ced 3315int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
769ce76d 3316EOF
89138857
SW
3317 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3318 curl_libs=$($curlconfig --libs 2>/dev/null)
b1d5a277 3319 if compile_prog "$curl_cflags" "$curl_libs" ; then
769ce76d 3320 curl=yes
788c8196
JQ
3321 else
3322 if test "$curl" = "yes" ; then
21684af0 3323 feature_not_found "curl" "Install libcurl devel"
788c8196
JQ
3324 fi
3325 curl=no
769ce76d
AG
3326 fi
3327fi # test "$curl"
3328
fb599c9a
AZ
3329##########################################
3330# bluez support probe
a20a6f46 3331if test "$bluez" != "no" ; then
e820e3f4
AZ
3332 cat > $TMPC << EOF
3333#include <bluetooth/bluetooth.h>
3334int main(void) { return bt_error(0); }
3335EOF
89138857
SW
3336 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3337 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
52166aa0 3338 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
a20a6f46 3339 bluez=yes
e482d56a 3340 libs_softmmu="$bluez_libs $libs_softmmu"
e820e3f4 3341 else
a20a6f46 3342 if test "$bluez" = "yes" ; then
21684af0 3343 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
a20a6f46 3344 fi
e820e3f4
AZ
3345 bluez="no"
3346 fi
fb599c9a
AZ
3347fi
3348
e18df141
AL
3349##########################################
3350# glib support probe
a52d28af 3351
ad04d8cb
PM
3352if test "$mingw32" = yes; then
3353 glib_req_ver=2.30
3354else
3355 glib_req_ver=2.22
3356fi
aa0d1f44
PB
3357glib_modules=gthread-2.0
3358if test "$modules" = yes; then
3359 glib_modules="$glib_modules gmodule-2.0"
3360fi
e26110cf 3361
4eaf7202
SJ
3362# This workaround is required due to a bug in pkg-config file for glib as it
3363# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3364
3365if test "$static" = yes -a "$mingw32" = yes; then
3366 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3367fi
3368
aa0d1f44 3369for i in $glib_modules; do
e26110cf 3370 if $pkg_config --atleast-version=$glib_req_ver $i; then
89138857
SW
3371 glib_cflags=$($pkg_config --cflags $i)
3372 glib_libs=$($pkg_config --libs $i)
4a058899 3373 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
e26110cf
FZ
3374 LIBS="$glib_libs $LIBS"
3375 libs_qga="$glib_libs $libs_qga"
3376 else
3377 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3378 fi
3379done
3380
977a82ab
DB
3381# Sanity check that the current size_t matches the
3382# size that glib thinks it should be. This catches
3383# problems on multi-arch where people try to build
3384# 32-bit QEMU while pointing at 64-bit glib headers
3385cat > $TMPC <<EOF
3386#include <glib.h>
3387#include <unistd.h>
3388
3389#define QEMU_BUILD_BUG_ON(x) \
3390 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3391
3392int main(void) {
3393 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3394 return 0;
3395}
3396EOF
3397
5919e032 3398if ! compile_prog "$CFLAGS" "$LIBS" ; then
977a82ab
DB
3399 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3400 "You probably need to set PKG_CONFIG_LIBDIR"\
3401 "to point to the right pkg-config files for your"\
3402 "build target"
3403fi
3404
9d41401b
MT
3405# g_test_trap_subprocess added in 2.38. Used by some tests.
3406glib_subprocess=yes
a049223a 3407if ! $pkg_config --atleast-version=2.38 glib-2.0; then
9d41401b
MT
3408 glib_subprocess=no
3409fi
3410
bbbf2e04
JS
3411# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3412cat > $TMPC << EOF
3413#include <glib.h>
3414int main(void) { return 0; }
3415EOF
3416if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3417 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3418 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3419 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3420 fi
3421fi
3422
e26110cf
FZ
3423##########################################
3424# SHA command probe for modules
3425if test "$modules" = yes; then
3426 shacmd_probe="sha1sum sha1 shasum"
3427 for c in $shacmd_probe; do
8ccefb91 3428 if has $c; then
e26110cf
FZ
3429 shacmd="$c"
3430 break
3431 fi
3432 done
3433 if test "$shacmd" = ""; then
3434 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3435 fi
e18df141
AL
3436fi
3437
e2134eb9
GH
3438##########################################
3439# pixman support probe
3440
35c4e86c 3441if test "$want_tools" = "no" -a "$softmmu" = "no"; then
74880fe2
RS
3442 pixman_cflags=
3443 pixman_libs=
35c4e86c 3444elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
89138857
SW
3445 pixman_cflags=$($pkg_config --cflags pixman-1)
3446 pixman_libs=$($pkg_config --libs pixman-1)
e2134eb9 3447else
c12b6d70
GH
3448 error_exit "pixman >= 0.21.8 not present." \
3449 "Please install the pixman devel package."
e2134eb9 3450fi
e2134eb9 3451
fe8fc5ae
PB
3452##########################################
3453# libmpathpersist probe
3454
3455if test "$mpath" != "no" ; then
3456 cat > $TMPC <<EOF
3457#include <libudev.h>
3458#include <mpath_persist.h>
3459unsigned mpath_mx_alloc_len = 1024;
3460int logsink;
b3f1c8c4
PB
3461static struct config *multipath_conf;
3462extern struct udev *udev;
3463extern struct config *get_multipath_config(void);
3464extern void put_multipath_config(struct config *conf);
3465struct udev *udev;
3466struct config *get_multipath_config(void) { return multipath_conf; }
3467void put_multipath_config(struct config *conf) { }
3468
fe8fc5ae 3469int main(void) {
b3f1c8c4
PB
3470 udev = udev_new();
3471 multipath_conf = mpath_lib_init();
fe8fc5ae
PB
3472 return 0;
3473}
3474EOF
3475 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3476 mpathpersist=yes
3477 else
3478 mpathpersist=no
3479 fi
3480else
3481 mpathpersist=no
3482fi
3483
17bff52b
MK
3484##########################################
3485# libcap probe
3486
3487if test "$cap" != "no" ; then
3488 cat > $TMPC <<EOF
3489#include <stdio.h>
3490#include <sys/capability.h>
cc939743 3491int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
17bff52b
MK
3492EOF
3493 if compile_prog "" "-lcap" ; then
3494 cap=yes
3495 else
3496 cap=no
3497 fi
3498fi
3499
414f0dab 3500##########################################
e5d355d1 3501# pthread probe
4b29ec41 3502PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3c529d93 3503
4dd75c70 3504pthread=no
e5d355d1 3505cat > $TMPC << EOF
3c529d93 3506#include <pthread.h>
7a42bbe4
SW
3507static void *f(void *p) { return NULL; }
3508int main(void) {
3509 pthread_t thread;
3510 pthread_create(&thread, 0, f, 0);
3511 return 0;
3512}
414f0dab 3513EOF
bd00d539
AF
3514if compile_prog "" "" ; then
3515 pthread=yes
3516else
3517 for pthread_lib in $PTHREADLIBS_LIST; do
3518 if compile_prog "" "$pthread_lib" ; then
3519 pthread=yes
e3c56761
PP
3520 found=no
3521 for lib_entry in $LIBS; do
3522 if test "$lib_entry" = "$pthread_lib"; then
3523 found=yes
3524 break
3525 fi
3526 done
3527 if test "$found" = "no"; then
3528 LIBS="$pthread_lib $LIBS"
14ab3aa7 3529 libs_qga="$pthread_lib $libs_qga"
e3c56761 3530 fi
409437e1 3531 PTHREAD_LIB="$pthread_lib"
bd00d539
AF
3532 break
3533 fi
3534 done
3535fi
414f0dab 3536
4617e593 3537if test "$mingw32" != yes -a "$pthread" = no; then
76ad07a4
PM
3538 error_exit "pthread check failed" \
3539 "Make sure to have the pthread libs and headers installed."
e5d355d1
AL
3540fi
3541
5c312079
DDAG
3542# check for pthread_setname_np
3543pthread_setname_np=no
3544cat > $TMPC << EOF
3545#include <pthread.h>
3546
3547static void *f(void *p) { return NULL; }
3548int main(void)
3549{
3550 pthread_t thread;
3551 pthread_create(&thread, 0, f, 0);
3552 pthread_setname_np(thread, "QEMU");
3553 return 0;
3554}
3555EOF
3556if compile_prog "" "$pthread_lib" ; then
3557 pthread_setname_np=yes
3558fi
3559
f27aaf4b
CB
3560##########################################
3561# rbd probe
3562if test "$rbd" != "no" ; then
3563 cat > $TMPC <<EOF
3564#include <stdio.h>
ad32e9c0 3565#include <rbd/librbd.h>
f27aaf4b 3566int main(void) {
ad32e9c0
JD
3567 rados_t cluster;
3568 rados_create(&cluster, NULL);
f27aaf4b
CB
3569 return 0;
3570}
3571EOF
ad32e9c0
JD
3572 rbd_libs="-lrbd -lrados"
3573 if compile_prog "" "$rbd_libs" ; then
3574 rbd=yes
f27aaf4b
CB
3575 else
3576 if test "$rbd" = "yes" ; then
21684af0 3577 feature_not_found "rados block device" "Install librbd/ceph devel"
f27aaf4b
CB
3578 fi
3579 rbd=no
3580 fi
f27aaf4b
CB
3581fi
3582
0a12ec87
RJ
3583##########################################
3584# libssh2 probe
4fc16838 3585min_libssh2_version=1.2.8
0a12ec87 3586if test "$libssh2" != "no" ; then
65d5d3f9 3587 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
89138857
SW
3588 libssh2_cflags=$($pkg_config libssh2 --cflags)
3589 libssh2_libs=$($pkg_config libssh2 --libs)
0a12ec87 3590 libssh2=yes
0a12ec87
RJ
3591 else
3592 if test "$libssh2" = "yes" ; then
4fc16838 3593 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
0a12ec87
RJ
3594 fi
3595 libssh2=no
3596 fi
3597fi
3598
9a2d462e
RJ
3599##########################################
3600# libssh2_sftp_fsync probe
3601
3602if test "$libssh2" = "yes"; then
3603 cat > $TMPC <<EOF
3604#include <stdio.h>
3605#include <libssh2.h>
3606#include <libssh2_sftp.h>
3607int main(void) {
3608 LIBSSH2_SESSION *session;
3609 LIBSSH2_SFTP *sftp;
3610 LIBSSH2_SFTP_HANDLE *sftp_handle;
3611 session = libssh2_session_init ();
3612 sftp = libssh2_sftp_init (session);
3613 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3614 libssh2_sftp_fsync (sftp_handle);
3615 return 0;
3616}
3617EOF
3618 # libssh2_cflags/libssh2_libs defined in previous test.
3619 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3620 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3621 fi
3622fi
3623
5c6c3a6c
CH
3624##########################################
3625# linux-aio probe
5c6c3a6c
CH
3626
3627if test "$linux_aio" != "no" ; then
3628 cat > $TMPC <<EOF
3629#include <libaio.h>
3630#include <sys/eventfd.h>
832ce9c2 3631#include <stddef.h>
5c6c3a6c
CH
3632int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3633EOF
3634 if compile_prog "" "-laio" ; then
3635 linux_aio=yes
5c6c3a6c
CH
3636 else
3637 if test "$linux_aio" = "yes" ; then
21684af0 3638 feature_not_found "linux AIO" "Install libaio devel"
5c6c3a6c 3639 fi
3cfcae3c 3640 linux_aio=no
5c6c3a6c
CH
3641 fi
3642fi
3643
3b8acc11
PB
3644##########################################
3645# TPM passthrough is only on x86 Linux
3646
3647if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3648 tpm_passthrough=$tpm
3649else
3650 tpm_passthrough=no
3651fi
3652
f4ede81e
AV
3653# TPM emulator is for all posix systems
3654if test "$mingw32" != "yes"; then
3655 tpm_emulator=$tpm
3656else
3657 tpm_emulator=no
3658fi
758e8e38
VJ
3659##########################################
3660# attr probe
3661
3662if test "$attr" != "no" ; then
3663 cat > $TMPC <<EOF
3664#include <stdio.h>
3665#include <sys/types.h>
f2338fb4
PB
3666#ifdef CONFIG_LIBATTR
3667#include <attr/xattr.h>
3668#else
4f26f2b6 3669#include <sys/xattr.h>
f2338fb4 3670#endif
758e8e38
VJ
3671int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3672EOF
4f26f2b6
AK
3673 if compile_prog "" "" ; then
3674 attr=yes
3675 # Older distros have <attr/xattr.h>, and need -lattr:
f2338fb4 3676 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
758e8e38
VJ
3677 attr=yes
3678 LIBS="-lattr $LIBS"
4f26f2b6 3679 libattr=yes
758e8e38
VJ
3680 else
3681 if test "$attr" = "yes" ; then
21684af0 3682 feature_not_found "ATTR" "Install libc6 or libattr devel"
758e8e38
VJ
3683 fi
3684 attr=no
3685 fi
3686fi
3687
bf9298b9
AL
3688##########################################
3689# iovec probe
3690cat > $TMPC <<EOF
db34f0b3 3691#include <sys/types.h>
bf9298b9 3692#include <sys/uio.h>
db34f0b3 3693#include <unistd.h>
f91f9bee 3694int main(void) { return sizeof(struct iovec); }
bf9298b9
AL
3695EOF
3696iovec=no
52166aa0 3697if compile_prog "" "" ; then
bf9298b9
AL
3698 iovec=yes
3699fi
3700
ceb42de8
AL
3701##########################################
3702# preadv probe
3703cat > $TMPC <<EOF
3704#include <sys/types.h>
3705#include <sys/uio.h>
3706#include <unistd.h>
c075a723 3707int main(void) { return preadv(0, 0, 0, 0); }
ceb42de8
AL
3708EOF
3709preadv=no
52166aa0 3710if compile_prog "" "" ; then
ceb42de8
AL
3711 preadv=yes
3712fi
3713
f652e6af
AJ
3714##########################################
3715# fdt probe
e169e1e1
PM
3716# fdt support is mandatory for at least some target architectures,
3717# so insist on it if we're building those system emulators.
3718fdt_required=no
3719for target in $target_list; do
3720 case $target in
df1d8a1f 3721 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
e169e1e1
PM
3722 fdt_required=yes
3723 ;;
3724 esac
3725done
3726
3727if test "$fdt_required" = "yes"; then
3728 if test "$fdt" = "no"; then
3729 error_exit "fdt disabled but some requested targets require it." \
3730 "You can turn off fdt only if you also disable all the system emulation" \
3731 "targets which need it (by specifying a cut down --target-list)."
3732 fi
3733 fdt=yes
3734fi
3735
2df87df7 3736if test "$fdt" != "no" ; then
b41af4ba 3737 fdt_libs="-lfdt"
96ce6545 3738 # explicitly check for libfdt_env.h as it is missing in some stable installs
6e85fce0 3739 # and test for required functions to make sure we are on a version >= 1.4.2
b41af4ba 3740 cat > $TMPC << EOF
31ce0adb 3741#include <libfdt.h>
96ce6545 3742#include <libfdt_env.h>
6e85fce0 3743int main(void) { fdt_first_subnode(0, 0); return 0; }
f652e6af 3744EOF
52166aa0 3745 if compile_prog "" "$fdt_libs" ; then
a540f158 3746 # system DTC is good - use it
f652e6af 3747 fdt=yes
a540f158 3748 else
aef45d51
DB
3749 # have GIT checkout, so activate dtc submodule
3750 if test -e "${source_path}/.git" ; then
3751 git_submodules="${git_submodules} dtc"
3752 fi
3753 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3754 fdt=yes
3755 dtc_internal="yes"
3756 mkdir -p dtc
3757 if [ "$pwd_is_source_path" != "y" ] ; then
3758 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3759 symlink "$source_path/dtc/scripts" "dtc/scripts"
3760 fi
3761 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3762 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3763 elif test "$fdt" = "yes" ; then
3764 # Not a git build & no libfdt found, prompt for system install
3765 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3766 "Please install the DTC (libfdt) devel package"
3767 else
3768 # don't have and don't want
3769 fdt_libs=
3770 fdt=no
3771 fi
f652e6af
AJ
3772 fi
3773fi
3774
a540f158
PC
3775libs_softmmu="$libs_softmmu $fdt_libs"
3776
20ff075b 3777##########################################
fb719563 3778# opengl probe (for sdl2, gtk, milkymist-tmu2)
b1546f32 3779
da076ffe 3780if test "$opengl" != "no" ; then
014cb152 3781 opengl_pkgs="epoxy libdrm gbm"
fb719563 3782 if $pkg_config $opengl_pkgs x11; then
f676c67e
JW
3783 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3784 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
da076ffe 3785 opengl=yes
925a0400
GH
3786 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3787 gtk_gl="yes"
3788 fi
cc720a5d 3789 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
20ff075b 3790 else
da076ffe 3791 if test "$opengl" = "yes" ; then
dcf30025 3792 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
20ff075b 3793 fi
f676c67e 3794 opengl_cflags=""
da076ffe
GH
3795 opengl_libs=""
3796 opengl=no
20ff075b
MW
3797 fi
3798fi
3799
014cb152
GH
3800if test "$opengl" = "yes"; then
3801 cat > $TMPC << EOF
3802#include <epoxy/egl.h>
3803#ifndef EGL_MESA_image_dma_buf_export
3804# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3805#endif
3806int main(void) { return 0; }
3807EOF
3808 if compile_prog "" "" ; then
3809 opengl_dmabuf=yes
3810 fi
3811fi
c9a12e75 3812
ed279a06
KK
3813##########################################
3814# libxml2 probe
3815if test "$libxml2" != "no" ; then
3816 if $pkg_config --exists libxml-2.0; then
3817 libxml2="yes"
3818 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3819 libxml2_libs=$($pkg_config --libs libxml-2.0)
3820 else
3821 if test "$libxml2" = "yes"; then
3822 feature_not_found "libxml2" "Install libxml2 devel"
3823 fi
3824 libxml2="no"
3825 fi
3826fi
c9a12e75 3827
eb100396
BR
3828##########################################
3829# glusterfs probe
3830if test "$glusterfs" != "no" ; then
65d5d3f9 3831 if $pkg_config --atleast-version=3 glusterfs-api; then
e01bee08 3832 glusterfs="yes"
89138857
SW
3833 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3834 glusterfs_libs=$($pkg_config --libs glusterfs-api)
d85fa9eb
JC
3835 if $pkg_config --atleast-version=4 glusterfs-api; then
3836 glusterfs_xlator_opt="yes"
3837 fi
65d5d3f9 3838 if $pkg_config --atleast-version=5 glusterfs-api; then
0c14fb47
BR
3839 glusterfs_discard="yes"
3840 fi
7c815372 3841 if $pkg_config --atleast-version=6 glusterfs-api; then
df3a429a 3842 glusterfs_fallocate="yes"
7c815372
BR
3843 glusterfs_zerofill="yes"
3844 fi
eb100396
BR
3845 else
3846 if test "$glusterfs" = "yes" ; then
8efc9363
HT
3847 feature_not_found "GlusterFS backend support" \
3848 "Install glusterfs-api devel >= 3"
eb100396 3849 fi
e01bee08 3850 glusterfs="no"
eb100396
BR
3851 fi
3852fi
3853
39386ac7 3854# Check for inotify functions when we are building linux-user
3b3f24ad
AJ
3855# emulator. This is done because older glibc versions don't
3856# have syscall stubs for these implemented. In that case we
3857# don't provide them even if kernel supports them.
3858#
3859inotify=no
67ba57f6 3860cat > $TMPC << EOF
3b3f24ad
AJ
3861#include <sys/inotify.h>
3862
3863int
3864main(void)
3865{
3866 /* try to start inotify */
8690e420 3867 return inotify_init();
3b3f24ad
AJ
3868}
3869EOF
52166aa0 3870if compile_prog "" "" ; then
67ba57f6 3871 inotify=yes
3b3f24ad
AJ
3872fi
3873
c05c7a73
RV
3874inotify1=no
3875cat > $TMPC << EOF
3876#include <sys/inotify.h>
3877
3878int
3879main(void)
3880{
3881 /* try to start inotify */
3882 return inotify_init1(0);
3883}
3884EOF
3885if compile_prog "" "" ; then
3886 inotify1=yes
3887fi
3888
099d6b0f
RV
3889# check if pipe2 is there
3890pipe2=no
3891cat > $TMPC << EOF
099d6b0f
RV
3892#include <unistd.h>
3893#include <fcntl.h>
3894
3895int main(void)
3896{
3897 int pipefd[2];
9bca8162 3898 return pipe2(pipefd, O_CLOEXEC);
099d6b0f
RV
3899}
3900EOF
52166aa0 3901if compile_prog "" "" ; then
099d6b0f
RV
3902 pipe2=yes
3903fi
3904
40ff6d7e
KW
3905# check if accept4 is there
3906accept4=no
3907cat > $TMPC << EOF
40ff6d7e
KW
3908#include <sys/socket.h>
3909#include <stddef.h>
3910
3911int main(void)
3912{
3913 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3914 return 0;
3915}
3916EOF
3917if compile_prog "" "" ; then
3918 accept4=yes
3919fi
3920
3ce34dfb
VS
3921# check if tee/splice is there. vmsplice was added same time.
3922splice=no
3923cat > $TMPC << EOF
3ce34dfb
VS
3924#include <unistd.h>
3925#include <fcntl.h>
3926#include <limits.h>
3927
3928int main(void)
3929{
66ea0f22 3930 int len, fd = 0;
3ce34dfb
VS
3931 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3932 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3933 return 0;
3934}
3935EOF
52166aa0 3936if compile_prog "" "" ; then
3ce34dfb
VS
3937 splice=yes
3938fi
3939
a99d57bb
WG
3940##########################################
3941# libnuma probe
3942
3943if test "$numa" != "no" ; then
3944 cat > $TMPC << EOF
3945#include <numa.h>
3946int main(void) { return numa_available(); }
3947EOF
3948
3949 if compile_prog "" "-lnuma" ; then
3950 numa=yes
3951 libs_softmmu="-lnuma $libs_softmmu"
3952 else
3953 if test "$numa" = "yes" ; then
3954 feature_not_found "numa" "install numactl devel"
3955 fi
3956 numa=no
3957 fi
3958fi
3959
7b01cb97
AD
3960if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3961 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3962 exit 1
3963fi
3964
5a22ab71
YZ
3965# Even if malloc_trim() is available, these non-libc memory allocators
3966# do not support it.
3967if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
3968 if test "$malloc_trim" = "yes" ; then
3969 echo "Disabling malloc_trim with non-libc memory allocator"
3970 fi
3971 malloc_trim="no"
3972fi
3973
3974#######################################
3975# malloc_trim
3976
3977if test "$malloc_trim" != "no" ; then
3978 cat > $TMPC << EOF
3979#include <malloc.h>
3980int main(void) { malloc_trim(0); return 0; }
3981EOF
3982 if compile_prog "" "" ; then
3983 malloc_trim="yes"
3984 else
3985 malloc_trim="no"
3986 fi
3987fi
3988
2847b469
FZ
3989##########################################
3990# tcmalloc probe
3991
3992if test "$tcmalloc" = "yes" ; then
3993 cat > $TMPC << EOF
3994#include <stdlib.h>
3995int main(void) { malloc(1); return 0; }
3996EOF
3997
3998 if compile_prog "" "-ltcmalloc" ; then
3999 LIBS="-ltcmalloc $LIBS"
4000 else
4001 feature_not_found "tcmalloc" "install gperftools devel"
4002 fi
4003fi
4004
7b01cb97
AD
4005##########################################
4006# jemalloc probe
4007
4008if test "$jemalloc" = "yes" ; then
4009 cat > $TMPC << EOF
4010#include <stdlib.h>
4011int main(void) { malloc(1); return 0; }
4012EOF
4013
4014 if compile_prog "" "-ljemalloc" ; then
4015 LIBS="-ljemalloc $LIBS"
4016 else
4017 feature_not_found "jemalloc" "install jemalloc devel"
4018 fi
4019fi
4020
dcc38d1c
MT
4021##########################################
4022# signalfd probe
4023signalfd="no"
4024cat > $TMPC << EOF
dcc38d1c
MT
4025#include <unistd.h>
4026#include <sys/syscall.h>
4027#include <signal.h>
4028int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4029EOF
4030
4031if compile_prog "" "" ; then
4032 signalfd=yes
4033fi
4034
c2882b96
RV
4035# check if eventfd is supported
4036eventfd=no
4037cat > $TMPC << EOF
4038#include <sys/eventfd.h>
4039
4040int main(void)
4041{
55cc7f3e 4042 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
c2882b96
RV
4043}
4044EOF
4045if compile_prog "" "" ; then
4046 eventfd=yes
4047fi
4048
751bcc39
MAL
4049# check if memfd is supported
4050memfd=no
4051cat > $TMPC << EOF
75e5b70e 4052#include <sys/mman.h>
751bcc39
MAL
4053
4054int main(void)
4055{
4056 return memfd_create("foo", MFD_ALLOW_SEALING);
4057}
4058EOF
4059if compile_prog "" "" ; then
4060 memfd=yes
4061fi
4062
4063
4064
d0927938
UH
4065# check for fallocate
4066fallocate=no
4067cat > $TMPC << EOF
4068#include <fcntl.h>
4069
4070int main(void)
4071{
4072 fallocate(0, 0, 0, 0);
4073 return 0;
4074}
4075EOF
8fb03151 4076if compile_prog "" "" ; then
d0927938
UH
4077 fallocate=yes
4078fi
4079
3d4fa43e
KK
4080# check for fallocate hole punching
4081fallocate_punch_hole=no
4082cat > $TMPC << EOF
4083#include <fcntl.h>
4084#include <linux/falloc.h>
4085
4086int main(void)
4087{
4088 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4089 return 0;
4090}
4091EOF
4092if compile_prog "" "" ; then
4093 fallocate_punch_hole=yes
4094fi
4095
b953f075
DL
4096# check that fallocate supports range zeroing inside the file
4097fallocate_zero_range=no
4098cat > $TMPC << EOF
4099#include <fcntl.h>
4100#include <linux/falloc.h>
4101
4102int main(void)
4103{
4104 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4105 return 0;
4106}
4107EOF
4108if compile_prog "" "" ; then
4109 fallocate_zero_range=yes
4110fi
4111
ed911435
KW
4112# check for posix_fallocate
4113posix_fallocate=no
4114cat > $TMPC << EOF
4115#include <fcntl.h>
4116
4117int main(void)
4118{
4119 posix_fallocate(0, 0, 0);
4120 return 0;
4121}
4122EOF
4123if compile_prog "" "" ; then
4124 posix_fallocate=yes
4125fi
4126
c727f47d
PM
4127# check for sync_file_range
4128sync_file_range=no
4129cat > $TMPC << EOF
4130#include <fcntl.h>
4131
4132int main(void)
4133{
4134 sync_file_range(0, 0, 0, 0);
4135 return 0;
4136}
4137EOF
8fb03151 4138if compile_prog "" "" ; then
c727f47d
PM
4139 sync_file_range=yes
4140fi
4141
dace20dc
PM
4142# check for linux/fiemap.h and FS_IOC_FIEMAP
4143fiemap=no
4144cat > $TMPC << EOF
4145#include <sys/ioctl.h>
4146#include <linux/fs.h>
4147#include <linux/fiemap.h>
4148
4149int main(void)
4150{
4151 ioctl(0, FS_IOC_FIEMAP, 0);
4152 return 0;
4153}
4154EOF
8fb03151 4155if compile_prog "" "" ; then
dace20dc
PM
4156 fiemap=yes
4157fi
4158
d0927938
UH
4159# check for dup3
4160dup3=no
4161cat > $TMPC << EOF
4162#include <unistd.h>
4163
4164int main(void)
4165{
4166 dup3(0, 0, 0);
4167 return 0;
4168}
4169EOF
78f5d726 4170if compile_prog "" "" ; then
d0927938
UH
4171 dup3=yes
4172fi
4173
4e0c6529
AB
4174# check for ppoll support
4175ppoll=no
4176cat > $TMPC << EOF
4177#include <poll.h>
4178
4179int main(void)
4180{
4181 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4182 ppoll(&pfd, 1, 0, 0);
4183 return 0;
4184}
4185EOF
4186if compile_prog "" "" ; then
4187 ppoll=yes
4188fi
4189
cd758dd0
AB
4190# check for prctl(PR_SET_TIMERSLACK , ... ) support
4191prctl_pr_set_timerslack=no
4192cat > $TMPC << EOF
4193#include <sys/prctl.h>
4194
4195int main(void)
4196{
4197 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4198 return 0;
4199}
4200EOF
4201if compile_prog "" "" ; then
4202 prctl_pr_set_timerslack=yes
4203fi
4204
3b6edd16
PM
4205# check for epoll support
4206epoll=no
4207cat > $TMPC << EOF
4208#include <sys/epoll.h>
4209
4210int main(void)
4211{
4212 epoll_create(0);
4213 return 0;
4214}
4215EOF
8fb03151 4216if compile_prog "" "" ; then
3b6edd16
PM
4217 epoll=yes
4218fi
4219
227f0214
PM
4220# epoll_create1 is a later addition
4221# so we must check separately for its presence
3b6edd16
PM
4222epoll_create1=no
4223cat > $TMPC << EOF
4224#include <sys/epoll.h>
4225
4226int main(void)
4227{
19e83f6b
PM
4228 /* Note that we use epoll_create1 as a value, not as
4229 * a function being called. This is necessary so that on
4230 * old SPARC glibc versions where the function was present in
4231 * the library but not declared in the header file we will
4232 * fail the configure check. (Otherwise we will get a compiler
4233 * warning but not an error, and will proceed to fail the
4234 * qemu compile where we compile with -Werror.)
4235 */
c075a723 4236 return (int)(uintptr_t)&epoll_create1;
3b6edd16
PM
4237}
4238EOF
8fb03151 4239if compile_prog "" "" ; then
3b6edd16
PM
4240 epoll_create1=yes
4241fi
4242
a8fd1aba
PM
4243# check for sendfile support
4244sendfile=no
4245cat > $TMPC << EOF
4246#include <sys/sendfile.h>
4247
4248int main(void)
4249{
4250 return sendfile(0, 0, 0, 0);
4251}
4252EOF
4253if compile_prog "" "" ; then
4254 sendfile=yes
4255fi
4256
51834341
RV
4257# check for timerfd support (glibc 2.8 and newer)
4258timerfd=no
4259cat > $TMPC << EOF
4260#include <sys/timerfd.h>
4261
4262int main(void)
4263{
4264 return(timerfd_create(CLOCK_REALTIME, 0));
4265}
4266EOF
4267if compile_prog "" "" ; then
4268 timerfd=yes
4269fi
4270
9af5c906
RV
4271# check for setns and unshare support
4272setns=no
4273cat > $TMPC << EOF
4274#include <sched.h>
4275
4276int main(void)
4277{
4278 int ret;
4279 ret = setns(0, 0);
4280 ret = unshare(0);
4281 return ret;
4282}
4283EOF
4284if compile_prog "" "" ; then
4285 setns=yes
4286fi
4287
38860a03
AM
4288# clock_adjtime probe
4289clock_adjtime=no
4290cat > $TMPC <<EOF
4291#include <time.h>
4292
4293int main(void)
4294{
4295 return clock_adjtime(0, 0);
4296}
4297EOF
4298clock_adjtime=no
4299if compile_prog "" "" ; then
4300 clock_adjtime=yes
4301fi
4302
5a03cd00
AM
4303# syncfs probe
4304syncfs=no
4305cat > $TMPC <<EOF
4306#include <unistd.h>
4307
4308int main(void)
4309{
4310 return syncfs(0);
4311}
4312EOF
4313syncfs=no
4314if compile_prog "" "" ; then
4315 syncfs=yes
4316fi
4317
cc8ae6de 4318# Check if tools are available to build documentation.
a25dba17 4319if test "$docs" != "no" ; then
01668d98 4320 if has makeinfo && has pod2man; then
a25dba17 4321 docs=yes
83a3ab8b 4322 else
a25dba17 4323 if test "$docs" = "yes" ; then
21684af0 4324 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
83a3ab8b 4325 fi
a25dba17 4326 docs=no
83a3ab8b 4327 fi
cc8ae6de
PB
4328fi
4329
f514f41c 4330# Search for bswap_32 function
6ae9a1f4
JQ
4331byteswap_h=no
4332cat > $TMPC << EOF
4333#include <byteswap.h>
4334int main(void) { return bswap_32(0); }
4335EOF
52166aa0 4336if compile_prog "" "" ; then
6ae9a1f4
JQ
4337 byteswap_h=yes
4338fi
4339
75f13596 4340# Search for bswap32 function
6ae9a1f4
JQ
4341bswap_h=no
4342cat > $TMPC << EOF
4343#include <sys/endian.h>
4344#include <sys/types.h>
4345#include <machine/bswap.h>
4346int main(void) { return bswap32(0); }
4347EOF
52166aa0 4348if compile_prog "" "" ; then
6ae9a1f4
JQ
4349 bswap_h=yes
4350fi
4351
c589b249 4352##########################################
e49ab19f 4353# Do we have libiscsi >= 1.9.0
c589b249 4354if test "$libiscsi" != "no" ; then
e49ab19f 4355 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3c33ea96 4356 libiscsi="yes"
ca871ec8
SW
4357 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4358 libiscsi_libs=$($pkg_config --libs libiscsi)
c589b249
RS
4359 else
4360 if test "$libiscsi" = "yes" ; then
e49ab19f 4361 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
c589b249
RS
4362 fi
4363 libiscsi="no"
4364 fi
4365fi
4366
8bacde8d
NC
4367##########################################
4368# Do we need libm
4369cat > $TMPC << EOF
4370#include <math.h>
f80ea986 4371int main(int argc, char **argv) { return isnan(sin((double)argc)); }
8bacde8d
NC
4372EOF
4373if compile_prog "" "" ; then
4374 :
4375elif compile_prog "" "-lm" ; then
4376 LIBS="-lm $LIBS"
4377 libs_qga="-lm $libs_qga"
4378else
76ad07a4 4379 error_exit "libm check failed"
8bacde8d
NC
4380fi
4381
da93a1fd
AL
4382##########################################
4383# Do we need librt
8bacde8d
NC
4384# uClibc provides 2 versions of clock_gettime(), one with realtime
4385# support and one without. This means that the clock_gettime() don't
4386# need -lrt. We still need it for timer_create() so we check for this
4387# function in addition.
da93a1fd
AL
4388cat > $TMPC <<EOF
4389#include <signal.h>
4390#include <time.h>
8bacde8d
NC
4391int main(void) {
4392 timer_create(CLOCK_REALTIME, NULL, NULL);
4393 return clock_gettime(CLOCK_REALTIME, NULL);
4394}
da93a1fd
AL
4395EOF
4396
52166aa0 4397if compile_prog "" "" ; then
07ffa4bd 4398 :
8bacde8d 4399# we need pthread for static linking. use previous pthread test result
18e588b1
RL
4400elif compile_prog "" "$pthread_lib -lrt" ; then
4401 LIBS="$LIBS -lrt"
4402 libs_qga="$libs_qga -lrt"
da93a1fd
AL
4403fi
4404
31ff504d 4405if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
78723752 4406 "$haiku" != "yes" ; then
6362a53f
JQ
4407 libs_softmmu="-lutil $libs_softmmu"
4408fi
4409
de5071c5 4410##########################################
cd4ec0b4
GH
4411# spice probe
4412if test "$spice" != "no" ; then
4413 cat > $TMPC << EOF
4414#include <spice.h>
4415int main(void) { spice_server_new(); return 0; }
4416EOF
710fc4f5
JD
4417 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4418 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
65d5d3f9
SW
4419 if $pkg_config --atleast-version=0.12.0 spice-server && \
4420 $pkg_config --atleast-version=0.12.3 spice-protocol && \
cd4ec0b4
GH
4421 compile_prog "$spice_cflags" "$spice_libs" ; then
4422 spice="yes"
4423 libs_softmmu="$libs_softmmu $spice_libs"
4424 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
2e0e3c39
AL
4425 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4426 spice_server_version=$($pkg_config --modversion spice-server)
cd4ec0b4
GH
4427 else
4428 if test "$spice" = "yes" ; then
8efc9363
HT
4429 feature_not_found "spice" \
4430 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
cd4ec0b4
GH
4431 fi
4432 spice="no"
4433 fi
4434fi
4435
7b02f544 4436# check for smartcard support
7b02f544
MAL
4437if test "$smartcard" != "no"; then
4438 if $pkg_config libcacard; then
4439 libcacard_cflags=$($pkg_config --cflags libcacard)
4440 libcacard_libs=$($pkg_config --libs libcacard)
7b02f544 4441 smartcard="yes"
afd347ab 4442 else
7b02f544
MAL
4443 if test "$smartcard" = "yes"; then
4444 feature_not_found "smartcard" "Install libcacard devel"
111a38b0 4445 fi
7b02f544 4446 smartcard="no"
111a38b0
RR
4447 fi
4448fi
111a38b0 4449
2b2325ff
GH
4450# check for libusb
4451if test "$libusb" != "no" ; then
65d5d3f9 4452 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
2b2325ff 4453 libusb="yes"
ca871ec8
SW
4454 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4455 libusb_libs=$($pkg_config --libs libusb-1.0)
2b2325ff
GH
4456 else
4457 if test "$libusb" = "yes"; then
8efc9363 4458 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
2b2325ff
GH
4459 fi
4460 libusb="no"
4461 fi
4462fi
4463
69354a83
HG
4464# check for usbredirparser for usb network redirection support
4465if test "$usb_redir" != "no" ; then
65d5d3f9 4466 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
69354a83 4467 usb_redir="yes"
ca871ec8
SW
4468 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4469 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
69354a83
HG
4470 else
4471 if test "$usb_redir" = "yes"; then
21684af0 4472 feature_not_found "usb-redir" "Install usbredir devel"
69354a83
HG
4473 fi
4474 usb_redir="no"
4475 fi
4476fi
4477
d9840e25
TS
4478##########################################
4479# check if we have VSS SDK headers for win
4480
4481if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4482 case "$vss_win32_sdk" in
690604f6 4483 "") vss_win32_include="-isystem $source_path" ;;
d9840e25
TS
4484 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4485 # handle path with spaces. So we symlink the headers into ".sdk/vss".
690604f6 4486 vss_win32_include="-isystem $source_path/.sdk/vss"
d9840e25
TS
4487 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4488 ;;
690604f6 4489 *) vss_win32_include="-isystem $vss_win32_sdk"
d9840e25
TS
4490 esac
4491 cat > $TMPC << EOF
4492#define __MIDL_user_allocate_free_DEFINED__
4493#include <inc/win2003/vss.h>
4494int main(void) { return VSS_CTX_BACKUP; }
4495EOF
4496 if compile_prog "$vss_win32_include" "" ; then
4497 guest_agent_with_vss="yes"
4498 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
315d3184 4499 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
f33ca81f 4500 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
d9840e25
TS
4501 else
4502 if test "$vss_win32_sdk" != "" ; then
4503 echo "ERROR: Please download and install Microsoft VSS SDK:"
4504 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4505 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4506 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4507 echo "ERROR: The headers are extracted in the directory \`inc'."
4508 feature_not_found "VSS support"
4509 fi
4510 guest_agent_with_vss="no"
4511 fi
4512fi
4513
4514##########################################
4515# lookup Windows platform SDK (if not specified)
4516# The SDK is needed only to build .tlb (type library) file of guest agent
4517# VSS provider from the source. It is usually unnecessary because the
4518# pre-compiled .tlb file is included.
4519
4520if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4521 if test -z "$win_sdk"; then
4522 programfiles="$PROGRAMFILES"
4523 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4524 if test -n "$programfiles"; then
4525 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4526 else
4527 feature_not_found "Windows SDK"
4528 fi
4529 elif test "$win_sdk" = "no"; then
4530 win_sdk=""
4531 fi
4532fi
4533
50cbebb9
MR
4534##########################################
4535# check if mingw environment provides a recent ntddscsi.h
4536if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4537 cat > $TMPC << EOF
4538#include <windows.h>
4539#include <ntddscsi.h>
4540int main(void) {
4541#if !defined(IOCTL_SCSI_GET_ADDRESS)
4542#error Missing required ioctl definitions
4543#endif
4544 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4545 return addr.Lun;
4546}
4547EOF
4548 if compile_prog "" "" ; then
4549 guest_agent_ntddscsi=yes
c54e1eb4 4550 libs_qga="-lsetupapi $libs_qga"
50cbebb9
MR
4551 fi
4552fi
4553
9d9e1521
GH
4554##########################################
4555# virgl renderer probe
4556
4557if test "$virglrenderer" != "no" ; then
4558 cat > $TMPC << EOF
4559#include <virglrenderer.h>
4560int main(void) { virgl_renderer_poll(); return 0; }
4561EOF
4562 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4563 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4564 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4565 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4566 virglrenderer="yes"
4567 else
4568 if test "$virglrenderer" = "yes" ; then
4569 feature_not_found "virglrenderer"
4570 fi
4571 virglrenderer="no"
4572 fi
4573fi
4574
8ca80760
RH
4575##########################################
4576# capstone
4577
e219c499
RH
4578case "$capstone" in
4579 "" | yes)
4580 if $pkg_config capstone; then
4581 capstone=system
123ac0bb 4582 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
e219c499
RH
4583 capstone=git
4584 elif test -e "${source_path}/capstone/Makefile" ; then
4585 capstone=internal
4586 elif test -z "$capstone" ; then
4587 capstone=no
4588 else
4589 feature_not_found "capstone" "Install capstone devel or git submodule"
4590 fi
4591 ;;
4592
4593 system)
4594 if ! $pkg_config capstone; then
4595 feature_not_found "capstone" "Install capstone devel"
4596 fi
4597 ;;
4598esac
4599
4600case "$capstone" in
4601 git | internal)
4602 if test "$capstone" = git; then
4603 git_submodules="${git_submodules} capstone"
4604 fi
4605 mkdir -p capstone
4606 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4607 if test "$mingw32" = "yes"; then
4608 LIBCAPSTONE=capstone.lib
4609 else
4610 LIBCAPSTONE=libcapstone.a
4611 fi
4612 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4613 ;;
4614
4615 system)
8ca80760
RH
4616 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4617 LIBS="$($pkg_config --libs capstone) $LIBS"
e219c499
RH
4618 ;;
4619
4620 no)
4621 ;;
4622 *)
4623 error_exit "Unknown state for capstone: $capstone"
4624 ;;
4625esac
8ca80760 4626
5f6b9e8f
BS
4627##########################################
4628# check if we have fdatasync
4629
4630fdatasync=no
4631cat > $TMPC << EOF
4632#include <unistd.h>
d1722a27
AR
4633int main(void) {
4634#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4635return fdatasync(0);
4636#else
e172fe11 4637#error Not supported
d1722a27
AR
4638#endif
4639}
5f6b9e8f
BS
4640EOF
4641if compile_prog "" "" ; then
4642 fdatasync=yes
4643fi
4644
e78815a5
AF
4645##########################################
4646# check if we have madvise
4647
4648madvise=no
4649cat > $TMPC << EOF
4650#include <sys/types.h>
4651#include <sys/mman.h>
832ce9c2 4652#include <stddef.h>
e78815a5
AF
4653int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4654EOF
4655if compile_prog "" "" ; then
4656 madvise=yes
4657fi
4658
4659##########################################
4660# check if we have posix_madvise
4661
4662posix_madvise=no
4663cat > $TMPC << EOF
4664#include <sys/mman.h>
832ce9c2 4665#include <stddef.h>
e78815a5
AF
4666int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4667EOF
4668if compile_prog "" "" ; then
4669 posix_madvise=yes
4670fi
4671
9bc5a719
AG
4672##########################################
4673# check if we have posix_memalign()
4674
4675posix_memalign=no
4676cat > $TMPC << EOF
4677#include <stdlib.h>
4678int main(void) {
4679 void *p;
4680 return posix_memalign(&p, 8, 8);
4681}
4682EOF
4683if compile_prog "" "" ; then
4684 posix_memalign=yes
4685fi
4686
0a852417
PD
4687##########################################
4688# check if we have posix_syslog
4689
4690posix_syslog=no
4691cat > $TMPC << EOF
4692#include <syslog.h>
4693int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4694EOF
4695if compile_prog "" "" ; then
4696 posix_syslog=yes
4697fi
4698
401bc051
PM
4699##########################################
4700# check if we have sem_timedwait
4701
4702sem_timedwait=no
4703cat > $TMPC << EOF
4704#include <semaphore.h>
4705int main(void) { return sem_timedwait(0, 0); }
4706EOF
4707if compile_prog "" "" ; then
4708 sem_timedwait=yes
4709fi
4710
94a420b1
SH
4711##########################################
4712# check if trace backend exists
4713
5b808275 4714$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 4715if test "$?" -ne 0 ; then
5b808275
LV
4716 error_exit "invalid trace backends" \
4717 "Please choose supported trace backends."
94a420b1
SH
4718fi
4719
7e24e92a
SH
4720##########################################
4721# For 'ust' backend, test if ust headers are present
5b808275 4722if have_backend "ust"; then
7e24e92a 4723 cat > $TMPC << EOF
bf15f63c 4724#include <lttng/tracepoint.h>
7e24e92a
SH
4725int main(void) { return 0; }
4726EOF
c79ed23d 4727 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
bf15f63c 4728 if $pkg_config lttng-ust --exists; then
89138857 4729 lttng_ust_libs=$($pkg_config --libs lttng-ust)
bf15f63c 4730 else
c79ed23d 4731 lttng_ust_libs="-llttng-ust -ldl"
bf15f63c
MG
4732 fi
4733 if $pkg_config liburcu-bp --exists; then
89138857 4734 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
bf15f63c
MG
4735 else
4736 urcu_bp_libs="-lurcu-bp"
4737 fi
4738
4739 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4740 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
7e24e92a 4741 else
bf15f63c 4742 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
4743 fi
4744fi
b3d08c02
DB
4745
4746##########################################
4747# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 4748if have_backend "dtrace"; then
b3d08c02 4749 if ! has 'dtrace' ; then
76ad07a4 4750 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 4751 fi
c276b17d
DB
4752 trace_backend_stap="no"
4753 if has 'stap' ; then
4754 trace_backend_stap="yes"
4755 fi
b3d08c02
DB
4756fi
4757
023367e6 4758##########################################
519175a2 4759# check and set a backend for coroutine
d0e2fce5 4760
7c2acc70 4761# We prefer ucontext, but it's not always possible. The fallback
33c53c54
DB
4762# is sigcontext. On Windows the only valid backend is the Windows
4763# specific one.
7c2acc70
PM
4764
4765ucontext_works=no
4766if test "$darwin" != "yes"; then
4767 cat > $TMPC << EOF
d0e2fce5 4768#include <ucontext.h>
cdf84806
PM
4769#ifdef __stub_makecontext
4770#error Ignoring glibc stub makecontext which will always fail
4771#endif
75cafad7 4772int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 4773EOF
7c2acc70
PM
4774 if compile_prog "" "" ; then
4775 ucontext_works=yes
4776 fi
4777fi
4778
4779if test "$coroutine" = ""; then
4780 if test "$mingw32" = "yes"; then
4781 coroutine=win32
4782 elif test "$ucontext_works" = "yes"; then
4783 coroutine=ucontext
4784 else
4785 coroutine=sigaltstack
d0e2fce5 4786 fi
519175a2 4787else
7c2acc70
PM
4788 case $coroutine in
4789 windows)
4790 if test "$mingw32" != "yes"; then
4791 error_exit "'windows' coroutine backend only valid for Windows"
4792 fi
4793 # Unfortunately the user visible backend name doesn't match the
4794 # coroutine-*.c filename for this case, so we have to adjust it here.
4795 coroutine=win32
4796 ;;
4797 ucontext)
4798 if test "$ucontext_works" != "yes"; then
4799 feature_not_found "ucontext"
4800 fi
4801 ;;
33c53c54 4802 sigaltstack)
7c2acc70
PM
4803 if test "$mingw32" = "yes"; then
4804 error_exit "only the 'windows' coroutine backend is valid for Windows"
4805 fi
4806 ;;
4807 *)
4808 error_exit "unknown coroutine backend $coroutine"
4809 ;;
4810 esac
d0e2fce5
AK
4811fi
4812
70c60c08 4813if test "$coroutine_pool" = ""; then
33c53c54 4814 coroutine_pool=yes
70c60c08
SH
4815fi
4816
7d992e4d 4817if test "$debug_stack_usage" = "yes"; then
7d992e4d
PL
4818 if test "$coroutine_pool" = "yes"; then
4819 echo "WARN: disabling coroutine pool for stack usage debugging"
4820 coroutine_pool=no
4821 fi
4822fi
4823
4824
d2042378
AK
4825##########################################
4826# check if we have open_by_handle_at
4827
4e1797f9 4828open_by_handle_at=no
d2042378
AK
4829cat > $TMPC << EOF
4830#include <fcntl.h>
acc55ba8
SW
4831#if !defined(AT_EMPTY_PATH)
4832# error missing definition
4833#else
75cafad7 4834int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
acc55ba8 4835#endif
d2042378
AK
4836EOF
4837if compile_prog "" "" ; then
4838 open_by_handle_at=yes
4839fi
4840
e06a765e
HPB
4841########################################
4842# check if we have linux/magic.h
4843
4844linux_magic_h=no
4845cat > $TMPC << EOF
4846#include <linux/magic.h>
4847int main(void) {
75cafad7 4848 return 0;
e06a765e
HPB
4849}
4850EOF
4851if compile_prog "" "" ; then
4852 linux_magic_h=yes
4853fi
4854
06d71fa1 4855########################################
c95e3080
KW
4856# check whether we can disable warning option with a pragma (this is needed
4857# to silence warnings in the headers of some versions of external libraries).
4858# This test has to be compiled with -Werror as otherwise an unknown pragma is
4859# only a warning.
4860#
4861# If we can't selectively disable warning in the code, disable -Werror so that
4862# the build doesn't fail anyway.
4863
06d71fa1
PM
4864pragma_disable_unused_but_set=no
4865cat > $TMPC << EOF
e6f53fd5 4866#pragma GCC diagnostic push
06d71fa1 4867#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
c95e3080 4868#pragma GCC diagnostic ignored "-Wstrict-prototypes"
e6f53fd5 4869#pragma GCC diagnostic pop
c95e3080 4870
06d71fa1
PM
4871int main(void) {
4872 return 0;
4873}
4874EOF
4875if compile_prog "-Werror" "" ; then
cc6e3ca9 4876 pragma_diagnostic_available=yes
c95e3080
KW
4877else
4878 werror=no
06d71fa1
PM
4879fi
4880
3f4349dc 4881########################################
541be927 4882# check if we have valgrind/valgrind.h
3f4349dc
KW
4883
4884valgrind_h=no
4885cat > $TMPC << EOF
4886#include <valgrind/valgrind.h>
3f4349dc 4887int main(void) {
3f4349dc
KW
4888 return 0;
4889}
4890EOF
4891if compile_prog "" "" ; then
4892 valgrind_h=yes
4893fi
4894
8ab1bf12
LC
4895########################################
4896# check if environ is declared
4897
4898has_environ=no
4899cat > $TMPC << EOF
4900#include <unistd.h>
4901int main(void) {
c075a723 4902 environ = 0;
8ab1bf12
LC
4903 return 0;
4904}
4905EOF
4906if compile_prog "" "" ; then
4907 has_environ=yes
4908fi
4909
76a347e1
RH
4910########################################
4911# check if cpuid.h is usable.
4912
76a347e1
RH
4913cat > $TMPC << EOF
4914#include <cpuid.h>
4915int main(void) {
774d566c
PM
4916 unsigned a, b, c, d;
4917 int max = __get_cpuid_max(0, 0);
4918
4919 if (max >= 1) {
4920 __cpuid(1, a, b, c, d);
4921 }
4922
4923 if (max >= 7) {
4924 __cpuid_count(7, 0, a, b, c, d);
4925 }
4926
4927 return 0;
76a347e1
RH
4928}
4929EOF
4930if compile_prog "" "" ; then
4931 cpuid_h=yes
4932fi
4933
5dd89908
RH
4934##########################################
4935# avx2 optimization requirement check
4936#
4937# There is no point enabling this if cpuid.h is not usable,
4938# since we won't be able to select the new routines.
4939
4940if test $cpuid_h = yes; then
4941 cat > $TMPC << EOF
4942#pragma GCC push_options
4943#pragma GCC target("avx2")
4944#include <cpuid.h>
4945#include <immintrin.h>
4946static int bar(void *a) {
4947 __m256i x = *(__m256i *)a;
4948 return _mm256_testz_si256(x, x);
4949}
4950int main(int argc, char *argv[]) { return bar(argv[0]); }
4951EOF
4952 if compile_object "" ; then
4953 avx2_opt="yes"
4954 fi
4955fi
4956
f540166b
RH
4957########################################
4958# check if __[u]int128_t is usable.
4959
4960int128=no
4961cat > $TMPC << EOF
a00f66ab
SW
4962#if defined(__clang_major__) && defined(__clang_minor__)
4963# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4964# error __int128_t does not work in CLANG before 3.2
4965# endif
4966#endif
f540166b
RH
4967__int128_t a;
4968__uint128_t b;
4969int main (void) {
4970 a = a + b;
4971 b = a * b;
464e3671 4972 a = a * a;
f540166b
RH
4973 return 0;
4974}
4975EOF
4976if compile_prog "" "" ; then
4977 int128=yes
4978fi
76a347e1 4979
7ebee43e
RH
4980#########################################
4981# See if 128-bit atomic operations are supported.
4982
4983atomic128=no
4984if test "$int128" = "yes"; then
4985 cat > $TMPC << EOF
4986int main(void)
4987{
4988 unsigned __int128 x = 0, y = 0;
4989 y = __atomic_load_16(&x, 0);
4990 __atomic_store_16(&x, y, 0);
4991 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4992 return 0;
4993}
4994EOF
4995 if compile_prog "" "" ; then
4996 atomic128=yes
4997 fi
4998fi
4999
df79b996
RH
5000#########################################
5001# See if 64-bit atomic operations are supported.
5002# Note that without __atomic builtins, we can only
5003# assume atomic loads/stores max at pointer size.
5004
5005cat > $TMPC << EOF
5006#include <stdint.h>
5007int main(void)
5008{
5009 uint64_t x = 0, y = 0;
5010#ifdef __ATOMIC_RELAXED
5011 y = __atomic_load_8(&x, 0);
5012 __atomic_store_8(&x, y, 0);
5013 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5014 __atomic_exchange_8(&x, y, 0);
5015 __atomic_fetch_add_8(&x, y, 0);
5016#else
5017 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5018 __sync_lock_test_and_set(&x, y);
5019 __sync_val_compare_and_swap(&x, y, 0);
5020 __sync_fetch_and_add(&x, y);
5021#endif
5022 return 0;
5023}
5024EOF
5025if compile_prog "" "" ; then
5026 atomic64=yes
5027fi
5028
db432672
RH
5029########################################
5030# See if 16-byte vector operations are supported.
5031# Even without a vector unit the compiler may expand these.
5032# There is a bug in old GCC for PPC that crashes here.
5033# Unfortunately it's the system compiler for Centos 7.
5034
5035cat > $TMPC << EOF
5036typedef unsigned char U1 __attribute__((vector_size(16)));
5037typedef unsigned short U2 __attribute__((vector_size(16)));
5038typedef unsigned int U4 __attribute__((vector_size(16)));
5039typedef unsigned long long U8 __attribute__((vector_size(16)));
5040typedef signed char S1 __attribute__((vector_size(16)));
5041typedef signed short S2 __attribute__((vector_size(16)));
5042typedef signed int S4 __attribute__((vector_size(16)));
5043typedef signed long long S8 __attribute__((vector_size(16)));
5044static U1 a1, b1;
5045static U2 a2, b2;
5046static U4 a4, b4;
5047static U8 a8, b8;
5048static S1 c1;
5049static S2 c2;
5050static S4 c4;
5051static S8 c8;
5052static int i;
5053int main(void)
5054{
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 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5061 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5062 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5063 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5064 return 0;
5065}
5066EOF
5067
5068vector16=no
5069if compile_prog "" "" ; then
5070 vector16=yes
5071fi
5072
1e6e9aca
RH
5073########################################
5074# check if getauxval is available.
5075
5076getauxval=no
5077cat > $TMPC << EOF
5078#include <sys/auxv.h>
5079int main(void) {
5080 return getauxval(AT_HWCAP) == 0;
5081}
5082EOF
5083if compile_prog "" "" ; then
5084 getauxval=yes
5085fi
5086
fd0e6053
JS
5087########################################
5088# check if ccache is interfering with
5089# semantic analysis of macros
5090
5e4dfd3d 5091unset CCACHE_CPP2
fd0e6053
JS
5092ccache_cpp2=no
5093cat > $TMPC << EOF
5094static const int Z = 1;
5095#define fn() ({ Z; })
5096#define TAUT(X) ((X) == Z)
5097#define PAREN(X, Y) (X == Y)
5098#define ID(X) (X)
5099int main(int argc, char *argv[])
5100{
5101 int x = 0, y = 0;
5102 x = ID(x);
5103 x = fn();
5104 fn();
5105 if (PAREN(x, y)) return 0;
5106 if (TAUT(Z)) return 0;
5107 return 0;
5108}
5109EOF
5110
5111if ! compile_object "-Werror"; then
5112 ccache_cpp2=yes
5113fi
5114
b553a042
JS
5115#################################################
5116# clang does not support glibc + FORTIFY_SOURCE.
5117
5118if test "$fortify_source" != "no"; then
5119 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5120 fortify_source="no";
e189091f 5121 elif test -n "$cxx" && has $cxx &&
cfcc7c14 5122 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
b553a042
JS
5123 fortify_source="no";
5124 else
5125 fortify_source="yes"
5126 fi
5127fi
5128
277abf15
JV
5129##########################################
5130# check if struct fsxattr is available via linux/fs.h
5131
5132have_fsxattr=no
5133cat > $TMPC << EOF
5134#include <linux/fs.h>
5135struct fsxattr foo;
5136int main(void) {
5137 return 0;
5138}
5139EOF
5140if compile_prog "" "" ; then
5141 have_fsxattr=yes
5142fi
5143
b66e10e4
PM
5144##########################################
5145# check if rtnetlink.h exists and is useful
575b22b1
LV
5146have_rtnetlink=no
5147cat > $TMPC << EOF
5148#include <linux/rtnetlink.h>
5149int main(void) {
5150 return IFLA_PROTO_DOWN;
5151}
5152EOF
5153if compile_prog "" "" ; then
5154 have_rtnetlink=yes
5155fi
5156
6a02c806
SH
5157##########################################
5158# check for usable AF_VSOCK environment
5159have_af_vsock=no
5160cat > $TMPC << EOF
5161#include <errno.h>
5162#include <sys/types.h>
5163#include <sys/socket.h>
5164#if !defined(AF_VSOCK)
5165# error missing AF_VSOCK flag
5166#endif
5167#include <linux/vm_sockets.h>
5168int main(void) {
5169 int sock, ret;
5170 struct sockaddr_vm svm;
5171 socklen_t len = sizeof(svm);
5172 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5173 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5174 if ((ret == -1) && (errno == ENOTCONN)) {
5175 return 0;
5176 }
5177 return -1;
5178}
5179EOF
5180if compile_prog "" "" ; then
5181 have_af_vsock=yes
5182fi
5183
f0d92b56
LM
5184##########################################
5185# check for usable AF_ALG environment
5186hava_afalg=no
5187cat > $TMPC << EOF
5188#include <errno.h>
5189#include <sys/types.h>
5190#include <sys/socket.h>
5191#include <linux/if_alg.h>
5192int main(void) {
5193 int sock;
5194 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5195 return sock;
5196}
5197EOF
5198if compile_prog "" "" ; then
5199 have_afalg=yes
5200fi
5201if test "$crypto_afalg" = "yes"
5202then
5203 if test "$have_afalg" != "yes"
5204 then
5205 error_exit "AF_ALG requested but could not be detected"
5206 fi
5207fi
5208
5209
c97d6d2c
SAGDR
5210#################################################
5211# Check to see if we have the Hypervisor framework
d2d08522 5212if [ "$darwin" = "yes" ] ; then
c97d6d2c
SAGDR
5213 cat > $TMPC << EOF
5214#include <Hypervisor/hv.h>
5215int main() { return 0;}
5216EOF
5217 if ! compile_object ""; then
5218 hvf='no'
5219 else
5220 hvf='yes'
5221 LDFLAGS="-framework Hypervisor $LDFLAGS"
5222 fi
5223fi
5224
6969ec6c
JC
5225#################################################
5226# Sparc implicitly links with --relax, which is
5227# incompatible with -r, so --no-relax should be
5228# given. It does no harm to give it on other
5229# platforms too.
5230
5231# Note: the prototype is needed since QEMU_CFLAGS
5232# contains -Wmissing-prototypes
5233cat > $TMPC << EOF
5234extern int foo(void);
5235int foo(void) { return 0; }
5236EOF
5237if ! compile_object ""; then
5238 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5239fi
7ecf44a5
PB
5240for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5241 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5242 LD_REL_FLAGS=$i
5243 break
5244 fi
5245done
5246if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5247 feature_not_found "modules" "Cannot find how to build relocatable objects"
6969ec6c
JC
5248fi
5249
4d04351f
CC
5250##########################################
5251# check for sysmacros.h
5252
5253have_sysmacros=no
5254cat > $TMPC << EOF
5255#include <sys/sysmacros.h>
5256int main(void) {
5257 return makedev(0, 0);
5258}
5259EOF
5260if compile_prog "" "" ; then
5261 have_sysmacros=yes
5262fi
5263
da92c3ff
AM
5264##########################################
5265# Veritas HyperScale block driver VxHS
5266# Check if libvxhs is installed
5267
5268if test "$vxhs" != "no" ; then
5269 cat > $TMPC <<EOF
5270#include <stdint.h>
5271#include <qnio/qnio_api.h>
5272
5273void *vxhs_callback;
5274
5275int main(void) {
5276 iio_init(QNIO_VERSION, vxhs_callback);
5277 return 0;
5278}
5279EOF
5280 vxhs_libs="-lvxhs -lssl"
5281 if compile_prog "" "$vxhs_libs" ; then
5282 vxhs=yes
5283 else
5284 if test "$vxhs" = "yes" ; then
5285 feature_not_found "vxhs block device" "Install libvxhs See github"
5286 fi
5287 vxhs=no
5288 fi
5289fi
5290
49e00a18
AG
5291##########################################
5292# check for _Static_assert()
5293
5294have_static_assert=no
5295cat > $TMPC << EOF
5296_Static_assert(1, "success");
5297int main(void) {
5298 return 0;
5299}
5300EOF
5301if compile_prog "" "" ; then
5302 have_static_assert=yes
5303fi
5304
e674605f
TG
5305##########################################
5306# check for utmpx.h, it is missing e.g. on OpenBSD
5307
5308have_utmpx=no
5309cat > $TMPC << EOF
5310#include <utmpx.h>
5311struct utmpx user_info;
5312int main(void) {
5313 return 0;
5314}
5315EOF
5316if compile_prog "" "" ; then
5317 have_utmpx=yes
5318fi
5319
247724cb
MAL
5320##########################################
5321# checks for sanitizers
5322
218bb57d
MAL
5323# we could use a simple skeleton for flags checks, but this also
5324# detect the static linking issue of ubsan, see also:
5325# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5326cat > $TMPC << EOF
5327#include <stdint.h>
5328int main(void) {
5329 return INT32_MIN / -1;
5330}
5331EOF
247724cb
MAL
5332
5333have_asan=no
5334have_ubsan=no
d83414e1
MAL
5335have_asan_iface_h=no
5336have_asan_iface_fiber=no
247724cb
MAL
5337
5338if test "$sanitizers" = "yes" ; then
5339 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5340 have_asan=yes
5341 fi
5342 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5343 have_ubsan=yes
5344 fi
d83414e1
MAL
5345
5346 if check_include "sanitizer/asan_interface.h" ; then
5347 have_asan_iface_h=yes
5348 fi
5349
5350 cat > $TMPC << EOF
5351#include <sanitizer/asan_interface.h>
5352int main(void) {
5353 __sanitizer_start_switch_fiber(0, 0, 0);
5354 return 0;
5355}
5356EOF
5357 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5358 have_asan_iface_fiber=yes
5359 fi
247724cb
MAL
5360fi
5361
7e24e92a 5362##########################################
e86ecd4b
JQ
5363# End of CC checks
5364# After here, no more $cc or $ld runs
5365
d83414e1
MAL
5366write_c_skeleton
5367
1d728c39
BS
5368if test "$gcov" = "yes" ; then
5369 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5370 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
b553a042 5371elif test "$fortify_source" = "yes" ; then
e600cdf3 5372 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
90654868
MAL
5373elif test "$debug" = "yes"; then
5374 if compile_prog "-Og" ""; then
5375 CFLAGS="-Og $CFLAGS"
5376 elif compile_prog "-O1" ""; then
5377 CFLAGS="-O1 $CFLAGS"
5378 fi
5379 # Workaround GCC false-positive Wuninitialized bugs with Og or O1:
5380 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=24639
5381 if cc_has_warning_flag "-Wno-maybe-uninitialized"; then
5382 CFLAGS="-Wno-maybe-uninitialized $CFLAGS"
5383 fi
5384else
5385 CFLAGS="-O2 $CFLAGS"
e86ecd4b 5386fi
a316e378 5387
247724cb
MAL
5388if test "$have_asan" = "yes"; then
5389 CFLAGS="-fsanitize=address $CFLAGS"
d83414e1
MAL
5390 if test "$have_asan_iface_h" = "no" ; then
5391 echo "ASAN build enabled, but ASAN header missing." \
5392 "Without code annotation, the report may be inferior."
5393 elif test "$have_asan_iface_fiber" = "no" ; then
5394 echo "ASAN build enabled, but ASAN header is too old." \
5395 "Without code annotation, the report may be inferior."
5396 fi
247724cb
MAL
5397fi
5398if test "$have_ubsan" = "yes"; then
5399 CFLAGS="-fsanitize=undefined $CFLAGS"
5400fi
5401
6542aa9c
PL
5402##########################################
5403# Do we have libnfs
5404if test "$libnfs" != "no" ; then
b7d769c9 5405 if $pkg_config --atleast-version=1.9.3 libnfs; then
6542aa9c
PL
5406 libnfs="yes"
5407 libnfs_libs=$($pkg_config --libs libnfs)
6542aa9c
PL
5408 else
5409 if test "$libnfs" = "yes" ; then
8efc9363 5410 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6542aa9c
PL
5411 fi
5412 libnfs="no"
5413 fi
5414fi
1d728c39 5415
6ca026cb
PM
5416# Now we've finished running tests it's OK to add -Werror to the compiler flags
5417if test "$werror" = "yes"; then
5418 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5419fi
5420
e86ecd4b
JQ
5421if test "$solaris" = "no" ; then
5422 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
1156c669 5423 LDFLAGS="-Wl,--warn-common $LDFLAGS"
e86ecd4b
JQ
5424 fi
5425fi
5426
94dd53c5
GH
5427# test if pod2man has --utf8 option
5428if pod2man --help | grep -q utf8; then
5429 POD2MAN="pod2man --utf8"
5430else
5431 POD2MAN="pod2man"
5432fi
5433
952afb71
BS
5434# Use ASLR, no-SEH and DEP if available
5435if test "$mingw32" = "yes" ; then
5436 for flag in --dynamicbase --no-seh --nxcompat; do
e9a3591f 5437 if ld_has $flag ; then
952afb71
BS
5438 LDFLAGS="-Wl,$flag $LDFLAGS"
5439 fi
5440 done
5441fi
5442
10ea68b3 5443qemu_confdir=$sysconfdir$confsuffix
e26110cf 5444qemu_moddir=$libdir$confsuffix
528ae5b8 5445qemu_datadir=$datadir$confsuffix
834574ea 5446qemu_localedir="$datadir/locale"
e7b45cc4 5447
e0580342
KR
5448# We can only support ivshmem if we have eventfd
5449if [ "$eventfd" = "yes" ]; then
5450 ivshmem=yes
5451fi
5452
4b1c11fd
DB
5453tools=""
5454if test "$want_tools" = "yes" ; then
ca35f780 5455 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4b1c11fd
DB
5456 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5457 tools="qemu-nbd\$(EXESUF) $tools"
b1449edb
KR
5458 fi
5459 if [ "$ivshmem" = "yes" ]; then
a75eb03b 5460 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4b1c11fd
DB
5461 fi
5462fi
5463if test "$softmmu" = yes ; then
b855f8d1
PB
5464 if test "$linux" = yes; then
5465 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
aabfd88d
AF
5466 virtfs=yes
5467 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5468 else
5469 if test "$virtfs" = yes; then
b855f8d1 5470 error_exit "VirtFS requires libcap devel and libattr devel"
983eef5a 5471 fi
17500370 5472 virtfs=no
aabfd88d 5473 fi
fe8fc5ae
PB
5474 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5475 mpath=yes
5476 else
5477 if test "$mpath" = yes; then
5478 error_exit "Multipath requires libmpathpersist devel"
5479 fi
5480 mpath=no
5481 fi
b855f8d1
PB
5482 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5483 else
5484 if test "$virtfs" = yes; then
5485 error_exit "VirtFS is supported only on Linux"
5486 fi
5487 virtfs=no
fe8fc5ae
PB
5488 if test "$mpath" = yes; then
5489 error_exit "Multipath is supported only on Linux"
5490 fi
5491 mpath=no
17bff52b 5492 fi
ff69fd8c
LV
5493 if test "$xkbcommon" = "yes"; then
5494 tools="qemu-keymap\$(EXESUF) $tools"
5495 fi
6a021536 5496fi
9d6bc27b
MR
5497
5498# Probe for guest agent support/options
5499
e8ef31a3 5500if [ "$guest_agent" != "no" ]; then
b39297ae 5501 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
fafcaf1d 5502 tools="qemu-ga $tools"
e8ef31a3
MT
5503 guest_agent=yes
5504 elif [ "$guest_agent" != yes ]; then
5505 guest_agent=no
5506 else
5507 error_exit "Guest agent is not supported on this platform"
ca35f780 5508 fi
00c705fb 5509fi
ca35f780 5510
9d6bc27b
MR
5511# Guest agent Window MSI package
5512
5513if test "$guest_agent" != yes; then
5514 if test "$guest_agent_msi" = yes; then
5515 error_exit "MSI guest agent package requires guest agent enabled"
5516 fi
5517 guest_agent_msi=no
5518elif test "$mingw32" != "yes"; then
5519 if test "$guest_agent_msi" = "yes"; then
5520 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5521 fi
5522 guest_agent_msi=no
5523elif ! has wixl; then
5524 if test "$guest_agent_msi" = "yes"; then
5525 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5526 fi
5527 guest_agent_msi=no
1a34904e
MR
5528else
5529 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5530 # disabled explicitly
5531 if test "$guest_agent_msi" != "no"; then
5532 guest_agent_msi=yes
5533 fi
9d6bc27b
MR
5534fi
5535
1a34904e 5536if test "$guest_agent_msi" = "yes"; then
9d6bc27b
MR
5537 if test "$guest_agent_with_vss" = "yes"; then
5538 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5539 fi
5540
5541 if test "$QEMU_GA_MANUFACTURER" = ""; then
5542 QEMU_GA_MANUFACTURER=QEMU
5543 fi
5544
5545 if test "$QEMU_GA_DISTRO" = ""; then
5546 QEMU_GA_DISTRO=Linux
5547 fi
5548
5549 if test "$QEMU_GA_VERSION" = ""; then
89138857 5550 QEMU_GA_VERSION=$(cat $source_path/VERSION)
9d6bc27b
MR
5551 fi
5552
89138857 5553 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
9d6bc27b
MR
5554
5555 case "$cpu" in
5556 x86_64)
5557 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5558 ;;
5559 i386)
5560 QEMU_GA_MSI_ARCH="-D Arch=32"
5561 ;;
5562 *)
5563 error_exit "CPU $cpu not supported for building installation package"
5564 ;;
5565 esac
5566fi
5567
ca35f780
PB
5568# Mac OS X ships with a broken assembler
5569roms=
5570if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5571 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5572 "$softmmu" = yes ; then
e57218b6 5573 # Different host OS linkers have different ideas about the name of the ELF
c65d5e4e
BS
5574 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5575 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5576 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
e57218b6
PM
5577 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5578 ld_i386_emulation="$emu"
5579 roms="optionrom"
5580 break
5581 fi
5582 done
ca35f780 5583fi
d0384d1d 5584if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
39ac8455
DG
5585 roms="$roms spapr-rtas"
5586fi
ca35f780 5587
9933c305
CB
5588if test "$cpu" = "s390x" ; then
5589 roms="$roms s390-ccw"
5590fi
5591
964c6fa1 5592# Probe for the need for relocating the user-only binary.
92fe2ba8 5593if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
964c6fa1
RH
5594 textseg_addr=
5595 case "$cpu" in
479eb121
RH
5596 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5597 # ??? Rationale for choosing this address
964c6fa1
RH
5598 textseg_addr=0x60000000
5599 ;;
5600 mips)
479eb121
RH
5601 # A 256M aligned address, high in the address space, with enough
5602 # room for the code_gen_buffer above it before the stack.
5603 textseg_addr=0x60000000
964c6fa1
RH
5604 ;;
5605 esac
5606 if [ -n "$textseg_addr" ]; then
5607 cat > $TMPC <<EOF
5608 int main(void) { return 0; }
5609EOF
5610 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5611 if ! compile_prog "" "$textseg_ldflags"; then
5612 # In case ld does not support -Ttext-segment, edit the default linker
5613 # script via sed to set the .text start addr. This is needed on FreeBSD
5614 # at least.
92fe2ba8
PM
5615 if ! $ld --verbose >/dev/null 2>&1; then
5616 error_exit \
5617 "We need to link the QEMU user mode binaries at a" \
5618 "specific text address. Unfortunately your linker" \
5619 "doesn't support either the -Ttext-segment option or" \
5620 "printing the default linker script with --verbose." \
5621 "If you don't want the user mode binaries, pass the" \
5622 "--disable-user option to configure."
5623 fi
5624
964c6fa1
RH
5625 $ld --verbose | sed \
5626 -e '1,/==================================================/d' \
5627 -e '/==================================================/,$d' \
5628 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5629 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5630 textseg_ldflags="-Wl,-T../config-host.ld"
5631 fi
5632 fi
5633fi
5634
11cde1c8
BD
5635# Check that the C++ compiler exists and works with the C compiler.
5636# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5637if has $cxx; then
5638 cat > $TMPC <<EOF
5639int c_function(void);
5640int main(void) { return c_function(); }
5641EOF
5642
5643 compile_object
5644
5645 cat > $TMPCXX <<EOF
5646extern "C" {
5647 int c_function(void);
5648}
5649int c_function(void) { return 42; }
5650EOF
5651
5652 update_cxxflags
5653
5654 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5655 # C++ compiler $cxx works ok with C compiler $cc
5656 :
5657 else
5658 echo "C++ compiler $cxx does not work with C compiler $cc"
5659 echo "Disabling C++ specific optional code"
5660 cxx=
5661 fi
5662else
5663 echo "No C++ compiler available; disabling C++ specific optional code"
5664 cxx=
5665fi
5666
02d34f62
CR
5667echo_version() {
5668 if test "$1" = "yes" ; then
5669 echo "($2)"
5670 fi
5671}
5672
50e12060
JK
5673# prepend pixman and ftd flags after all config tests are done
5674QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5675libs_softmmu="$pixman_libs $libs_softmmu"
5ca9388a 5676
43ce4dfe 5677echo "Install prefix $prefix"
89138857 5678echo "BIOS directory $(eval echo $qemu_datadir)"
3d5eecab 5679echo "firmware path $(eval echo $firmwarepath)"
89138857
SW
5680echo "binary directory $(eval echo $bindir)"
5681echo "library directory $(eval echo $libdir)"
5682echo "module directory $(eval echo $qemu_moddir)"
5683echo "libexec directory $(eval echo $libexecdir)"
5684echo "include directory $(eval echo $includedir)"
5685echo "config directory $(eval echo $sysconfdir)"
11d9f695 5686if test "$mingw32" = "no" ; then
89138857
SW
5687echo "local state directory $(eval echo $local_statedir)"
5688echo "Manual directory $(eval echo $mandir)"
43ce4dfe 5689echo "ELF interp prefix $interp_prefix"
5a699bbb
LE
5690else
5691echo "local state directory queried at runtime"
d9840e25 5692echo "Windows SDK $win_sdk"
11d9f695 5693fi
5a67135a 5694echo "Source path $source_path"
cc84d63a 5695echo "GIT binary $git"
aef45d51 5696echo "GIT submodules $git_submodules"
43ce4dfe 5697echo "C compiler $cc"
83469015 5698echo "Host C compiler $host_cc"
83f73fce 5699echo "C++ compiler $cxx"
3c4a4d0d 5700echo "Objective-C compiler $objcc"
45d285ab 5701echo "ARFLAGS $ARFLAGS"
0c439cbf 5702echo "CFLAGS $CFLAGS"
a558ee17 5703echo "QEMU_CFLAGS $QEMU_CFLAGS"
0c439cbf 5704echo "LDFLAGS $LDFLAGS"
43ce4dfe 5705echo "make $make"
6a882643 5706echo "install $install"
c886edfb 5707echo "python $python"
e2d8830e
BS
5708if test "$slirp" = "yes" ; then
5709 echo "smbd $smbd"
5710fi
17969268 5711echo "module support $modules"
43ce4dfe 5712echo "host CPU $cpu"
de83cd02 5713echo "host big endian $bigendian"
97a847bc 5714echo "target list $target_list"
43ce4dfe 5715echo "gprof enabled $gprof"
03b4fe7d 5716echo "sparse enabled $sparse"
1625af87 5717echo "strip binaries $strip_opt"
05c2a3e7 5718echo "profiler $profiler"
43ce4dfe 5719echo "static build $static"
5b0753e0
FB
5720if test "$darwin" = "yes" ; then
5721 echo "Cocoa support $cocoa"
5722fi
89138857
SW
5723echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5724echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
925a0400 5725echo "GTK GL support $gtk_gl"
89138857 5726echo "VTE support $vte $(echo_version $vte $vteversion)"
a1c5e949 5727echo "TLS priority $tls_priority"
ddbb0d09 5728echo "GNUTLS support $gnutls"
b917da4c 5729echo "GNUTLS rnd $gnutls_rnd"
91bfcdb0 5730echo "libgcrypt $gcrypt"
37788f25 5731echo "libgcrypt kdf $gcrypt_kdf"
89138857 5732echo "nettle $nettle $(echo_version $nettle $nettle_version)"
fff2f982 5733echo "nettle kdf $nettle_kdf"
9a2fd434 5734echo "libtasn1 $tasn1"
4d3b6f6e 5735echo "curses support $curses"
9d9e1521 5736echo "virgl support $virglrenderer"
769ce76d 5737echo "curl support $curl"
67b915a5 5738echo "mingw32 support $mingw32"
0c58ac1c 5739echo "Audio drivers $audio_drv_list"
b64ec4e4
FZ
5740echo "Block whitelist (rw) $block_drv_rw_whitelist"
5741echo "Block whitelist (ro) $block_drv_ro_whitelist"
983eef5a 5742echo "VirtFS support $virtfs"
fe8fc5ae 5743echo "Multipath support $mpath"
821601ea
JS
5744echo "VNC support $vnc"
5745if test "$vnc" = "yes" ; then
821601ea
JS
5746 echo "VNC SASL support $vnc_sasl"
5747 echo "VNC JPEG support $vnc_jpeg"
5748 echo "VNC PNG support $vnc_png"
821601ea 5749fi
3142255c
BS
5750if test -n "$sparc_cpu"; then
5751 echo "Target Sparc Arch $sparc_cpu"
5752fi
e37630ca 5753echo "xen support $xen"
3996e85c
PD
5754if test "$xen" = "yes" ; then
5755 echo "xen ctrl version $xen_ctrl_version"
64a7ad6f 5756 echo "pv dom build $xen_pv_domain_build"
3996e85c 5757fi
2e4d9fb1 5758echo "brlapi support $brlapi"
a20a6f46 5759echo "bluez support $bluez"
a25dba17 5760echo "Documentation $docs"
40d6444e 5761echo "PIE $pie"
8a16d273 5762echo "vde support $vde"
58952137 5763echo "netmap support $netmap"
5c6c3a6c 5764echo "Linux AIO support $linux_aio"
758e8e38 5765echo "ATTR/XATTR support $attr"
77755340 5766echo "Install blobs $blobs"
b31a0277 5767echo "KVM support $kvm"
b0cb0a66 5768echo "HAX support $hax"
c97d6d2c 5769echo "HVF support $hvf"
d661d9a4 5770echo "WHPX support $whpx"
b3f6ea7e
PB
5771echo "TCG support $tcg"
5772if test "$tcg" = "yes" ; then
5773 echo "TCG debug enabled $debug_tcg"
5774 echo "TCG interpreter $tcg_interpreter"
5775fi
5a22ab71 5776echo "malloc trim support $malloc_trim"
2da776db 5777echo "RDMA support $rdma"
f652e6af 5778echo "fdt support $fdt"
ceb42de8 5779echo "preadv support $preadv"
5f6b9e8f 5780echo "fdatasync $fdatasync"
e78815a5
AF
5781echo "madvise $madvise"
5782echo "posix_madvise $posix_madvise"
9bc5a719 5783echo "posix_memalign $posix_memalign"
47e98658 5784echo "libcap-ng support $cap_ng"
d5970055 5785echo "vhost-net support $vhost_net"
042cea27 5786echo "vhost-crypto support $vhost_crypto"
5e9be92d 5787echo "vhost-scsi support $vhost_scsi"
fc0b9b0e 5788echo "vhost-vsock support $vhost_vsock"
e6a74868 5789echo "vhost-user support $vhost_user"
5b808275 5790echo "Trace backends $trace_backends"
713572a7 5791if have_backend "simple"; then
9410b56c 5792echo "Trace output file $trace_file-<pid>"
e00e36fb 5793fi
89138857 5794echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
f27aaf4b 5795echo "rbd support $rbd"
dce512de 5796echo "xfsctl support $xfs"
7b02f544 5797echo "smartcard support $smartcard"
2b2325ff 5798echo "libusb $libusb"
69354a83 5799echo "usb net redir $usb_redir"
da076ffe 5800echo "OpenGL support $opengl"
014cb152 5801echo "OpenGL dmabufs $opengl_dmabuf"
c589b249 5802echo "libiscsi support $libiscsi"
6542aa9c 5803echo "libnfs support $libnfs"
d138cee9 5804echo "build guest agent $guest_agent"
d9840e25 5805echo "QGA VSS support $guest_agent_with_vss"
50cbebb9 5806echo "QGA w32 disk info $guest_agent_ntddscsi"
4c875d89 5807echo "QGA MSI support $guest_agent_msi"
f794573e 5808echo "seccomp support $seccomp"
7c2acc70 5809echo "coroutine backend $coroutine"
70c60c08 5810echo "coroutine pool $coroutine_pool"
7d992e4d 5811echo "debug stack usage $debug_stack_usage"
f0d92b56 5812echo "crypto afalg $crypto_afalg"
eb100396 5813echo "GlusterFS support $glusterfs"
1d728c39
BS
5814echo "gcov $gcov_tool"
5815echo "gcov enabled $gcov"
ab214c29 5816echo "TPM support $tpm"
0a12ec87 5817echo "libssh2 support $libssh2"
3b8acc11 5818echo "TPM passthrough $tpm_passthrough"
f4ede81e 5819echo "TPM emulator $tpm_emulator"
3556c233 5820echo "QOM debugging $qom_cast_debug"
ed1701c6 5821echo "Live block migration $live_block_migration"
607dacd0
QN
5822echo "lzo support $lzo"
5823echo "snappy support $snappy"
6b383c08 5824echo "bzip2 support $bzip2"
a99d57bb 5825echo "NUMA host support $numa"
ed279a06 5826echo "libxml2 $libxml2"
2847b469 5827echo "tcmalloc support $tcmalloc"
7b01cb97 5828echo "jemalloc support $jemalloc"
99f2dbd3 5829echo "avx2 optimization $avx2_opt"
a6b1d4c0 5830echo "replication support $replication"
da92c3ff 5831echo "VxHS block device $vxhs"
8ca80760 5832echo "capstone $capstone"
67b915a5 5833
1ba16968 5834if test "$sdl_too_old" = "yes"; then
24b55b96 5835echo "-> Your SDL version is too old - please upgrade to have SDL support"
7c1f25b4 5836fi
7d13299d 5837
b7715af2
DB
5838if test "$gtkabi" = "2.0"; then
5839 echo
5840 echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
5841 echo "WARNING: future releases. Please switch to using GTK 3.0"
5842fi
5843
e52c6ba3
DB
5844if test "$sdlabi" = "1.2"; then
5845 echo
5846 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
5847 echo "WARNING: future releases. Please switch to using SDL 2.0"
5848fi
5849
898be3e0
PM
5850if test "$supported_cpu" = "no"; then
5851 echo
5852 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5853 echo
5854 echo "CPU host architecture $cpu support is not currently maintained."
5855 echo "The QEMU project intends to remove support for this host CPU in"
5856 echo "a future release if nobody volunteers to maintain it and to"
5857 echo "provide a build host for our continuous integration setup."
5858 echo "configure has succeeded and you can continue to build, but"
5859 echo "if you care about QEMU on this platform you should contact"
5860 echo "us upstream at qemu-devel@nongnu.org."
5861fi
5862
5863if test "$supported_os" = "no"; then
5864 echo
5865 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5866 echo
c50126aa
PM
5867 echo "Host OS $targetos support is not currently maintained."
5868 echo "The QEMU project intends to remove support for this host OS in"
898be3e0
PM
5869 echo "a future release if nobody volunteers to maintain it and to"
5870 echo "provide a build host for our continuous integration setup."
5871 echo "configure has succeeded and you can continue to build, but"
5872 echo "if you care about QEMU on this platform you should contact"
5873 echo "us upstream at qemu-devel@nongnu.org."
5874fi
5875
98ec69ac 5876config_host_mak="config-host.mak"
98ec69ac 5877
dbd99ae3
SW
5878echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5879
98ec69ac 5880echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 5881echo >> $config_host_mak
98ec69ac 5882
e6c3b0f7 5883echo all: >> $config_host_mak
99d7cc75
PB
5884echo "prefix=$prefix" >> $config_host_mak
5885echo "bindir=$bindir" >> $config_host_mak
3aa5d2be 5886echo "libdir=$libdir" >> $config_host_mak
8bf188aa 5887echo "libexecdir=$libexecdir" >> $config_host_mak
0f94d6da 5888echo "includedir=$includedir" >> $config_host_mak
99d7cc75 5889echo "mandir=$mandir" >> $config_host_mak
99d7cc75 5890echo "sysconfdir=$sysconfdir" >> $config_host_mak
22d07038 5891echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
9afa52ce 5892echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
3d5eecab 5893echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
9afa52ce 5894echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
e26110cf 5895echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5a699bbb
LE
5896if test "$mingw32" = "no" ; then
5897 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5898fi
f354b1a1 5899echo "qemu_helperdir=$libexecdir" >> $config_host_mak
834574ea 5900echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
f544a488 5901echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
cc84d63a 5902echo "GIT=$git" >> $config_host_mak
aef45d51 5903echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
f62bbee5 5904echo "GIT_UPDATE=$git_update" >> $config_host_mak
804edf29 5905
98ec69ac 5906echo "ARCH=$ARCH" >> $config_host_mak
727e5283 5907
f8393946 5908if test "$debug_tcg" = "yes" ; then
2358a494 5909 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 5910fi
1625af87 5911if test "$strip_opt" = "yes" ; then
52ba784d 5912 echo "STRIP=${strip}" >> $config_host_mak
1625af87 5913fi
7d13299d 5914if test "$bigendian" = "yes" ; then
e2542fe2 5915 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 5916fi
67b915a5 5917if test "$mingw32" = "yes" ; then
98ec69ac 5918 echo "CONFIG_WIN32=y" >> $config_host_mak
89138857 5919 rc_version=$(cat $source_path/VERSION)
9fe6de94
BS
5920 version_major=${rc_version%%.*}
5921 rc_version=${rc_version#*.}
5922 version_minor=${rc_version%%.*}
5923 rc_version=${rc_version#*.}
5924 version_subminor=${rc_version%%.*}
5925 version_micro=0
5926 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5927 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
d9840e25
TS
5928 if test "$guest_agent_with_vss" = "yes" ; then
5929 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 5930 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
5931 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5932 fi
50cbebb9
MR
5933 if test "$guest_agent_ntddscsi" = "yes" ; then
5934 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5935 fi
1a34904e 5936 if test "$guest_agent_msi" = "yes"; then
d661d9a4 5937 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
9dacf32d
YH
5938 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5939 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5940 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5941 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5942 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5943 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5944 fi
210fa556 5945else
35f4df27 5946 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
5947fi
5948
5949if test "$linux" = "yes" ; then
5950 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 5951fi
128ab2ff 5952
83fb7adf 5953if test "$darwin" = "yes" ; then
98ec69ac 5954 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 5955fi
b29fe3ed 5956
ec530c81 5957if test "$solaris" = "yes" ; then
98ec69ac 5958 echo "CONFIG_SOLARIS=y" >> $config_host_mak
ec530c81 5959fi
179cf400
AF
5960if test "$haiku" = "yes" ; then
5961 echo "CONFIG_HAIKU=y" >> $config_host_mak
5962fi
97a847bc 5963if test "$static" = "yes" ; then
98ec69ac 5964 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 5965fi
1ba16968 5966if test "$profiler" = "yes" ; then
2358a494 5967 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 5968fi
c20709aa 5969if test "$slirp" = "yes" ; then
98ec69ac 5970 echo "CONFIG_SLIRP=y" >> $config_host_mak
e2d8830e 5971 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
c20709aa 5972fi
8a16d273 5973if test "$vde" = "yes" ; then
98ec69ac 5974 echo "CONFIG_VDE=y" >> $config_host_mak
e2ad6f16 5975 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
8a16d273 5976fi
58952137
VM
5977if test "$netmap" = "yes" ; then
5978 echo "CONFIG_NETMAP=y" >> $config_host_mak
5979fi
015a33bd
GA
5980if test "$l2tpv3" = "yes" ; then
5981 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5982fi
47e98658
CB
5983if test "$cap_ng" = "yes" ; then
5984 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5985fi
2358a494 5986echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 5987for drv in $audio_drv_list; do
89138857 5988 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
98ec69ac 5989 echo "$def=y" >> $config_host_mak
0c58ac1c 5990done
b1149911
FZ
5991echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5992echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5993echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5994echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5995echo "OSS_LIBS=$oss_libs" >> $config_host_mak
67f86e8e
JQ
5996if test "$audio_pt_int" = "yes" ; then
5997 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5998fi
d5631638 5999if test "$audio_win_int" = "yes" ; then
6000 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6001fi
b64ec4e4
FZ
6002echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6003echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
821601ea
JS
6004if test "$vnc" = "yes" ; then
6005 echo "CONFIG_VNC=y" >> $config_host_mak
6006fi
2f9606b3 6007if test "$vnc_sasl" = "yes" ; then
98ec69ac 6008 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
2f9606b3 6009fi
821601ea 6010if test "$vnc_jpeg" = "yes" ; then
2f6f5c7a 6011 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
2f6f5c7a 6012fi
821601ea 6013if test "$vnc_png" = "yes" ; then
efe556ad 6014 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
efe556ad 6015fi
6a021536
GH
6016if test "$xkbcommon" = "yes" ; then
6017 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6018 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6019fi
76655d6d 6020if test "$fnmatch" = "yes" ; then
2358a494 6021 echo "CONFIG_FNMATCH=y" >> $config_host_mak
76655d6d 6022fi
dce512de
CH
6023if test "$xfs" = "yes" ; then
6024 echo "CONFIG_XFS=y" >> $config_host_mak
6025fi
89138857 6026qemu_version=$(head $source_path/VERSION)
98ec69ac 6027echo "VERSION=$qemu_version" >>$config_host_mak
2358a494 6028echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 6029echo "SRC_PATH=$source_path" >> $config_host_mak
98ec69ac 6030echo "TARGET_DIRS=$target_list" >> $config_host_mak
a25dba17 6031if [ "$docs" = "yes" ] ; then
98ec69ac 6032 echo "BUILD_DOCS=yes" >> $config_host_mak
cc8ae6de 6033fi
17969268 6034if test "$modules" = "yes"; then
e26110cf
FZ
6035 # $shacmd can generate a hash started with digit, which the compiler doesn't
6036 # like as an symbol. So prefix it with an underscore
89138857 6037 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
17969268
FZ
6038 echo "CONFIG_MODULES=y" >> $config_host_mak
6039fi
8781595b
GH
6040if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6041 echo "CONFIG_X11=y" >> $config_host_mak
6042 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6043 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6044fi
1ac88f28 6045if test "$sdl" = "yes" ; then
98ec69ac 6046 echo "CONFIG_SDL=y" >> $config_host_mak
a3f4d63d 6047 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
1ac88f28 6048 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
8ecc89f6 6049 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
49ecc3fa
FB
6050fi
6051if test "$cocoa" = "yes" ; then
98ec69ac 6052 echo "CONFIG_COCOA=y" >> $config_host_mak
4d3b6f6e
AZ
6053fi
6054if test "$curses" = "yes" ; then
98ec69ac 6055 echo "CONFIG_CURSES=y" >> $config_host_mak
49ecc3fa 6056fi
099d6b0f 6057if test "$pipe2" = "yes" ; then
2358a494 6058 echo "CONFIG_PIPE2=y" >> $config_host_mak
099d6b0f 6059fi
40ff6d7e
KW
6060if test "$accept4" = "yes" ; then
6061 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6062fi
3ce34dfb 6063if test "$splice" = "yes" ; then
2358a494 6064 echo "CONFIG_SPLICE=y" >> $config_host_mak
3ce34dfb 6065fi
c2882b96
RV
6066if test "$eventfd" = "yes" ; then
6067 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6068fi
751bcc39
MAL
6069if test "$memfd" = "yes" ; then
6070 echo "CONFIG_MEMFD=y" >> $config_host_mak
6071fi
d0927938
UH
6072if test "$fallocate" = "yes" ; then
6073 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6074fi
3d4fa43e
KK
6075if test "$fallocate_punch_hole" = "yes" ; then
6076 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6077fi
b953f075
DL
6078if test "$fallocate_zero_range" = "yes" ; then
6079 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6080fi
ed911435
KW
6081if test "$posix_fallocate" = "yes" ; then
6082 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6083fi
c727f47d
PM
6084if test "$sync_file_range" = "yes" ; then
6085 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6086fi
dace20dc
PM
6087if test "$fiemap" = "yes" ; then
6088 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6089fi
d0927938
UH
6090if test "$dup3" = "yes" ; then
6091 echo "CONFIG_DUP3=y" >> $config_host_mak
6092fi
4e0c6529
AB
6093if test "$ppoll" = "yes" ; then
6094 echo "CONFIG_PPOLL=y" >> $config_host_mak
6095fi
cd758dd0
AB
6096if test "$prctl_pr_set_timerslack" = "yes" ; then
6097 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6098fi
3b6edd16
PM
6099if test "$epoll" = "yes" ; then
6100 echo "CONFIG_EPOLL=y" >> $config_host_mak
6101fi
6102if test "$epoll_create1" = "yes" ; then
6103 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6104fi
a8fd1aba
PM
6105if test "$sendfile" = "yes" ; then
6106 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6107fi
51834341
RV
6108if test "$timerfd" = "yes" ; then
6109 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6110fi
9af5c906
RV
6111if test "$setns" = "yes" ; then
6112 echo "CONFIG_SETNS=y" >> $config_host_mak
6113fi
38860a03
AM
6114if test "$clock_adjtime" = "yes" ; then
6115 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6116fi
5a03cd00
AM
6117if test "$syncfs" = "yes" ; then
6118 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6119fi
3b3f24ad 6120if test "$inotify" = "yes" ; then
2358a494 6121 echo "CONFIG_INOTIFY=y" >> $config_host_mak
3b3f24ad 6122fi
c05c7a73
RV
6123if test "$inotify1" = "yes" ; then
6124 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6125fi
401bc051
PM
6126if test "$sem_timedwait" = "yes" ; then
6127 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6128fi
6ae9a1f4
JQ
6129if test "$byteswap_h" = "yes" ; then
6130 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6131fi
6132if test "$bswap_h" = "yes" ; then
6133 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6134fi
769ce76d 6135if test "$curl" = "yes" ; then
d3399d7c 6136 echo "CONFIG_CURL=m" >> $config_host_mak
b1d5a277 6137 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6ebc91e5 6138 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
769ce76d 6139fi
2e4d9fb1 6140if test "$brlapi" = "yes" ; then
98ec69ac 6141 echo "CONFIG_BRLAPI=y" >> $config_host_mak
8eca2889 6142 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
2e4d9fb1 6143fi
fb599c9a 6144if test "$bluez" = "yes" ; then
98ec69ac 6145 echo "CONFIG_BLUEZ=y" >> $config_host_mak
ef7635ec 6146 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
fb599c9a 6147fi
d46f7c9e 6148if test "$glib_subprocess" = "yes" ; then
9d41401b
MT
6149 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
6150fi
a4ccabcf
AL
6151if test "$gtk" = "yes" ; then
6152 echo "CONFIG_GTK=y" >> $config_host_mak
a3f4d63d 6153 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
a4ccabcf 6154 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
014cb152 6155 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
925a0400
GH
6156 if test "$gtk_gl" = "yes" ; then
6157 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6158 fi
bbbf9bfb 6159fi
a1c5e949 6160echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
ddbb0d09
DB
6161if test "$gnutls" = "yes" ; then
6162 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6163fi
b917da4c
DB
6164if test "$gnutls_rnd" = "yes" ; then
6165 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6166fi
91bfcdb0
DB
6167if test "$gcrypt" = "yes" ; then
6168 echo "CONFIG_GCRYPT=y" >> $config_host_mak
1f923c70
LM
6169 if test "$gcrypt_hmac" = "yes" ; then
6170 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6171 fi
37788f25
DB
6172 if test "$gcrypt_kdf" = "yes" ; then
6173 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6174 fi
62893b67 6175fi
91bfcdb0
DB
6176if test "$nettle" = "yes" ; then
6177 echo "CONFIG_NETTLE=y" >> $config_host_mak
becaeb72 6178 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
fff2f982
DB
6179 if test "$nettle_kdf" = "yes" ; then
6180 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6181 fi
ed754746 6182fi
9a2fd434
DB
6183if test "$tasn1" = "yes" ; then
6184 echo "CONFIG_TASN1=y" >> $config_host_mak
6185fi
559607ea
DB
6186if test "$have_ifaddrs_h" = "yes" ; then
6187 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6188fi
6b39b063
EB
6189if test "$have_broken_size_max" = "yes" ; then
6190 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6191fi
277abf15
JV
6192
6193# Work around a system header bug with some kernel/XFS header
6194# versions where they both try to define 'struct fsxattr':
6195# xfs headers will not try to redefine structs from linux headers
6196# if this macro is set.
6197if test "$have_fsxattr" = "yes" ; then
6198 echo "HAVE_FSXATTR=y" >> $config_host_mak
6199fi
bbbf9bfb
SW
6200if test "$vte" = "yes" ; then
6201 echo "CONFIG_VTE=y" >> $config_host_mak
a4ccabcf
AL
6202 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6203fi
9d9e1521
GH
6204if test "$virglrenderer" = "yes" ; then
6205 echo "CONFIG_VIRGL=y" >> $config_host_mak
6206 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6207 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6208fi
e37630ca 6209if test "$xen" = "yes" ; then
6dbd588a 6210 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 6211 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
64a7ad6f
IC
6212 if test "$xen_pv_domain_build" = "yes" ; then
6213 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6214 fi
e37630ca 6215fi
5c6c3a6c
CH
6216if test "$linux_aio" = "yes" ; then
6217 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6218fi
758e8e38
VJ
6219if test "$attr" = "yes" ; then
6220 echo "CONFIG_ATTR=y" >> $config_host_mak
6221fi
4f26f2b6
AK
6222if test "$libattr" = "yes" ; then
6223 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6224fi
983eef5a
MI
6225if test "$virtfs" = "yes" ; then
6226 echo "CONFIG_VIRTFS=y" >> $config_host_mak
758e8e38 6227fi
fe8fc5ae
PB
6228if test "$mpath" = "yes" ; then
6229 echo "CONFIG_MPATH=y" >> $config_host_mak
6230fi
5e9be92d
NB
6231if test "$vhost_scsi" = "yes" ; then
6232 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6233fi
e6a74868 6234if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
03ce5744
NN
6235 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6236fi
042cea27
GA
6237if test "$vhost_crypto" = "yes" ; then
6238 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6239fi
fc0b9b0e
SH
6240if test "$vhost_vsock" = "yes" ; then
6241 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6242fi
e6a74868
MAL
6243if test "$vhost_user" = "yes" ; then
6244 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6245fi
77755340 6246if test "$blobs" = "yes" ; then
98ec69ac 6247 echo "INSTALL_BLOBS=yes" >> $config_host_mak
77755340 6248fi
bf9298b9 6249if test "$iovec" = "yes" ; then
2358a494 6250 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 6251fi
ceb42de8 6252if test "$preadv" = "yes" ; then
2358a494 6253 echo "CONFIG_PREADV=y" >> $config_host_mak
ceb42de8 6254fi
f652e6af 6255if test "$fdt" = "yes" ; then
3f0855b1 6256 echo "CONFIG_FDT=y" >> $config_host_mak
f652e6af 6257fi
dcc38d1c
MT
6258if test "$signalfd" = "yes" ; then
6259 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6260fi
b3f6ea7e
PB
6261if test "$tcg" = "yes"; then
6262 echo "CONFIG_TCG=y" >> $config_host_mak
6263 if test "$tcg_interpreter" = "yes" ; then
6264 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6265 fi
9195b2c2 6266fi
5f6b9e8f
BS
6267if test "$fdatasync" = "yes" ; then
6268 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6269fi
e78815a5
AF
6270if test "$madvise" = "yes" ; then
6271 echo "CONFIG_MADVISE=y" >> $config_host_mak
6272fi
6273if test "$posix_madvise" = "yes" ; then
6274 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6275fi
9bc5a719
AG
6276if test "$posix_memalign" = "yes" ; then
6277 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6278fi
97a847bc 6279
cd4ec0b4
GH
6280if test "$spice" = "yes" ; then
6281 echo "CONFIG_SPICE=y" >> $config_host_mak
6282fi
36707144 6283
7b02f544
MAL
6284if test "$smartcard" = "yes" ; then
6285 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7b62bf5a
FZ
6286 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6287 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
111a38b0
RR
6288fi
6289
2b2325ff
GH
6290if test "$libusb" = "yes" ; then
6291 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
b878b652
FZ
6292 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6293 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
2b2325ff
GH
6294fi
6295
69354a83
HG
6296if test "$usb_redir" = "yes" ; then
6297 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
cc7923fc
FZ
6298 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6299 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
69354a83
HG
6300fi
6301
da076ffe
GH
6302if test "$opengl" = "yes" ; then
6303 echo "CONFIG_OPENGL=y" >> $config_host_mak
6304 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
014cb152
GH
6305 if test "$opengl_dmabuf" = "yes" ; then
6306 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6307 fi
20ff075b
MW
6308fi
6309
5a22ab71
YZ
6310if test "$malloc_trim" = "yes" ; then
6311 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6312fi
6313
99f2dbd3
LL
6314if test "$avx2_opt" = "yes" ; then
6315 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6316fi
6317
607dacd0
QN
6318if test "$lzo" = "yes" ; then
6319 echo "CONFIG_LZO=y" >> $config_host_mak
6320fi
6321
6322if test "$snappy" = "yes" ; then
6323 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6324fi
6325
6b383c08
PW
6326if test "$bzip2" = "yes" ; then
6327 echo "CONFIG_BZIP2=y" >> $config_host_mak
6328 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6329fi
6330
c589b249 6331if test "$libiscsi" = "yes" ; then
d3399d7c 6332 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6ebc91e5
FZ
6333 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6334 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
c589b249
RS
6335fi
6336
6542aa9c 6337if test "$libnfs" = "yes" ; then
4be4879f
CL
6338 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6339 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6542aa9c
PL
6340fi
6341
f794573e
EO
6342if test "$seccomp" = "yes"; then
6343 echo "CONFIG_SECCOMP=y" >> $config_host_mak
c3883e1f
FZ
6344 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6345 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
f794573e
EO
6346fi
6347
83fb7adf 6348# XXX: suppress that
7d3505c5 6349if [ "$bsd" = "yes" ] ; then
2358a494 6350 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
6351fi
6352
4d9310f4
DB
6353if test "$localtime_r" = "yes" ; then
6354 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6355fi
3556c233
PB
6356if test "$qom_cast_debug" = "yes" ; then
6357 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6358fi
f27aaf4b 6359if test "$rbd" = "yes" ; then
d3399d7c 6360 echo "CONFIG_RBD=m" >> $config_host_mak
6ebc91e5
FZ
6361 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6362 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
d0e2fce5
AK
6363fi
6364
7c2acc70 6365echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
6366if test "$coroutine_pool" = "yes" ; then
6367 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6368else
6369 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6370fi
20ff6c80 6371
7d992e4d
PL
6372if test "$debug_stack_usage" = "yes" ; then
6373 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6374fi
6375
f0d92b56
LM
6376if test "$crypto_afalg" = "yes" ; then
6377 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6378fi
6379
d2042378
AK
6380if test "$open_by_handle_at" = "yes" ; then
6381 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6382fi
6383
e06a765e
HPB
6384if test "$linux_magic_h" = "yes" ; then
6385 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
8ab1bf12
LC
6386fi
6387
cc6e3ca9
GH
6388if test "$pragma_diagnostic_available" = "yes" ; then
6389 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
06d71fa1
PM
6390fi
6391
3f4349dc
KW
6392if test "$valgrind_h" = "yes" ; then
6393 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6394fi
6395
d83414e1
MAL
6396if test "$have_asan_iface_fiber" = "yes" ; then
6397 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6398fi
6399
8ab1bf12
LC
6400if test "$has_environ" = "yes" ; then
6401 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
e06a765e
HPB
6402fi
6403
76a347e1
RH
6404if test "$cpuid_h" = "yes" ; then
6405 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6406fi
6407
f540166b
RH
6408if test "$int128" = "yes" ; then
6409 echo "CONFIG_INT128=y" >> $config_host_mak
6410fi
6411
7ebee43e
RH
6412if test "$atomic128" = "yes" ; then
6413 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6414fi
6415
df79b996
RH
6416if test "$atomic64" = "yes" ; then
6417 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6418fi
6419
db432672
RH
6420if test "$vector16" = "yes" ; then
6421 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6422fi
6423
1e6e9aca
RH
6424if test "$getauxval" = "yes" ; then
6425 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6426fi
6427
eb100396 6428if test "$glusterfs" = "yes" ; then
d3399d7c 6429 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6ebc91e5
FZ
6430 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6431 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
0c14fb47
BR
6432fi
6433
d85fa9eb
JC
6434if test "$glusterfs_xlator_opt" = "yes" ; then
6435 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6436fi
6437
0c14fb47
BR
6438if test "$glusterfs_discard" = "yes" ; then
6439 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
eb100396 6440fi
e06a765e 6441
df3a429a
NV
6442if test "$glusterfs_fallocate" = "yes" ; then
6443 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6444fi
6445
7c815372
BR
6446if test "$glusterfs_zerofill" = "yes" ; then
6447 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6448fi
6449
0a12ec87 6450if test "$libssh2" = "yes" ; then
d3399d7c 6451 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6ebc91e5
FZ
6452 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6453 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
0a12ec87
RJ
6454fi
6455
ed1701c6
DDAG
6456if test "$live_block_migration" = "yes" ; then
6457 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6458fi
6459
3b8acc11
PB
6460if test "$tpm" = "yes"; then
6461 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
f4ede81e 6462 # TPM passthrough support?
3b8acc11
PB
6463 if test "$tpm_passthrough" = "yes"; then
6464 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6465 fi
f4ede81e
AV
6466 # TPM emulator support?
6467 if test "$tpm_emulator" = "yes"; then
6468 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6469 fi
3b8acc11
PB
6470fi
6471
5b808275
LV
6472echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6473if have_backend "nop"; then
6d8a764e 6474 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 6475fi
5b808275 6476if have_backend "simple"; then
6d8a764e
LV
6477 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6478 # Set the appropriate trace file.
953ffe0f 6479 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 6480fi
ed7f5f1d
PB
6481if have_backend "log"; then
6482 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6d8a764e 6483fi
5b808275 6484if have_backend "ust"; then
6d8a764e
LV
6485 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6486fi
5b808275 6487if have_backend "dtrace"; then
6d8a764e
LV
6488 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6489 if test "$trace_backend_stap" = "yes" ; then
6490 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6491 fi
c276b17d 6492fi
5b808275 6493if have_backend "ftrace"; then
781e9545
ET
6494 if test "$linux" = "yes" ; then
6495 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 6496 else
21684af0 6497 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
6498 fi
6499fi
0a852417
PD
6500if have_backend "syslog"; then
6501 if test "$posix_syslog" = "yes" ; then
6502 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6503 else
6504 feature_not_found "syslog(trace backend)" "syslog not available"
6505 fi
6506fi
9410b56c
PS
6507echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6508
2da776db
MH
6509if test "$rdma" = "yes" ; then
6510 echo "CONFIG_RDMA=y" >> $config_host_mak
392fb643 6511 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
2da776db
MH
6512fi
6513
575b22b1
LV
6514if test "$have_rtnetlink" = "yes" ; then
6515 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6516fi
6517
ed279a06
KK
6518if test "$libxml2" = "yes" ; then
6519 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6520 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6521 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6522fi
6523
a6b1d4c0
CX
6524if test "$replication" = "yes" ; then
6525 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6526fi
6527
6a02c806
SH
6528if test "$have_af_vsock" = "yes" ; then
6529 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6530fi
6531
4d04351f
CC
6532if test "$have_sysmacros" = "yes" ; then
6533 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6534fi
6535
49e00a18
AG
6536if test "$have_static_assert" = "yes" ; then
6537 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6538fi
6539
e674605f
TG
6540if test "$have_utmpx" = "yes" ; then
6541 echo "HAVE_UTMPX=y" >> $config_host_mak
6542fi
6543
e0580342
KR
6544if test "$ivshmem" = "yes" ; then
6545 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
8ca80760 6546fi
e219c499 6547if test "$capstone" != "no" ; then
8ca80760 6548 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
e0580342
KR
6549fi
6550
5c312079
DDAG
6551# Hold two types of flag:
6552# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6553# a thread we have a handle to
6554# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6555# platform
6556if test "$pthread_setname_np" = "yes" ; then
6557 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6558 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6559fi
6560
da92c3ff
AM
6561if test "$vxhs" = "yes" ; then
6562 echo "CONFIG_VXHS=y" >> $config_host_mak
6563 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6564fi
6565
5b5e3037
PB
6566if test "$tcg_interpreter" = "yes"; then
6567 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6568elif test "$ARCH" = "sparc64" ; then
6569 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6570elif test "$ARCH" = "s390x" ; then
6571 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
c72b26ec 6572elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5b5e3037 6573 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
40d964b5
RH
6574elif test "$ARCH" = "ppc64" ; then
6575 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5b5e3037
PB
6576else
6577 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6578fi
6579QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
6580
98ec69ac 6581echo "TOOLS=$tools" >> $config_host_mak
98ec69ac 6582echo "ROMS=$roms" >> $config_host_mak
804edf29
JQ
6583echo "MAKE=$make" >> $config_host_mak
6584echo "INSTALL=$install" >> $config_host_mak
1901cb14
BS
6585echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6586echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
e999ee44
MT
6587echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6588echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
c886edfb 6589echo "PYTHON=$python" >> $config_host_mak
804edf29 6590echo "CC=$cc" >> $config_host_mak
a31a8642
MT
6591if $iasl -h > /dev/null 2>&1; then
6592 echo "IASL=$iasl" >> $config_host_mak
6593fi
2b2e59e6 6594echo "CC_I386=$cc_i386" >> $config_host_mak
804edf29 6595echo "HOST_CC=$host_cc" >> $config_host_mak
83f73fce 6596echo "CXX=$cxx" >> $config_host_mak
3c4a4d0d 6597echo "OBJCC=$objcc" >> $config_host_mak
804edf29 6598echo "AR=$ar" >> $config_host_mak
45d285ab 6599echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
cdbd727c 6600echo "AS=$as" >> $config_host_mak
5f6f0e27 6601echo "CCAS=$ccas" >> $config_host_mak
3dd46c78 6602echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
6603echo "OBJCOPY=$objcopy" >> $config_host_mak
6604echo "LD=$ld" >> $config_host_mak
9f81aeb5 6605echo "RANLIB=$ranlib" >> $config_host_mak
4852ee95 6606echo "NM=$nm" >> $config_host_mak
9fe6de94 6607echo "WINDRES=$windres" >> $config_host_mak
e2a2ed06 6608echo "CFLAGS=$CFLAGS" >> $config_host_mak
46eef33b 6609echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 6610echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
11cde1c8 6611echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
f9728943 6612echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
e39f0062
PB
6613if test "$sparse" = "yes" ; then
6614 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
80fd48df 6615 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
2944d742 6616 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
e39f0062
PB
6617 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6618 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6619fi
42da6041
GH
6620if test "$cross_prefix" != ""; then
6621 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6622else
6623 echo "AUTOCONF_HOST := " >> $config_host_mak
6624fi
e2a2ed06 6625echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
46eef33b 6626echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6969ec6c 6627echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
e57218b6 6628echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
73da375e 6629echo "LIBS+=$LIBS" >> $config_host_mak
3e2e0e6b 6630echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
409437e1 6631echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
804edf29 6632echo "EXESUF=$EXESUF" >> $config_host_mak
17969268
FZ
6633echo "DSOSUF=$DSOSUF" >> $config_host_mak
6634echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
957f1f99 6635echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
90246037
DB
6636echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6637echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
94dd53c5 6638echo "POD2MAN=$POD2MAN" >> $config_host_mak
cbdd1999 6639echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
1d728c39
BS
6640if test "$gcov" = "yes" ; then
6641 echo "CONFIG_GCOV=y" >> $config_host_mak
6642 echo "GCOV=$gcov_tool" >> $config_host_mak
6643fi
804edf29 6644
6efd7517
PM
6645# use included Linux headers
6646if test "$linux" = "yes" ; then
a307beb6 6647 mkdir -p linux-headers
6efd7517 6648 case "$cpu" in
c72b26ec 6649 i386|x86_64|x32)
08312a63 6650 linux_arch=x86
6efd7517
PM
6651 ;;
6652 ppcemb|ppc|ppc64)
08312a63 6653 linux_arch=powerpc
6efd7517
PM
6654 ;;
6655 s390x)
08312a63
PM
6656 linux_arch=s390
6657 ;;
1f080313
CF
6658 aarch64)
6659 linux_arch=arm64
6660 ;;
222e7d11
SL
6661 mips64)
6662 linux_arch=mips
6663 ;;
08312a63
PM
6664 *)
6665 # For most CPUs the kernel architecture name and QEMU CPU name match.
6666 linux_arch="$cpu"
6efd7517
PM
6667 ;;
6668 esac
08312a63
PM
6669 # For non-KVM architectures we will not have asm headers
6670 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6671 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6672 fi
6efd7517
PM
6673fi
6674
1d14ffa9 6675for target in $target_list; do
97a847bc 6676target_dir="$target"
25be210f 6677config_target_mak=$target_dir/config-target.mak
89138857 6678target_name=$(echo $target | cut -d '-' -f 1)
97a847bc 6679target_bigendian="no"
1f3d3c8f 6680
c1799a84 6681case "$target_name" in
722dd7be 6682 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
ea2d6a39
JQ
6683 target_bigendian=yes
6684 ;;
6685esac
97a847bc 6686target_softmmu="no"
997344f3 6687target_user_only="no"
831b7825 6688target_linux_user="no"
84778508 6689target_bsd_user="no"
9e407a85 6690case "$target" in
c1799a84 6691 ${target_name}-softmmu)
9e407a85
PB
6692 target_softmmu="yes"
6693 ;;
c1799a84 6694 ${target_name}-linux-user)
9e407a85
PB
6695 target_user_only="yes"
6696 target_linux_user="yes"
6697 ;;
c1799a84 6698 ${target_name}-bsd-user)
84778508
BS
6699 target_user_only="yes"
6700 target_bsd_user="yes"
6701 ;;
9e407a85 6702 *)
76ad07a4 6703 error_exit "Target '$target' not recognised"
9e407a85
PB
6704 exit 1
6705 ;;
6706esac
831b7825 6707
97a847bc 6708mkdir -p $target_dir
25be210f 6709echo "# Automatically generated by configure - do not modify" > $config_target_mak
de83cd02 6710
e5fe0c52 6711bflt="no"
ca759f9e 6712mttcg="no"
89138857 6713interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
56aebc89 6714gdb_xml_files=""
7ba1e619 6715
c1799a84 6716TARGET_ARCH="$target_name"
6acff7da 6717TARGET_BASE_ARCH=""
e6e91b9c 6718TARGET_ABI_DIR=""
e73aae67 6719
c1799a84 6720case "$target_name" in
2408a527 6721 i386)
b8158192 6722 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
2408a527
AJ
6723 ;;
6724 x86_64)
6acff7da 6725 TARGET_BASE_ARCH=i386
b8158192 6726 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
2408a527
AJ
6727 ;;
6728 alpha)
5ee4f3c2 6729 mttcg="yes"
2408a527
AJ
6730 ;;
6731 arm|armeb)
b498c8a0 6732 TARGET_ARCH=arm
2408a527 6733 bflt="yes"
ca759f9e 6734 mttcg="yes"
56aebc89 6735 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
2408a527 6736 ;;
722dd7be
MW
6737 aarch64|aarch64_be)
6738 TARGET_ARCH=aarch64
6a49fa95
AG
6739 TARGET_BASE_ARCH=arm
6740 bflt="yes"
ca759f9e 6741 mttcg="yes"
8f95ce2e 6742 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6a49fa95 6743 ;;
2408a527 6744 cris)
2408a527 6745 ;;
61766fe9 6746 hppa)
7b93dab5 6747 mttcg="yes"
61766fe9 6748 ;;
613a22c9 6749 lm32)
613a22c9 6750 ;;
2408a527 6751 m68k)
2408a527 6752 bflt="yes"
5a4526b2 6753 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
2408a527 6754 ;;
877fdc12
EI
6755 microblaze|microblazeel)
6756 TARGET_ARCH=microblaze
72b675ca 6757 bflt="yes"
72b675ca 6758 ;;
0adcffb1 6759 mips|mipsel)
b498c8a0 6760 TARGET_ARCH=mips
25be210f 6761 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
2408a527
AJ
6762 ;;
6763 mipsn32|mipsn32el)
597e2cec 6764 TARGET_ARCH=mips64
6acff7da 6765 TARGET_BASE_ARCH=mips
25be210f 6766 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
597e2cec 6767 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527
AJ
6768 ;;
6769 mips64|mips64el)
b498c8a0 6770 TARGET_ARCH=mips64
6acff7da 6771 TARGET_BASE_ARCH=mips
25be210f 6772 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
2408a527 6773 ;;
d15a9c23
AG
6774 moxie)
6775 ;;
e671711c
MV
6776 nios2)
6777 ;;
4a09d0bb 6778 or1k)
e67db06e
JL
6779 TARGET_ARCH=openrisc
6780 TARGET_BASE_ARCH=openrisc
e67db06e 6781 ;;
2408a527 6782 ppc)
c8b3532d 6783 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
6784 ;;
6785 ppcemb)
6acff7da 6786 TARGET_BASE_ARCH=ppc
e6e91b9c 6787 TARGET_ABI_DIR=ppc
c8b3532d 6788 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
6789 ;;
6790 ppc64)
6acff7da 6791 TARGET_BASE_ARCH=ppc
e6e91b9c 6792 TARGET_ABI_DIR=ppc
f0b0685d 6793 mttcg=yes
1438eff3 6794 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
2408a527 6795 ;;
9c35126c
DK
6796 ppc64le)
6797 TARGET_ARCH=ppc64
6798 TARGET_BASE_ARCH=ppc
6799 TARGET_ABI_DIR=ppc
f0b0685d 6800 mttcg=yes
1438eff3 6801 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
9c35126c 6802 ;;
2408a527 6803 ppc64abi32)
b498c8a0 6804 TARGET_ARCH=ppc64
6acff7da 6805 TARGET_BASE_ARCH=ppc
e6e91b9c 6806 TARGET_ABI_DIR=ppc
25be210f 6807 echo "TARGET_ABI32=y" >> $config_target_mak
1438eff3 6808 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
2408a527
AJ
6809 ;;
6810 sh4|sh4eb)
b498c8a0 6811 TARGET_ARCH=sh4
2408a527
AJ
6812 bflt="yes"
6813 ;;
6814 sparc)
2408a527
AJ
6815 ;;
6816 sparc64)
6acff7da 6817 TARGET_BASE_ARCH=sparc
2408a527
AJ
6818 ;;
6819 sparc32plus)
b498c8a0 6820 TARGET_ARCH=sparc64
6acff7da 6821 TARGET_BASE_ARCH=sparc
e6e91b9c 6822 TARGET_ABI_DIR=sparc
25be210f 6823 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527 6824 ;;
24e804ec 6825 s390x)
63685bc4 6826 mttcg=yes
86158a2a 6827 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 6828 ;;
444e06b1
CG
6829 tilegx)
6830 ;;
5ecaa4ed
PC
6831 tricore)
6832 ;;
d2fbca94 6833 unicore32)
d2fbca94 6834 ;;
cfa550c6
MF
6835 xtensa|xtensaeb)
6836 TARGET_ARCH=xtensa
cfa550c6 6837 ;;
2408a527 6838 *)
76ad07a4 6839 error_exit "Unsupported target CPU"
2408a527
AJ
6840 ;;
6841esac
5e8861a0
PB
6842# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6843if [ "$TARGET_BASE_ARCH" = "" ]; then
6844 TARGET_BASE_ARCH=$TARGET_ARCH
6845fi
6846
5e8861a0
PB
6847symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6848
99afc91d
DB
6849upper() {
6850 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6851}
6852
89138857 6853target_arch_name="$(upper $TARGET_ARCH)"
25be210f 6854echo "TARGET_$target_arch_name=y" >> $config_target_mak
c1799a84 6855echo "TARGET_NAME=$target_name" >> $config_target_mak
25be210f 6856echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
e6e91b9c
JQ
6857if [ "$TARGET_ABI_DIR" = "" ]; then
6858 TARGET_ABI_DIR=$TARGET_ARCH
6859fi
25be210f 6860echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
adfc3e91
SS
6861if [ "$HOST_VARIANT_DIR" != "" ]; then
6862 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6863fi
3b6b7550
PB
6864
6865if supported_xen_target $target; then
6866 echo "CONFIG_XEN=y" >> $config_target_mak
6867 if test "$xen_pci_passthrough" = yes; then
eb6fda0f 6868 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
1b0c87fc 6869 fi
3b6b7550
PB
6870fi
6871if supported_kvm_target $target; then
6872 echo "CONFIG_KVM=y" >> $config_target_mak
6873 if test "$vhost_net" = "yes" ; then
d5970055 6874 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
e6a74868
MAL
6875 if test "$vhost_user" = "yes" ; then
6876 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6877 fi
c59249f9 6878 fi
3b6b7550
PB
6879fi
6880if supported_hax_target $target; then
6881 echo "CONFIG_HAX=y" >> $config_target_mak
b0cb0a66 6882fi
c97d6d2c
SAGDR
6883if supported_hvf_target $target; then
6884 echo "CONFIG_HVF=y" >> $config_target_mak
6885fi
d661d9a4
JTV
6886if supported_whpx_target $target; then
6887 echo "CONFIG_WHPX=y" >> $config_target_mak
6888fi
de83cd02 6889if test "$target_bigendian" = "yes" ; then
25be210f 6890 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
de83cd02 6891fi
97a847bc 6892if test "$target_softmmu" = "yes" ; then
25be210f 6893 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
ca759f9e
AB
6894 if test "$mttcg" = "yes" ; then
6895 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6896 fi
43ce4dfe 6897fi
997344f3 6898if test "$target_user_only" = "yes" ; then
25be210f 6899 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
a2c80be9 6900 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
997344f3 6901fi
831b7825 6902if test "$target_linux_user" = "yes" ; then
25be210f 6903 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
831b7825 6904fi
56aebc89
PB
6905list=""
6906if test ! -z "$gdb_xml_files" ; then
6907 for x in $gdb_xml_files; do
6908 list="$list $source_path/gdb-xml/$x"
6909 done
3d0f1517 6910 echo "TARGET_XML_FILES=$list" >> $config_target_mak
56aebc89 6911fi
97a847bc 6912
e5fe0c52 6913if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
25be210f 6914 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
e5fe0c52 6915fi
84778508 6916if test "$target_bsd_user" = "yes" ; then
25be210f 6917 echo "CONFIG_BSD_USER=y" >> $config_target_mak
84778508 6918fi
5b0753e0 6919
4afddb55 6920# generate QEMU_CFLAGS/LDFLAGS for targets
fa282484 6921
4afddb55 6922cflags=""
fa282484 6923ldflags=""
9b8e111f 6924
c765fcac
PC
6925disas_config() {
6926 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6927 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6928}
6929
64656024
JQ
6930for i in $ARCH $TARGET_BASE_ARCH ; do
6931 case "$i" in
6932 alpha)
c765fcac 6933 disas_config "ALPHA"
64656024 6934 ;;
82295d8a
RH
6935 aarch64)
6936 if test -n "${cxx}"; then
c765fcac 6937 disas_config "ARM_A64"
82295d8a
RH
6938 fi
6939 ;;
64656024 6940 arm)
c765fcac 6941 disas_config "ARM"
999b53ec 6942 if test -n "${cxx}"; then
c765fcac 6943 disas_config "ARM_A64"
999b53ec 6944 fi
64656024
JQ
6945 ;;
6946 cris)
c765fcac 6947 disas_config "CRIS"
64656024 6948 ;;
429b31a2
RH
6949 hppa)
6950 disas_config "HPPA"
6951 ;;
c72b26ec 6952 i386|x86_64|x32)
c765fcac 6953 disas_config "I386"
64656024 6954 ;;
79368f49 6955 lm32)
c765fcac 6956 disas_config "LM32"
79368f49 6957 ;;
64656024 6958 m68k)
c765fcac 6959 disas_config "M68K"
64656024 6960 ;;
877fdc12 6961 microblaze*)
c765fcac 6962 disas_config "MICROBLAZE"
64656024
JQ
6963 ;;
6964 mips*)
c765fcac 6965 disas_config "MIPS"
64656024 6966 ;;
d15a9c23 6967 moxie*)
c765fcac 6968 disas_config "MOXIE"
d15a9c23 6969 ;;
e671711c
MV
6970 nios2)
6971 disas_config "NIOS2"
6972 ;;
4a09d0bb 6973 or1k)
c765fcac 6974 disas_config "OPENRISC"
e67db06e 6975 ;;
64656024 6976 ppc*)
c765fcac 6977 disas_config "PPC"
64656024 6978 ;;
24e804ec 6979 s390*)
c765fcac 6980 disas_config "S390"
64656024
JQ
6981 ;;
6982 sh4)
c765fcac 6983 disas_config "SH4"
64656024
JQ
6984 ;;
6985 sparc*)
c765fcac 6986 disas_config "SPARC"
64656024 6987 ;;
cfa550c6 6988 xtensa*)
c765fcac 6989 disas_config "XTENSA"
cfa550c6 6990 ;;
64656024
JQ
6991 esac
6992done
9195b2c2 6993if test "$tcg_interpreter" = "yes" ; then
c765fcac 6994 disas_config "TCI"
9195b2c2 6995fi
64656024 6996
6ee7126f
JQ
6997case "$ARCH" in
6998alpha)
6999 # Ensure there's only a single GP
7000 cflags="-msmall-data $cflags"
7001;;
7002esac
7003
d02c1db3 7004if test "$gprof" = "yes" ; then
25be210f 7005 echo "TARGET_GPROF=yes" >> $config_target_mak
d02c1db3
JQ
7006 if test "$target_linux_user" = "yes" ; then
7007 cflags="-p $cflags"
7008 ldflags="-p $ldflags"
7009 fi
7010 if test "$target_softmmu" = "yes" ; then
7011 ldflags="-p $ldflags"
25be210f 7012 echo "GPROF_CFLAGS=-p" >> $config_target_mak
d02c1db3
JQ
7013 fi
7014fi
7015
9b8e111f 7016if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
964c6fa1 7017 ldflags="$ldflags $textseg_ldflags"
fa282484 7018fi
fa282484 7019
e9a3591f
CB
7020# Newer kernels on s390 check for an S390_PGSTE program header and
7021# enable the pgste page table extensions in that case. This makes
7022# the vm.allocate_pgste sysctl unnecessary. We enable this program
7023# header if
7024# - we build on s390x
7025# - we build the system emulation for s390x (qemu-system-s390x)
7026# - KVM is enabled
7027# - the linker supports --s390-pgste
7028if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7029 if ld_has --s390-pgste ; then
7030 ldflags="-Wl,--s390-pgste $ldflags"
7031 fi
7032fi
7033
25be210f
JQ
7034echo "LDFLAGS+=$ldflags" >> $config_target_mak
7035echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
fa282484 7036
97a847bc 7037done # for target in $targets
7d13299d 7038
a540f158
PC
7039if [ "$dtc_internal" = "yes" ]; then
7040 echo "config-host.h: subdir-dtc" >> $config_host_mak
7041fi
e219c499
RH
7042if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7043 echo "config-host.h: subdir-capstone" >> $config_host_mak
7044fi
7045if test -n "$LIBCAPSTONE"; then
7046 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7047fi
a540f158 7048
a99d57bb
WG
7049if test "$numa" = "yes"; then
7050 echo "CONFIG_NUMA=y" >> $config_host_mak
7051fi
7052
fd0e6053
JS
7053if test "$ccache_cpp2" = "yes"; then
7054 echo "export CCACHE_CPP2=y" >> $config_host_mak
7055fi
7056
d1807a4f 7057# build tree in object directory in case the source is not in the current directory
b1fb9a63 7058DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
b855f8d1 7059DIRS="$DIRS docs docs/interop fsdev scsi"
9933c305 7060DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
d1807a4f 7061DIRS="$DIRS roms/seabios roms/vgabios"
2dee8d54 7062DIRS="$DIRS qapi-generated"
c09015dd
AL
7063FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7064FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
aaa2ebc5 7065FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
d1807a4f 7066FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
446b9165 7067FILES="$FILES pc-bios/spapr-rtas/Makefile"
9933c305 7068FILES="$FILES pc-bios/s390-ccw/Makefile"
d1807a4f 7069FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
4652b792 7070FILES="$FILES pc-bios/qemu-icon.bmp"
3a586d2f 7071FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
753d11f2
RH
7072for bios_file in \
7073 $source_path/pc-bios/*.bin \
225a9ab8 7074 $source_path/pc-bios/*.lid \
5acc2ec0 7075 $source_path/pc-bios/*.aml \
753d11f2
RH
7076 $source_path/pc-bios/*.rom \
7077 $source_path/pc-bios/*.dtb \
e89e33e1 7078 $source_path/pc-bios/*.img \
753d11f2 7079 $source_path/pc-bios/openbios-* \
4e73c781 7080 $source_path/pc-bios/u-boot.* \
753d11f2
RH
7081 $source_path/pc-bios/palcode-*
7082do
89138857 7083 FILES="$FILES pc-bios/$(basename $bios_file)"
d1807a4f 7084done
89138857 7085for test_file in $(find $source_path/tests/acpi-test-data -type f)
c2304b52 7086do
89138857 7087 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
c2304b52 7088done
d1807a4f
PB
7089mkdir -p $DIRS
7090for f in $FILES ; do
cab00a5a 7091 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
f9245e10
PM
7092 symlink "$source_path/$f" "$f"
7093 fi
d1807a4f 7094done
1ad2134f 7095
c34ebfdc 7096# temporary config to build submodules
2d9f27d2 7097for rom in seabios vgabios ; do
c34ebfdc 7098 config_mak=roms/$rom/config.mak
37116c89 7099 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 7100 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
cdbd727c 7101 echo "AS=$as" >> $config_mak
5f6f0e27 7102 echo "CCAS=$ccas" >> $config_mak
c34ebfdc
AL
7103 echo "CC=$cc" >> $config_mak
7104 echo "BCC=bcc" >> $config_mak
3dd46c78 7105 echo "CPP=$cpp" >> $config_mak
c34ebfdc 7106 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 7107 echo "IASL=$iasl" >> $config_mak
c34ebfdc 7108 echo "LD=$ld" >> $config_mak
9f81aeb5 7109 echo "RANLIB=$ranlib" >> $config_mak
c34ebfdc
AL
7110done
7111
fe31017f
MAL
7112# set up tests data directory
7113if [ ! -e tests/data ]; then
7114 symlink "$source_path/tests/data" tests/data
7115fi
7116
76c7560a
HR
7117# set up qemu-iotests in this build directory
7118iotests_common_env="tests/qemu-iotests/common.env"
7119iotests_check="tests/qemu-iotests/check"
7120
7121echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7122echo >> "$iotests_common_env"
7123echo "export PYTHON='$python'" >> "$iotests_common_env"
7124
7125if [ ! -e "$iotests_check" ]; then
7126 symlink "$source_path/$iotests_check" "$iotests_check"
7127fi
7128
dc655404
MT
7129# Save the configure command line for later reuse.
7130cat <<EOD >config.status
7131#!/bin/sh
7132# Generated by configure.
7133# Run this file to recreate the current configuration.
7134# Compiler output produced by configure, useful for debugging
7135# configure, is in config.log if it exists.
7136EOD
7137printf "exec" >>config.status
7138printf " '%s'" "$0" "$@" >>config.status
cf7cc929 7139echo ' "$@"' >>config.status
dc655404
MT
7140chmod +x config.status
7141
8cd05ab6 7142rm -r "$TMPDIR1"