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