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