Fix the compatibility typedef of ioservid_t to match the Xen headers
[qemu/cris-port.git] / configure
blobc89b1eab9b69b89b9f43fef55ff572c08d6668be
1 #!/bin/sh
3 # qemu configure script (c) 2003 Fabrice Bellard
6 # Unset some variables known to interfere with behavior of common tools,
7 # just as autoconf does.
8 CLICOLOR_FORCE= GREP_OPTIONS=
9 unset CLICOLOR_FORCE GREP_OPTIONS
11 # Temporary directory used for files created while
12 # configure runs. Since it is in the build directory
13 # we can safely blow away any previous version of it
14 # (and we need not jump through hoops to try to delete
15 # it when configure exits.)
16 TMPDIR1="config-temp"
17 rm -rf "${TMPDIR1}"
18 mkdir -p "${TMPDIR1}"
19 if [ $? -ne 0 ]; then
20 echo "ERROR: failed to create temporary directory"
21 exit 1
24 TMPB="qemu-conf"
25 TMPC="${TMPDIR1}/${TMPB}.c"
26 TMPO="${TMPDIR1}/${TMPB}.o"
27 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
28 TMPL="${TMPDIR1}/${TMPB}.lo"
29 TMPA="${TMPDIR1}/lib${TMPB}.la"
30 TMPE="${TMPDIR1}/${TMPB}.exe"
32 rm -f config.log
34 # Print a helpful header at the top of config.log
35 echo "# QEMU configure log $(date)" >> config.log
36 printf "# Configured with:" >> config.log
37 printf " '%s'" "$0" "$@" >> config.log
38 echo >> config.log
39 echo "#" >> config.log
41 error_exit() {
42 echo
43 echo "ERROR: $1"
44 while test -n "$2"; do
45 echo " $2"
46 shift
47 done
48 echo
49 exit 1
52 do_compiler() {
53 # Run the compiler, capturing its output to the log. First argument
54 # is compiler binary to execute.
55 local compiler="$1"
56 shift
57 echo $compiler "$@" >> config.log
58 $compiler "$@" >> config.log 2>&1 || return $?
59 # Test passed. If this is an --enable-werror build, rerun
60 # the test with -Werror and bail out if it fails. This
61 # makes warning-generating-errors in configure test code
62 # obvious to developers.
63 if test "$werror" != "yes"; then
64 return 0
66 # Don't bother rerunning the compile if we were already using -Werror
67 case "$*" in
68 *-Werror*)
69 return 0
71 esac
72 echo $compiler -Werror "$@" >> config.log
73 $compiler -Werror "$@" >> config.log 2>&1 && return $?
74 error_exit "configure test passed without -Werror but failed with -Werror." \
75 "This is probably a bug in the configure script. The failing command" \
76 "will be at the bottom of config.log." \
77 "You can run configure with --disable-werror to bypass this check."
80 do_cc() {
81 do_compiler "$cc" "$@"
84 do_cxx() {
85 do_compiler "$cxx" "$@"
88 update_cxxflags() {
89 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
90 # options which some versions of GCC's C++ compiler complain about
91 # because they only make sense for C programs.
92 QEMU_CXXFLAGS=
93 for arg in $QEMU_CFLAGS; do
94 case $arg in
95 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
96 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
99 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
101 esac
102 done
105 compile_object() {
106 local_cflags="$1"
107 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
110 compile_prog() {
111 local_cflags="$1"
112 local_ldflags="$2"
113 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
116 do_libtool() {
117 local mode=$1
118 shift
119 # Run the compiler, capturing its output to the log.
120 echo $libtool $mode --tag=CC $cc "$@" >> config.log
121 $libtool $mode --tag=CC $cc "$@" >> config.log 2>&1 || return $?
122 # Test passed. If this is an --enable-werror build, rerun
123 # the test with -Werror and bail out if it fails. This
124 # makes warning-generating-errors in configure test code
125 # obvious to developers.
126 if test "$werror" != "yes"; then
127 return 0
129 # Don't bother rerunning the compile if we were already using -Werror
130 case "$*" in
131 *-Werror*)
132 return 0
134 esac
135 echo $libtool $mode --tag=CC $cc -Werror "$@" >> config.log
136 $libtool $mode --tag=CC $cc -Werror "$@" >> config.log 2>&1 && return $?
137 error_exit "configure test passed without -Werror but failed with -Werror." \
138 "This is probably a bug in the configure script. The failing command" \
139 "will be at the bottom of config.log." \
140 "You can run configure with --disable-werror to bypass this check."
143 libtool_prog() {
144 do_libtool --mode=compile $QEMU_CFLAGS -c -fPIE -DPIE -o $TMPO $TMPC || return $?
145 do_libtool --mode=link $LDFLAGS -o $TMPA $TMPL -rpath /usr/local/lib
148 # symbolically link $1 to $2. Portable version of "ln -sf".
149 symlink() {
150 rm -rf "$2"
151 mkdir -p "$(dirname "$2")"
152 ln -s "$1" "$2"
155 # check whether a command is available to this shell (may be either an
156 # executable or a builtin)
157 has() {
158 type "$1" >/dev/null 2>&1
161 # search for an executable in PATH
162 path_of() {
163 local_command="$1"
164 local_ifs="$IFS"
165 local_dir=""
167 # pathname has a dir component?
168 if [ "${local_command#*/}" != "$local_command" ]; then
169 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
170 echo "$local_command"
171 return 0
174 if [ -z "$local_command" ]; then
175 return 1
178 IFS=:
179 for local_dir in $PATH; do
180 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
181 echo "$local_dir/$local_command"
182 IFS="${local_ifs:-$(printf ' \t\n')}"
183 return 0
185 done
186 # not found
187 IFS="${local_ifs:-$(printf ' \t\n')}"
188 return 1
191 have_backend () {
192 echo "$trace_backends" | grep "$1" >/dev/null
195 # default parameters
196 source_path=`dirname "$0"`
197 cpu=""
198 iasl="iasl"
199 interp_prefix="/usr/gnemul/qemu-%M"
200 static="no"
201 cross_prefix=""
202 audio_drv_list=""
203 block_drv_rw_whitelist=""
204 block_drv_ro_whitelist=""
205 host_cc="cc"
206 libs_softmmu=""
207 libs_tools=""
208 audio_pt_int=""
209 audio_win_int=""
210 cc_i386=i386-pc-linux-gnu-gcc
211 libs_qga=""
212 debug_info="yes"
213 stack_protector=""
215 # Don't accept a target_list environment variable.
216 unset target_list
218 # Default value for a variable defining feature "foo".
219 # * foo="no" feature will only be used if --enable-foo arg is given
220 # * foo="" feature will be searched for, and if found, will be used
221 # unless --disable-foo is given
222 # * foo="yes" this value will only be set by --enable-foo flag.
223 # feature will searched for,
224 # if not found, configure exits with error
226 # Always add --enable-foo and --disable-foo command line args.
227 # Distributions want to ensure that several features are compiled in, and it
228 # is impossible without a --enable-foo that exits if a feature is not found.
230 bluez=""
231 brlapi=""
232 curl=""
233 curses=""
234 docs=""
235 fdt=""
236 netmap="no"
237 pixman=""
238 sdl=""
239 sdlabi="1.2"
240 virtfs=""
241 vnc="yes"
242 sparse="no"
243 uuid=""
244 vde=""
245 vnc_tls=""
246 vnc_sasl=""
247 vnc_jpeg=""
248 vnc_png=""
249 vnc_ws=""
250 xen=""
251 xen_ctrl_version=""
252 xen_pci_passthrough=""
253 linux_aio=""
254 cap_ng=""
255 attr=""
256 libattr=""
257 xfs=""
259 vhost_net="no"
260 vhost_scsi="no"
261 kvm="no"
262 rdma=""
263 gprof="no"
264 debug_tcg="no"
265 debug="no"
266 strip_opt="yes"
267 tcg_interpreter="no"
268 bigendian="no"
269 mingw32="no"
270 gcov="no"
271 gcov_tool="gcov"
272 EXESUF=""
273 DSOSUF=".so"
274 LDFLAGS_SHARED="-shared"
275 modules="no"
276 prefix="/usr/local"
277 mandir="\${prefix}/share/man"
278 datadir="\${prefix}/share"
279 qemu_docdir="\${prefix}/share/doc/qemu"
280 bindir="\${prefix}/bin"
281 libdir="\${prefix}/lib"
282 libexecdir="\${prefix}/libexec"
283 includedir="\${prefix}/include"
284 sysconfdir="\${prefix}/etc"
285 local_statedir="\${prefix}/var"
286 confsuffix="/qemu"
287 slirp="yes"
288 oss_lib=""
289 bsd="no"
290 linux="no"
291 solaris="no"
292 profiler="no"
293 cocoa="no"
294 softmmu="yes"
295 linux_user="no"
296 bsd_user="no"
297 guest_base="yes"
298 aix="no"
299 blobs="yes"
300 pkgversion=""
301 pie=""
302 zero_malloc=""
303 qom_cast_debug="yes"
304 trace_backends="nop"
305 trace_file="trace"
306 spice=""
307 rbd=""
308 smartcard_nss=""
309 libusb=""
310 usb_redir=""
311 opengl=""
312 zlib="yes"
313 lzo=""
314 snappy=""
315 bzip2=""
316 guest_agent=""
317 guest_agent_with_vss="no"
318 guest_agent_ntddscsi="no"
319 guest_agent_msi=""
320 vss_win32_sdk=""
321 win_sdk="no"
322 want_tools="yes"
323 libiscsi=""
324 libnfs=""
325 coroutine=""
326 coroutine_pool=""
327 seccomp=""
328 glusterfs=""
329 glusterfs_discard="no"
330 glusterfs_zerofill="no"
331 archipelago="no"
332 gtk=""
333 gtkabi=""
334 vte=""
335 tpm="yes"
336 libssh2=""
337 vhdx=""
338 quorum=""
339 numa=""
340 tcmalloc="no"
342 # parse CC options first
343 for opt do
344 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
345 case "$opt" in
346 --cross-prefix=*) cross_prefix="$optarg"
348 --cc=*) CC="$optarg"
350 --cxx=*) CXX="$optarg"
352 --source-path=*) source_path="$optarg"
354 --cpu=*) cpu="$optarg"
356 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
357 EXTRA_CFLAGS="$optarg"
359 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
360 EXTRA_LDFLAGS="$optarg"
362 --enable-debug-info) debug_info="yes"
364 --disable-debug-info) debug_info="no"
366 esac
367 done
368 # OS specific
369 # Using uname is really, really broken. Once we have the right set of checks
370 # we can eliminate its usage altogether.
372 # Preferred compiler:
373 # ${CC} (if set)
374 # ${cross_prefix}gcc (if cross-prefix specified)
375 # system compiler
376 if test -z "${CC}${cross_prefix}"; then
377 cc="$host_cc"
378 else
379 cc="${CC-${cross_prefix}gcc}"
382 if test -z "${CXX}${cross_prefix}"; then
383 cxx="c++"
384 else
385 cxx="${CXX-${cross_prefix}g++}"
388 ar="${AR-${cross_prefix}ar}"
389 as="${AS-${cross_prefix}as}"
390 cpp="${CPP-$cc -E}"
391 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
392 ld="${LD-${cross_prefix}ld}"
393 libtool="${LIBTOOL-${cross_prefix}libtool}"
394 nm="${NM-${cross_prefix}nm}"
395 strip="${STRIP-${cross_prefix}strip}"
396 windres="${WINDRES-${cross_prefix}windres}"
397 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
398 query_pkg_config() {
399 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
401 pkg_config=query_pkg_config
402 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
403 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
405 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
406 ARFLAGS="${ARFLAGS-rv}"
408 # default flags for all hosts
409 QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
410 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
411 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
412 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
413 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
414 if test "$debug_info" = "yes"; then
415 CFLAGS="-g $CFLAGS"
416 LDFLAGS="-g $LDFLAGS"
419 # make source path absolute
420 source_path=`cd "$source_path"; pwd`
422 # running configure in the source tree?
423 # we know that's the case if configure is there.
424 if test -f "./configure"; then
425 pwd_is_source_path="y"
426 else
427 pwd_is_source_path="n"
430 check_define() {
431 cat > $TMPC <<EOF
432 #if !defined($1)
433 #error $1 not defined
434 #endif
435 int main(void) { return 0; }
437 compile_object
440 check_include() {
441 cat > $TMPC <<EOF
442 #include <$1>
443 int main(void) { return 0; }
445 compile_object
448 write_c_skeleton() {
449 cat > $TMPC <<EOF
450 int main(void) { return 0; }
454 if check_define __linux__ ; then
455 targetos="Linux"
456 elif check_define _WIN32 ; then
457 targetos='MINGW32'
458 elif check_define __OpenBSD__ ; then
459 targetos='OpenBSD'
460 elif check_define __sun__ ; then
461 targetos='SunOS'
462 elif check_define __HAIKU__ ; then
463 targetos='Haiku'
464 else
465 targetos=`uname -s`
468 # Some host OSes need non-standard checks for which CPU to use.
469 # Note that these checks are broken for cross-compilation: if you're
470 # cross-compiling to one of these OSes then you'll need to specify
471 # the correct CPU with the --cpu option.
472 case $targetos in
473 Darwin)
474 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
475 # run 64-bit userspace code.
476 # If the user didn't specify a CPU explicitly and the kernel says this is
477 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
478 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
479 cpu="x86_64"
482 SunOS)
483 # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
484 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
485 cpu="x86_64"
487 esac
489 if test ! -z "$cpu" ; then
490 # command line argument
492 elif check_define __i386__ ; then
493 cpu="i386"
494 elif check_define __x86_64__ ; then
495 if check_define __ILP32__ ; then
496 cpu="x32"
497 else
498 cpu="x86_64"
500 elif check_define __sparc__ ; then
501 if check_define __arch64__ ; then
502 cpu="sparc64"
503 else
504 cpu="sparc"
506 elif check_define _ARCH_PPC ; then
507 if check_define _ARCH_PPC64 ; then
508 cpu="ppc64"
509 else
510 cpu="ppc"
512 elif check_define __mips__ ; then
513 cpu="mips"
514 elif check_define __ia64__ ; then
515 cpu="ia64"
516 elif check_define __s390__ ; then
517 if check_define __s390x__ ; then
518 cpu="s390x"
519 else
520 cpu="s390"
522 elif check_define __arm__ ; then
523 cpu="arm"
524 elif check_define __aarch64__ ; then
525 cpu="aarch64"
526 elif check_define __hppa__ ; then
527 cpu="hppa"
528 else
529 cpu=`uname -m`
532 ARCH=
533 # Normalise host CPU name and set ARCH.
534 # Note that this case should only have supported host CPUs, not guests.
535 case "$cpu" in
536 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
537 cpu="$cpu"
539 i386|i486|i586|i686|i86pc|BePC)
540 cpu="i386"
542 x86_64|amd64)
543 cpu="x86_64"
545 armv*b|armv*l|arm)
546 cpu="arm"
548 aarch64)
549 cpu="aarch64"
551 mips*)
552 cpu="mips"
554 sparc|sun4[cdmuv])
555 cpu="sparc"
558 # This will result in either an error or falling back to TCI later
559 ARCH=unknown
561 esac
562 if test -z "$ARCH"; then
563 ARCH="$cpu"
566 # OS specific
568 # host *BSD for user mode
569 HOST_VARIANT_DIR=""
571 case $targetos in
572 CYGWIN*)
573 mingw32="yes"
574 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
575 audio_possible_drivers="sdl"
576 audio_drv_list="sdl"
578 MINGW32*)
579 mingw32="yes"
580 audio_possible_drivers="dsound sdl"
581 if check_include dsound.h; then
582 audio_drv_list="dsound"
583 else
584 audio_drv_list=""
587 GNU/kFreeBSD)
588 bsd="yes"
589 audio_drv_list="oss"
590 audio_possible_drivers="oss sdl pa"
592 FreeBSD)
593 bsd="yes"
594 make="${MAKE-gmake}"
595 audio_drv_list="oss"
596 audio_possible_drivers="oss sdl pa"
597 # needed for kinfo_getvmmap(3) in libutil.h
598 LIBS="-lutil $LIBS"
599 netmap="" # enable netmap autodetect
600 HOST_VARIANT_DIR="freebsd"
602 DragonFly)
603 bsd="yes"
604 make="${MAKE-gmake}"
605 audio_drv_list="oss"
606 audio_possible_drivers="oss sdl pa"
607 HOST_VARIANT_DIR="dragonfly"
609 NetBSD)
610 bsd="yes"
611 make="${MAKE-gmake}"
612 audio_drv_list="oss"
613 audio_possible_drivers="oss sdl"
614 oss_lib="-lossaudio"
615 HOST_VARIANT_DIR="netbsd"
617 OpenBSD)
618 bsd="yes"
619 make="${MAKE-gmake}"
620 audio_drv_list="sdl"
621 audio_possible_drivers="sdl"
622 HOST_VARIANT_DIR="openbsd"
624 Darwin)
625 bsd="yes"
626 darwin="yes"
627 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
628 if [ "$cpu" = "x86_64" ] ; then
629 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
630 LDFLAGS="-arch x86_64 $LDFLAGS"
632 cocoa="yes"
633 audio_drv_list="coreaudio"
634 audio_possible_drivers="coreaudio sdl"
635 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
636 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
637 # Disable attempts to use ObjectiveC features in os/object.h since they
638 # won't work when we're compiling with gcc as a C compiler.
639 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
640 HOST_VARIANT_DIR="darwin"
642 SunOS)
643 solaris="yes"
644 make="${MAKE-gmake}"
645 install="${INSTALL-ginstall}"
646 ld="gld"
647 smbd="${SMBD-/usr/sfw/sbin/smbd}"
648 needs_libsunmath="no"
649 solarisrev=`uname -r | cut -f2 -d.`
650 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
651 if test "$solarisrev" -le 9 ; then
652 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
653 needs_libsunmath="yes"
654 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
655 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
656 LIBS="-lsunmath $LIBS"
657 else
658 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
659 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
660 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
661 "Studio 11 can be downloaded from www.sun.com."
665 if test -f /usr/include/sys/soundcard.h ; then
666 audio_drv_list="oss"
668 audio_possible_drivers="oss sdl"
669 # needed for CMSG_ macros in sys/socket.h
670 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
671 # needed for TIOCWIN* defines in termios.h
672 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
673 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
674 solarisnetlibs="-lsocket -lnsl -lresolv"
675 LIBS="$solarisnetlibs $LIBS"
676 libs_qga="$solarisnetlibs $libs_qga"
678 AIX)
679 aix="yes"
680 make="${MAKE-gmake}"
682 Haiku)
683 haiku="yes"
684 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
685 LIBS="-lposix_error_mapper -lnetwork $LIBS"
688 audio_drv_list="oss"
689 audio_possible_drivers="oss alsa sdl pa"
690 linux="yes"
691 linux_user="yes"
692 kvm="yes"
693 vhost_net="yes"
694 vhost_scsi="yes"
695 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
697 esac
699 if [ "$bsd" = "yes" ] ; then
700 if [ "$darwin" != "yes" ] ; then
701 bsd_user="yes"
705 : ${make=${MAKE-make}}
706 : ${install=${INSTALL-install}}
707 : ${python=${PYTHON-python}}
708 : ${smbd=${SMBD-/usr/sbin/smbd}}
710 # Default objcc to clang if available, otherwise use CC
711 if has clang; then
712 objcc=clang
713 else
714 objcc="$cc"
717 if test "$mingw32" = "yes" ; then
718 EXESUF=".exe"
719 DSOSUF=".dll"
720 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
721 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
722 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
723 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
724 write_c_skeleton;
725 if compile_prog "" "-liberty" ; then
726 LIBS="-liberty $LIBS"
728 prefix="c:/Program Files/QEMU"
729 mandir="\${prefix}"
730 datadir="\${prefix}"
731 qemu_docdir="\${prefix}"
732 bindir="\${prefix}"
733 sysconfdir="\${prefix}"
734 local_statedir=
735 confsuffix=""
736 libs_qga="-lws2_32 -lwinmm -lpowrprof -liphlpapi $libs_qga"
739 werror=""
741 for opt do
742 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
743 case "$opt" in
744 --help|-h) show_help=yes
746 --version|-V) exec cat $source_path/VERSION
748 --prefix=*) prefix="$optarg"
750 --interp-prefix=*) interp_prefix="$optarg"
752 --source-path=*)
754 --cross-prefix=*)
756 --cc=*)
758 --host-cc=*) host_cc="$optarg"
760 --cxx=*)
762 --iasl=*) iasl="$optarg"
764 --objcc=*) objcc="$optarg"
766 --make=*) make="$optarg"
768 --install=*) install="$optarg"
770 --python=*) python="$optarg"
772 --gcov=*) gcov_tool="$optarg"
774 --smbd=*) smbd="$optarg"
776 --extra-cflags=*)
778 --extra-ldflags=*)
780 --enable-debug-info)
782 --disable-debug-info)
784 --enable-modules)
785 modules="yes"
787 --cpu=*)
789 --target-list=*) target_list="$optarg"
791 --enable-trace-backends=*) trace_backends="$optarg"
793 # XXX: backwards compatibility
794 --enable-trace-backend=*) trace_backends="$optarg"
796 --with-trace-file=*) trace_file="$optarg"
798 --enable-gprof) gprof="yes"
800 --enable-gcov) gcov="yes"
802 --static)
803 static="yes"
804 LDFLAGS="-static $LDFLAGS"
805 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
807 --mandir=*) mandir="$optarg"
809 --bindir=*) bindir="$optarg"
811 --libdir=*) libdir="$optarg"
813 --libexecdir=*) libexecdir="$optarg"
815 --includedir=*) includedir="$optarg"
817 --datadir=*) datadir="$optarg"
819 --with-confsuffix=*) confsuffix="$optarg"
821 --docdir=*) qemu_docdir="$optarg"
823 --sysconfdir=*) sysconfdir="$optarg"
825 --localstatedir=*) local_statedir="$optarg"
827 --sbindir=*|--sharedstatedir=*|\
828 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
829 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
830 # These switches are silently ignored, for compatibility with
831 # autoconf-generated configure scripts. This allows QEMU's
832 # configure to be used by RPM and similar macros that set
833 # lots of directory switches by default.
835 --with-system-pixman) pixman="system"
837 --without-system-pixman) pixman="internal"
839 --without-pixman) pixman="none"
841 --disable-sdl) sdl="no"
843 --enable-sdl) sdl="yes"
845 --with-sdlabi=*) sdlabi="$optarg"
847 --disable-qom-cast-debug) qom_cast_debug="no"
849 --enable-qom-cast-debug) qom_cast_debug="yes"
851 --disable-virtfs) virtfs="no"
853 --enable-virtfs) virtfs="yes"
855 --disable-vnc) vnc="no"
857 --enable-vnc) vnc="yes"
859 --oss-lib=*) oss_lib="$optarg"
861 --audio-drv-list=*) audio_drv_list="$optarg"
863 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
865 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
867 --enable-debug-tcg) debug_tcg="yes"
869 --disable-debug-tcg) debug_tcg="no"
871 --enable-debug)
872 # Enable debugging options that aren't excessively noisy
873 debug_tcg="yes"
874 debug="yes"
875 strip_opt="no"
877 --enable-sparse) sparse="yes"
879 --disable-sparse) sparse="no"
881 --disable-strip) strip_opt="no"
883 --disable-vnc-tls) vnc_tls="no"
885 --enable-vnc-tls) vnc_tls="yes"
887 --disable-vnc-sasl) vnc_sasl="no"
889 --enable-vnc-sasl) vnc_sasl="yes"
891 --disable-vnc-jpeg) vnc_jpeg="no"
893 --enable-vnc-jpeg) vnc_jpeg="yes"
895 --disable-vnc-png) vnc_png="no"
897 --enable-vnc-png) vnc_png="yes"
899 --disable-vnc-ws) vnc_ws="no"
901 --enable-vnc-ws) vnc_ws="yes"
903 --disable-slirp) slirp="no"
905 --disable-uuid) uuid="no"
907 --enable-uuid) uuid="yes"
909 --disable-vde) vde="no"
911 --enable-vde) vde="yes"
913 --disable-netmap) netmap="no"
915 --enable-netmap) netmap="yes"
917 --disable-xen) xen="no"
919 --enable-xen) xen="yes"
921 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
923 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
925 --disable-brlapi) brlapi="no"
927 --enable-brlapi) brlapi="yes"
929 --disable-bluez) bluez="no"
931 --enable-bluez) bluez="yes"
933 --disable-kvm) kvm="no"
935 --enable-kvm) kvm="yes"
937 --disable-tcg-interpreter) tcg_interpreter="no"
939 --enable-tcg-interpreter) tcg_interpreter="yes"
941 --disable-cap-ng) cap_ng="no"
943 --enable-cap-ng) cap_ng="yes"
945 --disable-spice) spice="no"
947 --enable-spice) spice="yes"
949 --disable-libiscsi) libiscsi="no"
951 --enable-libiscsi) libiscsi="yes"
953 --disable-libnfs) libnfs="no"
955 --enable-libnfs) libnfs="yes"
957 --enable-profiler) profiler="yes"
959 --disable-cocoa) cocoa="no"
961 --enable-cocoa)
962 cocoa="yes" ;
963 sdl="no" ;
964 audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
966 --disable-system) softmmu="no"
968 --enable-system) softmmu="yes"
970 --disable-user)
971 linux_user="no" ;
972 bsd_user="no" ;
974 --enable-user) ;;
975 --disable-linux-user) linux_user="no"
977 --enable-linux-user) linux_user="yes"
979 --disable-bsd-user) bsd_user="no"
981 --enable-bsd-user) bsd_user="yes"
983 --enable-guest-base) guest_base="yes"
985 --disable-guest-base) guest_base="no"
987 --enable-pie) pie="yes"
989 --disable-pie) pie="no"
991 --enable-werror) werror="yes"
993 --disable-werror) werror="no"
995 --enable-stack-protector) stack_protector="yes"
997 --disable-stack-protector) stack_protector="no"
999 --disable-curses) curses="no"
1001 --enable-curses) curses="yes"
1003 --disable-curl) curl="no"
1005 --enable-curl) curl="yes"
1007 --disable-fdt) fdt="no"
1009 --enable-fdt) fdt="yes"
1011 --disable-linux-aio) linux_aio="no"
1013 --enable-linux-aio) linux_aio="yes"
1015 --disable-attr) attr="no"
1017 --enable-attr) attr="yes"
1019 --disable-blobs) blobs="no"
1021 --with-pkgversion=*) pkgversion=" ($optarg)"
1023 --with-coroutine=*) coroutine="$optarg"
1025 --disable-coroutine-pool) coroutine_pool="no"
1027 --enable-coroutine-pool) coroutine_pool="yes"
1029 --disable-docs) docs="no"
1031 --enable-docs) docs="yes"
1033 --disable-vhost-net) vhost_net="no"
1035 --enable-vhost-net) vhost_net="yes"
1037 --disable-vhost-scsi) vhost_scsi="no"
1039 --enable-vhost-scsi) vhost_scsi="yes"
1041 --disable-opengl) opengl="no"
1043 --enable-opengl) opengl="yes"
1045 --disable-rbd) rbd="no"
1047 --enable-rbd) rbd="yes"
1049 --disable-xfsctl) xfs="no"
1051 --enable-xfsctl) xfs="yes"
1053 --disable-smartcard-nss) smartcard_nss="no"
1055 --enable-smartcard-nss) smartcard_nss="yes"
1057 --disable-libusb) libusb="no"
1059 --enable-libusb) libusb="yes"
1061 --disable-usb-redir) usb_redir="no"
1063 --enable-usb-redir) usb_redir="yes"
1065 --disable-zlib-test) zlib="no"
1067 --disable-lzo) lzo="no"
1069 --enable-lzo) lzo="yes"
1071 --disable-snappy) snappy="no"
1073 --enable-snappy) snappy="yes"
1075 --disable-bzip2) bzip2="no"
1077 --enable-bzip2) bzip2="yes"
1079 --enable-guest-agent) guest_agent="yes"
1081 --disable-guest-agent) guest_agent="no"
1083 --enable-guest-agent-msi) guest_agent_msi="yes"
1085 --disable-guest-agent-msi) guest_agent_msi="no"
1087 --with-vss-sdk) vss_win32_sdk=""
1089 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1091 --without-vss-sdk) vss_win32_sdk="no"
1093 --with-win-sdk) win_sdk=""
1095 --with-win-sdk=*) win_sdk="$optarg"
1097 --without-win-sdk) win_sdk="no"
1099 --enable-tools) want_tools="yes"
1101 --disable-tools) want_tools="no"
1103 --enable-seccomp) seccomp="yes"
1105 --disable-seccomp) seccomp="no"
1107 --disable-glusterfs) glusterfs="no"
1109 --enable-glusterfs) glusterfs="yes"
1111 --disable-archipelago) archipelago="no"
1113 --enable-archipelago) archipelago="yes"
1115 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1116 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1118 --disable-gtk) gtk="no"
1120 --enable-gtk) gtk="yes"
1122 --enable-rdma) rdma="yes"
1124 --disable-rdma) rdma="no"
1126 --with-gtkabi=*) gtkabi="$optarg"
1128 --disable-vte) vte="no"
1130 --enable-vte) vte="yes"
1132 --disable-tpm) tpm="no"
1134 --enable-tpm) tpm="yes"
1136 --disable-libssh2) libssh2="no"
1138 --enable-libssh2) libssh2="yes"
1140 --enable-vhdx) vhdx="yes"
1142 --disable-vhdx) vhdx="no"
1144 --disable-quorum) quorum="no"
1146 --enable-quorum) quorum="yes"
1148 --disable-numa) numa="no"
1150 --enable-numa) numa="yes"
1152 --disable-tcmalloc) tcmalloc="no"
1154 --enable-tcmalloc) tcmalloc="yes"
1157 echo "ERROR: unknown option $opt"
1158 echo "Try '$0 --help' for more information"
1159 exit 1
1161 esac
1162 done
1164 if ! has $python; then
1165 error_exit "Python not found. Use --python=/path/to/python"
1168 # Note that if the Python conditional here evaluates True we will exit
1169 # with status 1 which is a shell 'false' value.
1170 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
1171 error_exit "Cannot use '$python', Python 2.4 or later is required." \
1172 "Note that Python 3 or later is not yet supported." \
1173 "Use --python=/path/to/python to specify a supported Python."
1176 # The -B switch was added in Python 2.6.
1177 # If it is supplied, compiled files are not written.
1178 # Use it for Python versions which support it.
1179 if $python -B -c 'import sys; sys.exit(0)' 2>/dev/null; then
1180 python="$python -B"
1183 case "$cpu" in
1184 ppc)
1185 CPU_CFLAGS="-m32"
1186 LDFLAGS="-m32 $LDFLAGS"
1188 ppc64)
1189 CPU_CFLAGS="-m64"
1190 LDFLAGS="-m64 $LDFLAGS"
1192 sparc)
1193 LDFLAGS="-m32 $LDFLAGS"
1194 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1196 sparc64)
1197 LDFLAGS="-m64 $LDFLAGS"
1198 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1200 s390)
1201 CPU_CFLAGS="-m31"
1202 LDFLAGS="-m31 $LDFLAGS"
1204 s390x)
1205 CPU_CFLAGS="-m64"
1206 LDFLAGS="-m64 $LDFLAGS"
1208 i386)
1209 CPU_CFLAGS="-m32"
1210 LDFLAGS="-m32 $LDFLAGS"
1211 cc_i386='$(CC) -m32'
1213 x86_64)
1214 CPU_CFLAGS="-m64"
1215 LDFLAGS="-m64 $LDFLAGS"
1216 cc_i386='$(CC) -m32'
1218 x32)
1219 CPU_CFLAGS="-mx32"
1220 LDFLAGS="-mx32 $LDFLAGS"
1221 cc_i386='$(CC) -m32'
1223 # No special flags required for other host CPUs
1224 esac
1226 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1227 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1229 default_target_list=""
1231 mak_wilds=""
1233 if [ "$softmmu" = "yes" ]; then
1234 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1236 if [ "$linux_user" = "yes" ]; then
1237 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1239 if [ "$bsd_user" = "yes" ]; then
1240 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1243 for config in $mak_wilds; do
1244 default_target_list="${default_target_list} $(basename "$config" .mak)"
1245 done
1247 if test x"$show_help" = x"yes" ; then
1248 cat << EOF
1250 Usage: configure [options]
1251 Options: [defaults in brackets after descriptions]
1253 Standard options:
1254 --help print this message
1255 --prefix=PREFIX install in PREFIX [$prefix]
1256 --interp-prefix=PREFIX where to find shared libraries, etc.
1257 use %M for cpu name [$interp_prefix]
1258 --target-list=LIST set target list (default: build everything)
1259 $(echo Available targets: $default_target_list | \
1260 fold -s -w 53 | sed -e 's/^/ /')
1262 Advanced options (experts only):
1263 --source-path=PATH path of source code [$source_path]
1264 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1265 --cc=CC use C compiler CC [$cc]
1266 --iasl=IASL use ACPI compiler IASL [$iasl]
1267 --host-cc=CC use C compiler CC [$host_cc] for code run at
1268 build time
1269 --cxx=CXX use C++ compiler CXX [$cxx]
1270 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1271 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1272 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1273 --make=MAKE use specified make [$make]
1274 --install=INSTALL use specified install [$install]
1275 --python=PYTHON use specified python [$python]
1276 --smbd=SMBD use specified smbd [$smbd]
1277 --static enable static build [$static]
1278 --mandir=PATH install man pages in PATH
1279 --datadir=PATH install firmware in PATH$confsuffix
1280 --docdir=PATH install documentation in PATH$confsuffix
1281 --bindir=PATH install binaries in PATH
1282 --libdir=PATH install libraries in PATH
1283 --sysconfdir=PATH install config in PATH$confsuffix
1284 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1285 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1286 --enable-debug enable common debug build options
1287 --disable-strip disable stripping binaries
1288 --disable-werror disable compilation abort on warning
1289 --disable-stack-protector disable compiler-provided stack protection
1290 --audio-drv-list=LIST set audio drivers list:
1291 Available drivers: $audio_possible_drivers
1292 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1293 --block-drv-rw-whitelist=L
1294 set block driver read-write whitelist
1295 (affects only QEMU, not qemu-img)
1296 --block-drv-ro-whitelist=L
1297 set block driver read-only whitelist
1298 (affects only QEMU, not qemu-img)
1299 --enable-trace-backends=B Set trace backend
1300 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1301 --with-trace-file=NAME Full PATH,NAME of file to store traces
1302 Default:trace-<pid>
1303 --disable-slirp disable SLIRP userspace network connectivity
1304 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1305 --oss-lib path to OSS library
1306 --cpu=CPU Build for host CPU [$cpu]
1307 --with-coroutine=BACKEND coroutine backend. Supported options:
1308 gthread, ucontext, sigaltstack, windows
1309 --enable-gcov enable test coverage analysis with gcov
1310 --gcov=GCOV use specified gcov [$gcov_tool]
1311 --disable-blobs disable installing provided firmware blobs
1312 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1313 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1315 Optional features, enabled with --enable-FEATURE and
1316 disabled with --disable-FEATURE, default is enabled if available:
1318 system all system emulation targets
1319 user supported user emulation targets
1320 linux-user all linux usermode emulation targets
1321 bsd-user all BSD usermode emulation targets
1322 guest-base GUEST_BASE support for usermode emulation targets
1323 docs build documentation
1324 guest-agent build the QEMU Guest Agent
1325 guest-agent-msi build guest agent Windows MSI installation package
1326 pie Position Independent Executables
1327 modules modules support
1328 debug-tcg TCG debugging (default is disabled)
1329 debug-info debugging information
1330 sparse sparse checker
1332 sdl SDL UI
1333 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1334 gtk gtk UI
1335 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1336 vte vte support for the gtk UI
1337 curses curses UI
1338 vnc VNC UI support
1339 vnc-tls TLS encryption for VNC server
1340 vnc-sasl SASL encryption for VNC server
1341 vnc-jpeg JPEG lossy compression for VNC server
1342 vnc-png PNG compression for VNC server
1343 vnc-ws Websockets support for VNC server
1344 cocoa Cocoa UI (Mac OS X only)
1345 virtfs VirtFS
1346 xen xen backend driver support
1347 xen-pci-passthrough
1348 brlapi BrlAPI (Braile)
1349 curl curl connectivity
1350 fdt fdt device tree
1351 bluez bluez stack connectivity
1352 kvm KVM acceleration support
1353 rdma RDMA-based migration support
1354 uuid uuid support
1355 vde support for vde network
1356 netmap support for netmap network
1357 linux-aio Linux AIO support
1358 cap-ng libcap-ng support
1359 attr attr and xattr support
1360 vhost-net vhost-net acceleration support
1361 spice spice
1362 rbd rados block device (rbd)
1363 libiscsi iscsi support
1364 libnfs nfs support
1365 smartcard-nss smartcard nss support
1366 libusb libusb (for usb passthrough)
1367 usb-redir usb network redirection support
1368 lzo support of lzo compression library
1369 snappy support of snappy compression library
1370 bzip2 support of bzip2 compression library
1371 (for reading bzip2-compressed dmg images)
1372 seccomp seccomp support
1373 coroutine-pool coroutine freelist (better performance)
1374 glusterfs GlusterFS backend
1375 archipelago Archipelago backend
1376 tpm TPM support
1377 libssh2 ssh block device support
1378 vhdx support for the Microsoft VHDX image format
1379 quorum quorum block filter support
1380 numa libnuma support
1381 tcmalloc tcmalloc support
1383 NOTE: The object files are built at the place where configure is launched
1385 exit 0
1388 # Now we have handled --enable-tcg-interpreter and know we're not just
1389 # printing the help message, bail out if the host CPU isn't supported.
1390 if test "$ARCH" = "unknown"; then
1391 if test "$tcg_interpreter" = "yes" ; then
1392 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1393 ARCH=tci
1394 else
1395 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1399 # Consult white-list to determine whether to enable werror
1400 # by default. Only enable by default for git builds
1401 z_version=`cut -f3 -d. $source_path/VERSION`
1403 if test -z "$werror" ; then
1404 if test -d "$source_path/.git" -a \
1405 "$linux" = "yes" ; then
1406 werror="yes"
1407 else
1408 werror="no"
1412 # check that the C compiler works.
1413 write_c_skeleton;
1414 if compile_object ; then
1415 : C compiler works ok
1416 else
1417 error_exit "\"$cc\" either does not exist or does not work"
1420 # Check that the C++ compiler exists and works with the C compiler
1421 if has $cxx; then
1422 cat > $TMPC <<EOF
1423 int c_function(void);
1424 int main(void) { return c_function(); }
1427 compile_object
1429 cat > $TMPCXX <<EOF
1430 extern "C" {
1431 int c_function(void);
1433 int c_function(void) { return 42; }
1436 update_cxxflags
1438 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1439 # C++ compiler $cxx works ok with C compiler $cc
1441 else
1442 echo "C++ compiler $cxx does not work with C compiler $cc"
1443 echo "Disabling C++ specific optional code"
1444 cxx=
1446 else
1447 echo "No C++ compiler available; disabling C++ specific optional code"
1448 cxx=
1451 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1452 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1453 gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1454 gcc_flags="-Wendif-labels $gcc_flags"
1455 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1456 gcc_flags="-Wno-string-plus-int $gcc_flags"
1457 # Note that we do not add -Werror to gcc_flags here, because that would
1458 # enable it for all configure tests. If a configure test failed due
1459 # to -Werror this would just silently disable some features,
1460 # so it's too error prone.
1462 cc_has_warning_flag() {
1463 write_c_skeleton;
1465 # Use the positive sense of the flag when testing for -Wno-wombat
1466 # support (gcc will happily accept the -Wno- form of unknown
1467 # warning options).
1468 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1469 compile_prog "-Werror $optflag" ""
1472 for flag in $gcc_flags; do
1473 if cc_has_warning_flag $flag ; then
1474 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1476 done
1478 if test "$stack_protector" != "no"; then
1479 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1480 sp_on=0
1481 for flag in $gcc_flags; do
1482 # We need to check both a compile and a link, since some compiler
1483 # setups fail only on a .c->.o compile and some only at link time
1484 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1485 compile_prog "-Werror $flag" ""; then
1486 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1487 LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
1488 sp_on=1
1489 break
1491 done
1492 if test "$stack_protector" = yes; then
1493 if test $sp_on = 0; then
1494 error_exit "Stack protector not supported"
1499 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1500 # large functions that use global variables. The bug is in all releases of
1501 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1502 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1503 cat > $TMPC << EOF
1504 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1505 int main(void) { return 0; }
1506 #else
1507 #error No bug in this compiler.
1508 #endif
1510 if compile_prog "-Werror -fno-gcse" "" ; then
1511 TRANSLATE_OPT_CFLAGS=-fno-gcse
1514 if test "$static" = "yes" ; then
1515 if test "$modules" = "yes" ; then
1516 error_exit "static and modules are mutually incompatible"
1518 if test "$pie" = "yes" ; then
1519 error_exit "static and pie are mutually incompatible"
1520 else
1521 pie="no"
1525 # Unconditional check for compiler __thread support
1526 cat > $TMPC << EOF
1527 static __thread int tls_var;
1528 int main(void) { return tls_var; }
1531 if ! compile_prog "-Werror" "" ; then
1532 error_exit "Your compiler does not support the __thread specifier for " \
1533 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1536 if test "$pie" = ""; then
1537 case "$cpu-$targetos" in
1538 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1541 pie="no"
1543 esac
1546 if test "$pie" != "no" ; then
1547 cat > $TMPC << EOF
1549 #ifdef __linux__
1550 # define THREAD __thread
1551 #else
1552 # define THREAD
1553 #endif
1555 static THREAD int tls_var;
1557 int main(void) { return tls_var; }
1560 if compile_prog "-fPIE -DPIE" "-pie"; then
1561 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1562 LDFLAGS="-pie $LDFLAGS"
1563 pie="yes"
1564 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1565 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1567 else
1568 if test "$pie" = "yes"; then
1569 error_exit "PIE not available due to missing toolchain support"
1570 else
1571 echo "Disabling PIE due to missing toolchain support"
1572 pie="no"
1576 if compile_prog "-Werror -fno-pie" "-nopie"; then
1577 CFLAGS_NOPIE="-fno-pie"
1578 LDFLAGS_NOPIE="-nopie"
1582 # check for broken gcc and libtool in RHEL5
1583 if test -n "$libtool" -a "$pie" != "no" ; then
1584 cat > $TMPC <<EOF
1586 void *f(unsigned char *buf, int len);
1587 void *g(unsigned char *buf, int len);
1589 void *
1590 f(unsigned char *buf, int len)
1592 return (void*)0L;
1595 void *
1596 g(unsigned char *buf, int len)
1598 return f(buf, len);
1602 if ! libtool_prog; then
1603 echo "Disabling libtool due to broken toolchain support"
1604 libtool=
1608 ##########################################
1609 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1610 # use i686 as default anyway, but for those that don't, an explicit
1611 # specification is necessary
1613 if test "$cpu" = "i386"; then
1614 cat > $TMPC << EOF
1615 static int sfaa(int *ptr)
1617 return __sync_fetch_and_and(ptr, 0);
1620 int main(void)
1622 int val = 42;
1623 val = __sync_val_compare_and_swap(&val, 0, 1);
1624 sfaa(&val);
1625 return val;
1628 if ! compile_prog "" "" ; then
1629 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1633 #########################################
1634 # Solaris specific configure tool chain decisions
1636 if test "$solaris" = "yes" ; then
1637 if has $install; then
1639 else
1640 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1641 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1642 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1644 if test "`path_of $install`" = "/usr/sbin/install" ; then
1645 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1646 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1647 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1649 if has ar; then
1651 else
1652 if test -f /usr/ccs/bin/ar ; then
1653 error_exit "No path includes ar" \
1654 "Add /usr/ccs/bin to your path and rerun configure"
1656 error_exit "No path includes ar"
1660 if test -z "${target_list+xxx}" ; then
1661 target_list="$default_target_list"
1662 else
1663 target_list=`echo "$target_list" | sed -e 's/,/ /g'`
1666 # Check that we recognised the target name; this allows a more
1667 # friendly error message than if we let it fall through.
1668 for target in $target_list; do
1669 case " $default_target_list " in
1670 *" $target "*)
1673 error_exit "Unknown target name '$target'"
1675 esac
1676 done
1678 # see if system emulation was really requested
1679 case " $target_list " in
1680 *"-softmmu "*) softmmu=yes
1682 *) softmmu=no
1684 esac
1686 feature_not_found() {
1687 feature=$1
1688 remedy=$2
1690 error_exit "User requested feature $feature" \
1691 "configure was not able to find it." \
1692 "$remedy"
1695 # ---
1696 # big/little endian test
1697 cat > $TMPC << EOF
1698 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1699 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1700 extern int foo(short *, short *);
1701 int main(int argc, char *argv[]) {
1702 return foo(big_endian, little_endian);
1706 if compile_object ; then
1707 if grep -q BiGeNdIaN $TMPO ; then
1708 bigendian="yes"
1709 elif grep -q LiTtLeEnDiAn $TMPO ; then
1710 bigendian="no"
1711 else
1712 echo big/little test failed
1714 else
1715 echo big/little test failed
1718 ##########################################
1719 # L2TPV3 probe
1721 cat > $TMPC <<EOF
1722 #include <sys/socket.h>
1723 #include <linux/ip.h>
1724 int main(void) { return sizeof(struct mmsghdr); }
1726 if compile_prog "" "" ; then
1727 l2tpv3=yes
1728 else
1729 l2tpv3=no
1732 ##########################################
1733 # pkg-config probe
1735 if ! has "$pkg_config_exe"; then
1736 error_exit "pkg-config binary '$pkg_config_exe' not found"
1739 ##########################################
1740 # NPTL probe
1742 if test "$linux_user" = "yes"; then
1743 cat > $TMPC <<EOF
1744 #include <sched.h>
1745 #include <linux/futex.h>
1746 int main(void) {
1747 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1748 #error bork
1749 #endif
1750 return 0;
1753 if ! compile_object ; then
1754 feature_not_found "nptl" "Install glibc and linux kernel headers."
1758 ##########################################
1759 # zlib check
1761 if test "$zlib" != "no" ; then
1762 cat > $TMPC << EOF
1763 #include <zlib.h>
1764 int main(void) { zlibVersion(); return 0; }
1766 if compile_prog "" "-lz" ; then
1768 else
1769 error_exit "zlib check failed" \
1770 "Make sure to have the zlib libs and headers installed."
1773 LIBS="$LIBS -lz"
1775 ##########################################
1776 # lzo check
1778 if test "$lzo" != "no" ; then
1779 cat > $TMPC << EOF
1780 #include <lzo/lzo1x.h>
1781 int main(void) { lzo_version(); return 0; }
1783 if compile_prog "" "-llzo2" ; then
1784 libs_softmmu="$libs_softmmu -llzo2"
1785 lzo="yes"
1786 else
1787 if test "$lzo" = "yes"; then
1788 feature_not_found "liblzo2" "Install liblzo2 devel"
1790 lzo="no"
1794 ##########################################
1795 # snappy check
1797 if test "$snappy" != "no" ; then
1798 cat > $TMPC << EOF
1799 #include <snappy-c.h>
1800 int main(void) { snappy_max_compressed_length(4096); return 0; }
1802 if compile_prog "" "-lsnappy" ; then
1803 libs_softmmu="$libs_softmmu -lsnappy"
1804 snappy="yes"
1805 else
1806 if test "$snappy" = "yes"; then
1807 feature_not_found "libsnappy" "Install libsnappy devel"
1809 snappy="no"
1813 ##########################################
1814 # bzip2 check
1816 if test "$bzip2" != "no" ; then
1817 cat > $TMPC << EOF
1818 #include <bzlib.h>
1819 int main(void) { BZ2_bzlibVersion(); return 0; }
1821 if compile_prog "" "-lbz2" ; then
1822 bzip2="yes"
1823 else
1824 if test "$bzip2" = "yes"; then
1825 feature_not_found "libbzip2" "Install libbzip2 devel"
1827 bzip2="no"
1831 ##########################################
1832 # libseccomp check
1834 if test "$seccomp" != "no" ; then
1835 if test "$cpu" = "i386" || test "$cpu" = "x86_64" &&
1836 $pkg_config --atleast-version=2.1.1 libseccomp; then
1837 libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`"
1838 QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`"
1839 seccomp="yes"
1840 else
1841 if test "$seccomp" = "yes"; then
1842 feature_not_found "libseccomp" "Install libseccomp devel >= 2.1.1"
1844 seccomp="no"
1847 ##########################################
1848 # xen probe
1850 if test "$xen" != "no" ; then
1851 xen_libs="-lxenstore -lxenctrl -lxenguest"
1853 # First we test whether Xen headers and libraries are available.
1854 # If no, we are done and there is no Xen support.
1855 # If yes, more tests are run to detect the Xen version.
1857 # Xen (any)
1858 cat > $TMPC <<EOF
1859 #include <xenctrl.h>
1860 int main(void) {
1861 return 0;
1864 if ! compile_prog "" "$xen_libs" ; then
1865 # Xen not found
1866 if test "$xen" = "yes" ; then
1867 feature_not_found "xen" "Install xen devel"
1869 xen=no
1871 # Xen unstable
1872 elif
1873 cat > $TMPC <<EOF &&
1874 #include <xenctrl.h>
1875 #include <xenstore.h>
1876 #include <stdint.h>
1877 #include <xen/hvm/hvm_info_table.h>
1878 #if !defined(HVM_MAX_VCPUS)
1879 # error HVM_MAX_VCPUS not defined
1880 #endif
1881 int main(void) {
1882 xc_interface *xc;
1883 xs_daemon_open();
1884 xc = xc_interface_open(0, 0, 0);
1885 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1886 xc_gnttab_open(NULL, 0);
1887 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1888 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1889 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
1890 return 0;
1893 compile_prog "" "$xen_libs"
1894 then
1895 xen_ctrl_version=450
1896 xen=yes
1898 elif
1899 cat > $TMPC <<EOF &&
1900 #include <xenctrl.h>
1901 #include <xenstore.h>
1902 #include <stdint.h>
1903 #include <xen/hvm/hvm_info_table.h>
1904 #if !defined(HVM_MAX_VCPUS)
1905 # error HVM_MAX_VCPUS not defined
1906 #endif
1907 int main(void) {
1908 xc_interface *xc;
1909 xs_daemon_open();
1910 xc = xc_interface_open(0, 0, 0);
1911 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1912 xc_gnttab_open(NULL, 0);
1913 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1914 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1915 return 0;
1918 compile_prog "" "$xen_libs"
1919 then
1920 xen_ctrl_version=420
1921 xen=yes
1923 elif
1924 cat > $TMPC <<EOF &&
1925 #include <xenctrl.h>
1926 #include <xs.h>
1927 #include <stdint.h>
1928 #include <xen/hvm/hvm_info_table.h>
1929 #if !defined(HVM_MAX_VCPUS)
1930 # error HVM_MAX_VCPUS not defined
1931 #endif
1932 int main(void) {
1933 xs_daemon_open();
1934 xc_interface_open(0, 0, 0);
1935 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1936 xc_gnttab_open(NULL, 0);
1937 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1938 return 0;
1941 compile_prog "" "$xen_libs"
1942 then
1943 xen_ctrl_version=410
1944 xen=yes
1946 # Xen 4.0.0
1947 elif
1948 cat > $TMPC <<EOF &&
1949 #include <xenctrl.h>
1950 #include <xs.h>
1951 #include <stdint.h>
1952 #include <xen/hvm/hvm_info_table.h>
1953 #if !defined(HVM_MAX_VCPUS)
1954 # error HVM_MAX_VCPUS not defined
1955 #endif
1956 int main(void) {
1957 struct xen_add_to_physmap xatp = {
1958 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
1960 xs_daemon_open();
1961 xc_interface_open();
1962 xc_gnttab_open();
1963 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1964 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
1965 return 0;
1968 compile_prog "" "$xen_libs"
1969 then
1970 xen_ctrl_version=400
1971 xen=yes
1973 # Xen 3.4.0
1974 elif
1975 cat > $TMPC <<EOF &&
1976 #include <xenctrl.h>
1977 #include <xs.h>
1978 int main(void) {
1979 struct xen_add_to_physmap xatp = {
1980 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
1982 xs_daemon_open();
1983 xc_interface_open();
1984 xc_gnttab_open();
1985 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1986 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
1987 return 0;
1990 compile_prog "" "$xen_libs"
1991 then
1992 xen_ctrl_version=340
1993 xen=yes
1995 # Xen 3.3.0
1996 elif
1997 cat > $TMPC <<EOF &&
1998 #include <xenctrl.h>
1999 #include <xs.h>
2000 int main(void) {
2001 xs_daemon_open();
2002 xc_interface_open();
2003 xc_gnttab_open();
2004 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2005 return 0;
2008 compile_prog "" "$xen_libs"
2009 then
2010 xen_ctrl_version=330
2011 xen=yes
2013 # Xen version unsupported
2014 else
2015 if test "$xen" = "yes" ; then
2016 feature_not_found "xen (unsupported version)" "Install supported xen (e.g. 4.0, 3.4, 3.3)"
2018 xen=no
2021 if test "$xen" = yes; then
2022 libs_softmmu="$xen_libs $libs_softmmu"
2026 if test "$xen_pci_passthrough" != "no"; then
2027 if test "$xen" = "yes" && test "$linux" = "yes" &&
2028 test "$xen_ctrl_version" -ge 340; then
2029 xen_pci_passthrough=yes
2030 else
2031 if test "$xen_pci_passthrough" = "yes"; then
2032 if test "$xen_ctrl_version" -lt 340; then
2033 error_exit "User requested feature Xen PCI Passthrough" \
2034 "This feature does not work with Xen 3.3"
2036 error_exit "User requested feature Xen PCI Passthrough" \
2037 " but this feature requires /sys from Linux"
2039 xen_pci_passthrough=no
2043 ##########################################
2044 # libtool probe
2046 if ! has $libtool; then
2047 libtool=
2050 # MacOSX ships with a libtool which isn't the GNU one; weed this
2051 # out by checking whether libtool supports the --version switch
2052 if test -n "$libtool"; then
2053 if ! "$libtool" --version >/dev/null 2>&1; then
2054 libtool=
2058 ##########################################
2059 # Sparse probe
2060 if test "$sparse" != "no" ; then
2061 if has cgcc; then
2062 sparse=yes
2063 else
2064 if test "$sparse" = "yes" ; then
2065 feature_not_found "sparse" "Install sparse binary"
2067 sparse=no
2071 ##########################################
2072 # X11 probe
2073 x11_cflags=
2074 x11_libs=-lX11
2075 if $pkg_config --exists "x11"; then
2076 x11_cflags=`$pkg_config --cflags x11`
2077 x11_libs=`$pkg_config --libs x11`
2080 ##########################################
2081 # GTK probe
2083 if test "$gtkabi" = ""; then
2084 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2085 # Use 3.0 as a fallback if that is available.
2086 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2087 gtkabi=2.0
2088 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2089 gtkabi=3.0
2090 else
2091 gtkabi=2.0
2095 if test "$gtk" != "no"; then
2096 gtkpackage="gtk+-$gtkabi"
2097 gtkx11package="gtk+-x11-$gtkabi"
2098 if test "$gtkabi" = "3.0" ; then
2099 gtkversion="3.0.0"
2100 else
2101 gtkversion="2.18.0"
2103 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2104 gtk_cflags=`$pkg_config --cflags $gtkpackage`
2105 gtk_libs=`$pkg_config --libs $gtkpackage`
2106 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2107 gtk_cflags="$gtk_cflags $x11_cflags"
2108 gtk_libs="$gtk_libs $x11_libs"
2110 libs_softmmu="$gtk_libs $libs_softmmu"
2111 gtk="yes"
2112 elif test "$gtk" = "yes"; then
2113 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2114 else
2115 gtk="no"
2119 ##########################################
2120 # VTE probe
2122 if test "$vte" != "no"; then
2123 if test "$gtkabi" = "3.0"; then
2124 vtepackage="vte-2.90"
2125 vteversion="0.32.0"
2126 else
2127 vtepackage="vte"
2128 vteversion="0.24.0"
2130 if $pkg_config --exists "$vtepackage >= $vteversion"; then
2131 vte_cflags=`$pkg_config --cflags $vtepackage`
2132 vte_libs=`$pkg_config --libs $vtepackage`
2133 libs_softmmu="$vte_libs $libs_softmmu"
2134 vte="yes"
2135 elif test "$vte" = "yes"; then
2136 if test "$gtkabi" = "3.0"; then
2137 feature_not_found "vte" "Install libvte-2.90 devel"
2138 else
2139 feature_not_found "vte" "Install libvte devel"
2141 else
2142 vte="no"
2146 ##########################################
2147 # SDL probe
2149 # Look for sdl configuration program (pkg-config or sdl-config). Try
2150 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2152 if test $sdlabi = "2.0"; then
2153 sdl_config=$sdl2_config
2154 sdlname=sdl2
2155 sdlconfigname=sdl2_config
2156 else
2157 sdlname=sdl
2158 sdlconfigname=sdl_config
2161 if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2162 sdl_config=$sdlconfigname
2165 if $pkg_config $sdlname --exists; then
2166 sdlconfig="$pkg_config $sdlname"
2167 _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
2168 elif has ${sdl_config}; then
2169 sdlconfig="$sdl_config"
2170 _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2171 else
2172 if test "$sdl" = "yes" ; then
2173 feature_not_found "sdl" "Install SDL devel"
2175 sdl=no
2177 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2178 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2181 sdl_too_old=no
2182 if test "$sdl" != "no" ; then
2183 cat > $TMPC << EOF
2184 #include <SDL.h>
2185 #undef main /* We don't want SDL to override our main() */
2186 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2188 sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
2189 if test "$static" = "yes" ; then
2190 sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2191 else
2192 sdl_libs=`$sdlconfig --libs 2> /dev/null`
2194 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2195 if test "$_sdlversion" -lt 121 ; then
2196 sdl_too_old=yes
2197 else
2198 if test "$cocoa" = "no" ; then
2199 sdl=yes
2203 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2204 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2205 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2206 sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2207 sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
2209 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2211 else
2212 sdl=no
2214 fi # static link
2215 else # sdl not found
2216 if test "$sdl" = "yes" ; then
2217 feature_not_found "sdl" "Install SDL devel"
2219 sdl=no
2220 fi # sdl compile test
2223 if test "$sdl" = "yes" ; then
2224 cat > $TMPC <<EOF
2225 #include <SDL.h>
2226 #if defined(SDL_VIDEO_DRIVER_X11)
2227 #include <X11/XKBlib.h>
2228 #else
2229 #error No x11 support
2230 #endif
2231 int main(void) { return 0; }
2233 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2234 sdl_cflags="$sdl_cflags $x11_cflags"
2235 sdl_libs="$sdl_libs $x11_libs"
2237 libs_softmmu="$sdl_libs $libs_softmmu"
2240 ##########################################
2241 # RDMA needs OpenFabrics libraries
2242 if test "$rdma" != "no" ; then
2243 cat > $TMPC <<EOF
2244 #include <rdma/rdma_cma.h>
2245 int main(void) { return 0; }
2247 rdma_libs="-lrdmacm -libverbs"
2248 if compile_prog "" "$rdma_libs" ; then
2249 rdma="yes"
2250 libs_softmmu="$libs_softmmu $rdma_libs"
2251 else
2252 if test "$rdma" = "yes" ; then
2253 error_exit \
2254 " OpenFabrics librdmacm/libibverbs not present." \
2255 " Your options:" \
2256 " (1) Fast: Install infiniband packages from your distro." \
2257 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2258 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2260 rdma="no"
2264 ##########################################
2265 # VNC TLS/WS detection
2266 if test "$vnc" = "yes" -a \( "$vnc_tls" != "no" -o "$vnc_ws" != "no" \) ; then
2267 cat > $TMPC <<EOF
2268 #include <gnutls/gnutls.h>
2269 int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
2271 vnc_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2272 vnc_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2273 if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then
2274 if test "$vnc_tls" != "no" ; then
2275 vnc_tls=yes
2277 if test "$vnc_ws" != "no" ; then
2278 vnc_ws=yes
2280 libs_softmmu="$vnc_tls_libs $libs_softmmu"
2281 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_tls_cflags"
2282 else
2283 if test "$vnc_tls" = "yes" ; then
2284 feature_not_found "vnc-tls" "Install gnutls devel"
2286 if test "$vnc_ws" = "yes" ; then
2287 feature_not_found "vnc-ws" "Install gnutls devel"
2289 vnc_tls=no
2290 vnc_ws=no
2294 ##########################################
2295 # Quorum probe (check for gnutls)
2296 if test "$quorum" != "no" ; then
2297 cat > $TMPC <<EOF
2298 #include <gnutls/gnutls.h>
2299 #include <gnutls/crypto.h>
2300 int main(void) {char data[4096], digest[32];
2301 gnutls_hash_fast(GNUTLS_DIG_SHA256, data, 4096, digest);
2302 return 0;
2305 quorum_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2306 quorum_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2307 if compile_prog "$quorum_tls_cflags" "$quorum_tls_libs" ; then
2308 qcow_tls=yes
2309 libs_softmmu="$quorum_tls_libs $libs_softmmu"
2310 libs_tools="$quorum_tls_libs $libs_softmmu"
2311 QEMU_CFLAGS="$QEMU_CFLAGS $quorum_tls_cflags"
2312 quorum="yes"
2313 else
2314 if test "$quorum" = "yes"; then
2315 feature_not_found "gnutls" "gnutls > 2.10.0 required to compile Quorum"
2317 quorum="no"
2321 ##########################################
2322 # VNC SASL detection
2323 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2324 cat > $TMPC <<EOF
2325 #include <sasl/sasl.h>
2326 #include <stdio.h>
2327 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2329 # Assuming Cyrus-SASL installed in /usr prefix
2330 vnc_sasl_cflags=""
2331 vnc_sasl_libs="-lsasl2"
2332 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2333 vnc_sasl=yes
2334 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2335 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2336 else
2337 if test "$vnc_sasl" = "yes" ; then
2338 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2340 vnc_sasl=no
2344 ##########################################
2345 # VNC JPEG detection
2346 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2347 cat > $TMPC <<EOF
2348 #include <stdio.h>
2349 #include <jpeglib.h>
2350 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2352 vnc_jpeg_cflags=""
2353 vnc_jpeg_libs="-ljpeg"
2354 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2355 vnc_jpeg=yes
2356 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2357 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2358 else
2359 if test "$vnc_jpeg" = "yes" ; then
2360 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2362 vnc_jpeg=no
2366 ##########################################
2367 # VNC PNG detection
2368 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2369 cat > $TMPC <<EOF
2370 //#include <stdio.h>
2371 #include <png.h>
2372 #include <stddef.h>
2373 int main(void) {
2374 png_structp png_ptr;
2375 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2376 return png_ptr != 0;
2379 if $pkg_config libpng --exists; then
2380 vnc_png_cflags=`$pkg_config libpng --cflags`
2381 vnc_png_libs=`$pkg_config libpng --libs`
2382 else
2383 vnc_png_cflags=""
2384 vnc_png_libs="-lpng"
2386 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2387 vnc_png=yes
2388 libs_softmmu="$vnc_png_libs $libs_softmmu"
2389 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2390 else
2391 if test "$vnc_png" = "yes" ; then
2392 feature_not_found "vnc-png" "Install libpng devel"
2394 vnc_png=no
2398 ##########################################
2399 # fnmatch() probe, used for ACL routines
2400 fnmatch="no"
2401 cat > $TMPC << EOF
2402 #include <fnmatch.h>
2403 int main(void)
2405 fnmatch("foo", "foo", 0);
2406 return 0;
2409 if compile_prog "" "" ; then
2410 fnmatch="yes"
2413 ##########################################
2414 # uuid_generate() probe, used for vdi block driver
2415 # Note that on some systems (notably MacOSX) no extra library
2416 # need be linked to get the uuid functions.
2417 if test "$uuid" != "no" ; then
2418 uuid_libs="-luuid"
2419 cat > $TMPC << EOF
2420 #include <uuid/uuid.h>
2421 int main(void)
2423 uuid_t my_uuid;
2424 uuid_generate(my_uuid);
2425 return 0;
2428 if compile_prog "" "" ; then
2429 uuid="yes"
2430 elif compile_prog "" "$uuid_libs" ; then
2431 uuid="yes"
2432 libs_softmmu="$uuid_libs $libs_softmmu"
2433 libs_tools="$uuid_libs $libs_tools"
2434 else
2435 if test "$uuid" = "yes" ; then
2436 feature_not_found "uuid" "Install libuuid devel"
2438 uuid=no
2442 if test "$vhdx" = "yes" ; then
2443 if test "$uuid" = "no" ; then
2444 error_exit "uuid required for VHDX support"
2446 elif test "$vhdx" != "no" ; then
2447 if test "$uuid" = "yes" ; then
2448 vhdx=yes
2449 else
2450 vhdx=no
2454 ##########################################
2455 # xfsctl() probe, used for raw-posix
2456 if test "$xfs" != "no" ; then
2457 cat > $TMPC << EOF
2458 #include <stddef.h> /* NULL */
2459 #include <xfs/xfs.h>
2460 int main(void)
2462 xfsctl(NULL, 0, 0, NULL);
2463 return 0;
2466 if compile_prog "" "" ; then
2467 xfs="yes"
2468 else
2469 if test "$xfs" = "yes" ; then
2470 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2472 xfs=no
2476 ##########################################
2477 # vde libraries probe
2478 if test "$vde" != "no" ; then
2479 vde_libs="-lvdeplug"
2480 cat > $TMPC << EOF
2481 #include <libvdeplug.h>
2482 int main(void)
2484 struct vde_open_args a = {0, 0, 0};
2485 char s[] = "";
2486 vde_open(s, s, &a);
2487 return 0;
2490 if compile_prog "" "$vde_libs" ; then
2491 vde=yes
2492 libs_softmmu="$vde_libs $libs_softmmu"
2493 libs_tools="$vde_libs $libs_tools"
2494 else
2495 if test "$vde" = "yes" ; then
2496 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2498 vde=no
2502 ##########################################
2503 # netmap support probe
2504 # Apart from looking for netmap headers, we make sure that the host API version
2505 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2506 # a minor/major version number. Minor new features will be marked with values up
2507 # to 15, and if something happens that requires a change to the backend we will
2508 # move above 15, submit the backend fixes and modify this two bounds.
2509 if test "$netmap" != "no" ; then
2510 cat > $TMPC << EOF
2511 #include <inttypes.h>
2512 #include <net/if.h>
2513 #include <net/netmap.h>
2514 #include <net/netmap_user.h>
2515 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2516 #error
2517 #endif
2518 int main(void) { return 0; }
2520 if compile_prog "" "" ; then
2521 netmap=yes
2522 else
2523 if test "$netmap" = "yes" ; then
2524 feature_not_found "netmap"
2526 netmap=no
2530 ##########################################
2531 # libcap-ng library probe
2532 if test "$cap_ng" != "no" ; then
2533 cap_libs="-lcap-ng"
2534 cat > $TMPC << EOF
2535 #include <cap-ng.h>
2536 int main(void)
2538 capng_capability_to_name(CAPNG_EFFECTIVE);
2539 return 0;
2542 if compile_prog "" "$cap_libs" ; then
2543 cap_ng=yes
2544 libs_tools="$cap_libs $libs_tools"
2545 else
2546 if test "$cap_ng" = "yes" ; then
2547 feature_not_found "cap_ng" "Install libcap-ng devel"
2549 cap_ng=no
2553 ##########################################
2554 # Sound support libraries probe
2556 audio_drv_probe()
2558 drv=$1
2559 hdr=$2
2560 lib=$3
2561 exp=$4
2562 cfl=$5
2563 cat > $TMPC << EOF
2564 #include <$hdr>
2565 int main(void) { $exp }
2567 if compile_prog "$cfl" "$lib" ; then
2569 else
2570 error_exit "$drv check failed" \
2571 "Make sure to have the $drv libs and headers installed."
2575 audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2576 for drv in $audio_drv_list; do
2577 case $drv in
2578 alsa)
2579 audio_drv_probe $drv alsa/asoundlib.h -lasound \
2580 "return snd_pcm_close((snd_pcm_t *)0);"
2581 libs_softmmu="-lasound $libs_softmmu"
2585 audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2586 "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2587 libs_softmmu="-lpulse $libs_softmmu"
2588 audio_pt_int="yes"
2591 coreaudio)
2592 libs_softmmu="-framework CoreAudio $libs_softmmu"
2595 dsound)
2596 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2597 audio_win_int="yes"
2600 oss)
2601 libs_softmmu="$oss_lib $libs_softmmu"
2604 sdl|wav)
2605 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2609 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2610 error_exit "Unknown driver '$drv' selected" \
2611 "Possible drivers are: $audio_possible_drivers"
2614 esac
2615 done
2617 ##########################################
2618 # BrlAPI probe
2620 if test "$brlapi" != "no" ; then
2621 brlapi_libs="-lbrlapi"
2622 cat > $TMPC << EOF
2623 #include <brlapi.h>
2624 #include <stddef.h>
2625 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2627 if compile_prog "" "$brlapi_libs" ; then
2628 brlapi=yes
2629 libs_softmmu="$brlapi_libs $libs_softmmu"
2630 else
2631 if test "$brlapi" = "yes" ; then
2632 feature_not_found "brlapi" "Install brlapi devel"
2634 brlapi=no
2638 ##########################################
2639 # curses probe
2640 if test "$curses" != "no" ; then
2641 if test "$mingw32" = "yes" ; then
2642 curses_list="-lpdcurses"
2643 else
2644 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2646 curses_found=no
2647 cat > $TMPC << EOF
2648 #include <curses.h>
2649 int main(void) {
2650 const char *s = curses_version();
2651 resize_term(0, 0);
2652 return s != 0;
2655 IFS=:
2656 for curses_lib in $curses_list; do
2657 unset IFS
2658 if compile_prog "" "$curses_lib" ; then
2659 curses_found=yes
2660 libs_softmmu="$curses_lib $libs_softmmu"
2661 break
2663 done
2664 unset IFS
2665 if test "$curses_found" = "yes" ; then
2666 curses=yes
2667 else
2668 if test "$curses" = "yes" ; then
2669 feature_not_found "curses" "Install ncurses devel"
2671 curses=no
2675 ##########################################
2676 # curl probe
2677 if test "$curl" != "no" ; then
2678 if $pkg_config libcurl --exists; then
2679 curlconfig="$pkg_config libcurl"
2680 else
2681 curlconfig=curl-config
2683 cat > $TMPC << EOF
2684 #include <curl/curl.h>
2685 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2687 curl_cflags=`$curlconfig --cflags 2>/dev/null`
2688 curl_libs=`$curlconfig --libs 2>/dev/null`
2689 if compile_prog "$curl_cflags" "$curl_libs" ; then
2690 curl=yes
2691 else
2692 if test "$curl" = "yes" ; then
2693 feature_not_found "curl" "Install libcurl devel"
2695 curl=no
2697 fi # test "$curl"
2699 ##########################################
2700 # bluez support probe
2701 if test "$bluez" != "no" ; then
2702 cat > $TMPC << EOF
2703 #include <bluetooth/bluetooth.h>
2704 int main(void) { return bt_error(0); }
2706 bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2707 bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
2708 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2709 bluez=yes
2710 libs_softmmu="$bluez_libs $libs_softmmu"
2711 else
2712 if test "$bluez" = "yes" ; then
2713 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2715 bluez="no"
2719 ##########################################
2720 # glib support probe
2722 glib_req_ver=2.22
2723 glib_modules=gthread-2.0
2724 if test "$modules" = yes; then
2725 glib_modules="$glib_modules gmodule-2.0"
2728 for i in $glib_modules; do
2729 if $pkg_config --atleast-version=$glib_req_ver $i; then
2730 glib_cflags=`$pkg_config --cflags $i`
2731 glib_libs=`$pkg_config --libs $i`
2732 CFLAGS="$glib_cflags $CFLAGS"
2733 LIBS="$glib_libs $LIBS"
2734 libs_qga="$glib_libs $libs_qga"
2735 else
2736 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2738 done
2740 # g_test_trap_subprocess added in 2.38. Used by some tests.
2741 glib_subprocess=yes
2742 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2743 glib_subprocess=no
2746 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
2747 cat > $TMPC << EOF
2748 #include <glib.h>
2749 int main(void) { return 0; }
2751 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
2752 if cc_has_warning_flag "-Wno-unknown-attributes"; then
2753 glib_cflags="-Wno-unknown-attributes $glib_cflags"
2754 CFLAGS="-Wno-unknown-attributes $CFLAGS"
2758 ##########################################
2759 # SHA command probe for modules
2760 if test "$modules" = yes; then
2761 shacmd_probe="sha1sum sha1 shasum"
2762 for c in $shacmd_probe; do
2763 if has $c; then
2764 shacmd="$c"
2765 break
2767 done
2768 if test "$shacmd" = ""; then
2769 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2773 ##########################################
2774 # pixman support probe
2776 if test "$pixman" = ""; then
2777 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
2778 pixman="none"
2779 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
2780 pixman="system"
2781 else
2782 pixman="internal"
2785 if test "$pixman" = "none"; then
2786 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
2787 error_exit "pixman disabled but system emulation or tools build" \
2788 "enabled. You can turn off pixman only if you also" \
2789 "disable all system emulation targets and the tools" \
2790 "build with '--disable-tools --disable-system'."
2792 pixman_cflags=
2793 pixman_libs=
2794 elif test "$pixman" = "system"; then
2795 # pixman version has been checked above
2796 pixman_cflags=`$pkg_config --cflags pixman-1`
2797 pixman_libs=`$pkg_config --libs pixman-1`
2798 else
2799 if test ! -d ${source_path}/pixman/pixman; then
2800 error_exit "pixman >= 0.21.8 not present. Your options:" \
2801 " (1) Preferred: Install the pixman devel package (any recent" \
2802 " distro should have packages as Xorg needs pixman too)." \
2803 " (2) Fetch the pixman submodule, using:" \
2804 " git submodule update --init pixman"
2806 mkdir -p pixman/pixman
2807 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
2808 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
2811 ##########################################
2812 # libcap probe
2814 if test "$cap" != "no" ; then
2815 cat > $TMPC <<EOF
2816 #include <stdio.h>
2817 #include <sys/capability.h>
2818 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
2820 if compile_prog "" "-lcap" ; then
2821 cap=yes
2822 else
2823 cap=no
2827 ##########################################
2828 # pthread probe
2829 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
2831 pthread=no
2832 cat > $TMPC << EOF
2833 #include <pthread.h>
2834 static void *f(void *p) { return NULL; }
2835 int main(void) {
2836 pthread_t thread;
2837 pthread_create(&thread, 0, f, 0);
2838 return 0;
2841 if compile_prog "" "" ; then
2842 pthread=yes
2843 else
2844 for pthread_lib in $PTHREADLIBS_LIST; do
2845 if compile_prog "" "$pthread_lib" ; then
2846 pthread=yes
2847 found=no
2848 for lib_entry in $LIBS; do
2849 if test "$lib_entry" = "$pthread_lib"; then
2850 found=yes
2851 break
2853 done
2854 if test "$found" = "no"; then
2855 LIBS="$pthread_lib $LIBS"
2857 break
2859 done
2862 if test "$mingw32" != yes -a "$pthread" = no; then
2863 error_exit "pthread check failed" \
2864 "Make sure to have the pthread libs and headers installed."
2867 # check for pthread_setname_np
2868 pthread_setname_np=no
2869 cat > $TMPC << EOF
2870 #include <pthread.h>
2872 static void *f(void *p) { return NULL; }
2873 int main(void)
2875 pthread_t thread;
2876 pthread_create(&thread, 0, f, 0);
2877 pthread_setname_np(thread, "QEMU");
2878 return 0;
2881 if compile_prog "" "$pthread_lib" ; then
2882 pthread_setname_np=yes
2885 ##########################################
2886 # rbd probe
2887 if test "$rbd" != "no" ; then
2888 cat > $TMPC <<EOF
2889 #include <stdio.h>
2890 #include <rbd/librbd.h>
2891 int main(void) {
2892 rados_t cluster;
2893 rados_create(&cluster, NULL);
2894 return 0;
2897 rbd_libs="-lrbd -lrados"
2898 if compile_prog "" "$rbd_libs" ; then
2899 rbd=yes
2900 else
2901 if test "$rbd" = "yes" ; then
2902 feature_not_found "rados block device" "Install librbd/ceph devel"
2904 rbd=no
2908 ##########################################
2909 # libssh2 probe
2910 min_libssh2_version=1.2.8
2911 if test "$libssh2" != "no" ; then
2912 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
2913 libssh2_cflags=`$pkg_config libssh2 --cflags`
2914 libssh2_libs=`$pkg_config libssh2 --libs`
2915 libssh2=yes
2916 else
2917 if test "$libssh2" = "yes" ; then
2918 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
2920 libssh2=no
2924 ##########################################
2925 # libssh2_sftp_fsync probe
2927 if test "$libssh2" = "yes"; then
2928 cat > $TMPC <<EOF
2929 #include <stdio.h>
2930 #include <libssh2.h>
2931 #include <libssh2_sftp.h>
2932 int main(void) {
2933 LIBSSH2_SESSION *session;
2934 LIBSSH2_SFTP *sftp;
2935 LIBSSH2_SFTP_HANDLE *sftp_handle;
2936 session = libssh2_session_init ();
2937 sftp = libssh2_sftp_init (session);
2938 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
2939 libssh2_sftp_fsync (sftp_handle);
2940 return 0;
2943 # libssh2_cflags/libssh2_libs defined in previous test.
2944 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
2945 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
2949 ##########################################
2950 # linux-aio probe
2952 if test "$linux_aio" != "no" ; then
2953 cat > $TMPC <<EOF
2954 #include <libaio.h>
2955 #include <sys/eventfd.h>
2956 #include <stddef.h>
2957 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
2959 if compile_prog "" "-laio" ; then
2960 linux_aio=yes
2961 else
2962 if test "$linux_aio" = "yes" ; then
2963 feature_not_found "linux AIO" "Install libaio devel"
2965 linux_aio=no
2969 ##########################################
2970 # TPM passthrough is only on x86 Linux
2972 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
2973 tpm_passthrough=$tpm
2974 else
2975 tpm_passthrough=no
2978 ##########################################
2979 # attr probe
2981 if test "$attr" != "no" ; then
2982 cat > $TMPC <<EOF
2983 #include <stdio.h>
2984 #include <sys/types.h>
2985 #ifdef CONFIG_LIBATTR
2986 #include <attr/xattr.h>
2987 #else
2988 #include <sys/xattr.h>
2989 #endif
2990 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
2992 if compile_prog "" "" ; then
2993 attr=yes
2994 # Older distros have <attr/xattr.h>, and need -lattr:
2995 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
2996 attr=yes
2997 LIBS="-lattr $LIBS"
2998 libattr=yes
2999 else
3000 if test "$attr" = "yes" ; then
3001 feature_not_found "ATTR" "Install libc6 or libattr devel"
3003 attr=no
3007 ##########################################
3008 # iovec probe
3009 cat > $TMPC <<EOF
3010 #include <sys/types.h>
3011 #include <sys/uio.h>
3012 #include <unistd.h>
3013 int main(void) { return sizeof(struct iovec); }
3015 iovec=no
3016 if compile_prog "" "" ; then
3017 iovec=yes
3020 ##########################################
3021 # preadv probe
3022 cat > $TMPC <<EOF
3023 #include <sys/types.h>
3024 #include <sys/uio.h>
3025 #include <unistd.h>
3026 int main(void) { return preadv(0, 0, 0, 0); }
3028 preadv=no
3029 if compile_prog "" "" ; then
3030 preadv=yes
3033 ##########################################
3034 # fdt probe
3035 # fdt support is mandatory for at least some target architectures,
3036 # so insist on it if we're building those system emulators.
3037 fdt_required=no
3038 for target in $target_list; do
3039 case $target in
3040 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3041 fdt_required=yes
3043 esac
3044 done
3046 if test "$fdt_required" = "yes"; then
3047 if test "$fdt" = "no"; then
3048 error_exit "fdt disabled but some requested targets require it." \
3049 "You can turn off fdt only if you also disable all the system emulation" \
3050 "targets which need it (by specifying a cut down --target-list)."
3052 fdt=yes
3055 if test "$fdt" != "no" ; then
3056 fdt_libs="-lfdt"
3057 # explicitly check for libfdt_env.h as it is missing in some stable installs
3058 # and test for required functions to make sure we are on a version >= 1.4.0
3059 cat > $TMPC << EOF
3060 #include <libfdt.h>
3061 #include <libfdt_env.h>
3062 int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3064 if compile_prog "" "$fdt_libs" ; then
3065 # system DTC is good - use it
3066 fdt=yes
3067 elif test -d ${source_path}/dtc/libfdt ; then
3068 # have submodule DTC - use it
3069 fdt=yes
3070 dtc_internal="yes"
3071 mkdir -p dtc
3072 if [ "$pwd_is_source_path" != "y" ] ; then
3073 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3074 symlink "$source_path/dtc/scripts" "dtc/scripts"
3076 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3077 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3078 elif test "$fdt" = "yes" ; then
3079 # have neither and want - prompt for system/submodule install
3080 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3081 " (1) Preferred: Install the DTC (libfdt) devel package" \
3082 " (2) Fetch the DTC submodule, using:" \
3083 " git submodule update --init dtc"
3084 else
3085 # don't have and don't want
3086 fdt_libs=
3087 fdt=no
3091 libs_softmmu="$libs_softmmu $fdt_libs"
3093 ##########################################
3094 # opengl probe (for sdl2, milkymist-tmu2)
3096 # GLX probe, used by milkymist-tmu2
3097 # this is temporary, code will be switched to egl mid-term.
3098 cat > $TMPC << EOF
3099 #include <X11/Xlib.h>
3100 #include <GL/gl.h>
3101 #include <GL/glx.h>
3102 int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
3104 if compile_prog "" "-lGL -lX11" ; then
3105 have_glx=yes
3106 else
3107 have_glx=no
3110 if test "$opengl" != "no" ; then
3111 opengl_pkgs="gl glesv2 epoxy egl"
3112 if $pkg_config $opengl_pkgs x11 && test "$have_glx" = "yes"; then
3113 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3114 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3115 opengl=yes
3116 else
3117 if test "$opengl" = "yes" ; then
3118 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3120 opengl_cflags=""
3121 opengl_libs=""
3122 opengl=no
3127 ##########################################
3128 # archipelago probe
3129 if test "$archipelago" != "no" ; then
3130 cat > $TMPC <<EOF
3131 #include <stdio.h>
3132 #include <xseg/xseg.h>
3133 #include <xseg/protocol.h>
3134 int main(void) {
3135 xseg_initialize();
3136 return 0;
3139 archipelago_libs=-lxseg
3140 if compile_prog "" "$archipelago_libs"; then
3141 archipelago="yes"
3142 libs_tools="$archipelago_libs $libs_tools"
3143 libs_softmmu="$archipelago_libs $libs_softmmu"
3145 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3146 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3147 echo "license and therefore prevent redistribution."
3148 echo
3149 echo "To disable Archipelago, use --disable-archipelago"
3150 else
3151 if test "$archipelago" = "yes" ; then
3152 feature_not_found "Archipelago backend support" "Install libxseg devel"
3154 archipelago="no"
3159 ##########################################
3160 # glusterfs probe
3161 if test "$glusterfs" != "no" ; then
3162 if $pkg_config --atleast-version=3 glusterfs-api; then
3163 glusterfs="yes"
3164 glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3165 glusterfs_libs=`$pkg_config --libs glusterfs-api`
3166 if $pkg_config --atleast-version=5 glusterfs-api; then
3167 glusterfs_discard="yes"
3169 if $pkg_config --atleast-version=6 glusterfs-api; then
3170 glusterfs_zerofill="yes"
3172 else
3173 if test "$glusterfs" = "yes" ; then
3174 feature_not_found "GlusterFS backend support" \
3175 "Install glusterfs-api devel >= 3"
3177 glusterfs="no"
3181 # Check for inotify functions when we are building linux-user
3182 # emulator. This is done because older glibc versions don't
3183 # have syscall stubs for these implemented. In that case we
3184 # don't provide them even if kernel supports them.
3186 inotify=no
3187 cat > $TMPC << EOF
3188 #include <sys/inotify.h>
3191 main(void)
3193 /* try to start inotify */
3194 return inotify_init();
3197 if compile_prog "" "" ; then
3198 inotify=yes
3201 inotify1=no
3202 cat > $TMPC << EOF
3203 #include <sys/inotify.h>
3206 main(void)
3208 /* try to start inotify */
3209 return inotify_init1(0);
3212 if compile_prog "" "" ; then
3213 inotify1=yes
3216 # check if utimensat and futimens are supported
3217 utimens=no
3218 cat > $TMPC << EOF
3219 #define _ATFILE_SOURCE
3220 #include <stddef.h>
3221 #include <fcntl.h>
3222 #include <sys/stat.h>
3224 int main(void)
3226 utimensat(AT_FDCWD, "foo", NULL, 0);
3227 futimens(0, NULL);
3228 return 0;
3231 if compile_prog "" "" ; then
3232 utimens=yes
3235 # check if pipe2 is there
3236 pipe2=no
3237 cat > $TMPC << EOF
3238 #include <unistd.h>
3239 #include <fcntl.h>
3241 int main(void)
3243 int pipefd[2];
3244 return pipe2(pipefd, O_CLOEXEC);
3247 if compile_prog "" "" ; then
3248 pipe2=yes
3251 # check if accept4 is there
3252 accept4=no
3253 cat > $TMPC << EOF
3254 #include <sys/socket.h>
3255 #include <stddef.h>
3257 int main(void)
3259 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3260 return 0;
3263 if compile_prog "" "" ; then
3264 accept4=yes
3267 # check if tee/splice is there. vmsplice was added same time.
3268 splice=no
3269 cat > $TMPC << EOF
3270 #include <unistd.h>
3271 #include <fcntl.h>
3272 #include <limits.h>
3274 int main(void)
3276 int len, fd = 0;
3277 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3278 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3279 return 0;
3282 if compile_prog "" "" ; then
3283 splice=yes
3286 ##########################################
3287 # libnuma probe
3289 if test "$numa" != "no" ; then
3290 cat > $TMPC << EOF
3291 #include <numa.h>
3292 int main(void) { return numa_available(); }
3295 if compile_prog "" "-lnuma" ; then
3296 numa=yes
3297 libs_softmmu="-lnuma $libs_softmmu"
3298 else
3299 if test "$numa" = "yes" ; then
3300 feature_not_found "numa" "install numactl devel"
3302 numa=no
3306 ##########################################
3307 # tcmalloc probe
3309 if test "$tcmalloc" = "yes" ; then
3310 cat > $TMPC << EOF
3311 #include <stdlib.h>
3312 int main(void) { malloc(1); return 0; }
3315 if compile_prog "" "-ltcmalloc" ; then
3316 LIBS="-ltcmalloc $LIBS"
3317 else
3318 feature_not_found "tcmalloc" "install gperftools devel"
3322 ##########################################
3323 # signalfd probe
3324 signalfd="no"
3325 cat > $TMPC << EOF
3326 #include <unistd.h>
3327 #include <sys/syscall.h>
3328 #include <signal.h>
3329 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3332 if compile_prog "" "" ; then
3333 signalfd=yes
3336 # check if eventfd is supported
3337 eventfd=no
3338 cat > $TMPC << EOF
3339 #include <sys/eventfd.h>
3341 int main(void)
3343 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3346 if compile_prog "" "" ; then
3347 eventfd=yes
3350 # check for fallocate
3351 fallocate=no
3352 cat > $TMPC << EOF
3353 #include <fcntl.h>
3355 int main(void)
3357 fallocate(0, 0, 0, 0);
3358 return 0;
3361 if compile_prog "" "" ; then
3362 fallocate=yes
3365 # check for fallocate hole punching
3366 fallocate_punch_hole=no
3367 cat > $TMPC << EOF
3368 #include <fcntl.h>
3369 #include <linux/falloc.h>
3371 int main(void)
3373 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3374 return 0;
3377 if compile_prog "" "" ; then
3378 fallocate_punch_hole=yes
3381 # check that fallocate supports range zeroing inside the file
3382 fallocate_zero_range=no
3383 cat > $TMPC << EOF
3384 #include <fcntl.h>
3385 #include <linux/falloc.h>
3387 int main(void)
3389 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3390 return 0;
3393 if compile_prog "" "" ; then
3394 fallocate_zero_range=yes
3397 # check for posix_fallocate
3398 posix_fallocate=no
3399 cat > $TMPC << EOF
3400 #include <fcntl.h>
3402 int main(void)
3404 posix_fallocate(0, 0, 0);
3405 return 0;
3408 if compile_prog "" "" ; then
3409 posix_fallocate=yes
3412 # check for sync_file_range
3413 sync_file_range=no
3414 cat > $TMPC << EOF
3415 #include <fcntl.h>
3417 int main(void)
3419 sync_file_range(0, 0, 0, 0);
3420 return 0;
3423 if compile_prog "" "" ; then
3424 sync_file_range=yes
3427 # check for linux/fiemap.h and FS_IOC_FIEMAP
3428 fiemap=no
3429 cat > $TMPC << EOF
3430 #include <sys/ioctl.h>
3431 #include <linux/fs.h>
3432 #include <linux/fiemap.h>
3434 int main(void)
3436 ioctl(0, FS_IOC_FIEMAP, 0);
3437 return 0;
3440 if compile_prog "" "" ; then
3441 fiemap=yes
3444 # check for dup3
3445 dup3=no
3446 cat > $TMPC << EOF
3447 #include <unistd.h>
3449 int main(void)
3451 dup3(0, 0, 0);
3452 return 0;
3455 if compile_prog "" "" ; then
3456 dup3=yes
3459 # check for ppoll support
3460 ppoll=no
3461 cat > $TMPC << EOF
3462 #include <poll.h>
3464 int main(void)
3466 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3467 ppoll(&pfd, 1, 0, 0);
3468 return 0;
3471 if compile_prog "" "" ; then
3472 ppoll=yes
3475 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3476 prctl_pr_set_timerslack=no
3477 cat > $TMPC << EOF
3478 #include <sys/prctl.h>
3480 int main(void)
3482 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3483 return 0;
3486 if compile_prog "" "" ; then
3487 prctl_pr_set_timerslack=yes
3490 # check for epoll support
3491 epoll=no
3492 cat > $TMPC << EOF
3493 #include <sys/epoll.h>
3495 int main(void)
3497 epoll_create(0);
3498 return 0;
3501 if compile_prog "" "" ; then
3502 epoll=yes
3505 # epoll_create1 and epoll_pwait are later additions
3506 # so we must check separately for their presence
3507 epoll_create1=no
3508 cat > $TMPC << EOF
3509 #include <sys/epoll.h>
3511 int main(void)
3513 /* Note that we use epoll_create1 as a value, not as
3514 * a function being called. This is necessary so that on
3515 * old SPARC glibc versions where the function was present in
3516 * the library but not declared in the header file we will
3517 * fail the configure check. (Otherwise we will get a compiler
3518 * warning but not an error, and will proceed to fail the
3519 * qemu compile where we compile with -Werror.)
3521 return (int)(uintptr_t)&epoll_create1;
3524 if compile_prog "" "" ; then
3525 epoll_create1=yes
3528 epoll_pwait=no
3529 cat > $TMPC << EOF
3530 #include <sys/epoll.h>
3532 int main(void)
3534 epoll_pwait(0, 0, 0, 0, 0);
3535 return 0;
3538 if compile_prog "" "" ; then
3539 epoll_pwait=yes
3542 # check for sendfile support
3543 sendfile=no
3544 cat > $TMPC << EOF
3545 #include <sys/sendfile.h>
3547 int main(void)
3549 return sendfile(0, 0, 0, 0);
3552 if compile_prog "" "" ; then
3553 sendfile=yes
3556 # check for timerfd support (glibc 2.8 and newer)
3557 timerfd=no
3558 cat > $TMPC << EOF
3559 #include <sys/timerfd.h>
3561 int main(void)
3563 return(timerfd_create(CLOCK_REALTIME, 0));
3566 if compile_prog "" "" ; then
3567 timerfd=yes
3570 # check for setns and unshare support
3571 setns=no
3572 cat > $TMPC << EOF
3573 #include <sched.h>
3575 int main(void)
3577 int ret;
3578 ret = setns(0, 0);
3579 ret = unshare(0);
3580 return ret;
3583 if compile_prog "" "" ; then
3584 setns=yes
3587 # Check if tools are available to build documentation.
3588 if test "$docs" != "no" ; then
3589 if has makeinfo && has pod2man; then
3590 docs=yes
3591 else
3592 if test "$docs" = "yes" ; then
3593 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3595 docs=no
3599 # Search for bswap_32 function
3600 byteswap_h=no
3601 cat > $TMPC << EOF
3602 #include <byteswap.h>
3603 int main(void) { return bswap_32(0); }
3605 if compile_prog "" "" ; then
3606 byteswap_h=yes
3609 # Search for bswap32 function
3610 bswap_h=no
3611 cat > $TMPC << EOF
3612 #include <sys/endian.h>
3613 #include <sys/types.h>
3614 #include <machine/bswap.h>
3615 int main(void) { return bswap32(0); }
3617 if compile_prog "" "" ; then
3618 bswap_h=yes
3621 ##########################################
3622 # Do we have libiscsi >= 1.9.0
3623 if test "$libiscsi" != "no" ; then
3624 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3625 libiscsi="yes"
3626 libiscsi_cflags=$($pkg_config --cflags libiscsi)
3627 libiscsi_libs=$($pkg_config --libs libiscsi)
3628 else
3629 if test "$libiscsi" = "yes" ; then
3630 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3632 libiscsi="no"
3636 ##########################################
3637 # Do we need libm
3638 cat > $TMPC << EOF
3639 #include <math.h>
3640 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3642 if compile_prog "" "" ; then
3644 elif compile_prog "" "-lm" ; then
3645 LIBS="-lm $LIBS"
3646 libs_qga="-lm $libs_qga"
3647 else
3648 error_exit "libm check failed"
3651 ##########################################
3652 # Do we need librt
3653 # uClibc provides 2 versions of clock_gettime(), one with realtime
3654 # support and one without. This means that the clock_gettime() don't
3655 # need -lrt. We still need it for timer_create() so we check for this
3656 # function in addition.
3657 cat > $TMPC <<EOF
3658 #include <signal.h>
3659 #include <time.h>
3660 int main(void) {
3661 timer_create(CLOCK_REALTIME, NULL, NULL);
3662 return clock_gettime(CLOCK_REALTIME, NULL);
3666 if compile_prog "" "" ; then
3668 # we need pthread for static linking. use previous pthread test result
3669 elif compile_prog "" "$pthread_lib -lrt" ; then
3670 LIBS="$LIBS -lrt"
3671 libs_qga="$libs_qga -lrt"
3674 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3675 "$aix" != "yes" -a "$haiku" != "yes" ; then
3676 libs_softmmu="-lutil $libs_softmmu"
3679 ##########################################
3680 # spice probe
3681 if test "$spice" != "no" ; then
3682 cat > $TMPC << EOF
3683 #include <spice.h>
3684 int main(void) { spice_server_new(); return 0; }
3686 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3687 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3688 if $pkg_config --atleast-version=0.12.0 spice-server && \
3689 $pkg_config --atleast-version=0.12.3 spice-protocol && \
3690 compile_prog "$spice_cflags" "$spice_libs" ; then
3691 spice="yes"
3692 libs_softmmu="$libs_softmmu $spice_libs"
3693 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3694 spice_protocol_version=$($pkg_config --modversion spice-protocol)
3695 spice_server_version=$($pkg_config --modversion spice-server)
3696 else
3697 if test "$spice" = "yes" ; then
3698 feature_not_found "spice" \
3699 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3701 spice="no"
3705 # check for libcacard for smartcard support
3706 smartcard_cflags=""
3707 # TODO - what's the minimal nss version we support?
3708 if test "$smartcard_nss" != "no"; then
3709 cat > $TMPC << EOF
3710 #include <pk11pub.h>
3711 int main(void) { PK11_FreeSlot(0); return 0; }
3713 # FIXME: do not include $glib_* in here
3714 nss_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
3715 nss_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
3716 test_cflags="$nss_cflags"
3717 # The header files in nss < 3.13.3 have a bug which causes them to
3718 # emit a warning. If we're going to compile QEMU with -Werror, then
3719 # test that the headers don't have this bug. Otherwise we would pass
3720 # the configure test but fail to compile QEMU later.
3721 if test "$werror" = "yes"; then
3722 test_cflags="-Werror $test_cflags"
3724 if test -n "$libtool" &&
3725 $pkg_config --atleast-version=3.12.8 nss && \
3726 compile_prog "$test_cflags" "$nss_libs"; then
3727 smartcard_nss="yes"
3728 else
3729 if test "$smartcard_nss" = "yes"; then
3730 feature_not_found "nss" "Install nss devel >= 3.12.8"
3732 smartcard_nss="no"
3736 # check for libusb
3737 if test "$libusb" != "no" ; then
3738 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
3739 libusb="yes"
3740 libusb_cflags=$($pkg_config --cflags libusb-1.0)
3741 libusb_libs=$($pkg_config --libs libusb-1.0)
3742 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3743 libs_softmmu="$libs_softmmu $libusb_libs"
3744 else
3745 if test "$libusb" = "yes"; then
3746 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
3748 libusb="no"
3752 # check for usbredirparser for usb network redirection support
3753 if test "$usb_redir" != "no" ; then
3754 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
3755 usb_redir="yes"
3756 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3757 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
3758 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
3759 libs_softmmu="$libs_softmmu $usb_redir_libs"
3760 else
3761 if test "$usb_redir" = "yes"; then
3762 feature_not_found "usb-redir" "Install usbredir devel"
3764 usb_redir="no"
3768 ##########################################
3769 # check if we have VSS SDK headers for win
3771 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3772 case "$vss_win32_sdk" in
3773 "") vss_win32_include="-I$source_path" ;;
3774 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3775 # handle path with spaces. So we symlink the headers into ".sdk/vss".
3776 vss_win32_include="-I$source_path/.sdk/vss"
3777 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3779 *) vss_win32_include="-I$vss_win32_sdk"
3780 esac
3781 cat > $TMPC << EOF
3782 #define __MIDL_user_allocate_free_DEFINED__
3783 #include <inc/win2003/vss.h>
3784 int main(void) { return VSS_CTX_BACKUP; }
3786 if compile_prog "$vss_win32_include" "" ; then
3787 guest_agent_with_vss="yes"
3788 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3789 libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3790 else
3791 if test "$vss_win32_sdk" != "" ; then
3792 echo "ERROR: Please download and install Microsoft VSS SDK:"
3793 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3794 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3795 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
3796 echo "ERROR: The headers are extracted in the directory \`inc'."
3797 feature_not_found "VSS support"
3799 guest_agent_with_vss="no"
3803 ##########################################
3804 # lookup Windows platform SDK (if not specified)
3805 # The SDK is needed only to build .tlb (type library) file of guest agent
3806 # VSS provider from the source. It is usually unnecessary because the
3807 # pre-compiled .tlb file is included.
3809 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
3810 if test -z "$win_sdk"; then
3811 programfiles="$PROGRAMFILES"
3812 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3813 if test -n "$programfiles"; then
3814 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3815 else
3816 feature_not_found "Windows SDK"
3818 elif test "$win_sdk" = "no"; then
3819 win_sdk=""
3823 ##########################################
3824 # check if mingw environment provides a recent ntddscsi.h
3825 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
3826 cat > $TMPC << EOF
3827 #include <windows.h>
3828 #include <ntddscsi.h>
3829 int main(void) {
3830 #if !defined(IOCTL_SCSI_GET_ADDRESS)
3831 #error Missing required ioctl definitions
3832 #endif
3833 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
3834 return addr.Lun;
3837 if compile_prog "" "" ; then
3838 guest_agent_ntddscsi=yes
3839 libs_qga="-lsetupapi $libs_qga"
3843 ##########################################
3844 # Guest agent Window MSI package
3846 if test "$guest_agent" != yes; then
3847 if test "$guest_agent_msi" = yes; then
3848 error_exit "MSI guest agent package requires guest agent enabled"
3850 guest_agent_msi=no
3851 elif test "$mingw32" != "yes"; then
3852 if test "$guest_agent_msi" = "yes"; then
3853 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
3855 guest_agent_msi=no
3856 elif ! has wixl; then
3857 if test "$guest_agent_msi" = "yes"; then
3858 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
3860 guest_agent_msi=no
3863 if test "$guest_agent_msi" != "no"; then
3864 if test "$guest_agent_with_vss" = "yes"; then
3865 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
3868 if test "$QEMU_GA_MANUFACTURER" = ""; then
3869 QEMU_GA_MANUFACTURER=QEMU
3872 if test "$QEMU_GA_DISTRO" = ""; then
3873 QEMU_GA_DISTRO=Linux
3876 if test "$QEMU_GA_VERSION" = ""; then
3877 QEMU_GA_VERSION=`cat $source_path/VERSION`
3880 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin"
3882 case "$cpu" in
3883 x86_64)
3884 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
3886 i386)
3887 QEMU_GA_MSI_ARCH="-D Arch=32"
3890 error_exit "CPU $cpu not supported for building installation package"
3892 esac
3895 ##########################################
3896 # check if we have fdatasync
3898 fdatasync=no
3899 cat > $TMPC << EOF
3900 #include <unistd.h>
3901 int main(void) {
3902 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
3903 return fdatasync(0);
3904 #else
3905 #error Not supported
3906 #endif
3909 if compile_prog "" "" ; then
3910 fdatasync=yes
3913 ##########################################
3914 # check if we have madvise
3916 madvise=no
3917 cat > $TMPC << EOF
3918 #include <sys/types.h>
3919 #include <sys/mman.h>
3920 #include <stddef.h>
3921 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
3923 if compile_prog "" "" ; then
3924 madvise=yes
3927 ##########################################
3928 # check if we have posix_madvise
3930 posix_madvise=no
3931 cat > $TMPC << EOF
3932 #include <sys/mman.h>
3933 #include <stddef.h>
3934 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
3936 if compile_prog "" "" ; then
3937 posix_madvise=yes
3940 ##########################################
3941 # check if we have usable SIGEV_THREAD_ID
3943 sigev_thread_id=no
3944 cat > $TMPC << EOF
3945 #include <signal.h>
3946 int main(void) {
3947 struct sigevent ev;
3948 ev.sigev_notify = SIGEV_THREAD_ID;
3949 ev._sigev_un._tid = 0;
3950 asm volatile("" : : "g"(&ev));
3951 return 0;
3954 if compile_prog "" "" ; then
3955 sigev_thread_id=yes
3958 ##########################################
3959 # check if trace backend exists
3961 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
3962 if test "$?" -ne 0 ; then
3963 error_exit "invalid trace backends" \
3964 "Please choose supported trace backends."
3967 ##########################################
3968 # For 'ust' backend, test if ust headers are present
3969 if have_backend "ust"; then
3970 cat > $TMPC << EOF
3971 #include <lttng/tracepoint.h>
3972 int main(void) { return 0; }
3974 if compile_prog "" "" ; then
3975 if $pkg_config lttng-ust --exists; then
3976 lttng_ust_libs=`$pkg_config --libs lttng-ust`
3977 else
3978 lttng_ust_libs="-llttng-ust"
3980 if $pkg_config liburcu-bp --exists; then
3981 urcu_bp_libs=`$pkg_config --libs liburcu-bp`
3982 else
3983 urcu_bp_libs="-lurcu-bp"
3986 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
3987 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
3988 else
3989 error_exit "Trace backend 'ust' missing lttng-ust header files"
3993 ##########################################
3994 # For 'dtrace' backend, test if 'dtrace' command is present
3995 if have_backend "dtrace"; then
3996 if ! has 'dtrace' ; then
3997 error_exit "dtrace command is not found in PATH $PATH"
3999 trace_backend_stap="no"
4000 if has 'stap' ; then
4001 trace_backend_stap="yes"
4005 ##########################################
4006 # check and set a backend for coroutine
4008 # We prefer ucontext, but it's not always possible. The fallback
4009 # is sigcontext. gthread is not selectable except explicitly, because
4010 # it is not functional enough to run QEMU proper. (It is occasionally
4011 # useful for debugging purposes.) On Windows the only valid backend
4012 # is the Windows-specific one.
4014 ucontext_works=no
4015 if test "$darwin" != "yes"; then
4016 cat > $TMPC << EOF
4017 #include <ucontext.h>
4018 #ifdef __stub_makecontext
4019 #error Ignoring glibc stub makecontext which will always fail
4020 #endif
4021 int main(void) { makecontext(0, 0, 0); return 0; }
4023 if compile_prog "" "" ; then
4024 ucontext_works=yes
4028 if test "$coroutine" = ""; then
4029 if test "$mingw32" = "yes"; then
4030 coroutine=win32
4031 elif test "$ucontext_works" = "yes"; then
4032 coroutine=ucontext
4033 else
4034 coroutine=sigaltstack
4036 else
4037 case $coroutine in
4038 windows)
4039 if test "$mingw32" != "yes"; then
4040 error_exit "'windows' coroutine backend only valid for Windows"
4042 # Unfortunately the user visible backend name doesn't match the
4043 # coroutine-*.c filename for this case, so we have to adjust it here.
4044 coroutine=win32
4046 ucontext)
4047 if test "$ucontext_works" != "yes"; then
4048 feature_not_found "ucontext"
4051 gthread|sigaltstack)
4052 if test "$mingw32" = "yes"; then
4053 error_exit "only the 'windows' coroutine backend is valid for Windows"
4057 error_exit "unknown coroutine backend $coroutine"
4059 esac
4062 if test "$coroutine_pool" = ""; then
4063 if test "$coroutine" = "gthread"; then
4064 coroutine_pool=no
4065 else
4066 coroutine_pool=yes
4069 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4070 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4073 ##########################################
4074 # check if we have open_by_handle_at
4076 open_by_handle_at=no
4077 cat > $TMPC << EOF
4078 #include <fcntl.h>
4079 #if !defined(AT_EMPTY_PATH)
4080 # error missing definition
4081 #else
4082 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4083 #endif
4085 if compile_prog "" "" ; then
4086 open_by_handle_at=yes
4089 ########################################
4090 # check if we have linux/magic.h
4092 linux_magic_h=no
4093 cat > $TMPC << EOF
4094 #include <linux/magic.h>
4095 int main(void) {
4096 return 0;
4099 if compile_prog "" "" ; then
4100 linux_magic_h=yes
4103 ########################################
4104 # check whether we can disable warning option with a pragma (this is needed
4105 # to silence warnings in the headers of some versions of external libraries).
4106 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4107 # only a warning.
4109 # If we can't selectively disable warning in the code, disable -Werror so that
4110 # the build doesn't fail anyway.
4112 pragma_disable_unused_but_set=no
4113 cat > $TMPC << EOF
4114 #pragma GCC diagnostic push
4115 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4116 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4117 #pragma GCC diagnostic pop
4119 int main(void) {
4120 return 0;
4123 if compile_prog "-Werror" "" ; then
4124 pragma_diagnostic_available=yes
4125 else
4126 werror=no
4129 ########################################
4130 # check if we have valgrind/valgrind.h
4132 valgrind_h=no
4133 cat > $TMPC << EOF
4134 #include <valgrind/valgrind.h>
4135 int main(void) {
4136 return 0;
4139 if compile_prog "" "" ; then
4140 valgrind_h=yes
4143 ########################################
4144 # check if environ is declared
4146 has_environ=no
4147 cat > $TMPC << EOF
4148 #include <unistd.h>
4149 int main(void) {
4150 environ = 0;
4151 return 0;
4154 if compile_prog "" "" ; then
4155 has_environ=yes
4158 ########################################
4159 # check if cpuid.h is usable.
4161 cpuid_h=no
4162 cat > $TMPC << EOF
4163 #include <cpuid.h>
4164 int main(void) {
4165 unsigned a, b, c, d;
4166 int max = __get_cpuid_max(0, 0);
4168 if (max >= 1) {
4169 __cpuid(1, a, b, c, d);
4172 if (max >= 7) {
4173 __cpuid_count(7, 0, a, b, c, d);
4176 return 0;
4179 if compile_prog "" "" ; then
4180 cpuid_h=yes
4183 ########################################
4184 # check if __[u]int128_t is usable.
4186 int128=no
4187 cat > $TMPC << EOF
4188 #if defined(__clang_major__) && defined(__clang_minor__)
4189 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4190 # error __int128_t does not work in CLANG before 3.2
4191 # endif
4192 #endif
4193 __int128_t a;
4194 __uint128_t b;
4195 int main (void) {
4196 a = a + b;
4197 b = a * b;
4198 a = a * a;
4199 return 0;
4202 if compile_prog "" "" ; then
4203 int128=yes
4206 ########################################
4207 # check if getauxval is available.
4209 getauxval=no
4210 cat > $TMPC << EOF
4211 #include <sys/auxv.h>
4212 int main(void) {
4213 return getauxval(AT_HWCAP) == 0;
4216 if compile_prog "" "" ; then
4217 getauxval=yes
4220 ########################################
4221 # check if ccache is interfering with
4222 # semantic analysis of macros
4224 ccache_cpp2=no
4225 cat > $TMPC << EOF
4226 static const int Z = 1;
4227 #define fn() ({ Z; })
4228 #define TAUT(X) ((X) == Z)
4229 #define PAREN(X, Y) (X == Y)
4230 #define ID(X) (X)
4231 int main(int argc, char *argv[])
4233 int x = 0, y = 0;
4234 x = ID(x);
4235 x = fn();
4236 fn();
4237 if (PAREN(x, y)) return 0;
4238 if (TAUT(Z)) return 0;
4239 return 0;
4243 if ! compile_object "-Werror"; then
4244 ccache_cpp2=yes
4247 ##########################################
4248 # End of CC checks
4249 # After here, no more $cc or $ld runs
4251 if test "$gcov" = "yes" ; then
4252 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4253 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4254 elif test "$debug" = "no" ; then
4255 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4258 ##########################################
4259 # Do we have libnfs
4260 if test "$libnfs" != "no" ; then
4261 if $pkg_config --atleast-version=1.9.3 libnfs; then
4262 libnfs="yes"
4263 libnfs_libs=$($pkg_config --libs libnfs)
4264 LIBS="$LIBS $libnfs_libs"
4265 else
4266 if test "$libnfs" = "yes" ; then
4267 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4269 libnfs="no"
4273 # Disable zero malloc errors for official releases unless explicitly told to
4274 # enable/disable
4275 if test -z "$zero_malloc" ; then
4276 if test "$z_version" = "50" ; then
4277 zero_malloc="no"
4278 else
4279 zero_malloc="yes"
4283 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4284 if test "$werror" = "yes"; then
4285 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4288 if test "$solaris" = "no" ; then
4289 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4290 LDFLAGS="-Wl,--warn-common $LDFLAGS"
4294 # test if pod2man has --utf8 option
4295 if pod2man --help | grep -q utf8; then
4296 POD2MAN="pod2man --utf8"
4297 else
4298 POD2MAN="pod2man"
4301 # Use ASLR, no-SEH and DEP if available
4302 if test "$mingw32" = "yes" ; then
4303 for flag in --dynamicbase --no-seh --nxcompat; do
4304 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4305 LDFLAGS="-Wl,$flag $LDFLAGS"
4307 done
4310 qemu_confdir=$sysconfdir$confsuffix
4311 qemu_moddir=$libdir$confsuffix
4312 qemu_datadir=$datadir$confsuffix
4313 qemu_localedir="$datadir/locale"
4315 tools=""
4316 if test "$want_tools" = "yes" ; then
4317 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4318 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4319 tools="qemu-nbd\$(EXESUF) $tools"
4322 if test "$softmmu" = yes ; then
4323 if test "$virtfs" != no ; then
4324 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4325 virtfs=yes
4326 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4327 else
4328 if test "$virtfs" = yes; then
4329 error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4331 virtfs=no
4335 if [ "$guest_agent" != "no" ]; then
4336 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4337 tools="qemu-ga\$(EXESUF) $tools"
4338 if [ "$mingw32" = "yes" -a "$guest_agent_with_vss" = "yes" ]; then
4339 tools="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb $tools"
4341 guest_agent=yes
4342 elif [ "$guest_agent" != yes ]; then
4343 guest_agent=no
4344 else
4345 error_exit "Guest agent is not supported on this platform"
4349 # Mac OS X ships with a broken assembler
4350 roms=
4351 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4352 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4353 "$softmmu" = yes ; then
4354 roms="optionrom"
4356 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4357 roms="$roms spapr-rtas"
4360 if test "$cpu" = "s390x" ; then
4361 roms="$roms s390-ccw"
4364 # Probe for the need for relocating the user-only binary.
4365 if test "$pie" = "no" ; then
4366 textseg_addr=
4367 case "$cpu" in
4368 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4369 # ??? Rationale for choosing this address
4370 textseg_addr=0x60000000
4372 mips)
4373 # A 256M aligned address, high in the address space, with enough
4374 # room for the code_gen_buffer above it before the stack.
4375 textseg_addr=0x60000000
4377 esac
4378 if [ -n "$textseg_addr" ]; then
4379 cat > $TMPC <<EOF
4380 int main(void) { return 0; }
4382 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4383 if ! compile_prog "" "$textseg_ldflags"; then
4384 # In case ld does not support -Ttext-segment, edit the default linker
4385 # script via sed to set the .text start addr. This is needed on FreeBSD
4386 # at least.
4387 $ld --verbose | sed \
4388 -e '1,/==================================================/d' \
4389 -e '/==================================================/,$d' \
4390 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4391 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4392 textseg_ldflags="-Wl,-T../config-host.ld"
4397 # prepend pixman and ftd flags after all config tests are done
4398 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4399 libs_softmmu="$pixman_libs $libs_softmmu"
4401 echo "Install prefix $prefix"
4402 echo "BIOS directory `eval echo $qemu_datadir`"
4403 echo "binary directory `eval echo $bindir`"
4404 echo "library directory `eval echo $libdir`"
4405 echo "module directory `eval echo $qemu_moddir`"
4406 echo "libexec directory `eval echo $libexecdir`"
4407 echo "include directory `eval echo $includedir`"
4408 echo "config directory `eval echo $sysconfdir`"
4409 if test "$mingw32" = "no" ; then
4410 echo "local state directory `eval echo $local_statedir`"
4411 echo "Manual directory `eval echo $mandir`"
4412 echo "ELF interp prefix $interp_prefix"
4413 else
4414 echo "local state directory queried at runtime"
4415 echo "Windows SDK $win_sdk"
4417 echo "Source path $source_path"
4418 echo "C compiler $cc"
4419 echo "Host C compiler $host_cc"
4420 echo "C++ compiler $cxx"
4421 echo "Objective-C compiler $objcc"
4422 echo "ARFLAGS $ARFLAGS"
4423 echo "CFLAGS $CFLAGS"
4424 echo "QEMU_CFLAGS $QEMU_CFLAGS"
4425 echo "LDFLAGS $LDFLAGS"
4426 echo "make $make"
4427 echo "install $install"
4428 echo "python $python"
4429 if test "$slirp" = "yes" ; then
4430 echo "smbd $smbd"
4432 echo "module support $modules"
4433 echo "host CPU $cpu"
4434 echo "host big endian $bigendian"
4435 echo "target list $target_list"
4436 echo "tcg debug enabled $debug_tcg"
4437 echo "gprof enabled $gprof"
4438 echo "sparse enabled $sparse"
4439 echo "strip binaries $strip_opt"
4440 echo "profiler $profiler"
4441 echo "static build $static"
4442 if test "$darwin" = "yes" ; then
4443 echo "Cocoa support $cocoa"
4445 echo "pixman $pixman"
4446 echo "SDL support $sdl"
4447 echo "GTK support $gtk"
4448 echo "VTE support $vte"
4449 echo "curses support $curses"
4450 echo "curl support $curl"
4451 echo "mingw32 support $mingw32"
4452 echo "Audio drivers $audio_drv_list"
4453 echo "Block whitelist (rw) $block_drv_rw_whitelist"
4454 echo "Block whitelist (ro) $block_drv_ro_whitelist"
4455 echo "VirtFS support $virtfs"
4456 echo "VNC support $vnc"
4457 if test "$vnc" = "yes" ; then
4458 echo "VNC TLS support $vnc_tls"
4459 echo "VNC SASL support $vnc_sasl"
4460 echo "VNC JPEG support $vnc_jpeg"
4461 echo "VNC PNG support $vnc_png"
4462 echo "VNC WS support $vnc_ws"
4464 if test -n "$sparc_cpu"; then
4465 echo "Target Sparc Arch $sparc_cpu"
4467 echo "xen support $xen"
4468 if test "$xen" = "yes" ; then
4469 echo "xen ctrl version $xen_ctrl_version"
4471 echo "brlapi support $brlapi"
4472 echo "bluez support $bluez"
4473 echo "Documentation $docs"
4474 echo "GUEST_BASE $guest_base"
4475 echo "PIE $pie"
4476 echo "vde support $vde"
4477 echo "netmap support $netmap"
4478 echo "Linux AIO support $linux_aio"
4479 echo "ATTR/XATTR support $attr"
4480 echo "Install blobs $blobs"
4481 echo "KVM support $kvm"
4482 echo "RDMA support $rdma"
4483 echo "TCG interpreter $tcg_interpreter"
4484 echo "fdt support $fdt"
4485 echo "preadv support $preadv"
4486 echo "fdatasync $fdatasync"
4487 echo "madvise $madvise"
4488 echo "posix_madvise $posix_madvise"
4489 echo "sigev_thread_id $sigev_thread_id"
4490 echo "uuid support $uuid"
4491 echo "libcap-ng support $cap_ng"
4492 echo "vhost-net support $vhost_net"
4493 echo "vhost-scsi support $vhost_scsi"
4494 echo "Trace backends $trace_backends"
4495 if test "$trace_backend" = "simple"; then
4496 echo "Trace output file $trace_file-<pid>"
4498 if test "$spice" = "yes"; then
4499 echo "spice support $spice ($spice_protocol_version/$spice_server_version)"
4500 else
4501 echo "spice support $spice"
4503 echo "rbd support $rbd"
4504 echo "xfsctl support $xfs"
4505 echo "nss used $smartcard_nss"
4506 echo "libusb $libusb"
4507 echo "usb net redir $usb_redir"
4508 echo "OpenGL support $opengl"
4509 echo "libiscsi support $libiscsi"
4510 echo "libnfs support $libnfs"
4511 echo "build guest agent $guest_agent"
4512 echo "QGA VSS support $guest_agent_with_vss"
4513 echo "QGA w32 disk info $guest_agent_ntddscsi"
4514 echo "seccomp support $seccomp"
4515 echo "coroutine backend $coroutine"
4516 echo "coroutine pool $coroutine_pool"
4517 echo "GlusterFS support $glusterfs"
4518 echo "Archipelago support $archipelago"
4519 echo "gcov $gcov_tool"
4520 echo "gcov enabled $gcov"
4521 echo "TPM support $tpm"
4522 echo "libssh2 support $libssh2"
4523 echo "TPM passthrough $tpm_passthrough"
4524 echo "QOM debugging $qom_cast_debug"
4525 echo "vhdx $vhdx"
4526 echo "Quorum $quorum"
4527 echo "lzo support $lzo"
4528 echo "snappy support $snappy"
4529 echo "bzip2 support $bzip2"
4530 echo "NUMA host support $numa"
4531 echo "tcmalloc support $tcmalloc"
4533 if test "$sdl_too_old" = "yes"; then
4534 echo "-> Your SDL version is too old - please upgrade to have SDL support"
4537 config_host_mak="config-host.mak"
4539 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4541 echo "# Automatically generated by configure - do not modify" > $config_host_mak
4542 echo >> $config_host_mak
4544 echo all: >> $config_host_mak
4545 echo "prefix=$prefix" >> $config_host_mak
4546 echo "bindir=$bindir" >> $config_host_mak
4547 echo "libdir=$libdir" >> $config_host_mak
4548 echo "libexecdir=$libexecdir" >> $config_host_mak
4549 echo "includedir=$includedir" >> $config_host_mak
4550 echo "mandir=$mandir" >> $config_host_mak
4551 echo "sysconfdir=$sysconfdir" >> $config_host_mak
4552 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4553 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4554 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4555 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4556 if test "$mingw32" = "no" ; then
4557 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4559 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4560 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4561 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4562 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4563 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4565 echo "ARCH=$ARCH" >> $config_host_mak
4567 if test "$debug_tcg" = "yes" ; then
4568 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4570 if test "$strip_opt" = "yes" ; then
4571 echo "STRIP=${strip}" >> $config_host_mak
4573 if test "$bigendian" = "yes" ; then
4574 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4576 if test "$mingw32" = "yes" ; then
4577 echo "CONFIG_WIN32=y" >> $config_host_mak
4578 rc_version=`cat $source_path/VERSION`
4579 version_major=${rc_version%%.*}
4580 rc_version=${rc_version#*.}
4581 version_minor=${rc_version%%.*}
4582 rc_version=${rc_version#*.}
4583 version_subminor=${rc_version%%.*}
4584 version_micro=0
4585 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4586 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4587 if test "$guest_agent_with_vss" = "yes" ; then
4588 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4589 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4591 if test "$guest_agent_ntddscsi" = "yes" ; then
4592 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
4594 if test "$guest_agent_msi" != "no"; then
4595 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
4596 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4597 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
4598 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
4599 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4600 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4601 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4603 else
4604 echo "CONFIG_POSIX=y" >> $config_host_mak
4607 if test "$linux" = "yes" ; then
4608 echo "CONFIG_LINUX=y" >> $config_host_mak
4611 if test "$darwin" = "yes" ; then
4612 echo "CONFIG_DARWIN=y" >> $config_host_mak
4615 if test "$aix" = "yes" ; then
4616 echo "CONFIG_AIX=y" >> $config_host_mak
4619 if test "$solaris" = "yes" ; then
4620 echo "CONFIG_SOLARIS=y" >> $config_host_mak
4621 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
4622 if test "$needs_libsunmath" = "yes" ; then
4623 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
4626 if test "$haiku" = "yes" ; then
4627 echo "CONFIG_HAIKU=y" >> $config_host_mak
4629 if test "$static" = "yes" ; then
4630 echo "CONFIG_STATIC=y" >> $config_host_mak
4632 if test "$profiler" = "yes" ; then
4633 echo "CONFIG_PROFILER=y" >> $config_host_mak
4635 if test "$slirp" = "yes" ; then
4636 echo "CONFIG_SLIRP=y" >> $config_host_mak
4637 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4639 if test "$vde" = "yes" ; then
4640 echo "CONFIG_VDE=y" >> $config_host_mak
4642 if test "$netmap" = "yes" ; then
4643 echo "CONFIG_NETMAP=y" >> $config_host_mak
4645 if test "$l2tpv3" = "yes" ; then
4646 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4648 if test "$cap_ng" = "yes" ; then
4649 echo "CONFIG_LIBCAP=y" >> $config_host_mak
4651 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4652 for drv in $audio_drv_list; do
4653 def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4654 echo "$def=y" >> $config_host_mak
4655 done
4656 if test "$audio_pt_int" = "yes" ; then
4657 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4659 if test "$audio_win_int" = "yes" ; then
4660 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4662 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4663 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4664 if test "$vnc" = "yes" ; then
4665 echo "CONFIG_VNC=y" >> $config_host_mak
4667 if test "$vnc_tls" = "yes" ; then
4668 echo "CONFIG_VNC_TLS=y" >> $config_host_mak
4670 if test "$vnc_sasl" = "yes" ; then
4671 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4673 if test "$vnc_jpeg" = "yes" ; then
4674 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
4676 if test "$vnc_png" = "yes" ; then
4677 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
4679 if test "$vnc_ws" = "yes" ; then
4680 echo "CONFIG_VNC_WS=y" >> $config_host_mak
4681 echo "VNC_WS_CFLAGS=$vnc_ws_cflags" >> $config_host_mak
4683 if test "$fnmatch" = "yes" ; then
4684 echo "CONFIG_FNMATCH=y" >> $config_host_mak
4686 if test "$uuid" = "yes" ; then
4687 echo "CONFIG_UUID=y" >> $config_host_mak
4689 if test "$xfs" = "yes" ; then
4690 echo "CONFIG_XFS=y" >> $config_host_mak
4692 qemu_version=`head $source_path/VERSION`
4693 echo "VERSION=$qemu_version" >>$config_host_mak
4694 echo "PKGVERSION=$pkgversion" >>$config_host_mak
4695 echo "SRC_PATH=$source_path" >> $config_host_mak
4696 echo "TARGET_DIRS=$target_list" >> $config_host_mak
4697 if [ "$docs" = "yes" ] ; then
4698 echo "BUILD_DOCS=yes" >> $config_host_mak
4700 if test "$modules" = "yes"; then
4701 # $shacmd can generate a hash started with digit, which the compiler doesn't
4702 # like as an symbol. So prefix it with an underscore
4703 echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
4704 echo "CONFIG_MODULES=y" >> $config_host_mak
4706 if test "$sdl" = "yes" ; then
4707 echo "CONFIG_SDL=y" >> $config_host_mak
4708 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
4709 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
4711 if test "$cocoa" = "yes" ; then
4712 echo "CONFIG_COCOA=y" >> $config_host_mak
4714 if test "$curses" = "yes" ; then
4715 echo "CONFIG_CURSES=y" >> $config_host_mak
4717 if test "$utimens" = "yes" ; then
4718 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
4720 if test "$pipe2" = "yes" ; then
4721 echo "CONFIG_PIPE2=y" >> $config_host_mak
4723 if test "$accept4" = "yes" ; then
4724 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
4726 if test "$splice" = "yes" ; then
4727 echo "CONFIG_SPLICE=y" >> $config_host_mak
4729 if test "$eventfd" = "yes" ; then
4730 echo "CONFIG_EVENTFD=y" >> $config_host_mak
4732 if test "$fallocate" = "yes" ; then
4733 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
4735 if test "$fallocate_punch_hole" = "yes" ; then
4736 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
4738 if test "$fallocate_zero_range" = "yes" ; then
4739 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
4741 if test "$posix_fallocate" = "yes" ; then
4742 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
4744 if test "$sync_file_range" = "yes" ; then
4745 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
4747 if test "$fiemap" = "yes" ; then
4748 echo "CONFIG_FIEMAP=y" >> $config_host_mak
4750 if test "$dup3" = "yes" ; then
4751 echo "CONFIG_DUP3=y" >> $config_host_mak
4753 if test "$ppoll" = "yes" ; then
4754 echo "CONFIG_PPOLL=y" >> $config_host_mak
4756 if test "$prctl_pr_set_timerslack" = "yes" ; then
4757 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
4759 if test "$epoll" = "yes" ; then
4760 echo "CONFIG_EPOLL=y" >> $config_host_mak
4762 if test "$epoll_create1" = "yes" ; then
4763 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
4765 if test "$epoll_pwait" = "yes" ; then
4766 echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
4768 if test "$sendfile" = "yes" ; then
4769 echo "CONFIG_SENDFILE=y" >> $config_host_mak
4771 if test "$timerfd" = "yes" ; then
4772 echo "CONFIG_TIMERFD=y" >> $config_host_mak
4774 if test "$setns" = "yes" ; then
4775 echo "CONFIG_SETNS=y" >> $config_host_mak
4777 if test "$inotify" = "yes" ; then
4778 echo "CONFIG_INOTIFY=y" >> $config_host_mak
4780 if test "$inotify1" = "yes" ; then
4781 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
4783 if test "$byteswap_h" = "yes" ; then
4784 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
4786 if test "$bswap_h" = "yes" ; then
4787 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
4789 if test "$curl" = "yes" ; then
4790 echo "CONFIG_CURL=m" >> $config_host_mak
4791 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
4792 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
4794 if test "$brlapi" = "yes" ; then
4795 echo "CONFIG_BRLAPI=y" >> $config_host_mak
4797 if test "$bluez" = "yes" ; then
4798 echo "CONFIG_BLUEZ=y" >> $config_host_mak
4799 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
4801 if test "$glib_subprocess" = "yes" ; then
4802 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
4804 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4805 if test "$gtk" = "yes" ; then
4806 echo "CONFIG_GTK=y" >> $config_host_mak
4807 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
4808 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
4810 if test "$vte" = "yes" ; then
4811 echo "CONFIG_VTE=y" >> $config_host_mak
4812 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
4814 if test "$xen" = "yes" ; then
4815 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4816 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4818 if test "$linux_aio" = "yes" ; then
4819 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4821 if test "$attr" = "yes" ; then
4822 echo "CONFIG_ATTR=y" >> $config_host_mak
4824 if test "$libattr" = "yes" ; then
4825 echo "CONFIG_LIBATTR=y" >> $config_host_mak
4827 if test "$virtfs" = "yes" ; then
4828 echo "CONFIG_VIRTFS=y" >> $config_host_mak
4830 if test "$vhost_scsi" = "yes" ; then
4831 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4833 if test "$vhost_net" = "yes" ; then
4834 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
4836 if test "$blobs" = "yes" ; then
4837 echo "INSTALL_BLOBS=yes" >> $config_host_mak
4839 if test "$iovec" = "yes" ; then
4840 echo "CONFIG_IOVEC=y" >> $config_host_mak
4842 if test "$preadv" = "yes" ; then
4843 echo "CONFIG_PREADV=y" >> $config_host_mak
4845 if test "$fdt" = "yes" ; then
4846 echo "CONFIG_FDT=y" >> $config_host_mak
4848 if test "$signalfd" = "yes" ; then
4849 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
4851 if test "$tcg_interpreter" = "yes" ; then
4852 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4854 if test "$fdatasync" = "yes" ; then
4855 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
4857 if test "$madvise" = "yes" ; then
4858 echo "CONFIG_MADVISE=y" >> $config_host_mak
4860 if test "$posix_madvise" = "yes" ; then
4861 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
4863 if test "$sigev_thread_id" = "yes" ; then
4864 echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
4867 if test "$spice" = "yes" ; then
4868 echo "CONFIG_SPICE=y" >> $config_host_mak
4871 if test "$smartcard_nss" = "yes" ; then
4872 echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
4873 echo "NSS_LIBS=$nss_libs" >> $config_host_mak
4874 echo "NSS_CFLAGS=$nss_cflags" >> $config_host_mak
4877 if test "$libusb" = "yes" ; then
4878 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
4881 if test "$usb_redir" = "yes" ; then
4882 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
4885 if test "$opengl" = "yes" ; then
4886 echo "CONFIG_OPENGL=y" >> $config_host_mak
4887 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
4888 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
4891 if test "$lzo" = "yes" ; then
4892 echo "CONFIG_LZO=y" >> $config_host_mak
4895 if test "$snappy" = "yes" ; then
4896 echo "CONFIG_SNAPPY=y" >> $config_host_mak
4899 if test "$bzip2" = "yes" ; then
4900 echo "CONFIG_BZIP2=y" >> $config_host_mak
4901 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
4904 if test "$libiscsi" = "yes" ; then
4905 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
4906 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
4907 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
4910 if test "$libnfs" = "yes" ; then
4911 echo "CONFIG_LIBNFS=y" >> $config_host_mak
4914 if test "$seccomp" = "yes"; then
4915 echo "CONFIG_SECCOMP=y" >> $config_host_mak
4918 # XXX: suppress that
4919 if [ "$bsd" = "yes" ] ; then
4920 echo "CONFIG_BSD=y" >> $config_host_mak
4923 if test "$zero_malloc" = "yes" ; then
4924 echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
4926 if test "$qom_cast_debug" = "yes" ; then
4927 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
4929 if test "$rbd" = "yes" ; then
4930 echo "CONFIG_RBD=m" >> $config_host_mak
4931 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
4932 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
4935 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
4936 if test "$coroutine_pool" = "yes" ; then
4937 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
4938 else
4939 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
4942 if test "$open_by_handle_at" = "yes" ; then
4943 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
4946 if test "$linux_magic_h" = "yes" ; then
4947 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
4950 if test "$pragma_diagnostic_available" = "yes" ; then
4951 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
4954 if test "$valgrind_h" = "yes" ; then
4955 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
4958 if test "$has_environ" = "yes" ; then
4959 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
4962 if test "$cpuid_h" = "yes" ; then
4963 echo "CONFIG_CPUID_H=y" >> $config_host_mak
4966 if test "$int128" = "yes" ; then
4967 echo "CONFIG_INT128=y" >> $config_host_mak
4970 if test "$getauxval" = "yes" ; then
4971 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
4974 if test "$glusterfs" = "yes" ; then
4975 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
4976 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
4977 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
4980 if test "$glusterfs_discard" = "yes" ; then
4981 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
4984 if test "$glusterfs_zerofill" = "yes" ; then
4985 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
4988 if test "$archipelago" = "yes" ; then
4989 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
4990 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
4993 if test "$libssh2" = "yes" ; then
4994 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
4995 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
4996 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
4999 if test "$quorum" = "yes" ; then
5000 echo "CONFIG_QUORUM=y" >> $config_host_mak
5003 if test "$vhdx" = "yes" ; then
5004 echo "CONFIG_VHDX=y" >> $config_host_mak
5007 # USB host support
5008 if test "$libusb" = "yes"; then
5009 echo "HOST_USB=libusb legacy" >> $config_host_mak
5010 else
5011 echo "HOST_USB=stub" >> $config_host_mak
5014 # TPM passthrough support?
5015 if test "$tpm" = "yes"; then
5016 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5017 if test "$tpm_passthrough" = "yes"; then
5018 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5022 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5023 if have_backend "nop"; then
5024 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5026 if have_backend "simple"; then
5027 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5028 # Set the appropriate trace file.
5029 trace_file="\"$trace_file-\" FMT_pid"
5031 if have_backend "stderr"; then
5032 echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
5034 if have_backend "ust"; then
5035 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5037 if have_backend "dtrace"; then
5038 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5039 if test "$trace_backend_stap" = "yes" ; then
5040 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5043 if have_backend "ftrace"; then
5044 if test "$linux" = "yes" ; then
5045 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5046 else
5047 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5050 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5052 if test "$rdma" = "yes" ; then
5053 echo "CONFIG_RDMA=y" >> $config_host_mak
5056 # Hold two types of flag:
5057 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5058 # a thread we have a handle to
5059 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5060 # platform
5061 if test "$pthread_setname_np" = "yes" ; then
5062 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5063 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5066 if test "$tcg_interpreter" = "yes"; then
5067 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5068 elif test "$ARCH" = "sparc64" ; then
5069 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5070 elif test "$ARCH" = "s390x" ; then
5071 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5072 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5073 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5074 elif test "$ARCH" = "ppc64" ; then
5075 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5076 else
5077 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5079 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5081 echo "TOOLS=$tools" >> $config_host_mak
5082 echo "ROMS=$roms" >> $config_host_mak
5083 echo "MAKE=$make" >> $config_host_mak
5084 echo "INSTALL=$install" >> $config_host_mak
5085 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5086 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5087 if test -n "$libtool"; then
5088 echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
5089 echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
5090 else
5091 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5092 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5094 echo "PYTHON=$python" >> $config_host_mak
5095 echo "CC=$cc" >> $config_host_mak
5096 if $iasl -h > /dev/null 2>&1; then
5097 echo "IASL=$iasl" >> $config_host_mak
5099 echo "CC_I386=$cc_i386" >> $config_host_mak
5100 echo "HOST_CC=$host_cc" >> $config_host_mak
5101 echo "CXX=$cxx" >> $config_host_mak
5102 echo "OBJCC=$objcc" >> $config_host_mak
5103 echo "AR=$ar" >> $config_host_mak
5104 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5105 echo "AS=$as" >> $config_host_mak
5106 echo "CPP=$cpp" >> $config_host_mak
5107 echo "OBJCOPY=$objcopy" >> $config_host_mak
5108 echo "LD=$ld" >> $config_host_mak
5109 echo "NM=$nm" >> $config_host_mak
5110 echo "WINDRES=$windres" >> $config_host_mak
5111 echo "LIBTOOL=$libtool" >> $config_host_mak
5112 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5113 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5114 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5115 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5116 if test "$sparse" = "yes" ; then
5117 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
5118 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
5119 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
5120 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5121 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5123 if test "$cross_prefix" != ""; then
5124 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5125 else
5126 echo "AUTOCONF_HOST := " >> $config_host_mak
5128 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5129 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5130 echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
5131 echo "LIBS+=$LIBS" >> $config_host_mak
5132 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5133 echo "EXESUF=$EXESUF" >> $config_host_mak
5134 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5135 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5136 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5137 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5138 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5139 if test "$gcov" = "yes" ; then
5140 echo "CONFIG_GCOV=y" >> $config_host_mak
5141 echo "GCOV=$gcov_tool" >> $config_host_mak
5144 # use included Linux headers
5145 if test "$linux" = "yes" ; then
5146 mkdir -p linux-headers
5147 case "$cpu" in
5148 i386|x86_64|x32)
5149 linux_arch=x86
5151 ppcemb|ppc|ppc64)
5152 linux_arch=powerpc
5154 s390x)
5155 linux_arch=s390
5157 aarch64)
5158 linux_arch=arm64
5160 mips64)
5161 linux_arch=mips
5164 # For most CPUs the kernel architecture name and QEMU CPU name match.
5165 linux_arch="$cpu"
5167 esac
5168 # For non-KVM architectures we will not have asm headers
5169 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5170 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5174 for target in $target_list; do
5175 target_dir="$target"
5176 config_target_mak=$target_dir/config-target.mak
5177 target_name=`echo $target | cut -d '-' -f 1`
5178 target_bigendian="no"
5180 case "$target_name" in
5181 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5182 target_bigendian=yes
5184 esac
5185 target_softmmu="no"
5186 target_user_only="no"
5187 target_linux_user="no"
5188 target_bsd_user="no"
5189 case "$target" in
5190 ${target_name}-softmmu)
5191 target_softmmu="yes"
5193 ${target_name}-linux-user)
5194 if test "$linux" != "yes" ; then
5195 error_exit "Target '$target' is only available on a Linux host"
5197 target_user_only="yes"
5198 target_linux_user="yes"
5200 ${target_name}-bsd-user)
5201 if test "$bsd" != "yes" ; then
5202 error_exit "Target '$target' is only available on a BSD host"
5204 target_user_only="yes"
5205 target_bsd_user="yes"
5208 error_exit "Target '$target' not recognised"
5209 exit 1
5211 esac
5213 mkdir -p $target_dir
5214 echo "# Automatically generated by configure - do not modify" > $config_target_mak
5216 bflt="no"
5217 interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
5218 gdb_xml_files=""
5220 TARGET_ARCH="$target_name"
5221 TARGET_BASE_ARCH=""
5222 TARGET_ABI_DIR=""
5224 case "$target_name" in
5225 i386)
5227 x86_64)
5228 TARGET_BASE_ARCH=i386
5230 alpha)
5232 arm|armeb)
5233 TARGET_ARCH=arm
5234 bflt="yes"
5235 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5237 aarch64)
5238 TARGET_BASE_ARCH=arm
5239 bflt="yes"
5240 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5242 cris)
5244 lm32)
5246 m68k)
5247 bflt="yes"
5248 gdb_xml_files="cf-core.xml cf-fp.xml"
5250 microblaze|microblazeel)
5251 TARGET_ARCH=microblaze
5252 bflt="yes"
5254 mips|mipsel)
5255 TARGET_ARCH=mips
5256 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5258 mipsn32|mipsn32el)
5259 TARGET_ARCH=mips64
5260 TARGET_BASE_ARCH=mips
5261 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5262 echo "TARGET_ABI32=y" >> $config_target_mak
5264 mips64|mips64el)
5265 TARGET_ARCH=mips64
5266 TARGET_BASE_ARCH=mips
5267 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5269 moxie)
5271 or32)
5272 TARGET_ARCH=openrisc
5273 TARGET_BASE_ARCH=openrisc
5275 ppc)
5276 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5278 ppcemb)
5279 TARGET_BASE_ARCH=ppc
5280 TARGET_ABI_DIR=ppc
5281 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5283 ppc64)
5284 TARGET_BASE_ARCH=ppc
5285 TARGET_ABI_DIR=ppc
5286 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5288 ppc64le)
5289 TARGET_ARCH=ppc64
5290 TARGET_BASE_ARCH=ppc
5291 TARGET_ABI_DIR=ppc
5292 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5294 ppc64abi32)
5295 TARGET_ARCH=ppc64
5296 TARGET_BASE_ARCH=ppc
5297 TARGET_ABI_DIR=ppc
5298 echo "TARGET_ABI32=y" >> $config_target_mak
5299 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5301 sh4|sh4eb)
5302 TARGET_ARCH=sh4
5303 bflt="yes"
5305 sparc)
5307 sparc64)
5308 TARGET_BASE_ARCH=sparc
5310 sparc32plus)
5311 TARGET_ARCH=sparc64
5312 TARGET_BASE_ARCH=sparc
5313 TARGET_ABI_DIR=sparc
5314 echo "TARGET_ABI32=y" >> $config_target_mak
5316 s390x)
5317 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml"
5319 tricore)
5321 unicore32)
5323 xtensa|xtensaeb)
5324 TARGET_ARCH=xtensa
5327 error_exit "Unsupported target CPU"
5329 esac
5330 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5331 if [ "$TARGET_BASE_ARCH" = "" ]; then
5332 TARGET_BASE_ARCH=$TARGET_ARCH
5335 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5337 upper() {
5338 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5341 target_arch_name="`upper $TARGET_ARCH`"
5342 echo "TARGET_$target_arch_name=y" >> $config_target_mak
5343 echo "TARGET_NAME=$target_name" >> $config_target_mak
5344 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5345 if [ "$TARGET_ABI_DIR" = "" ]; then
5346 TARGET_ABI_DIR=$TARGET_ARCH
5348 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5349 if [ "$HOST_VARIANT_DIR" != "" ]; then
5350 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5352 case "$target_name" in
5353 i386|x86_64)
5354 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5355 echo "CONFIG_XEN=y" >> $config_target_mak
5356 if test "$xen_pci_passthrough" = yes; then
5357 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5362 esac
5363 case "$target_name" in
5364 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5365 # Make sure the target and host cpus are compatible
5366 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5367 \( "$target_name" = "$cpu" -o \
5368 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5369 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
5370 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
5371 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5372 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5373 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
5374 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
5375 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
5376 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
5377 echo "CONFIG_KVM=y" >> $config_target_mak
5378 if test "$vhost_net" = "yes" ; then
5379 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5382 esac
5383 if test "$target_bigendian" = "yes" ; then
5384 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5386 if test "$target_softmmu" = "yes" ; then
5387 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5389 if test "$target_user_only" = "yes" ; then
5390 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5391 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5393 if test "$target_linux_user" = "yes" ; then
5394 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5396 list=""
5397 if test ! -z "$gdb_xml_files" ; then
5398 for x in $gdb_xml_files; do
5399 list="$list $source_path/gdb-xml/$x"
5400 done
5401 echo "TARGET_XML_FILES=$list" >> $config_target_mak
5404 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5405 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5407 if test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then
5408 echo "CONFIG_USE_GUEST_BASE=y" >> $config_target_mak
5410 if test "$target_bsd_user" = "yes" ; then
5411 echo "CONFIG_BSD_USER=y" >> $config_target_mak
5414 # generate QEMU_CFLAGS/LDFLAGS for targets
5416 cflags=""
5417 ldflags=""
5419 for i in $ARCH $TARGET_BASE_ARCH ; do
5420 case "$i" in
5421 alpha)
5422 echo "CONFIG_ALPHA_DIS=y" >> $config_target_mak
5423 echo "CONFIG_ALPHA_DIS=y" >> config-all-disas.mak
5425 aarch64)
5426 if test -n "${cxx}"; then
5427 echo "CONFIG_ARM_A64_DIS=y" >> $config_target_mak
5428 echo "CONFIG_ARM_A64_DIS=y" >> config-all-disas.mak
5431 arm)
5432 echo "CONFIG_ARM_DIS=y" >> $config_target_mak
5433 echo "CONFIG_ARM_DIS=y" >> config-all-disas.mak
5434 if test -n "${cxx}"; then
5435 echo "CONFIG_ARM_A64_DIS=y" >> $config_target_mak
5436 echo "CONFIG_ARM_A64_DIS=y" >> config-all-disas.mak
5439 cris)
5440 echo "CONFIG_CRIS_DIS=y" >> $config_target_mak
5441 echo "CONFIG_CRIS_DIS=y" >> config-all-disas.mak
5443 hppa)
5444 echo "CONFIG_HPPA_DIS=y" >> $config_target_mak
5445 echo "CONFIG_HPPA_DIS=y" >> config-all-disas.mak
5447 i386|x86_64|x32)
5448 echo "CONFIG_I386_DIS=y" >> $config_target_mak
5449 echo "CONFIG_I386_DIS=y" >> config-all-disas.mak
5451 ia64*)
5452 echo "CONFIG_IA64_DIS=y" >> $config_target_mak
5453 echo "CONFIG_IA64_DIS=y" >> config-all-disas.mak
5455 lm32)
5456 echo "CONFIG_LM32_DIS=y" >> $config_target_mak
5457 echo "CONFIG_LM32_DIS=y" >> config-all-disas.mak
5459 m68k)
5460 echo "CONFIG_M68K_DIS=y" >> $config_target_mak
5461 echo "CONFIG_M68K_DIS=y" >> config-all-disas.mak
5463 microblaze*)
5464 echo "CONFIG_MICROBLAZE_DIS=y" >> $config_target_mak
5465 echo "CONFIG_MICROBLAZE_DIS=y" >> config-all-disas.mak
5467 mips*)
5468 echo "CONFIG_MIPS_DIS=y" >> $config_target_mak
5469 echo "CONFIG_MIPS_DIS=y" >> config-all-disas.mak
5471 moxie*)
5472 echo "CONFIG_MOXIE_DIS=y" >> $config_target_mak
5473 echo "CONFIG_MOXIE_DIS=y" >> config-all-disas.mak
5475 or32)
5476 echo "CONFIG_OPENRISC_DIS=y" >> $config_target_mak
5477 echo "CONFIG_OPENRISC_DIS=y" >> config-all-disas.mak
5479 ppc*)
5480 echo "CONFIG_PPC_DIS=y" >> $config_target_mak
5481 echo "CONFIG_PPC_DIS=y" >> config-all-disas.mak
5483 s390*)
5484 echo "CONFIG_S390_DIS=y" >> $config_target_mak
5485 echo "CONFIG_S390_DIS=y" >> config-all-disas.mak
5487 sh4)
5488 echo "CONFIG_SH4_DIS=y" >> $config_target_mak
5489 echo "CONFIG_SH4_DIS=y" >> config-all-disas.mak
5491 sparc*)
5492 echo "CONFIG_SPARC_DIS=y" >> $config_target_mak
5493 echo "CONFIG_SPARC_DIS=y" >> config-all-disas.mak
5495 xtensa*)
5496 echo "CONFIG_XTENSA_DIS=y" >> $config_target_mak
5497 echo "CONFIG_XTENSA_DIS=y" >> config-all-disas.mak
5499 esac
5500 done
5501 if test "$tcg_interpreter" = "yes" ; then
5502 echo "CONFIG_TCI_DIS=y" >> $config_target_mak
5503 echo "CONFIG_TCI_DIS=y" >> config-all-disas.mak
5506 case "$ARCH" in
5507 alpha)
5508 # Ensure there's only a single GP
5509 cflags="-msmall-data $cflags"
5511 esac
5513 if test "$gprof" = "yes" ; then
5514 echo "TARGET_GPROF=yes" >> $config_target_mak
5515 if test "$target_linux_user" = "yes" ; then
5516 cflags="-p $cflags"
5517 ldflags="-p $ldflags"
5519 if test "$target_softmmu" = "yes" ; then
5520 ldflags="-p $ldflags"
5521 echo "GPROF_CFLAGS=-p" >> $config_target_mak
5525 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5526 ldflags="$ldflags $textseg_ldflags"
5529 echo "LDFLAGS+=$ldflags" >> $config_target_mak
5530 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5532 done # for target in $targets
5534 if [ "$pixman" = "internal" ]; then
5535 echo "config-host.h: subdir-pixman" >> $config_host_mak
5538 if test "$rdma" = "yes" ; then
5539 echo "CONFIG_RDMA=y" >> $config_host_mak
5542 if [ "$dtc_internal" = "yes" ]; then
5543 echo "config-host.h: subdir-dtc" >> $config_host_mak
5546 if test "$numa" = "yes"; then
5547 echo "CONFIG_NUMA=y" >> $config_host_mak
5550 if test "$ccache_cpp2" = "yes"; then
5551 echo "export CCACHE_CPP2=y" >> $config_host_mak
5554 # build tree in object directory in case the source is not in the current directory
5555 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5556 DIRS="$DIRS fsdev"
5557 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
5558 DIRS="$DIRS roms/seabios roms/vgabios"
5559 DIRS="$DIRS qapi-generated"
5560 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5561 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5562 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
5563 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
5564 FILES="$FILES pc-bios/spapr-rtas/Makefile"
5565 FILES="$FILES pc-bios/s390-ccw/Makefile"
5566 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5567 FILES="$FILES pc-bios/qemu-icon.bmp"
5568 for bios_file in \
5569 $source_path/pc-bios/*.bin \
5570 $source_path/pc-bios/*.aml \
5571 $source_path/pc-bios/*.rom \
5572 $source_path/pc-bios/*.dtb \
5573 $source_path/pc-bios/*.img \
5574 $source_path/pc-bios/openbios-* \
5575 $source_path/pc-bios/u-boot.* \
5576 $source_path/pc-bios/palcode-*
5578 FILES="$FILES pc-bios/`basename $bios_file`"
5579 done
5580 for test_file in `find $source_path/tests/acpi-test-data -type f`
5582 FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5583 done
5584 mkdir -p $DIRS
5585 for f in $FILES ; do
5586 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5587 symlink "$source_path/$f" "$f"
5589 done
5591 # temporary config to build submodules
5592 for rom in seabios vgabios ; do
5593 config_mak=roms/$rom/config.mak
5594 echo "# Automatically generated by configure - do not modify" > $config_mak
5595 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5596 echo "AS=$as" >> $config_mak
5597 echo "CC=$cc" >> $config_mak
5598 echo "BCC=bcc" >> $config_mak
5599 echo "CPP=$cpp" >> $config_mak
5600 echo "OBJCOPY=objcopy" >> $config_mak
5601 echo "IASL=$iasl" >> $config_mak
5602 echo "LD=$ld" >> $config_mak
5603 done
5605 # set up qemu-iotests in this build directory
5606 iotests_common_env="tests/qemu-iotests/common.env"
5607 iotests_check="tests/qemu-iotests/check"
5609 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5610 echo >> "$iotests_common_env"
5611 echo "export PYTHON='$python'" >> "$iotests_common_env"
5613 if [ ! -e "$iotests_check" ]; then
5614 symlink "$source_path/$iotests_check" "$iotests_check"
5617 # Save the configure command line for later reuse.
5618 cat <<EOD >config.status
5619 #!/bin/sh
5620 # Generated by configure.
5621 # Run this file to recreate the current configuration.
5622 # Compiler output produced by configure, useful for debugging
5623 # configure, is in config.log if it exists.
5625 printf "exec" >>config.status
5626 printf " '%s'" "$0" "$@" >>config.status
5627 echo >>config.status
5628 chmod +x config.status
5630 rm -r "$TMPDIR1"