]> git.proxmox.com Git - mirror_qemu.git/blame - configure
input: fix memory leak
[mirror_qemu.git] / configure
CommitLineData
7d13299d
FB
1#!/bin/sh
2#
3ef693a0 3# qemu configure script (c) 2003 Fabrice Bellard
7d13299d 4#
8cd05ab6 5
99519e67
CH
6# Unset some variables known to interfere with behavior of common tools,
7# just as autoconf does.
8CLICOLOR_FORCE= GREP_OPTIONS=
9unset CLICOLOR_FORCE GREP_OPTIONS
10
5e4dfd3d
JS
11# Don't allow CCACHE, if present, to use cached results of compile tests!
12export CCACHE_RECACHE=yes
13
8cd05ab6
PM
14# Temporary directory used for files created while
15# configure runs. Since it is in the build directory
16# we can safely blow away any previous version of it
17# (and we need not jump through hoops to try to delete
18# it when configure exits.)
19TMPDIR1="config-temp"
20rm -rf "${TMPDIR1}"
21mkdir -p "${TMPDIR1}"
22if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
7d13299d
FB
25fi
26
8cd05ab6
PM
27TMPB="qemu-conf"
28TMPC="${TMPDIR1}/${TMPB}.c"
66518bf6 29TMPO="${TMPDIR1}/${TMPB}.o"
9c83ffd8 30TMPCXX="${TMPDIR1}/${TMPB}.cxx"
8cd05ab6 31TMPE="${TMPDIR1}/${TMPB}.exe"
6969ec6c 32TMPMO="${TMPDIR1}/${TMPB}.mo"
7d13299d 33
da1d85e3 34rm -f config.log
9ac81bbb 35
b48e3611
PM
36# Print a helpful header at the top of config.log
37echo "# QEMU configure log $(date)" >> config.log
979ae168
PM
38printf "# Configured with:" >> config.log
39printf " '%s'" "$0" "$@" >> config.log
40echo >> config.log
b48e3611
PM
41echo "#" >> config.log
42
d880a3ba
PB
43print_error() {
44 (echo
76ad07a4
PM
45 echo "ERROR: $1"
46 while test -n "$2"; do
47 echo " $2"
48 shift
49 done
d880a3ba
PB
50 echo) >&2
51}
52
53error_exit() {
54 print_error "$@"
76ad07a4
PM
55 exit 1
56}
57
9c83ffd8
PM
58do_compiler() {
59 # Run the compiler, capturing its output to the log. First argument
60 # is compiler binary to execute.
61 local compiler="$1"
62 shift
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"
3467 fi
409437e1 3468 PTHREAD_LIB="$pthread_lib"
bd00d539
AF
3469 break
3470 fi
3471 done
3472fi
414f0dab 3473
4617e593 3474if test "$mingw32" != yes -a "$pthread" = no; then
76ad07a4
PM
3475 error_exit "pthread check failed" \
3476 "Make sure to have the pthread libs and headers installed."
e5d355d1
AL
3477fi
3478
5c312079
DDAG
3479# check for pthread_setname_np
3480pthread_setname_np=no
3481cat > $TMPC << EOF
3482#include <pthread.h>
3483
3484static void *f(void *p) { return NULL; }
3485int main(void)
3486{
3487 pthread_t thread;
3488 pthread_create(&thread, 0, f, 0);
3489 pthread_setname_np(thread, "QEMU");
3490 return 0;
3491}
3492EOF
3493if compile_prog "" "$pthread_lib" ; then
3494 pthread_setname_np=yes
3495fi
3496
f27aaf4b
CB
3497##########################################
3498# rbd probe
3499if test "$rbd" != "no" ; then
3500 cat > $TMPC <<EOF
3501#include <stdio.h>
ad32e9c0 3502#include <rbd/librbd.h>
f27aaf4b 3503int main(void) {
ad32e9c0
JD
3504 rados_t cluster;
3505 rados_create(&cluster, NULL);
f27aaf4b
CB
3506 return 0;
3507}
3508EOF
ad32e9c0
JD
3509 rbd_libs="-lrbd -lrados"
3510 if compile_prog "" "$rbd_libs" ; then
3511 rbd=yes
f27aaf4b
CB
3512 else
3513 if test "$rbd" = "yes" ; then
21684af0 3514 feature_not_found "rados block device" "Install librbd/ceph devel"
f27aaf4b
CB
3515 fi
3516 rbd=no
3517 fi
f27aaf4b
CB
3518fi
3519
0a12ec87
RJ
3520##########################################
3521# libssh2 probe
4fc16838 3522min_libssh2_version=1.2.8
0a12ec87 3523if test "$libssh2" != "no" ; then
65d5d3f9 3524 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
89138857
SW
3525 libssh2_cflags=$($pkg_config libssh2 --cflags)
3526 libssh2_libs=$($pkg_config libssh2 --libs)
0a12ec87 3527 libssh2=yes
0a12ec87
RJ
3528 else
3529 if test "$libssh2" = "yes" ; then
4fc16838 3530 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
0a12ec87
RJ
3531 fi
3532 libssh2=no
3533 fi
3534fi
3535
9a2d462e
RJ
3536##########################################
3537# libssh2_sftp_fsync probe
3538
3539if test "$libssh2" = "yes"; then
3540 cat > $TMPC <<EOF
3541#include <stdio.h>
3542#include <libssh2.h>
3543#include <libssh2_sftp.h>
3544int main(void) {
3545 LIBSSH2_SESSION *session;
3546 LIBSSH2_SFTP *sftp;
3547 LIBSSH2_SFTP_HANDLE *sftp_handle;
3548 session = libssh2_session_init ();
3549 sftp = libssh2_sftp_init (session);
3550 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3551 libssh2_sftp_fsync (sftp_handle);
3552 return 0;
3553}
3554EOF
3555 # libssh2_cflags/libssh2_libs defined in previous test.
3556 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3557 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3558 fi
3559fi
3560
5c6c3a6c
CH
3561##########################################
3562# linux-aio probe
5c6c3a6c
CH
3563
3564if test "$linux_aio" != "no" ; then
3565 cat > $TMPC <<EOF
3566#include <libaio.h>
3567#include <sys/eventfd.h>
832ce9c2 3568#include <stddef.h>
5c6c3a6c
CH
3569int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3570EOF
3571 if compile_prog "" "-laio" ; then
3572 linux_aio=yes
5c6c3a6c
CH
3573 else
3574 if test "$linux_aio" = "yes" ; then
21684af0 3575 feature_not_found "linux AIO" "Install libaio devel"
5c6c3a6c 3576 fi
3cfcae3c 3577 linux_aio=no
5c6c3a6c
CH
3578 fi
3579fi
3580
3b8acc11
PB
3581##########################################
3582# TPM passthrough is only on x86 Linux
3583
3584if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3585 tpm_passthrough=$tpm
3586else
3587 tpm_passthrough=no
3588fi
3589
f4ede81e
AV
3590# TPM emulator is for all posix systems
3591if test "$mingw32" != "yes"; then
3592 tpm_emulator=$tpm
3593else
3594 tpm_emulator=no
3595fi
758e8e38
VJ
3596##########################################
3597# attr probe
3598
3599if test "$attr" != "no" ; then
3600 cat > $TMPC <<EOF
3601#include <stdio.h>
3602#include <sys/types.h>
f2338fb4
PB
3603#ifdef CONFIG_LIBATTR
3604#include <attr/xattr.h>
3605#else
4f26f2b6 3606#include <sys/xattr.h>
f2338fb4 3607#endif
758e8e38
VJ
3608int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3609EOF
4f26f2b6
AK
3610 if compile_prog "" "" ; then
3611 attr=yes
3612 # Older distros have <attr/xattr.h>, and need -lattr:
f2338fb4 3613 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
758e8e38
VJ
3614 attr=yes
3615 LIBS="-lattr $LIBS"
4f26f2b6 3616 libattr=yes
758e8e38
VJ
3617 else
3618 if test "$attr" = "yes" ; then
21684af0 3619 feature_not_found "ATTR" "Install libc6 or libattr devel"
758e8e38
VJ
3620 fi
3621 attr=no
3622 fi
3623fi
3624
bf9298b9
AL
3625##########################################
3626# iovec probe
3627cat > $TMPC <<EOF
db34f0b3 3628#include <sys/types.h>
bf9298b9 3629#include <sys/uio.h>
db34f0b3 3630#include <unistd.h>
f91f9bee 3631int main(void) { return sizeof(struct iovec); }
bf9298b9
AL
3632EOF
3633iovec=no
52166aa0 3634if compile_prog "" "" ; then
bf9298b9
AL
3635 iovec=yes
3636fi
3637
ceb42de8
AL
3638##########################################
3639# preadv probe
3640cat > $TMPC <<EOF
3641#include <sys/types.h>
3642#include <sys/uio.h>
3643#include <unistd.h>
c075a723 3644int main(void) { return preadv(0, 0, 0, 0); }
ceb42de8
AL
3645EOF
3646preadv=no
52166aa0 3647if compile_prog "" "" ; then
ceb42de8
AL
3648 preadv=yes
3649fi
3650
f652e6af
AJ
3651##########################################
3652# fdt probe
e169e1e1
PM
3653# fdt support is mandatory for at least some target architectures,
3654# so insist on it if we're building those system emulators.
3655fdt_required=no
3656for target in $target_list; do
3657 case $target in
df1d8a1f 3658 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
e169e1e1
PM
3659 fdt_required=yes
3660 ;;
3661 esac
3662done
3663
3664if test "$fdt_required" = "yes"; then
3665 if test "$fdt" = "no"; then
3666 error_exit "fdt disabled but some requested targets require it." \
3667 "You can turn off fdt only if you also disable all the system emulation" \
3668 "targets which need it (by specifying a cut down --target-list)."
3669 fi
3670 fdt=yes
3671fi
3672
2df87df7 3673if test "$fdt" != "no" ; then
b41af4ba 3674 fdt_libs="-lfdt"
96ce6545 3675 # explicitly check for libfdt_env.h as it is missing in some stable installs
6e85fce0 3676 # and test for required functions to make sure we are on a version >= 1.4.2
b41af4ba 3677 cat > $TMPC << EOF
31ce0adb 3678#include <libfdt.h>
96ce6545 3679#include <libfdt_env.h>
6e85fce0 3680int main(void) { fdt_first_subnode(0, 0); return 0; }
f652e6af 3681EOF
52166aa0 3682 if compile_prog "" "$fdt_libs" ; then
a540f158 3683 # system DTC is good - use it
f652e6af 3684 fdt=yes
a540f158 3685 else
aef45d51
DB
3686 # have GIT checkout, so activate dtc submodule
3687 if test -e "${source_path}/.git" ; then
3688 git_submodules="${git_submodules} dtc"
3689 fi
3690 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3691 fdt=yes
3692 dtc_internal="yes"
3693 mkdir -p dtc
3694 if [ "$pwd_is_source_path" != "y" ] ; then
3695 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3696 symlink "$source_path/dtc/scripts" "dtc/scripts"
3697 fi
3698 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3699 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3700 elif test "$fdt" = "yes" ; then
3701 # Not a git build & no libfdt found, prompt for system install
3702 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3703 "Please install the DTC (libfdt) devel package"
3704 else
3705 # don't have and don't want
3706 fdt_libs=
3707 fdt=no
3708 fi
f652e6af
AJ
3709 fi
3710fi
3711
a540f158
PC
3712libs_softmmu="$libs_softmmu $fdt_libs"
3713
20ff075b 3714##########################################
fb719563 3715# opengl probe (for sdl2, gtk, milkymist-tmu2)
b1546f32 3716
da076ffe 3717if test "$opengl" != "no" ; then
014cb152 3718 opengl_pkgs="epoxy libdrm gbm"
fb719563 3719 if $pkg_config $opengl_pkgs x11; then
f676c67e
JW
3720 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3721 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
da076ffe 3722 opengl=yes
925a0400
GH
3723 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3724 gtk_gl="yes"
3725 fi
cc720a5d 3726 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
20ff075b 3727 else
da076ffe 3728 if test "$opengl" = "yes" ; then
dcf30025 3729 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
20ff075b 3730 fi
f676c67e 3731 opengl_cflags=""
da076ffe
GH
3732 opengl_libs=""
3733 opengl=no
20ff075b
MW
3734 fi
3735fi
3736
014cb152
GH
3737if test "$opengl" = "yes"; then
3738 cat > $TMPC << EOF
3739#include <epoxy/egl.h>
3740#ifndef EGL_MESA_image_dma_buf_export
3741# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3742#endif
3743int main(void) { return 0; }
3744EOF
3745 if compile_prog "" "" ; then
3746 opengl_dmabuf=yes
3747 fi
3748fi
c9a12e75 3749
c9a12e75 3750
eb100396
BR
3751##########################################
3752# glusterfs probe
3753if test "$glusterfs" != "no" ; then
65d5d3f9 3754 if $pkg_config --atleast-version=3 glusterfs-api; then
e01bee08 3755 glusterfs="yes"
89138857
SW
3756 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3757 glusterfs_libs=$($pkg_config --libs glusterfs-api)
d85fa9eb
JC
3758 if $pkg_config --atleast-version=4 glusterfs-api; then
3759 glusterfs_xlator_opt="yes"
3760 fi
65d5d3f9 3761 if $pkg_config --atleast-version=5 glusterfs-api; then
0c14fb47
BR
3762 glusterfs_discard="yes"
3763 fi
7c815372 3764 if $pkg_config --atleast-version=6 glusterfs-api; then
df3a429a 3765 glusterfs_fallocate="yes"
7c815372
BR
3766 glusterfs_zerofill="yes"
3767 fi
eb100396
BR
3768 else
3769 if test "$glusterfs" = "yes" ; then
8efc9363
HT
3770 feature_not_found "GlusterFS backend support" \
3771 "Install glusterfs-api devel >= 3"
eb100396 3772 fi
e01bee08 3773 glusterfs="no"
eb100396
BR
3774 fi
3775fi
3776
39386ac7 3777# Check for inotify functions when we are building linux-user
3b3f24ad
AJ
3778# emulator. This is done because older glibc versions don't
3779# have syscall stubs for these implemented. In that case we
3780# don't provide them even if kernel supports them.
3781#
3782inotify=no
67ba57f6 3783cat > $TMPC << EOF
3b3f24ad
AJ
3784#include <sys/inotify.h>
3785
3786int
3787main(void)
3788{
3789 /* try to start inotify */
8690e420 3790 return inotify_init();
3b3f24ad
AJ
3791}
3792EOF
52166aa0 3793if compile_prog "" "" ; then
67ba57f6 3794 inotify=yes
3b3f24ad
AJ
3795fi
3796
c05c7a73
RV
3797inotify1=no
3798cat > $TMPC << EOF
3799#include <sys/inotify.h>
3800
3801int
3802main(void)
3803{
3804 /* try to start inotify */
3805 return inotify_init1(0);
3806}
3807EOF
3808if compile_prog "" "" ; then
3809 inotify1=yes
3810fi
3811
099d6b0f
RV
3812# check if pipe2 is there
3813pipe2=no
3814cat > $TMPC << EOF
099d6b0f
RV
3815#include <unistd.h>
3816#include <fcntl.h>
3817
3818int main(void)
3819{
3820 int pipefd[2];
9bca8162 3821 return pipe2(pipefd, O_CLOEXEC);
099d6b0f
RV
3822}
3823EOF
52166aa0 3824if compile_prog "" "" ; then
099d6b0f
RV
3825 pipe2=yes
3826fi
3827
40ff6d7e
KW
3828# check if accept4 is there
3829accept4=no
3830cat > $TMPC << EOF
40ff6d7e
KW
3831#include <sys/socket.h>
3832#include <stddef.h>
3833
3834int main(void)
3835{
3836 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3837 return 0;
3838}
3839EOF
3840if compile_prog "" "" ; then
3841 accept4=yes
3842fi
3843
3ce34dfb
VS
3844# check if tee/splice is there. vmsplice was added same time.
3845splice=no
3846cat > $TMPC << EOF
3ce34dfb
VS
3847#include <unistd.h>
3848#include <fcntl.h>
3849#include <limits.h>
3850
3851int main(void)
3852{
66ea0f22 3853 int len, fd = 0;
3ce34dfb
VS
3854 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3855 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3856 return 0;
3857}
3858EOF
52166aa0 3859if compile_prog "" "" ; then
3ce34dfb
VS
3860 splice=yes
3861fi
3862
a99d57bb
WG
3863##########################################
3864# libnuma probe
3865
3866if test "$numa" != "no" ; then
3867 cat > $TMPC << EOF
3868#include <numa.h>
3869int main(void) { return numa_available(); }
3870EOF
3871
3872 if compile_prog "" "-lnuma" ; then
3873 numa=yes
3874 libs_softmmu="-lnuma $libs_softmmu"
3875 else
3876 if test "$numa" = "yes" ; then
3877 feature_not_found "numa" "install numactl devel"
3878 fi
3879 numa=no
3880 fi
3881fi
3882
7b01cb97
AD
3883if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3884 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3885 exit 1
3886fi
3887
5a22ab71
YZ
3888# Even if malloc_trim() is available, these non-libc memory allocators
3889# do not support it.
3890if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
3891 if test "$malloc_trim" = "yes" ; then
3892 echo "Disabling malloc_trim with non-libc memory allocator"
3893 fi
3894 malloc_trim="no"
3895fi
3896
3897#######################################
3898# malloc_trim
3899
3900if test "$malloc_trim" != "no" ; then
3901 cat > $TMPC << EOF
3902#include <malloc.h>
3903int main(void) { malloc_trim(0); return 0; }
3904EOF
3905 if compile_prog "" "" ; then
3906 malloc_trim="yes"
3907 else
3908 malloc_trim="no"
3909 fi
3910fi
3911
2847b469
FZ
3912##########################################
3913# tcmalloc probe
3914
3915if test "$tcmalloc" = "yes" ; then
3916 cat > $TMPC << EOF
3917#include <stdlib.h>
3918int main(void) { malloc(1); return 0; }
3919EOF
3920
3921 if compile_prog "" "-ltcmalloc" ; then
3922 LIBS="-ltcmalloc $LIBS"
3923 else
3924 feature_not_found "tcmalloc" "install gperftools devel"
3925 fi
3926fi
3927
7b01cb97
AD
3928##########################################
3929# jemalloc probe
3930
3931if test "$jemalloc" = "yes" ; then
3932 cat > $TMPC << EOF
3933#include <stdlib.h>
3934int main(void) { malloc(1); return 0; }
3935EOF
3936
3937 if compile_prog "" "-ljemalloc" ; then
3938 LIBS="-ljemalloc $LIBS"
3939 else
3940 feature_not_found "jemalloc" "install jemalloc devel"
3941 fi
3942fi
3943
dcc38d1c
MT
3944##########################################
3945# signalfd probe
3946signalfd="no"
3947cat > $TMPC << EOF
dcc38d1c
MT
3948#include <unistd.h>
3949#include <sys/syscall.h>
3950#include <signal.h>
3951int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3952EOF
3953
3954if compile_prog "" "" ; then
3955 signalfd=yes
3956fi
3957
c2882b96
RV
3958# check if eventfd is supported
3959eventfd=no
3960cat > $TMPC << EOF
3961#include <sys/eventfd.h>
3962
3963int main(void)
3964{
55cc7f3e 3965 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
c2882b96
RV
3966}
3967EOF
3968if compile_prog "" "" ; then
3969 eventfd=yes
3970fi
3971
751bcc39
MAL
3972# check if memfd is supported
3973memfd=no
3974cat > $TMPC << EOF
75e5b70e 3975#include <sys/mman.h>
751bcc39
MAL
3976
3977int main(void)
3978{
3979 return memfd_create("foo", MFD_ALLOW_SEALING);
3980}
3981EOF
3982if compile_prog "" "" ; then
3983 memfd=yes
3984fi
3985
3986
3987
d0927938
UH
3988# check for fallocate
3989fallocate=no
3990cat > $TMPC << EOF
3991#include <fcntl.h>
3992
3993int main(void)
3994{
3995 fallocate(0, 0, 0, 0);
3996 return 0;
3997}
3998EOF
8fb03151 3999if compile_prog "" "" ; then
d0927938
UH
4000 fallocate=yes
4001fi
4002
3d4fa43e
KK
4003# check for fallocate hole punching
4004fallocate_punch_hole=no
4005cat > $TMPC << EOF
4006#include <fcntl.h>
4007#include <linux/falloc.h>
4008
4009int main(void)
4010{
4011 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4012 return 0;
4013}
4014EOF
4015if compile_prog "" "" ; then
4016 fallocate_punch_hole=yes
4017fi
4018
b953f075
DL
4019# check that fallocate supports range zeroing inside the file
4020fallocate_zero_range=no
4021cat > $TMPC << EOF
4022#include <fcntl.h>
4023#include <linux/falloc.h>
4024
4025int main(void)
4026{
4027 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4028 return 0;
4029}
4030EOF
4031if compile_prog "" "" ; then
4032 fallocate_zero_range=yes
4033fi
4034
ed911435
KW
4035# check for posix_fallocate
4036posix_fallocate=no
4037cat > $TMPC << EOF
4038#include <fcntl.h>
4039
4040int main(void)
4041{
4042 posix_fallocate(0, 0, 0);
4043 return 0;
4044}
4045EOF
4046if compile_prog "" "" ; then
4047 posix_fallocate=yes
4048fi
4049
c727f47d
PM
4050# check for sync_file_range
4051sync_file_range=no
4052cat > $TMPC << EOF
4053#include <fcntl.h>
4054
4055int main(void)
4056{
4057 sync_file_range(0, 0, 0, 0);
4058 return 0;
4059}
4060EOF
8fb03151 4061if compile_prog "" "" ; then
c727f47d
PM
4062 sync_file_range=yes
4063fi
4064
dace20dc
PM
4065# check for linux/fiemap.h and FS_IOC_FIEMAP
4066fiemap=no
4067cat > $TMPC << EOF
4068#include <sys/ioctl.h>
4069#include <linux/fs.h>
4070#include <linux/fiemap.h>
4071
4072int main(void)
4073{
4074 ioctl(0, FS_IOC_FIEMAP, 0);
4075 return 0;
4076}
4077EOF
8fb03151 4078if compile_prog "" "" ; then
dace20dc
PM
4079 fiemap=yes
4080fi
4081
d0927938
UH
4082# check for dup3
4083dup3=no
4084cat > $TMPC << EOF
4085#include <unistd.h>
4086
4087int main(void)
4088{
4089 dup3(0, 0, 0);
4090 return 0;
4091}
4092EOF
78f5d726 4093if compile_prog "" "" ; then
d0927938
UH
4094 dup3=yes
4095fi
4096
4e0c6529
AB
4097# check for ppoll support
4098ppoll=no
4099cat > $TMPC << EOF
4100#include <poll.h>
4101
4102int main(void)
4103{
4104 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4105 ppoll(&pfd, 1, 0, 0);
4106 return 0;
4107}
4108EOF
4109if compile_prog "" "" ; then
4110 ppoll=yes
4111fi
4112
cd758dd0
AB
4113# check for prctl(PR_SET_TIMERSLACK , ... ) support
4114prctl_pr_set_timerslack=no
4115cat > $TMPC << EOF
4116#include <sys/prctl.h>
4117
4118int main(void)
4119{
4120 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4121 return 0;
4122}
4123EOF
4124if compile_prog "" "" ; then
4125 prctl_pr_set_timerslack=yes
4126fi
4127
3b6edd16
PM
4128# check for epoll support
4129epoll=no
4130cat > $TMPC << EOF
4131#include <sys/epoll.h>
4132
4133int main(void)
4134{
4135 epoll_create(0);
4136 return 0;
4137}
4138EOF
8fb03151 4139if compile_prog "" "" ; then
3b6edd16
PM
4140 epoll=yes
4141fi
4142
227f0214
PM
4143# epoll_create1 is a later addition
4144# so we must check separately for its presence
3b6edd16
PM
4145epoll_create1=no
4146cat > $TMPC << EOF
4147#include <sys/epoll.h>
4148
4149int main(void)
4150{
19e83f6b
PM
4151 /* Note that we use epoll_create1 as a value, not as
4152 * a function being called. This is necessary so that on
4153 * old SPARC glibc versions where the function was present in
4154 * the library but not declared in the header file we will
4155 * fail the configure check. (Otherwise we will get a compiler
4156 * warning but not an error, and will proceed to fail the
4157 * qemu compile where we compile with -Werror.)
4158 */
c075a723 4159 return (int)(uintptr_t)&epoll_create1;
3b6edd16
PM
4160}
4161EOF
8fb03151 4162if compile_prog "" "" ; then
3b6edd16
PM
4163 epoll_create1=yes
4164fi
4165
a8fd1aba
PM
4166# check for sendfile support
4167sendfile=no
4168cat > $TMPC << EOF
4169#include <sys/sendfile.h>
4170
4171int main(void)
4172{
4173 return sendfile(0, 0, 0, 0);
4174}
4175EOF
4176if compile_prog "" "" ; then
4177 sendfile=yes
4178fi
4179
51834341
RV
4180# check for timerfd support (glibc 2.8 and newer)
4181timerfd=no
4182cat > $TMPC << EOF
4183#include <sys/timerfd.h>
4184
4185int main(void)
4186{
4187 return(timerfd_create(CLOCK_REALTIME, 0));
4188}
4189EOF
4190if compile_prog "" "" ; then
4191 timerfd=yes
4192fi
4193
9af5c906
RV
4194# check for setns and unshare support
4195setns=no
4196cat > $TMPC << EOF
4197#include <sched.h>
4198
4199int main(void)
4200{
4201 int ret;
4202 ret = setns(0, 0);
4203 ret = unshare(0);
4204 return ret;
4205}
4206EOF
4207if compile_prog "" "" ; then
4208 setns=yes
4209fi
4210
38860a03
AM
4211# clock_adjtime probe
4212clock_adjtime=no
4213cat > $TMPC <<EOF
4214#include <time.h>
4215
4216int main(void)
4217{
4218 return clock_adjtime(0, 0);
4219}
4220EOF
4221clock_adjtime=no
4222if compile_prog "" "" ; then
4223 clock_adjtime=yes
4224fi
4225
5a03cd00
AM
4226# syncfs probe
4227syncfs=no
4228cat > $TMPC <<EOF
4229#include <unistd.h>
4230
4231int main(void)
4232{
4233 return syncfs(0);
4234}
4235EOF
4236syncfs=no
4237if compile_prog "" "" ; then
4238 syncfs=yes
4239fi
4240
cc8ae6de 4241# Check if tools are available to build documentation.
a25dba17 4242if test "$docs" != "no" ; then
01668d98 4243 if has makeinfo && has pod2man; then
a25dba17 4244 docs=yes
83a3ab8b 4245 else
a25dba17 4246 if test "$docs" = "yes" ; then
21684af0 4247 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
83a3ab8b 4248 fi
a25dba17 4249 docs=no
83a3ab8b 4250 fi
cc8ae6de
PB
4251fi
4252
f514f41c 4253# Search for bswap_32 function
6ae9a1f4
JQ
4254byteswap_h=no
4255cat > $TMPC << EOF
4256#include <byteswap.h>
4257int main(void) { return bswap_32(0); }
4258EOF
52166aa0 4259if compile_prog "" "" ; then
6ae9a1f4
JQ
4260 byteswap_h=yes
4261fi
4262
75f13596 4263# Search for bswap32 function
6ae9a1f4
JQ
4264bswap_h=no
4265cat > $TMPC << EOF
4266#include <sys/endian.h>
4267#include <sys/types.h>
4268#include <machine/bswap.h>
4269int main(void) { return bswap32(0); }
4270EOF
52166aa0 4271if compile_prog "" "" ; then
6ae9a1f4
JQ
4272 bswap_h=yes
4273fi
4274
c589b249 4275##########################################
e49ab19f 4276# Do we have libiscsi >= 1.9.0
c589b249 4277if test "$libiscsi" != "no" ; then
e49ab19f 4278 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3c33ea96 4279 libiscsi="yes"
ca871ec8
SW
4280 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4281 libiscsi_libs=$($pkg_config --libs libiscsi)
c589b249
RS
4282 else
4283 if test "$libiscsi" = "yes" ; then
e49ab19f 4284 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
c589b249
RS
4285 fi
4286 libiscsi="no"
4287 fi
4288fi
4289
8bacde8d
NC
4290##########################################
4291# Do we need libm
4292cat > $TMPC << EOF
4293#include <math.h>
f80ea986 4294int main(int argc, char **argv) { return isnan(sin((double)argc)); }
8bacde8d
NC
4295EOF
4296if compile_prog "" "" ; then
4297 :
4298elif compile_prog "" "-lm" ; then
4299 LIBS="-lm $LIBS"
4300 libs_qga="-lm $libs_qga"
4301else
76ad07a4 4302 error_exit "libm check failed"
8bacde8d
NC
4303fi
4304
da93a1fd
AL
4305##########################################
4306# Do we need librt
8bacde8d
NC
4307# uClibc provides 2 versions of clock_gettime(), one with realtime
4308# support and one without. This means that the clock_gettime() don't
4309# need -lrt. We still need it for timer_create() so we check for this
4310# function in addition.
da93a1fd
AL
4311cat > $TMPC <<EOF
4312#include <signal.h>
4313#include <time.h>
8bacde8d
NC
4314int main(void) {
4315 timer_create(CLOCK_REALTIME, NULL, NULL);
4316 return clock_gettime(CLOCK_REALTIME, NULL);
4317}
da93a1fd
AL
4318EOF
4319
52166aa0 4320if compile_prog "" "" ; then
07ffa4bd 4321 :
8bacde8d 4322# we need pthread for static linking. use previous pthread test result
18e588b1
RL
4323elif compile_prog "" "$pthread_lib -lrt" ; then
4324 LIBS="$LIBS -lrt"
4325 libs_qga="$libs_qga -lrt"
da93a1fd
AL
4326fi
4327
31ff504d 4328if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
78723752 4329 "$haiku" != "yes" ; then
6362a53f
JQ
4330 libs_softmmu="-lutil $libs_softmmu"
4331fi
4332
de5071c5 4333##########################################
cd4ec0b4
GH
4334# spice probe
4335if test "$spice" != "no" ; then
4336 cat > $TMPC << EOF
4337#include <spice.h>
4338int main(void) { spice_server_new(); return 0; }
4339EOF
710fc4f5
JD
4340 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4341 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
65d5d3f9
SW
4342 if $pkg_config --atleast-version=0.12.0 spice-server && \
4343 $pkg_config --atleast-version=0.12.3 spice-protocol && \
cd4ec0b4
GH
4344 compile_prog "$spice_cflags" "$spice_libs" ; then
4345 spice="yes"
4346 libs_softmmu="$libs_softmmu $spice_libs"
4347 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
2e0e3c39
AL
4348 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4349 spice_server_version=$($pkg_config --modversion spice-server)
cd4ec0b4
GH
4350 else
4351 if test "$spice" = "yes" ; then
8efc9363
HT
4352 feature_not_found "spice" \
4353 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
cd4ec0b4
GH
4354 fi
4355 spice="no"
4356 fi
4357fi
4358
7b02f544 4359# check for smartcard support
7b02f544
MAL
4360if test "$smartcard" != "no"; then
4361 if $pkg_config libcacard; then
4362 libcacard_cflags=$($pkg_config --cflags libcacard)
4363 libcacard_libs=$($pkg_config --libs libcacard)
7b02f544 4364 smartcard="yes"
afd347ab 4365 else
7b02f544
MAL
4366 if test "$smartcard" = "yes"; then
4367 feature_not_found "smartcard" "Install libcacard devel"
111a38b0 4368 fi
7b02f544 4369 smartcard="no"
111a38b0
RR
4370 fi
4371fi
111a38b0 4372
2b2325ff
GH
4373# check for libusb
4374if test "$libusb" != "no" ; then
65d5d3f9 4375 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
2b2325ff 4376 libusb="yes"
ca871ec8
SW
4377 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4378 libusb_libs=$($pkg_config --libs libusb-1.0)
2b2325ff
GH
4379 else
4380 if test "$libusb" = "yes"; then
8efc9363 4381 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
2b2325ff
GH
4382 fi
4383 libusb="no"
4384 fi
4385fi
4386
69354a83
HG
4387# check for usbredirparser for usb network redirection support
4388if test "$usb_redir" != "no" ; then
65d5d3f9 4389 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
69354a83 4390 usb_redir="yes"
ca871ec8
SW
4391 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4392 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
69354a83
HG
4393 else
4394 if test "$usb_redir" = "yes"; then
21684af0 4395 feature_not_found "usb-redir" "Install usbredir devel"
69354a83
HG
4396 fi
4397 usb_redir="no"
4398 fi
4399fi
4400
d9840e25
TS
4401##########################################
4402# check if we have VSS SDK headers for win
4403
4404if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4405 case "$vss_win32_sdk" in
690604f6 4406 "") vss_win32_include="-isystem $source_path" ;;
d9840e25
TS
4407 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4408 # handle path with spaces. So we symlink the headers into ".sdk/vss".
690604f6 4409 vss_win32_include="-isystem $source_path/.sdk/vss"
d9840e25
TS
4410 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4411 ;;
690604f6 4412 *) vss_win32_include="-isystem $vss_win32_sdk"
d9840e25
TS
4413 esac
4414 cat > $TMPC << EOF
4415#define __MIDL_user_allocate_free_DEFINED__
4416#include <inc/win2003/vss.h>
4417int main(void) { return VSS_CTX_BACKUP; }
4418EOF
4419 if compile_prog "$vss_win32_include" "" ; then
4420 guest_agent_with_vss="yes"
4421 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
315d3184 4422 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
f33ca81f 4423 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
d9840e25
TS
4424 else
4425 if test "$vss_win32_sdk" != "" ; then
4426 echo "ERROR: Please download and install Microsoft VSS SDK:"
4427 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4428 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4429 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4430 echo "ERROR: The headers are extracted in the directory \`inc'."
4431 feature_not_found "VSS support"
4432 fi
4433 guest_agent_with_vss="no"
4434 fi
4435fi
4436
4437##########################################
4438# lookup Windows platform SDK (if not specified)
4439# The SDK is needed only to build .tlb (type library) file of guest agent
4440# VSS provider from the source. It is usually unnecessary because the
4441# pre-compiled .tlb file is included.
4442
4443if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4444 if test -z "$win_sdk"; then
4445 programfiles="$PROGRAMFILES"
4446 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4447 if test -n "$programfiles"; then
4448 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4449 else
4450 feature_not_found "Windows SDK"
4451 fi
4452 elif test "$win_sdk" = "no"; then
4453 win_sdk=""
4454 fi
4455fi
4456
50cbebb9
MR
4457##########################################
4458# check if mingw environment provides a recent ntddscsi.h
4459if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4460 cat > $TMPC << EOF
4461#include <windows.h>
4462#include <ntddscsi.h>
4463int main(void) {
4464#if !defined(IOCTL_SCSI_GET_ADDRESS)
4465#error Missing required ioctl definitions
4466#endif
4467 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4468 return addr.Lun;
4469}
4470EOF
4471 if compile_prog "" "" ; then
4472 guest_agent_ntddscsi=yes
c54e1eb4 4473 libs_qga="-lsetupapi $libs_qga"
50cbebb9
MR
4474 fi
4475fi
4476
9d9e1521
GH
4477##########################################
4478# virgl renderer probe
4479
4480if test "$virglrenderer" != "no" ; then
4481 cat > $TMPC << EOF
4482#include <virglrenderer.h>
4483int main(void) { virgl_renderer_poll(); return 0; }
4484EOF
4485 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4486 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4487 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4488 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4489 virglrenderer="yes"
4490 else
4491 if test "$virglrenderer" = "yes" ; then
4492 feature_not_found "virglrenderer"
4493 fi
4494 virglrenderer="no"
4495 fi
4496fi
4497
8ca80760
RH
4498##########################################
4499# capstone
4500
e219c499
RH
4501case "$capstone" in
4502 "" | yes)
4503 if $pkg_config capstone; then
4504 capstone=system
4505 elif test -e "${source_path}/.git" ; then
4506 capstone=git
4507 elif test -e "${source_path}/capstone/Makefile" ; then
4508 capstone=internal
4509 elif test -z "$capstone" ; then
4510 capstone=no
4511 else
4512 feature_not_found "capstone" "Install capstone devel or git submodule"
4513 fi
4514 ;;
4515
4516 system)
4517 if ! $pkg_config capstone; then
4518 feature_not_found "capstone" "Install capstone devel"
4519 fi
4520 ;;
4521esac
4522
4523case "$capstone" in
4524 git | internal)
4525 if test "$capstone" = git; then
4526 git_submodules="${git_submodules} capstone"
4527 fi
4528 mkdir -p capstone
4529 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4530 if test "$mingw32" = "yes"; then
4531 LIBCAPSTONE=capstone.lib
4532 else
4533 LIBCAPSTONE=libcapstone.a
4534 fi
4535 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4536 ;;
4537
4538 system)
8ca80760
RH
4539 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4540 LIBS="$($pkg_config --libs capstone) $LIBS"
e219c499
RH
4541 ;;
4542
4543 no)
4544 ;;
4545 *)
4546 error_exit "Unknown state for capstone: $capstone"
4547 ;;
4548esac
8ca80760 4549
5f6b9e8f
BS
4550##########################################
4551# check if we have fdatasync
4552
4553fdatasync=no
4554cat > $TMPC << EOF
4555#include <unistd.h>
d1722a27
AR
4556int main(void) {
4557#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4558return fdatasync(0);
4559#else
e172fe11 4560#error Not supported
d1722a27
AR
4561#endif
4562}
5f6b9e8f
BS
4563EOF
4564if compile_prog "" "" ; then
4565 fdatasync=yes
4566fi
4567
e78815a5
AF
4568##########################################
4569# check if we have madvise
4570
4571madvise=no
4572cat > $TMPC << EOF
4573#include <sys/types.h>
4574#include <sys/mman.h>
832ce9c2 4575#include <stddef.h>
e78815a5
AF
4576int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4577EOF
4578if compile_prog "" "" ; then
4579 madvise=yes
4580fi
4581
4582##########################################
4583# check if we have posix_madvise
4584
4585posix_madvise=no
4586cat > $TMPC << EOF
4587#include <sys/mman.h>
832ce9c2 4588#include <stddef.h>
e78815a5
AF
4589int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4590EOF
4591if compile_prog "" "" ; then
4592 posix_madvise=yes
4593fi
4594
0a852417
PD
4595##########################################
4596# check if we have posix_syslog
4597
4598posix_syslog=no
4599cat > $TMPC << EOF
4600#include <syslog.h>
4601int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4602EOF
4603if compile_prog "" "" ; then
4604 posix_syslog=yes
4605fi
4606
401bc051
PM
4607##########################################
4608# check if we have sem_timedwait
4609
4610sem_timedwait=no
4611cat > $TMPC << EOF
4612#include <semaphore.h>
4613int main(void) { return sem_timedwait(0, 0); }
4614EOF
4615if compile_prog "" "" ; then
4616 sem_timedwait=yes
4617fi
4618
94a420b1
SH
4619##########################################
4620# check if trace backend exists
4621
5b808275 4622$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 4623if test "$?" -ne 0 ; then
5b808275
LV
4624 error_exit "invalid trace backends" \
4625 "Please choose supported trace backends."
94a420b1
SH
4626fi
4627
7e24e92a
SH
4628##########################################
4629# For 'ust' backend, test if ust headers are present
5b808275 4630if have_backend "ust"; then
7e24e92a 4631 cat > $TMPC << EOF
bf15f63c 4632#include <lttng/tracepoint.h>
7e24e92a
SH
4633int main(void) { return 0; }
4634EOF
c79ed23d 4635 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
bf15f63c 4636 if $pkg_config lttng-ust --exists; then
89138857 4637 lttng_ust_libs=$($pkg_config --libs lttng-ust)
bf15f63c 4638 else
c79ed23d 4639 lttng_ust_libs="-llttng-ust -ldl"
bf15f63c
MG
4640 fi
4641 if $pkg_config liburcu-bp --exists; then
89138857 4642 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
bf15f63c
MG
4643 else
4644 urcu_bp_libs="-lurcu-bp"
4645 fi
4646
4647 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4648 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
7e24e92a 4649 else
bf15f63c 4650 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
4651 fi
4652fi
b3d08c02
DB
4653
4654##########################################
4655# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 4656if have_backend "dtrace"; then
b3d08c02 4657 if ! has 'dtrace' ; then
76ad07a4 4658 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 4659 fi
c276b17d
DB
4660 trace_backend_stap="no"
4661 if has 'stap' ; then
4662 trace_backend_stap="yes"
4663 fi
b3d08c02
DB
4664fi
4665
023367e6 4666##########################################
519175a2 4667# check and set a backend for coroutine
d0e2fce5 4668
7c2acc70 4669# We prefer ucontext, but it's not always possible. The fallback
33c53c54
DB
4670# is sigcontext. On Windows the only valid backend is the Windows
4671# specific one.
7c2acc70
PM
4672
4673ucontext_works=no
4674if test "$darwin" != "yes"; then
4675 cat > $TMPC << EOF
d0e2fce5 4676#include <ucontext.h>
cdf84806
PM
4677#ifdef __stub_makecontext
4678#error Ignoring glibc stub makecontext which will always fail
4679#endif
75cafad7 4680int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 4681EOF
7c2acc70
PM
4682 if compile_prog "" "" ; then
4683 ucontext_works=yes
4684 fi
4685fi
4686
4687if test "$coroutine" = ""; then
4688 if test "$mingw32" = "yes"; then
4689 coroutine=win32
4690 elif test "$ucontext_works" = "yes"; then
4691 coroutine=ucontext
4692 else
4693 coroutine=sigaltstack
d0e2fce5 4694 fi
519175a2 4695else
7c2acc70
PM
4696 case $coroutine in
4697 windows)
4698 if test "$mingw32" != "yes"; then
4699 error_exit "'windows' coroutine backend only valid for Windows"
4700 fi
4701 # Unfortunately the user visible backend name doesn't match the
4702 # coroutine-*.c filename for this case, so we have to adjust it here.
4703 coroutine=win32
4704 ;;
4705 ucontext)
4706 if test "$ucontext_works" != "yes"; then
4707 feature_not_found "ucontext"
4708 fi
4709 ;;
33c53c54 4710 sigaltstack)
7c2acc70
PM
4711 if test "$mingw32" = "yes"; then
4712 error_exit "only the 'windows' coroutine backend is valid for Windows"
4713 fi
4714 ;;
4715 *)
4716 error_exit "unknown coroutine backend $coroutine"
4717 ;;
4718 esac
d0e2fce5
AK
4719fi
4720
70c60c08 4721if test "$coroutine_pool" = ""; then
33c53c54 4722 coroutine_pool=yes
70c60c08
SH
4723fi
4724
7d992e4d
PL
4725if test "$debug_stack_usage" = "yes"; then
4726 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4727 error_exit "stack usage debugging is not supported for $cpu"
4728 fi
4729 if test "$coroutine_pool" = "yes"; then
4730 echo "WARN: disabling coroutine pool for stack usage debugging"
4731 coroutine_pool=no
4732 fi
4733fi
4734
4735
d2042378
AK
4736##########################################
4737# check if we have open_by_handle_at
4738
4e1797f9 4739open_by_handle_at=no
d2042378
AK
4740cat > $TMPC << EOF
4741#include <fcntl.h>
acc55ba8
SW
4742#if !defined(AT_EMPTY_PATH)
4743# error missing definition
4744#else
75cafad7 4745int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
acc55ba8 4746#endif
d2042378
AK
4747EOF
4748if compile_prog "" "" ; then
4749 open_by_handle_at=yes
4750fi
4751
e06a765e
HPB
4752########################################
4753# check if we have linux/magic.h
4754
4755linux_magic_h=no
4756cat > $TMPC << EOF
4757#include <linux/magic.h>
4758int main(void) {
75cafad7 4759 return 0;
e06a765e
HPB
4760}
4761EOF
4762if compile_prog "" "" ; then
4763 linux_magic_h=yes
4764fi
4765
06d71fa1 4766########################################
c95e3080
KW
4767# check whether we can disable warning option with a pragma (this is needed
4768# to silence warnings in the headers of some versions of external libraries).
4769# This test has to be compiled with -Werror as otherwise an unknown pragma is
4770# only a warning.
4771#
4772# If we can't selectively disable warning in the code, disable -Werror so that
4773# the build doesn't fail anyway.
4774
06d71fa1
PM
4775pragma_disable_unused_but_set=no
4776cat > $TMPC << EOF
e6f53fd5 4777#pragma GCC diagnostic push
06d71fa1 4778#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
c95e3080 4779#pragma GCC diagnostic ignored "-Wstrict-prototypes"
e6f53fd5 4780#pragma GCC diagnostic pop
c95e3080 4781
06d71fa1
PM
4782int main(void) {
4783 return 0;
4784}
4785EOF
4786if compile_prog "-Werror" "" ; then
cc6e3ca9 4787 pragma_diagnostic_available=yes
c95e3080
KW
4788else
4789 werror=no
06d71fa1
PM
4790fi
4791
3f4349dc 4792########################################
541be927 4793# check if we have valgrind/valgrind.h
3f4349dc
KW
4794
4795valgrind_h=no
4796cat > $TMPC << EOF
4797#include <valgrind/valgrind.h>
3f4349dc 4798int main(void) {
3f4349dc
KW
4799 return 0;
4800}
4801EOF
4802if compile_prog "" "" ; then
4803 valgrind_h=yes
4804fi
4805
8ab1bf12
LC
4806########################################
4807# check if environ is declared
4808
4809has_environ=no
4810cat > $TMPC << EOF
4811#include <unistd.h>
4812int main(void) {
c075a723 4813 environ = 0;
8ab1bf12
LC
4814 return 0;
4815}
4816EOF
4817if compile_prog "" "" ; then
4818 has_environ=yes
4819fi
4820
76a347e1
RH
4821########################################
4822# check if cpuid.h is usable.
4823
76a347e1
RH
4824cat > $TMPC << EOF
4825#include <cpuid.h>
4826int main(void) {
774d566c
PM
4827 unsigned a, b, c, d;
4828 int max = __get_cpuid_max(0, 0);
4829
4830 if (max >= 1) {
4831 __cpuid(1, a, b, c, d);
4832 }
4833
4834 if (max >= 7) {
4835 __cpuid_count(7, 0, a, b, c, d);
4836 }
4837
4838 return 0;
76a347e1
RH
4839}
4840EOF
4841if compile_prog "" "" ; then
4842 cpuid_h=yes
4843fi
4844
5dd89908
RH
4845##########################################
4846# avx2 optimization requirement check
4847#
4848# There is no point enabling this if cpuid.h is not usable,
4849# since we won't be able to select the new routines.
4850
4851if test $cpuid_h = yes; then
4852 cat > $TMPC << EOF
4853#pragma GCC push_options
4854#pragma GCC target("avx2")
4855#include <cpuid.h>
4856#include <immintrin.h>
4857static int bar(void *a) {
4858 __m256i x = *(__m256i *)a;
4859 return _mm256_testz_si256(x, x);
4860}
4861int main(int argc, char *argv[]) { return bar(argv[0]); }
4862EOF
4863 if compile_object "" ; then
4864 avx2_opt="yes"
4865 fi
4866fi
4867
f540166b
RH
4868########################################
4869# check if __[u]int128_t is usable.
4870
4871int128=no
4872cat > $TMPC << EOF
a00f66ab
SW
4873#if defined(__clang_major__) && defined(__clang_minor__)
4874# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4875# error __int128_t does not work in CLANG before 3.2
4876# endif
4877#endif
f540166b
RH
4878__int128_t a;
4879__uint128_t b;
4880int main (void) {
4881 a = a + b;
4882 b = a * b;
464e3671 4883 a = a * a;
f540166b
RH
4884 return 0;
4885}
4886EOF
4887if compile_prog "" "" ; then
4888 int128=yes
4889fi
76a347e1 4890
7ebee43e
RH
4891#########################################
4892# See if 128-bit atomic operations are supported.
4893
4894atomic128=no
4895if test "$int128" = "yes"; then
4896 cat > $TMPC << EOF
4897int main(void)
4898{
4899 unsigned __int128 x = 0, y = 0;
4900 y = __atomic_load_16(&x, 0);
4901 __atomic_store_16(&x, y, 0);
4902 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4903 return 0;
4904}
4905EOF
4906 if compile_prog "" "" ; then
4907 atomic128=yes
4908 fi
4909fi
4910
df79b996
RH
4911#########################################
4912# See if 64-bit atomic operations are supported.
4913# Note that without __atomic builtins, we can only
4914# assume atomic loads/stores max at pointer size.
4915
4916cat > $TMPC << EOF
4917#include <stdint.h>
4918int main(void)
4919{
4920 uint64_t x = 0, y = 0;
4921#ifdef __ATOMIC_RELAXED
4922 y = __atomic_load_8(&x, 0);
4923 __atomic_store_8(&x, y, 0);
4924 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4925 __atomic_exchange_8(&x, y, 0);
4926 __atomic_fetch_add_8(&x, y, 0);
4927#else
4928 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4929 __sync_lock_test_and_set(&x, y);
4930 __sync_val_compare_and_swap(&x, y, 0);
4931 __sync_fetch_and_add(&x, y);
4932#endif
4933 return 0;
4934}
4935EOF
4936if compile_prog "" "" ; then
4937 atomic64=yes
4938fi
4939
1e6e9aca
RH
4940########################################
4941# check if getauxval is available.
4942
4943getauxval=no
4944cat > $TMPC << EOF
4945#include <sys/auxv.h>
4946int main(void) {
4947 return getauxval(AT_HWCAP) == 0;
4948}
4949EOF
4950if compile_prog "" "" ; then
4951 getauxval=yes
4952fi
4953
fd0e6053
JS
4954########################################
4955# check if ccache is interfering with
4956# semantic analysis of macros
4957
5e4dfd3d 4958unset CCACHE_CPP2
fd0e6053
JS
4959ccache_cpp2=no
4960cat > $TMPC << EOF
4961static const int Z = 1;
4962#define fn() ({ Z; })
4963#define TAUT(X) ((X) == Z)
4964#define PAREN(X, Y) (X == Y)
4965#define ID(X) (X)
4966int main(int argc, char *argv[])
4967{
4968 int x = 0, y = 0;
4969 x = ID(x);
4970 x = fn();
4971 fn();
4972 if (PAREN(x, y)) return 0;
4973 if (TAUT(Z)) return 0;
4974 return 0;
4975}
4976EOF
4977
4978if ! compile_object "-Werror"; then
4979 ccache_cpp2=yes
4980fi
4981
b553a042
JS
4982#################################################
4983# clang does not support glibc + FORTIFY_SOURCE.
4984
4985if test "$fortify_source" != "no"; then
4986 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4987 fortify_source="no";
e189091f 4988 elif test -n "$cxx" && has $cxx &&
cfcc7c14 4989 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
b553a042
JS
4990 fortify_source="no";
4991 else
4992 fortify_source="yes"
4993 fi
4994fi
4995
277abf15
JV
4996##########################################
4997# check if struct fsxattr is available via linux/fs.h
4998
4999have_fsxattr=no
5000cat > $TMPC << EOF
5001#include <linux/fs.h>
5002struct fsxattr foo;
5003int main(void) {
5004 return 0;
5005}
5006EOF
5007if compile_prog "" "" ; then
5008 have_fsxattr=yes
5009fi
5010
b66e10e4
PM
5011##########################################
5012# check if rtnetlink.h exists and is useful
575b22b1
LV
5013have_rtnetlink=no
5014cat > $TMPC << EOF
5015#include <linux/rtnetlink.h>
5016int main(void) {
5017 return IFLA_PROTO_DOWN;
5018}
5019EOF
5020if compile_prog "" "" ; then
5021 have_rtnetlink=yes
5022fi
5023
6a02c806
SH
5024##########################################
5025# check for usable AF_VSOCK environment
5026have_af_vsock=no
5027cat > $TMPC << EOF
5028#include <errno.h>
5029#include <sys/types.h>
5030#include <sys/socket.h>
5031#if !defined(AF_VSOCK)
5032# error missing AF_VSOCK flag
5033#endif
5034#include <linux/vm_sockets.h>
5035int main(void) {
5036 int sock, ret;
5037 struct sockaddr_vm svm;
5038 socklen_t len = sizeof(svm);
5039 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5040 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5041 if ((ret == -1) && (errno == ENOTCONN)) {
5042 return 0;
5043 }
5044 return -1;
5045}
5046EOF
5047if compile_prog "" "" ; then
5048 have_af_vsock=yes
5049fi
5050
f0d92b56
LM
5051##########################################
5052# check for usable AF_ALG environment
5053hava_afalg=no
5054cat > $TMPC << EOF
5055#include <errno.h>
5056#include <sys/types.h>
5057#include <sys/socket.h>
5058#include <linux/if_alg.h>
5059int main(void) {
5060 int sock;
5061 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5062 return sock;
5063}
5064EOF
5065if compile_prog "" "" ; then
5066 have_afalg=yes
5067fi
5068if test "$crypto_afalg" = "yes"
5069then
5070 if test "$have_afalg" != "yes"
5071 then
5072 error_exit "AF_ALG requested but could not be detected"
5073 fi
5074fi
5075
5076
c97d6d2c
SAGDR
5077#################################################
5078# Check to see if we have the Hypervisor framework
d2d08522 5079if [ "$darwin" = "yes" ] ; then
c97d6d2c
SAGDR
5080 cat > $TMPC << EOF
5081#include <Hypervisor/hv.h>
5082int main() { return 0;}
5083EOF
5084 if ! compile_object ""; then
5085 hvf='no'
5086 else
5087 hvf='yes'
5088 LDFLAGS="-framework Hypervisor $LDFLAGS"
5089 fi
5090fi
5091
6969ec6c
JC
5092#################################################
5093# Sparc implicitly links with --relax, which is
5094# incompatible with -r, so --no-relax should be
5095# given. It does no harm to give it on other
5096# platforms too.
5097
5098# Note: the prototype is needed since QEMU_CFLAGS
5099# contains -Wmissing-prototypes
5100cat > $TMPC << EOF
5101extern int foo(void);
5102int foo(void) { return 0; }
5103EOF
5104if ! compile_object ""; then
5105 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5106fi
7ecf44a5
PB
5107for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5108 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5109 LD_REL_FLAGS=$i
5110 break
5111 fi
5112done
5113if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5114 feature_not_found "modules" "Cannot find how to build relocatable objects"
6969ec6c
JC
5115fi
5116
4d04351f
CC
5117##########################################
5118# check for sysmacros.h
5119
5120have_sysmacros=no
5121cat > $TMPC << EOF
5122#include <sys/sysmacros.h>
5123int main(void) {
5124 return makedev(0, 0);
5125}
5126EOF
5127if compile_prog "" "" ; then
5128 have_sysmacros=yes
5129fi
5130
da92c3ff
AM
5131##########################################
5132# Veritas HyperScale block driver VxHS
5133# Check if libvxhs is installed
5134
5135if test "$vxhs" != "no" ; then
5136 cat > $TMPC <<EOF
5137#include <stdint.h>
5138#include <qnio/qnio_api.h>
5139
5140void *vxhs_callback;
5141
5142int main(void) {
5143 iio_init(QNIO_VERSION, vxhs_callback);
5144 return 0;
5145}
5146EOF
5147 vxhs_libs="-lvxhs -lssl"
5148 if compile_prog "" "$vxhs_libs" ; then
5149 vxhs=yes
5150 else
5151 if test "$vxhs" = "yes" ; then
5152 feature_not_found "vxhs block device" "Install libvxhs See github"
5153 fi
5154 vxhs=no
5155 fi
5156fi
5157
49e00a18
AG
5158##########################################
5159# check for _Static_assert()
5160
5161have_static_assert=no
5162cat > $TMPC << EOF
5163_Static_assert(1, "success");
5164int main(void) {
5165 return 0;
5166}
5167EOF
5168if compile_prog "" "" ; then
5169 have_static_assert=yes
5170fi
5171
e674605f
TG
5172##########################################
5173# check for utmpx.h, it is missing e.g. on OpenBSD
5174
5175have_utmpx=no
5176cat > $TMPC << EOF
5177#include <utmpx.h>
5178struct utmpx user_info;
5179int main(void) {
5180 return 0;
5181}
5182EOF
5183if compile_prog "" "" ; then
5184 have_utmpx=yes
5185fi
5186
7e24e92a 5187##########################################
e86ecd4b
JQ
5188# End of CC checks
5189# After here, no more $cc or $ld runs
5190
1d728c39
BS
5191if test "$gcov" = "yes" ; then
5192 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5193 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
b553a042 5194elif test "$fortify_source" = "yes" ; then
e600cdf3 5195 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
ce278618
PM
5196elif test "$debug" = "no"; then
5197 CFLAGS="-O2 $CFLAGS"
e86ecd4b 5198fi
a316e378 5199
6542aa9c
PL
5200##########################################
5201# Do we have libnfs
5202if test "$libnfs" != "no" ; then
b7d769c9 5203 if $pkg_config --atleast-version=1.9.3 libnfs; then
6542aa9c
PL
5204 libnfs="yes"
5205 libnfs_libs=$($pkg_config --libs libnfs)
6542aa9c
PL
5206 else
5207 if test "$libnfs" = "yes" ; then
8efc9363 5208 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6542aa9c
PL
5209 fi
5210 libnfs="no"
5211 fi
5212fi
1d728c39 5213
6ca026cb
PM
5214# Now we've finished running tests it's OK to add -Werror to the compiler flags
5215if test "$werror" = "yes"; then
5216 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5217fi
5218
e86ecd4b
JQ
5219if test "$solaris" = "no" ; then
5220 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
1156c669 5221 LDFLAGS="-Wl,--warn-common $LDFLAGS"
e86ecd4b
JQ
5222 fi
5223fi
5224
94dd53c5
GH
5225# test if pod2man has --utf8 option
5226if pod2man --help | grep -q utf8; then
5227 POD2MAN="pod2man --utf8"
5228else
5229 POD2MAN="pod2man"
5230fi
5231
952afb71
BS
5232# Use ASLR, no-SEH and DEP if available
5233if test "$mingw32" = "yes" ; then
5234 for flag in --dynamicbase --no-seh --nxcompat; do
e9a3591f 5235 if ld_has $flag ; then
952afb71
BS
5236 LDFLAGS="-Wl,$flag $LDFLAGS"
5237 fi
5238 done
5239fi
5240
10ea68b3 5241qemu_confdir=$sysconfdir$confsuffix
e26110cf 5242qemu_moddir=$libdir$confsuffix
528ae5b8 5243qemu_datadir=$datadir$confsuffix
834574ea 5244qemu_localedir="$datadir/locale"
e7b45cc4 5245
e0580342
KR
5246# We can only support ivshmem if we have eventfd
5247if [ "$eventfd" = "yes" ]; then
5248 ivshmem=yes
5249fi
5250
4b1c11fd
DB
5251tools=""
5252if test "$want_tools" = "yes" ; then
ca35f780 5253 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4b1c11fd
DB
5254 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5255 tools="qemu-nbd\$(EXESUF) $tools"
b1449edb
KR
5256 fi
5257 if [ "$ivshmem" = "yes" ]; then
a75eb03b 5258 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4b1c11fd
DB
5259 fi
5260fi
5261if test "$softmmu" = yes ; then
b855f8d1
PB
5262 if test "$linux" = yes; then
5263 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
aabfd88d
AF
5264 virtfs=yes
5265 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5266 else
5267 if test "$virtfs" = yes; then
b855f8d1 5268 error_exit "VirtFS requires libcap devel and libattr devel"
983eef5a 5269 fi
17500370 5270 virtfs=no
aabfd88d 5271 fi
fe8fc5ae
PB
5272 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5273 mpath=yes
5274 else
5275 if test "$mpath" = yes; then
5276 error_exit "Multipath requires libmpathpersist devel"
5277 fi
5278 mpath=no
5279 fi
b855f8d1
PB
5280 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5281 else
5282 if test "$virtfs" = yes; then
5283 error_exit "VirtFS is supported only on Linux"
5284 fi
5285 virtfs=no
fe8fc5ae
PB
5286 if test "$mpath" = yes; then
5287 error_exit "Multipath is supported only on Linux"
5288 fi
5289 mpath=no
17bff52b 5290 fi
ff69fd8c
LV
5291 if test "$xkbcommon" = "yes"; then
5292 tools="qemu-keymap\$(EXESUF) $tools"
5293 fi
6a021536 5294fi
9d6bc27b
MR
5295
5296# Probe for guest agent support/options
5297
e8ef31a3 5298if [ "$guest_agent" != "no" ]; then
b39297ae 5299 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
fafcaf1d 5300 tools="qemu-ga $tools"
e8ef31a3
MT
5301 guest_agent=yes
5302 elif [ "$guest_agent" != yes ]; then
5303 guest_agent=no
5304 else
5305 error_exit "Guest agent is not supported on this platform"
ca35f780 5306 fi
00c705fb 5307fi
ca35f780 5308
9d6bc27b
MR
5309# Guest agent Window MSI package
5310
5311if test "$guest_agent" != yes; then
5312 if test "$guest_agent_msi" = yes; then
5313 error_exit "MSI guest agent package requires guest agent enabled"
5314 fi
5315 guest_agent_msi=no
5316elif test "$mingw32" != "yes"; then
5317 if test "$guest_agent_msi" = "yes"; then
5318 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5319 fi
5320 guest_agent_msi=no
5321elif ! has wixl; then
5322 if test "$guest_agent_msi" = "yes"; then
5323 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5324 fi
5325 guest_agent_msi=no
1a34904e
MR
5326else
5327 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5328 # disabled explicitly
5329 if test "$guest_agent_msi" != "no"; then
5330 guest_agent_msi=yes
5331 fi
9d6bc27b
MR
5332fi
5333
1a34904e 5334if test "$guest_agent_msi" = "yes"; then
9d6bc27b
MR
5335 if test "$guest_agent_with_vss" = "yes"; then
5336 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5337 fi
5338
5339 if test "$QEMU_GA_MANUFACTURER" = ""; then
5340 QEMU_GA_MANUFACTURER=QEMU
5341 fi
5342
5343 if test "$QEMU_GA_DISTRO" = ""; then
5344 QEMU_GA_DISTRO=Linux
5345 fi
5346
5347 if test "$QEMU_GA_VERSION" = ""; then
89138857 5348 QEMU_GA_VERSION=$(cat $source_path/VERSION)
9d6bc27b
MR
5349 fi
5350
89138857 5351 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
9d6bc27b
MR
5352
5353 case "$cpu" in
5354 x86_64)
5355 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5356 ;;
5357 i386)
5358 QEMU_GA_MSI_ARCH="-D Arch=32"
5359 ;;
5360 *)
5361 error_exit "CPU $cpu not supported for building installation package"
5362 ;;
5363 esac
5364fi
5365
ca35f780
PB
5366# Mac OS X ships with a broken assembler
5367roms=
5368if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5369 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5370 "$softmmu" = yes ; then
e57218b6 5371 # Different host OS linkers have different ideas about the name of the ELF
c65d5e4e
BS
5372 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5373 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5374 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
e57218b6
PM
5375 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5376 ld_i386_emulation="$emu"
5377 roms="optionrom"
5378 break
5379 fi
5380 done
ca35f780 5381fi
d0384d1d 5382if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
39ac8455
DG
5383 roms="$roms spapr-rtas"
5384fi
ca35f780 5385
9933c305
CB
5386if test "$cpu" = "s390x" ; then
5387 roms="$roms s390-ccw"
5388fi
5389
964c6fa1 5390# Probe for the need for relocating the user-only binary.
92fe2ba8 5391if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
964c6fa1
RH
5392 textseg_addr=
5393 case "$cpu" in
479eb121
RH
5394 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5395 # ??? Rationale for choosing this address
964c6fa1
RH
5396 textseg_addr=0x60000000
5397 ;;
5398 mips)
479eb121
RH
5399 # A 256M aligned address, high in the address space, with enough
5400 # room for the code_gen_buffer above it before the stack.
5401 textseg_addr=0x60000000
964c6fa1
RH
5402 ;;
5403 esac
5404 if [ -n "$textseg_addr" ]; then
5405 cat > $TMPC <<EOF
5406 int main(void) { return 0; }
5407EOF
5408 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5409 if ! compile_prog "" "$textseg_ldflags"; then
5410 # In case ld does not support -Ttext-segment, edit the default linker
5411 # script via sed to set the .text start addr. This is needed on FreeBSD
5412 # at least.
92fe2ba8
PM
5413 if ! $ld --verbose >/dev/null 2>&1; then
5414 error_exit \
5415 "We need to link the QEMU user mode binaries at a" \
5416 "specific text address. Unfortunately your linker" \
5417 "doesn't support either the -Ttext-segment option or" \
5418 "printing the default linker script with --verbose." \
5419 "If you don't want the user mode binaries, pass the" \
5420 "--disable-user option to configure."
5421 fi
5422
964c6fa1
RH
5423 $ld --verbose | sed \
5424 -e '1,/==================================================/d' \
5425 -e '/==================================================/,$d' \
5426 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5427 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5428 textseg_ldflags="-Wl,-T../config-host.ld"
5429 fi
5430 fi
5431fi
5432
11cde1c8
BD
5433# Check that the C++ compiler exists and works with the C compiler.
5434# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5435if has $cxx; then
5436 cat > $TMPC <<EOF
5437int c_function(void);
5438int main(void) { return c_function(); }
5439EOF
5440
5441 compile_object
5442
5443 cat > $TMPCXX <<EOF
5444extern "C" {
5445 int c_function(void);
5446}
5447int c_function(void) { return 42; }
5448EOF
5449
5450 update_cxxflags
5451
5452 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5453 # C++ compiler $cxx works ok with C compiler $cc
5454 :
5455 else
5456 echo "C++ compiler $cxx does not work with C compiler $cc"
5457 echo "Disabling C++ specific optional code"
5458 cxx=
5459 fi
5460else
5461 echo "No C++ compiler available; disabling C++ specific optional code"
5462 cxx=
5463fi
5464
02d34f62
CR
5465echo_version() {
5466 if test "$1" = "yes" ; then
5467 echo "($2)"
5468 fi
5469}
5470
50e12060
JK
5471# prepend pixman and ftd flags after all config tests are done
5472QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5473libs_softmmu="$pixman_libs $libs_softmmu"
5ca9388a 5474
43ce4dfe 5475echo "Install prefix $prefix"
89138857 5476echo "BIOS directory $(eval echo $qemu_datadir)"
3d5eecab 5477echo "firmware path $(eval echo $firmwarepath)"
89138857
SW
5478echo "binary directory $(eval echo $bindir)"
5479echo "library directory $(eval echo $libdir)"
5480echo "module directory $(eval echo $qemu_moddir)"
5481echo "libexec directory $(eval echo $libexecdir)"
5482echo "include directory $(eval echo $includedir)"
5483echo "config directory $(eval echo $sysconfdir)"
11d9f695 5484if test "$mingw32" = "no" ; then
89138857
SW
5485echo "local state directory $(eval echo $local_statedir)"
5486echo "Manual directory $(eval echo $mandir)"
43ce4dfe 5487echo "ELF interp prefix $interp_prefix"
5a699bbb
LE
5488else
5489echo "local state directory queried at runtime"
d9840e25 5490echo "Windows SDK $win_sdk"
11d9f695 5491fi
5a67135a 5492echo "Source path $source_path"
cc84d63a 5493echo "GIT binary $git"
aef45d51 5494echo "GIT submodules $git_submodules"
43ce4dfe 5495echo "C compiler $cc"
83469015 5496echo "Host C compiler $host_cc"
83f73fce 5497echo "C++ compiler $cxx"
3c4a4d0d 5498echo "Objective-C compiler $objcc"
45d285ab 5499echo "ARFLAGS $ARFLAGS"
0c439cbf 5500echo "CFLAGS $CFLAGS"
a558ee17 5501echo "QEMU_CFLAGS $QEMU_CFLAGS"
0c439cbf 5502echo "LDFLAGS $LDFLAGS"
43ce4dfe 5503echo "make $make"
6a882643 5504echo "install $install"
c886edfb 5505echo "python $python"
e2d8830e
BS
5506if test "$slirp" = "yes" ; then
5507 echo "smbd $smbd"
5508fi
17969268 5509echo "module support $modules"
43ce4dfe 5510echo "host CPU $cpu"
de83cd02 5511echo "host big endian $bigendian"
97a847bc 5512echo "target list $target_list"
43ce4dfe 5513echo "gprof enabled $gprof"
03b4fe7d 5514echo "sparse enabled $sparse"
1625af87 5515echo "strip binaries $strip_opt"
05c2a3e7 5516echo "profiler $profiler"
43ce4dfe 5517echo "static build $static"
5b0753e0
FB
5518if test "$darwin" = "yes" ; then
5519 echo "Cocoa support $cocoa"
5520fi
89138857
SW
5521echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5522echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
925a0400 5523echo "GTK GL support $gtk_gl"
89138857 5524echo "VTE support $vte $(echo_version $vte $vteversion)"
a1c5e949 5525echo "TLS priority $tls_priority"
ddbb0d09 5526echo "GNUTLS support $gnutls"
b917da4c 5527echo "GNUTLS rnd $gnutls_rnd"
91bfcdb0 5528echo "libgcrypt $gcrypt"
37788f25 5529echo "libgcrypt kdf $gcrypt_kdf"
89138857 5530echo "nettle $nettle $(echo_version $nettle $nettle_version)"
fff2f982 5531echo "nettle kdf $nettle_kdf"
9a2fd434 5532echo "libtasn1 $tasn1"
4d3b6f6e 5533echo "curses support $curses"
9d9e1521 5534echo "virgl support $virglrenderer"
769ce76d 5535echo "curl support $curl"
67b915a5 5536echo "mingw32 support $mingw32"
0c58ac1c 5537echo "Audio drivers $audio_drv_list"
b64ec4e4
FZ
5538echo "Block whitelist (rw) $block_drv_rw_whitelist"
5539echo "Block whitelist (ro) $block_drv_ro_whitelist"
983eef5a 5540echo "VirtFS support $virtfs"
fe8fc5ae 5541echo "Multipath support $mpath"
821601ea
JS
5542echo "VNC support $vnc"
5543if test "$vnc" = "yes" ; then
821601ea
JS
5544 echo "VNC SASL support $vnc_sasl"
5545 echo "VNC JPEG support $vnc_jpeg"
5546 echo "VNC PNG support $vnc_png"
821601ea 5547fi
3142255c
BS
5548if test -n "$sparc_cpu"; then
5549 echo "Target Sparc Arch $sparc_cpu"
5550fi
e37630ca 5551echo "xen support $xen"
3996e85c
PD
5552if test "$xen" = "yes" ; then
5553 echo "xen ctrl version $xen_ctrl_version"
64a7ad6f 5554 echo "pv dom build $xen_pv_domain_build"
3996e85c 5555fi
2e4d9fb1 5556echo "brlapi support $brlapi"
a20a6f46 5557echo "bluez support $bluez"
a25dba17 5558echo "Documentation $docs"
40d6444e 5559echo "PIE $pie"
8a16d273 5560echo "vde support $vde"
58952137 5561echo "netmap support $netmap"
5c6c3a6c 5562echo "Linux AIO support $linux_aio"
758e8e38 5563echo "ATTR/XATTR support $attr"
77755340 5564echo "Install blobs $blobs"
b31a0277 5565echo "KVM support $kvm"
b0cb0a66 5566echo "HAX support $hax"
c97d6d2c 5567echo "HVF support $hvf"
b3f6ea7e
PB
5568echo "TCG support $tcg"
5569if test "$tcg" = "yes" ; then
5570 echo "TCG debug enabled $debug_tcg"
5571 echo "TCG interpreter $tcg_interpreter"
5572fi
5a22ab71 5573echo "malloc trim support $malloc_trim"
2da776db 5574echo "RDMA support $rdma"
f652e6af 5575echo "fdt support $fdt"
ceb42de8 5576echo "preadv support $preadv"
5f6b9e8f 5577echo "fdatasync $fdatasync"
e78815a5
AF
5578echo "madvise $madvise"
5579echo "posix_madvise $posix_madvise"
47e98658 5580echo "libcap-ng support $cap_ng"
d5970055 5581echo "vhost-net support $vhost_net"
5e9be92d 5582echo "vhost-scsi support $vhost_scsi"
fc0b9b0e 5583echo "vhost-vsock support $vhost_vsock"
e6a74868 5584echo "vhost-user support $vhost_user"
5b808275 5585echo "Trace backends $trace_backends"
713572a7 5586if have_backend "simple"; then
9410b56c 5587echo "Trace output file $trace_file-<pid>"
e00e36fb 5588fi
89138857 5589echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
f27aaf4b 5590echo "rbd support $rbd"
dce512de 5591echo "xfsctl support $xfs"
7b02f544 5592echo "smartcard support $smartcard"
2b2325ff 5593echo "libusb $libusb"
69354a83 5594echo "usb net redir $usb_redir"
da076ffe 5595echo "OpenGL support $opengl"
014cb152 5596echo "OpenGL dmabufs $opengl_dmabuf"
c589b249 5597echo "libiscsi support $libiscsi"
6542aa9c 5598echo "libnfs support $libnfs"
d138cee9 5599echo "build guest agent $guest_agent"
d9840e25 5600echo "QGA VSS support $guest_agent_with_vss"
50cbebb9 5601echo "QGA w32 disk info $guest_agent_ntddscsi"
4c875d89 5602echo "QGA MSI support $guest_agent_msi"
f794573e 5603echo "seccomp support $seccomp"
7c2acc70 5604echo "coroutine backend $coroutine"
70c60c08 5605echo "coroutine pool $coroutine_pool"
7d992e4d 5606echo "debug stack usage $debug_stack_usage"
f0d92b56 5607echo "crypto afalg $crypto_afalg"
eb100396 5608echo "GlusterFS support $glusterfs"
1d728c39
BS
5609echo "gcov $gcov_tool"
5610echo "gcov enabled $gcov"
ab214c29 5611echo "TPM support $tpm"
0a12ec87 5612echo "libssh2 support $libssh2"
3b8acc11 5613echo "TPM passthrough $tpm_passthrough"
f4ede81e 5614echo "TPM emulator $tpm_emulator"
3556c233 5615echo "QOM debugging $qom_cast_debug"
ed1701c6 5616echo "Live block migration $live_block_migration"
607dacd0
QN
5617echo "lzo support $lzo"
5618echo "snappy support $snappy"
6b383c08 5619echo "bzip2 support $bzip2"
a99d57bb 5620echo "NUMA host support $numa"
2847b469 5621echo "tcmalloc support $tcmalloc"
7b01cb97 5622echo "jemalloc support $jemalloc"
99f2dbd3 5623echo "avx2 optimization $avx2_opt"
a6b1d4c0 5624echo "replication support $replication"
da92c3ff 5625echo "VxHS block device $vxhs"
8ca80760 5626echo "capstone $capstone"
67b915a5 5627
1ba16968 5628if test "$sdl_too_old" = "yes"; then
24b55b96 5629echo "-> Your SDL version is too old - please upgrade to have SDL support"
7c1f25b4 5630fi
7d13299d 5631
898be3e0
PM
5632if test "$supported_cpu" = "no"; then
5633 echo
5634 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5635 echo
5636 echo "CPU host architecture $cpu support is not currently maintained."
5637 echo "The QEMU project intends to remove support for this host CPU in"
5638 echo "a future release if nobody volunteers to maintain it and to"
5639 echo "provide a build host for our continuous integration setup."
5640 echo "configure has succeeded and you can continue to build, but"
5641 echo "if you care about QEMU on this platform you should contact"
5642 echo "us upstream at qemu-devel@nongnu.org."
5643fi
5644
5645if test "$supported_os" = "no"; then
5646 echo
5647 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5648 echo
c50126aa
PM
5649 echo "Host OS $targetos support is not currently maintained."
5650 echo "The QEMU project intends to remove support for this host OS in"
898be3e0
PM
5651 echo "a future release if nobody volunteers to maintain it and to"
5652 echo "provide a build host for our continuous integration setup."
5653 echo "configure has succeeded and you can continue to build, but"
5654 echo "if you care about QEMU on this platform you should contact"
5655 echo "us upstream at qemu-devel@nongnu.org."
5656fi
5657
98ec69ac 5658config_host_mak="config-host.mak"
98ec69ac 5659
dbd99ae3
SW
5660echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5661
98ec69ac 5662echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 5663echo >> $config_host_mak
98ec69ac 5664
e6c3b0f7 5665echo all: >> $config_host_mak
99d7cc75
PB
5666echo "prefix=$prefix" >> $config_host_mak
5667echo "bindir=$bindir" >> $config_host_mak
3aa5d2be 5668echo "libdir=$libdir" >> $config_host_mak
8bf188aa 5669echo "libexecdir=$libexecdir" >> $config_host_mak
0f94d6da 5670echo "includedir=$includedir" >> $config_host_mak
99d7cc75 5671echo "mandir=$mandir" >> $config_host_mak
99d7cc75 5672echo "sysconfdir=$sysconfdir" >> $config_host_mak
22d07038 5673echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
9afa52ce 5674echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
3d5eecab 5675echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
9afa52ce 5676echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
e26110cf 5677echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5a699bbb
LE
5678if test "$mingw32" = "no" ; then
5679 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5680fi
f354b1a1 5681echo "qemu_helperdir=$libexecdir" >> $config_host_mak
f9943cd5 5682echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
11cde1c8 5683echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
f9943cd5 5684echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
834574ea 5685echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
f544a488 5686echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
cc84d63a 5687echo "GIT=$git" >> $config_host_mak
aef45d51 5688echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
f62bbee5 5689echo "GIT_UPDATE=$git_update" >> $config_host_mak
804edf29 5690
98ec69ac 5691echo "ARCH=$ARCH" >> $config_host_mak
727e5283 5692
f8393946 5693if test "$debug_tcg" = "yes" ; then
2358a494 5694 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 5695fi
1625af87 5696if test "$strip_opt" = "yes" ; then
52ba784d 5697 echo "STRIP=${strip}" >> $config_host_mak
1625af87 5698fi
7d13299d 5699if test "$bigendian" = "yes" ; then
e2542fe2 5700 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 5701fi
67b915a5 5702if test "$mingw32" = "yes" ; then
98ec69ac 5703 echo "CONFIG_WIN32=y" >> $config_host_mak
89138857 5704 rc_version=$(cat $source_path/VERSION)
9fe6de94
BS
5705 version_major=${rc_version%%.*}
5706 rc_version=${rc_version#*.}
5707 version_minor=${rc_version%%.*}
5708 rc_version=${rc_version#*.}
5709 version_subminor=${rc_version%%.*}
5710 version_micro=0
5711 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5712 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
d9840e25
TS
5713 if test "$guest_agent_with_vss" = "yes" ; then
5714 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 5715 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
5716 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5717 fi
50cbebb9
MR
5718 if test "$guest_agent_ntddscsi" = "yes" ; then
5719 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5720 fi
1a34904e 5721 if test "$guest_agent_msi" = "yes"; then
9dacf32d
YH
5722 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5723 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5724 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5725 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5726 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5727 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5728 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5729 fi
210fa556 5730else
35f4df27 5731 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
5732fi
5733
5734if test "$linux" = "yes" ; then
5735 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 5736fi
128ab2ff 5737
83fb7adf 5738if test "$darwin" = "yes" ; then
98ec69ac 5739 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 5740fi
b29fe3ed 5741
ec530c81 5742if test "$solaris" = "yes" ; then
98ec69ac 5743 echo "CONFIG_SOLARIS=y" >> $config_host_mak
ec530c81 5744fi
179cf400
AF
5745if test "$haiku" = "yes" ; then
5746 echo "CONFIG_HAIKU=y" >> $config_host_mak
5747fi
97a847bc 5748if test "$static" = "yes" ; then
98ec69ac 5749 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 5750fi
1ba16968 5751if test "$profiler" = "yes" ; then
2358a494 5752 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 5753fi
c20709aa 5754if test "$slirp" = "yes" ; then
98ec69ac 5755 echo "CONFIG_SLIRP=y" >> $config_host_mak
e2d8830e 5756 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
c20709aa 5757fi
8a16d273 5758if test "$vde" = "yes" ; then
98ec69ac 5759 echo "CONFIG_VDE=y" >> $config_host_mak
e2ad6f16 5760 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
8a16d273 5761fi
58952137
VM
5762if test "$netmap" = "yes" ; then
5763 echo "CONFIG_NETMAP=y" >> $config_host_mak
5764fi
015a33bd
GA
5765if test "$l2tpv3" = "yes" ; then
5766 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5767fi
47e98658
CB
5768if test "$cap_ng" = "yes" ; then
5769 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5770fi
2358a494 5771echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 5772for drv in $audio_drv_list; do
89138857 5773 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
98ec69ac 5774 echo "$def=y" >> $config_host_mak
0c58ac1c 5775done
b1149911
FZ
5776echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5777echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5778echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5779echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5780echo "OSS_LIBS=$oss_libs" >> $config_host_mak
67f86e8e
JQ
5781if test "$audio_pt_int" = "yes" ; then
5782 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5783fi
d5631638 5784if test "$audio_win_int" = "yes" ; then
5785 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5786fi
b64ec4e4
FZ
5787echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5788echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
821601ea
JS
5789if test "$vnc" = "yes" ; then
5790 echo "CONFIG_VNC=y" >> $config_host_mak
5791fi
2f9606b3 5792if test "$vnc_sasl" = "yes" ; then
98ec69ac 5793 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
2f9606b3 5794fi
821601ea 5795if test "$vnc_jpeg" = "yes" ; then
2f6f5c7a 5796 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
2f6f5c7a 5797fi
821601ea 5798if test "$vnc_png" = "yes" ; then
efe556ad 5799 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
efe556ad 5800fi
6a021536
GH
5801if test "$xkbcommon" = "yes" ; then
5802 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
5803 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
5804fi
76655d6d 5805if test "$fnmatch" = "yes" ; then
2358a494 5806 echo "CONFIG_FNMATCH=y" >> $config_host_mak
76655d6d 5807fi
dce512de
CH
5808if test "$xfs" = "yes" ; then
5809 echo "CONFIG_XFS=y" >> $config_host_mak
5810fi
89138857 5811qemu_version=$(head $source_path/VERSION)
98ec69ac 5812echo "VERSION=$qemu_version" >>$config_host_mak
2358a494 5813echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 5814echo "SRC_PATH=$source_path" >> $config_host_mak
98ec69ac 5815echo "TARGET_DIRS=$target_list" >> $config_host_mak
a25dba17 5816if [ "$docs" = "yes" ] ; then
98ec69ac 5817 echo "BUILD_DOCS=yes" >> $config_host_mak
cc8ae6de 5818fi
17969268 5819if test "$modules" = "yes"; then
e26110cf
FZ
5820 # $shacmd can generate a hash started with digit, which the compiler doesn't
5821 # like as an symbol. So prefix it with an underscore
89138857 5822 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
17969268
FZ
5823 echo "CONFIG_MODULES=y" >> $config_host_mak
5824fi
1ac88f28 5825if test "$sdl" = "yes" ; then
98ec69ac 5826 echo "CONFIG_SDL=y" >> $config_host_mak
a3f4d63d 5827 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
1ac88f28 5828 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
8ecc89f6 5829 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
49ecc3fa
FB
5830fi
5831if test "$cocoa" = "yes" ; then
98ec69ac 5832 echo "CONFIG_COCOA=y" >> $config_host_mak
4d3b6f6e
AZ
5833fi
5834if test "$curses" = "yes" ; then
98ec69ac 5835 echo "CONFIG_CURSES=y" >> $config_host_mak
49ecc3fa 5836fi
099d6b0f 5837if test "$pipe2" = "yes" ; then
2358a494 5838 echo "CONFIG_PIPE2=y" >> $config_host_mak
099d6b0f 5839fi
40ff6d7e
KW
5840if test "$accept4" = "yes" ; then
5841 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5842fi
3ce34dfb 5843if test "$splice" = "yes" ; then
2358a494 5844 echo "CONFIG_SPLICE=y" >> $config_host_mak
3ce34dfb 5845fi
c2882b96
RV
5846if test "$eventfd" = "yes" ; then
5847 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5848fi
751bcc39
MAL
5849if test "$memfd" = "yes" ; then
5850 echo "CONFIG_MEMFD=y" >> $config_host_mak
5851fi
d0927938
UH
5852if test "$fallocate" = "yes" ; then
5853 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5854fi
3d4fa43e
KK
5855if test "$fallocate_punch_hole" = "yes" ; then
5856 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5857fi
b953f075
DL
5858if test "$fallocate_zero_range" = "yes" ; then
5859 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5860fi
ed911435
KW
5861if test "$posix_fallocate" = "yes" ; then
5862 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5863fi
c727f47d
PM
5864if test "$sync_file_range" = "yes" ; then
5865 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5866fi
dace20dc
PM
5867if test "$fiemap" = "yes" ; then
5868 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5869fi
d0927938
UH
5870if test "$dup3" = "yes" ; then
5871 echo "CONFIG_DUP3=y" >> $config_host_mak
5872fi
4e0c6529
AB
5873if test "$ppoll" = "yes" ; then
5874 echo "CONFIG_PPOLL=y" >> $config_host_mak
5875fi
cd758dd0
AB
5876if test "$prctl_pr_set_timerslack" = "yes" ; then
5877 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5878fi
3b6edd16
PM
5879if test "$epoll" = "yes" ; then
5880 echo "CONFIG_EPOLL=y" >> $config_host_mak
5881fi
5882if test "$epoll_create1" = "yes" ; then
5883 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5884fi
a8fd1aba
PM
5885if test "$sendfile" = "yes" ; then
5886 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5887fi
51834341
RV
5888if test "$timerfd" = "yes" ; then
5889 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5890fi
9af5c906
RV
5891if test "$setns" = "yes" ; then
5892 echo "CONFIG_SETNS=y" >> $config_host_mak
5893fi
38860a03
AM
5894if test "$clock_adjtime" = "yes" ; then
5895 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5896fi
5a03cd00
AM
5897if test "$syncfs" = "yes" ; then
5898 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5899fi
3b3f24ad 5900if test "$inotify" = "yes" ; then
2358a494 5901 echo "CONFIG_INOTIFY=y" >> $config_host_mak
3b3f24ad 5902fi
c05c7a73
RV
5903if test "$inotify1" = "yes" ; then
5904 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5905fi
401bc051
PM
5906if test "$sem_timedwait" = "yes" ; then
5907 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
5908fi
6ae9a1f4
JQ
5909if test "$byteswap_h" = "yes" ; then
5910 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5911fi
5912if test "$bswap_h" = "yes" ; then
5913 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5914fi
769ce76d 5915if test "$curl" = "yes" ; then
d3399d7c 5916 echo "CONFIG_CURL=m" >> $config_host_mak
b1d5a277 5917 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6ebc91e5 5918 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
769ce76d 5919fi
2e4d9fb1 5920if test "$brlapi" = "yes" ; then
98ec69ac 5921 echo "CONFIG_BRLAPI=y" >> $config_host_mak
8eca2889 5922 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
2e4d9fb1 5923fi
fb599c9a 5924if test "$bluez" = "yes" ; then
98ec69ac 5925 echo "CONFIG_BLUEZ=y" >> $config_host_mak
ef7635ec 5926 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
fb599c9a 5927fi
d46f7c9e 5928if test "$glib_subprocess" = "yes" ; then
9d41401b
MT
5929 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5930fi
a4ccabcf
AL
5931if test "$gtk" = "yes" ; then
5932 echo "CONFIG_GTK=y" >> $config_host_mak
a3f4d63d 5933 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
a4ccabcf 5934 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
014cb152 5935 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
925a0400
GH
5936 if test "$gtk_gl" = "yes" ; then
5937 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5938 fi
bbbf9bfb 5939fi
a1c5e949 5940echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
ddbb0d09
DB
5941if test "$gnutls" = "yes" ; then
5942 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5943fi
b917da4c
DB
5944if test "$gnutls_rnd" = "yes" ; then
5945 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5946fi
91bfcdb0
DB
5947if test "$gcrypt" = "yes" ; then
5948 echo "CONFIG_GCRYPT=y" >> $config_host_mak
1f923c70
LM
5949 if test "$gcrypt_hmac" = "yes" ; then
5950 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5951 fi
37788f25
DB
5952 if test "$gcrypt_kdf" = "yes" ; then
5953 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5954 fi
62893b67 5955fi
91bfcdb0
DB
5956if test "$nettle" = "yes" ; then
5957 echo "CONFIG_NETTLE=y" >> $config_host_mak
becaeb72 5958 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
fff2f982
DB
5959 if test "$nettle_kdf" = "yes" ; then
5960 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5961 fi
ed754746 5962fi
9a2fd434
DB
5963if test "$tasn1" = "yes" ; then
5964 echo "CONFIG_TASN1=y" >> $config_host_mak
5965fi
559607ea
DB
5966if test "$have_ifaddrs_h" = "yes" ; then
5967 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5968fi
6b39b063
EB
5969if test "$have_broken_size_max" = "yes" ; then
5970 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5971fi
277abf15
JV
5972
5973# Work around a system header bug with some kernel/XFS header
5974# versions where they both try to define 'struct fsxattr':
5975# xfs headers will not try to redefine structs from linux headers
5976# if this macro is set.
5977if test "$have_fsxattr" = "yes" ; then
5978 echo "HAVE_FSXATTR=y" >> $config_host_mak
5979fi
bbbf9bfb
SW
5980if test "$vte" = "yes" ; then
5981 echo "CONFIG_VTE=y" >> $config_host_mak
a4ccabcf
AL
5982 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5983fi
9d9e1521
GH
5984if test "$virglrenderer" = "yes" ; then
5985 echo "CONFIG_VIRGL=y" >> $config_host_mak
5986 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5987 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5988fi
e37630ca 5989if test "$xen" = "yes" ; then
6dbd588a 5990 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 5991 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
64a7ad6f
IC
5992 if test "$xen_pv_domain_build" = "yes" ; then
5993 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5994 fi
e37630ca 5995fi
5c6c3a6c
CH
5996if test "$linux_aio" = "yes" ; then
5997 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5998fi
758e8e38
VJ
5999if test "$attr" = "yes" ; then
6000 echo "CONFIG_ATTR=y" >> $config_host_mak
6001fi
4f26f2b6
AK
6002if test "$libattr" = "yes" ; then
6003 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6004fi
983eef5a
MI
6005if test "$virtfs" = "yes" ; then
6006 echo "CONFIG_VIRTFS=y" >> $config_host_mak
758e8e38 6007fi
fe8fc5ae
PB
6008if test "$mpath" = "yes" ; then
6009 echo "CONFIG_MPATH=y" >> $config_host_mak
6010fi
5e9be92d
NB
6011if test "$vhost_scsi" = "yes" ; then
6012 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6013fi
e6a74868 6014if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
03ce5744
NN
6015 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6016fi
fc0b9b0e
SH
6017if test "$vhost_vsock" = "yes" ; then
6018 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6019fi
e6a74868
MAL
6020if test "$vhost_user" = "yes" ; then
6021 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6022fi
77755340 6023if test "$blobs" = "yes" ; then
98ec69ac 6024 echo "INSTALL_BLOBS=yes" >> $config_host_mak
77755340 6025fi
bf9298b9 6026if test "$iovec" = "yes" ; then
2358a494 6027 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 6028fi
ceb42de8 6029if test "$preadv" = "yes" ; then
2358a494 6030 echo "CONFIG_PREADV=y" >> $config_host_mak
ceb42de8 6031fi
f652e6af 6032if test "$fdt" = "yes" ; then
3f0855b1 6033 echo "CONFIG_FDT=y" >> $config_host_mak
f652e6af 6034fi
dcc38d1c
MT
6035if test "$signalfd" = "yes" ; then
6036 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6037fi
b3f6ea7e
PB
6038if test "$tcg" = "yes"; then
6039 echo "CONFIG_TCG=y" >> $config_host_mak
6040 if test "$tcg_interpreter" = "yes" ; then
6041 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6042 fi
9195b2c2 6043fi
5f6b9e8f
BS
6044if test "$fdatasync" = "yes" ; then
6045 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6046fi
e78815a5
AF
6047if test "$madvise" = "yes" ; then
6048 echo "CONFIG_MADVISE=y" >> $config_host_mak
6049fi
6050if test "$posix_madvise" = "yes" ; then
6051 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6052fi
97a847bc 6053
cd4ec0b4
GH
6054if test "$spice" = "yes" ; then
6055 echo "CONFIG_SPICE=y" >> $config_host_mak
6056fi
36707144 6057
7b02f544
MAL
6058if test "$smartcard" = "yes" ; then
6059 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7b62bf5a
FZ
6060 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6061 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
111a38b0
RR
6062fi
6063
2b2325ff
GH
6064if test "$libusb" = "yes" ; then
6065 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
b878b652
FZ
6066 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6067 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
2b2325ff
GH
6068fi
6069
69354a83
HG
6070if test "$usb_redir" = "yes" ; then
6071 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
cc7923fc
FZ
6072 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6073 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
69354a83
HG
6074fi
6075
da076ffe
GH
6076if test "$opengl" = "yes" ; then
6077 echo "CONFIG_OPENGL=y" >> $config_host_mak
6078 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
014cb152
GH
6079 if test "$opengl_dmabuf" = "yes" ; then
6080 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6081 fi
20ff075b
MW
6082fi
6083
5a22ab71
YZ
6084if test "$malloc_trim" = "yes" ; then
6085 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6086fi
6087
99f2dbd3
LL
6088if test "$avx2_opt" = "yes" ; then
6089 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6090fi
6091
607dacd0
QN
6092if test "$lzo" = "yes" ; then
6093 echo "CONFIG_LZO=y" >> $config_host_mak
6094fi
6095
6096if test "$snappy" = "yes" ; then
6097 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6098fi
6099
6b383c08
PW
6100if test "$bzip2" = "yes" ; then
6101 echo "CONFIG_BZIP2=y" >> $config_host_mak
6102 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6103fi
6104
c589b249 6105if test "$libiscsi" = "yes" ; then
d3399d7c 6106 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6ebc91e5
FZ
6107 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6108 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
c589b249
RS
6109fi
6110
6542aa9c 6111if test "$libnfs" = "yes" ; then
4be4879f
CL
6112 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6113 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6542aa9c
PL
6114fi
6115
f794573e
EO
6116if test "$seccomp" = "yes"; then
6117 echo "CONFIG_SECCOMP=y" >> $config_host_mak
c3883e1f
FZ
6118 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6119 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
f794573e
EO
6120fi
6121
83fb7adf 6122# XXX: suppress that
7d3505c5 6123if [ "$bsd" = "yes" ] ; then
2358a494 6124 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
6125fi
6126
4d9310f4
DB
6127if test "$localtime_r" = "yes" ; then
6128 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6129fi
3556c233
PB
6130if test "$qom_cast_debug" = "yes" ; then
6131 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6132fi
f27aaf4b 6133if test "$rbd" = "yes" ; then
d3399d7c 6134 echo "CONFIG_RBD=m" >> $config_host_mak
6ebc91e5
FZ
6135 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6136 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
d0e2fce5
AK
6137fi
6138
7c2acc70 6139echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
6140if test "$coroutine_pool" = "yes" ; then
6141 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6142else
6143 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6144fi
20ff6c80 6145
7d992e4d
PL
6146if test "$debug_stack_usage" = "yes" ; then
6147 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6148fi
6149
f0d92b56
LM
6150if test "$crypto_afalg" = "yes" ; then
6151 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6152fi
6153
d2042378
AK
6154if test "$open_by_handle_at" = "yes" ; then
6155 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6156fi
6157
e06a765e
HPB
6158if test "$linux_magic_h" = "yes" ; then
6159 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
8ab1bf12
LC
6160fi
6161
cc6e3ca9
GH
6162if test "$pragma_diagnostic_available" = "yes" ; then
6163 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
06d71fa1
PM
6164fi
6165
3f4349dc
KW
6166if test "$valgrind_h" = "yes" ; then
6167 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6168fi
6169
8ab1bf12
LC
6170if test "$has_environ" = "yes" ; then
6171 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
e06a765e
HPB
6172fi
6173
76a347e1
RH
6174if test "$cpuid_h" = "yes" ; then
6175 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6176fi
6177
f540166b
RH
6178if test "$int128" = "yes" ; then
6179 echo "CONFIG_INT128=y" >> $config_host_mak
6180fi
6181
7ebee43e
RH
6182if test "$atomic128" = "yes" ; then
6183 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6184fi
6185
df79b996
RH
6186if test "$atomic64" = "yes" ; then
6187 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6188fi
6189
1e6e9aca
RH
6190if test "$getauxval" = "yes" ; then
6191 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6192fi
6193
eb100396 6194if test "$glusterfs" = "yes" ; then
d3399d7c 6195 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6ebc91e5
FZ
6196 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6197 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
0c14fb47
BR
6198fi
6199
d85fa9eb
JC
6200if test "$glusterfs_xlator_opt" = "yes" ; then
6201 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6202fi
6203
0c14fb47
BR
6204if test "$glusterfs_discard" = "yes" ; then
6205 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
eb100396 6206fi
e06a765e 6207
df3a429a
NV
6208if test "$glusterfs_fallocate" = "yes" ; then
6209 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6210fi
6211
7c815372
BR
6212if test "$glusterfs_zerofill" = "yes" ; then
6213 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6214fi
6215
0a12ec87 6216if test "$libssh2" = "yes" ; then
d3399d7c 6217 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6ebc91e5
FZ
6218 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6219 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
0a12ec87
RJ
6220fi
6221
ed1701c6
DDAG
6222if test "$live_block_migration" = "yes" ; then
6223 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6224fi
6225
3b8acc11
PB
6226if test "$tpm" = "yes"; then
6227 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
f4ede81e 6228 # TPM passthrough support?
3b8acc11
PB
6229 if test "$tpm_passthrough" = "yes"; then
6230 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6231 fi
f4ede81e
AV
6232 # TPM emulator support?
6233 if test "$tpm_emulator" = "yes"; then
6234 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6235 fi
3b8acc11
PB
6236fi
6237
5b808275
LV
6238echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6239if have_backend "nop"; then
6d8a764e 6240 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 6241fi
5b808275 6242if have_backend "simple"; then
6d8a764e
LV
6243 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6244 # Set the appropriate trace file.
953ffe0f 6245 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 6246fi
ed7f5f1d
PB
6247if have_backend "log"; then
6248 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6d8a764e 6249fi
5b808275 6250if have_backend "ust"; then
6d8a764e
LV
6251 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6252fi
5b808275 6253if have_backend "dtrace"; then
6d8a764e
LV
6254 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6255 if test "$trace_backend_stap" = "yes" ; then
6256 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6257 fi
c276b17d 6258fi
5b808275 6259if have_backend "ftrace"; then
781e9545
ET
6260 if test "$linux" = "yes" ; then
6261 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 6262 else
21684af0 6263 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
6264 fi
6265fi
0a852417
PD
6266if have_backend "syslog"; then
6267 if test "$posix_syslog" = "yes" ; then
6268 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6269 else
6270 feature_not_found "syslog(trace backend)" "syslog not available"
6271 fi
6272fi
9410b56c
PS
6273echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6274
2da776db
MH
6275if test "$rdma" = "yes" ; then
6276 echo "CONFIG_RDMA=y" >> $config_host_mak
392fb643 6277 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
2da776db
MH
6278fi
6279
575b22b1
LV
6280if test "$have_rtnetlink" = "yes" ; then
6281 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6282fi
6283
a6b1d4c0
CX
6284if test "$replication" = "yes" ; then
6285 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6286fi
6287
6a02c806
SH
6288if test "$have_af_vsock" = "yes" ; then
6289 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6290fi
6291
4d04351f
CC
6292if test "$have_sysmacros" = "yes" ; then
6293 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6294fi
6295
49e00a18
AG
6296if test "$have_static_assert" = "yes" ; then
6297 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6298fi
6299
e674605f
TG
6300if test "$have_utmpx" = "yes" ; then
6301 echo "HAVE_UTMPX=y" >> $config_host_mak
6302fi
6303
e0580342
KR
6304if test "$ivshmem" = "yes" ; then
6305 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
8ca80760 6306fi
e219c499 6307if test "$capstone" != "no" ; then
8ca80760 6308 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
e0580342
KR
6309fi
6310
5c312079
DDAG
6311# Hold two types of flag:
6312# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6313# a thread we have a handle to
6314# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6315# platform
6316if test "$pthread_setname_np" = "yes" ; then
6317 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6318 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6319fi
6320
da92c3ff
AM
6321if test "$vxhs" = "yes" ; then
6322 echo "CONFIG_VXHS=y" >> $config_host_mak
6323 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6324fi
6325
5b5e3037
PB
6326if test "$tcg_interpreter" = "yes"; then
6327 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6328elif test "$ARCH" = "sparc64" ; then
6329 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6330elif test "$ARCH" = "s390x" ; then
6331 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
c72b26ec 6332elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5b5e3037 6333 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
40d964b5
RH
6334elif test "$ARCH" = "ppc64" ; then
6335 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5b5e3037
PB
6336else
6337 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6338fi
6339QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
6340
98ec69ac 6341echo "TOOLS=$tools" >> $config_host_mak
98ec69ac 6342echo "ROMS=$roms" >> $config_host_mak
804edf29
JQ
6343echo "MAKE=$make" >> $config_host_mak
6344echo "INSTALL=$install" >> $config_host_mak
1901cb14
BS
6345echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6346echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
e999ee44
MT
6347echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6348echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
c886edfb 6349echo "PYTHON=$python" >> $config_host_mak
804edf29 6350echo "CC=$cc" >> $config_host_mak
a31a8642
MT
6351if $iasl -h > /dev/null 2>&1; then
6352 echo "IASL=$iasl" >> $config_host_mak
6353fi
2b2e59e6 6354echo "CC_I386=$cc_i386" >> $config_host_mak
804edf29 6355echo "HOST_CC=$host_cc" >> $config_host_mak
83f73fce 6356echo "CXX=$cxx" >> $config_host_mak
3c4a4d0d 6357echo "OBJCC=$objcc" >> $config_host_mak
804edf29 6358echo "AR=$ar" >> $config_host_mak
45d285ab 6359echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
cdbd727c 6360echo "AS=$as" >> $config_host_mak
5f6f0e27 6361echo "CCAS=$ccas" >> $config_host_mak
3dd46c78 6362echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
6363echo "OBJCOPY=$objcopy" >> $config_host_mak
6364echo "LD=$ld" >> $config_host_mak
9f81aeb5 6365echo "RANLIB=$ranlib" >> $config_host_mak
4852ee95 6366echo "NM=$nm" >> $config_host_mak
9fe6de94 6367echo "WINDRES=$windres" >> $config_host_mak
e2a2ed06 6368echo "CFLAGS=$CFLAGS" >> $config_host_mak
46eef33b 6369echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 6370echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
11cde1c8 6371echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
f9728943 6372echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
e39f0062
PB
6373if test "$sparse" = "yes" ; then
6374 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
80fd48df 6375 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
2944d742 6376 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
e39f0062
PB
6377 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6378 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6379fi
42da6041
GH
6380if test "$cross_prefix" != ""; then
6381 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6382else
6383 echo "AUTOCONF_HOST := " >> $config_host_mak
6384fi
e2a2ed06 6385echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
46eef33b 6386echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6969ec6c 6387echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
e57218b6 6388echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
73da375e 6389echo "LIBS+=$LIBS" >> $config_host_mak
3e2e0e6b 6390echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
409437e1 6391echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
804edf29 6392echo "EXESUF=$EXESUF" >> $config_host_mak
17969268
FZ
6393echo "DSOSUF=$DSOSUF" >> $config_host_mak
6394echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
957f1f99 6395echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
90246037
DB
6396echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6397echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
94dd53c5 6398echo "POD2MAN=$POD2MAN" >> $config_host_mak
cbdd1999 6399echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
1d728c39
BS
6400if test "$gcov" = "yes" ; then
6401 echo "CONFIG_GCOV=y" >> $config_host_mak
6402 echo "GCOV=$gcov_tool" >> $config_host_mak
6403fi
804edf29 6404
6efd7517
PM
6405# use included Linux headers
6406if test "$linux" = "yes" ; then
a307beb6 6407 mkdir -p linux-headers
6efd7517 6408 case "$cpu" in
c72b26ec 6409 i386|x86_64|x32)
08312a63 6410 linux_arch=x86
6efd7517
PM
6411 ;;
6412 ppcemb|ppc|ppc64)
08312a63 6413 linux_arch=powerpc
6efd7517
PM
6414 ;;
6415 s390x)
08312a63
PM
6416 linux_arch=s390
6417 ;;
1f080313
CF
6418 aarch64)
6419 linux_arch=arm64
6420 ;;
222e7d11
SL
6421 mips64)
6422 linux_arch=mips
6423 ;;
08312a63
PM
6424 *)
6425 # For most CPUs the kernel architecture name and QEMU CPU name match.
6426 linux_arch="$cpu"
6efd7517
PM
6427 ;;
6428 esac
08312a63
PM
6429 # For non-KVM architectures we will not have asm headers
6430 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6431 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6432 fi
6efd7517
PM
6433fi
6434
1d14ffa9 6435for target in $target_list; do
97a847bc 6436target_dir="$target"
25be210f 6437config_target_mak=$target_dir/config-target.mak
89138857 6438target_name=$(echo $target | cut -d '-' -f 1)
97a847bc 6439target_bigendian="no"
1f3d3c8f 6440
c1799a84 6441case "$target_name" in
722dd7be 6442 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
ea2d6a39
JQ
6443 target_bigendian=yes
6444 ;;
6445esac
97a847bc 6446target_softmmu="no"
997344f3 6447target_user_only="no"
831b7825 6448target_linux_user="no"
84778508 6449target_bsd_user="no"
9e407a85 6450case "$target" in
c1799a84 6451 ${target_name}-softmmu)
9e407a85
PB
6452 target_softmmu="yes"
6453 ;;
c1799a84 6454 ${target_name}-linux-user)
9e407a85
PB
6455 target_user_only="yes"
6456 target_linux_user="yes"
6457 ;;
c1799a84 6458 ${target_name}-bsd-user)
84778508
BS
6459 target_user_only="yes"
6460 target_bsd_user="yes"
6461 ;;
9e407a85 6462 *)
76ad07a4 6463 error_exit "Target '$target' not recognised"
9e407a85
PB
6464 exit 1
6465 ;;
6466esac
831b7825 6467
97a847bc 6468mkdir -p $target_dir
25be210f 6469echo "# Automatically generated by configure - do not modify" > $config_target_mak
de83cd02 6470
e5fe0c52 6471bflt="no"
ca759f9e 6472mttcg="no"
89138857 6473interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
56aebc89 6474gdb_xml_files=""
7ba1e619 6475
c1799a84 6476TARGET_ARCH="$target_name"
6acff7da 6477TARGET_BASE_ARCH=""
e6e91b9c 6478TARGET_ABI_DIR=""
e73aae67 6479
c1799a84 6480case "$target_name" in
2408a527 6481 i386)
b8158192 6482 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
2408a527
AJ
6483 ;;
6484 x86_64)
6acff7da 6485 TARGET_BASE_ARCH=i386
b8158192 6486 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
2408a527
AJ
6487 ;;
6488 alpha)
5ee4f3c2 6489 mttcg="yes"
2408a527
AJ
6490 ;;
6491 arm|armeb)
b498c8a0 6492 TARGET_ARCH=arm
2408a527 6493 bflt="yes"
ca759f9e 6494 mttcg="yes"
56aebc89 6495 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
2408a527 6496 ;;
722dd7be
MW
6497 aarch64|aarch64_be)
6498 TARGET_ARCH=aarch64
6a49fa95
AG
6499 TARGET_BASE_ARCH=arm
6500 bflt="yes"
ca759f9e 6501 mttcg="yes"
8f95ce2e 6502 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6a49fa95 6503 ;;
2408a527 6504 cris)
2408a527 6505 ;;
61766fe9
RH
6506 hppa)
6507 ;;
613a22c9 6508 lm32)
613a22c9 6509 ;;
2408a527 6510 m68k)
2408a527 6511 bflt="yes"
5a4526b2 6512 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
2408a527 6513 ;;
877fdc12
EI
6514 microblaze|microblazeel)
6515 TARGET_ARCH=microblaze
72b675ca 6516 bflt="yes"
72b675ca 6517 ;;
0adcffb1 6518 mips|mipsel)
b498c8a0 6519 TARGET_ARCH=mips
25be210f 6520 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
2408a527
AJ
6521 ;;
6522 mipsn32|mipsn32el)
597e2cec 6523 TARGET_ARCH=mips64
6acff7da 6524 TARGET_BASE_ARCH=mips
25be210f 6525 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
597e2cec 6526 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527
AJ
6527 ;;
6528 mips64|mips64el)
b498c8a0 6529 TARGET_ARCH=mips64
6acff7da 6530 TARGET_BASE_ARCH=mips
25be210f 6531 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
2408a527 6532 ;;
d15a9c23
AG
6533 moxie)
6534 ;;
e671711c
MV
6535 nios2)
6536 ;;
4a09d0bb 6537 or1k)
e67db06e
JL
6538 TARGET_ARCH=openrisc
6539 TARGET_BASE_ARCH=openrisc
e67db06e 6540 ;;
2408a527 6541 ppc)
c8b3532d 6542 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
6543 ;;
6544 ppcemb)
6acff7da 6545 TARGET_BASE_ARCH=ppc
e6e91b9c 6546 TARGET_ABI_DIR=ppc
c8b3532d 6547 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
6548 ;;
6549 ppc64)
6acff7da 6550 TARGET_BASE_ARCH=ppc
e6e91b9c 6551 TARGET_ABI_DIR=ppc
f0b0685d 6552 mttcg=yes
1438eff3 6553 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
2408a527 6554 ;;
9c35126c
DK
6555 ppc64le)
6556 TARGET_ARCH=ppc64
6557 TARGET_BASE_ARCH=ppc
6558 TARGET_ABI_DIR=ppc
f0b0685d 6559 mttcg=yes
1438eff3 6560 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
9c35126c 6561 ;;
2408a527 6562 ppc64abi32)
b498c8a0 6563 TARGET_ARCH=ppc64
6acff7da 6564 TARGET_BASE_ARCH=ppc
e6e91b9c 6565 TARGET_ABI_DIR=ppc
25be210f 6566 echo "TARGET_ABI32=y" >> $config_target_mak
1438eff3 6567 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
2408a527
AJ
6568 ;;
6569 sh4|sh4eb)
b498c8a0 6570 TARGET_ARCH=sh4
2408a527
AJ
6571 bflt="yes"
6572 ;;
6573 sparc)
2408a527
AJ
6574 ;;
6575 sparc64)
6acff7da 6576 TARGET_BASE_ARCH=sparc
2408a527
AJ
6577 ;;
6578 sparc32plus)
b498c8a0 6579 TARGET_ARCH=sparc64
6acff7da 6580 TARGET_BASE_ARCH=sparc
e6e91b9c 6581 TARGET_ABI_DIR=sparc
25be210f 6582 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527 6583 ;;
24e804ec 6584 s390x)
86158a2a 6585 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 6586 ;;
444e06b1
CG
6587 tilegx)
6588 ;;
5ecaa4ed
PC
6589 tricore)
6590 ;;
d2fbca94 6591 unicore32)
d2fbca94 6592 ;;
cfa550c6
MF
6593 xtensa|xtensaeb)
6594 TARGET_ARCH=xtensa
cfa550c6 6595 ;;
2408a527 6596 *)
76ad07a4 6597 error_exit "Unsupported target CPU"
2408a527
AJ
6598 ;;
6599esac
5e8861a0
PB
6600# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6601if [ "$TARGET_BASE_ARCH" = "" ]; then
6602 TARGET_BASE_ARCH=$TARGET_ARCH
6603fi
6604
5e8861a0
PB
6605symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6606
99afc91d
DB
6607upper() {
6608 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6609}
6610
89138857 6611target_arch_name="$(upper $TARGET_ARCH)"
25be210f 6612echo "TARGET_$target_arch_name=y" >> $config_target_mak
c1799a84 6613echo "TARGET_NAME=$target_name" >> $config_target_mak
25be210f 6614echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
e6e91b9c
JQ
6615if [ "$TARGET_ABI_DIR" = "" ]; then
6616 TARGET_ABI_DIR=$TARGET_ARCH
6617fi
25be210f 6618echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
adfc3e91
SS
6619if [ "$HOST_VARIANT_DIR" != "" ]; then
6620 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6621fi
3b6b7550
PB
6622
6623if supported_xen_target $target; then
6624 echo "CONFIG_XEN=y" >> $config_target_mak
6625 if test "$xen_pci_passthrough" = yes; then
eb6fda0f 6626 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
1b0c87fc 6627 fi
3b6b7550
PB
6628fi
6629if supported_kvm_target $target; then
6630 echo "CONFIG_KVM=y" >> $config_target_mak
6631 if test "$vhost_net" = "yes" ; then
d5970055 6632 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
e6a74868
MAL
6633 if test "$vhost_user" = "yes" ; then
6634 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6635 fi
c59249f9 6636 fi
3b6b7550
PB
6637fi
6638if supported_hax_target $target; then
6639 echo "CONFIG_HAX=y" >> $config_target_mak
b0cb0a66 6640fi
c97d6d2c
SAGDR
6641if supported_hvf_target $target; then
6642 echo "CONFIG_HVF=y" >> $config_target_mak
6643fi
de83cd02 6644if test "$target_bigendian" = "yes" ; then
25be210f 6645 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
de83cd02 6646fi
97a847bc 6647if test "$target_softmmu" = "yes" ; then
25be210f 6648 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
ca759f9e
AB
6649 if test "$mttcg" = "yes" ; then
6650 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6651 fi
43ce4dfe 6652fi
997344f3 6653if test "$target_user_only" = "yes" ; then
25be210f 6654 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
a2c80be9 6655 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
997344f3 6656fi
831b7825 6657if test "$target_linux_user" = "yes" ; then
25be210f 6658 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
831b7825 6659fi
56aebc89
PB
6660list=""
6661if test ! -z "$gdb_xml_files" ; then
6662 for x in $gdb_xml_files; do
6663 list="$list $source_path/gdb-xml/$x"
6664 done
3d0f1517 6665 echo "TARGET_XML_FILES=$list" >> $config_target_mak
56aebc89 6666fi
97a847bc 6667
e5fe0c52 6668if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
25be210f 6669 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
e5fe0c52 6670fi
84778508 6671if test "$target_bsd_user" = "yes" ; then
25be210f 6672 echo "CONFIG_BSD_USER=y" >> $config_target_mak
84778508 6673fi
5b0753e0 6674
4afddb55 6675# generate QEMU_CFLAGS/LDFLAGS for targets
fa282484 6676
4afddb55 6677cflags=""
fa282484 6678ldflags=""
9b8e111f 6679
c765fcac
PC
6680disas_config() {
6681 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6682 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6683}
6684
64656024
JQ
6685for i in $ARCH $TARGET_BASE_ARCH ; do
6686 case "$i" in
6687 alpha)
c765fcac 6688 disas_config "ALPHA"
64656024 6689 ;;
82295d8a
RH
6690 aarch64)
6691 if test -n "${cxx}"; then
c765fcac 6692 disas_config "ARM_A64"
82295d8a
RH
6693 fi
6694 ;;
64656024 6695 arm)
c765fcac 6696 disas_config "ARM"
999b53ec 6697 if test -n "${cxx}"; then
c765fcac 6698 disas_config "ARM_A64"
999b53ec 6699 fi
64656024
JQ
6700 ;;
6701 cris)
c765fcac 6702 disas_config "CRIS"
64656024 6703 ;;
429b31a2
RH
6704 hppa)
6705 disas_config "HPPA"
6706 ;;
c72b26ec 6707 i386|x86_64|x32)
c765fcac 6708 disas_config "I386"
64656024 6709 ;;
79368f49 6710 lm32)
c765fcac 6711 disas_config "LM32"
79368f49 6712 ;;
64656024 6713 m68k)
c765fcac 6714 disas_config "M68K"
64656024 6715 ;;
877fdc12 6716 microblaze*)
c765fcac 6717 disas_config "MICROBLAZE"
64656024
JQ
6718 ;;
6719 mips*)
c765fcac 6720 disas_config "MIPS"
64656024 6721 ;;
d15a9c23 6722 moxie*)
c765fcac 6723 disas_config "MOXIE"
d15a9c23 6724 ;;
e671711c
MV
6725 nios2)
6726 disas_config "NIOS2"
6727 ;;
4a09d0bb 6728 or1k)
c765fcac 6729 disas_config "OPENRISC"
e67db06e 6730 ;;
64656024 6731 ppc*)
c765fcac 6732 disas_config "PPC"
64656024 6733 ;;
24e804ec 6734 s390*)
c765fcac 6735 disas_config "S390"
64656024
JQ
6736 ;;
6737 sh4)
c765fcac 6738 disas_config "SH4"
64656024
JQ
6739 ;;
6740 sparc*)
c765fcac 6741 disas_config "SPARC"
64656024 6742 ;;
cfa550c6 6743 xtensa*)
c765fcac 6744 disas_config "XTENSA"
cfa550c6 6745 ;;
64656024
JQ
6746 esac
6747done
9195b2c2 6748if test "$tcg_interpreter" = "yes" ; then
c765fcac 6749 disas_config "TCI"
9195b2c2 6750fi
64656024 6751
6ee7126f
JQ
6752case "$ARCH" in
6753alpha)
6754 # Ensure there's only a single GP
6755 cflags="-msmall-data $cflags"
6756;;
6757esac
6758
d02c1db3 6759if test "$gprof" = "yes" ; then
25be210f 6760 echo "TARGET_GPROF=yes" >> $config_target_mak
d02c1db3
JQ
6761 if test "$target_linux_user" = "yes" ; then
6762 cflags="-p $cflags"
6763 ldflags="-p $ldflags"
6764 fi
6765 if test "$target_softmmu" = "yes" ; then
6766 ldflags="-p $ldflags"
25be210f 6767 echo "GPROF_CFLAGS=-p" >> $config_target_mak
d02c1db3
JQ
6768 fi
6769fi
6770
9b8e111f 6771if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
964c6fa1 6772 ldflags="$ldflags $textseg_ldflags"
fa282484 6773fi
fa282484 6774
e9a3591f
CB
6775# Newer kernels on s390 check for an S390_PGSTE program header and
6776# enable the pgste page table extensions in that case. This makes
6777# the vm.allocate_pgste sysctl unnecessary. We enable this program
6778# header if
6779# - we build on s390x
6780# - we build the system emulation for s390x (qemu-system-s390x)
6781# - KVM is enabled
6782# - the linker supports --s390-pgste
6783if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
6784 if ld_has --s390-pgste ; then
6785 ldflags="-Wl,--s390-pgste $ldflags"
6786 fi
6787fi
6788
25be210f
JQ
6789echo "LDFLAGS+=$ldflags" >> $config_target_mak
6790echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
fa282484 6791
97a847bc 6792done # for target in $targets
7d13299d 6793
a540f158
PC
6794if [ "$dtc_internal" = "yes" ]; then
6795 echo "config-host.h: subdir-dtc" >> $config_host_mak
6796fi
e219c499
RH
6797if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
6798 echo "config-host.h: subdir-capstone" >> $config_host_mak
6799fi
6800if test -n "$LIBCAPSTONE"; then
6801 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
6802fi
a540f158 6803
a99d57bb
WG
6804if test "$numa" = "yes"; then
6805 echo "CONFIG_NUMA=y" >> $config_host_mak
6806fi
6807
fd0e6053
JS
6808if test "$ccache_cpp2" = "yes"; then
6809 echo "export CCACHE_CPP2=y" >> $config_host_mak
6810fi
6811
d1807a4f 6812# build tree in object directory in case the source is not in the current directory
b1fb9a63 6813DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
b855f8d1 6814DIRS="$DIRS docs docs/interop fsdev scsi"
9933c305 6815DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
d1807a4f 6816DIRS="$DIRS roms/seabios roms/vgabios"
2dee8d54 6817DIRS="$DIRS qapi-generated"
c09015dd
AL
6818FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6819FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
aaa2ebc5 6820FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
d1807a4f 6821FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
446b9165 6822FILES="$FILES pc-bios/spapr-rtas/Makefile"
9933c305 6823FILES="$FILES pc-bios/s390-ccw/Makefile"
d1807a4f 6824FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
4652b792 6825FILES="$FILES pc-bios/qemu-icon.bmp"
3a586d2f 6826FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
753d11f2
RH
6827for bios_file in \
6828 $source_path/pc-bios/*.bin \
225a9ab8 6829 $source_path/pc-bios/*.lid \
5acc2ec0 6830 $source_path/pc-bios/*.aml \
753d11f2
RH
6831 $source_path/pc-bios/*.rom \
6832 $source_path/pc-bios/*.dtb \
e89e33e1 6833 $source_path/pc-bios/*.img \
753d11f2 6834 $source_path/pc-bios/openbios-* \
4e73c781 6835 $source_path/pc-bios/u-boot.* \
753d11f2
RH
6836 $source_path/pc-bios/palcode-*
6837do
89138857 6838 FILES="$FILES pc-bios/$(basename $bios_file)"
d1807a4f 6839done
89138857 6840for test_file in $(find $source_path/tests/acpi-test-data -type f)
c2304b52 6841do
89138857 6842 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
c2304b52 6843done
d1807a4f
PB
6844mkdir -p $DIRS
6845for f in $FILES ; do
cab00a5a 6846 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
f9245e10
PM
6847 symlink "$source_path/$f" "$f"
6848 fi
d1807a4f 6849done
1ad2134f 6850
c34ebfdc 6851# temporary config to build submodules
2d9f27d2 6852for rom in seabios vgabios ; do
c34ebfdc 6853 config_mak=roms/$rom/config.mak
37116c89 6854 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 6855 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
cdbd727c 6856 echo "AS=$as" >> $config_mak
5f6f0e27 6857 echo "CCAS=$ccas" >> $config_mak
c34ebfdc
AL
6858 echo "CC=$cc" >> $config_mak
6859 echo "BCC=bcc" >> $config_mak
3dd46c78 6860 echo "CPP=$cpp" >> $config_mak
c34ebfdc 6861 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 6862 echo "IASL=$iasl" >> $config_mak
c34ebfdc 6863 echo "LD=$ld" >> $config_mak
9f81aeb5 6864 echo "RANLIB=$ranlib" >> $config_mak
c34ebfdc
AL
6865done
6866
fe31017f
MAL
6867# set up tests data directory
6868if [ ! -e tests/data ]; then
6869 symlink "$source_path/tests/data" tests/data
6870fi
6871
76c7560a
HR
6872# set up qemu-iotests in this build directory
6873iotests_common_env="tests/qemu-iotests/common.env"
6874iotests_check="tests/qemu-iotests/check"
6875
6876echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6877echo >> "$iotests_common_env"
6878echo "export PYTHON='$python'" >> "$iotests_common_env"
6879
6880if [ ! -e "$iotests_check" ]; then
6881 symlink "$source_path/$iotests_check" "$iotests_check"
6882fi
6883
dc655404
MT
6884# Save the configure command line for later reuse.
6885cat <<EOD >config.status
6886#!/bin/sh
6887# Generated by configure.
6888# Run this file to recreate the current configuration.
6889# Compiler output produced by configure, useful for debugging
6890# configure, is in config.log if it exists.
6891EOD
6892printf "exec" >>config.status
6893printf " '%s'" "$0" "$@" >>config.status
cf7cc929 6894echo ' "$@"' >>config.status
dc655404
MT
6895chmod +x config.status
6896
8cd05ab6 6897rm -r "$TMPDIR1"