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