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