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