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