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