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