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