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