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