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