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