]> git.proxmox.com Git - mirror_qemu.git/blame - configure
Acceptance tests: add Linux kernel boot and console checking test
[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)
4602 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4603 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4604 virglrenderer="yes"
4605 else
4606 if test "$virglrenderer" = "yes" ; then
4607 feature_not_found "virglrenderer"
4608 fi
4609 virglrenderer="no"
4610 fi
4611fi
4612
8ca80760
RH
4613##########################################
4614# capstone
4615
e219c499
RH
4616case "$capstone" in
4617 "" | yes)
4618 if $pkg_config capstone; then
4619 capstone=system
123ac0bb 4620 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
e219c499
RH
4621 capstone=git
4622 elif test -e "${source_path}/capstone/Makefile" ; then
4623 capstone=internal
4624 elif test -z "$capstone" ; then
4625 capstone=no
4626 else
4627 feature_not_found "capstone" "Install capstone devel or git submodule"
4628 fi
4629 ;;
4630
4631 system)
4632 if ! $pkg_config capstone; then
4633 feature_not_found "capstone" "Install capstone devel"
4634 fi
4635 ;;
4636esac
4637
4638case "$capstone" in
4639 git | internal)
4640 if test "$capstone" = git; then
4641 git_submodules="${git_submodules} capstone"
4642 fi
4643 mkdir -p capstone
4644 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4645 if test "$mingw32" = "yes"; then
4646 LIBCAPSTONE=capstone.lib
4647 else
4648 LIBCAPSTONE=libcapstone.a
4649 fi
4650 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4651 ;;
4652
4653 system)
8ca80760
RH
4654 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4655 LIBS="$($pkg_config --libs capstone) $LIBS"
e219c499
RH
4656 ;;
4657
4658 no)
4659 ;;
4660 *)
4661 error_exit "Unknown state for capstone: $capstone"
4662 ;;
4663esac
8ca80760 4664
5f6b9e8f
BS
4665##########################################
4666# check if we have fdatasync
4667
4668fdatasync=no
4669cat > $TMPC << EOF
4670#include <unistd.h>
d1722a27
AR
4671int main(void) {
4672#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4673return fdatasync(0);
4674#else
e172fe11 4675#error Not supported
d1722a27
AR
4676#endif
4677}
5f6b9e8f
BS
4678EOF
4679if compile_prog "" "" ; then
4680 fdatasync=yes
4681fi
4682
e78815a5
AF
4683##########################################
4684# check if we have madvise
4685
4686madvise=no
4687cat > $TMPC << EOF
4688#include <sys/types.h>
4689#include <sys/mman.h>
832ce9c2 4690#include <stddef.h>
e78815a5
AF
4691int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4692EOF
4693if compile_prog "" "" ; then
4694 madvise=yes
4695fi
4696
4697##########################################
4698# check if we have posix_madvise
4699
4700posix_madvise=no
4701cat > $TMPC << EOF
4702#include <sys/mman.h>
832ce9c2 4703#include <stddef.h>
e78815a5
AF
4704int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4705EOF
4706if compile_prog "" "" ; then
4707 posix_madvise=yes
4708fi
4709
9bc5a719
AG
4710##########################################
4711# check if we have posix_memalign()
4712
4713posix_memalign=no
4714cat > $TMPC << EOF
4715#include <stdlib.h>
4716int main(void) {
4717 void *p;
4718 return posix_memalign(&p, 8, 8);
4719}
4720EOF
4721if compile_prog "" "" ; then
4722 posix_memalign=yes
4723fi
4724
0a852417
PD
4725##########################################
4726# check if we have posix_syslog
4727
4728posix_syslog=no
4729cat > $TMPC << EOF
4730#include <syslog.h>
4731int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4732EOF
4733if compile_prog "" "" ; then
4734 posix_syslog=yes
4735fi
4736
401bc051
PM
4737##########################################
4738# check if we have sem_timedwait
4739
4740sem_timedwait=no
4741cat > $TMPC << EOF
4742#include <semaphore.h>
4743int main(void) { return sem_timedwait(0, 0); }
4744EOF
4745if compile_prog "" "" ; then
4746 sem_timedwait=yes
4747fi
4748
94a420b1
SH
4749##########################################
4750# check if trace backend exists
4751
5b808275 4752$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 4753if test "$?" -ne 0 ; then
5b808275
LV
4754 error_exit "invalid trace backends" \
4755 "Please choose supported trace backends."
94a420b1
SH
4756fi
4757
7e24e92a
SH
4758##########################################
4759# For 'ust' backend, test if ust headers are present
5b808275 4760if have_backend "ust"; then
7e24e92a 4761 cat > $TMPC << EOF
bf15f63c 4762#include <lttng/tracepoint.h>
7e24e92a
SH
4763int main(void) { return 0; }
4764EOF
c79ed23d 4765 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
bf15f63c 4766 if $pkg_config lttng-ust --exists; then
89138857 4767 lttng_ust_libs=$($pkg_config --libs lttng-ust)
bf15f63c 4768 else
c79ed23d 4769 lttng_ust_libs="-llttng-ust -ldl"
bf15f63c
MG
4770 fi
4771 if $pkg_config liburcu-bp --exists; then
89138857 4772 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
bf15f63c
MG
4773 else
4774 urcu_bp_libs="-lurcu-bp"
4775 fi
4776
4777 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4778 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
7e24e92a 4779 else
bf15f63c 4780 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
4781 fi
4782fi
b3d08c02
DB
4783
4784##########################################
4785# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 4786if have_backend "dtrace"; then
b3d08c02 4787 if ! has 'dtrace' ; then
76ad07a4 4788 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 4789 fi
c276b17d
DB
4790 trace_backend_stap="no"
4791 if has 'stap' ; then
4792 trace_backend_stap="yes"
4793 fi
b3d08c02
DB
4794fi
4795
023367e6 4796##########################################
519175a2 4797# check and set a backend for coroutine
d0e2fce5 4798
7c2acc70 4799# We prefer ucontext, but it's not always possible. The fallback
33c53c54
DB
4800# is sigcontext. On Windows the only valid backend is the Windows
4801# specific one.
7c2acc70
PM
4802
4803ucontext_works=no
4804if test "$darwin" != "yes"; then
4805 cat > $TMPC << EOF
d0e2fce5 4806#include <ucontext.h>
cdf84806
PM
4807#ifdef __stub_makecontext
4808#error Ignoring glibc stub makecontext which will always fail
4809#endif
75cafad7 4810int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 4811EOF
7c2acc70
PM
4812 if compile_prog "" "" ; then
4813 ucontext_works=yes
4814 fi
4815fi
4816
4817if test "$coroutine" = ""; then
4818 if test "$mingw32" = "yes"; then
4819 coroutine=win32
4820 elif test "$ucontext_works" = "yes"; then
4821 coroutine=ucontext
4822 else
4823 coroutine=sigaltstack
d0e2fce5 4824 fi
519175a2 4825else
7c2acc70
PM
4826 case $coroutine in
4827 windows)
4828 if test "$mingw32" != "yes"; then
4829 error_exit "'windows' coroutine backend only valid for Windows"
4830 fi
4831 # Unfortunately the user visible backend name doesn't match the
4832 # coroutine-*.c filename for this case, so we have to adjust it here.
4833 coroutine=win32
4834 ;;
4835 ucontext)
4836 if test "$ucontext_works" != "yes"; then
4837 feature_not_found "ucontext"
4838 fi
4839 ;;
33c53c54 4840 sigaltstack)
7c2acc70
PM
4841 if test "$mingw32" = "yes"; then
4842 error_exit "only the 'windows' coroutine backend is valid for Windows"
4843 fi
4844 ;;
4845 *)
4846 error_exit "unknown coroutine backend $coroutine"
4847 ;;
4848 esac
d0e2fce5
AK
4849fi
4850
70c60c08 4851if test "$coroutine_pool" = ""; then
33c53c54 4852 coroutine_pool=yes
70c60c08
SH
4853fi
4854
7d992e4d 4855if test "$debug_stack_usage" = "yes"; then
7d992e4d
PL
4856 if test "$coroutine_pool" = "yes"; then
4857 echo "WARN: disabling coroutine pool for stack usage debugging"
4858 coroutine_pool=no
4859 fi
4860fi
4861
4862
d2042378
AK
4863##########################################
4864# check if we have open_by_handle_at
4865
4e1797f9 4866open_by_handle_at=no
d2042378
AK
4867cat > $TMPC << EOF
4868#include <fcntl.h>
acc55ba8
SW
4869#if !defined(AT_EMPTY_PATH)
4870# error missing definition
4871#else
75cafad7 4872int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
acc55ba8 4873#endif
d2042378
AK
4874EOF
4875if compile_prog "" "" ; then
4876 open_by_handle_at=yes
4877fi
4878
e06a765e
HPB
4879########################################
4880# check if we have linux/magic.h
4881
4882linux_magic_h=no
4883cat > $TMPC << EOF
4884#include <linux/magic.h>
4885int main(void) {
75cafad7 4886 return 0;
e06a765e
HPB
4887}
4888EOF
4889if compile_prog "" "" ; then
4890 linux_magic_h=yes
4891fi
4892
06d71fa1 4893########################################
c95e3080
KW
4894# check whether we can disable warning option with a pragma (this is needed
4895# to silence warnings in the headers of some versions of external libraries).
4896# This test has to be compiled with -Werror as otherwise an unknown pragma is
4897# only a warning.
4898#
4899# If we can't selectively disable warning in the code, disable -Werror so that
4900# the build doesn't fail anyway.
4901
06d71fa1
PM
4902pragma_disable_unused_but_set=no
4903cat > $TMPC << EOF
e6f53fd5 4904#pragma GCC diagnostic push
c95e3080 4905#pragma GCC diagnostic ignored "-Wstrict-prototypes"
e6f53fd5 4906#pragma GCC diagnostic pop
c95e3080 4907
06d71fa1
PM
4908int main(void) {
4909 return 0;
4910}
4911EOF
4912if compile_prog "-Werror" "" ; then
cc6e3ca9 4913 pragma_diagnostic_available=yes
c95e3080
KW
4914else
4915 werror=no
06d71fa1
PM
4916fi
4917
3f4349dc 4918########################################
541be927 4919# check if we have valgrind/valgrind.h
3f4349dc
KW
4920
4921valgrind_h=no
4922cat > $TMPC << EOF
4923#include <valgrind/valgrind.h>
3f4349dc 4924int main(void) {
3f4349dc
KW
4925 return 0;
4926}
4927EOF
4928if compile_prog "" "" ; then
4929 valgrind_h=yes
4930fi
4931
8ab1bf12
LC
4932########################################
4933# check if environ is declared
4934
4935has_environ=no
4936cat > $TMPC << EOF
4937#include <unistd.h>
4938int main(void) {
c075a723 4939 environ = 0;
8ab1bf12
LC
4940 return 0;
4941}
4942EOF
4943if compile_prog "" "" ; then
4944 has_environ=yes
4945fi
4946
76a347e1
RH
4947########################################
4948# check if cpuid.h is usable.
4949
76a347e1
RH
4950cat > $TMPC << EOF
4951#include <cpuid.h>
4952int main(void) {
774d566c
PM
4953 unsigned a, b, c, d;
4954 int max = __get_cpuid_max(0, 0);
4955
4956 if (max >= 1) {
4957 __cpuid(1, a, b, c, d);
4958 }
4959
4960 if (max >= 7) {
4961 __cpuid_count(7, 0, a, b, c, d);
4962 }
4963
4964 return 0;
76a347e1
RH
4965}
4966EOF
4967if compile_prog "" "" ; then
4968 cpuid_h=yes
4969fi
4970
5dd89908
RH
4971##########################################
4972# avx2 optimization requirement check
4973#
4974# There is no point enabling this if cpuid.h is not usable,
4975# since we won't be able to select the new routines.
4976
4977if test $cpuid_h = yes; then
4978 cat > $TMPC << EOF
4979#pragma GCC push_options
4980#pragma GCC target("avx2")
4981#include <cpuid.h>
4982#include <immintrin.h>
4983static int bar(void *a) {
4984 __m256i x = *(__m256i *)a;
4985 return _mm256_testz_si256(x, x);
4986}
4987int main(int argc, char *argv[]) { return bar(argv[0]); }
4988EOF
4989 if compile_object "" ; then
4990 avx2_opt="yes"
4991 fi
4992fi
4993
f540166b
RH
4994########################################
4995# check if __[u]int128_t is usable.
4996
4997int128=no
4998cat > $TMPC << EOF
a00f66ab
SW
4999#if defined(__clang_major__) && defined(__clang_minor__)
5000# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5001# error __int128_t does not work in CLANG before 3.2
5002# endif
5003#endif
f540166b
RH
5004__int128_t a;
5005__uint128_t b;
5006int main (void) {
5007 a = a + b;
5008 b = a * b;
464e3671 5009 a = a * a;
f540166b
RH
5010 return 0;
5011}
5012EOF
5013if compile_prog "" "" ; then
5014 int128=yes
5015fi
76a347e1 5016
7ebee43e
RH
5017#########################################
5018# See if 128-bit atomic operations are supported.
5019
5020atomic128=no
5021if test "$int128" = "yes"; then
5022 cat > $TMPC << EOF
5023int main(void)
5024{
5025 unsigned __int128 x = 0, y = 0;
5026 y = __atomic_load_16(&x, 0);
5027 __atomic_store_16(&x, y, 0);
5028 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5029 return 0;
5030}
5031EOF
5032 if compile_prog "" "" ; then
5033 atomic128=yes
5034 fi
5035fi
5036
df79b996
RH
5037#########################################
5038# See if 64-bit atomic operations are supported.
5039# Note that without __atomic builtins, we can only
5040# assume atomic loads/stores max at pointer size.
5041
5042cat > $TMPC << EOF
5043#include <stdint.h>
5044int main(void)
5045{
5046 uint64_t x = 0, y = 0;
5047#ifdef __ATOMIC_RELAXED
5048 y = __atomic_load_8(&x, 0);
5049 __atomic_store_8(&x, y, 0);
5050 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5051 __atomic_exchange_8(&x, y, 0);
5052 __atomic_fetch_add_8(&x, y, 0);
5053#else
5054 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5055 __sync_lock_test_and_set(&x, y);
5056 __sync_val_compare_and_swap(&x, y, 0);
5057 __sync_fetch_and_add(&x, y);
5058#endif
5059 return 0;
5060}
5061EOF
5062if compile_prog "" "" ; then
5063 atomic64=yes
5064fi
5065
db432672
RH
5066########################################
5067# See if 16-byte vector operations are supported.
5068# Even without a vector unit the compiler may expand these.
5069# There is a bug in old GCC for PPC that crashes here.
5070# Unfortunately it's the system compiler for Centos 7.
5071
5072cat > $TMPC << EOF
5073typedef unsigned char U1 __attribute__((vector_size(16)));
5074typedef unsigned short U2 __attribute__((vector_size(16)));
5075typedef unsigned int U4 __attribute__((vector_size(16)));
5076typedef unsigned long long U8 __attribute__((vector_size(16)));
5077typedef signed char S1 __attribute__((vector_size(16)));
5078typedef signed short S2 __attribute__((vector_size(16)));
5079typedef signed int S4 __attribute__((vector_size(16)));
5080typedef signed long long S8 __attribute__((vector_size(16)));
5081static U1 a1, b1;
5082static U2 a2, b2;
5083static U4 a4, b4;
5084static U8 a8, b8;
5085static S1 c1;
5086static S2 c2;
5087static S4 c4;
5088static S8 c8;
5089static int i;
74912f6d
LV
5090void helper(void *d, void *a, int shift, int i);
5091void helper(void *d, void *a, int shift, int i)
5092{
5093 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5094 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5095 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5096 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5097}
db432672
RH
5098int main(void)
5099{
5100 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
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 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5107 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5108 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5109 return 0;
5110}
5111EOF
5112
5113vector16=no
5114if compile_prog "" "" ; then
5115 vector16=yes
5116fi
5117
1e6e9aca
RH
5118########################################
5119# check if getauxval is available.
5120
5121getauxval=no
5122cat > $TMPC << EOF
5123#include <sys/auxv.h>
5124int main(void) {
5125 return getauxval(AT_HWCAP) == 0;
5126}
5127EOF
5128if compile_prog "" "" ; then
5129 getauxval=yes
5130fi
5131
fd0e6053
JS
5132########################################
5133# check if ccache is interfering with
5134# semantic analysis of macros
5135
5e4dfd3d 5136unset CCACHE_CPP2
fd0e6053
JS
5137ccache_cpp2=no
5138cat > $TMPC << EOF
5139static const int Z = 1;
5140#define fn() ({ Z; })
5141#define TAUT(X) ((X) == Z)
5142#define PAREN(X, Y) (X == Y)
5143#define ID(X) (X)
5144int main(int argc, char *argv[])
5145{
5146 int x = 0, y = 0;
5147 x = ID(x);
5148 x = fn();
5149 fn();
5150 if (PAREN(x, y)) return 0;
5151 if (TAUT(Z)) return 0;
5152 return 0;
5153}
5154EOF
5155
5156if ! compile_object "-Werror"; then
5157 ccache_cpp2=yes
5158fi
5159
b553a042
JS
5160#################################################
5161# clang does not support glibc + FORTIFY_SOURCE.
5162
5163if test "$fortify_source" != "no"; then
5164 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5165 fortify_source="no";
e189091f 5166 elif test -n "$cxx" && has $cxx &&
cfcc7c14 5167 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
b553a042
JS
5168 fortify_source="no";
5169 else
5170 fortify_source="yes"
5171 fi
5172fi
5173
1efad060
FZ
5174###############################################
5175# Check if copy_file_range is provided by glibc
5176have_copy_file_range=no
5177cat > $TMPC << EOF
5178#include <unistd.h>
5179int main(void) {
5180 copy_file_range(0, NULL, 0, NULL, 0, 0);
5181 return 0;
5182}
5183EOF
5184if compile_prog "" "" ; then
5185 have_copy_file_range=yes
5186fi
5187
277abf15
JV
5188##########################################
5189# check if struct fsxattr is available via linux/fs.h
5190
5191have_fsxattr=no
5192cat > $TMPC << EOF
5193#include <linux/fs.h>
5194struct fsxattr foo;
5195int main(void) {
5196 return 0;
5197}
5198EOF
5199if compile_prog "" "" ; then
5200 have_fsxattr=yes
5201fi
5202
a40161cb
PB
5203##########################################
5204# check for usable membarrier system call
5205if test "$membarrier" = "yes"; then
5206 have_membarrier=no
5207 if test "$mingw32" = "yes" ; then
5208 have_membarrier=yes
5209 elif test "$linux" = "yes" ; then
5210 cat > $TMPC << EOF
5211 #include <linux/membarrier.h>
5212 #include <sys/syscall.h>
5213 #include <unistd.h>
5214 #include <stdlib.h>
5215 int main(void) {
5216 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5217 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5218 exit(0);
5219 }
5220EOF
5221 if compile_prog "" "" ; then
5222 have_membarrier=yes
5223 fi
5224 fi
5225 if test "$have_membarrier" = "no"; then
5226 feature_not_found "membarrier" "membarrier system call not available"
5227 fi
5228else
5229 # Do not enable it by default even for Mingw32, because it doesn't
5230 # work on Wine.
5231 membarrier=no
5232fi
5233
b66e10e4
PM
5234##########################################
5235# check if rtnetlink.h exists and is useful
575b22b1
LV
5236have_rtnetlink=no
5237cat > $TMPC << EOF
5238#include <linux/rtnetlink.h>
5239int main(void) {
5240 return IFLA_PROTO_DOWN;
5241}
5242EOF
5243if compile_prog "" "" ; then
5244 have_rtnetlink=yes
5245fi
5246
6a02c806
SH
5247##########################################
5248# check for usable AF_VSOCK environment
5249have_af_vsock=no
5250cat > $TMPC << EOF
5251#include <errno.h>
5252#include <sys/types.h>
5253#include <sys/socket.h>
5254#if !defined(AF_VSOCK)
5255# error missing AF_VSOCK flag
5256#endif
5257#include <linux/vm_sockets.h>
5258int main(void) {
5259 int sock, ret;
5260 struct sockaddr_vm svm;
5261 socklen_t len = sizeof(svm);
5262 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5263 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5264 if ((ret == -1) && (errno == ENOTCONN)) {
5265 return 0;
5266 }
5267 return -1;
5268}
5269EOF
5270if compile_prog "" "" ; then
5271 have_af_vsock=yes
5272fi
5273
f0d92b56
LM
5274##########################################
5275# check for usable AF_ALG environment
5276hava_afalg=no
5277cat > $TMPC << EOF
5278#include <errno.h>
5279#include <sys/types.h>
5280#include <sys/socket.h>
5281#include <linux/if_alg.h>
5282int main(void) {
5283 int sock;
5284 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5285 return sock;
5286}
5287EOF
5288if compile_prog "" "" ; then
5289 have_afalg=yes
5290fi
5291if test "$crypto_afalg" = "yes"
5292then
5293 if test "$have_afalg" != "yes"
5294 then
5295 error_exit "AF_ALG requested but could not be detected"
5296 fi
5297fi
5298
5299
c97d6d2c
SAGDR
5300#################################################
5301# Check to see if we have the Hypervisor framework
d2d08522 5302if [ "$darwin" = "yes" ] ; then
c97d6d2c
SAGDR
5303 cat > $TMPC << EOF
5304#include <Hypervisor/hv.h>
5305int main() { return 0;}
5306EOF
5307 if ! compile_object ""; then
5308 hvf='no'
5309 else
5310 hvf='yes'
5311 LDFLAGS="-framework Hypervisor $LDFLAGS"
5312 fi
5313fi
5314
6969ec6c
JC
5315#################################################
5316# Sparc implicitly links with --relax, which is
5317# incompatible with -r, so --no-relax should be
5318# given. It does no harm to give it on other
5319# platforms too.
5320
5321# Note: the prototype is needed since QEMU_CFLAGS
5322# contains -Wmissing-prototypes
5323cat > $TMPC << EOF
5324extern int foo(void);
5325int foo(void) { return 0; }
5326EOF
5327if ! compile_object ""; then
5328 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5329fi
7ecf44a5
PB
5330for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5331 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5332 LD_REL_FLAGS=$i
5333 break
5334 fi
5335done
5336if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5337 feature_not_found "modules" "Cannot find how to build relocatable objects"
6969ec6c
JC
5338fi
5339
4d04351f
CC
5340##########################################
5341# check for sysmacros.h
5342
5343have_sysmacros=no
5344cat > $TMPC << EOF
5345#include <sys/sysmacros.h>
5346int main(void) {
5347 return makedev(0, 0);
5348}
5349EOF
5350if compile_prog "" "" ; then
5351 have_sysmacros=yes
5352fi
5353
da92c3ff
AM
5354##########################################
5355# Veritas HyperScale block driver VxHS
5356# Check if libvxhs is installed
5357
5358if test "$vxhs" != "no" ; then
5359 cat > $TMPC <<EOF
5360#include <stdint.h>
5361#include <qnio/qnio_api.h>
5362
5363void *vxhs_callback;
5364
5365int main(void) {
5366 iio_init(QNIO_VERSION, vxhs_callback);
5367 return 0;
5368}
5369EOF
5370 vxhs_libs="-lvxhs -lssl"
5371 if compile_prog "" "$vxhs_libs" ; then
5372 vxhs=yes
5373 else
5374 if test "$vxhs" = "yes" ; then
5375 feature_not_found "vxhs block device" "Install libvxhs See github"
5376 fi
5377 vxhs=no
5378 fi
5379fi
5380
49e00a18
AG
5381##########################################
5382# check for _Static_assert()
5383
5384have_static_assert=no
5385cat > $TMPC << EOF
5386_Static_assert(1, "success");
5387int main(void) {
5388 return 0;
5389}
5390EOF
5391if compile_prog "" "" ; then
5392 have_static_assert=yes
5393fi
5394
e674605f
TG
5395##########################################
5396# check for utmpx.h, it is missing e.g. on OpenBSD
5397
5398have_utmpx=no
5399cat > $TMPC << EOF
5400#include <utmpx.h>
5401struct utmpx user_info;
5402int main(void) {
5403 return 0;
5404}
5405EOF
5406if compile_prog "" "" ; then
5407 have_utmpx=yes
5408fi
5409
247724cb
MAL
5410##########################################
5411# checks for sanitizers
5412
247724cb
MAL
5413have_asan=no
5414have_ubsan=no
d83414e1
MAL
5415have_asan_iface_h=no
5416have_asan_iface_fiber=no
247724cb
MAL
5417
5418if test "$sanitizers" = "yes" ; then
b9f44da2 5419 write_c_skeleton
247724cb
MAL
5420 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5421 have_asan=yes
5422 fi
b9f44da2
MAL
5423
5424 # we could use a simple skeleton for flags checks, but this also
5425 # detect the static linking issue of ubsan, see also:
5426 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5427 cat > $TMPC << EOF
5428#include <stdlib.h>
5429int main(void) {
5430 void *tmp = malloc(10);
5431 return *(int *)(tmp + 2);
5432}
5433EOF
247724cb
MAL
5434 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5435 have_ubsan=yes
5436 fi
d83414e1
MAL
5437
5438 if check_include "sanitizer/asan_interface.h" ; then
5439 have_asan_iface_h=yes
5440 fi
5441
5442 cat > $TMPC << EOF
5443#include <sanitizer/asan_interface.h>
5444int main(void) {
5445 __sanitizer_start_switch_fiber(0, 0, 0);
5446 return 0;
5447}
5448EOF
5449 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5450 have_asan_iface_fiber=yes
5451 fi
247724cb
MAL
5452fi
5453
51a12b51
AB
5454##########################################
5455# Docker and cross-compiler support
5456#
5457# This is specifically for building test
5458# cases for foreign architectures, not
5459# cross-compiling QEMU itself.
5460
5461if has "docker"; then
5462 docker=$($python $source_path/tests/docker/docker.py probe)
5463fi
5464
7e24e92a 5465##########################################
e86ecd4b
JQ
5466# End of CC checks
5467# After here, no more $cc or $ld runs
5468
d83414e1
MAL
5469write_c_skeleton
5470
1d728c39
BS
5471if test "$gcov" = "yes" ; then
5472 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5473 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
b553a042 5474elif test "$fortify_source" = "yes" ; then
e600cdf3 5475 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
48e56d50
PB
5476elif test "$debug" = "no"; then
5477 CFLAGS="-O2 $CFLAGS"
e86ecd4b 5478fi
a316e378 5479
247724cb
MAL
5480if test "$have_asan" = "yes"; then
5481 CFLAGS="-fsanitize=address $CFLAGS"
d83414e1
MAL
5482 if test "$have_asan_iface_h" = "no" ; then
5483 echo "ASAN build enabled, but ASAN header missing." \
5484 "Without code annotation, the report may be inferior."
5485 elif test "$have_asan_iface_fiber" = "no" ; then
5486 echo "ASAN build enabled, but ASAN header is too old." \
5487 "Without code annotation, the report may be inferior."
5488 fi
247724cb
MAL
5489fi
5490if test "$have_ubsan" = "yes"; then
5491 CFLAGS="-fsanitize=undefined $CFLAGS"
5492fi
5493
6542aa9c
PL
5494##########################################
5495# Do we have libnfs
5496if test "$libnfs" != "no" ; then
b7d769c9 5497 if $pkg_config --atleast-version=1.9.3 libnfs; then
6542aa9c
PL
5498 libnfs="yes"
5499 libnfs_libs=$($pkg_config --libs libnfs)
6542aa9c
PL
5500 else
5501 if test "$libnfs" = "yes" ; then
8efc9363 5502 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6542aa9c
PL
5503 fi
5504 libnfs="no"
5505 fi
5506fi
1d728c39 5507
6ca026cb
PM
5508# Now we've finished running tests it's OK to add -Werror to the compiler flags
5509if test "$werror" = "yes"; then
5510 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5511fi
5512
e86ecd4b
JQ
5513if test "$solaris" = "no" ; then
5514 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
1156c669 5515 LDFLAGS="-Wl,--warn-common $LDFLAGS"
e86ecd4b
JQ
5516 fi
5517fi
5518
94dd53c5
GH
5519# test if pod2man has --utf8 option
5520if pod2man --help | grep -q utf8; then
5521 POD2MAN="pod2man --utf8"
5522else
5523 POD2MAN="pod2man"
5524fi
5525
952afb71
BS
5526# Use ASLR, no-SEH and DEP if available
5527if test "$mingw32" = "yes" ; then
5528 for flag in --dynamicbase --no-seh --nxcompat; do
e9a3591f 5529 if ld_has $flag ; then
952afb71
BS
5530 LDFLAGS="-Wl,$flag $LDFLAGS"
5531 fi
5532 done
5533fi
5534
10ea68b3 5535qemu_confdir=$sysconfdir$confsuffix
e26110cf 5536qemu_moddir=$libdir$confsuffix
528ae5b8 5537qemu_datadir=$datadir$confsuffix
834574ea 5538qemu_localedir="$datadir/locale"
e7b45cc4 5539
e0580342
KR
5540# We can only support ivshmem if we have eventfd
5541if [ "$eventfd" = "yes" ]; then
5542 ivshmem=yes
5543fi
5544
4b1c11fd
DB
5545tools=""
5546if test "$want_tools" = "yes" ; then
ca35f780 5547 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4b1c11fd
DB
5548 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5549 tools="qemu-nbd\$(EXESUF) $tools"
b1449edb
KR
5550 fi
5551 if [ "$ivshmem" = "yes" ]; then
a75eb03b 5552 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4b1c11fd
DB
5553 fi
5554fi
5555if test "$softmmu" = yes ; then
b855f8d1
PB
5556 if test "$linux" = yes; then
5557 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
aabfd88d
AF
5558 virtfs=yes
5559 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5560 else
5561 if test "$virtfs" = yes; then
b855f8d1 5562 error_exit "VirtFS requires libcap devel and libattr devel"
983eef5a 5563 fi
17500370 5564 virtfs=no
aabfd88d 5565 fi
fe8fc5ae
PB
5566 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5567 mpath=yes
5568 else
5569 if test "$mpath" = yes; then
5570 error_exit "Multipath requires libmpathpersist devel"
5571 fi
5572 mpath=no
5573 fi
b855f8d1
PB
5574 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5575 else
5576 if test "$virtfs" = yes; then
5577 error_exit "VirtFS is supported only on Linux"
5578 fi
5579 virtfs=no
fe8fc5ae
PB
5580 if test "$mpath" = yes; then
5581 error_exit "Multipath is supported only on Linux"
5582 fi
5583 mpath=no
17bff52b 5584 fi
ff69fd8c
LV
5585 if test "$xkbcommon" = "yes"; then
5586 tools="qemu-keymap\$(EXESUF) $tools"
5587 fi
6a021536 5588fi
9d6bc27b
MR
5589
5590# Probe for guest agent support/options
5591
e8ef31a3 5592if [ "$guest_agent" != "no" ]; then
b39297ae 5593 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
fafcaf1d 5594 tools="qemu-ga $tools"
e8ef31a3
MT
5595 guest_agent=yes
5596 elif [ "$guest_agent" != yes ]; then
5597 guest_agent=no
5598 else
5599 error_exit "Guest agent is not supported on this platform"
ca35f780 5600 fi
00c705fb 5601fi
ca35f780 5602
9d6bc27b
MR
5603# Guest agent Window MSI package
5604
5605if test "$guest_agent" != yes; then
5606 if test "$guest_agent_msi" = yes; then
5607 error_exit "MSI guest agent package requires guest agent enabled"
5608 fi
5609 guest_agent_msi=no
5610elif test "$mingw32" != "yes"; then
5611 if test "$guest_agent_msi" = "yes"; then
5612 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5613 fi
5614 guest_agent_msi=no
5615elif ! has wixl; then
5616 if test "$guest_agent_msi" = "yes"; then
5617 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5618 fi
5619 guest_agent_msi=no
1a34904e
MR
5620else
5621 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5622 # disabled explicitly
5623 if test "$guest_agent_msi" != "no"; then
5624 guest_agent_msi=yes
5625 fi
9d6bc27b
MR
5626fi
5627
1a34904e 5628if test "$guest_agent_msi" = "yes"; then
9d6bc27b
MR
5629 if test "$guest_agent_with_vss" = "yes"; then
5630 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5631 fi
5632
5633 if test "$QEMU_GA_MANUFACTURER" = ""; then
5634 QEMU_GA_MANUFACTURER=QEMU
5635 fi
5636
5637 if test "$QEMU_GA_DISTRO" = ""; then
5638 QEMU_GA_DISTRO=Linux
5639 fi
5640
5641 if test "$QEMU_GA_VERSION" = ""; then
89138857 5642 QEMU_GA_VERSION=$(cat $source_path/VERSION)
9d6bc27b
MR
5643 fi
5644
89138857 5645 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
9d6bc27b
MR
5646
5647 case "$cpu" in
5648 x86_64)
5649 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5650 ;;
5651 i386)
5652 QEMU_GA_MSI_ARCH="-D Arch=32"
5653 ;;
5654 *)
5655 error_exit "CPU $cpu not supported for building installation package"
5656 ;;
5657 esac
5658fi
5659
ca35f780
PB
5660# Mac OS X ships with a broken assembler
5661roms=
5662if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5663 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5664 "$softmmu" = yes ; then
e57218b6 5665 # Different host OS linkers have different ideas about the name of the ELF
c65d5e4e
BS
5666 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5667 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5668 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
e57218b6
PM
5669 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5670 ld_i386_emulation="$emu"
5671 roms="optionrom"
5672 break
5673 fi
5674 done
ca35f780 5675fi
d0384d1d 5676if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
39ac8455
DG
5677 roms="$roms spapr-rtas"
5678fi
ca35f780 5679
9933c305
CB
5680if test "$cpu" = "s390x" ; then
5681 roms="$roms s390-ccw"
5682fi
5683
964c6fa1 5684# Probe for the need for relocating the user-only binary.
92fe2ba8 5685if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
964c6fa1
RH
5686 textseg_addr=
5687 case "$cpu" in
479eb121
RH
5688 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5689 # ??? Rationale for choosing this address
964c6fa1
RH
5690 textseg_addr=0x60000000
5691 ;;
5692 mips)
479eb121
RH
5693 # A 256M aligned address, high in the address space, with enough
5694 # room for the code_gen_buffer above it before the stack.
5695 textseg_addr=0x60000000
964c6fa1
RH
5696 ;;
5697 esac
5698 if [ -n "$textseg_addr" ]; then
5699 cat > $TMPC <<EOF
5700 int main(void) { return 0; }
5701EOF
5702 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5703 if ! compile_prog "" "$textseg_ldflags"; then
5704 # In case ld does not support -Ttext-segment, edit the default linker
5705 # script via sed to set the .text start addr. This is needed on FreeBSD
5706 # at least.
92fe2ba8
PM
5707 if ! $ld --verbose >/dev/null 2>&1; then
5708 error_exit \
5709 "We need to link the QEMU user mode binaries at a" \
5710 "specific text address. Unfortunately your linker" \
5711 "doesn't support either the -Ttext-segment option or" \
5712 "printing the default linker script with --verbose." \
5713 "If you don't want the user mode binaries, pass the" \
5714 "--disable-user option to configure."
5715 fi
5716
964c6fa1
RH
5717 $ld --verbose | sed \
5718 -e '1,/==================================================/d' \
5719 -e '/==================================================/,$d' \
5720 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5721 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5722 textseg_ldflags="-Wl,-T../config-host.ld"
5723 fi
5724 fi
5725fi
5726
11cde1c8
BD
5727# Check that the C++ compiler exists and works with the C compiler.
5728# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5729if has $cxx; then
5730 cat > $TMPC <<EOF
5731int c_function(void);
5732int main(void) { return c_function(); }
5733EOF
5734
5735 compile_object
5736
5737 cat > $TMPCXX <<EOF
5738extern "C" {
5739 int c_function(void);
5740}
5741int c_function(void) { return 42; }
5742EOF
5743
5744 update_cxxflags
5745
5746 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5747 # C++ compiler $cxx works ok with C compiler $cc
5748 :
5749 else
5750 echo "C++ compiler $cxx does not work with C compiler $cc"
5751 echo "Disabling C++ specific optional code"
5752 cxx=
5753 fi
5754else
5755 echo "No C++ compiler available; disabling C++ specific optional code"
5756 cxx=
5757fi
5758
02d34f62
CR
5759echo_version() {
5760 if test "$1" = "yes" ; then
5761 echo "($2)"
5762 fi
5763}
5764
50e12060
JK
5765# prepend pixman and ftd flags after all config tests are done
5766QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
8a99e9a3 5767QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
50e12060 5768libs_softmmu="$pixman_libs $libs_softmmu"
5ca9388a 5769
43ce4dfe 5770echo "Install prefix $prefix"
89138857 5771echo "BIOS directory $(eval echo $qemu_datadir)"
3d5eecab 5772echo "firmware path $(eval echo $firmwarepath)"
89138857
SW
5773echo "binary directory $(eval echo $bindir)"
5774echo "library directory $(eval echo $libdir)"
5775echo "module directory $(eval echo $qemu_moddir)"
5776echo "libexec directory $(eval echo $libexecdir)"
5777echo "include directory $(eval echo $includedir)"
5778echo "config directory $(eval echo $sysconfdir)"
11d9f695 5779if test "$mingw32" = "no" ; then
89138857
SW
5780echo "local state directory $(eval echo $local_statedir)"
5781echo "Manual directory $(eval echo $mandir)"
43ce4dfe 5782echo "ELF interp prefix $interp_prefix"
5a699bbb
LE
5783else
5784echo "local state directory queried at runtime"
d9840e25 5785echo "Windows SDK $win_sdk"
11d9f695 5786fi
5a67135a 5787echo "Source path $source_path"
cc84d63a 5788echo "GIT binary $git"
aef45d51 5789echo "GIT submodules $git_submodules"
43ce4dfe 5790echo "C compiler $cc"
83469015 5791echo "Host C compiler $host_cc"
83f73fce 5792echo "C++ compiler $cxx"
3c4a4d0d 5793echo "Objective-C compiler $objcc"
45d285ab 5794echo "ARFLAGS $ARFLAGS"
0c439cbf 5795echo "CFLAGS $CFLAGS"
a558ee17 5796echo "QEMU_CFLAGS $QEMU_CFLAGS"
0c439cbf 5797echo "LDFLAGS $LDFLAGS"
8a99e9a3 5798echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
43ce4dfe 5799echo "make $make"
6a882643 5800echo "install $install"
c886edfb 5801echo "python $python"
e2d8830e
BS
5802if test "$slirp" = "yes" ; then
5803 echo "smbd $smbd"
5804fi
17969268 5805echo "module support $modules"
43ce4dfe 5806echo "host CPU $cpu"
de83cd02 5807echo "host big endian $bigendian"
97a847bc 5808echo "target list $target_list"
43ce4dfe 5809echo "gprof enabled $gprof"
03b4fe7d 5810echo "sparse enabled $sparse"
1625af87 5811echo "strip binaries $strip_opt"
05c2a3e7 5812echo "profiler $profiler"
43ce4dfe 5813echo "static build $static"
5b0753e0
FB
5814if test "$darwin" = "yes" ; then
5815 echo "Cocoa support $cocoa"
5816fi
89138857
SW
5817echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5818echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
925a0400 5819echo "GTK GL support $gtk_gl"
89138857 5820echo "VTE support $vte $(echo_version $vte $vteversion)"
a1c5e949 5821echo "TLS priority $tls_priority"
ddbb0d09 5822echo "GNUTLS support $gnutls"
b917da4c 5823echo "GNUTLS rnd $gnutls_rnd"
91bfcdb0 5824echo "libgcrypt $gcrypt"
37788f25 5825echo "libgcrypt kdf $gcrypt_kdf"
89138857 5826echo "nettle $nettle $(echo_version $nettle $nettle_version)"
fff2f982 5827echo "nettle kdf $nettle_kdf"
9a2fd434 5828echo "libtasn1 $tasn1"
4d3b6f6e 5829echo "curses support $curses"
9d9e1521 5830echo "virgl support $virglrenderer"
769ce76d 5831echo "curl support $curl"
67b915a5 5832echo "mingw32 support $mingw32"
0c58ac1c 5833echo "Audio drivers $audio_drv_list"
b64ec4e4
FZ
5834echo "Block whitelist (rw) $block_drv_rw_whitelist"
5835echo "Block whitelist (ro) $block_drv_ro_whitelist"
983eef5a 5836echo "VirtFS support $virtfs"
fe8fc5ae 5837echo "Multipath support $mpath"
821601ea
JS
5838echo "VNC support $vnc"
5839if test "$vnc" = "yes" ; then
821601ea
JS
5840 echo "VNC SASL support $vnc_sasl"
5841 echo "VNC JPEG support $vnc_jpeg"
5842 echo "VNC PNG support $vnc_png"
821601ea 5843fi
3142255c
BS
5844if test -n "$sparc_cpu"; then
5845 echo "Target Sparc Arch $sparc_cpu"
5846fi
e37630ca 5847echo "xen support $xen"
3996e85c
PD
5848if test "$xen" = "yes" ; then
5849 echo "xen ctrl version $xen_ctrl_version"
64a7ad6f 5850 echo "pv dom build $xen_pv_domain_build"
3996e85c 5851fi
2e4d9fb1 5852echo "brlapi support $brlapi"
a20a6f46 5853echo "bluez support $bluez"
a25dba17 5854echo "Documentation $docs"
40d6444e 5855echo "PIE $pie"
8a16d273 5856echo "vde support $vde"
58952137 5857echo "netmap support $netmap"
5c6c3a6c 5858echo "Linux AIO support $linux_aio"
758e8e38 5859echo "ATTR/XATTR support $attr"
77755340 5860echo "Install blobs $blobs"
b31a0277 5861echo "KVM support $kvm"
b0cb0a66 5862echo "HAX support $hax"
c97d6d2c 5863echo "HVF support $hvf"
d661d9a4 5864echo "WHPX support $whpx"
b3f6ea7e
PB
5865echo "TCG support $tcg"
5866if test "$tcg" = "yes" ; then
5867 echo "TCG debug enabled $debug_tcg"
5868 echo "TCG interpreter $tcg_interpreter"
5869fi
5a22ab71 5870echo "malloc trim support $malloc_trim"
2da776db 5871echo "RDMA support $rdma"
f652e6af 5872echo "fdt support $fdt"
a40161cb 5873echo "membarrier $membarrier"
ceb42de8 5874echo "preadv support $preadv"
5f6b9e8f 5875echo "fdatasync $fdatasync"
e78815a5
AF
5876echo "madvise $madvise"
5877echo "posix_madvise $posix_madvise"
9bc5a719 5878echo "posix_memalign $posix_memalign"
47e98658 5879echo "libcap-ng support $cap_ng"
d5970055 5880echo "vhost-net support $vhost_net"
042cea27 5881echo "vhost-crypto support $vhost_crypto"
5e9be92d 5882echo "vhost-scsi support $vhost_scsi"
fc0b9b0e 5883echo "vhost-vsock support $vhost_vsock"
e6a74868 5884echo "vhost-user support $vhost_user"
5b808275 5885echo "Trace backends $trace_backends"
713572a7 5886if have_backend "simple"; then
9410b56c 5887echo "Trace output file $trace_file-<pid>"
e00e36fb 5888fi
89138857 5889echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
f27aaf4b 5890echo "rbd support $rbd"
dce512de 5891echo "xfsctl support $xfs"
7b02f544 5892echo "smartcard support $smartcard"
2b2325ff 5893echo "libusb $libusb"
69354a83 5894echo "usb net redir $usb_redir"
da076ffe 5895echo "OpenGL support $opengl"
014cb152 5896echo "OpenGL dmabufs $opengl_dmabuf"
c589b249 5897echo "libiscsi support $libiscsi"
6542aa9c 5898echo "libnfs support $libnfs"
d138cee9 5899echo "build guest agent $guest_agent"
d9840e25 5900echo "QGA VSS support $guest_agent_with_vss"
50cbebb9 5901echo "QGA w32 disk info $guest_agent_ntddscsi"
4c875d89 5902echo "QGA MSI support $guest_agent_msi"
f794573e 5903echo "seccomp support $seccomp"
7c2acc70 5904echo "coroutine backend $coroutine"
70c60c08 5905echo "coroutine pool $coroutine_pool"
7d992e4d 5906echo "debug stack usage $debug_stack_usage"
f0d92b56 5907echo "crypto afalg $crypto_afalg"
eb100396 5908echo "GlusterFS support $glusterfs"
1d728c39
BS
5909echo "gcov $gcov_tool"
5910echo "gcov enabled $gcov"
ab214c29 5911echo "TPM support $tpm"
0a12ec87 5912echo "libssh2 support $libssh2"
3b8acc11 5913echo "TPM passthrough $tpm_passthrough"
f4ede81e 5914echo "TPM emulator $tpm_emulator"
3556c233 5915echo "QOM debugging $qom_cast_debug"
ed1701c6 5916echo "Live block migration $live_block_migration"
607dacd0
QN
5917echo "lzo support $lzo"
5918echo "snappy support $snappy"
6b383c08 5919echo "bzip2 support $bzip2"
a99d57bb 5920echo "NUMA host support $numa"
ed279a06 5921echo "libxml2 $libxml2"
2847b469 5922echo "tcmalloc support $tcmalloc"
7b01cb97 5923echo "jemalloc support $jemalloc"
99f2dbd3 5924echo "avx2 optimization $avx2_opt"
a6b1d4c0 5925echo "replication support $replication"
da92c3ff 5926echo "VxHS block device $vxhs"
8ca80760 5927echo "capstone $capstone"
51a12b51 5928echo "docker $docker"
67b915a5 5929
1ba16968 5930if test "$sdl_too_old" = "yes"; then
24b55b96 5931echo "-> Your SDL version is too old - please upgrade to have SDL support"
7c1f25b4 5932fi
7d13299d 5933
b7715af2
DB
5934if test "$gtkabi" = "2.0"; then
5935 echo
5936 echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
5937 echo "WARNING: future releases. Please switch to using GTK 3.0"
5938fi
5939
e52c6ba3
DB
5940if test "$sdlabi" = "1.2"; then
5941 echo
5942 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
5943 echo "WARNING: future releases. Please switch to using SDL 2.0"
5944fi
5945
898be3e0
PM
5946if test "$supported_cpu" = "no"; then
5947 echo
5948 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5949 echo
5950 echo "CPU host architecture $cpu support is not currently maintained."
5951 echo "The QEMU project intends to remove support for this host CPU in"
5952 echo "a future release if nobody volunteers to maintain it and to"
5953 echo "provide a build host for our continuous integration setup."
5954 echo "configure has succeeded and you can continue to build, but"
5955 echo "if you care about QEMU on this platform you should contact"
5956 echo "us upstream at qemu-devel@nongnu.org."
5957fi
5958
5959if test "$supported_os" = "no"; then
5960 echo
5961 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5962 echo
c50126aa
PM
5963 echo "Host OS $targetos support is not currently maintained."
5964 echo "The QEMU project intends to remove support for this host OS in"
898be3e0
PM
5965 echo "a future release if nobody volunteers to maintain it and to"
5966 echo "provide a build host for our continuous integration setup."
5967 echo "configure has succeeded and you can continue to build, but"
5968 echo "if you care about QEMU on this platform you should contact"
5969 echo "us upstream at qemu-devel@nongnu.org."
5970fi
5971
98ec69ac 5972config_host_mak="config-host.mak"
98ec69ac 5973
dbd99ae3
SW
5974echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5975
98ec69ac 5976echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 5977echo >> $config_host_mak
98ec69ac 5978
e6c3b0f7 5979echo all: >> $config_host_mak
99d7cc75
PB
5980echo "prefix=$prefix" >> $config_host_mak
5981echo "bindir=$bindir" >> $config_host_mak
3aa5d2be 5982echo "libdir=$libdir" >> $config_host_mak
8bf188aa 5983echo "libexecdir=$libexecdir" >> $config_host_mak
0f94d6da 5984echo "includedir=$includedir" >> $config_host_mak
99d7cc75 5985echo "mandir=$mandir" >> $config_host_mak
99d7cc75 5986echo "sysconfdir=$sysconfdir" >> $config_host_mak
22d07038 5987echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
9afa52ce 5988echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
3d5eecab 5989echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
9afa52ce 5990echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
e26110cf 5991echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5a699bbb
LE
5992if test "$mingw32" = "no" ; then
5993 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5994fi
f354b1a1 5995echo "qemu_helperdir=$libexecdir" >> $config_host_mak
834574ea 5996echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
f544a488 5997echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
cc84d63a 5998echo "GIT=$git" >> $config_host_mak
aef45d51 5999echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
f62bbee5 6000echo "GIT_UPDATE=$git_update" >> $config_host_mak
804edf29 6001
98ec69ac 6002echo "ARCH=$ARCH" >> $config_host_mak
727e5283 6003
f8393946 6004if test "$debug_tcg" = "yes" ; then
2358a494 6005 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 6006fi
1625af87 6007if test "$strip_opt" = "yes" ; then
52ba784d 6008 echo "STRIP=${strip}" >> $config_host_mak
1625af87 6009fi
7d13299d 6010if test "$bigendian" = "yes" ; then
e2542fe2 6011 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 6012fi
67b915a5 6013if test "$mingw32" = "yes" ; then
98ec69ac 6014 echo "CONFIG_WIN32=y" >> $config_host_mak
89138857 6015 rc_version=$(cat $source_path/VERSION)
9fe6de94
BS
6016 version_major=${rc_version%%.*}
6017 rc_version=${rc_version#*.}
6018 version_minor=${rc_version%%.*}
6019 rc_version=${rc_version#*.}
6020 version_subminor=${rc_version%%.*}
6021 version_micro=0
6022 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6023 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
d9840e25
TS
6024 if test "$guest_agent_with_vss" = "yes" ; then
6025 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 6026 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
6027 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6028 fi
50cbebb9
MR
6029 if test "$guest_agent_ntddscsi" = "yes" ; then
6030 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6031 fi
1a34904e 6032 if test "$guest_agent_msi" = "yes"; then
d661d9a4 6033 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
9dacf32d
YH
6034 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6035 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6036 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6037 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6038 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6039 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6040 fi
210fa556 6041else
35f4df27 6042 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
6043fi
6044
6045if test "$linux" = "yes" ; then
6046 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 6047fi
128ab2ff 6048
83fb7adf 6049if test "$darwin" = "yes" ; then
98ec69ac 6050 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 6051fi
b29fe3ed 6052
ec530c81 6053if test "$solaris" = "yes" ; then
98ec69ac 6054 echo "CONFIG_SOLARIS=y" >> $config_host_mak
ec530c81 6055fi
179cf400
AF
6056if test "$haiku" = "yes" ; then
6057 echo "CONFIG_HAIKU=y" >> $config_host_mak
6058fi
97a847bc 6059if test "$static" = "yes" ; then
98ec69ac 6060 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 6061fi
1ba16968 6062if test "$profiler" = "yes" ; then
2358a494 6063 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 6064fi
c20709aa 6065if test "$slirp" = "yes" ; then
98ec69ac 6066 echo "CONFIG_SLIRP=y" >> $config_host_mak
e2d8830e 6067 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
c20709aa 6068fi
8a16d273 6069if test "$vde" = "yes" ; then
98ec69ac 6070 echo "CONFIG_VDE=y" >> $config_host_mak
e2ad6f16 6071 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
8a16d273 6072fi
58952137
VM
6073if test "$netmap" = "yes" ; then
6074 echo "CONFIG_NETMAP=y" >> $config_host_mak
6075fi
015a33bd
GA
6076if test "$l2tpv3" = "yes" ; then
6077 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6078fi
47e98658
CB
6079if test "$cap_ng" = "yes" ; then
6080 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6081fi
2358a494 6082echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 6083for drv in $audio_drv_list; do
1ef1ec2a 6084 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
ce3dc033 6085 case "$drv" in
051c7d5c 6086 alsa | oss | pa | sdl)
ce3dc033
GH
6087 echo "$def=m" >> $config_host_mak ;;
6088 *)
6089 echo "$def=y" >> $config_host_mak ;;
6090 esac
0c58ac1c 6091done
b1149911
FZ
6092echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6093echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6094echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6095echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6096echo "OSS_LIBS=$oss_libs" >> $config_host_mak
67f86e8e
JQ
6097if test "$audio_pt_int" = "yes" ; then
6098 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6099fi
d5631638 6100if test "$audio_win_int" = "yes" ; then
6101 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6102fi
b64ec4e4
FZ
6103echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6104echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
821601ea
JS
6105if test "$vnc" = "yes" ; then
6106 echo "CONFIG_VNC=y" >> $config_host_mak
6107fi
2f9606b3 6108if test "$vnc_sasl" = "yes" ; then
98ec69ac 6109 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
2f9606b3 6110fi
821601ea 6111if test "$vnc_jpeg" = "yes" ; then
2f6f5c7a 6112 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
2f6f5c7a 6113fi
821601ea 6114if test "$vnc_png" = "yes" ; then
efe556ad 6115 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
efe556ad 6116fi
6a021536
GH
6117if test "$xkbcommon" = "yes" ; then
6118 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6119 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6120fi
76655d6d 6121if test "$fnmatch" = "yes" ; then
2358a494 6122 echo "CONFIG_FNMATCH=y" >> $config_host_mak
76655d6d 6123fi
dce512de
CH
6124if test "$xfs" = "yes" ; then
6125 echo "CONFIG_XFS=y" >> $config_host_mak
6126fi
89138857 6127qemu_version=$(head $source_path/VERSION)
98ec69ac 6128echo "VERSION=$qemu_version" >>$config_host_mak
2358a494 6129echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 6130echo "SRC_PATH=$source_path" >> $config_host_mak
208ecb3e 6131echo "TARGET_LIST=$target_list" >> $config_host_mak
a25dba17 6132if [ "$docs" = "yes" ] ; then
98ec69ac 6133 echo "BUILD_DOCS=yes" >> $config_host_mak
cc8ae6de 6134fi
17969268 6135if test "$modules" = "yes"; then
e26110cf
FZ
6136 # $shacmd can generate a hash started with digit, which the compiler doesn't
6137 # like as an symbol. So prefix it with an underscore
89138857 6138 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
17969268
FZ
6139 echo "CONFIG_MODULES=y" >> $config_host_mak
6140fi
8781595b
GH
6141if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6142 echo "CONFIG_X11=y" >> $config_host_mak
6143 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6144 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6145fi
1ac88f28 6146if test "$sdl" = "yes" ; then
96400a14 6147 echo "CONFIG_SDL=m" >> $config_host_mak
a3f4d63d 6148 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
1ac88f28 6149 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
8ecc89f6 6150 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
49ecc3fa
FB
6151fi
6152if test "$cocoa" = "yes" ; then
98ec69ac 6153 echo "CONFIG_COCOA=y" >> $config_host_mak
4d3b6f6e
AZ
6154fi
6155if test "$curses" = "yes" ; then
2373f7d5
GH
6156 echo "CONFIG_CURSES=m" >> $config_host_mak
6157 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6158 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
49ecc3fa 6159fi
099d6b0f 6160if test "$pipe2" = "yes" ; then
2358a494 6161 echo "CONFIG_PIPE2=y" >> $config_host_mak
099d6b0f 6162fi
40ff6d7e
KW
6163if test "$accept4" = "yes" ; then
6164 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6165fi
3ce34dfb 6166if test "$splice" = "yes" ; then
2358a494 6167 echo "CONFIG_SPLICE=y" >> $config_host_mak
3ce34dfb 6168fi
c2882b96
RV
6169if test "$eventfd" = "yes" ; then
6170 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6171fi
751bcc39
MAL
6172if test "$memfd" = "yes" ; then
6173 echo "CONFIG_MEMFD=y" >> $config_host_mak
6174fi
d0927938
UH
6175if test "$fallocate" = "yes" ; then
6176 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6177fi
3d4fa43e
KK
6178if test "$fallocate_punch_hole" = "yes" ; then
6179 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6180fi
b953f075
DL
6181if test "$fallocate_zero_range" = "yes" ; then
6182 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6183fi
ed911435
KW
6184if test "$posix_fallocate" = "yes" ; then
6185 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6186fi
c727f47d
PM
6187if test "$sync_file_range" = "yes" ; then
6188 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6189fi
dace20dc
PM
6190if test "$fiemap" = "yes" ; then
6191 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6192fi
d0927938
UH
6193if test "$dup3" = "yes" ; then
6194 echo "CONFIG_DUP3=y" >> $config_host_mak
6195fi
4e0c6529
AB
6196if test "$ppoll" = "yes" ; then
6197 echo "CONFIG_PPOLL=y" >> $config_host_mak
6198fi
cd758dd0
AB
6199if test "$prctl_pr_set_timerslack" = "yes" ; then
6200 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6201fi
3b6edd16
PM
6202if test "$epoll" = "yes" ; then
6203 echo "CONFIG_EPOLL=y" >> $config_host_mak
6204fi
6205if test "$epoll_create1" = "yes" ; then
6206 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6207fi
a8fd1aba
PM
6208if test "$sendfile" = "yes" ; then
6209 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6210fi
51834341
RV
6211if test "$timerfd" = "yes" ; then
6212 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6213fi
9af5c906
RV
6214if test "$setns" = "yes" ; then
6215 echo "CONFIG_SETNS=y" >> $config_host_mak
6216fi
38860a03
AM
6217if test "$clock_adjtime" = "yes" ; then
6218 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6219fi
5a03cd00
AM
6220if test "$syncfs" = "yes" ; then
6221 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6222fi
3b3f24ad 6223if test "$inotify" = "yes" ; then
2358a494 6224 echo "CONFIG_INOTIFY=y" >> $config_host_mak
3b3f24ad 6225fi
c05c7a73
RV
6226if test "$inotify1" = "yes" ; then
6227 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6228fi
401bc051
PM
6229if test "$sem_timedwait" = "yes" ; then
6230 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6231fi
6ae9a1f4
JQ
6232if test "$byteswap_h" = "yes" ; then
6233 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6234fi
6235if test "$bswap_h" = "yes" ; then
6236 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6237fi
769ce76d 6238if test "$curl" = "yes" ; then
d3399d7c 6239 echo "CONFIG_CURL=m" >> $config_host_mak
b1d5a277 6240 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6ebc91e5 6241 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
769ce76d 6242fi
2e4d9fb1 6243if test "$brlapi" = "yes" ; then
98ec69ac 6244 echo "CONFIG_BRLAPI=y" >> $config_host_mak
8eca2889 6245 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
2e4d9fb1 6246fi
fb599c9a 6247if test "$bluez" = "yes" ; then
98ec69ac 6248 echo "CONFIG_BLUEZ=y" >> $config_host_mak
ef7635ec 6249 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
fb599c9a 6250fi
d46f7c9e 6251if test "$glib_subprocess" = "yes" ; then
9d41401b
MT
6252 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
6253fi
a4ccabcf 6254if test "$gtk" = "yes" ; then
e0fb129c 6255 echo "CONFIG_GTK=m" >> $config_host_mak
a3f4d63d 6256 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
a4ccabcf 6257 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
014cb152 6258 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
925a0400
GH
6259 if test "$gtk_gl" = "yes" ; then
6260 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6261 fi
bbbf9bfb 6262fi
a1c5e949 6263echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
ddbb0d09
DB
6264if test "$gnutls" = "yes" ; then
6265 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6266fi
b917da4c
DB
6267if test "$gnutls_rnd" = "yes" ; then
6268 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6269fi
91bfcdb0
DB
6270if test "$gcrypt" = "yes" ; then
6271 echo "CONFIG_GCRYPT=y" >> $config_host_mak
1f923c70
LM
6272 if test "$gcrypt_hmac" = "yes" ; then
6273 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6274 fi
37788f25
DB
6275 if test "$gcrypt_kdf" = "yes" ; then
6276 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6277 fi
62893b67 6278fi
91bfcdb0
DB
6279if test "$nettle" = "yes" ; then
6280 echo "CONFIG_NETTLE=y" >> $config_host_mak
becaeb72 6281 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
fff2f982
DB
6282 if test "$nettle_kdf" = "yes" ; then
6283 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6284 fi
ed754746 6285fi
9a2fd434
DB
6286if test "$tasn1" = "yes" ; then
6287 echo "CONFIG_TASN1=y" >> $config_host_mak
6288fi
559607ea
DB
6289if test "$have_ifaddrs_h" = "yes" ; then
6290 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6291fi
6b39b063
EB
6292if test "$have_broken_size_max" = "yes" ; then
6293 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6294fi
277abf15
JV
6295
6296# Work around a system header bug with some kernel/XFS header
6297# versions where they both try to define 'struct fsxattr':
6298# xfs headers will not try to redefine structs from linux headers
6299# if this macro is set.
6300if test "$have_fsxattr" = "yes" ; then
6301 echo "HAVE_FSXATTR=y" >> $config_host_mak
6302fi
1efad060
FZ
6303if test "$have_copy_file_range" = "yes" ; then
6304 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6305fi
bbbf9bfb
SW
6306if test "$vte" = "yes" ; then
6307 echo "CONFIG_VTE=y" >> $config_host_mak
a4ccabcf 6308 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
e0fb129c 6309 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
a4ccabcf 6310fi
9d9e1521
GH
6311if test "$virglrenderer" = "yes" ; then
6312 echo "CONFIG_VIRGL=y" >> $config_host_mak
6313 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6314 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6315fi
e37630ca 6316if test "$xen" = "yes" ; then
6dbd588a 6317 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 6318 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
64a7ad6f
IC
6319 if test "$xen_pv_domain_build" = "yes" ; then
6320 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6321 fi
e37630ca 6322fi
5c6c3a6c
CH
6323if test "$linux_aio" = "yes" ; then
6324 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6325fi
758e8e38
VJ
6326if test "$attr" = "yes" ; then
6327 echo "CONFIG_ATTR=y" >> $config_host_mak
6328fi
4f26f2b6
AK
6329if test "$libattr" = "yes" ; then
6330 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6331fi
983eef5a
MI
6332if test "$virtfs" = "yes" ; then
6333 echo "CONFIG_VIRTFS=y" >> $config_host_mak
758e8e38 6334fi
fe8fc5ae
PB
6335if test "$mpath" = "yes" ; then
6336 echo "CONFIG_MPATH=y" >> $config_host_mak
6337fi
5e9be92d
NB
6338if test "$vhost_scsi" = "yes" ; then
6339 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6340fi
e6a74868 6341if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
03ce5744
NN
6342 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6343fi
042cea27
GA
6344if test "$vhost_crypto" = "yes" ; then
6345 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6346fi
fc0b9b0e
SH
6347if test "$vhost_vsock" = "yes" ; then
6348 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6349fi
e6a74868
MAL
6350if test "$vhost_user" = "yes" ; then
6351 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6352fi
77755340 6353if test "$blobs" = "yes" ; then
98ec69ac 6354 echo "INSTALL_BLOBS=yes" >> $config_host_mak
77755340 6355fi
bf9298b9 6356if test "$iovec" = "yes" ; then
2358a494 6357 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 6358fi
ceb42de8 6359if test "$preadv" = "yes" ; then
2358a494 6360 echo "CONFIG_PREADV=y" >> $config_host_mak
ceb42de8 6361fi
e3971d61 6362if test "$fdt" != "no" ; then
3f0855b1 6363 echo "CONFIG_FDT=y" >> $config_host_mak
f652e6af 6364fi
a40161cb
PB
6365if test "$membarrier" = "yes" ; then
6366 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6367fi
dcc38d1c
MT
6368if test "$signalfd" = "yes" ; then
6369 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6370fi
b3f6ea7e
PB
6371if test "$tcg" = "yes"; then
6372 echo "CONFIG_TCG=y" >> $config_host_mak
6373 if test "$tcg_interpreter" = "yes" ; then
6374 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6375 fi
9195b2c2 6376fi
5f6b9e8f
BS
6377if test "$fdatasync" = "yes" ; then
6378 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6379fi
e78815a5
AF
6380if test "$madvise" = "yes" ; then
6381 echo "CONFIG_MADVISE=y" >> $config_host_mak
6382fi
6383if test "$posix_madvise" = "yes" ; then
6384 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6385fi
9bc5a719
AG
6386if test "$posix_memalign" = "yes" ; then
6387 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6388fi
97a847bc 6389
cd4ec0b4
GH
6390if test "$spice" = "yes" ; then
6391 echo "CONFIG_SPICE=y" >> $config_host_mak
6392fi
36707144 6393
7b02f544
MAL
6394if test "$smartcard" = "yes" ; then
6395 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7b62bf5a
FZ
6396 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6397 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
111a38b0
RR
6398fi
6399
2b2325ff
GH
6400if test "$libusb" = "yes" ; then
6401 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
b878b652
FZ
6402 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6403 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
2b2325ff
GH
6404fi
6405
69354a83
HG
6406if test "$usb_redir" = "yes" ; then
6407 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
cc7923fc
FZ
6408 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6409 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
69354a83
HG
6410fi
6411
da076ffe
GH
6412if test "$opengl" = "yes" ; then
6413 echo "CONFIG_OPENGL=y" >> $config_host_mak
6414 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
014cb152
GH
6415 if test "$opengl_dmabuf" = "yes" ; then
6416 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6417 fi
20ff075b
MW
6418fi
6419
5a22ab71
YZ
6420if test "$malloc_trim" = "yes" ; then
6421 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6422fi
6423
99f2dbd3
LL
6424if test "$avx2_opt" = "yes" ; then
6425 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6426fi
6427
607dacd0
QN
6428if test "$lzo" = "yes" ; then
6429 echo "CONFIG_LZO=y" >> $config_host_mak
6430fi
6431
6432if test "$snappy" = "yes" ; then
6433 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6434fi
6435
6b383c08
PW
6436if test "$bzip2" = "yes" ; then
6437 echo "CONFIG_BZIP2=y" >> $config_host_mak
6438 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6439fi
6440
c589b249 6441if test "$libiscsi" = "yes" ; then
d3399d7c 6442 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6ebc91e5
FZ
6443 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6444 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
c589b249
RS
6445fi
6446
6542aa9c 6447if test "$libnfs" = "yes" ; then
4be4879f
CL
6448 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6449 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6542aa9c
PL
6450fi
6451
f794573e
EO
6452if test "$seccomp" = "yes"; then
6453 echo "CONFIG_SECCOMP=y" >> $config_host_mak
c3883e1f
FZ
6454 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6455 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
f794573e
EO
6456fi
6457
83fb7adf 6458# XXX: suppress that
7d3505c5 6459if [ "$bsd" = "yes" ] ; then
2358a494 6460 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
6461fi
6462
4d9310f4
DB
6463if test "$localtime_r" = "yes" ; then
6464 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6465fi
3556c233
PB
6466if test "$qom_cast_debug" = "yes" ; then
6467 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6468fi
f27aaf4b 6469if test "$rbd" = "yes" ; then
d3399d7c 6470 echo "CONFIG_RBD=m" >> $config_host_mak
6ebc91e5
FZ
6471 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6472 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
d0e2fce5
AK
6473fi
6474
7c2acc70 6475echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
6476if test "$coroutine_pool" = "yes" ; then
6477 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6478else
6479 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6480fi
20ff6c80 6481
7d992e4d
PL
6482if test "$debug_stack_usage" = "yes" ; then
6483 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6484fi
6485
f0d92b56
LM
6486if test "$crypto_afalg" = "yes" ; then
6487 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6488fi
6489
d2042378
AK
6490if test "$open_by_handle_at" = "yes" ; then
6491 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6492fi
6493
e06a765e
HPB
6494if test "$linux_magic_h" = "yes" ; then
6495 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
8ab1bf12
LC
6496fi
6497
cc6e3ca9
GH
6498if test "$pragma_diagnostic_available" = "yes" ; then
6499 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
06d71fa1
PM
6500fi
6501
3f4349dc
KW
6502if test "$valgrind_h" = "yes" ; then
6503 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6504fi
6505
d83414e1
MAL
6506if test "$have_asan_iface_fiber" = "yes" ; then
6507 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6508fi
6509
8ab1bf12
LC
6510if test "$has_environ" = "yes" ; then
6511 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
e06a765e
HPB
6512fi
6513
76a347e1
RH
6514if test "$cpuid_h" = "yes" ; then
6515 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6516fi
6517
f540166b
RH
6518if test "$int128" = "yes" ; then
6519 echo "CONFIG_INT128=y" >> $config_host_mak
6520fi
6521
7ebee43e
RH
6522if test "$atomic128" = "yes" ; then
6523 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6524fi
6525
df79b996
RH
6526if test "$atomic64" = "yes" ; then
6527 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6528fi
6529
db432672
RH
6530if test "$vector16" = "yes" ; then
6531 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6532fi
6533
1e6e9aca
RH
6534if test "$getauxval" = "yes" ; then
6535 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6536fi
6537
eb100396 6538if test "$glusterfs" = "yes" ; then
d3399d7c 6539 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6ebc91e5
FZ
6540 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6541 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
0c14fb47
BR
6542fi
6543
d85fa9eb
JC
6544if test "$glusterfs_xlator_opt" = "yes" ; then
6545 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6546fi
6547
0c14fb47
BR
6548if test "$glusterfs_discard" = "yes" ; then
6549 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
eb100396 6550fi
e06a765e 6551
df3a429a
NV
6552if test "$glusterfs_fallocate" = "yes" ; then
6553 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6554fi
6555
7c815372
BR
6556if test "$glusterfs_zerofill" = "yes" ; then
6557 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6558fi
6559
0a12ec87 6560if test "$libssh2" = "yes" ; then
d3399d7c 6561 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6ebc91e5
FZ
6562 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6563 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
0a12ec87
RJ
6564fi
6565
ed1701c6
DDAG
6566if test "$live_block_migration" = "yes" ; then
6567 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6568fi
6569
3b8acc11
PB
6570if test "$tpm" = "yes"; then
6571 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
f4ede81e 6572 # TPM passthrough support?
3b8acc11
PB
6573 if test "$tpm_passthrough" = "yes"; then
6574 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6575 fi
f4ede81e
AV
6576 # TPM emulator support?
6577 if test "$tpm_emulator" = "yes"; then
6578 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6579 fi
3b8acc11
PB
6580fi
6581
5b808275
LV
6582echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6583if have_backend "nop"; then
6d8a764e 6584 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 6585fi
5b808275 6586if have_backend "simple"; then
6d8a764e
LV
6587 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6588 # Set the appropriate trace file.
953ffe0f 6589 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 6590fi
ed7f5f1d
PB
6591if have_backend "log"; then
6592 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6d8a764e 6593fi
5b808275 6594if have_backend "ust"; then
6d8a764e
LV
6595 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6596fi
5b808275 6597if have_backend "dtrace"; then
6d8a764e
LV
6598 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6599 if test "$trace_backend_stap" = "yes" ; then
6600 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6601 fi
c276b17d 6602fi
5b808275 6603if have_backend "ftrace"; then
781e9545
ET
6604 if test "$linux" = "yes" ; then
6605 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 6606 else
21684af0 6607 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
6608 fi
6609fi
0a852417
PD
6610if have_backend "syslog"; then
6611 if test "$posix_syslog" = "yes" ; then
6612 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6613 else
6614 feature_not_found "syslog(trace backend)" "syslog not available"
6615 fi
6616fi
9410b56c
PS
6617echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6618
2da776db
MH
6619if test "$rdma" = "yes" ; then
6620 echo "CONFIG_RDMA=y" >> $config_host_mak
392fb643 6621 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
2da776db
MH
6622fi
6623
575b22b1
LV
6624if test "$have_rtnetlink" = "yes" ; then
6625 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6626fi
6627
ed279a06
KK
6628if test "$libxml2" = "yes" ; then
6629 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6630 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6631 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6632fi
6633
a6b1d4c0
CX
6634if test "$replication" = "yes" ; then
6635 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6636fi
6637
6a02c806
SH
6638if test "$have_af_vsock" = "yes" ; then
6639 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6640fi
6641
4d04351f
CC
6642if test "$have_sysmacros" = "yes" ; then
6643 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6644fi
6645
49e00a18
AG
6646if test "$have_static_assert" = "yes" ; then
6647 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6648fi
6649
e674605f
TG
6650if test "$have_utmpx" = "yes" ; then
6651 echo "HAVE_UTMPX=y" >> $config_host_mak
6652fi
6653
e0580342
KR
6654if test "$ivshmem" = "yes" ; then
6655 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
8ca80760 6656fi
e219c499 6657if test "$capstone" != "no" ; then
8ca80760 6658 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
e0580342
KR
6659fi
6660
5c312079
DDAG
6661# Hold two types of flag:
6662# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6663# a thread we have a handle to
6664# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6665# platform
6666if test "$pthread_setname_np" = "yes" ; then
6667 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6668 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6669fi
6670
da92c3ff
AM
6671if test "$vxhs" = "yes" ; then
6672 echo "CONFIG_VXHS=y" >> $config_host_mak
6673 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6674fi
6675
5b5e3037 6676if test "$tcg_interpreter" = "yes"; then
9edc19c9 6677 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5b5e3037 6678elif test "$ARCH" = "sparc64" ; then
9edc19c9 6679 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5b5e3037 6680elif test "$ARCH" = "s390x" ; then
9edc19c9 6681 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
c72b26ec 6682elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
9edc19c9 6683 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
40d964b5 6684elif test "$ARCH" = "ppc64" ; then
9edc19c9 6685 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5b5e3037 6686else
9edc19c9 6687 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5b5e3037 6688fi
9edc19c9 6689QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
5b5e3037 6690
98ec69ac 6691echo "TOOLS=$tools" >> $config_host_mak
98ec69ac 6692echo "ROMS=$roms" >> $config_host_mak
804edf29
JQ
6693echo "MAKE=$make" >> $config_host_mak
6694echo "INSTALL=$install" >> $config_host_mak
1901cb14
BS
6695echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6696echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
e999ee44
MT
6697echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6698echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
c886edfb 6699echo "PYTHON=$python" >> $config_host_mak
804edf29 6700echo "CC=$cc" >> $config_host_mak
a31a8642
MT
6701if $iasl -h > /dev/null 2>&1; then
6702 echo "IASL=$iasl" >> $config_host_mak
6703fi
2b2e59e6 6704echo "CC_I386=$cc_i386" >> $config_host_mak
804edf29 6705echo "HOST_CC=$host_cc" >> $config_host_mak
83f73fce 6706echo "CXX=$cxx" >> $config_host_mak
3c4a4d0d 6707echo "OBJCC=$objcc" >> $config_host_mak
804edf29 6708echo "AR=$ar" >> $config_host_mak
45d285ab 6709echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
cdbd727c 6710echo "AS=$as" >> $config_host_mak
5f6f0e27 6711echo "CCAS=$ccas" >> $config_host_mak
3dd46c78 6712echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
6713echo "OBJCOPY=$objcopy" >> $config_host_mak
6714echo "LD=$ld" >> $config_host_mak
9f81aeb5 6715echo "RANLIB=$ranlib" >> $config_host_mak
4852ee95 6716echo "NM=$nm" >> $config_host_mak
9fe6de94 6717echo "WINDRES=$windres" >> $config_host_mak
e2a2ed06 6718echo "CFLAGS=$CFLAGS" >> $config_host_mak
46eef33b 6719echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 6720echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
11cde1c8 6721echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
f9728943 6722echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
e39f0062
PB
6723if test "$sparse" = "yes" ; then
6724 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
80fd48df 6725 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
2944d742 6726 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
e39f0062
PB
6727 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6728 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6729fi
42da6041
GH
6730if test "$cross_prefix" != ""; then
6731 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6732else
6733 echo "AUTOCONF_HOST := " >> $config_host_mak
6734fi
e2a2ed06 6735echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
46eef33b 6736echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
8a99e9a3 6737echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6969ec6c 6738echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
e57218b6 6739echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
73da375e 6740echo "LIBS+=$LIBS" >> $config_host_mak
3e2e0e6b 6741echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
409437e1 6742echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
804edf29 6743echo "EXESUF=$EXESUF" >> $config_host_mak
17969268
FZ
6744echo "DSOSUF=$DSOSUF" >> $config_host_mak
6745echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
957f1f99 6746echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
90246037
DB
6747echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6748echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
94dd53c5 6749echo "POD2MAN=$POD2MAN" >> $config_host_mak
cbdd1999 6750echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
1d728c39
BS
6751if test "$gcov" = "yes" ; then
6752 echo "CONFIG_GCOV=y" >> $config_host_mak
6753 echo "GCOV=$gcov_tool" >> $config_host_mak
6754fi
804edf29 6755
51a12b51
AB
6756if test "$docker" != "no"; then
6757 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6758fi
6759
6efd7517
PM
6760# use included Linux headers
6761if test "$linux" = "yes" ; then
a307beb6 6762 mkdir -p linux-headers
6efd7517 6763 case "$cpu" in
c72b26ec 6764 i386|x86_64|x32)
08312a63 6765 linux_arch=x86
6efd7517
PM
6766 ;;
6767 ppcemb|ppc|ppc64)
08312a63 6768 linux_arch=powerpc
6efd7517
PM
6769 ;;
6770 s390x)
08312a63
PM
6771 linux_arch=s390
6772 ;;
1f080313
CF
6773 aarch64)
6774 linux_arch=arm64
6775 ;;
222e7d11
SL
6776 mips64)
6777 linux_arch=mips
6778 ;;
08312a63
PM
6779 *)
6780 # For most CPUs the kernel architecture name and QEMU CPU name match.
6781 linux_arch="$cpu"
6efd7517
PM
6782 ;;
6783 esac
08312a63
PM
6784 # For non-KVM architectures we will not have asm headers
6785 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6786 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6787 fi
6efd7517
PM
6788fi
6789
1d14ffa9 6790for target in $target_list; do
97a847bc 6791target_dir="$target"
25be210f 6792config_target_mak=$target_dir/config-target.mak
89138857 6793target_name=$(echo $target | cut -d '-' -f 1)
97a847bc 6794target_bigendian="no"
1f3d3c8f 6795
c1799a84 6796case "$target_name" in
722dd7be 6797 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
ea2d6a39
JQ
6798 target_bigendian=yes
6799 ;;
6800esac
97a847bc 6801target_softmmu="no"
997344f3 6802target_user_only="no"
831b7825 6803target_linux_user="no"
84778508 6804target_bsd_user="no"
9e407a85 6805case "$target" in
c1799a84 6806 ${target_name}-softmmu)
9e407a85
PB
6807 target_softmmu="yes"
6808 ;;
c1799a84 6809 ${target_name}-linux-user)
9e407a85
PB
6810 target_user_only="yes"
6811 target_linux_user="yes"
6812 ;;
c1799a84 6813 ${target_name}-bsd-user)
84778508
BS
6814 target_user_only="yes"
6815 target_bsd_user="yes"
6816 ;;
9e407a85 6817 *)
76ad07a4 6818 error_exit "Target '$target' not recognised"
9e407a85
PB
6819 exit 1
6820 ;;
6821esac
831b7825 6822
97a847bc 6823mkdir -p $target_dir
25be210f 6824echo "# Automatically generated by configure - do not modify" > $config_target_mak
de83cd02 6825
e5fe0c52 6826bflt="no"
ca759f9e 6827mttcg="no"
89138857 6828interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
56aebc89 6829gdb_xml_files=""
7ba1e619 6830
c1799a84 6831TARGET_ARCH="$target_name"
6acff7da 6832TARGET_BASE_ARCH=""
e6e91b9c 6833TARGET_ABI_DIR=""
e73aae67 6834
c1799a84 6835case "$target_name" in
2408a527 6836 i386)
b8158192 6837 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
2408a527
AJ
6838 ;;
6839 x86_64)
6acff7da 6840 TARGET_BASE_ARCH=i386
b8158192 6841 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
2408a527
AJ
6842 ;;
6843 alpha)
5ee4f3c2 6844 mttcg="yes"
2408a527
AJ
6845 ;;
6846 arm|armeb)
b498c8a0 6847 TARGET_ARCH=arm
2408a527 6848 bflt="yes"
ca759f9e 6849 mttcg="yes"
56aebc89 6850 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
2408a527 6851 ;;
722dd7be
MW
6852 aarch64|aarch64_be)
6853 TARGET_ARCH=aarch64
6a49fa95
AG
6854 TARGET_BASE_ARCH=arm
6855 bflt="yes"
ca759f9e 6856 mttcg="yes"
8f95ce2e 6857 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6a49fa95 6858 ;;
2408a527 6859 cris)
2408a527 6860 ;;
61766fe9 6861 hppa)
7b93dab5 6862 mttcg="yes"
61766fe9 6863 ;;
613a22c9 6864 lm32)
613a22c9 6865 ;;
2408a527 6866 m68k)
2408a527 6867 bflt="yes"
5a4526b2 6868 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
2408a527 6869 ;;
877fdc12
EI
6870 microblaze|microblazeel)
6871 TARGET_ARCH=microblaze
72b675ca 6872 bflt="yes"
be73ef64 6873 echo "TARGET_ABI32=y" >> $config_target_mak
72b675ca 6874 ;;
0adcffb1 6875 mips|mipsel)
b498c8a0 6876 TARGET_ARCH=mips
25be210f 6877 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
2408a527
AJ
6878 ;;
6879 mipsn32|mipsn32el)
597e2cec 6880 TARGET_ARCH=mips64
6acff7da 6881 TARGET_BASE_ARCH=mips
25be210f 6882 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
597e2cec 6883 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527
AJ
6884 ;;
6885 mips64|mips64el)
b498c8a0 6886 TARGET_ARCH=mips64
6acff7da 6887 TARGET_BASE_ARCH=mips
25be210f 6888 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
2408a527 6889 ;;
d15a9c23
AG
6890 moxie)
6891 ;;
e671711c
MV
6892 nios2)
6893 ;;
4a09d0bb 6894 or1k)
e67db06e
JL
6895 TARGET_ARCH=openrisc
6896 TARGET_BASE_ARCH=openrisc
e67db06e 6897 ;;
2408a527 6898 ppc)
c8b3532d 6899 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
6900 ;;
6901 ppcemb)
6acff7da 6902 TARGET_BASE_ARCH=ppc
e6e91b9c 6903 TARGET_ABI_DIR=ppc
c8b3532d 6904 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
6905 ;;
6906 ppc64)
6acff7da 6907 TARGET_BASE_ARCH=ppc
e6e91b9c 6908 TARGET_ABI_DIR=ppc
f0b0685d 6909 mttcg=yes
1438eff3 6910 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
2408a527 6911 ;;
9c35126c
DK
6912 ppc64le)
6913 TARGET_ARCH=ppc64
6914 TARGET_BASE_ARCH=ppc
6915 TARGET_ABI_DIR=ppc
f0b0685d 6916 mttcg=yes
1438eff3 6917 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
9c35126c 6918 ;;
2408a527 6919 ppc64abi32)
b498c8a0 6920 TARGET_ARCH=ppc64
6acff7da 6921 TARGET_BASE_ARCH=ppc
e6e91b9c 6922 TARGET_ABI_DIR=ppc
25be210f 6923 echo "TARGET_ABI32=y" >> $config_target_mak
1438eff3 6924 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
2408a527 6925 ;;
25fa194b
MC
6926 riscv32)
6927 TARGET_BASE_ARCH=riscv
6928 TARGET_ABI_DIR=riscv
6929 mttcg=yes
6930 ;;
6931 riscv64)
6932 TARGET_BASE_ARCH=riscv
6933 TARGET_ABI_DIR=riscv
6934 mttcg=yes
6935 ;;
2408a527 6936 sh4|sh4eb)
b498c8a0 6937 TARGET_ARCH=sh4
2408a527
AJ
6938 bflt="yes"
6939 ;;
6940 sparc)
2408a527
AJ
6941 ;;
6942 sparc64)
6acff7da 6943 TARGET_BASE_ARCH=sparc
2408a527
AJ
6944 ;;
6945 sparc32plus)
b498c8a0 6946 TARGET_ARCH=sparc64
6acff7da 6947 TARGET_BASE_ARCH=sparc
e6e91b9c 6948 TARGET_ABI_DIR=sparc
25be210f 6949 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527 6950 ;;
24e804ec 6951 s390x)
63685bc4 6952 mttcg=yes
86158a2a 6953 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 6954 ;;
444e06b1
CG
6955 tilegx)
6956 ;;
5ecaa4ed
PC
6957 tricore)
6958 ;;
d2fbca94 6959 unicore32)
d2fbca94 6960 ;;
cfa550c6
MF
6961 xtensa|xtensaeb)
6962 TARGET_ARCH=xtensa
9fb40342 6963 mttcg="yes"
cfa550c6 6964 ;;
2408a527 6965 *)
76ad07a4 6966 error_exit "Unsupported target CPU"
2408a527
AJ
6967 ;;
6968esac
5e8861a0
PB
6969# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6970if [ "$TARGET_BASE_ARCH" = "" ]; then
6971 TARGET_BASE_ARCH=$TARGET_ARCH
6972fi
6973
5e8861a0
PB
6974symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6975
99afc91d
DB
6976upper() {
6977 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6978}
6979
89138857 6980target_arch_name="$(upper $TARGET_ARCH)"
25be210f 6981echo "TARGET_$target_arch_name=y" >> $config_target_mak
c1799a84 6982echo "TARGET_NAME=$target_name" >> $config_target_mak
25be210f 6983echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
e6e91b9c
JQ
6984if [ "$TARGET_ABI_DIR" = "" ]; then
6985 TARGET_ABI_DIR=$TARGET_ARCH
6986fi
25be210f 6987echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
adfc3e91
SS
6988if [ "$HOST_VARIANT_DIR" != "" ]; then
6989 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6990fi
3b6b7550
PB
6991
6992if supported_xen_target $target; then
6993 echo "CONFIG_XEN=y" >> $config_target_mak
6994 if test "$xen_pci_passthrough" = yes; then
eb6fda0f 6995 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
1b0c87fc 6996 fi
3b6b7550
PB
6997fi
6998if supported_kvm_target $target; then
6999 echo "CONFIG_KVM=y" >> $config_target_mak
7000 if test "$vhost_net" = "yes" ; then
d5970055 7001 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
e6a74868
MAL
7002 if test "$vhost_user" = "yes" ; then
7003 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7004 fi
c59249f9 7005 fi
3b6b7550
PB
7006fi
7007if supported_hax_target $target; then
7008 echo "CONFIG_HAX=y" >> $config_target_mak
b0cb0a66 7009fi
c97d6d2c
SAGDR
7010if supported_hvf_target $target; then
7011 echo "CONFIG_HVF=y" >> $config_target_mak
7012fi
d661d9a4
JTV
7013if supported_whpx_target $target; then
7014 echo "CONFIG_WHPX=y" >> $config_target_mak
7015fi
de83cd02 7016if test "$target_bigendian" = "yes" ; then
25be210f 7017 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
de83cd02 7018fi
97a847bc 7019if test "$target_softmmu" = "yes" ; then
25be210f 7020 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
ca759f9e
AB
7021 if test "$mttcg" = "yes" ; then
7022 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7023 fi
43ce4dfe 7024fi
997344f3 7025if test "$target_user_only" = "yes" ; then
25be210f 7026 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
a2c80be9 7027 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
997344f3 7028fi
831b7825 7029if test "$target_linux_user" = "yes" ; then
25be210f 7030 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
831b7825 7031fi
56aebc89
PB
7032list=""
7033if test ! -z "$gdb_xml_files" ; then
7034 for x in $gdb_xml_files; do
7035 list="$list $source_path/gdb-xml/$x"
7036 done
3d0f1517 7037 echo "TARGET_XML_FILES=$list" >> $config_target_mak
56aebc89 7038fi
97a847bc 7039
e5fe0c52 7040if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
25be210f 7041 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
e5fe0c52 7042fi
84778508 7043if test "$target_bsd_user" = "yes" ; then
25be210f 7044 echo "CONFIG_BSD_USER=y" >> $config_target_mak
84778508 7045fi
5b0753e0 7046
4afddb55 7047# generate QEMU_CFLAGS/LDFLAGS for targets
fa282484 7048
4afddb55 7049cflags=""
fa282484 7050ldflags=""
9b8e111f 7051
c765fcac
PC
7052disas_config() {
7053 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7054 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7055}
7056
64656024
JQ
7057for i in $ARCH $TARGET_BASE_ARCH ; do
7058 case "$i" in
7059 alpha)
c765fcac 7060 disas_config "ALPHA"
64656024 7061 ;;
82295d8a
RH
7062 aarch64)
7063 if test -n "${cxx}"; then
c765fcac 7064 disas_config "ARM_A64"
82295d8a
RH
7065 fi
7066 ;;
64656024 7067 arm)
c765fcac 7068 disas_config "ARM"
999b53ec 7069 if test -n "${cxx}"; then
c765fcac 7070 disas_config "ARM_A64"
999b53ec 7071 fi
64656024
JQ
7072 ;;
7073 cris)
c765fcac 7074 disas_config "CRIS"
64656024 7075 ;;
429b31a2
RH
7076 hppa)
7077 disas_config "HPPA"
7078 ;;
c72b26ec 7079 i386|x86_64|x32)
c765fcac 7080 disas_config "I386"
64656024 7081 ;;
79368f49 7082 lm32)
c765fcac 7083 disas_config "LM32"
79368f49 7084 ;;
64656024 7085 m68k)
c765fcac 7086 disas_config "M68K"
64656024 7087 ;;
877fdc12 7088 microblaze*)
c765fcac 7089 disas_config "MICROBLAZE"
64656024
JQ
7090 ;;
7091 mips*)
c765fcac 7092 disas_config "MIPS"
64656024 7093 ;;
d15a9c23 7094 moxie*)
c765fcac 7095 disas_config "MOXIE"
d15a9c23 7096 ;;
e671711c
MV
7097 nios2)
7098 disas_config "NIOS2"
7099 ;;
4a09d0bb 7100 or1k)
c765fcac 7101 disas_config "OPENRISC"
e67db06e 7102 ;;
64656024 7103 ppc*)
c765fcac 7104 disas_config "PPC"
64656024 7105 ;;
25fa194b
MC
7106 riscv)
7107 disas_config "RISCV"
7108 ;;
24e804ec 7109 s390*)
c765fcac 7110 disas_config "S390"
64656024
JQ
7111 ;;
7112 sh4)
c765fcac 7113 disas_config "SH4"
64656024
JQ
7114 ;;
7115 sparc*)
c765fcac 7116 disas_config "SPARC"
64656024 7117 ;;
cfa550c6 7118 xtensa*)
c765fcac 7119 disas_config "XTENSA"
cfa550c6 7120 ;;
64656024
JQ
7121 esac
7122done
9195b2c2 7123if test "$tcg_interpreter" = "yes" ; then
c765fcac 7124 disas_config "TCI"
9195b2c2 7125fi
64656024 7126
6ee7126f
JQ
7127case "$ARCH" in
7128alpha)
7129 # Ensure there's only a single GP
7130 cflags="-msmall-data $cflags"
7131;;
7132esac
7133
d02c1db3 7134if test "$gprof" = "yes" ; then
25be210f 7135 echo "TARGET_GPROF=yes" >> $config_target_mak
d02c1db3
JQ
7136 if test "$target_linux_user" = "yes" ; then
7137 cflags="-p $cflags"
7138 ldflags="-p $ldflags"
7139 fi
7140 if test "$target_softmmu" = "yes" ; then
7141 ldflags="-p $ldflags"
25be210f 7142 echo "GPROF_CFLAGS=-p" >> $config_target_mak
d02c1db3
JQ
7143 fi
7144fi
7145
9b8e111f 7146if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
964c6fa1 7147 ldflags="$ldflags $textseg_ldflags"
fa282484 7148fi
fa282484 7149
e9a3591f
CB
7150# Newer kernels on s390 check for an S390_PGSTE program header and
7151# enable the pgste page table extensions in that case. This makes
7152# the vm.allocate_pgste sysctl unnecessary. We enable this program
7153# header if
7154# - we build on s390x
7155# - we build the system emulation for s390x (qemu-system-s390x)
7156# - KVM is enabled
7157# - the linker supports --s390-pgste
7158if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7159 if ld_has --s390-pgste ; then
7160 ldflags="-Wl,--s390-pgste $ldflags"
7161 fi
7162fi
7163
25be210f
JQ
7164echo "LDFLAGS+=$ldflags" >> $config_target_mak
7165echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
fa282484 7166
97a847bc 7167done # for target in $targets
7d13299d 7168
e3971d61 7169if [ "$fdt" = "git" ]; then
a540f158
PC
7170 echo "config-host.h: subdir-dtc" >> $config_host_mak
7171fi
e219c499
RH
7172if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7173 echo "config-host.h: subdir-capstone" >> $config_host_mak
7174fi
7175if test -n "$LIBCAPSTONE"; then
7176 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7177fi
a540f158 7178
a99d57bb
WG
7179if test "$numa" = "yes"; then
7180 echo "CONFIG_NUMA=y" >> $config_host_mak
7181fi
7182
fd0e6053
JS
7183if test "$ccache_cpp2" = "yes"; then
7184 echo "export CCACHE_CPP2=y" >> $config_host_mak
7185fi
7186
d1807a4f 7187# build tree in object directory in case the source is not in the current directory
b1fb9a63 7188DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
b855f8d1 7189DIRS="$DIRS docs docs/interop fsdev scsi"
9933c305 7190DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
d1807a4f 7191DIRS="$DIRS roms/seabios roms/vgabios"
c09015dd
AL
7192FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7193FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
aaa2ebc5 7194FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
d1807a4f 7195FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
446b9165 7196FILES="$FILES pc-bios/spapr-rtas/Makefile"
9933c305 7197FILES="$FILES pc-bios/s390-ccw/Makefile"
d1807a4f 7198FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
4652b792 7199FILES="$FILES pc-bios/qemu-icon.bmp"
3a586d2f 7200FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
753d11f2
RH
7201for bios_file in \
7202 $source_path/pc-bios/*.bin \
225a9ab8 7203 $source_path/pc-bios/*.lid \
5acc2ec0 7204 $source_path/pc-bios/*.aml \
753d11f2
RH
7205 $source_path/pc-bios/*.rom \
7206 $source_path/pc-bios/*.dtb \
e89e33e1 7207 $source_path/pc-bios/*.img \
753d11f2 7208 $source_path/pc-bios/openbios-* \
4e73c781 7209 $source_path/pc-bios/u-boot.* \
753d11f2
RH
7210 $source_path/pc-bios/palcode-*
7211do
89138857 7212 FILES="$FILES pc-bios/$(basename $bios_file)"
d1807a4f 7213done
89138857 7214for test_file in $(find $source_path/tests/acpi-test-data -type f)
c2304b52 7215do
89138857 7216 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
c2304b52 7217done
d1807a4f
PB
7218mkdir -p $DIRS
7219for f in $FILES ; do
cab00a5a 7220 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
f9245e10
PM
7221 symlink "$source_path/$f" "$f"
7222 fi
d1807a4f 7223done
1ad2134f 7224
c34ebfdc 7225# temporary config to build submodules
2d9f27d2 7226for rom in seabios vgabios ; do
c34ebfdc 7227 config_mak=roms/$rom/config.mak
37116c89 7228 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 7229 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
cdbd727c 7230 echo "AS=$as" >> $config_mak
5f6f0e27 7231 echo "CCAS=$ccas" >> $config_mak
c34ebfdc
AL
7232 echo "CC=$cc" >> $config_mak
7233 echo "BCC=bcc" >> $config_mak
3dd46c78 7234 echo "CPP=$cpp" >> $config_mak
c34ebfdc 7235 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 7236 echo "IASL=$iasl" >> $config_mak
c34ebfdc 7237 echo "LD=$ld" >> $config_mak
9f81aeb5 7238 echo "RANLIB=$ranlib" >> $config_mak
c34ebfdc
AL
7239done
7240
fe31017f
MAL
7241# set up tests data directory
7242if [ ! -e tests/data ]; then
7243 symlink "$source_path/tests/data" tests/data
7244fi
7245
76c7560a
HR
7246# set up qemu-iotests in this build directory
7247iotests_common_env="tests/qemu-iotests/common.env"
7248iotests_check="tests/qemu-iotests/check"
7249
7250echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7251echo >> "$iotests_common_env"
7252echo "export PYTHON='$python'" >> "$iotests_common_env"
7253
7254if [ ! -e "$iotests_check" ]; then
7255 symlink "$source_path/$iotests_check" "$iotests_check"
7256fi
7257
dc655404
MT
7258# Save the configure command line for later reuse.
7259cat <<EOD >config.status
7260#!/bin/sh
7261# Generated by configure.
7262# Run this file to recreate the current configuration.
7263# Compiler output produced by configure, useful for debugging
7264# configure, is in config.log if it exists.
7265EOD
7266printf "exec" >>config.status
7267printf " '%s'" "$0" "$@" >>config.status
cf7cc929 7268echo ' "$@"' >>config.status
dc655404
MT
7269chmod +x config.status
7270
8cd05ab6 7271rm -r "$TMPDIR1"