]> git.proxmox.com Git - mirror_qemu.git/blame - configure
i386/kvm: add support for Hyper-V reenlightenment MSRs
[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
MT
1590 xen xen backend driver support
1591 xen-pci-passthrough
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
2527 cat > $TMPC << EOF
2528#include <windows.h>
53537bb1
JTV
2529#include <WinHvPlatform.h>
2530#include <WinHvEmulation.h>
d661d9a4
JTV
2531int main(void) {
2532 WHV_CAPABILITY whpx_cap;
3907e631
JTV
2533 UINT32 writtenSize;
2534 WHvGetCapability(WHvCapabilityCodeFeatures, &whpx_cap, sizeof(whpx_cap),
2535 &writtenSize);
d661d9a4
JTV
2536 return 0;
2537}
2538EOF
53537bb1
JTV
2539 if compile_prog "" "-lWinHvPlatform -lWinHvEmulation" ; then
2540 libs_softmmu="$libs_softmmu -lWinHvPlatform -lWinHvEmulation"
d661d9a4
JTV
2541 whpx="yes"
2542 else
2543 if test "$whpx" = "yes"; then
53537bb1 2544 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
d661d9a4
JTV
2545 fi
2546 whpx="no"
2547 fi
2548fi
2549
dfffc653
JQ
2550##########################################
2551# Sparse probe
2552if test "$sparse" != "no" ; then
0dba6195 2553 if has cgcc; then
dfffc653
JQ
2554 sparse=yes
2555 else
2556 if test "$sparse" = "yes" ; then
21684af0 2557 feature_not_found "sparse" "Install sparse binary"
dfffc653
JQ
2558 fi
2559 sparse=no
2560 fi
2561fi
2562
f676c67e
JW
2563##########################################
2564# X11 probe
f676c67e 2565if $pkg_config --exists "x11"; then
8781595b 2566 have_x11=yes
89138857
SW
2567 x11_cflags=$($pkg_config --cflags x11)
2568 x11_libs=$($pkg_config --libs x11)
f676c67e
JW
2569fi
2570
a4ccabcf
AL
2571##########################################
2572# GTK probe
2573
2574if test "$gtk" != "no"; then
5a464e6c
PX
2575 if test "$gtkabi" = ""; then
2576 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2577 # Use 2.0 as a fallback if that is available.
2578 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2579 gtkabi=3.0
2580 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2581 gtkabi=2.0
2582 else
2583 gtkabi=3.0
2584 fi
2585 fi
528de90a 2586 gtkpackage="gtk+-$gtkabi"
0a337ed0 2587 gtkx11package="gtk+-x11-$gtkabi"
528de90a
DB
2588 if test "$gtkabi" = "3.0" ; then
2589 gtkversion="3.0.0"
bbbf9bfb
SW
2590 else
2591 gtkversion="2.18.0"
2592 fi
2593 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
89138857
SW
2594 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2595 gtk_libs=$($pkg_config --libs $gtkpackage)
2596 gtk_version=$($pkg_config --modversion $gtkpackage)
0a337ed0 2597 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
8781595b 2598 need_x11=yes
f676c67e
JW
2599 gtk_cflags="$gtk_cflags $x11_cflags"
2600 gtk_libs="$gtk_libs $x11_libs"
0a337ed0 2601 fi
bbbf9bfb
SW
2602 gtk="yes"
2603 elif test "$gtk" = "yes"; then
5fe309ff 2604 feature_not_found "gtk" "Install gtk3-devel"
bbbf9bfb
SW
2605 else
2606 gtk="no"
2607 fi
2608fi
2609
ddbb0d09
DB
2610
2611##########################################
2612# GNUTLS probe
2613
37371299
PM
2614gnutls_works() {
2615 # Unfortunately some distros have bad pkg-config information for gnutls
2616 # such that it claims to exist but you get a compiler error if you try
2617 # to use the options returned by --libs. Specifically, Ubuntu for --static
2618 # builds doesn't work:
2619 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2620 #
2621 # So sanity check the cflags/libs before assuming gnutls can be used.
2622 if ! $pkg_config --exists "gnutls"; then
2623 return 1
2624 fi
2625
2626 write_c_skeleton
2627 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2628}
2629
62893b67 2630gnutls_gcrypt=no
ed754746 2631gnutls_nettle=no
ddbb0d09 2632if test "$gnutls" != "no"; then
37371299 2633 if gnutls_works; then
89138857
SW
2634 gnutls_cflags=$($pkg_config --cflags gnutls)
2635 gnutls_libs=$($pkg_config --libs gnutls)
ddbb0d09
DB
2636 libs_softmmu="$gnutls_libs $libs_softmmu"
2637 libs_tools="$gnutls_libs $libs_tools"
2638 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2639 gnutls="yes"
2640
b917da4c
DB
2641 # gnutls_rnd requires >= 2.11.0
2642 if $pkg_config --exists "gnutls >= 2.11.0"; then
2643 gnutls_rnd="yes"
2644 else
2645 gnutls_rnd="no"
2646 fi
2647
62893b67
DB
2648 if $pkg_config --exists 'gnutls >= 3.0'; then
2649 gnutls_gcrypt=no
ed754746 2650 gnutls_nettle=yes
62893b67 2651 elif $pkg_config --exists 'gnutls >= 2.12'; then
89138857 2652 case $($pkg_config --libs --static gnutls) in
ed754746
DB
2653 *gcrypt*)
2654 gnutls_gcrypt=yes
2655 gnutls_nettle=no
2656 ;;
2657 *nettle*)
2658 gnutls_gcrypt=no
2659 gnutls_nettle=yes
2660 ;;
2661 *)
2662 gnutls_gcrypt=yes
2663 gnutls_nettle=no
2664 ;;
62893b67
DB
2665 esac
2666 else
2667 gnutls_gcrypt=yes
ed754746 2668 gnutls_nettle=no
62893b67 2669 fi
ddbb0d09
DB
2670 elif test "$gnutls" = "yes"; then
2671 feature_not_found "gnutls" "Install gnutls devel"
2672 else
2673 gnutls="no"
b917da4c 2674 gnutls_rnd="no"
ddbb0d09
DB
2675 fi
2676else
b917da4c 2677 gnutls_rnd="no"
ddbb0d09
DB
2678fi
2679
91bfcdb0
DB
2680
2681# If user didn't give a --disable/enable-gcrypt flag,
2682# then mark as disabled if user requested nettle
2683# explicitly, or if gnutls links to nettle
2684if test -z "$gcrypt"
2685then
2686 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2687 then
2688 gcrypt="no"
2689 fi
2690fi
2691
2692# If user didn't give a --disable/enable-nettle flag,
2693# then mark as disabled if user requested gcrypt
2694# explicitly, or if gnutls links to gcrypt
2695if test -z "$nettle"
2696then
2697 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2698 then
2699 nettle="no"
2700 fi
2701fi
2702
2703has_libgcrypt_config() {
2704 if ! has "libgcrypt-config"
2705 then
2706 return 1
2707 fi
2708
2709 if test -n "$cross_prefix"
2710 then
89138857 2711 host=$(libgcrypt-config --host)
91bfcdb0
DB
2712 if test "$host-" != $cross_prefix
2713 then
2714 return 1
2715 fi
2716 fi
2717
2718 return 0
2719}
2720
2721if test "$gcrypt" != "no"; then
2722 if has_libgcrypt_config; then
89138857
SW
2723 gcrypt_cflags=$(libgcrypt-config --cflags)
2724 gcrypt_libs=$(libgcrypt-config --libs)
91bfcdb0
DB
2725 # Debian has remove -lgpg-error from libgcrypt-config
2726 # as it "spreads unnecessary dependencies" which in
2727 # turn breaks static builds...
2728 if test "$static" = "yes"
2729 then
2730 gcrypt_libs="$gcrypt_libs -lgpg-error"
2731 fi
62893b67
DB
2732 libs_softmmu="$gcrypt_libs $libs_softmmu"
2733 libs_tools="$gcrypt_libs $libs_tools"
2734 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
91bfcdb0
DB
2735 gcrypt="yes"
2736 if test -z "$nettle"; then
2737 nettle="no"
2738 fi
37788f25
DB
2739
2740 cat > $TMPC << EOF
2741#include <gcrypt.h>
2742int main(void) {
2743 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2744 GCRY_MD_SHA256,
2745 NULL, 0, 0, 0, NULL);
2746 return 0;
2747}
2748EOF
2749 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2750 gcrypt_kdf=yes
2751 fi
1f923c70
LM
2752
2753 cat > $TMPC << EOF
2754#include <gcrypt.h>
2755int main(void) {
2756 gcry_mac_hd_t handle;
2757 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2758 GCRY_MAC_FLAG_SECURE, NULL);
2759 return 0;
2760}
2761EOF
2762 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2763 gcrypt_hmac=yes
2764 fi
62893b67 2765 else
91bfcdb0
DB
2766 if test "$gcrypt" = "yes"; then
2767 feature_not_found "gcrypt" "Install gcrypt devel"
2768 else
2769 gcrypt="no"
2770 fi
62893b67
DB
2771 fi
2772fi
2773
ddbb0d09 2774
91bfcdb0 2775if test "$nettle" != "no"; then
ed754746 2776 if $pkg_config --exists "nettle"; then
89138857
SW
2777 nettle_cflags=$($pkg_config --cflags nettle)
2778 nettle_libs=$($pkg_config --libs nettle)
2779 nettle_version=$($pkg_config --modversion nettle)
ed754746
DB
2780 libs_softmmu="$nettle_libs $libs_softmmu"
2781 libs_tools="$nettle_libs $libs_tools"
2782 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
91bfcdb0 2783 nettle="yes"
fff2f982
DB
2784
2785 cat > $TMPC << EOF
9e87a691 2786#include <stddef.h>
fff2f982
DB
2787#include <nettle/pbkdf2.h>
2788int main(void) {
2789 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2790 return 0;
2791}
2792EOF
2793 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2794 nettle_kdf=yes
2795 fi
ed754746 2796 else
91bfcdb0
DB
2797 if test "$nettle" = "yes"; then
2798 feature_not_found "nettle" "Install nettle devel"
2799 else
2800 nettle="no"
2801 fi
ed754746
DB
2802 fi
2803fi
2804
91bfcdb0
DB
2805if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2806then
2807 error_exit "Only one of gcrypt & nettle can be enabled"
2808fi
2809
9a2fd434
DB
2810##########################################
2811# libtasn1 - only for the TLS creds/session test suite
2812
2813tasn1=yes
90246037
DB
2814tasn1_cflags=""
2815tasn1_libs=""
9a2fd434 2816if $pkg_config --exists "libtasn1"; then
89138857
SW
2817 tasn1_cflags=$($pkg_config --cflags libtasn1)
2818 tasn1_libs=$($pkg_config --libs libtasn1)
9a2fd434
DB
2819else
2820 tasn1=no
2821fi
2822
ed754746 2823
559607ea
DB
2824##########################################
2825# getifaddrs (for tests/test-io-channel-socket )
2826
2827have_ifaddrs_h=yes
2828if ! check_include "ifaddrs.h" ; then
2829 have_ifaddrs_h=no
2830fi
2831
bbbf9bfb
SW
2832##########################################
2833# VTE probe
2834
2835if test "$vte" != "no"; then
2836 if test "$gtkabi" = "3.0"; then
c6feff9e
CR
2837 vteminversion="0.32.0"
2838 if $pkg_config --exists "vte-2.91"; then
2839 vtepackage="vte-2.91"
2840 else
2841 vtepackage="vte-2.90"
2842 fi
528de90a 2843 else
528de90a 2844 vtepackage="vte"
c6feff9e 2845 vteminversion="0.24.0"
528de90a 2846 fi
c6feff9e 2847 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
89138857
SW
2848 vte_cflags=$($pkg_config --cflags $vtepackage)
2849 vte_libs=$($pkg_config --libs $vtepackage)
2850 vteversion=$($pkg_config --modversion $vtepackage)
bbbf9bfb
SW
2851 vte="yes"
2852 elif test "$vte" = "yes"; then
9e04c683 2853 if test "$gtkabi" = "3.0"; then
c6feff9e 2854 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
9e04c683
SW
2855 else
2856 feature_not_found "vte" "Install libvte devel"
2857 fi
0d185e63 2858 else
bbbf9bfb 2859 vte="no"
a4ccabcf
AL
2860 fi
2861fi
2862
11d9f695
FB
2863##########################################
2864# SDL probe
2865
3ec87ffe
PB
2866# Look for sdl configuration program (pkg-config or sdl-config). Try
2867# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
47c03744 2868
c6093a05
PX
2869sdl_probe ()
2870{
2871 sdl_too_old=no
2872 if test "$sdlabi" = ""; then
2873 if $pkg_config --exists "sdl2"; then
2874 sdlabi=2.0
2875 elif $pkg_config --exists "sdl"; then
2876 sdlabi=1.2
2877 else
2878 sdlabi=2.0
2879 fi
2880 fi
ee8466d0 2881
c6093a05
PX
2882 if test $sdlabi = "2.0"; then
2883 sdl_config=$sdl2_config
2884 sdlname=sdl2
2885 sdlconfigname=sdl2_config
2886 elif test $sdlabi = "1.2"; then
2887 sdlname=sdl
2888 sdlconfigname=sdl_config
2889 else
2890 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2891 fi
47c03744 2892
c6093a05
PX
2893 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2894 sdl_config=$sdlconfigname
2895 fi
3ec87ffe 2896
c6093a05
PX
2897 if $pkg_config $sdlname --exists; then
2898 sdlconfig="$pkg_config $sdlname"
2899 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2900 elif has ${sdl_config}; then
2901 sdlconfig="$sdl_config"
2902 sdlversion=$($sdlconfig --version)
2903 else
2904 if test "$sdl" = "yes" ; then
2905 feature_not_found "sdl" "Install SDL2-devel"
2906 fi
2907 sdl=no
2908 # no need to do the rest
2909 return
2910 fi
2911 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2912 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
a0dfd8a4 2913 fi
11d9f695 2914
ac119f9d 2915 cat > $TMPC << EOF
11d9f695
FB
2916#include <SDL.h>
2917#undef main /* We don't want SDL to override our main() */
2918int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2919EOF
89138857 2920 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2ca5c430 2921 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
74f42e18 2922 if test "$static" = "yes" ; then
5f37e6d4
TH
2923 if $pkg_config $sdlname --exists; then
2924 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2925 else
2926 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2927 fi
74f42e18 2928 else
89138857 2929 sdl_libs=$($sdlconfig --libs 2>/dev/null)
74f42e18 2930 fi
52166aa0 2931 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
89138857 2932 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
ac119f9d
JQ
2933 sdl_too_old=yes
2934 else
a30878e7 2935 sdl=yes
ac119f9d 2936 fi
cd01b4a3 2937
67c274d3 2938 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
ac119f9d 2939 if test "$sdl" = "yes" -a "$static" = "yes" ; then
67c274d3 2940 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
89138857
SW
2941 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2942 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
ac119f9d 2943 fi
52166aa0 2944 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
ac119f9d
JQ
2945 :
2946 else
2947 sdl=no
2948 fi
2949 fi # static link
c4198157
JQ
2950 else # sdl not found
2951 if test "$sdl" = "yes" ; then
21684af0 2952 feature_not_found "sdl" "Install SDL devel"
c4198157
JQ
2953 fi
2954 sdl=no
ac119f9d 2955 fi # sdl compile test
c6093a05
PX
2956}
2957
2958if test "$sdl" != "no" ; then
2959 sdl_probe
a68551bc 2960fi
11d9f695 2961
5368a422 2962if test "$sdl" = "yes" ; then
ac119f9d 2963 cat > $TMPC <<EOF
5368a422
AL
2964#include <SDL.h>
2965#if defined(SDL_VIDEO_DRIVER_X11)
2966#include <X11/XKBlib.h>
2967#else
2968#error No x11 support
2969#endif
2970int main(void) { return 0; }
2971EOF
f676c67e 2972 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
8781595b 2973 need_x11=yes
f676c67e
JW
2974 sdl_cflags="$sdl_cflags $x11_cflags"
2975 sdl_libs="$sdl_libs $x11_libs"
ac119f9d 2976 fi
5368a422
AL
2977fi
2978
2da776db
MH
2979##########################################
2980# RDMA needs OpenFabrics libraries
2981if test "$rdma" != "no" ; then
2982 cat > $TMPC <<EOF
2983#include <rdma/rdma_cma.h>
2984int main(void) { return 0; }
2985EOF
ef6d4ccd 2986 rdma_libs="-lrdmacm -libverbs -libumad"
2da776db
MH
2987 if compile_prog "" "$rdma_libs" ; then
2988 rdma="yes"
ef6d4ccd 2989 libs_softmmu="$libs_softmmu $rdma_libs"
2da776db
MH
2990 else
2991 if test "$rdma" = "yes" ; then
2992 error_exit \
ef6d4ccd 2993 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
2da776db 2994 " Your options:" \
ef6d4ccd 2995 " (1) Fast: Install infiniband packages (devel) from your distro." \
2da776db
MH
2996 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2997 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2998 fi
2999 rdma="no"
3000 fi
3001fi
3002
95c6bff3 3003
2f9606b3
AL
3004##########################################
3005# VNC SASL detection
821601ea 3006if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
ea784e3b 3007 cat > $TMPC <<EOF
2f9606b3
AL
3008#include <sasl/sasl.h>
3009#include <stdio.h>
3010int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3011EOF
ea784e3b
JQ
3012 # Assuming Cyrus-SASL installed in /usr prefix
3013 vnc_sasl_cflags=""
3014 vnc_sasl_libs="-lsasl2"
3015 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3016 vnc_sasl=yes
3017 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
ca273d58 3018 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
ea784e3b
JQ
3019 else
3020 if test "$vnc_sasl" = "yes" ; then
21684af0 3021 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2f9606b3 3022 fi
ea784e3b
JQ
3023 vnc_sasl=no
3024 fi
2f9606b3
AL
3025fi
3026
2f6f5c7a
CC
3027##########################################
3028# VNC JPEG detection
821601ea 3029if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2f6f5c7a
CC
3030cat > $TMPC <<EOF
3031#include <stdio.h>
3032#include <jpeglib.h>
3033int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3034EOF
3035 vnc_jpeg_cflags=""
3036 vnc_jpeg_libs="-ljpeg"
3037 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3038 vnc_jpeg=yes
3039 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
ca273d58 3040 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2f6f5c7a
CC
3041 else
3042 if test "$vnc_jpeg" = "yes" ; then
21684af0 3043 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2f6f5c7a
CC
3044 fi
3045 vnc_jpeg=no
3046 fi
3047fi
3048
efe556ad
CC
3049##########################################
3050# VNC PNG detection
821601ea 3051if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
efe556ad
CC
3052cat > $TMPC <<EOF
3053//#include <stdio.h>
3054#include <png.h>
832ce9c2 3055#include <stddef.h>
efe556ad
CC
3056int main(void) {
3057 png_structp png_ptr;
3058 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
7edc3fed 3059 return png_ptr != 0;
efe556ad
CC
3060}
3061EOF
65d5d3f9 3062 if $pkg_config libpng --exists; then
89138857
SW
3063 vnc_png_cflags=$($pkg_config libpng --cflags)
3064 vnc_png_libs=$($pkg_config libpng --libs)
9af8025e 3065 else
efe556ad
CC
3066 vnc_png_cflags=""
3067 vnc_png_libs="-lpng"
9af8025e 3068 fi
efe556ad
CC
3069 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3070 vnc_png=yes
3071 libs_softmmu="$vnc_png_libs $libs_softmmu"
9af8025e 3072 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
efe556ad
CC
3073 else
3074 if test "$vnc_png" = "yes" ; then
21684af0 3075 feature_not_found "vnc-png" "Install libpng devel"
efe556ad
CC
3076 fi
3077 vnc_png=no
3078 fi
3079fi
3080
6a021536
GH
3081##########################################
3082# xkbcommon probe
3083if test "$xkbcommon" != "no" ; then
3084 if $pkg_config xkbcommon --exists; then
3085 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3086 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3087 xkbcommon=yes
3088 else
3089 if test "$xkbcommon" = "yes" ; then
3090 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3091 fi
3092 xkbcommon=no
3093 fi
3094fi
3095
76655d6d
AL
3096##########################################
3097# fnmatch() probe, used for ACL routines
3098fnmatch="no"
3099cat > $TMPC << EOF
3100#include <fnmatch.h>
3101int main(void)
3102{
3103 fnmatch("foo", "foo", 0);
3104 return 0;
3105}
3106EOF
52166aa0 3107if compile_prog "" "" ; then
76655d6d
AL
3108 fnmatch="yes"
3109fi
3110
ee682d27 3111##########################################
c1bb86cd 3112# xfsctl() probe, used for file-posix.c
dce512de
CH
3113if test "$xfs" != "no" ; then
3114 cat > $TMPC << EOF
ffc41d10 3115#include <stddef.h> /* NULL */
dce512de
CH
3116#include <xfs/xfs.h>
3117int main(void)
3118{
3119 xfsctl(NULL, 0, 0, NULL);
3120 return 0;
3121}
3122EOF
3123 if compile_prog "" "" ; then
3124 xfs="yes"
3125 else
3126 if test "$xfs" = "yes" ; then
21684af0 3127 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
dce512de
CH
3128 fi
3129 xfs=no
3130 fi
3131fi
3132
8a16d273
TS
3133##########################################
3134# vde libraries probe
dfb278bd 3135if test "$vde" != "no" ; then
4baae0ac 3136 vde_libs="-lvdeplug"
8a16d273
TS
3137 cat > $TMPC << EOF
3138#include <libvdeplug.h>
4a7f0e06
PB
3139int main(void)
3140{
3141 struct vde_open_args a = {0, 0, 0};
fea08e08
PM
3142 char s[] = "";
3143 vde_open(s, s, &a);
4a7f0e06
PB
3144 return 0;
3145}
8a16d273 3146EOF
52166aa0 3147 if compile_prog "" "$vde_libs" ; then
4baae0ac 3148 vde=yes
dfb278bd
JQ
3149 else
3150 if test "$vde" = "yes" ; then
21684af0 3151 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
dfb278bd
JQ
3152 fi
3153 vde=no
4baae0ac 3154 fi
8a16d273
TS
3155fi
3156
58952137 3157##########################################
0a985b37
VM
3158# netmap support probe
3159# Apart from looking for netmap headers, we make sure that the host API version
3160# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3161# a minor/major version number. Minor new features will be marked with values up
3162# to 15, and if something happens that requires a change to the backend we will
3163# move above 15, submit the backend fixes and modify this two bounds.
58952137
VM
3164if test "$netmap" != "no" ; then
3165 cat > $TMPC << EOF
3166#include <inttypes.h>
3167#include <net/if.h>
3168#include <net/netmap.h>
3169#include <net/netmap_user.h>
0a985b37
VM
3170#if (NETMAP_API < 11) || (NETMAP_API > 15)
3171#error
3172#endif
58952137
VM
3173int main(void) { return 0; }
3174EOF
3175 if compile_prog "" "" ; then
3176 netmap=yes
3177 else
3178 if test "$netmap" = "yes" ; then
3179 feature_not_found "netmap"
3180 fi
3181 netmap=no
3182 fi
3183fi
3184
47e98658
CB
3185##########################################
3186# libcap-ng library probe
3187if test "$cap_ng" != "no" ; then
3188 cap_libs="-lcap-ng"
3189 cat > $TMPC << EOF
3190#include <cap-ng.h>
3191int main(void)
3192{
3193 capng_capability_to_name(CAPNG_EFFECTIVE);
3194 return 0;
3195}
3196EOF
3197 if compile_prog "" "$cap_libs" ; then
3198 cap_ng=yes
3199 libs_tools="$cap_libs $libs_tools"
3200 else
3201 if test "$cap_ng" = "yes" ; then
21684af0 3202 feature_not_found "cap_ng" "Install libcap-ng devel"
47e98658
CB
3203 fi
3204 cap_ng=no
3205 fi
3206fi
3207
8f28f3fb 3208##########################################
c2de5c91 3209# Sound support libraries probe
8f28f3fb 3210
c2de5c91 3211audio_drv_probe()
3212{
3213 drv=$1
3214 hdr=$2
3215 lib=$3
3216 exp=$4
3217 cfl=$5
3218 cat > $TMPC << EOF
3219#include <$hdr>
3220int main(void) { $exp }
8f28f3fb 3221EOF
52166aa0 3222 if compile_prog "$cfl" "$lib" ; then
c2de5c91 3223 :
3224 else
76ad07a4
PM
3225 error_exit "$drv check failed" \
3226 "Make sure to have the $drv libs and headers installed."
c2de5c91 3227 fi
3228}
3229
89138857 3230audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
c2de5c91 3231for drv in $audio_drv_list; do
3232 case $drv in
3233 alsa)
3234 audio_drv_probe $drv alsa/asoundlib.h -lasound \
e35bcb0c 3235 "return snd_pcm_close((snd_pcm_t *)0);"
b1149911 3236 alsa_libs="-lasound"
c2de5c91 3237 ;;
3238
b8e59f18 3239 pa)
e58ff62d
PK
3240 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3241 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
b1149911 3242 pulse_libs="-lpulse"
67f86e8e 3243 audio_pt_int="yes"
b8e59f18 3244 ;;
3245
373967b2
GH
3246 sdl)
3247 if test "$sdl" = "no"; then
3248 error_exit "sdl not found or disabled, can not use sdl audio driver"
3249 fi
3250 ;;
3251
997e690a 3252 coreaudio)
b1149911 3253 coreaudio_libs="-framework CoreAudio"
997e690a
JQ
3254 ;;
3255
a4bf6780 3256 dsound)
b1149911 3257 dsound_libs="-lole32 -ldxguid"
d5631638 3258 audio_win_int="yes"
a4bf6780
JQ
3259 ;;
3260
3261 oss)
b1149911 3262 oss_libs="$oss_lib"
a4bf6780
JQ
3263 ;;
3264
373967b2
GH
3265 wav)
3266 # XXX: Probes for CoreAudio, DirectSound
2f6a1ab0
BS
3267 ;;
3268
e4c63a6a 3269 *)
1c9b2a52 3270 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
76ad07a4
PM
3271 error_exit "Unknown driver '$drv' selected" \
3272 "Possible drivers are: $audio_possible_drivers"
e4c63a6a 3273 }
3274 ;;
c2de5c91 3275 esac
3276done
8f28f3fb 3277
2e4d9fb1
AJ
3278##########################################
3279# BrlAPI probe
3280
4ffcedb6 3281if test "$brlapi" != "no" ; then
eb82284f
JQ
3282 brlapi_libs="-lbrlapi"
3283 cat > $TMPC << EOF
2e4d9fb1 3284#include <brlapi.h>
832ce9c2 3285#include <stddef.h>
2e4d9fb1
AJ
3286int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3287EOF
52166aa0 3288 if compile_prog "" "$brlapi_libs" ; then
eb82284f 3289 brlapi=yes
4ffcedb6
JQ
3290 else
3291 if test "$brlapi" = "yes" ; then
21684af0 3292 feature_not_found "brlapi" "Install brlapi devel"
4ffcedb6
JQ
3293 fi
3294 brlapi=no
eb82284f
JQ
3295 fi
3296fi
2e4d9fb1 3297
4d3b6f6e
AZ
3298##########################################
3299# curses probe
a3605bf6
MT
3300if test "$curses" != "no" ; then
3301 if test "$mingw32" = "yes" ; then
8ddc5bf9
ST
3302 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3303 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
a3605bf6 3304 else
7c703002 3305 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
8ddc5bf9 3306 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
a3605bf6 3307 fi
c584a6d0 3308 curses_found=no
4d3b6f6e 3309 cat > $TMPC << EOF
8ddc5bf9 3310#include <locale.h>
4d3b6f6e 3311#include <curses.h>
8ddc5bf9 3312#include <wchar.h>
ef9a2524 3313int main(void) {
8ddc5bf9
ST
3314 wchar_t wch = L'w';
3315 setlocale(LC_ALL, "");
ef9a2524 3316 resize_term(0, 0);
8ddc5bf9
ST
3317 addwstr(L"wide chars\n");
3318 addnwstr(&wch, 1);
7c703002 3319 add_wch(WACS_DEGREE);
271f37ab 3320 return 0;
ef9a2524 3321}
4d3b6f6e 3322EOF
ecbe251f 3323 IFS=:
8ddc5bf9 3324 for curses_inc in $curses_inc_list; do
b01a4fd3
PM
3325 # Make sure we get the wide character prototypes
3326 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
7c703002 3327 IFS=:
8ddc5bf9
ST
3328 for curses_lib in $curses_lib_list; do
3329 unset IFS
3330 if compile_prog "$curses_inc" "$curses_lib" ; then
3331 curses_found=yes
8ddc5bf9
ST
3332 break
3333 fi
3334 done
7c703002
ST
3335 if test "$curses_found" = yes ; then
3336 break
3337 fi
4f78ef9a 3338 done
ecbe251f 3339 unset IFS
c584a6d0
JQ
3340 if test "$curses_found" = "yes" ; then
3341 curses=yes
3342 else
3343 if test "$curses" = "yes" ; then
21684af0 3344 feature_not_found "curses" "Install ncurses devel"
c584a6d0
JQ
3345 fi
3346 curses=no
3347 fi
4f78ef9a 3348fi
4d3b6f6e 3349
769ce76d
AG
3350##########################################
3351# curl probe
788c8196 3352if test "$curl" != "no" ; then
65d5d3f9 3353 if $pkg_config libcurl --exists; then
a3605bf6
MT
3354 curlconfig="$pkg_config libcurl"
3355 else
3356 curlconfig=curl-config
3357 fi
769ce76d
AG
3358 cat > $TMPC << EOF
3359#include <curl/curl.h>
0b862ced 3360int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
769ce76d 3361EOF
89138857
SW
3362 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3363 curl_libs=$($curlconfig --libs 2>/dev/null)
b1d5a277 3364 if compile_prog "$curl_cflags" "$curl_libs" ; then
769ce76d 3365 curl=yes
788c8196
JQ
3366 else
3367 if test "$curl" = "yes" ; then
21684af0 3368 feature_not_found "curl" "Install libcurl devel"
788c8196
JQ
3369 fi
3370 curl=no
769ce76d
AG
3371 fi
3372fi # test "$curl"
3373
fb599c9a
AZ
3374##########################################
3375# bluez support probe
a20a6f46 3376if test "$bluez" != "no" ; then
e820e3f4
AZ
3377 cat > $TMPC << EOF
3378#include <bluetooth/bluetooth.h>
3379int main(void) { return bt_error(0); }
3380EOF
89138857
SW
3381 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3382 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
52166aa0 3383 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
a20a6f46 3384 bluez=yes
e482d56a 3385 libs_softmmu="$bluez_libs $libs_softmmu"
e820e3f4 3386 else
a20a6f46 3387 if test "$bluez" = "yes" ; then
21684af0 3388 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
a20a6f46 3389 fi
e820e3f4
AZ
3390 bluez="no"
3391 fi
fb599c9a
AZ
3392fi
3393
e18df141
AL
3394##########################################
3395# glib support probe
a52d28af 3396
ad04d8cb
PM
3397if test "$mingw32" = yes; then
3398 glib_req_ver=2.30
3399else
3400 glib_req_ver=2.22
3401fi
aa0d1f44
PB
3402glib_modules=gthread-2.0
3403if test "$modules" = yes; then
a88afc64 3404 glib_modules="$glib_modules gmodule-export-2.0"
aa0d1f44 3405fi
e26110cf 3406
4eaf7202
SJ
3407# This workaround is required due to a bug in pkg-config file for glib as it
3408# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3409
3410if test "$static" = yes -a "$mingw32" = yes; then
3411 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3412fi
3413
aa0d1f44 3414for i in $glib_modules; do
e26110cf 3415 if $pkg_config --atleast-version=$glib_req_ver $i; then
89138857
SW
3416 glib_cflags=$($pkg_config --cflags $i)
3417 glib_libs=$($pkg_config --libs $i)
4a058899 3418 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
e26110cf
FZ
3419 LIBS="$glib_libs $LIBS"
3420 libs_qga="$glib_libs $libs_qga"
3421 else
3422 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3423 fi
3424done
3425
977a82ab
DB
3426# Sanity check that the current size_t matches the
3427# size that glib thinks it should be. This catches
3428# problems on multi-arch where people try to build
3429# 32-bit QEMU while pointing at 64-bit glib headers
3430cat > $TMPC <<EOF
3431#include <glib.h>
3432#include <unistd.h>
3433
3434#define QEMU_BUILD_BUG_ON(x) \
3435 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3436
3437int main(void) {
3438 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3439 return 0;
3440}
3441EOF
3442
5919e032 3443if ! compile_prog "$CFLAGS" "$LIBS" ; then
977a82ab
DB
3444 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3445 "You probably need to set PKG_CONFIG_LIBDIR"\
3446 "to point to the right pkg-config files for your"\
3447 "build target"
3448fi
3449
9d41401b
MT
3450# g_test_trap_subprocess added in 2.38. Used by some tests.
3451glib_subprocess=yes
a049223a 3452if ! $pkg_config --atleast-version=2.38 glib-2.0; then
9d41401b
MT
3453 glib_subprocess=no
3454fi
3455
bbbf2e04
JS
3456# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3457cat > $TMPC << EOF
3458#include <glib.h>
3459int main(void) { return 0; }
3460EOF
3461if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3462 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3463 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3464 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3465 fi
3466fi
3467
e26110cf
FZ
3468##########################################
3469# SHA command probe for modules
3470if test "$modules" = yes; then
3471 shacmd_probe="sha1sum sha1 shasum"
3472 for c in $shacmd_probe; do
8ccefb91 3473 if has $c; then
e26110cf
FZ
3474 shacmd="$c"
3475 break
3476 fi
3477 done
3478 if test "$shacmd" = ""; then
3479 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3480 fi
e18df141
AL
3481fi
3482
e2134eb9
GH
3483##########################################
3484# pixman support probe
3485
35c4e86c 3486if test "$want_tools" = "no" -a "$softmmu" = "no"; then
74880fe2
RS
3487 pixman_cflags=
3488 pixman_libs=
35c4e86c 3489elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
89138857
SW
3490 pixman_cflags=$($pkg_config --cflags pixman-1)
3491 pixman_libs=$($pkg_config --libs pixman-1)
e2134eb9 3492else
c12b6d70
GH
3493 error_exit "pixman >= 0.21.8 not present." \
3494 "Please install the pixman devel package."
e2134eb9 3495fi
e2134eb9 3496
fe8fc5ae
PB
3497##########################################
3498# libmpathpersist probe
3499
3500if test "$mpath" != "no" ; then
3501 cat > $TMPC <<EOF
3502#include <libudev.h>
3503#include <mpath_persist.h>
3504unsigned mpath_mx_alloc_len = 1024;
3505int logsink;
b3f1c8c4
PB
3506static struct config *multipath_conf;
3507extern struct udev *udev;
3508extern struct config *get_multipath_config(void);
3509extern void put_multipath_config(struct config *conf);
3510struct udev *udev;
3511struct config *get_multipath_config(void) { return multipath_conf; }
3512void put_multipath_config(struct config *conf) { }
3513
fe8fc5ae 3514int main(void) {
b3f1c8c4
PB
3515 udev = udev_new();
3516 multipath_conf = mpath_lib_init();
fe8fc5ae
PB
3517 return 0;
3518}
3519EOF
3520 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3521 mpathpersist=yes
3522 else
3523 mpathpersist=no
3524 fi
3525else
3526 mpathpersist=no
3527fi
3528
17bff52b
MK
3529##########################################
3530# libcap probe
3531
3532if test "$cap" != "no" ; then
3533 cat > $TMPC <<EOF
3534#include <stdio.h>
3535#include <sys/capability.h>
cc939743 3536int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
17bff52b
MK
3537EOF
3538 if compile_prog "" "-lcap" ; then
3539 cap=yes
3540 else
3541 cap=no
3542 fi
3543fi
3544
414f0dab 3545##########################################
e5d355d1 3546# pthread probe
4b29ec41 3547PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3c529d93 3548
4dd75c70 3549pthread=no
e5d355d1 3550cat > $TMPC << EOF
3c529d93 3551#include <pthread.h>
7a42bbe4
SW
3552static void *f(void *p) { return NULL; }
3553int main(void) {
3554 pthread_t thread;
3555 pthread_create(&thread, 0, f, 0);
3556 return 0;
3557}
414f0dab 3558EOF
bd00d539
AF
3559if compile_prog "" "" ; then
3560 pthread=yes
3561else
3562 for pthread_lib in $PTHREADLIBS_LIST; do
3563 if compile_prog "" "$pthread_lib" ; then
3564 pthread=yes
e3c56761
PP
3565 found=no
3566 for lib_entry in $LIBS; do
3567 if test "$lib_entry" = "$pthread_lib"; then
3568 found=yes
3569 break
3570 fi
3571 done
3572 if test "$found" = "no"; then
3573 LIBS="$pthread_lib $LIBS"
14ab3aa7 3574 libs_qga="$pthread_lib $libs_qga"
e3c56761 3575 fi
409437e1 3576 PTHREAD_LIB="$pthread_lib"
bd00d539
AF
3577 break
3578 fi
3579 done
3580fi
414f0dab 3581
4617e593 3582if test "$mingw32" != yes -a "$pthread" = no; then
76ad07a4
PM
3583 error_exit "pthread check failed" \
3584 "Make sure to have the pthread libs and headers installed."
e5d355d1
AL
3585fi
3586
5c312079
DDAG
3587# check for pthread_setname_np
3588pthread_setname_np=no
3589cat > $TMPC << EOF
3590#include <pthread.h>
3591
3592static void *f(void *p) { return NULL; }
3593int main(void)
3594{
3595 pthread_t thread;
3596 pthread_create(&thread, 0, f, 0);
3597 pthread_setname_np(thread, "QEMU");
3598 return 0;
3599}
3600EOF
3601if compile_prog "" "$pthread_lib" ; then
3602 pthread_setname_np=yes
3603fi
3604
f27aaf4b
CB
3605##########################################
3606# rbd probe
3607if test "$rbd" != "no" ; then
3608 cat > $TMPC <<EOF
3609#include <stdio.h>
ad32e9c0 3610#include <rbd/librbd.h>
f27aaf4b 3611int main(void) {
ad32e9c0
JD
3612 rados_t cluster;
3613 rados_create(&cluster, NULL);
f27aaf4b
CB
3614 return 0;
3615}
3616EOF
ad32e9c0
JD
3617 rbd_libs="-lrbd -lrados"
3618 if compile_prog "" "$rbd_libs" ; then
3619 rbd=yes
f27aaf4b
CB
3620 else
3621 if test "$rbd" = "yes" ; then
21684af0 3622 feature_not_found "rados block device" "Install librbd/ceph devel"
f27aaf4b
CB
3623 fi
3624 rbd=no
3625 fi
f27aaf4b
CB
3626fi
3627
0a12ec87
RJ
3628##########################################
3629# libssh2 probe
4fc16838 3630min_libssh2_version=1.2.8
0a12ec87 3631if test "$libssh2" != "no" ; then
65d5d3f9 3632 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
89138857
SW
3633 libssh2_cflags=$($pkg_config libssh2 --cflags)
3634 libssh2_libs=$($pkg_config libssh2 --libs)
0a12ec87 3635 libssh2=yes
0a12ec87
RJ
3636 else
3637 if test "$libssh2" = "yes" ; then
4fc16838 3638 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
0a12ec87
RJ
3639 fi
3640 libssh2=no
3641 fi
3642fi
3643
9a2d462e
RJ
3644##########################################
3645# libssh2_sftp_fsync probe
3646
3647if test "$libssh2" = "yes"; then
3648 cat > $TMPC <<EOF
3649#include <stdio.h>
3650#include <libssh2.h>
3651#include <libssh2_sftp.h>
3652int main(void) {
3653 LIBSSH2_SESSION *session;
3654 LIBSSH2_SFTP *sftp;
3655 LIBSSH2_SFTP_HANDLE *sftp_handle;
3656 session = libssh2_session_init ();
3657 sftp = libssh2_sftp_init (session);
3658 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3659 libssh2_sftp_fsync (sftp_handle);
3660 return 0;
3661}
3662EOF
3663 # libssh2_cflags/libssh2_libs defined in previous test.
3664 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3665 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3666 fi
3667fi
3668
5c6c3a6c
CH
3669##########################################
3670# linux-aio probe
5c6c3a6c
CH
3671
3672if test "$linux_aio" != "no" ; then
3673 cat > $TMPC <<EOF
3674#include <libaio.h>
3675#include <sys/eventfd.h>
832ce9c2 3676#include <stddef.h>
5c6c3a6c
CH
3677int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3678EOF
3679 if compile_prog "" "-laio" ; then
3680 linux_aio=yes
5c6c3a6c
CH
3681 else
3682 if test "$linux_aio" = "yes" ; then
21684af0 3683 feature_not_found "linux AIO" "Install libaio devel"
5c6c3a6c 3684 fi
3cfcae3c 3685 linux_aio=no
5c6c3a6c
CH
3686 fi
3687fi
3688
3b8acc11
PB
3689##########################################
3690# TPM passthrough is only on x86 Linux
3691
3692if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3693 tpm_passthrough=$tpm
3694else
3695 tpm_passthrough=no
3696fi
3697
f4ede81e
AV
3698# TPM emulator is for all posix systems
3699if test "$mingw32" != "yes"; then
3700 tpm_emulator=$tpm
3701else
3702 tpm_emulator=no
3703fi
758e8e38
VJ
3704##########################################
3705# attr probe
3706
3707if test "$attr" != "no" ; then
3708 cat > $TMPC <<EOF
3709#include <stdio.h>
3710#include <sys/types.h>
f2338fb4
PB
3711#ifdef CONFIG_LIBATTR
3712#include <attr/xattr.h>
3713#else
4f26f2b6 3714#include <sys/xattr.h>
f2338fb4 3715#endif
758e8e38
VJ
3716int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3717EOF
4f26f2b6
AK
3718 if compile_prog "" "" ; then
3719 attr=yes
3720 # Older distros have <attr/xattr.h>, and need -lattr:
f2338fb4 3721 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
758e8e38
VJ
3722 attr=yes
3723 LIBS="-lattr $LIBS"
4f26f2b6 3724 libattr=yes
758e8e38
VJ
3725 else
3726 if test "$attr" = "yes" ; then
21684af0 3727 feature_not_found "ATTR" "Install libc6 or libattr devel"
758e8e38
VJ
3728 fi
3729 attr=no
3730 fi
3731fi
3732
bf9298b9
AL
3733##########################################
3734# iovec probe
3735cat > $TMPC <<EOF
db34f0b3 3736#include <sys/types.h>
bf9298b9 3737#include <sys/uio.h>
db34f0b3 3738#include <unistd.h>
f91f9bee 3739int main(void) { return sizeof(struct iovec); }
bf9298b9
AL
3740EOF
3741iovec=no
52166aa0 3742if compile_prog "" "" ; then
bf9298b9
AL
3743 iovec=yes
3744fi
3745
ceb42de8
AL
3746##########################################
3747# preadv probe
3748cat > $TMPC <<EOF
3749#include <sys/types.h>
3750#include <sys/uio.h>
3751#include <unistd.h>
c075a723 3752int main(void) { return preadv(0, 0, 0, 0); }
ceb42de8
AL
3753EOF
3754preadv=no
52166aa0 3755if compile_prog "" "" ; then
ceb42de8
AL
3756 preadv=yes
3757fi
3758
f652e6af
AJ
3759##########################################
3760# fdt probe
e169e1e1
PM
3761# fdt support is mandatory for at least some target architectures,
3762# so insist on it if we're building those system emulators.
3763fdt_required=no
3764for target in $target_list; do
3765 case $target in
df1d8a1f 3766 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
e169e1e1
PM
3767 fdt_required=yes
3768 ;;
3769 esac
3770done
3771
3772if test "$fdt_required" = "yes"; then
3773 if test "$fdt" = "no"; then
3774 error_exit "fdt disabled but some requested targets require it." \
3775 "You can turn off fdt only if you also disable all the system emulation" \
3776 "targets which need it (by specifying a cut down --target-list)."
3777 fi
3778 fdt=yes
3779fi
3780
2df87df7 3781if test "$fdt" != "no" ; then
b41af4ba 3782 fdt_libs="-lfdt"
96ce6545 3783 # explicitly check for libfdt_env.h as it is missing in some stable installs
6e85fce0 3784 # and test for required functions to make sure we are on a version >= 1.4.2
b41af4ba 3785 cat > $TMPC << EOF
31ce0adb 3786#include <libfdt.h>
96ce6545 3787#include <libfdt_env.h>
6e85fce0 3788int main(void) { fdt_first_subnode(0, 0); return 0; }
f652e6af 3789EOF
52166aa0 3790 if compile_prog "" "$fdt_libs" ; then
a540f158 3791 # system DTC is good - use it
f652e6af 3792 fdt=yes
a540f158 3793 else
aef45d51
DB
3794 # have GIT checkout, so activate dtc submodule
3795 if test -e "${source_path}/.git" ; then
3796 git_submodules="${git_submodules} dtc"
3797 fi
3798 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3799 fdt=yes
3800 dtc_internal="yes"
3801 mkdir -p dtc
3802 if [ "$pwd_is_source_path" != "y" ] ; then
3803 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3804 symlink "$source_path/dtc/scripts" "dtc/scripts"
3805 fi
3806 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3807 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3808 elif test "$fdt" = "yes" ; then
3809 # Not a git build & no libfdt found, prompt for system install
3810 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3811 "Please install the DTC (libfdt) devel package"
3812 else
3813 # don't have and don't want
3814 fdt_libs=
3815 fdt=no
3816 fi
f652e6af
AJ
3817 fi
3818fi
3819
a540f158
PC
3820libs_softmmu="$libs_softmmu $fdt_libs"
3821
20ff075b 3822##########################################
fb719563 3823# opengl probe (for sdl2, gtk, milkymist-tmu2)
b1546f32 3824
da076ffe 3825if test "$opengl" != "no" ; then
014cb152 3826 opengl_pkgs="epoxy libdrm gbm"
5f9b1e35
GH
3827 if $pkg_config $opengl_pkgs; then
3828 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3829 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
da076ffe 3830 opengl=yes
925a0400
GH
3831 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3832 gtk_gl="yes"
3833 fi
cc720a5d 3834 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
20ff075b 3835 else
da076ffe 3836 if test "$opengl" = "yes" ; then
dcf30025 3837 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
20ff075b 3838 fi
f676c67e 3839 opengl_cflags=""
da076ffe
GH
3840 opengl_libs=""
3841 opengl=no
20ff075b
MW
3842 fi
3843fi
3844
014cb152
GH
3845if test "$opengl" = "yes"; then
3846 cat > $TMPC << EOF
3847#include <epoxy/egl.h>
3848#ifndef EGL_MESA_image_dma_buf_export
3849# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3850#endif
3851int main(void) { return 0; }
3852EOF
3853 if compile_prog "" "" ; then
3854 opengl_dmabuf=yes
3855 fi
3856fi
c9a12e75 3857
ed279a06
KK
3858##########################################
3859# libxml2 probe
3860if test "$libxml2" != "no" ; then
3861 if $pkg_config --exists libxml-2.0; then
3862 libxml2="yes"
3863 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3864 libxml2_libs=$($pkg_config --libs libxml-2.0)
3865 else
3866 if test "$libxml2" = "yes"; then
3867 feature_not_found "libxml2" "Install libxml2 devel"
3868 fi
3869 libxml2="no"
3870 fi
3871fi
c9a12e75 3872
eb100396
BR
3873##########################################
3874# glusterfs probe
3875if test "$glusterfs" != "no" ; then
65d5d3f9 3876 if $pkg_config --atleast-version=3 glusterfs-api; then
e01bee08 3877 glusterfs="yes"
89138857
SW
3878 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3879 glusterfs_libs=$($pkg_config --libs glusterfs-api)
d85fa9eb
JC
3880 if $pkg_config --atleast-version=4 glusterfs-api; then
3881 glusterfs_xlator_opt="yes"
3882 fi
65d5d3f9 3883 if $pkg_config --atleast-version=5 glusterfs-api; then
0c14fb47
BR
3884 glusterfs_discard="yes"
3885 fi
7c815372 3886 if $pkg_config --atleast-version=6 glusterfs-api; then
df3a429a 3887 glusterfs_fallocate="yes"
7c815372
BR
3888 glusterfs_zerofill="yes"
3889 fi
eb100396
BR
3890 else
3891 if test "$glusterfs" = "yes" ; then
8efc9363
HT
3892 feature_not_found "GlusterFS backend support" \
3893 "Install glusterfs-api devel >= 3"
eb100396 3894 fi
e01bee08 3895 glusterfs="no"
eb100396
BR
3896 fi
3897fi
3898
39386ac7 3899# Check for inotify functions when we are building linux-user
3b3f24ad
AJ
3900# emulator. This is done because older glibc versions don't
3901# have syscall stubs for these implemented. In that case we
3902# don't provide them even if kernel supports them.
3903#
3904inotify=no
67ba57f6 3905cat > $TMPC << EOF
3b3f24ad
AJ
3906#include <sys/inotify.h>
3907
3908int
3909main(void)
3910{
3911 /* try to start inotify */
8690e420 3912 return inotify_init();
3b3f24ad
AJ
3913}
3914EOF
52166aa0 3915if compile_prog "" "" ; then
67ba57f6 3916 inotify=yes
3b3f24ad
AJ
3917fi
3918
c05c7a73
RV
3919inotify1=no
3920cat > $TMPC << EOF
3921#include <sys/inotify.h>
3922
3923int
3924main(void)
3925{
3926 /* try to start inotify */
3927 return inotify_init1(0);
3928}
3929EOF
3930if compile_prog "" "" ; then
3931 inotify1=yes
3932fi
3933
099d6b0f
RV
3934# check if pipe2 is there
3935pipe2=no
3936cat > $TMPC << EOF
099d6b0f
RV
3937#include <unistd.h>
3938#include <fcntl.h>
3939
3940int main(void)
3941{
3942 int pipefd[2];
9bca8162 3943 return pipe2(pipefd, O_CLOEXEC);
099d6b0f
RV
3944}
3945EOF
52166aa0 3946if compile_prog "" "" ; then
099d6b0f
RV
3947 pipe2=yes
3948fi
3949
40ff6d7e
KW
3950# check if accept4 is there
3951accept4=no
3952cat > $TMPC << EOF
40ff6d7e
KW
3953#include <sys/socket.h>
3954#include <stddef.h>
3955
3956int main(void)
3957{
3958 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3959 return 0;
3960}
3961EOF
3962if compile_prog "" "" ; then
3963 accept4=yes
3964fi
3965
3ce34dfb
VS
3966# check if tee/splice is there. vmsplice was added same time.
3967splice=no
3968cat > $TMPC << EOF
3ce34dfb
VS
3969#include <unistd.h>
3970#include <fcntl.h>
3971#include <limits.h>
3972
3973int main(void)
3974{
66ea0f22 3975 int len, fd = 0;
3ce34dfb
VS
3976 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3977 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3978 return 0;
3979}
3980EOF
52166aa0 3981if compile_prog "" "" ; then
3ce34dfb
VS
3982 splice=yes
3983fi
3984
a99d57bb
WG
3985##########################################
3986# libnuma probe
3987
3988if test "$numa" != "no" ; then
3989 cat > $TMPC << EOF
3990#include <numa.h>
3991int main(void) { return numa_available(); }
3992EOF
3993
3994 if compile_prog "" "-lnuma" ; then
3995 numa=yes
3996 libs_softmmu="-lnuma $libs_softmmu"
3997 else
3998 if test "$numa" = "yes" ; then
3999 feature_not_found "numa" "install numactl devel"
4000 fi
4001 numa=no
4002 fi
4003fi
4004
7b01cb97
AD
4005if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4006 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4007 exit 1
4008fi
4009
5a22ab71
YZ
4010# Even if malloc_trim() is available, these non-libc memory allocators
4011# do not support it.
4012if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4013 if test "$malloc_trim" = "yes" ; then
4014 echo "Disabling malloc_trim with non-libc memory allocator"
4015 fi
4016 malloc_trim="no"
4017fi
4018
4019#######################################
4020# malloc_trim
4021
4022if test "$malloc_trim" != "no" ; then
4023 cat > $TMPC << EOF
4024#include <malloc.h>
4025int main(void) { malloc_trim(0); return 0; }
4026EOF
4027 if compile_prog "" "" ; then
4028 malloc_trim="yes"
4029 else
4030 malloc_trim="no"
4031 fi
4032fi
4033
2847b469
FZ
4034##########################################
4035# tcmalloc probe
4036
4037if test "$tcmalloc" = "yes" ; then
4038 cat > $TMPC << EOF
4039#include <stdlib.h>
4040int main(void) { malloc(1); return 0; }
4041EOF
4042
4043 if compile_prog "" "-ltcmalloc" ; then
4044 LIBS="-ltcmalloc $LIBS"
4045 else
4046 feature_not_found "tcmalloc" "install gperftools devel"
4047 fi
4048fi
4049
7b01cb97
AD
4050##########################################
4051# jemalloc probe
4052
4053if test "$jemalloc" = "yes" ; then
4054 cat > $TMPC << EOF
4055#include <stdlib.h>
4056int main(void) { malloc(1); return 0; }
4057EOF
4058
4059 if compile_prog "" "-ljemalloc" ; then
4060 LIBS="-ljemalloc $LIBS"
4061 else
4062 feature_not_found "jemalloc" "install jemalloc devel"
4063 fi
4064fi
4065
dcc38d1c
MT
4066##########################################
4067# signalfd probe
4068signalfd="no"
4069cat > $TMPC << EOF
dcc38d1c
MT
4070#include <unistd.h>
4071#include <sys/syscall.h>
4072#include <signal.h>
4073int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4074EOF
4075
4076if compile_prog "" "" ; then
4077 signalfd=yes
4078fi
4079
c2882b96
RV
4080# check if eventfd is supported
4081eventfd=no
4082cat > $TMPC << EOF
4083#include <sys/eventfd.h>
4084
4085int main(void)
4086{
55cc7f3e 4087 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
c2882b96
RV
4088}
4089EOF
4090if compile_prog "" "" ; then
4091 eventfd=yes
4092fi
4093
751bcc39
MAL
4094# check if memfd is supported
4095memfd=no
4096cat > $TMPC << EOF
75e5b70e 4097#include <sys/mman.h>
751bcc39
MAL
4098
4099int main(void)
4100{
4101 return memfd_create("foo", MFD_ALLOW_SEALING);
4102}
4103EOF
4104if compile_prog "" "" ; then
4105 memfd=yes
4106fi
4107
4108
4109
d0927938
UH
4110# check for fallocate
4111fallocate=no
4112cat > $TMPC << EOF
4113#include <fcntl.h>
4114
4115int main(void)
4116{
4117 fallocate(0, 0, 0, 0);
4118 return 0;
4119}
4120EOF
8fb03151 4121if compile_prog "" "" ; then
d0927938
UH
4122 fallocate=yes
4123fi
4124
3d4fa43e
KK
4125# check for fallocate hole punching
4126fallocate_punch_hole=no
4127cat > $TMPC << EOF
4128#include <fcntl.h>
4129#include <linux/falloc.h>
4130
4131int main(void)
4132{
4133 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4134 return 0;
4135}
4136EOF
4137if compile_prog "" "" ; then
4138 fallocate_punch_hole=yes
4139fi
4140
b953f075
DL
4141# check that fallocate supports range zeroing inside the file
4142fallocate_zero_range=no
4143cat > $TMPC << EOF
4144#include <fcntl.h>
4145#include <linux/falloc.h>
4146
4147int main(void)
4148{
4149 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4150 return 0;
4151}
4152EOF
4153if compile_prog "" "" ; then
4154 fallocate_zero_range=yes
4155fi
4156
ed911435
KW
4157# check for posix_fallocate
4158posix_fallocate=no
4159cat > $TMPC << EOF
4160#include <fcntl.h>
4161
4162int main(void)
4163{
4164 posix_fallocate(0, 0, 0);
4165 return 0;
4166}
4167EOF
4168if compile_prog "" "" ; then
4169 posix_fallocate=yes
4170fi
4171
c727f47d
PM
4172# check for sync_file_range
4173sync_file_range=no
4174cat > $TMPC << EOF
4175#include <fcntl.h>
4176
4177int main(void)
4178{
4179 sync_file_range(0, 0, 0, 0);
4180 return 0;
4181}
4182EOF
8fb03151 4183if compile_prog "" "" ; then
c727f47d
PM
4184 sync_file_range=yes
4185fi
4186
dace20dc
PM
4187# check for linux/fiemap.h and FS_IOC_FIEMAP
4188fiemap=no
4189cat > $TMPC << EOF
4190#include <sys/ioctl.h>
4191#include <linux/fs.h>
4192#include <linux/fiemap.h>
4193
4194int main(void)
4195{
4196 ioctl(0, FS_IOC_FIEMAP, 0);
4197 return 0;
4198}
4199EOF
8fb03151 4200if compile_prog "" "" ; then
dace20dc
PM
4201 fiemap=yes
4202fi
4203
d0927938
UH
4204# check for dup3
4205dup3=no
4206cat > $TMPC << EOF
4207#include <unistd.h>
4208
4209int main(void)
4210{
4211 dup3(0, 0, 0);
4212 return 0;
4213}
4214EOF
78f5d726 4215if compile_prog "" "" ; then
d0927938
UH
4216 dup3=yes
4217fi
4218
4e0c6529
AB
4219# check for ppoll support
4220ppoll=no
4221cat > $TMPC << EOF
4222#include <poll.h>
4223
4224int main(void)
4225{
4226 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4227 ppoll(&pfd, 1, 0, 0);
4228 return 0;
4229}
4230EOF
4231if compile_prog "" "" ; then
4232 ppoll=yes
4233fi
4234
cd758dd0
AB
4235# check for prctl(PR_SET_TIMERSLACK , ... ) support
4236prctl_pr_set_timerslack=no
4237cat > $TMPC << EOF
4238#include <sys/prctl.h>
4239
4240int main(void)
4241{
4242 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4243 return 0;
4244}
4245EOF
4246if compile_prog "" "" ; then
4247 prctl_pr_set_timerslack=yes
4248fi
4249
3b6edd16
PM
4250# check for epoll support
4251epoll=no
4252cat > $TMPC << EOF
4253#include <sys/epoll.h>
4254
4255int main(void)
4256{
4257 epoll_create(0);
4258 return 0;
4259}
4260EOF
8fb03151 4261if compile_prog "" "" ; then
3b6edd16
PM
4262 epoll=yes
4263fi
4264
227f0214
PM
4265# epoll_create1 is a later addition
4266# so we must check separately for its presence
3b6edd16
PM
4267epoll_create1=no
4268cat > $TMPC << EOF
4269#include <sys/epoll.h>
4270
4271int main(void)
4272{
19e83f6b
PM
4273 /* Note that we use epoll_create1 as a value, not as
4274 * a function being called. This is necessary so that on
4275 * old SPARC glibc versions where the function was present in
4276 * the library but not declared in the header file we will
4277 * fail the configure check. (Otherwise we will get a compiler
4278 * warning but not an error, and will proceed to fail the
4279 * qemu compile where we compile with -Werror.)
4280 */
c075a723 4281 return (int)(uintptr_t)&epoll_create1;
3b6edd16
PM
4282}
4283EOF
8fb03151 4284if compile_prog "" "" ; then
3b6edd16
PM
4285 epoll_create1=yes
4286fi
4287
a8fd1aba
PM
4288# check for sendfile support
4289sendfile=no
4290cat > $TMPC << EOF
4291#include <sys/sendfile.h>
4292
4293int main(void)
4294{
4295 return sendfile(0, 0, 0, 0);
4296}
4297EOF
4298if compile_prog "" "" ; then
4299 sendfile=yes
4300fi
4301
51834341
RV
4302# check for timerfd support (glibc 2.8 and newer)
4303timerfd=no
4304cat > $TMPC << EOF
4305#include <sys/timerfd.h>
4306
4307int main(void)
4308{
4309 return(timerfd_create(CLOCK_REALTIME, 0));
4310}
4311EOF
4312if compile_prog "" "" ; then
4313 timerfd=yes
4314fi
4315
9af5c906
RV
4316# check for setns and unshare support
4317setns=no
4318cat > $TMPC << EOF
4319#include <sched.h>
4320
4321int main(void)
4322{
4323 int ret;
4324 ret = setns(0, 0);
4325 ret = unshare(0);
4326 return ret;
4327}
4328EOF
4329if compile_prog "" "" ; then
4330 setns=yes
4331fi
4332
38860a03
AM
4333# clock_adjtime probe
4334clock_adjtime=no
4335cat > $TMPC <<EOF
4336#include <time.h>
4337
4338int main(void)
4339{
4340 return clock_adjtime(0, 0);
4341}
4342EOF
4343clock_adjtime=no
4344if compile_prog "" "" ; then
4345 clock_adjtime=yes
4346fi
4347
5a03cd00
AM
4348# syncfs probe
4349syncfs=no
4350cat > $TMPC <<EOF
4351#include <unistd.h>
4352
4353int main(void)
4354{
4355 return syncfs(0);
4356}
4357EOF
4358syncfs=no
4359if compile_prog "" "" ; then
4360 syncfs=yes
4361fi
4362
cc8ae6de 4363# Check if tools are available to build documentation.
a25dba17 4364if test "$docs" != "no" ; then
01668d98 4365 if has makeinfo && has pod2man; then
a25dba17 4366 docs=yes
83a3ab8b 4367 else
a25dba17 4368 if test "$docs" = "yes" ; then
21684af0 4369 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
83a3ab8b 4370 fi
a25dba17 4371 docs=no
83a3ab8b 4372 fi
cc8ae6de
PB
4373fi
4374
f514f41c 4375# Search for bswap_32 function
6ae9a1f4
JQ
4376byteswap_h=no
4377cat > $TMPC << EOF
4378#include <byteswap.h>
4379int main(void) { return bswap_32(0); }
4380EOF
52166aa0 4381if compile_prog "" "" ; then
6ae9a1f4
JQ
4382 byteswap_h=yes
4383fi
4384
75f13596 4385# Search for bswap32 function
6ae9a1f4
JQ
4386bswap_h=no
4387cat > $TMPC << EOF
4388#include <sys/endian.h>
4389#include <sys/types.h>
4390#include <machine/bswap.h>
4391int main(void) { return bswap32(0); }
4392EOF
52166aa0 4393if compile_prog "" "" ; then
6ae9a1f4
JQ
4394 bswap_h=yes
4395fi
4396
c589b249 4397##########################################
e49ab19f 4398# Do we have libiscsi >= 1.9.0
c589b249 4399if test "$libiscsi" != "no" ; then
e49ab19f 4400 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3c33ea96 4401 libiscsi="yes"
ca871ec8
SW
4402 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4403 libiscsi_libs=$($pkg_config --libs libiscsi)
c589b249
RS
4404 else
4405 if test "$libiscsi" = "yes" ; then
e49ab19f 4406 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
c589b249
RS
4407 fi
4408 libiscsi="no"
4409 fi
4410fi
4411
8bacde8d
NC
4412##########################################
4413# Do we need libm
4414cat > $TMPC << EOF
4415#include <math.h>
f80ea986 4416int main(int argc, char **argv) { return isnan(sin((double)argc)); }
8bacde8d
NC
4417EOF
4418if compile_prog "" "" ; then
4419 :
4420elif compile_prog "" "-lm" ; then
4421 LIBS="-lm $LIBS"
4422 libs_qga="-lm $libs_qga"
4423else
76ad07a4 4424 error_exit "libm check failed"
8bacde8d
NC
4425fi
4426
da93a1fd
AL
4427##########################################
4428# Do we need librt
8bacde8d
NC
4429# uClibc provides 2 versions of clock_gettime(), one with realtime
4430# support and one without. This means that the clock_gettime() don't
4431# need -lrt. We still need it for timer_create() so we check for this
4432# function in addition.
da93a1fd
AL
4433cat > $TMPC <<EOF
4434#include <signal.h>
4435#include <time.h>
8bacde8d
NC
4436int main(void) {
4437 timer_create(CLOCK_REALTIME, NULL, NULL);
4438 return clock_gettime(CLOCK_REALTIME, NULL);
4439}
da93a1fd
AL
4440EOF
4441
52166aa0 4442if compile_prog "" "" ; then
07ffa4bd 4443 :
8bacde8d 4444# we need pthread for static linking. use previous pthread test result
18e588b1
RL
4445elif compile_prog "" "$pthread_lib -lrt" ; then
4446 LIBS="$LIBS -lrt"
4447 libs_qga="$libs_qga -lrt"
da93a1fd
AL
4448fi
4449
31ff504d 4450if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
78723752 4451 "$haiku" != "yes" ; then
6362a53f
JQ
4452 libs_softmmu="-lutil $libs_softmmu"
4453fi
4454
de5071c5 4455##########################################
cd4ec0b4
GH
4456# spice probe
4457if test "$spice" != "no" ; then
4458 cat > $TMPC << EOF
4459#include <spice.h>
4460int main(void) { spice_server_new(); return 0; }
4461EOF
710fc4f5
JD
4462 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4463 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
65d5d3f9
SW
4464 if $pkg_config --atleast-version=0.12.0 spice-server && \
4465 $pkg_config --atleast-version=0.12.3 spice-protocol && \
cd4ec0b4
GH
4466 compile_prog "$spice_cflags" "$spice_libs" ; then
4467 spice="yes"
4468 libs_softmmu="$libs_softmmu $spice_libs"
4469 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
2e0e3c39
AL
4470 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4471 spice_server_version=$($pkg_config --modversion spice-server)
cd4ec0b4
GH
4472 else
4473 if test "$spice" = "yes" ; then
8efc9363
HT
4474 feature_not_found "spice" \
4475 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
cd4ec0b4
GH
4476 fi
4477 spice="no"
4478 fi
4479fi
4480
7b02f544 4481# check for smartcard support
7b02f544 4482if test "$smartcard" != "no"; then
0f5c642d 4483 if $pkg_config --atleast-version=2.5.1 libcacard; then
7b02f544
MAL
4484 libcacard_cflags=$($pkg_config --cflags libcacard)
4485 libcacard_libs=$($pkg_config --libs libcacard)
7b02f544 4486 smartcard="yes"
afd347ab 4487 else
7b02f544
MAL
4488 if test "$smartcard" = "yes"; then
4489 feature_not_found "smartcard" "Install libcacard devel"
111a38b0 4490 fi
7b02f544 4491 smartcard="no"
111a38b0
RR
4492 fi
4493fi
111a38b0 4494
2b2325ff
GH
4495# check for libusb
4496if test "$libusb" != "no" ; then
65d5d3f9 4497 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
2b2325ff 4498 libusb="yes"
ca871ec8
SW
4499 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4500 libusb_libs=$($pkg_config --libs libusb-1.0)
2b2325ff
GH
4501 else
4502 if test "$libusb" = "yes"; then
8efc9363 4503 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
2b2325ff
GH
4504 fi
4505 libusb="no"
4506 fi
4507fi
4508
69354a83
HG
4509# check for usbredirparser for usb network redirection support
4510if test "$usb_redir" != "no" ; then
65d5d3f9 4511 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
69354a83 4512 usb_redir="yes"
ca871ec8
SW
4513 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4514 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
69354a83
HG
4515 else
4516 if test "$usb_redir" = "yes"; then
21684af0 4517 feature_not_found "usb-redir" "Install usbredir devel"
69354a83
HG
4518 fi
4519 usb_redir="no"
4520 fi
4521fi
4522
d9840e25
TS
4523##########################################
4524# check if we have VSS SDK headers for win
4525
4526if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4527 case "$vss_win32_sdk" in
690604f6 4528 "") vss_win32_include="-isystem $source_path" ;;
d9840e25
TS
4529 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4530 # handle path with spaces. So we symlink the headers into ".sdk/vss".
690604f6 4531 vss_win32_include="-isystem $source_path/.sdk/vss"
d9840e25
TS
4532 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4533 ;;
690604f6 4534 *) vss_win32_include="-isystem $vss_win32_sdk"
d9840e25
TS
4535 esac
4536 cat > $TMPC << EOF
4537#define __MIDL_user_allocate_free_DEFINED__
4538#include <inc/win2003/vss.h>
4539int main(void) { return VSS_CTX_BACKUP; }
4540EOF
4541 if compile_prog "$vss_win32_include" "" ; then
4542 guest_agent_with_vss="yes"
4543 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
315d3184 4544 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
f33ca81f 4545 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
d9840e25
TS
4546 else
4547 if test "$vss_win32_sdk" != "" ; then
4548 echo "ERROR: Please download and install Microsoft VSS SDK:"
4549 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4550 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4551 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4552 echo "ERROR: The headers are extracted in the directory \`inc'."
4553 feature_not_found "VSS support"
4554 fi
4555 guest_agent_with_vss="no"
4556 fi
4557fi
4558
4559##########################################
4560# lookup Windows platform SDK (if not specified)
4561# The SDK is needed only to build .tlb (type library) file of guest agent
4562# VSS provider from the source. It is usually unnecessary because the
4563# pre-compiled .tlb file is included.
4564
4565if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4566 if test -z "$win_sdk"; then
4567 programfiles="$PROGRAMFILES"
4568 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4569 if test -n "$programfiles"; then
4570 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4571 else
4572 feature_not_found "Windows SDK"
4573 fi
4574 elif test "$win_sdk" = "no"; then
4575 win_sdk=""
4576 fi
4577fi
4578
50cbebb9
MR
4579##########################################
4580# check if mingw environment provides a recent ntddscsi.h
4581if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4582 cat > $TMPC << EOF
4583#include <windows.h>
4584#include <ntddscsi.h>
4585int main(void) {
4586#if !defined(IOCTL_SCSI_GET_ADDRESS)
4587#error Missing required ioctl definitions
4588#endif
4589 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4590 return addr.Lun;
4591}
4592EOF
4593 if compile_prog "" "" ; then
4594 guest_agent_ntddscsi=yes
c54e1eb4 4595 libs_qga="-lsetupapi $libs_qga"
50cbebb9
MR
4596 fi
4597fi
4598
9d9e1521
GH
4599##########################################
4600# virgl renderer probe
4601
4602if test "$virglrenderer" != "no" ; then
4603 cat > $TMPC << EOF
4604#include <virglrenderer.h>
4605int main(void) { virgl_renderer_poll(); return 0; }
4606EOF
4607 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4608 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4609 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4610 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4611 virglrenderer="yes"
4612 else
4613 if test "$virglrenderer" = "yes" ; then
4614 feature_not_found "virglrenderer"
4615 fi
4616 virglrenderer="no"
4617 fi
4618fi
4619
8ca80760
RH
4620##########################################
4621# capstone
4622
e219c499
RH
4623case "$capstone" in
4624 "" | yes)
4625 if $pkg_config capstone; then
4626 capstone=system
123ac0bb 4627 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
e219c499
RH
4628 capstone=git
4629 elif test -e "${source_path}/capstone/Makefile" ; then
4630 capstone=internal
4631 elif test -z "$capstone" ; then
4632 capstone=no
4633 else
4634 feature_not_found "capstone" "Install capstone devel or git submodule"
4635 fi
4636 ;;
4637
4638 system)
4639 if ! $pkg_config capstone; then
4640 feature_not_found "capstone" "Install capstone devel"
4641 fi
4642 ;;
4643esac
4644
4645case "$capstone" in
4646 git | internal)
4647 if test "$capstone" = git; then
4648 git_submodules="${git_submodules} capstone"
4649 fi
4650 mkdir -p capstone
4651 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4652 if test "$mingw32" = "yes"; then
4653 LIBCAPSTONE=capstone.lib
4654 else
4655 LIBCAPSTONE=libcapstone.a
4656 fi
4657 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4658 ;;
4659
4660 system)
8ca80760
RH
4661 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4662 LIBS="$($pkg_config --libs capstone) $LIBS"
e219c499
RH
4663 ;;
4664
4665 no)
4666 ;;
4667 *)
4668 error_exit "Unknown state for capstone: $capstone"
4669 ;;
4670esac
8ca80760 4671
5f6b9e8f
BS
4672##########################################
4673# check if we have fdatasync
4674
4675fdatasync=no
4676cat > $TMPC << EOF
4677#include <unistd.h>
d1722a27
AR
4678int main(void) {
4679#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4680return fdatasync(0);
4681#else
e172fe11 4682#error Not supported
d1722a27
AR
4683#endif
4684}
5f6b9e8f
BS
4685EOF
4686if compile_prog "" "" ; then
4687 fdatasync=yes
4688fi
4689
e78815a5
AF
4690##########################################
4691# check if we have madvise
4692
4693madvise=no
4694cat > $TMPC << EOF
4695#include <sys/types.h>
4696#include <sys/mman.h>
832ce9c2 4697#include <stddef.h>
e78815a5
AF
4698int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4699EOF
4700if compile_prog "" "" ; then
4701 madvise=yes
4702fi
4703
4704##########################################
4705# check if we have posix_madvise
4706
4707posix_madvise=no
4708cat > $TMPC << EOF
4709#include <sys/mman.h>
832ce9c2 4710#include <stddef.h>
e78815a5
AF
4711int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4712EOF
4713if compile_prog "" "" ; then
4714 posix_madvise=yes
4715fi
4716
9bc5a719
AG
4717##########################################
4718# check if we have posix_memalign()
4719
4720posix_memalign=no
4721cat > $TMPC << EOF
4722#include <stdlib.h>
4723int main(void) {
4724 void *p;
4725 return posix_memalign(&p, 8, 8);
4726}
4727EOF
4728if compile_prog "" "" ; then
4729 posix_memalign=yes
4730fi
4731
0a852417
PD
4732##########################################
4733# check if we have posix_syslog
4734
4735posix_syslog=no
4736cat > $TMPC << EOF
4737#include <syslog.h>
4738int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4739EOF
4740if compile_prog "" "" ; then
4741 posix_syslog=yes
4742fi
4743
401bc051
PM
4744##########################################
4745# check if we have sem_timedwait
4746
4747sem_timedwait=no
4748cat > $TMPC << EOF
4749#include <semaphore.h>
4750int main(void) { return sem_timedwait(0, 0); }
4751EOF
4752if compile_prog "" "" ; then
4753 sem_timedwait=yes
4754fi
4755
94a420b1
SH
4756##########################################
4757# check if trace backend exists
4758
5b808275 4759$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 4760if test "$?" -ne 0 ; then
5b808275
LV
4761 error_exit "invalid trace backends" \
4762 "Please choose supported trace backends."
94a420b1
SH
4763fi
4764
7e24e92a
SH
4765##########################################
4766# For 'ust' backend, test if ust headers are present
5b808275 4767if have_backend "ust"; then
7e24e92a 4768 cat > $TMPC << EOF
bf15f63c 4769#include <lttng/tracepoint.h>
7e24e92a
SH
4770int main(void) { return 0; }
4771EOF
c79ed23d 4772 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
bf15f63c 4773 if $pkg_config lttng-ust --exists; then
89138857 4774 lttng_ust_libs=$($pkg_config --libs lttng-ust)
bf15f63c 4775 else
c79ed23d 4776 lttng_ust_libs="-llttng-ust -ldl"
bf15f63c
MG
4777 fi
4778 if $pkg_config liburcu-bp --exists; then
89138857 4779 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
bf15f63c
MG
4780 else
4781 urcu_bp_libs="-lurcu-bp"
4782 fi
4783
4784 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4785 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
7e24e92a 4786 else
bf15f63c 4787 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
4788 fi
4789fi
b3d08c02
DB
4790
4791##########################################
4792# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 4793if have_backend "dtrace"; then
b3d08c02 4794 if ! has 'dtrace' ; then
76ad07a4 4795 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 4796 fi
c276b17d
DB
4797 trace_backend_stap="no"
4798 if has 'stap' ; then
4799 trace_backend_stap="yes"
4800 fi
b3d08c02
DB
4801fi
4802
023367e6 4803##########################################
519175a2 4804# check and set a backend for coroutine
d0e2fce5 4805
7c2acc70 4806# We prefer ucontext, but it's not always possible. The fallback
33c53c54
DB
4807# is sigcontext. On Windows the only valid backend is the Windows
4808# specific one.
7c2acc70
PM
4809
4810ucontext_works=no
4811if test "$darwin" != "yes"; then
4812 cat > $TMPC << EOF
d0e2fce5 4813#include <ucontext.h>
cdf84806
PM
4814#ifdef __stub_makecontext
4815#error Ignoring glibc stub makecontext which will always fail
4816#endif
75cafad7 4817int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 4818EOF
7c2acc70
PM
4819 if compile_prog "" "" ; then
4820 ucontext_works=yes
4821 fi
4822fi
4823
4824if test "$coroutine" = ""; then
4825 if test "$mingw32" = "yes"; then
4826 coroutine=win32
4827 elif test "$ucontext_works" = "yes"; then
4828 coroutine=ucontext
4829 else
4830 coroutine=sigaltstack
d0e2fce5 4831 fi
519175a2 4832else
7c2acc70
PM
4833 case $coroutine in
4834 windows)
4835 if test "$mingw32" != "yes"; then
4836 error_exit "'windows' coroutine backend only valid for Windows"
4837 fi
4838 # Unfortunately the user visible backend name doesn't match the
4839 # coroutine-*.c filename for this case, so we have to adjust it here.
4840 coroutine=win32
4841 ;;
4842 ucontext)
4843 if test "$ucontext_works" != "yes"; then
4844 feature_not_found "ucontext"
4845 fi
4846 ;;
33c53c54 4847 sigaltstack)
7c2acc70
PM
4848 if test "$mingw32" = "yes"; then
4849 error_exit "only the 'windows' coroutine backend is valid for Windows"
4850 fi
4851 ;;
4852 *)
4853 error_exit "unknown coroutine backend $coroutine"
4854 ;;
4855 esac
d0e2fce5
AK
4856fi
4857
70c60c08 4858if test "$coroutine_pool" = ""; then
33c53c54 4859 coroutine_pool=yes
70c60c08
SH
4860fi
4861
7d992e4d 4862if test "$debug_stack_usage" = "yes"; then
7d992e4d
PL
4863 if test "$coroutine_pool" = "yes"; then
4864 echo "WARN: disabling coroutine pool for stack usage debugging"
4865 coroutine_pool=no
4866 fi
4867fi
4868
4869
d2042378
AK
4870##########################################
4871# check if we have open_by_handle_at
4872
4e1797f9 4873open_by_handle_at=no
d2042378
AK
4874cat > $TMPC << EOF
4875#include <fcntl.h>
acc55ba8
SW
4876#if !defined(AT_EMPTY_PATH)
4877# error missing definition
4878#else
75cafad7 4879int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
acc55ba8 4880#endif
d2042378
AK
4881EOF
4882if compile_prog "" "" ; then
4883 open_by_handle_at=yes
4884fi
4885
e06a765e
HPB
4886########################################
4887# check if we have linux/magic.h
4888
4889linux_magic_h=no
4890cat > $TMPC << EOF
4891#include <linux/magic.h>
4892int main(void) {
75cafad7 4893 return 0;
e06a765e
HPB
4894}
4895EOF
4896if compile_prog "" "" ; then
4897 linux_magic_h=yes
4898fi
4899
06d71fa1 4900########################################
c95e3080
KW
4901# check whether we can disable warning option with a pragma (this is needed
4902# to silence warnings in the headers of some versions of external libraries).
4903# This test has to be compiled with -Werror as otherwise an unknown pragma is
4904# only a warning.
4905#
4906# If we can't selectively disable warning in the code, disable -Werror so that
4907# the build doesn't fail anyway.
4908
06d71fa1
PM
4909pragma_disable_unused_but_set=no
4910cat > $TMPC << EOF
e6f53fd5 4911#pragma GCC diagnostic push
c95e3080 4912#pragma GCC diagnostic ignored "-Wstrict-prototypes"
e6f53fd5 4913#pragma GCC diagnostic pop
c95e3080 4914
06d71fa1
PM
4915int main(void) {
4916 return 0;
4917}
4918EOF
4919if compile_prog "-Werror" "" ; then
cc6e3ca9 4920 pragma_diagnostic_available=yes
c95e3080
KW
4921else
4922 werror=no
06d71fa1
PM
4923fi
4924
3f4349dc 4925########################################
541be927 4926# check if we have valgrind/valgrind.h
3f4349dc
KW
4927
4928valgrind_h=no
4929cat > $TMPC << EOF
4930#include <valgrind/valgrind.h>
3f4349dc 4931int main(void) {
3f4349dc
KW
4932 return 0;
4933}
4934EOF
4935if compile_prog "" "" ; then
4936 valgrind_h=yes
4937fi
4938
8ab1bf12
LC
4939########################################
4940# check if environ is declared
4941
4942has_environ=no
4943cat > $TMPC << EOF
4944#include <unistd.h>
4945int main(void) {
c075a723 4946 environ = 0;
8ab1bf12
LC
4947 return 0;
4948}
4949EOF
4950if compile_prog "" "" ; then
4951 has_environ=yes
4952fi
4953
76a347e1
RH
4954########################################
4955# check if cpuid.h is usable.
4956
76a347e1
RH
4957cat > $TMPC << EOF
4958#include <cpuid.h>
4959int main(void) {
774d566c
PM
4960 unsigned a, b, c, d;
4961 int max = __get_cpuid_max(0, 0);
4962
4963 if (max >= 1) {
4964 __cpuid(1, a, b, c, d);
4965 }
4966
4967 if (max >= 7) {
4968 __cpuid_count(7, 0, a, b, c, d);
4969 }
4970
4971 return 0;
76a347e1
RH
4972}
4973EOF
4974if compile_prog "" "" ; then
4975 cpuid_h=yes
4976fi
4977
5dd89908
RH
4978##########################################
4979# avx2 optimization requirement check
4980#
4981# There is no point enabling this if cpuid.h is not usable,
4982# since we won't be able to select the new routines.
4983
4984if test $cpuid_h = yes; then
4985 cat > $TMPC << EOF
4986#pragma GCC push_options
4987#pragma GCC target("avx2")
4988#include <cpuid.h>
4989#include <immintrin.h>
4990static int bar(void *a) {
4991 __m256i x = *(__m256i *)a;
4992 return _mm256_testz_si256(x, x);
4993}
4994int main(int argc, char *argv[]) { return bar(argv[0]); }
4995EOF
4996 if compile_object "" ; then
4997 avx2_opt="yes"
4998 fi
4999fi
5000
f540166b
RH
5001########################################
5002# check if __[u]int128_t is usable.
5003
5004int128=no
5005cat > $TMPC << EOF
a00f66ab
SW
5006#if defined(__clang_major__) && defined(__clang_minor__)
5007# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5008# error __int128_t does not work in CLANG before 3.2
5009# endif
5010#endif
f540166b
RH
5011__int128_t a;
5012__uint128_t b;
5013int main (void) {
5014 a = a + b;
5015 b = a * b;
464e3671 5016 a = a * a;
f540166b
RH
5017 return 0;
5018}
5019EOF
5020if compile_prog "" "" ; then
5021 int128=yes
5022fi
76a347e1 5023
7ebee43e
RH
5024#########################################
5025# See if 128-bit atomic operations are supported.
5026
5027atomic128=no
5028if test "$int128" = "yes"; then
5029 cat > $TMPC << EOF
5030int main(void)
5031{
5032 unsigned __int128 x = 0, y = 0;
5033 y = __atomic_load_16(&x, 0);
5034 __atomic_store_16(&x, y, 0);
5035 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5036 return 0;
5037}
5038EOF
5039 if compile_prog "" "" ; then
5040 atomic128=yes
5041 fi
5042fi
5043
df79b996
RH
5044#########################################
5045# See if 64-bit atomic operations are supported.
5046# Note that without __atomic builtins, we can only
5047# assume atomic loads/stores max at pointer size.
5048
5049cat > $TMPC << EOF
5050#include <stdint.h>
5051int main(void)
5052{
5053 uint64_t x = 0, y = 0;
5054#ifdef __ATOMIC_RELAXED
5055 y = __atomic_load_8(&x, 0);
5056 __atomic_store_8(&x, y, 0);
5057 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5058 __atomic_exchange_8(&x, y, 0);
5059 __atomic_fetch_add_8(&x, y, 0);
5060#else
5061 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5062 __sync_lock_test_and_set(&x, y);
5063 __sync_val_compare_and_swap(&x, y, 0);
5064 __sync_fetch_and_add(&x, y);
5065#endif
5066 return 0;
5067}
5068EOF
5069if compile_prog "" "" ; then
5070 atomic64=yes
5071fi
5072
db432672
RH
5073########################################
5074# See if 16-byte vector operations are supported.
5075# Even without a vector unit the compiler may expand these.
5076# There is a bug in old GCC for PPC that crashes here.
5077# Unfortunately it's the system compiler for Centos 7.
5078
5079cat > $TMPC << EOF
5080typedef unsigned char U1 __attribute__((vector_size(16)));
5081typedef unsigned short U2 __attribute__((vector_size(16)));
5082typedef unsigned int U4 __attribute__((vector_size(16)));
5083typedef unsigned long long U8 __attribute__((vector_size(16)));
5084typedef signed char S1 __attribute__((vector_size(16)));
5085typedef signed short S2 __attribute__((vector_size(16)));
5086typedef signed int S4 __attribute__((vector_size(16)));
5087typedef signed long long S8 __attribute__((vector_size(16)));
5088static U1 a1, b1;
5089static U2 a2, b2;
5090static U4 a4, b4;
5091static U8 a8, b8;
5092static S1 c1;
5093static S2 c2;
5094static S4 c4;
5095static S8 c8;
5096static int i;
74912f6d
LV
5097void helper(void *d, void *a, int shift, int i);
5098void helper(void *d, void *a, int shift, int i)
5099{
5100 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5101 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5102 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5103 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5104}
db432672
RH
5105int main(void)
5106{
5107 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5108 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5109 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5110 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5111 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5112 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5113 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5114 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5115 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5116 return 0;
5117}
5118EOF
5119
5120vector16=no
5121if compile_prog "" "" ; then
5122 vector16=yes
5123fi
5124
1e6e9aca
RH
5125########################################
5126# check if getauxval is available.
5127
5128getauxval=no
5129cat > $TMPC << EOF
5130#include <sys/auxv.h>
5131int main(void) {
5132 return getauxval(AT_HWCAP) == 0;
5133}
5134EOF
5135if compile_prog "" "" ; then
5136 getauxval=yes
5137fi
5138
fd0e6053
JS
5139########################################
5140# check if ccache is interfering with
5141# semantic analysis of macros
5142
5e4dfd3d 5143unset CCACHE_CPP2
fd0e6053
JS
5144ccache_cpp2=no
5145cat > $TMPC << EOF
5146static const int Z = 1;
5147#define fn() ({ Z; })
5148#define TAUT(X) ((X) == Z)
5149#define PAREN(X, Y) (X == Y)
5150#define ID(X) (X)
5151int main(int argc, char *argv[])
5152{
5153 int x = 0, y = 0;
5154 x = ID(x);
5155 x = fn();
5156 fn();
5157 if (PAREN(x, y)) return 0;
5158 if (TAUT(Z)) return 0;
5159 return 0;
5160}
5161EOF
5162
5163if ! compile_object "-Werror"; then
5164 ccache_cpp2=yes
5165fi
5166
b553a042
JS
5167#################################################
5168# clang does not support glibc + FORTIFY_SOURCE.
5169
5170if test "$fortify_source" != "no"; then
5171 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5172 fortify_source="no";
e189091f 5173 elif test -n "$cxx" && has $cxx &&
cfcc7c14 5174 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
b553a042
JS
5175 fortify_source="no";
5176 else
5177 fortify_source="yes"
5178 fi
5179fi
5180
277abf15
JV
5181##########################################
5182# check if struct fsxattr is available via linux/fs.h
5183
5184have_fsxattr=no
5185cat > $TMPC << EOF
5186#include <linux/fs.h>
5187struct fsxattr foo;
5188int main(void) {
5189 return 0;
5190}
5191EOF
5192if compile_prog "" "" ; then
5193 have_fsxattr=yes
5194fi
5195
a40161cb
PB
5196##########################################
5197# check for usable membarrier system call
5198if test "$membarrier" = "yes"; then
5199 have_membarrier=no
5200 if test "$mingw32" = "yes" ; then
5201 have_membarrier=yes
5202 elif test "$linux" = "yes" ; then
5203 cat > $TMPC << EOF
5204 #include <linux/membarrier.h>
5205 #include <sys/syscall.h>
5206 #include <unistd.h>
5207 #include <stdlib.h>
5208 int main(void) {
5209 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5210 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5211 exit(0);
5212 }
5213EOF
5214 if compile_prog "" "" ; then
5215 have_membarrier=yes
5216 fi
5217 fi
5218 if test "$have_membarrier" = "no"; then
5219 feature_not_found "membarrier" "membarrier system call not available"
5220 fi
5221else
5222 # Do not enable it by default even for Mingw32, because it doesn't
5223 # work on Wine.
5224 membarrier=no
5225fi
5226
b66e10e4
PM
5227##########################################
5228# check if rtnetlink.h exists and is useful
575b22b1
LV
5229have_rtnetlink=no
5230cat > $TMPC << EOF
5231#include <linux/rtnetlink.h>
5232int main(void) {
5233 return IFLA_PROTO_DOWN;
5234}
5235EOF
5236if compile_prog "" "" ; then
5237 have_rtnetlink=yes
5238fi
5239
6a02c806
SH
5240##########################################
5241# check for usable AF_VSOCK environment
5242have_af_vsock=no
5243cat > $TMPC << EOF
5244#include <errno.h>
5245#include <sys/types.h>
5246#include <sys/socket.h>
5247#if !defined(AF_VSOCK)
5248# error missing AF_VSOCK flag
5249#endif
5250#include <linux/vm_sockets.h>
5251int main(void) {
5252 int sock, ret;
5253 struct sockaddr_vm svm;
5254 socklen_t len = sizeof(svm);
5255 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5256 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5257 if ((ret == -1) && (errno == ENOTCONN)) {
5258 return 0;
5259 }
5260 return -1;
5261}
5262EOF
5263if compile_prog "" "" ; then
5264 have_af_vsock=yes
5265fi
5266
f0d92b56
LM
5267##########################################
5268# check for usable AF_ALG environment
5269hava_afalg=no
5270cat > $TMPC << EOF
5271#include <errno.h>
5272#include <sys/types.h>
5273#include <sys/socket.h>
5274#include <linux/if_alg.h>
5275int main(void) {
5276 int sock;
5277 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5278 return sock;
5279}
5280EOF
5281if compile_prog "" "" ; then
5282 have_afalg=yes
5283fi
5284if test "$crypto_afalg" = "yes"
5285then
5286 if test "$have_afalg" != "yes"
5287 then
5288 error_exit "AF_ALG requested but could not be detected"
5289 fi
5290fi
5291
5292
c97d6d2c
SAGDR
5293#################################################
5294# Check to see if we have the Hypervisor framework
d2d08522 5295if [ "$darwin" = "yes" ] ; then
c97d6d2c
SAGDR
5296 cat > $TMPC << EOF
5297#include <Hypervisor/hv.h>
5298int main() { return 0;}
5299EOF
5300 if ! compile_object ""; then
5301 hvf='no'
5302 else
5303 hvf='yes'
5304 LDFLAGS="-framework Hypervisor $LDFLAGS"
5305 fi
5306fi
5307
6969ec6c
JC
5308#################################################
5309# Sparc implicitly links with --relax, which is
5310# incompatible with -r, so --no-relax should be
5311# given. It does no harm to give it on other
5312# platforms too.
5313
5314# Note: the prototype is needed since QEMU_CFLAGS
5315# contains -Wmissing-prototypes
5316cat > $TMPC << EOF
5317extern int foo(void);
5318int foo(void) { return 0; }
5319EOF
5320if ! compile_object ""; then
5321 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5322fi
7ecf44a5
PB
5323for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5324 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5325 LD_REL_FLAGS=$i
5326 break
5327 fi
5328done
5329if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5330 feature_not_found "modules" "Cannot find how to build relocatable objects"
6969ec6c
JC
5331fi
5332
4d04351f
CC
5333##########################################
5334# check for sysmacros.h
5335
5336have_sysmacros=no
5337cat > $TMPC << EOF
5338#include <sys/sysmacros.h>
5339int main(void) {
5340 return makedev(0, 0);
5341}
5342EOF
5343if compile_prog "" "" ; then
5344 have_sysmacros=yes
5345fi
5346
da92c3ff
AM
5347##########################################
5348# Veritas HyperScale block driver VxHS
5349# Check if libvxhs is installed
5350
5351if test "$vxhs" != "no" ; then
5352 cat > $TMPC <<EOF
5353#include <stdint.h>
5354#include <qnio/qnio_api.h>
5355
5356void *vxhs_callback;
5357
5358int main(void) {
5359 iio_init(QNIO_VERSION, vxhs_callback);
5360 return 0;
5361}
5362EOF
5363 vxhs_libs="-lvxhs -lssl"
5364 if compile_prog "" "$vxhs_libs" ; then
5365 vxhs=yes
5366 else
5367 if test "$vxhs" = "yes" ; then
5368 feature_not_found "vxhs block device" "Install libvxhs See github"
5369 fi
5370 vxhs=no
5371 fi
5372fi
5373
49e00a18
AG
5374##########################################
5375# check for _Static_assert()
5376
5377have_static_assert=no
5378cat > $TMPC << EOF
5379_Static_assert(1, "success");
5380int main(void) {
5381 return 0;
5382}
5383EOF
5384if compile_prog "" "" ; then
5385 have_static_assert=yes
5386fi
5387
e674605f
TG
5388##########################################
5389# check for utmpx.h, it is missing e.g. on OpenBSD
5390
5391have_utmpx=no
5392cat > $TMPC << EOF
5393#include <utmpx.h>
5394struct utmpx user_info;
5395int main(void) {
5396 return 0;
5397}
5398EOF
5399if compile_prog "" "" ; then
5400 have_utmpx=yes
5401fi
5402
247724cb
MAL
5403##########################################
5404# checks for sanitizers
5405
247724cb
MAL
5406have_asan=no
5407have_ubsan=no
d83414e1
MAL
5408have_asan_iface_h=no
5409have_asan_iface_fiber=no
247724cb
MAL
5410
5411if test "$sanitizers" = "yes" ; then
b9f44da2 5412 write_c_skeleton
247724cb
MAL
5413 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5414 have_asan=yes
5415 fi
b9f44da2
MAL
5416
5417 # we could use a simple skeleton for flags checks, but this also
5418 # detect the static linking issue of ubsan, see also:
5419 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5420 cat > $TMPC << EOF
5421#include <stdlib.h>
5422int main(void) {
5423 void *tmp = malloc(10);
5424 return *(int *)(tmp + 2);
5425}
5426EOF
247724cb
MAL
5427 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5428 have_ubsan=yes
5429 fi
d83414e1
MAL
5430
5431 if check_include "sanitizer/asan_interface.h" ; then
5432 have_asan_iface_h=yes
5433 fi
5434
5435 cat > $TMPC << EOF
5436#include <sanitizer/asan_interface.h>
5437int main(void) {
5438 __sanitizer_start_switch_fiber(0, 0, 0);
5439 return 0;
5440}
5441EOF
5442 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5443 have_asan_iface_fiber=yes
5444 fi
247724cb
MAL
5445fi
5446
7e24e92a 5447##########################################
e86ecd4b
JQ
5448# End of CC checks
5449# After here, no more $cc or $ld runs
5450
d83414e1
MAL
5451write_c_skeleton
5452
1d728c39
BS
5453if test "$gcov" = "yes" ; then
5454 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5455 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
b553a042 5456elif test "$fortify_source" = "yes" ; then
e600cdf3 5457 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
48e56d50
PB
5458elif test "$debug" = "no"; then
5459 CFLAGS="-O2 $CFLAGS"
e86ecd4b 5460fi
a316e378 5461
247724cb
MAL
5462if test "$have_asan" = "yes"; then
5463 CFLAGS="-fsanitize=address $CFLAGS"
d83414e1
MAL
5464 if test "$have_asan_iface_h" = "no" ; then
5465 echo "ASAN build enabled, but ASAN header missing." \
5466 "Without code annotation, the report may be inferior."
5467 elif test "$have_asan_iface_fiber" = "no" ; then
5468 echo "ASAN build enabled, but ASAN header is too old." \
5469 "Without code annotation, the report may be inferior."
5470 fi
247724cb
MAL
5471fi
5472if test "$have_ubsan" = "yes"; then
5473 CFLAGS="-fsanitize=undefined $CFLAGS"
5474fi
5475
6542aa9c
PL
5476##########################################
5477# Do we have libnfs
5478if test "$libnfs" != "no" ; then
b7d769c9 5479 if $pkg_config --atleast-version=1.9.3 libnfs; then
6542aa9c
PL
5480 libnfs="yes"
5481 libnfs_libs=$($pkg_config --libs libnfs)
6542aa9c
PL
5482 else
5483 if test "$libnfs" = "yes" ; then
8efc9363 5484 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6542aa9c
PL
5485 fi
5486 libnfs="no"
5487 fi
5488fi
1d728c39 5489
6ca026cb
PM
5490# Now we've finished running tests it's OK to add -Werror to the compiler flags
5491if test "$werror" = "yes"; then
5492 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5493fi
5494
e86ecd4b
JQ
5495if test "$solaris" = "no" ; then
5496 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
1156c669 5497 LDFLAGS="-Wl,--warn-common $LDFLAGS"
e86ecd4b
JQ
5498 fi
5499fi
5500
94dd53c5
GH
5501# test if pod2man has --utf8 option
5502if pod2man --help | grep -q utf8; then
5503 POD2MAN="pod2man --utf8"
5504else
5505 POD2MAN="pod2man"
5506fi
5507
952afb71
BS
5508# Use ASLR, no-SEH and DEP if available
5509if test "$mingw32" = "yes" ; then
5510 for flag in --dynamicbase --no-seh --nxcompat; do
e9a3591f 5511 if ld_has $flag ; then
952afb71
BS
5512 LDFLAGS="-Wl,$flag $LDFLAGS"
5513 fi
5514 done
5515fi
5516
10ea68b3 5517qemu_confdir=$sysconfdir$confsuffix
e26110cf 5518qemu_moddir=$libdir$confsuffix
528ae5b8 5519qemu_datadir=$datadir$confsuffix
834574ea 5520qemu_localedir="$datadir/locale"
e7b45cc4 5521
e0580342
KR
5522# We can only support ivshmem if we have eventfd
5523if [ "$eventfd" = "yes" ]; then
5524 ivshmem=yes
5525fi
5526
4b1c11fd
DB
5527tools=""
5528if test "$want_tools" = "yes" ; then
ca35f780 5529 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4b1c11fd
DB
5530 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5531 tools="qemu-nbd\$(EXESUF) $tools"
b1449edb
KR
5532 fi
5533 if [ "$ivshmem" = "yes" ]; then
a75eb03b 5534 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4b1c11fd
DB
5535 fi
5536fi
5537if test "$softmmu" = yes ; then
b855f8d1
PB
5538 if test "$linux" = yes; then
5539 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
aabfd88d
AF
5540 virtfs=yes
5541 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5542 else
5543 if test "$virtfs" = yes; then
b855f8d1 5544 error_exit "VirtFS requires libcap devel and libattr devel"
983eef5a 5545 fi
17500370 5546 virtfs=no
aabfd88d 5547 fi
fe8fc5ae
PB
5548 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5549 mpath=yes
5550 else
5551 if test "$mpath" = yes; then
5552 error_exit "Multipath requires libmpathpersist devel"
5553 fi
5554 mpath=no
5555 fi
b855f8d1
PB
5556 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5557 else
5558 if test "$virtfs" = yes; then
5559 error_exit "VirtFS is supported only on Linux"
5560 fi
5561 virtfs=no
fe8fc5ae
PB
5562 if test "$mpath" = yes; then
5563 error_exit "Multipath is supported only on Linux"
5564 fi
5565 mpath=no
17bff52b 5566 fi
ff69fd8c
LV
5567 if test "$xkbcommon" = "yes"; then
5568 tools="qemu-keymap\$(EXESUF) $tools"
5569 fi
6a021536 5570fi
9d6bc27b
MR
5571
5572# Probe for guest agent support/options
5573
e8ef31a3 5574if [ "$guest_agent" != "no" ]; then
b39297ae 5575 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
fafcaf1d 5576 tools="qemu-ga $tools"
e8ef31a3
MT
5577 guest_agent=yes
5578 elif [ "$guest_agent" != yes ]; then
5579 guest_agent=no
5580 else
5581 error_exit "Guest agent is not supported on this platform"
ca35f780 5582 fi
00c705fb 5583fi
ca35f780 5584
9d6bc27b
MR
5585# Guest agent Window MSI package
5586
5587if test "$guest_agent" != yes; then
5588 if test "$guest_agent_msi" = yes; then
5589 error_exit "MSI guest agent package requires guest agent enabled"
5590 fi
5591 guest_agent_msi=no
5592elif test "$mingw32" != "yes"; then
5593 if test "$guest_agent_msi" = "yes"; then
5594 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5595 fi
5596 guest_agent_msi=no
5597elif ! has wixl; then
5598 if test "$guest_agent_msi" = "yes"; then
5599 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5600 fi
5601 guest_agent_msi=no
1a34904e
MR
5602else
5603 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5604 # disabled explicitly
5605 if test "$guest_agent_msi" != "no"; then
5606 guest_agent_msi=yes
5607 fi
9d6bc27b
MR
5608fi
5609
1a34904e 5610if test "$guest_agent_msi" = "yes"; then
9d6bc27b
MR
5611 if test "$guest_agent_with_vss" = "yes"; then
5612 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5613 fi
5614
5615 if test "$QEMU_GA_MANUFACTURER" = ""; then
5616 QEMU_GA_MANUFACTURER=QEMU
5617 fi
5618
5619 if test "$QEMU_GA_DISTRO" = ""; then
5620 QEMU_GA_DISTRO=Linux
5621 fi
5622
5623 if test "$QEMU_GA_VERSION" = ""; then
89138857 5624 QEMU_GA_VERSION=$(cat $source_path/VERSION)
9d6bc27b
MR
5625 fi
5626
89138857 5627 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
9d6bc27b
MR
5628
5629 case "$cpu" in
5630 x86_64)
5631 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5632 ;;
5633 i386)
5634 QEMU_GA_MSI_ARCH="-D Arch=32"
5635 ;;
5636 *)
5637 error_exit "CPU $cpu not supported for building installation package"
5638 ;;
5639 esac
5640fi
5641
ca35f780
PB
5642# Mac OS X ships with a broken assembler
5643roms=
5644if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5645 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5646 "$softmmu" = yes ; then
e57218b6 5647 # Different host OS linkers have different ideas about the name of the ELF
c65d5e4e
BS
5648 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5649 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5650 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
e57218b6
PM
5651 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5652 ld_i386_emulation="$emu"
5653 roms="optionrom"
5654 break
5655 fi
5656 done
ca35f780 5657fi
d0384d1d 5658if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
39ac8455
DG
5659 roms="$roms spapr-rtas"
5660fi
ca35f780 5661
9933c305
CB
5662if test "$cpu" = "s390x" ; then
5663 roms="$roms s390-ccw"
5664fi
5665
964c6fa1 5666# Probe for the need for relocating the user-only binary.
92fe2ba8 5667if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
964c6fa1
RH
5668 textseg_addr=
5669 case "$cpu" in
479eb121
RH
5670 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5671 # ??? Rationale for choosing this address
964c6fa1
RH
5672 textseg_addr=0x60000000
5673 ;;
5674 mips)
479eb121
RH
5675 # A 256M aligned address, high in the address space, with enough
5676 # room for the code_gen_buffer above it before the stack.
5677 textseg_addr=0x60000000
964c6fa1
RH
5678 ;;
5679 esac
5680 if [ -n "$textseg_addr" ]; then
5681 cat > $TMPC <<EOF
5682 int main(void) { return 0; }
5683EOF
5684 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5685 if ! compile_prog "" "$textseg_ldflags"; then
5686 # In case ld does not support -Ttext-segment, edit the default linker
5687 # script via sed to set the .text start addr. This is needed on FreeBSD
5688 # at least.
92fe2ba8
PM
5689 if ! $ld --verbose >/dev/null 2>&1; then
5690 error_exit \
5691 "We need to link the QEMU user mode binaries at a" \
5692 "specific text address. Unfortunately your linker" \
5693 "doesn't support either the -Ttext-segment option or" \
5694 "printing the default linker script with --verbose." \
5695 "If you don't want the user mode binaries, pass the" \
5696 "--disable-user option to configure."
5697 fi
5698
964c6fa1
RH
5699 $ld --verbose | sed \
5700 -e '1,/==================================================/d' \
5701 -e '/==================================================/,$d' \
5702 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5703 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5704 textseg_ldflags="-Wl,-T../config-host.ld"
5705 fi
5706 fi
5707fi
5708
11cde1c8
BD
5709# Check that the C++ compiler exists and works with the C compiler.
5710# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5711if has $cxx; then
5712 cat > $TMPC <<EOF
5713int c_function(void);
5714int main(void) { return c_function(); }
5715EOF
5716
5717 compile_object
5718
5719 cat > $TMPCXX <<EOF
5720extern "C" {
5721 int c_function(void);
5722}
5723int c_function(void) { return 42; }
5724EOF
5725
5726 update_cxxflags
5727
5728 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5729 # C++ compiler $cxx works ok with C compiler $cc
5730 :
5731 else
5732 echo "C++ compiler $cxx does not work with C compiler $cc"
5733 echo "Disabling C++ specific optional code"
5734 cxx=
5735 fi
5736else
5737 echo "No C++ compiler available; disabling C++ specific optional code"
5738 cxx=
5739fi
5740
02d34f62
CR
5741echo_version() {
5742 if test "$1" = "yes" ; then
5743 echo "($2)"
5744 fi
5745}
5746
50e12060
JK
5747# prepend pixman and ftd flags after all config tests are done
5748QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5749libs_softmmu="$pixman_libs $libs_softmmu"
5ca9388a 5750
43ce4dfe 5751echo "Install prefix $prefix"
89138857 5752echo "BIOS directory $(eval echo $qemu_datadir)"
3d5eecab 5753echo "firmware path $(eval echo $firmwarepath)"
89138857
SW
5754echo "binary directory $(eval echo $bindir)"
5755echo "library directory $(eval echo $libdir)"
5756echo "module directory $(eval echo $qemu_moddir)"
5757echo "libexec directory $(eval echo $libexecdir)"
5758echo "include directory $(eval echo $includedir)"
5759echo "config directory $(eval echo $sysconfdir)"
11d9f695 5760if test "$mingw32" = "no" ; then
89138857
SW
5761echo "local state directory $(eval echo $local_statedir)"
5762echo "Manual directory $(eval echo $mandir)"
43ce4dfe 5763echo "ELF interp prefix $interp_prefix"
5a699bbb
LE
5764else
5765echo "local state directory queried at runtime"
d9840e25 5766echo "Windows SDK $win_sdk"
11d9f695 5767fi
5a67135a 5768echo "Source path $source_path"
cc84d63a 5769echo "GIT binary $git"
aef45d51 5770echo "GIT submodules $git_submodules"
43ce4dfe 5771echo "C compiler $cc"
83469015 5772echo "Host C compiler $host_cc"
83f73fce 5773echo "C++ compiler $cxx"
3c4a4d0d 5774echo "Objective-C compiler $objcc"
45d285ab 5775echo "ARFLAGS $ARFLAGS"
0c439cbf 5776echo "CFLAGS $CFLAGS"
a558ee17 5777echo "QEMU_CFLAGS $QEMU_CFLAGS"
0c439cbf 5778echo "LDFLAGS $LDFLAGS"
43ce4dfe 5779echo "make $make"
6a882643 5780echo "install $install"
c886edfb 5781echo "python $python"
e2d8830e
BS
5782if test "$slirp" = "yes" ; then
5783 echo "smbd $smbd"
5784fi
17969268 5785echo "module support $modules"
43ce4dfe 5786echo "host CPU $cpu"
de83cd02 5787echo "host big endian $bigendian"
97a847bc 5788echo "target list $target_list"
43ce4dfe 5789echo "gprof enabled $gprof"
03b4fe7d 5790echo "sparse enabled $sparse"
1625af87 5791echo "strip binaries $strip_opt"
05c2a3e7 5792echo "profiler $profiler"
43ce4dfe 5793echo "static build $static"
5b0753e0
FB
5794if test "$darwin" = "yes" ; then
5795 echo "Cocoa support $cocoa"
5796fi
89138857
SW
5797echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5798echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
925a0400 5799echo "GTK GL support $gtk_gl"
89138857 5800echo "VTE support $vte $(echo_version $vte $vteversion)"
a1c5e949 5801echo "TLS priority $tls_priority"
ddbb0d09 5802echo "GNUTLS support $gnutls"
b917da4c 5803echo "GNUTLS rnd $gnutls_rnd"
91bfcdb0 5804echo "libgcrypt $gcrypt"
37788f25 5805echo "libgcrypt kdf $gcrypt_kdf"
89138857 5806echo "nettle $nettle $(echo_version $nettle $nettle_version)"
fff2f982 5807echo "nettle kdf $nettle_kdf"
9a2fd434 5808echo "libtasn1 $tasn1"
4d3b6f6e 5809echo "curses support $curses"
9d9e1521 5810echo "virgl support $virglrenderer"
769ce76d 5811echo "curl support $curl"
67b915a5 5812echo "mingw32 support $mingw32"
0c58ac1c 5813echo "Audio drivers $audio_drv_list"
b64ec4e4
FZ
5814echo "Block whitelist (rw) $block_drv_rw_whitelist"
5815echo "Block whitelist (ro) $block_drv_ro_whitelist"
983eef5a 5816echo "VirtFS support $virtfs"
fe8fc5ae 5817echo "Multipath support $mpath"
821601ea
JS
5818echo "VNC support $vnc"
5819if test "$vnc" = "yes" ; then
821601ea
JS
5820 echo "VNC SASL support $vnc_sasl"
5821 echo "VNC JPEG support $vnc_jpeg"
5822 echo "VNC PNG support $vnc_png"
821601ea 5823fi
3142255c
BS
5824if test -n "$sparc_cpu"; then
5825 echo "Target Sparc Arch $sparc_cpu"
5826fi
e37630ca 5827echo "xen support $xen"
3996e85c
PD
5828if test "$xen" = "yes" ; then
5829 echo "xen ctrl version $xen_ctrl_version"
64a7ad6f 5830 echo "pv dom build $xen_pv_domain_build"
3996e85c 5831fi
2e4d9fb1 5832echo "brlapi support $brlapi"
a20a6f46 5833echo "bluez support $bluez"
a25dba17 5834echo "Documentation $docs"
40d6444e 5835echo "PIE $pie"
8a16d273 5836echo "vde support $vde"
58952137 5837echo "netmap support $netmap"
5c6c3a6c 5838echo "Linux AIO support $linux_aio"
758e8e38 5839echo "ATTR/XATTR support $attr"
77755340 5840echo "Install blobs $blobs"
b31a0277 5841echo "KVM support $kvm"
b0cb0a66 5842echo "HAX support $hax"
c97d6d2c 5843echo "HVF support $hvf"
d661d9a4 5844echo "WHPX support $whpx"
b3f6ea7e
PB
5845echo "TCG support $tcg"
5846if test "$tcg" = "yes" ; then
5847 echo "TCG debug enabled $debug_tcg"
5848 echo "TCG interpreter $tcg_interpreter"
5849fi
5a22ab71 5850echo "malloc trim support $malloc_trim"
2da776db 5851echo "RDMA support $rdma"
f652e6af 5852echo "fdt support $fdt"
a40161cb 5853echo "membarrier $membarrier"
ceb42de8 5854echo "preadv support $preadv"
5f6b9e8f 5855echo "fdatasync $fdatasync"
e78815a5
AF
5856echo "madvise $madvise"
5857echo "posix_madvise $posix_madvise"
9bc5a719 5858echo "posix_memalign $posix_memalign"
47e98658 5859echo "libcap-ng support $cap_ng"
d5970055 5860echo "vhost-net support $vhost_net"
042cea27 5861echo "vhost-crypto support $vhost_crypto"
5e9be92d 5862echo "vhost-scsi support $vhost_scsi"
fc0b9b0e 5863echo "vhost-vsock support $vhost_vsock"
e6a74868 5864echo "vhost-user support $vhost_user"
5b808275 5865echo "Trace backends $trace_backends"
713572a7 5866if have_backend "simple"; then
9410b56c 5867echo "Trace output file $trace_file-<pid>"
e00e36fb 5868fi
89138857 5869echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
f27aaf4b 5870echo "rbd support $rbd"
dce512de 5871echo "xfsctl support $xfs"
7b02f544 5872echo "smartcard support $smartcard"
2b2325ff 5873echo "libusb $libusb"
69354a83 5874echo "usb net redir $usb_redir"
da076ffe 5875echo "OpenGL support $opengl"
014cb152 5876echo "OpenGL dmabufs $opengl_dmabuf"
c589b249 5877echo "libiscsi support $libiscsi"
6542aa9c 5878echo "libnfs support $libnfs"
d138cee9 5879echo "build guest agent $guest_agent"
d9840e25 5880echo "QGA VSS support $guest_agent_with_vss"
50cbebb9 5881echo "QGA w32 disk info $guest_agent_ntddscsi"
4c875d89 5882echo "QGA MSI support $guest_agent_msi"
f794573e 5883echo "seccomp support $seccomp"
7c2acc70 5884echo "coroutine backend $coroutine"
70c60c08 5885echo "coroutine pool $coroutine_pool"
7d992e4d 5886echo "debug stack usage $debug_stack_usage"
f0d92b56 5887echo "crypto afalg $crypto_afalg"
eb100396 5888echo "GlusterFS support $glusterfs"
1d728c39
BS
5889echo "gcov $gcov_tool"
5890echo "gcov enabled $gcov"
ab214c29 5891echo "TPM support $tpm"
0a12ec87 5892echo "libssh2 support $libssh2"
3b8acc11 5893echo "TPM passthrough $tpm_passthrough"
f4ede81e 5894echo "TPM emulator $tpm_emulator"
3556c233 5895echo "QOM debugging $qom_cast_debug"
ed1701c6 5896echo "Live block migration $live_block_migration"
607dacd0
QN
5897echo "lzo support $lzo"
5898echo "snappy support $snappy"
6b383c08 5899echo "bzip2 support $bzip2"
a99d57bb 5900echo "NUMA host support $numa"
ed279a06 5901echo "libxml2 $libxml2"
2847b469 5902echo "tcmalloc support $tcmalloc"
7b01cb97 5903echo "jemalloc support $jemalloc"
99f2dbd3 5904echo "avx2 optimization $avx2_opt"
a6b1d4c0 5905echo "replication support $replication"
da92c3ff 5906echo "VxHS block device $vxhs"
8ca80760 5907echo "capstone $capstone"
67b915a5 5908
1ba16968 5909if test "$sdl_too_old" = "yes"; then
24b55b96 5910echo "-> Your SDL version is too old - please upgrade to have SDL support"
7c1f25b4 5911fi
7d13299d 5912
b7715af2
DB
5913if test "$gtkabi" = "2.0"; then
5914 echo
5915 echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
5916 echo "WARNING: future releases. Please switch to using GTK 3.0"
5917fi
5918
e52c6ba3
DB
5919if test "$sdlabi" = "1.2"; then
5920 echo
5921 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
5922 echo "WARNING: future releases. Please switch to using SDL 2.0"
5923fi
5924
898be3e0
PM
5925if test "$supported_cpu" = "no"; then
5926 echo
5927 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5928 echo
5929 echo "CPU host architecture $cpu support is not currently maintained."
5930 echo "The QEMU project intends to remove support for this host CPU in"
5931 echo "a future release if nobody volunteers to maintain it and to"
5932 echo "provide a build host for our continuous integration setup."
5933 echo "configure has succeeded and you can continue to build, but"
5934 echo "if you care about QEMU on this platform you should contact"
5935 echo "us upstream at qemu-devel@nongnu.org."
5936fi
5937
5938if test "$supported_os" = "no"; then
5939 echo
5940 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5941 echo
c50126aa
PM
5942 echo "Host OS $targetos support is not currently maintained."
5943 echo "The QEMU project intends to remove support for this host OS in"
898be3e0
PM
5944 echo "a future release if nobody volunteers to maintain it and to"
5945 echo "provide a build host for our continuous integration setup."
5946 echo "configure has succeeded and you can continue to build, but"
5947 echo "if you care about QEMU on this platform you should contact"
5948 echo "us upstream at qemu-devel@nongnu.org."
5949fi
5950
98ec69ac 5951config_host_mak="config-host.mak"
98ec69ac 5952
dbd99ae3
SW
5953echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5954
98ec69ac 5955echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 5956echo >> $config_host_mak
98ec69ac 5957
e6c3b0f7 5958echo all: >> $config_host_mak
99d7cc75
PB
5959echo "prefix=$prefix" >> $config_host_mak
5960echo "bindir=$bindir" >> $config_host_mak
3aa5d2be 5961echo "libdir=$libdir" >> $config_host_mak
8bf188aa 5962echo "libexecdir=$libexecdir" >> $config_host_mak
0f94d6da 5963echo "includedir=$includedir" >> $config_host_mak
99d7cc75 5964echo "mandir=$mandir" >> $config_host_mak
99d7cc75 5965echo "sysconfdir=$sysconfdir" >> $config_host_mak
22d07038 5966echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
9afa52ce 5967echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
3d5eecab 5968echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
9afa52ce 5969echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
e26110cf 5970echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5a699bbb
LE
5971if test "$mingw32" = "no" ; then
5972 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5973fi
f354b1a1 5974echo "qemu_helperdir=$libexecdir" >> $config_host_mak
834574ea 5975echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
f544a488 5976echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
cc84d63a 5977echo "GIT=$git" >> $config_host_mak
aef45d51 5978echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
f62bbee5 5979echo "GIT_UPDATE=$git_update" >> $config_host_mak
804edf29 5980
98ec69ac 5981echo "ARCH=$ARCH" >> $config_host_mak
727e5283 5982
f8393946 5983if test "$debug_tcg" = "yes" ; then
2358a494 5984 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 5985fi
1625af87 5986if test "$strip_opt" = "yes" ; then
52ba784d 5987 echo "STRIP=${strip}" >> $config_host_mak
1625af87 5988fi
7d13299d 5989if test "$bigendian" = "yes" ; then
e2542fe2 5990 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 5991fi
67b915a5 5992if test "$mingw32" = "yes" ; then
98ec69ac 5993 echo "CONFIG_WIN32=y" >> $config_host_mak
89138857 5994 rc_version=$(cat $source_path/VERSION)
9fe6de94
BS
5995 version_major=${rc_version%%.*}
5996 rc_version=${rc_version#*.}
5997 version_minor=${rc_version%%.*}
5998 rc_version=${rc_version#*.}
5999 version_subminor=${rc_version%%.*}
6000 version_micro=0
6001 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6002 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
d9840e25
TS
6003 if test "$guest_agent_with_vss" = "yes" ; then
6004 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 6005 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
6006 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6007 fi
50cbebb9
MR
6008 if test "$guest_agent_ntddscsi" = "yes" ; then
6009 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6010 fi
1a34904e 6011 if test "$guest_agent_msi" = "yes"; then
d661d9a4 6012 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
9dacf32d
YH
6013 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6014 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6015 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6016 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6017 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6018 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6019 fi
210fa556 6020else
35f4df27 6021 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
6022fi
6023
6024if test "$linux" = "yes" ; then
6025 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 6026fi
128ab2ff 6027
83fb7adf 6028if test "$darwin" = "yes" ; then
98ec69ac 6029 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 6030fi
b29fe3ed 6031
ec530c81 6032if test "$solaris" = "yes" ; then
98ec69ac 6033 echo "CONFIG_SOLARIS=y" >> $config_host_mak
ec530c81 6034fi
179cf400
AF
6035if test "$haiku" = "yes" ; then
6036 echo "CONFIG_HAIKU=y" >> $config_host_mak
6037fi
97a847bc 6038if test "$static" = "yes" ; then
98ec69ac 6039 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 6040fi
1ba16968 6041if test "$profiler" = "yes" ; then
2358a494 6042 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 6043fi
c20709aa 6044if test "$slirp" = "yes" ; then
98ec69ac 6045 echo "CONFIG_SLIRP=y" >> $config_host_mak
e2d8830e 6046 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
c20709aa 6047fi
8a16d273 6048if test "$vde" = "yes" ; then
98ec69ac 6049 echo "CONFIG_VDE=y" >> $config_host_mak
e2ad6f16 6050 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
8a16d273 6051fi
58952137
VM
6052if test "$netmap" = "yes" ; then
6053 echo "CONFIG_NETMAP=y" >> $config_host_mak
6054fi
015a33bd
GA
6055if test "$l2tpv3" = "yes" ; then
6056 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6057fi
47e98658
CB
6058if test "$cap_ng" = "yes" ; then
6059 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6060fi
2358a494 6061echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 6062for drv in $audio_drv_list; do
1ef1ec2a 6063 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
ce3dc033 6064 case "$drv" in
051c7d5c 6065 alsa | oss | pa | sdl)
ce3dc033
GH
6066 echo "$def=m" >> $config_host_mak ;;
6067 *)
6068 echo "$def=y" >> $config_host_mak ;;
6069 esac
0c58ac1c 6070done
b1149911
FZ
6071echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6072echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6073echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6074echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6075echo "OSS_LIBS=$oss_libs" >> $config_host_mak
67f86e8e
JQ
6076if test "$audio_pt_int" = "yes" ; then
6077 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6078fi
d5631638 6079if test "$audio_win_int" = "yes" ; then
6080 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6081fi
b64ec4e4
FZ
6082echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6083echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
821601ea
JS
6084if test "$vnc" = "yes" ; then
6085 echo "CONFIG_VNC=y" >> $config_host_mak
6086fi
2f9606b3 6087if test "$vnc_sasl" = "yes" ; then
98ec69ac 6088 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
2f9606b3 6089fi
821601ea 6090if test "$vnc_jpeg" = "yes" ; then
2f6f5c7a 6091 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
2f6f5c7a 6092fi
821601ea 6093if test "$vnc_png" = "yes" ; then
efe556ad 6094 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
efe556ad 6095fi
6a021536
GH
6096if test "$xkbcommon" = "yes" ; then
6097 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6098 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6099fi
76655d6d 6100if test "$fnmatch" = "yes" ; then
2358a494 6101 echo "CONFIG_FNMATCH=y" >> $config_host_mak
76655d6d 6102fi
dce512de
CH
6103if test "$xfs" = "yes" ; then
6104 echo "CONFIG_XFS=y" >> $config_host_mak
6105fi
89138857 6106qemu_version=$(head $source_path/VERSION)
98ec69ac 6107echo "VERSION=$qemu_version" >>$config_host_mak
2358a494 6108echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 6109echo "SRC_PATH=$source_path" >> $config_host_mak
98ec69ac 6110echo "TARGET_DIRS=$target_list" >> $config_host_mak
a25dba17 6111if [ "$docs" = "yes" ] ; then
98ec69ac 6112 echo "BUILD_DOCS=yes" >> $config_host_mak
cc8ae6de 6113fi
17969268 6114if test "$modules" = "yes"; then
e26110cf
FZ
6115 # $shacmd can generate a hash started with digit, which the compiler doesn't
6116 # like as an symbol. So prefix it with an underscore
89138857 6117 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
17969268
FZ
6118 echo "CONFIG_MODULES=y" >> $config_host_mak
6119fi
8781595b
GH
6120if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6121 echo "CONFIG_X11=y" >> $config_host_mak
6122 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6123 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6124fi
1ac88f28 6125if test "$sdl" = "yes" ; then
96400a14 6126 echo "CONFIG_SDL=m" >> $config_host_mak
a3f4d63d 6127 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
1ac88f28 6128 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
8ecc89f6 6129 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
49ecc3fa
FB
6130fi
6131if test "$cocoa" = "yes" ; then
98ec69ac 6132 echo "CONFIG_COCOA=y" >> $config_host_mak
4d3b6f6e
AZ
6133fi
6134if test "$curses" = "yes" ; then
2373f7d5
GH
6135 echo "CONFIG_CURSES=m" >> $config_host_mak
6136 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6137 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
49ecc3fa 6138fi
099d6b0f 6139if test "$pipe2" = "yes" ; then
2358a494 6140 echo "CONFIG_PIPE2=y" >> $config_host_mak
099d6b0f 6141fi
40ff6d7e
KW
6142if test "$accept4" = "yes" ; then
6143 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6144fi
3ce34dfb 6145if test "$splice" = "yes" ; then
2358a494 6146 echo "CONFIG_SPLICE=y" >> $config_host_mak
3ce34dfb 6147fi
c2882b96
RV
6148if test "$eventfd" = "yes" ; then
6149 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6150fi
751bcc39
MAL
6151if test "$memfd" = "yes" ; then
6152 echo "CONFIG_MEMFD=y" >> $config_host_mak
6153fi
d0927938
UH
6154if test "$fallocate" = "yes" ; then
6155 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6156fi
3d4fa43e
KK
6157if test "$fallocate_punch_hole" = "yes" ; then
6158 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6159fi
b953f075
DL
6160if test "$fallocate_zero_range" = "yes" ; then
6161 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6162fi
ed911435
KW
6163if test "$posix_fallocate" = "yes" ; then
6164 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6165fi
c727f47d
PM
6166if test "$sync_file_range" = "yes" ; then
6167 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6168fi
dace20dc
PM
6169if test "$fiemap" = "yes" ; then
6170 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6171fi
d0927938
UH
6172if test "$dup3" = "yes" ; then
6173 echo "CONFIG_DUP3=y" >> $config_host_mak
6174fi
4e0c6529
AB
6175if test "$ppoll" = "yes" ; then
6176 echo "CONFIG_PPOLL=y" >> $config_host_mak
6177fi
cd758dd0
AB
6178if test "$prctl_pr_set_timerslack" = "yes" ; then
6179 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6180fi
3b6edd16
PM
6181if test "$epoll" = "yes" ; then
6182 echo "CONFIG_EPOLL=y" >> $config_host_mak
6183fi
6184if test "$epoll_create1" = "yes" ; then
6185 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6186fi
a8fd1aba
PM
6187if test "$sendfile" = "yes" ; then
6188 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6189fi
51834341
RV
6190if test "$timerfd" = "yes" ; then
6191 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6192fi
9af5c906
RV
6193if test "$setns" = "yes" ; then
6194 echo "CONFIG_SETNS=y" >> $config_host_mak
6195fi
38860a03
AM
6196if test "$clock_adjtime" = "yes" ; then
6197 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6198fi
5a03cd00
AM
6199if test "$syncfs" = "yes" ; then
6200 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6201fi
3b3f24ad 6202if test "$inotify" = "yes" ; then
2358a494 6203 echo "CONFIG_INOTIFY=y" >> $config_host_mak
3b3f24ad 6204fi
c05c7a73
RV
6205if test "$inotify1" = "yes" ; then
6206 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6207fi
401bc051
PM
6208if test "$sem_timedwait" = "yes" ; then
6209 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6210fi
6ae9a1f4
JQ
6211if test "$byteswap_h" = "yes" ; then
6212 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6213fi
6214if test "$bswap_h" = "yes" ; then
6215 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6216fi
769ce76d 6217if test "$curl" = "yes" ; then
d3399d7c 6218 echo "CONFIG_CURL=m" >> $config_host_mak
b1d5a277 6219 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6ebc91e5 6220 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
769ce76d 6221fi
2e4d9fb1 6222if test "$brlapi" = "yes" ; then
98ec69ac 6223 echo "CONFIG_BRLAPI=y" >> $config_host_mak
8eca2889 6224 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
2e4d9fb1 6225fi
fb599c9a 6226if test "$bluez" = "yes" ; then
98ec69ac 6227 echo "CONFIG_BLUEZ=y" >> $config_host_mak
ef7635ec 6228 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
fb599c9a 6229fi
d46f7c9e 6230if test "$glib_subprocess" = "yes" ; then
9d41401b
MT
6231 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
6232fi
a4ccabcf 6233if test "$gtk" = "yes" ; then
e0fb129c 6234 echo "CONFIG_GTK=m" >> $config_host_mak
a3f4d63d 6235 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
a4ccabcf 6236 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
014cb152 6237 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
925a0400
GH
6238 if test "$gtk_gl" = "yes" ; then
6239 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6240 fi
bbbf9bfb 6241fi
a1c5e949 6242echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
ddbb0d09
DB
6243if test "$gnutls" = "yes" ; then
6244 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6245fi
b917da4c
DB
6246if test "$gnutls_rnd" = "yes" ; then
6247 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6248fi
91bfcdb0
DB
6249if test "$gcrypt" = "yes" ; then
6250 echo "CONFIG_GCRYPT=y" >> $config_host_mak
1f923c70
LM
6251 if test "$gcrypt_hmac" = "yes" ; then
6252 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6253 fi
37788f25
DB
6254 if test "$gcrypt_kdf" = "yes" ; then
6255 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6256 fi
62893b67 6257fi
91bfcdb0
DB
6258if test "$nettle" = "yes" ; then
6259 echo "CONFIG_NETTLE=y" >> $config_host_mak
becaeb72 6260 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
fff2f982
DB
6261 if test "$nettle_kdf" = "yes" ; then
6262 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6263 fi
ed754746 6264fi
9a2fd434
DB
6265if test "$tasn1" = "yes" ; then
6266 echo "CONFIG_TASN1=y" >> $config_host_mak
6267fi
559607ea
DB
6268if test "$have_ifaddrs_h" = "yes" ; then
6269 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6270fi
6b39b063
EB
6271if test "$have_broken_size_max" = "yes" ; then
6272 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6273fi
277abf15
JV
6274
6275# Work around a system header bug with some kernel/XFS header
6276# versions where they both try to define 'struct fsxattr':
6277# xfs headers will not try to redefine structs from linux headers
6278# if this macro is set.
6279if test "$have_fsxattr" = "yes" ; then
6280 echo "HAVE_FSXATTR=y" >> $config_host_mak
6281fi
bbbf9bfb
SW
6282if test "$vte" = "yes" ; then
6283 echo "CONFIG_VTE=y" >> $config_host_mak
a4ccabcf 6284 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
e0fb129c 6285 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
a4ccabcf 6286fi
9d9e1521
GH
6287if test "$virglrenderer" = "yes" ; then
6288 echo "CONFIG_VIRGL=y" >> $config_host_mak
6289 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6290 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6291fi
e37630ca 6292if test "$xen" = "yes" ; then
6dbd588a 6293 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 6294 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
64a7ad6f
IC
6295 if test "$xen_pv_domain_build" = "yes" ; then
6296 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6297 fi
e37630ca 6298fi
5c6c3a6c
CH
6299if test "$linux_aio" = "yes" ; then
6300 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6301fi
758e8e38
VJ
6302if test "$attr" = "yes" ; then
6303 echo "CONFIG_ATTR=y" >> $config_host_mak
6304fi
4f26f2b6
AK
6305if test "$libattr" = "yes" ; then
6306 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6307fi
983eef5a
MI
6308if test "$virtfs" = "yes" ; then
6309 echo "CONFIG_VIRTFS=y" >> $config_host_mak
758e8e38 6310fi
fe8fc5ae
PB
6311if test "$mpath" = "yes" ; then
6312 echo "CONFIG_MPATH=y" >> $config_host_mak
6313fi
5e9be92d
NB
6314if test "$vhost_scsi" = "yes" ; then
6315 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6316fi
e6a74868 6317if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
03ce5744
NN
6318 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6319fi
042cea27
GA
6320if test "$vhost_crypto" = "yes" ; then
6321 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6322fi
fc0b9b0e
SH
6323if test "$vhost_vsock" = "yes" ; then
6324 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6325fi
e6a74868
MAL
6326if test "$vhost_user" = "yes" ; then
6327 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6328fi
77755340 6329if test "$blobs" = "yes" ; then
98ec69ac 6330 echo "INSTALL_BLOBS=yes" >> $config_host_mak
77755340 6331fi
bf9298b9 6332if test "$iovec" = "yes" ; then
2358a494 6333 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 6334fi
ceb42de8 6335if test "$preadv" = "yes" ; then
2358a494 6336 echo "CONFIG_PREADV=y" >> $config_host_mak
ceb42de8 6337fi
f652e6af 6338if test "$fdt" = "yes" ; then
3f0855b1 6339 echo "CONFIG_FDT=y" >> $config_host_mak
f652e6af 6340fi
a40161cb
PB
6341if test "$membarrier" = "yes" ; then
6342 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6343fi
dcc38d1c
MT
6344if test "$signalfd" = "yes" ; then
6345 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6346fi
b3f6ea7e
PB
6347if test "$tcg" = "yes"; then
6348 echo "CONFIG_TCG=y" >> $config_host_mak
6349 if test "$tcg_interpreter" = "yes" ; then
6350 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6351 fi
9195b2c2 6352fi
5f6b9e8f
BS
6353if test "$fdatasync" = "yes" ; then
6354 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6355fi
e78815a5
AF
6356if test "$madvise" = "yes" ; then
6357 echo "CONFIG_MADVISE=y" >> $config_host_mak
6358fi
6359if test "$posix_madvise" = "yes" ; then
6360 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6361fi
9bc5a719
AG
6362if test "$posix_memalign" = "yes" ; then
6363 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6364fi
97a847bc 6365
cd4ec0b4
GH
6366if test "$spice" = "yes" ; then
6367 echo "CONFIG_SPICE=y" >> $config_host_mak
6368fi
36707144 6369
7b02f544
MAL
6370if test "$smartcard" = "yes" ; then
6371 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7b62bf5a
FZ
6372 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6373 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
111a38b0
RR
6374fi
6375
2b2325ff
GH
6376if test "$libusb" = "yes" ; then
6377 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
b878b652
FZ
6378 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6379 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
2b2325ff
GH
6380fi
6381
69354a83
HG
6382if test "$usb_redir" = "yes" ; then
6383 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
cc7923fc
FZ
6384 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6385 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
69354a83
HG
6386fi
6387
da076ffe
GH
6388if test "$opengl" = "yes" ; then
6389 echo "CONFIG_OPENGL=y" >> $config_host_mak
6390 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
014cb152
GH
6391 if test "$opengl_dmabuf" = "yes" ; then
6392 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6393 fi
20ff075b
MW
6394fi
6395
5a22ab71
YZ
6396if test "$malloc_trim" = "yes" ; then
6397 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6398fi
6399
99f2dbd3
LL
6400if test "$avx2_opt" = "yes" ; then
6401 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6402fi
6403
607dacd0
QN
6404if test "$lzo" = "yes" ; then
6405 echo "CONFIG_LZO=y" >> $config_host_mak
6406fi
6407
6408if test "$snappy" = "yes" ; then
6409 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6410fi
6411
6b383c08
PW
6412if test "$bzip2" = "yes" ; then
6413 echo "CONFIG_BZIP2=y" >> $config_host_mak
6414 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6415fi
6416
c589b249 6417if test "$libiscsi" = "yes" ; then
d3399d7c 6418 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6ebc91e5
FZ
6419 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6420 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
c589b249
RS
6421fi
6422
6542aa9c 6423if test "$libnfs" = "yes" ; then
4be4879f
CL
6424 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6425 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6542aa9c
PL
6426fi
6427
f794573e
EO
6428if test "$seccomp" = "yes"; then
6429 echo "CONFIG_SECCOMP=y" >> $config_host_mak
c3883e1f
FZ
6430 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6431 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
f794573e
EO
6432fi
6433
83fb7adf 6434# XXX: suppress that
7d3505c5 6435if [ "$bsd" = "yes" ] ; then
2358a494 6436 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
6437fi
6438
4d9310f4
DB
6439if test "$localtime_r" = "yes" ; then
6440 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6441fi
3556c233
PB
6442if test "$qom_cast_debug" = "yes" ; then
6443 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6444fi
f27aaf4b 6445if test "$rbd" = "yes" ; then
d3399d7c 6446 echo "CONFIG_RBD=m" >> $config_host_mak
6ebc91e5
FZ
6447 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6448 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
d0e2fce5
AK
6449fi
6450
7c2acc70 6451echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
6452if test "$coroutine_pool" = "yes" ; then
6453 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6454else
6455 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6456fi
20ff6c80 6457
7d992e4d
PL
6458if test "$debug_stack_usage" = "yes" ; then
6459 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6460fi
6461
f0d92b56
LM
6462if test "$crypto_afalg" = "yes" ; then
6463 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6464fi
6465
d2042378
AK
6466if test "$open_by_handle_at" = "yes" ; then
6467 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6468fi
6469
e06a765e
HPB
6470if test "$linux_magic_h" = "yes" ; then
6471 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
8ab1bf12
LC
6472fi
6473
cc6e3ca9
GH
6474if test "$pragma_diagnostic_available" = "yes" ; then
6475 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
06d71fa1
PM
6476fi
6477
3f4349dc
KW
6478if test "$valgrind_h" = "yes" ; then
6479 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6480fi
6481
d83414e1
MAL
6482if test "$have_asan_iface_fiber" = "yes" ; then
6483 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6484fi
6485
8ab1bf12
LC
6486if test "$has_environ" = "yes" ; then
6487 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
e06a765e
HPB
6488fi
6489
76a347e1
RH
6490if test "$cpuid_h" = "yes" ; then
6491 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6492fi
6493
f540166b
RH
6494if test "$int128" = "yes" ; then
6495 echo "CONFIG_INT128=y" >> $config_host_mak
6496fi
6497
7ebee43e
RH
6498if test "$atomic128" = "yes" ; then
6499 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6500fi
6501
df79b996
RH
6502if test "$atomic64" = "yes" ; then
6503 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6504fi
6505
db432672
RH
6506if test "$vector16" = "yes" ; then
6507 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6508fi
6509
1e6e9aca
RH
6510if test "$getauxval" = "yes" ; then
6511 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6512fi
6513
eb100396 6514if test "$glusterfs" = "yes" ; then
d3399d7c 6515 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6ebc91e5
FZ
6516 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6517 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
0c14fb47
BR
6518fi
6519
d85fa9eb
JC
6520if test "$glusterfs_xlator_opt" = "yes" ; then
6521 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6522fi
6523
0c14fb47
BR
6524if test "$glusterfs_discard" = "yes" ; then
6525 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
eb100396 6526fi
e06a765e 6527
df3a429a
NV
6528if test "$glusterfs_fallocate" = "yes" ; then
6529 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6530fi
6531
7c815372
BR
6532if test "$glusterfs_zerofill" = "yes" ; then
6533 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6534fi
6535
0a12ec87 6536if test "$libssh2" = "yes" ; then
d3399d7c 6537 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6ebc91e5
FZ
6538 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6539 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
0a12ec87
RJ
6540fi
6541
ed1701c6
DDAG
6542if test "$live_block_migration" = "yes" ; then
6543 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6544fi
6545
3b8acc11
PB
6546if test "$tpm" = "yes"; then
6547 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
f4ede81e 6548 # TPM passthrough support?
3b8acc11
PB
6549 if test "$tpm_passthrough" = "yes"; then
6550 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6551 fi
f4ede81e
AV
6552 # TPM emulator support?
6553 if test "$tpm_emulator" = "yes"; then
6554 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6555 fi
3b8acc11
PB
6556fi
6557
5b808275
LV
6558echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6559if have_backend "nop"; then
6d8a764e 6560 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 6561fi
5b808275 6562if have_backend "simple"; then
6d8a764e
LV
6563 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6564 # Set the appropriate trace file.
953ffe0f 6565 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 6566fi
ed7f5f1d
PB
6567if have_backend "log"; then
6568 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6d8a764e 6569fi
5b808275 6570if have_backend "ust"; then
6d8a764e
LV
6571 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6572fi
5b808275 6573if have_backend "dtrace"; then
6d8a764e
LV
6574 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6575 if test "$trace_backend_stap" = "yes" ; then
6576 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6577 fi
c276b17d 6578fi
5b808275 6579if have_backend "ftrace"; then
781e9545
ET
6580 if test "$linux" = "yes" ; then
6581 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 6582 else
21684af0 6583 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
6584 fi
6585fi
0a852417
PD
6586if have_backend "syslog"; then
6587 if test "$posix_syslog" = "yes" ; then
6588 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6589 else
6590 feature_not_found "syslog(trace backend)" "syslog not available"
6591 fi
6592fi
9410b56c
PS
6593echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6594
2da776db
MH
6595if test "$rdma" = "yes" ; then
6596 echo "CONFIG_RDMA=y" >> $config_host_mak
392fb643 6597 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
2da776db
MH
6598fi
6599
575b22b1
LV
6600if test "$have_rtnetlink" = "yes" ; then
6601 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6602fi
6603
ed279a06
KK
6604if test "$libxml2" = "yes" ; then
6605 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6606 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6607 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6608fi
6609
a6b1d4c0
CX
6610if test "$replication" = "yes" ; then
6611 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6612fi
6613
6a02c806
SH
6614if test "$have_af_vsock" = "yes" ; then
6615 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6616fi
6617
4d04351f
CC
6618if test "$have_sysmacros" = "yes" ; then
6619 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6620fi
6621
49e00a18
AG
6622if test "$have_static_assert" = "yes" ; then
6623 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6624fi
6625
e674605f
TG
6626if test "$have_utmpx" = "yes" ; then
6627 echo "HAVE_UTMPX=y" >> $config_host_mak
6628fi
6629
e0580342
KR
6630if test "$ivshmem" = "yes" ; then
6631 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
8ca80760 6632fi
e219c499 6633if test "$capstone" != "no" ; then
8ca80760 6634 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
e0580342
KR
6635fi
6636
5c312079
DDAG
6637# Hold two types of flag:
6638# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6639# a thread we have a handle to
6640# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6641# platform
6642if test "$pthread_setname_np" = "yes" ; then
6643 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6644 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6645fi
6646
da92c3ff
AM
6647if test "$vxhs" = "yes" ; then
6648 echo "CONFIG_VXHS=y" >> $config_host_mak
6649 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6650fi
6651
5b5e3037 6652if test "$tcg_interpreter" = "yes"; then
9edc19c9 6653 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5b5e3037 6654elif test "$ARCH" = "sparc64" ; then
9edc19c9 6655 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5b5e3037 6656elif test "$ARCH" = "s390x" ; then
9edc19c9 6657 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
c72b26ec 6658elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
9edc19c9 6659 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
40d964b5 6660elif test "$ARCH" = "ppc64" ; then
9edc19c9 6661 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5b5e3037 6662else
9edc19c9 6663 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5b5e3037 6664fi
9edc19c9 6665QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
5b5e3037 6666
98ec69ac 6667echo "TOOLS=$tools" >> $config_host_mak
98ec69ac 6668echo "ROMS=$roms" >> $config_host_mak
804edf29
JQ
6669echo "MAKE=$make" >> $config_host_mak
6670echo "INSTALL=$install" >> $config_host_mak
1901cb14
BS
6671echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6672echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
e999ee44
MT
6673echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6674echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
c886edfb 6675echo "PYTHON=$python" >> $config_host_mak
804edf29 6676echo "CC=$cc" >> $config_host_mak
a31a8642
MT
6677if $iasl -h > /dev/null 2>&1; then
6678 echo "IASL=$iasl" >> $config_host_mak
6679fi
2b2e59e6 6680echo "CC_I386=$cc_i386" >> $config_host_mak
804edf29 6681echo "HOST_CC=$host_cc" >> $config_host_mak
83f73fce 6682echo "CXX=$cxx" >> $config_host_mak
3c4a4d0d 6683echo "OBJCC=$objcc" >> $config_host_mak
804edf29 6684echo "AR=$ar" >> $config_host_mak
45d285ab 6685echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
cdbd727c 6686echo "AS=$as" >> $config_host_mak
5f6f0e27 6687echo "CCAS=$ccas" >> $config_host_mak
3dd46c78 6688echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
6689echo "OBJCOPY=$objcopy" >> $config_host_mak
6690echo "LD=$ld" >> $config_host_mak
9f81aeb5 6691echo "RANLIB=$ranlib" >> $config_host_mak
4852ee95 6692echo "NM=$nm" >> $config_host_mak
9fe6de94 6693echo "WINDRES=$windres" >> $config_host_mak
e2a2ed06 6694echo "CFLAGS=$CFLAGS" >> $config_host_mak
46eef33b 6695echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 6696echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
11cde1c8 6697echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
f9728943 6698echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
e39f0062
PB
6699if test "$sparse" = "yes" ; then
6700 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
80fd48df 6701 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
2944d742 6702 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
e39f0062
PB
6703 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6704 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6705fi
42da6041
GH
6706if test "$cross_prefix" != ""; then
6707 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6708else
6709 echo "AUTOCONF_HOST := " >> $config_host_mak
6710fi
e2a2ed06 6711echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
46eef33b 6712echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6969ec6c 6713echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
e57218b6 6714echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
73da375e 6715echo "LIBS+=$LIBS" >> $config_host_mak
3e2e0e6b 6716echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
409437e1 6717echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
804edf29 6718echo "EXESUF=$EXESUF" >> $config_host_mak
17969268
FZ
6719echo "DSOSUF=$DSOSUF" >> $config_host_mak
6720echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
957f1f99 6721echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
90246037
DB
6722echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6723echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
94dd53c5 6724echo "POD2MAN=$POD2MAN" >> $config_host_mak
cbdd1999 6725echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
1d728c39
BS
6726if test "$gcov" = "yes" ; then
6727 echo "CONFIG_GCOV=y" >> $config_host_mak
6728 echo "GCOV=$gcov_tool" >> $config_host_mak
6729fi
804edf29 6730
6efd7517
PM
6731# use included Linux headers
6732if test "$linux" = "yes" ; then
a307beb6 6733 mkdir -p linux-headers
6efd7517 6734 case "$cpu" in
c72b26ec 6735 i386|x86_64|x32)
08312a63 6736 linux_arch=x86
6efd7517
PM
6737 ;;
6738 ppcemb|ppc|ppc64)
08312a63 6739 linux_arch=powerpc
6efd7517
PM
6740 ;;
6741 s390x)
08312a63
PM
6742 linux_arch=s390
6743 ;;
1f080313
CF
6744 aarch64)
6745 linux_arch=arm64
6746 ;;
222e7d11
SL
6747 mips64)
6748 linux_arch=mips
6749 ;;
08312a63
PM
6750 *)
6751 # For most CPUs the kernel architecture name and QEMU CPU name match.
6752 linux_arch="$cpu"
6efd7517
PM
6753 ;;
6754 esac
08312a63
PM
6755 # For non-KVM architectures we will not have asm headers
6756 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6757 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6758 fi
6efd7517
PM
6759fi
6760
1d14ffa9 6761for target in $target_list; do
97a847bc 6762target_dir="$target"
25be210f 6763config_target_mak=$target_dir/config-target.mak
89138857 6764target_name=$(echo $target | cut -d '-' -f 1)
97a847bc 6765target_bigendian="no"
1f3d3c8f 6766
c1799a84 6767case "$target_name" in
722dd7be 6768 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
ea2d6a39
JQ
6769 target_bigendian=yes
6770 ;;
6771esac
97a847bc 6772target_softmmu="no"
997344f3 6773target_user_only="no"
831b7825 6774target_linux_user="no"
84778508 6775target_bsd_user="no"
9e407a85 6776case "$target" in
c1799a84 6777 ${target_name}-softmmu)
9e407a85
PB
6778 target_softmmu="yes"
6779 ;;
c1799a84 6780 ${target_name}-linux-user)
9e407a85
PB
6781 target_user_only="yes"
6782 target_linux_user="yes"
6783 ;;
c1799a84 6784 ${target_name}-bsd-user)
84778508
BS
6785 target_user_only="yes"
6786 target_bsd_user="yes"
6787 ;;
9e407a85 6788 *)
76ad07a4 6789 error_exit "Target '$target' not recognised"
9e407a85
PB
6790 exit 1
6791 ;;
6792esac
831b7825 6793
97a847bc 6794mkdir -p $target_dir
25be210f 6795echo "# Automatically generated by configure - do not modify" > $config_target_mak
de83cd02 6796
e5fe0c52 6797bflt="no"
ca759f9e 6798mttcg="no"
89138857 6799interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
56aebc89 6800gdb_xml_files=""
7ba1e619 6801
c1799a84 6802TARGET_ARCH="$target_name"
6acff7da 6803TARGET_BASE_ARCH=""
e6e91b9c 6804TARGET_ABI_DIR=""
e73aae67 6805
c1799a84 6806case "$target_name" in
2408a527 6807 i386)
b8158192 6808 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
2408a527
AJ
6809 ;;
6810 x86_64)
6acff7da 6811 TARGET_BASE_ARCH=i386
b8158192 6812 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
2408a527
AJ
6813 ;;
6814 alpha)
5ee4f3c2 6815 mttcg="yes"
2408a527
AJ
6816 ;;
6817 arm|armeb)
b498c8a0 6818 TARGET_ARCH=arm
2408a527 6819 bflt="yes"
ca759f9e 6820 mttcg="yes"
56aebc89 6821 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
2408a527 6822 ;;
722dd7be
MW
6823 aarch64|aarch64_be)
6824 TARGET_ARCH=aarch64
6a49fa95
AG
6825 TARGET_BASE_ARCH=arm
6826 bflt="yes"
ca759f9e 6827 mttcg="yes"
8f95ce2e 6828 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6a49fa95 6829 ;;
2408a527 6830 cris)
2408a527 6831 ;;
61766fe9 6832 hppa)
7b93dab5 6833 mttcg="yes"
61766fe9 6834 ;;
613a22c9 6835 lm32)
613a22c9 6836 ;;
2408a527 6837 m68k)
2408a527 6838 bflt="yes"
5a4526b2 6839 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
2408a527 6840 ;;
877fdc12
EI
6841 microblaze|microblazeel)
6842 TARGET_ARCH=microblaze
72b675ca 6843 bflt="yes"
72b675ca 6844 ;;
0adcffb1 6845 mips|mipsel)
b498c8a0 6846 TARGET_ARCH=mips
25be210f 6847 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
2408a527
AJ
6848 ;;
6849 mipsn32|mipsn32el)
597e2cec 6850 TARGET_ARCH=mips64
6acff7da 6851 TARGET_BASE_ARCH=mips
25be210f 6852 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
597e2cec 6853 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527
AJ
6854 ;;
6855 mips64|mips64el)
b498c8a0 6856 TARGET_ARCH=mips64
6acff7da 6857 TARGET_BASE_ARCH=mips
25be210f 6858 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
2408a527 6859 ;;
d15a9c23
AG
6860 moxie)
6861 ;;
e671711c
MV
6862 nios2)
6863 ;;
4a09d0bb 6864 or1k)
e67db06e
JL
6865 TARGET_ARCH=openrisc
6866 TARGET_BASE_ARCH=openrisc
e67db06e 6867 ;;
2408a527 6868 ppc)
c8b3532d 6869 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
6870 ;;
6871 ppcemb)
6acff7da 6872 TARGET_BASE_ARCH=ppc
e6e91b9c 6873 TARGET_ABI_DIR=ppc
c8b3532d 6874 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
6875 ;;
6876 ppc64)
6acff7da 6877 TARGET_BASE_ARCH=ppc
e6e91b9c 6878 TARGET_ABI_DIR=ppc
f0b0685d 6879 mttcg=yes
1438eff3 6880 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
2408a527 6881 ;;
9c35126c
DK
6882 ppc64le)
6883 TARGET_ARCH=ppc64
6884 TARGET_BASE_ARCH=ppc
6885 TARGET_ABI_DIR=ppc
f0b0685d 6886 mttcg=yes
1438eff3 6887 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
9c35126c 6888 ;;
2408a527 6889 ppc64abi32)
b498c8a0 6890 TARGET_ARCH=ppc64
6acff7da 6891 TARGET_BASE_ARCH=ppc
e6e91b9c 6892 TARGET_ABI_DIR=ppc
25be210f 6893 echo "TARGET_ABI32=y" >> $config_target_mak
1438eff3 6894 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
2408a527 6895 ;;
25fa194b
MC
6896 riscv32)
6897 TARGET_BASE_ARCH=riscv
6898 TARGET_ABI_DIR=riscv
6899 mttcg=yes
6900 ;;
6901 riscv64)
6902 TARGET_BASE_ARCH=riscv
6903 TARGET_ABI_DIR=riscv
6904 mttcg=yes
6905 ;;
2408a527 6906 sh4|sh4eb)
b498c8a0 6907 TARGET_ARCH=sh4
2408a527
AJ
6908 bflt="yes"
6909 ;;
6910 sparc)
2408a527
AJ
6911 ;;
6912 sparc64)
6acff7da 6913 TARGET_BASE_ARCH=sparc
2408a527
AJ
6914 ;;
6915 sparc32plus)
b498c8a0 6916 TARGET_ARCH=sparc64
6acff7da 6917 TARGET_BASE_ARCH=sparc
e6e91b9c 6918 TARGET_ABI_DIR=sparc
25be210f 6919 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527 6920 ;;
24e804ec 6921 s390x)
63685bc4 6922 mttcg=yes
86158a2a 6923 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 6924 ;;
444e06b1
CG
6925 tilegx)
6926 ;;
5ecaa4ed
PC
6927 tricore)
6928 ;;
d2fbca94 6929 unicore32)
d2fbca94 6930 ;;
cfa550c6
MF
6931 xtensa|xtensaeb)
6932 TARGET_ARCH=xtensa
9fb40342 6933 mttcg="yes"
cfa550c6 6934 ;;
2408a527 6935 *)
76ad07a4 6936 error_exit "Unsupported target CPU"
2408a527
AJ
6937 ;;
6938esac
5e8861a0
PB
6939# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6940if [ "$TARGET_BASE_ARCH" = "" ]; then
6941 TARGET_BASE_ARCH=$TARGET_ARCH
6942fi
6943
5e8861a0
PB
6944symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6945
99afc91d
DB
6946upper() {
6947 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6948}
6949
89138857 6950target_arch_name="$(upper $TARGET_ARCH)"
25be210f 6951echo "TARGET_$target_arch_name=y" >> $config_target_mak
c1799a84 6952echo "TARGET_NAME=$target_name" >> $config_target_mak
25be210f 6953echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
e6e91b9c
JQ
6954if [ "$TARGET_ABI_DIR" = "" ]; then
6955 TARGET_ABI_DIR=$TARGET_ARCH
6956fi
25be210f 6957echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
adfc3e91
SS
6958if [ "$HOST_VARIANT_DIR" != "" ]; then
6959 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6960fi
3b6b7550
PB
6961
6962if supported_xen_target $target; then
6963 echo "CONFIG_XEN=y" >> $config_target_mak
6964 if test "$xen_pci_passthrough" = yes; then
eb6fda0f 6965 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
1b0c87fc 6966 fi
3b6b7550
PB
6967fi
6968if supported_kvm_target $target; then
6969 echo "CONFIG_KVM=y" >> $config_target_mak
6970 if test "$vhost_net" = "yes" ; then
d5970055 6971 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
e6a74868
MAL
6972 if test "$vhost_user" = "yes" ; then
6973 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6974 fi
c59249f9 6975 fi
3b6b7550
PB
6976fi
6977if supported_hax_target $target; then
6978 echo "CONFIG_HAX=y" >> $config_target_mak
b0cb0a66 6979fi
c97d6d2c
SAGDR
6980if supported_hvf_target $target; then
6981 echo "CONFIG_HVF=y" >> $config_target_mak
6982fi
d661d9a4
JTV
6983if supported_whpx_target $target; then
6984 echo "CONFIG_WHPX=y" >> $config_target_mak
6985fi
de83cd02 6986if test "$target_bigendian" = "yes" ; then
25be210f 6987 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
de83cd02 6988fi
97a847bc 6989if test "$target_softmmu" = "yes" ; then
25be210f 6990 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
ca759f9e
AB
6991 if test "$mttcg" = "yes" ; then
6992 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6993 fi
43ce4dfe 6994fi
997344f3 6995if test "$target_user_only" = "yes" ; then
25be210f 6996 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
a2c80be9 6997 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
997344f3 6998fi
831b7825 6999if test "$target_linux_user" = "yes" ; then
25be210f 7000 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
831b7825 7001fi
56aebc89
PB
7002list=""
7003if test ! -z "$gdb_xml_files" ; then
7004 for x in $gdb_xml_files; do
7005 list="$list $source_path/gdb-xml/$x"
7006 done
3d0f1517 7007 echo "TARGET_XML_FILES=$list" >> $config_target_mak
56aebc89 7008fi
97a847bc 7009
e5fe0c52 7010if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
25be210f 7011 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
e5fe0c52 7012fi
84778508 7013if test "$target_bsd_user" = "yes" ; then
25be210f 7014 echo "CONFIG_BSD_USER=y" >> $config_target_mak
84778508 7015fi
5b0753e0 7016
4afddb55 7017# generate QEMU_CFLAGS/LDFLAGS for targets
fa282484 7018
4afddb55 7019cflags=""
fa282484 7020ldflags=""
9b8e111f 7021
c765fcac
PC
7022disas_config() {
7023 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7024 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7025}
7026
64656024
JQ
7027for i in $ARCH $TARGET_BASE_ARCH ; do
7028 case "$i" in
7029 alpha)
c765fcac 7030 disas_config "ALPHA"
64656024 7031 ;;
82295d8a
RH
7032 aarch64)
7033 if test -n "${cxx}"; then
c765fcac 7034 disas_config "ARM_A64"
82295d8a
RH
7035 fi
7036 ;;
64656024 7037 arm)
c765fcac 7038 disas_config "ARM"
999b53ec 7039 if test -n "${cxx}"; then
c765fcac 7040 disas_config "ARM_A64"
999b53ec 7041 fi
64656024
JQ
7042 ;;
7043 cris)
c765fcac 7044 disas_config "CRIS"
64656024 7045 ;;
429b31a2
RH
7046 hppa)
7047 disas_config "HPPA"
7048 ;;
c72b26ec 7049 i386|x86_64|x32)
c765fcac 7050 disas_config "I386"
64656024 7051 ;;
79368f49 7052 lm32)
c765fcac 7053 disas_config "LM32"
79368f49 7054 ;;
64656024 7055 m68k)
c765fcac 7056 disas_config "M68K"
64656024 7057 ;;
877fdc12 7058 microblaze*)
c765fcac 7059 disas_config "MICROBLAZE"
64656024
JQ
7060 ;;
7061 mips*)
c765fcac 7062 disas_config "MIPS"
64656024 7063 ;;
d15a9c23 7064 moxie*)
c765fcac 7065 disas_config "MOXIE"
d15a9c23 7066 ;;
e671711c
MV
7067 nios2)
7068 disas_config "NIOS2"
7069 ;;
4a09d0bb 7070 or1k)
c765fcac 7071 disas_config "OPENRISC"
e67db06e 7072 ;;
64656024 7073 ppc*)
c765fcac 7074 disas_config "PPC"
64656024 7075 ;;
25fa194b
MC
7076 riscv)
7077 disas_config "RISCV"
7078 ;;
24e804ec 7079 s390*)
c765fcac 7080 disas_config "S390"
64656024
JQ
7081 ;;
7082 sh4)
c765fcac 7083 disas_config "SH4"
64656024
JQ
7084 ;;
7085 sparc*)
c765fcac 7086 disas_config "SPARC"
64656024 7087 ;;
cfa550c6 7088 xtensa*)
c765fcac 7089 disas_config "XTENSA"
cfa550c6 7090 ;;
64656024
JQ
7091 esac
7092done
9195b2c2 7093if test "$tcg_interpreter" = "yes" ; then
c765fcac 7094 disas_config "TCI"
9195b2c2 7095fi
64656024 7096
6ee7126f
JQ
7097case "$ARCH" in
7098alpha)
7099 # Ensure there's only a single GP
7100 cflags="-msmall-data $cflags"
7101;;
7102esac
7103
d02c1db3 7104if test "$gprof" = "yes" ; then
25be210f 7105 echo "TARGET_GPROF=yes" >> $config_target_mak
d02c1db3
JQ
7106 if test "$target_linux_user" = "yes" ; then
7107 cflags="-p $cflags"
7108 ldflags="-p $ldflags"
7109 fi
7110 if test "$target_softmmu" = "yes" ; then
7111 ldflags="-p $ldflags"
25be210f 7112 echo "GPROF_CFLAGS=-p" >> $config_target_mak
d02c1db3
JQ
7113 fi
7114fi
7115
9b8e111f 7116if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
964c6fa1 7117 ldflags="$ldflags $textseg_ldflags"
fa282484 7118fi
fa282484 7119
e9a3591f
CB
7120# Newer kernels on s390 check for an S390_PGSTE program header and
7121# enable the pgste page table extensions in that case. This makes
7122# the vm.allocate_pgste sysctl unnecessary. We enable this program
7123# header if
7124# - we build on s390x
7125# - we build the system emulation for s390x (qemu-system-s390x)
7126# - KVM is enabled
7127# - the linker supports --s390-pgste
7128if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7129 if ld_has --s390-pgste ; then
7130 ldflags="-Wl,--s390-pgste $ldflags"
7131 fi
7132fi
7133
25be210f
JQ
7134echo "LDFLAGS+=$ldflags" >> $config_target_mak
7135echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
fa282484 7136
97a847bc 7137done # for target in $targets
7d13299d 7138
a540f158
PC
7139if [ "$dtc_internal" = "yes" ]; then
7140 echo "config-host.h: subdir-dtc" >> $config_host_mak
7141fi
e219c499
RH
7142if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7143 echo "config-host.h: subdir-capstone" >> $config_host_mak
7144fi
7145if test -n "$LIBCAPSTONE"; then
7146 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7147fi
a540f158 7148
a99d57bb
WG
7149if test "$numa" = "yes"; then
7150 echo "CONFIG_NUMA=y" >> $config_host_mak
7151fi
7152
fd0e6053
JS
7153if test "$ccache_cpp2" = "yes"; then
7154 echo "export CCACHE_CPP2=y" >> $config_host_mak
7155fi
7156
d1807a4f 7157# build tree in object directory in case the source is not in the current directory
b1fb9a63 7158DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
b855f8d1 7159DIRS="$DIRS docs docs/interop fsdev scsi"
9933c305 7160DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
d1807a4f 7161DIRS="$DIRS roms/seabios roms/vgabios"
c09015dd
AL
7162FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7163FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
aaa2ebc5 7164FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
d1807a4f 7165FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
446b9165 7166FILES="$FILES pc-bios/spapr-rtas/Makefile"
9933c305 7167FILES="$FILES pc-bios/s390-ccw/Makefile"
d1807a4f 7168FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
4652b792 7169FILES="$FILES pc-bios/qemu-icon.bmp"
3a586d2f 7170FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
753d11f2
RH
7171for bios_file in \
7172 $source_path/pc-bios/*.bin \
225a9ab8 7173 $source_path/pc-bios/*.lid \
5acc2ec0 7174 $source_path/pc-bios/*.aml \
753d11f2
RH
7175 $source_path/pc-bios/*.rom \
7176 $source_path/pc-bios/*.dtb \
e89e33e1 7177 $source_path/pc-bios/*.img \
753d11f2 7178 $source_path/pc-bios/openbios-* \
4e73c781 7179 $source_path/pc-bios/u-boot.* \
753d11f2
RH
7180 $source_path/pc-bios/palcode-*
7181do
89138857 7182 FILES="$FILES pc-bios/$(basename $bios_file)"
d1807a4f 7183done
89138857 7184for test_file in $(find $source_path/tests/acpi-test-data -type f)
c2304b52 7185do
89138857 7186 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
c2304b52 7187done
d1807a4f
PB
7188mkdir -p $DIRS
7189for f in $FILES ; do
cab00a5a 7190 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
f9245e10
PM
7191 symlink "$source_path/$f" "$f"
7192 fi
d1807a4f 7193done
1ad2134f 7194
c34ebfdc 7195# temporary config to build submodules
2d9f27d2 7196for rom in seabios vgabios ; do
c34ebfdc 7197 config_mak=roms/$rom/config.mak
37116c89 7198 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 7199 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
cdbd727c 7200 echo "AS=$as" >> $config_mak
5f6f0e27 7201 echo "CCAS=$ccas" >> $config_mak
c34ebfdc
AL
7202 echo "CC=$cc" >> $config_mak
7203 echo "BCC=bcc" >> $config_mak
3dd46c78 7204 echo "CPP=$cpp" >> $config_mak
c34ebfdc 7205 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 7206 echo "IASL=$iasl" >> $config_mak
c34ebfdc 7207 echo "LD=$ld" >> $config_mak
9f81aeb5 7208 echo "RANLIB=$ranlib" >> $config_mak
c34ebfdc
AL
7209done
7210
fe31017f
MAL
7211# set up tests data directory
7212if [ ! -e tests/data ]; then
7213 symlink "$source_path/tests/data" tests/data
7214fi
7215
76c7560a
HR
7216# set up qemu-iotests in this build directory
7217iotests_common_env="tests/qemu-iotests/common.env"
7218iotests_check="tests/qemu-iotests/check"
7219
7220echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7221echo >> "$iotests_common_env"
7222echo "export PYTHON='$python'" >> "$iotests_common_env"
7223
7224if [ ! -e "$iotests_check" ]; then
7225 symlink "$source_path/$iotests_check" "$iotests_check"
7226fi
7227
dc655404
MT
7228# Save the configure command line for later reuse.
7229cat <<EOD >config.status
7230#!/bin/sh
7231# Generated by configure.
7232# Run this file to recreate the current configuration.
7233# Compiler output produced by configure, useful for debugging
7234# configure, is in config.log if it exists.
7235EOD
7236printf "exec" >>config.status
7237printf " '%s'" "$0" "$@" >>config.status
cf7cc929 7238echo ' "$@"' >>config.status
dc655404
MT
7239chmod +x config.status
7240
8cd05ab6 7241rm -r "$TMPDIR1"