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