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