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