crypto: introduce new module for computing hash digests
[qemu/ar7.git] / configure
blob61a749edf3a93ebce401e555d06329a9253ca7f5
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_msi=""
319 vss_win32_sdk=""
320 win_sdk="no"
321 want_tools="yes"
322 libiscsi=""
323 libnfs=""
324 coroutine=""
325 coroutine_pool=""
326 seccomp=""
327 glusterfs=""
328 glusterfs_discard="no"
329 glusterfs_zerofill="no"
330 archipelago="no"
331 gtk=""
332 gtkabi=""
333 gnutls=""
334 gnutls_hash=""
335 vte=""
336 tpm="yes"
337 libssh2=""
338 vhdx=""
339 quorum=""
340 numa=""
341 tcmalloc="no"
343 # parse CC options first
344 for opt do
345 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
346 case "$opt" in
347 --cross-prefix=*) cross_prefix="$optarg"
349 --cc=*) CC="$optarg"
351 --cxx=*) CXX="$optarg"
353 --source-path=*) source_path="$optarg"
355 --cpu=*) cpu="$optarg"
357 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
358 EXTRA_CFLAGS="$optarg"
360 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
361 EXTRA_LDFLAGS="$optarg"
363 --enable-debug-info) debug_info="yes"
365 --disable-debug-info) debug_info="no"
367 esac
368 done
369 # OS specific
370 # Using uname is really, really broken. Once we have the right set of checks
371 # we can eliminate its usage altogether.
373 # Preferred compiler:
374 # ${CC} (if set)
375 # ${cross_prefix}gcc (if cross-prefix specified)
376 # system compiler
377 if test -z "${CC}${cross_prefix}"; then
378 cc="$host_cc"
379 else
380 cc="${CC-${cross_prefix}gcc}"
383 if test -z "${CXX}${cross_prefix}"; then
384 cxx="c++"
385 else
386 cxx="${CXX-${cross_prefix}g++}"
389 ar="${AR-${cross_prefix}ar}"
390 as="${AS-${cross_prefix}as}"
391 cpp="${CPP-$cc -E}"
392 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
393 ld="${LD-${cross_prefix}ld}"
394 libtool="${LIBTOOL-${cross_prefix}libtool}"
395 nm="${NM-${cross_prefix}nm}"
396 strip="${STRIP-${cross_prefix}strip}"
397 windres="${WINDRES-${cross_prefix}windres}"
398 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
399 query_pkg_config() {
400 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
402 pkg_config=query_pkg_config
403 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
404 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
406 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
407 ARFLAGS="${ARFLAGS-rv}"
409 # default flags for all hosts
410 QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
411 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
412 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
413 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
414 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
415 if test "$debug_info" = "yes"; then
416 CFLAGS="-g $CFLAGS"
417 LDFLAGS="-g $LDFLAGS"
420 # make source path absolute
421 source_path=`cd "$source_path"; pwd`
423 # running configure in the source tree?
424 # we know that's the case if configure is there.
425 if test -f "./configure"; then
426 pwd_is_source_path="y"
427 else
428 pwd_is_source_path="n"
431 check_define() {
432 cat > $TMPC <<EOF
433 #if !defined($1)
434 #error $1 not defined
435 #endif
436 int main(void) { return 0; }
438 compile_object
441 check_include() {
442 cat > $TMPC <<EOF
443 #include <$1>
444 int main(void) { return 0; }
446 compile_object
449 write_c_skeleton() {
450 cat > $TMPC <<EOF
451 int main(void) { return 0; }
455 if check_define __linux__ ; then
456 targetos="Linux"
457 elif check_define _WIN32 ; then
458 targetos='MINGW32'
459 elif check_define __OpenBSD__ ; then
460 targetos='OpenBSD'
461 elif check_define __sun__ ; then
462 targetos='SunOS'
463 elif check_define __HAIKU__ ; then
464 targetos='Haiku'
465 else
466 targetos=`uname -s`
469 # Some host OSes need non-standard checks for which CPU to use.
470 # Note that these checks are broken for cross-compilation: if you're
471 # cross-compiling to one of these OSes then you'll need to specify
472 # the correct CPU with the --cpu option.
473 case $targetos in
474 Darwin)
475 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
476 # run 64-bit userspace code.
477 # If the user didn't specify a CPU explicitly and the kernel says this is
478 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
479 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
480 cpu="x86_64"
483 SunOS)
484 # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
485 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
486 cpu="x86_64"
488 esac
490 if test ! -z "$cpu" ; then
491 # command line argument
493 elif check_define __i386__ ; then
494 cpu="i386"
495 elif check_define __x86_64__ ; then
496 if check_define __ILP32__ ; then
497 cpu="x32"
498 else
499 cpu="x86_64"
501 elif check_define __sparc__ ; then
502 if check_define __arch64__ ; then
503 cpu="sparc64"
504 else
505 cpu="sparc"
507 elif check_define _ARCH_PPC ; then
508 if check_define _ARCH_PPC64 ; then
509 cpu="ppc64"
510 else
511 cpu="ppc"
513 elif check_define __mips__ ; then
514 cpu="mips"
515 elif check_define __ia64__ ; then
516 cpu="ia64"
517 elif check_define __s390__ ; then
518 if check_define __s390x__ ; then
519 cpu="s390x"
520 else
521 cpu="s390"
523 elif check_define __arm__ ; then
524 cpu="arm"
525 elif check_define __aarch64__ ; then
526 cpu="aarch64"
527 elif check_define __hppa__ ; then
528 cpu="hppa"
529 else
530 cpu=`uname -m`
533 ARCH=
534 # Normalise host CPU name and set ARCH.
535 # Note that this case should only have supported host CPUs, not guests.
536 case "$cpu" in
537 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
538 cpu="$cpu"
540 i386|i486|i586|i686|i86pc|BePC)
541 cpu="i386"
543 x86_64|amd64)
544 cpu="x86_64"
546 armv*b|armv*l|arm)
547 cpu="arm"
549 aarch64)
550 cpu="aarch64"
552 mips*)
553 cpu="mips"
555 sparc|sun4[cdmuv])
556 cpu="sparc"
559 # This will result in either an error or falling back to TCI later
560 ARCH=unknown
562 esac
563 if test -z "$ARCH"; then
564 ARCH="$cpu"
567 # OS specific
569 # host *BSD for user mode
570 HOST_VARIANT_DIR=""
572 case $targetos in
573 CYGWIN*)
574 mingw32="yes"
575 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
576 audio_possible_drivers="sdl"
577 audio_drv_list="sdl"
579 MINGW32*)
580 mingw32="yes"
581 audio_possible_drivers="dsound sdl"
582 if check_include dsound.h; then
583 audio_drv_list="dsound"
584 else
585 audio_drv_list=""
588 GNU/kFreeBSD)
589 bsd="yes"
590 audio_drv_list="oss"
591 audio_possible_drivers="oss sdl pa"
593 FreeBSD)
594 bsd="yes"
595 make="${MAKE-gmake}"
596 audio_drv_list="oss"
597 audio_possible_drivers="oss sdl pa"
598 # needed for kinfo_getvmmap(3) in libutil.h
599 LIBS="-lutil $LIBS"
600 netmap="" # enable netmap autodetect
601 HOST_VARIANT_DIR="freebsd"
603 DragonFly)
604 bsd="yes"
605 make="${MAKE-gmake}"
606 audio_drv_list="oss"
607 audio_possible_drivers="oss sdl pa"
608 HOST_VARIANT_DIR="dragonfly"
610 NetBSD)
611 bsd="yes"
612 make="${MAKE-gmake}"
613 audio_drv_list="oss"
614 audio_possible_drivers="oss sdl"
615 oss_lib="-lossaudio"
616 HOST_VARIANT_DIR="netbsd"
618 OpenBSD)
619 bsd="yes"
620 make="${MAKE-gmake}"
621 audio_drv_list="sdl"
622 audio_possible_drivers="sdl"
623 HOST_VARIANT_DIR="openbsd"
625 Darwin)
626 bsd="yes"
627 darwin="yes"
628 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
629 if [ "$cpu" = "x86_64" ] ; then
630 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
631 LDFLAGS="-arch x86_64 $LDFLAGS"
633 cocoa="yes"
634 audio_drv_list="coreaudio"
635 audio_possible_drivers="coreaudio sdl"
636 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
637 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
638 # Disable attempts to use ObjectiveC features in os/object.h since they
639 # won't work when we're compiling with gcc as a C compiler.
640 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
641 HOST_VARIANT_DIR="darwin"
643 SunOS)
644 solaris="yes"
645 make="${MAKE-gmake}"
646 install="${INSTALL-ginstall}"
647 ld="gld"
648 smbd="${SMBD-/usr/sfw/sbin/smbd}"
649 needs_libsunmath="no"
650 solarisrev=`uname -r | cut -f2 -d.`
651 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
652 if test "$solarisrev" -le 9 ; then
653 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
654 needs_libsunmath="yes"
655 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
656 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
657 LIBS="-lsunmath $LIBS"
658 else
659 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
660 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
661 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
662 "Studio 11 can be downloaded from www.sun.com."
666 if test -f /usr/include/sys/soundcard.h ; then
667 audio_drv_list="oss"
669 audio_possible_drivers="oss sdl"
670 # needed for CMSG_ macros in sys/socket.h
671 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
672 # needed for TIOCWIN* defines in termios.h
673 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
674 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
675 solarisnetlibs="-lsocket -lnsl -lresolv"
676 LIBS="$solarisnetlibs $LIBS"
677 libs_qga="$solarisnetlibs $libs_qga"
679 AIX)
680 aix="yes"
681 make="${MAKE-gmake}"
683 Haiku)
684 haiku="yes"
685 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
686 LIBS="-lposix_error_mapper -lnetwork $LIBS"
689 audio_drv_list="oss"
690 audio_possible_drivers="oss alsa sdl pa"
691 linux="yes"
692 linux_user="yes"
693 kvm="yes"
694 vhost_net="yes"
695 vhost_scsi="yes"
696 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
698 esac
700 if [ "$bsd" = "yes" ] ; then
701 if [ "$darwin" != "yes" ] ; then
702 bsd_user="yes"
706 : ${make=${MAKE-make}}
707 : ${install=${INSTALL-install}}
708 : ${python=${PYTHON-python}}
709 : ${smbd=${SMBD-/usr/sbin/smbd}}
711 # Default objcc to clang if available, otherwise use CC
712 if has clang; then
713 objcc=clang
714 else
715 objcc="$cc"
718 if test "$mingw32" = "yes" ; then
719 EXESUF=".exe"
720 DSOSUF=".dll"
721 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
722 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
723 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
724 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
725 write_c_skeleton;
726 if compile_prog "" "-liberty" ; then
727 LIBS="-liberty $LIBS"
729 prefix="c:/Program Files/QEMU"
730 mandir="\${prefix}"
731 datadir="\${prefix}"
732 qemu_docdir="\${prefix}"
733 bindir="\${prefix}"
734 sysconfdir="\${prefix}"
735 local_statedir=
736 confsuffix=""
737 libs_qga="-lws2_32 -lwinmm -lpowrprof $libs_qga"
740 werror=""
742 for opt do
743 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
744 case "$opt" in
745 --help|-h) show_help=yes
747 --version|-V) exec cat $source_path/VERSION
749 --prefix=*) prefix="$optarg"
751 --interp-prefix=*) interp_prefix="$optarg"
753 --source-path=*)
755 --cross-prefix=*)
757 --cc=*)
759 --host-cc=*) host_cc="$optarg"
761 --cxx=*)
763 --iasl=*) iasl="$optarg"
765 --objcc=*) objcc="$optarg"
767 --make=*) make="$optarg"
769 --install=*) install="$optarg"
771 --python=*) python="$optarg"
773 --gcov=*) gcov_tool="$optarg"
775 --smbd=*) smbd="$optarg"
777 --extra-cflags=*)
779 --extra-ldflags=*)
781 --enable-debug-info)
783 --disable-debug-info)
785 --enable-modules)
786 modules="yes"
788 --cpu=*)
790 --target-list=*) target_list="$optarg"
792 --enable-trace-backends=*) trace_backends="$optarg"
794 # XXX: backwards compatibility
795 --enable-trace-backend=*) trace_backends="$optarg"
797 --with-trace-file=*) trace_file="$optarg"
799 --enable-gprof) gprof="yes"
801 --enable-gcov) gcov="yes"
803 --static)
804 static="yes"
805 LDFLAGS="-static $LDFLAGS"
806 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
808 --mandir=*) mandir="$optarg"
810 --bindir=*) bindir="$optarg"
812 --libdir=*) libdir="$optarg"
814 --libexecdir=*) libexecdir="$optarg"
816 --includedir=*) includedir="$optarg"
818 --datadir=*) datadir="$optarg"
820 --with-confsuffix=*) confsuffix="$optarg"
822 --docdir=*) qemu_docdir="$optarg"
824 --sysconfdir=*) sysconfdir="$optarg"
826 --localstatedir=*) local_statedir="$optarg"
828 --sbindir=*|--sharedstatedir=*|\
829 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
830 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
831 # These switches are silently ignored, for compatibility with
832 # autoconf-generated configure scripts. This allows QEMU's
833 # configure to be used by RPM and similar macros that set
834 # lots of directory switches by default.
836 --with-system-pixman) pixman="system"
838 --without-system-pixman) pixman="internal"
840 --without-pixman) pixman="none"
842 --disable-sdl) sdl="no"
844 --enable-sdl) sdl="yes"
846 --with-sdlabi=*) sdlabi="$optarg"
848 --disable-qom-cast-debug) qom_cast_debug="no"
850 --enable-qom-cast-debug) qom_cast_debug="yes"
852 --disable-virtfs) virtfs="no"
854 --enable-virtfs) virtfs="yes"
856 --disable-vnc) vnc="no"
858 --enable-vnc) vnc="yes"
860 --oss-lib=*) oss_lib="$optarg"
862 --audio-drv-list=*) audio_drv_list="$optarg"
864 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
866 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
868 --enable-debug-tcg) debug_tcg="yes"
870 --disable-debug-tcg) debug_tcg="no"
872 --enable-debug)
873 # Enable debugging options that aren't excessively noisy
874 debug_tcg="yes"
875 debug="yes"
876 strip_opt="no"
878 --enable-sparse) sparse="yes"
880 --disable-sparse) sparse="no"
882 --disable-strip) strip_opt="no"
884 --disable-vnc-tls) vnc_tls="no"
886 --enable-vnc-tls) vnc_tls="yes"
888 --disable-vnc-sasl) vnc_sasl="no"
890 --enable-vnc-sasl) vnc_sasl="yes"
892 --disable-vnc-jpeg) vnc_jpeg="no"
894 --enable-vnc-jpeg) vnc_jpeg="yes"
896 --disable-vnc-png) vnc_png="no"
898 --enable-vnc-png) vnc_png="yes"
900 --disable-vnc-ws) vnc_ws="no"
902 --enable-vnc-ws) vnc_ws="yes"
904 --disable-slirp) slirp="no"
906 --disable-uuid) uuid="no"
908 --enable-uuid) uuid="yes"
910 --disable-vde) vde="no"
912 --enable-vde) vde="yes"
914 --disable-netmap) netmap="no"
916 --enable-netmap) netmap="yes"
918 --disable-xen) xen="no"
920 --enable-xen) xen="yes"
922 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
924 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
926 --disable-brlapi) brlapi="no"
928 --enable-brlapi) brlapi="yes"
930 --disable-bluez) bluez="no"
932 --enable-bluez) bluez="yes"
934 --disable-kvm) kvm="no"
936 --enable-kvm) kvm="yes"
938 --disable-tcg-interpreter) tcg_interpreter="no"
940 --enable-tcg-interpreter) tcg_interpreter="yes"
942 --disable-cap-ng) cap_ng="no"
944 --enable-cap-ng) cap_ng="yes"
946 --disable-spice) spice="no"
948 --enable-spice) spice="yes"
950 --disable-libiscsi) libiscsi="no"
952 --enable-libiscsi) libiscsi="yes"
954 --disable-libnfs) libnfs="no"
956 --enable-libnfs) libnfs="yes"
958 --enable-profiler) profiler="yes"
960 --disable-cocoa) cocoa="no"
962 --enable-cocoa)
963 cocoa="yes" ;
964 sdl="no" ;
965 audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
967 --disable-system) softmmu="no"
969 --enable-system) softmmu="yes"
971 --disable-user)
972 linux_user="no" ;
973 bsd_user="no" ;
975 --enable-user) ;;
976 --disable-linux-user) linux_user="no"
978 --enable-linux-user) linux_user="yes"
980 --disable-bsd-user) bsd_user="no"
982 --enable-bsd-user) bsd_user="yes"
984 --enable-guest-base) guest_base="yes"
986 --disable-guest-base) guest_base="no"
988 --enable-pie) pie="yes"
990 --disable-pie) pie="no"
992 --enable-werror) werror="yes"
994 --disable-werror) werror="no"
996 --enable-stack-protector) stack_protector="yes"
998 --disable-stack-protector) stack_protector="no"
1000 --disable-curses) curses="no"
1002 --enable-curses) curses="yes"
1004 --disable-curl) curl="no"
1006 --enable-curl) curl="yes"
1008 --disable-fdt) fdt="no"
1010 --enable-fdt) fdt="yes"
1012 --disable-linux-aio) linux_aio="no"
1014 --enable-linux-aio) linux_aio="yes"
1016 --disable-attr) attr="no"
1018 --enable-attr) attr="yes"
1020 --disable-blobs) blobs="no"
1022 --with-pkgversion=*) pkgversion=" ($optarg)"
1024 --with-coroutine=*) coroutine="$optarg"
1026 --disable-coroutine-pool) coroutine_pool="no"
1028 --enable-coroutine-pool) coroutine_pool="yes"
1030 --disable-docs) docs="no"
1032 --enable-docs) docs="yes"
1034 --disable-vhost-net) vhost_net="no"
1036 --enable-vhost-net) vhost_net="yes"
1038 --disable-vhost-scsi) vhost_scsi="no"
1040 --enable-vhost-scsi) vhost_scsi="yes"
1042 --disable-opengl) opengl="no"
1044 --enable-opengl) opengl="yes"
1046 --disable-rbd) rbd="no"
1048 --enable-rbd) rbd="yes"
1050 --disable-xfsctl) xfs="no"
1052 --enable-xfsctl) xfs="yes"
1054 --disable-smartcard-nss) smartcard_nss="no"
1056 --enable-smartcard-nss) smartcard_nss="yes"
1058 --disable-libusb) libusb="no"
1060 --enable-libusb) libusb="yes"
1062 --disable-usb-redir) usb_redir="no"
1064 --enable-usb-redir) usb_redir="yes"
1066 --disable-zlib-test) zlib="no"
1068 --disable-lzo) lzo="no"
1070 --enable-lzo) lzo="yes"
1072 --disable-snappy) snappy="no"
1074 --enable-snappy) snappy="yes"
1076 --disable-bzip2) bzip2="no"
1078 --enable-bzip2) bzip2="yes"
1080 --enable-guest-agent) guest_agent="yes"
1082 --disable-guest-agent) guest_agent="no"
1084 --enable-guest-agent-msi) guest_agent_msi="yes"
1086 --disable-guest-agent-msi) guest_agent_msi="no"
1088 --with-vss-sdk) vss_win32_sdk=""
1090 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1092 --without-vss-sdk) vss_win32_sdk="no"
1094 --with-win-sdk) win_sdk=""
1096 --with-win-sdk=*) win_sdk="$optarg"
1098 --without-win-sdk) win_sdk="no"
1100 --enable-tools) want_tools="yes"
1102 --disable-tools) want_tools="no"
1104 --enable-seccomp) seccomp="yes"
1106 --disable-seccomp) seccomp="no"
1108 --disable-glusterfs) glusterfs="no"
1110 --enable-glusterfs) glusterfs="yes"
1112 --disable-archipelago) archipelago="no"
1114 --enable-archipelago) archipelago="yes"
1116 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1117 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1119 --disable-gtk) gtk="no"
1121 --enable-gtk) gtk="yes"
1123 --disable-gnutls) gnutls="no"
1125 --enable-gnutls) gnutls="yes"
1127 --enable-rdma) rdma="yes"
1129 --disable-rdma) rdma="no"
1131 --with-gtkabi=*) gtkabi="$optarg"
1133 --disable-vte) vte="no"
1135 --enable-vte) vte="yes"
1137 --disable-tpm) tpm="no"
1139 --enable-tpm) tpm="yes"
1141 --disable-libssh2) libssh2="no"
1143 --enable-libssh2) libssh2="yes"
1145 --enable-vhdx) vhdx="yes"
1147 --disable-vhdx) vhdx="no"
1149 --disable-quorum) quorum="no"
1151 --enable-quorum) quorum="yes"
1153 --disable-numa) numa="no"
1155 --enable-numa) numa="yes"
1157 --disable-tcmalloc) tcmalloc="no"
1159 --enable-tcmalloc) tcmalloc="yes"
1162 echo "ERROR: unknown option $opt"
1163 echo "Try '$0 --help' for more information"
1164 exit 1
1166 esac
1167 done
1169 if ! has $python; then
1170 error_exit "Python not found. Use --python=/path/to/python"
1173 # Note that if the Python conditional here evaluates True we will exit
1174 # with status 1 which is a shell 'false' value.
1175 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
1176 error_exit "Cannot use '$python', Python 2.4 or later is required." \
1177 "Note that Python 3 or later is not yet supported." \
1178 "Use --python=/path/to/python to specify a supported Python."
1181 # The -B switch was added in Python 2.6.
1182 # If it is supplied, compiled files are not written.
1183 # Use it for Python versions which support it.
1184 if $python -B -c 'import sys; sys.exit(0)' 2>/dev/null; then
1185 python="$python -B"
1188 case "$cpu" in
1189 ppc)
1190 CPU_CFLAGS="-m32"
1191 LDFLAGS="-m32 $LDFLAGS"
1193 ppc64)
1194 CPU_CFLAGS="-m64"
1195 LDFLAGS="-m64 $LDFLAGS"
1197 sparc)
1198 LDFLAGS="-m32 $LDFLAGS"
1199 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1201 sparc64)
1202 LDFLAGS="-m64 $LDFLAGS"
1203 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1205 s390)
1206 CPU_CFLAGS="-m31"
1207 LDFLAGS="-m31 $LDFLAGS"
1209 s390x)
1210 CPU_CFLAGS="-m64"
1211 LDFLAGS="-m64 $LDFLAGS"
1213 i386)
1214 CPU_CFLAGS="-m32"
1215 LDFLAGS="-m32 $LDFLAGS"
1216 cc_i386='$(CC) -m32'
1218 x86_64)
1219 CPU_CFLAGS="-m64"
1220 LDFLAGS="-m64 $LDFLAGS"
1221 cc_i386='$(CC) -m32'
1223 x32)
1224 CPU_CFLAGS="-mx32"
1225 LDFLAGS="-mx32 $LDFLAGS"
1226 cc_i386='$(CC) -m32'
1228 # No special flags required for other host CPUs
1229 esac
1231 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1232 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1234 default_target_list=""
1236 mak_wilds=""
1238 if [ "$softmmu" = "yes" ]; then
1239 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1241 if [ "$linux_user" = "yes" ]; then
1242 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1244 if [ "$bsd_user" = "yes" ]; then
1245 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1248 for config in $mak_wilds; do
1249 default_target_list="${default_target_list} $(basename "$config" .mak)"
1250 done
1252 if test x"$show_help" = x"yes" ; then
1253 cat << EOF
1255 Usage: configure [options]
1256 Options: [defaults in brackets after descriptions]
1258 Standard options:
1259 --help print this message
1260 --prefix=PREFIX install in PREFIX [$prefix]
1261 --interp-prefix=PREFIX where to find shared libraries, etc.
1262 use %M for cpu name [$interp_prefix]
1263 --target-list=LIST set target list (default: build everything)
1264 $(echo Available targets: $default_target_list | \
1265 fold -s -w 53 | sed -e 's/^/ /')
1267 Advanced options (experts only):
1268 --source-path=PATH path of source code [$source_path]
1269 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1270 --cc=CC use C compiler CC [$cc]
1271 --iasl=IASL use ACPI compiler IASL [$iasl]
1272 --host-cc=CC use C compiler CC [$host_cc] for code run at
1273 build time
1274 --cxx=CXX use C++ compiler CXX [$cxx]
1275 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1276 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1277 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1278 --make=MAKE use specified make [$make]
1279 --install=INSTALL use specified install [$install]
1280 --python=PYTHON use specified python [$python]
1281 --smbd=SMBD use specified smbd [$smbd]
1282 --static enable static build [$static]
1283 --mandir=PATH install man pages in PATH
1284 --datadir=PATH install firmware in PATH$confsuffix
1285 --docdir=PATH install documentation in PATH$confsuffix
1286 --bindir=PATH install binaries in PATH
1287 --libdir=PATH install libraries in PATH
1288 --sysconfdir=PATH install config in PATH$confsuffix
1289 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1290 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1291 --enable-debug enable common debug build options
1292 --disable-strip disable stripping binaries
1293 --disable-werror disable compilation abort on warning
1294 --disable-stack-protector disable compiler-provided stack protection
1295 --audio-drv-list=LIST set audio drivers list:
1296 Available drivers: $audio_possible_drivers
1297 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1298 --block-drv-rw-whitelist=L
1299 set block driver read-write whitelist
1300 (affects only QEMU, not qemu-img)
1301 --block-drv-ro-whitelist=L
1302 set block driver read-only whitelist
1303 (affects only QEMU, not qemu-img)
1304 --enable-trace-backends=B Set trace backend
1305 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1306 --with-trace-file=NAME Full PATH,NAME of file to store traces
1307 Default:trace-<pid>
1308 --disable-slirp disable SLIRP userspace network connectivity
1309 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1310 --oss-lib path to OSS library
1311 --cpu=CPU Build for host CPU [$cpu]
1312 --with-coroutine=BACKEND coroutine backend. Supported options:
1313 gthread, ucontext, sigaltstack, windows
1314 --enable-gcov enable test coverage analysis with gcov
1315 --gcov=GCOV use specified gcov [$gcov_tool]
1316 --disable-blobs disable installing provided firmware blobs
1317 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1318 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1320 Optional features, enabled with --enable-FEATURE and
1321 disabled with --disable-FEATURE, default is enabled if available:
1323 system all system emulation targets
1324 user supported user emulation targets
1325 linux-user all linux usermode emulation targets
1326 bsd-user all BSD usermode emulation targets
1327 guest-base GUEST_BASE support for usermode emulation targets
1328 docs build documentation
1329 guest-agent build the QEMU Guest Agent
1330 guest-agent-msi build guest agent Windows MSI installation package
1331 pie Position Independent Executables
1332 modules modules support
1333 debug-tcg TCG debugging (default is disabled)
1334 debug-info debugging information
1335 sparse sparse checker
1337 gnutls GNUTLS cryptography support
1338 sdl SDL UI
1339 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1340 gtk gtk UI
1341 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1342 vte vte support for the gtk UI
1343 curses curses UI
1344 vnc VNC UI support
1345 vnc-tls TLS encryption for VNC server
1346 vnc-sasl SASL encryption for VNC server
1347 vnc-jpeg JPEG lossy compression for VNC server
1348 vnc-png PNG compression for VNC server
1349 vnc-ws Websockets support for VNC server
1350 cocoa Cocoa UI (Mac OS X only)
1351 virtfs VirtFS
1352 xen xen backend driver support
1353 xen-pci-passthrough
1354 brlapi BrlAPI (Braile)
1355 curl curl connectivity
1356 fdt fdt device tree
1357 bluez bluez stack connectivity
1358 kvm KVM acceleration support
1359 rdma RDMA-based migration support
1360 uuid uuid support
1361 vde support for vde network
1362 netmap support for netmap network
1363 linux-aio Linux AIO support
1364 cap-ng libcap-ng support
1365 attr attr and xattr support
1366 vhost-net vhost-net acceleration support
1367 spice spice
1368 rbd rados block device (rbd)
1369 libiscsi iscsi support
1370 libnfs nfs support
1371 smartcard-nss smartcard nss support
1372 libusb libusb (for usb passthrough)
1373 usb-redir usb network redirection support
1374 lzo support of lzo compression library
1375 snappy support of snappy compression library
1376 bzip2 support of bzip2 compression library
1377 (for reading bzip2-compressed dmg images)
1378 seccomp seccomp support
1379 coroutine-pool coroutine freelist (better performance)
1380 glusterfs GlusterFS backend
1381 archipelago Archipelago backend
1382 tpm TPM support
1383 libssh2 ssh block device support
1384 vhdx support for the Microsoft VHDX image format
1385 quorum quorum block filter support
1386 numa libnuma support
1387 tcmalloc tcmalloc support
1389 NOTE: The object files are built at the place where configure is launched
1391 exit 0
1394 # Now we have handled --enable-tcg-interpreter and know we're not just
1395 # printing the help message, bail out if the host CPU isn't supported.
1396 if test "$ARCH" = "unknown"; then
1397 if test "$tcg_interpreter" = "yes" ; then
1398 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1399 ARCH=tci
1400 else
1401 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1405 # Consult white-list to determine whether to enable werror
1406 # by default. Only enable by default for git builds
1407 z_version=`cut -f3 -d. $source_path/VERSION`
1409 if test -z "$werror" ; then
1410 if test -d "$source_path/.git" -a \
1411 "$linux" = "yes" ; then
1412 werror="yes"
1413 else
1414 werror="no"
1418 # check that the C compiler works.
1419 write_c_skeleton;
1420 if compile_object ; then
1421 : C compiler works ok
1422 else
1423 error_exit "\"$cc\" either does not exist or does not work"
1426 # Check that the C++ compiler exists and works with the C compiler
1427 if has $cxx; then
1428 cat > $TMPC <<EOF
1429 int c_function(void);
1430 int main(void) { return c_function(); }
1433 compile_object
1435 cat > $TMPCXX <<EOF
1436 extern "C" {
1437 int c_function(void);
1439 int c_function(void) { return 42; }
1442 update_cxxflags
1444 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1445 # C++ compiler $cxx works ok with C compiler $cc
1447 else
1448 echo "C++ compiler $cxx does not work with C compiler $cc"
1449 echo "Disabling C++ specific optional code"
1450 cxx=
1452 else
1453 echo "No C++ compiler available; disabling C++ specific optional code"
1454 cxx=
1457 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1458 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1459 gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1460 gcc_flags="-Wendif-labels $gcc_flags"
1461 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1462 gcc_flags="-Wno-string-plus-int $gcc_flags"
1463 # Note that we do not add -Werror to gcc_flags here, because that would
1464 # enable it for all configure tests. If a configure test failed due
1465 # to -Werror this would just silently disable some features,
1466 # so it's too error prone.
1468 cc_has_warning_flag() {
1469 write_c_skeleton;
1471 # Use the positive sense of the flag when testing for -Wno-wombat
1472 # support (gcc will happily accept the -Wno- form of unknown
1473 # warning options).
1474 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1475 compile_prog "-Werror $optflag" ""
1478 for flag in $gcc_flags; do
1479 if cc_has_warning_flag $flag ; then
1480 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1482 done
1484 if test "$stack_protector" != "no"; then
1485 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1486 sp_on=0
1487 for flag in $gcc_flags; do
1488 # We need to check both a compile and a link, since some compiler
1489 # setups fail only on a .c->.o compile and some only at link time
1490 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1491 compile_prog "-Werror $flag" ""; then
1492 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1493 LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
1494 sp_on=1
1495 break
1497 done
1498 if test "$stack_protector" = yes; then
1499 if test $sp_on = 0; then
1500 error_exit "Stack protector not supported"
1505 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1506 # large functions that use global variables. The bug is in all releases of
1507 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1508 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1509 cat > $TMPC << EOF
1510 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1511 int main(void) { return 0; }
1512 #else
1513 #error No bug in this compiler.
1514 #endif
1516 if compile_prog "-Werror -fno-gcse" "" ; then
1517 TRANSLATE_OPT_CFLAGS=-fno-gcse
1520 if test "$static" = "yes" ; then
1521 if test "$modules" = "yes" ; then
1522 error_exit "static and modules are mutually incompatible"
1524 if test "$pie" = "yes" ; then
1525 error_exit "static and pie are mutually incompatible"
1526 else
1527 pie="no"
1531 # Unconditional check for compiler __thread support
1532 cat > $TMPC << EOF
1533 static __thread int tls_var;
1534 int main(void) { return tls_var; }
1537 if ! compile_prog "-Werror" "" ; then
1538 error_exit "Your compiler does not support the __thread specifier for " \
1539 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1542 if test "$pie" = ""; then
1543 case "$cpu-$targetos" in
1544 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1547 pie="no"
1549 esac
1552 if test "$pie" != "no" ; then
1553 cat > $TMPC << EOF
1555 #ifdef __linux__
1556 # define THREAD __thread
1557 #else
1558 # define THREAD
1559 #endif
1561 static THREAD int tls_var;
1563 int main(void) { return tls_var; }
1566 if compile_prog "-fPIE -DPIE" "-pie"; then
1567 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1568 LDFLAGS="-pie $LDFLAGS"
1569 pie="yes"
1570 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1571 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1573 else
1574 if test "$pie" = "yes"; then
1575 error_exit "PIE not available due to missing toolchain support"
1576 else
1577 echo "Disabling PIE due to missing toolchain support"
1578 pie="no"
1582 if compile_prog "-Werror -fno-pie" "-nopie"; then
1583 CFLAGS_NOPIE="-fno-pie"
1584 LDFLAGS_NOPIE="-nopie"
1588 # check for broken gcc and libtool in RHEL5
1589 if test -n "$libtool" -a "$pie" != "no" ; then
1590 cat > $TMPC <<EOF
1592 void *f(unsigned char *buf, int len);
1593 void *g(unsigned char *buf, int len);
1595 void *
1596 f(unsigned char *buf, int len)
1598 return (void*)0L;
1601 void *
1602 g(unsigned char *buf, int len)
1604 return f(buf, len);
1608 if ! libtool_prog; then
1609 echo "Disabling libtool due to broken toolchain support"
1610 libtool=
1614 ##########################################
1615 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1616 # use i686 as default anyway, but for those that don't, an explicit
1617 # specification is necessary
1619 if test "$cpu" = "i386"; then
1620 cat > $TMPC << EOF
1621 static int sfaa(int *ptr)
1623 return __sync_fetch_and_and(ptr, 0);
1626 int main(void)
1628 int val = 42;
1629 val = __sync_val_compare_and_swap(&val, 0, 1);
1630 sfaa(&val);
1631 return val;
1634 if ! compile_prog "" "" ; then
1635 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1639 #########################################
1640 # Solaris specific configure tool chain decisions
1642 if test "$solaris" = "yes" ; then
1643 if has $install; then
1645 else
1646 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1647 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1648 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1650 if test "`path_of $install`" = "/usr/sbin/install" ; then
1651 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1652 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1653 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1655 if has ar; then
1657 else
1658 if test -f /usr/ccs/bin/ar ; then
1659 error_exit "No path includes ar" \
1660 "Add /usr/ccs/bin to your path and rerun configure"
1662 error_exit "No path includes ar"
1666 if test -z "${target_list+xxx}" ; then
1667 target_list="$default_target_list"
1668 else
1669 target_list=`echo "$target_list" | sed -e 's/,/ /g'`
1672 # Check that we recognised the target name; this allows a more
1673 # friendly error message than if we let it fall through.
1674 for target in $target_list; do
1675 case " $default_target_list " in
1676 *" $target "*)
1679 error_exit "Unknown target name '$target'"
1681 esac
1682 done
1684 # see if system emulation was really requested
1685 case " $target_list " in
1686 *"-softmmu "*) softmmu=yes
1688 *) softmmu=no
1690 esac
1692 feature_not_found() {
1693 feature=$1
1694 remedy=$2
1696 error_exit "User requested feature $feature" \
1697 "configure was not able to find it." \
1698 "$remedy"
1701 # ---
1702 # big/little endian test
1703 cat > $TMPC << EOF
1704 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1705 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1706 extern int foo(short *, short *);
1707 int main(int argc, char *argv[]) {
1708 return foo(big_endian, little_endian);
1712 if compile_object ; then
1713 if grep -q BiGeNdIaN $TMPO ; then
1714 bigendian="yes"
1715 elif grep -q LiTtLeEnDiAn $TMPO ; then
1716 bigendian="no"
1717 else
1718 echo big/little test failed
1720 else
1721 echo big/little test failed
1724 ##########################################
1725 # L2TPV3 probe
1727 cat > $TMPC <<EOF
1728 #include <sys/socket.h>
1729 #include <linux/ip.h>
1730 int main(void) { return sizeof(struct mmsghdr); }
1732 if compile_prog "" "" ; then
1733 l2tpv3=yes
1734 else
1735 l2tpv3=no
1738 ##########################################
1739 # pkg-config probe
1741 if ! has "$pkg_config_exe"; then
1742 error_exit "pkg-config binary '$pkg_config_exe' not found"
1745 ##########################################
1746 # NPTL probe
1748 if test "$linux_user" = "yes"; then
1749 cat > $TMPC <<EOF
1750 #include <sched.h>
1751 #include <linux/futex.h>
1752 int main(void) {
1753 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1754 #error bork
1755 #endif
1756 return 0;
1759 if ! compile_object ; then
1760 feature_not_found "nptl" "Install glibc and linux kernel headers."
1764 ##########################################
1765 # zlib check
1767 if test "$zlib" != "no" ; then
1768 cat > $TMPC << EOF
1769 #include <zlib.h>
1770 int main(void) { zlibVersion(); return 0; }
1772 if compile_prog "" "-lz" ; then
1774 else
1775 error_exit "zlib check failed" \
1776 "Make sure to have the zlib libs and headers installed."
1779 LIBS="$LIBS -lz"
1781 ##########################################
1782 # lzo check
1784 if test "$lzo" != "no" ; then
1785 cat > $TMPC << EOF
1786 #include <lzo/lzo1x.h>
1787 int main(void) { lzo_version(); return 0; }
1789 if compile_prog "" "-llzo2" ; then
1790 libs_softmmu="$libs_softmmu -llzo2"
1791 lzo="yes"
1792 else
1793 if test "$lzo" = "yes"; then
1794 feature_not_found "liblzo2" "Install liblzo2 devel"
1796 lzo="no"
1800 ##########################################
1801 # snappy check
1803 if test "$snappy" != "no" ; then
1804 cat > $TMPC << EOF
1805 #include <snappy-c.h>
1806 int main(void) { snappy_max_compressed_length(4096); return 0; }
1808 if compile_prog "" "-lsnappy" ; then
1809 libs_softmmu="$libs_softmmu -lsnappy"
1810 snappy="yes"
1811 else
1812 if test "$snappy" = "yes"; then
1813 feature_not_found "libsnappy" "Install libsnappy devel"
1815 snappy="no"
1819 ##########################################
1820 # bzip2 check
1822 if test "$bzip2" != "no" ; then
1823 cat > $TMPC << EOF
1824 #include <bzlib.h>
1825 int main(void) { BZ2_bzlibVersion(); return 0; }
1827 if compile_prog "" "-lbz2" ; then
1828 bzip2="yes"
1829 else
1830 if test "$bzip2" = "yes"; then
1831 feature_not_found "libbzip2" "Install libbzip2 devel"
1833 bzip2="no"
1837 ##########################################
1838 # libseccomp check
1840 if test "$seccomp" != "no" ; then
1841 if test "$cpu" = "i386" || test "$cpu" = "x86_64" &&
1842 $pkg_config --atleast-version=2.1.1 libseccomp; then
1843 libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`"
1844 QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`"
1845 seccomp="yes"
1846 else
1847 if test "$seccomp" = "yes"; then
1848 feature_not_found "libseccomp" "Install libseccomp devel >= 2.1.1"
1850 seccomp="no"
1853 ##########################################
1854 # xen probe
1856 if test "$xen" != "no" ; then
1857 xen_libs="-lxenstore -lxenctrl -lxenguest"
1859 # First we test whether Xen headers and libraries are available.
1860 # If no, we are done and there is no Xen support.
1861 # If yes, more tests are run to detect the Xen version.
1863 # Xen (any)
1864 cat > $TMPC <<EOF
1865 #include <xenctrl.h>
1866 int main(void) {
1867 return 0;
1870 if ! compile_prog "" "$xen_libs" ; then
1871 # Xen not found
1872 if test "$xen" = "yes" ; then
1873 feature_not_found "xen" "Install xen devel"
1875 xen=no
1877 # Xen unstable
1878 elif
1879 cat > $TMPC <<EOF &&
1880 #include <xenctrl.h>
1881 #include <xenstore.h>
1882 #include <stdint.h>
1883 #include <xen/hvm/hvm_info_table.h>
1884 #if !defined(HVM_MAX_VCPUS)
1885 # error HVM_MAX_VCPUS not defined
1886 #endif
1887 int main(void) {
1888 xc_interface *xc;
1889 xs_daemon_open();
1890 xc = xc_interface_open(0, 0, 0);
1891 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1892 xc_gnttab_open(NULL, 0);
1893 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1894 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1895 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
1896 return 0;
1899 compile_prog "" "$xen_libs"
1900 then
1901 xen_ctrl_version=450
1902 xen=yes
1904 elif
1905 cat > $TMPC <<EOF &&
1906 #include <xenctrl.h>
1907 #include <xenstore.h>
1908 #include <stdint.h>
1909 #include <xen/hvm/hvm_info_table.h>
1910 #if !defined(HVM_MAX_VCPUS)
1911 # error HVM_MAX_VCPUS not defined
1912 #endif
1913 int main(void) {
1914 xc_interface *xc;
1915 xs_daemon_open();
1916 xc = xc_interface_open(0, 0, 0);
1917 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1918 xc_gnttab_open(NULL, 0);
1919 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1920 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1921 return 0;
1924 compile_prog "" "$xen_libs"
1925 then
1926 xen_ctrl_version=420
1927 xen=yes
1929 elif
1930 cat > $TMPC <<EOF &&
1931 #include <xenctrl.h>
1932 #include <xs.h>
1933 #include <stdint.h>
1934 #include <xen/hvm/hvm_info_table.h>
1935 #if !defined(HVM_MAX_VCPUS)
1936 # error HVM_MAX_VCPUS not defined
1937 #endif
1938 int main(void) {
1939 xs_daemon_open();
1940 xc_interface_open(0, 0, 0);
1941 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1942 xc_gnttab_open(NULL, 0);
1943 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1944 return 0;
1947 compile_prog "" "$xen_libs"
1948 then
1949 xen_ctrl_version=410
1950 xen=yes
1952 # Xen 4.0.0
1953 elif
1954 cat > $TMPC <<EOF &&
1955 #include <xenctrl.h>
1956 #include <xs.h>
1957 #include <stdint.h>
1958 #include <xen/hvm/hvm_info_table.h>
1959 #if !defined(HVM_MAX_VCPUS)
1960 # error HVM_MAX_VCPUS not defined
1961 #endif
1962 int main(void) {
1963 struct xen_add_to_physmap xatp = {
1964 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
1966 xs_daemon_open();
1967 xc_interface_open();
1968 xc_gnttab_open();
1969 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1970 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
1971 return 0;
1974 compile_prog "" "$xen_libs"
1975 then
1976 xen_ctrl_version=400
1977 xen=yes
1979 # Xen 3.4.0
1980 elif
1981 cat > $TMPC <<EOF &&
1982 #include <xenctrl.h>
1983 #include <xs.h>
1984 int main(void) {
1985 struct xen_add_to_physmap xatp = {
1986 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
1988 xs_daemon_open();
1989 xc_interface_open();
1990 xc_gnttab_open();
1991 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1992 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
1993 return 0;
1996 compile_prog "" "$xen_libs"
1997 then
1998 xen_ctrl_version=340
1999 xen=yes
2001 # Xen 3.3.0
2002 elif
2003 cat > $TMPC <<EOF &&
2004 #include <xenctrl.h>
2005 #include <xs.h>
2006 int main(void) {
2007 xs_daemon_open();
2008 xc_interface_open();
2009 xc_gnttab_open();
2010 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2011 return 0;
2014 compile_prog "" "$xen_libs"
2015 then
2016 xen_ctrl_version=330
2017 xen=yes
2019 # Xen version unsupported
2020 else
2021 if test "$xen" = "yes" ; then
2022 feature_not_found "xen (unsupported version)" "Install supported xen (e.g. 4.0, 3.4, 3.3)"
2024 xen=no
2027 if test "$xen" = yes; then
2028 libs_softmmu="$xen_libs $libs_softmmu"
2032 if test "$xen_pci_passthrough" != "no"; then
2033 if test "$xen" = "yes" && test "$linux" = "yes" &&
2034 test "$xen_ctrl_version" -ge 340; then
2035 xen_pci_passthrough=yes
2036 else
2037 if test "$xen_pci_passthrough" = "yes"; then
2038 if test "$xen_ctrl_version" -lt 340; then
2039 error_exit "User requested feature Xen PCI Passthrough" \
2040 "This feature does not work with Xen 3.3"
2042 error_exit "User requested feature Xen PCI Passthrough" \
2043 " but this feature requires /sys from Linux"
2045 xen_pci_passthrough=no
2049 ##########################################
2050 # libtool probe
2052 if ! has $libtool; then
2053 libtool=
2056 # MacOSX ships with a libtool which isn't the GNU one; weed this
2057 # out by checking whether libtool supports the --version switch
2058 if test -n "$libtool"; then
2059 if ! "$libtool" --version >/dev/null 2>&1; then
2060 libtool=
2064 ##########################################
2065 # Sparse probe
2066 if test "$sparse" != "no" ; then
2067 if has cgcc; then
2068 sparse=yes
2069 else
2070 if test "$sparse" = "yes" ; then
2071 feature_not_found "sparse" "Install sparse binary"
2073 sparse=no
2077 ##########################################
2078 # X11 probe
2079 x11_cflags=
2080 x11_libs=-lX11
2081 if $pkg_config --exists "x11"; then
2082 x11_cflags=`$pkg_config --cflags x11`
2083 x11_libs=`$pkg_config --libs x11`
2086 ##########################################
2087 # GTK probe
2089 if test "$gtkabi" = ""; then
2090 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2091 # Use 3.0 as a fallback if that is available.
2092 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2093 gtkabi=2.0
2094 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2095 gtkabi=3.0
2096 else
2097 gtkabi=2.0
2101 if test "$gtk" != "no"; then
2102 gtkpackage="gtk+-$gtkabi"
2103 gtkx11package="gtk+-x11-$gtkabi"
2104 if test "$gtkabi" = "3.0" ; then
2105 gtkversion="3.0.0"
2106 else
2107 gtkversion="2.18.0"
2109 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2110 gtk_cflags=`$pkg_config --cflags $gtkpackage`
2111 gtk_libs=`$pkg_config --libs $gtkpackage`
2112 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2113 gtk_cflags="$gtk_cflags $x11_cflags"
2114 gtk_libs="$gtk_libs $x11_libs"
2116 libs_softmmu="$gtk_libs $libs_softmmu"
2117 gtk="yes"
2118 elif test "$gtk" = "yes"; then
2119 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2120 else
2121 gtk="no"
2126 ##########################################
2127 # GNUTLS probe
2129 if test "$gnutls" != "no"; then
2130 if $pkg_config --exists "gnutls"; then
2131 gnutls_cflags=`$pkg_config --cflags gnutls`
2132 gnutls_libs=`$pkg_config --libs gnutls`
2133 libs_softmmu="$gnutls_libs $libs_softmmu"
2134 libs_tools="$gnutls_libs $libs_tools"
2135 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2136 gnutls="yes"
2138 # gnutls_hash_init requires >= 2.9.10
2139 if $pkg_config --exists "gnutls >= 2.9.10"; then
2140 gnutls_hash="yes"
2141 else
2142 gnutls_hash="no"
2144 elif test "$gnutls" = "yes"; then
2145 feature_not_found "gnutls" "Install gnutls devel"
2146 else
2147 gnutls="no"
2148 gnutls_hash="no"
2150 else
2151 gnutls_hash="no"
2155 ##########################################
2156 # VTE probe
2158 if test "$vte" != "no"; then
2159 if test "$gtkabi" = "3.0"; then
2160 vtepackage="vte-2.90"
2161 vteversion="0.32.0"
2162 else
2163 vtepackage="vte"
2164 vteversion="0.24.0"
2166 if $pkg_config --exists "$vtepackage >= $vteversion"; then
2167 vte_cflags=`$pkg_config --cflags $vtepackage`
2168 vte_libs=`$pkg_config --libs $vtepackage`
2169 libs_softmmu="$vte_libs $libs_softmmu"
2170 vte="yes"
2171 elif test "$vte" = "yes"; then
2172 if test "$gtkabi" = "3.0"; then
2173 feature_not_found "vte" "Install libvte-2.90 devel"
2174 else
2175 feature_not_found "vte" "Install libvte devel"
2177 else
2178 vte="no"
2182 ##########################################
2183 # SDL probe
2185 # Look for sdl configuration program (pkg-config or sdl-config). Try
2186 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2188 if test $sdlabi = "2.0"; then
2189 sdl_config=$sdl2_config
2190 sdlname=sdl2
2191 sdlconfigname=sdl2_config
2192 else
2193 sdlname=sdl
2194 sdlconfigname=sdl_config
2197 if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2198 sdl_config=$sdlconfigname
2201 if $pkg_config $sdlname --exists; then
2202 sdlconfig="$pkg_config $sdlname"
2203 _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
2204 elif has ${sdl_config}; then
2205 sdlconfig="$sdl_config"
2206 _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2207 else
2208 if test "$sdl" = "yes" ; then
2209 feature_not_found "sdl" "Install SDL devel"
2211 sdl=no
2213 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2214 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2217 sdl_too_old=no
2218 if test "$sdl" != "no" ; then
2219 cat > $TMPC << EOF
2220 #include <SDL.h>
2221 #undef main /* We don't want SDL to override our main() */
2222 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2224 sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
2225 if test "$static" = "yes" ; then
2226 sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2227 else
2228 sdl_libs=`$sdlconfig --libs 2> /dev/null`
2230 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2231 if test "$_sdlversion" -lt 121 ; then
2232 sdl_too_old=yes
2233 else
2234 if test "$cocoa" = "no" ; then
2235 sdl=yes
2239 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2240 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2241 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2242 sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2243 sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
2245 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2247 else
2248 sdl=no
2250 fi # static link
2251 else # sdl not found
2252 if test "$sdl" = "yes" ; then
2253 feature_not_found "sdl" "Install SDL devel"
2255 sdl=no
2256 fi # sdl compile test
2259 if test "$sdl" = "yes" ; then
2260 cat > $TMPC <<EOF
2261 #include <SDL.h>
2262 #if defined(SDL_VIDEO_DRIVER_X11)
2263 #include <X11/XKBlib.h>
2264 #else
2265 #error No x11 support
2266 #endif
2267 int main(void) { return 0; }
2269 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2270 sdl_cflags="$sdl_cflags $x11_cflags"
2271 sdl_libs="$sdl_libs $x11_libs"
2273 libs_softmmu="$sdl_libs $libs_softmmu"
2276 ##########################################
2277 # RDMA needs OpenFabrics libraries
2278 if test "$rdma" != "no" ; then
2279 cat > $TMPC <<EOF
2280 #include <rdma/rdma_cma.h>
2281 int main(void) { return 0; }
2283 rdma_libs="-lrdmacm -libverbs"
2284 if compile_prog "" "$rdma_libs" ; then
2285 rdma="yes"
2286 libs_softmmu="$libs_softmmu $rdma_libs"
2287 else
2288 if test "$rdma" = "yes" ; then
2289 error_exit \
2290 " OpenFabrics librdmacm/libibverbs not present." \
2291 " Your options:" \
2292 " (1) Fast: Install infiniband packages from your distro." \
2293 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2294 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2296 rdma="no"
2300 ##########################################
2301 # VNC TLS/WS detection
2302 if test "$vnc" = "yes" -a \( "$vnc_tls" != "no" -o "$vnc_ws" != "no" \) ; then
2303 cat > $TMPC <<EOF
2304 #include <gnutls/gnutls.h>
2305 int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
2307 vnc_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2308 vnc_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2309 if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then
2310 if test "$vnc_tls" != "no" ; then
2311 vnc_tls=yes
2313 if test "$vnc_ws" != "no" ; then
2314 vnc_ws=yes
2316 libs_softmmu="$vnc_tls_libs $libs_softmmu"
2317 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_tls_cflags"
2318 else
2319 if test "$vnc_tls" = "yes" ; then
2320 feature_not_found "vnc-tls" "Install gnutls devel"
2322 if test "$vnc_ws" = "yes" ; then
2323 feature_not_found "vnc-ws" "Install gnutls devel"
2325 vnc_tls=no
2326 vnc_ws=no
2330 ##########################################
2331 # Quorum probe (check for gnutls)
2332 if test "$quorum" != "no" ; then
2333 cat > $TMPC <<EOF
2334 #include <gnutls/gnutls.h>
2335 #include <gnutls/crypto.h>
2336 int main(void) {char data[4096], digest[32];
2337 gnutls_hash_fast(GNUTLS_DIG_SHA256, data, 4096, digest);
2338 return 0;
2341 quorum_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2342 quorum_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2343 if compile_prog "$quorum_tls_cflags" "$quorum_tls_libs" ; then
2344 qcow_tls=yes
2345 libs_softmmu="$quorum_tls_libs $libs_softmmu"
2346 libs_tools="$quorum_tls_libs $libs_softmmu"
2347 QEMU_CFLAGS="$QEMU_CFLAGS $quorum_tls_cflags"
2348 quorum="yes"
2349 else
2350 if test "$quorum" = "yes"; then
2351 feature_not_found "gnutls" "gnutls > 2.10.0 required to compile Quorum"
2353 quorum="no"
2357 ##########################################
2358 # VNC SASL detection
2359 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2360 cat > $TMPC <<EOF
2361 #include <sasl/sasl.h>
2362 #include <stdio.h>
2363 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2365 # Assuming Cyrus-SASL installed in /usr prefix
2366 vnc_sasl_cflags=""
2367 vnc_sasl_libs="-lsasl2"
2368 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2369 vnc_sasl=yes
2370 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2371 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2372 else
2373 if test "$vnc_sasl" = "yes" ; then
2374 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2376 vnc_sasl=no
2380 ##########################################
2381 # VNC JPEG detection
2382 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2383 cat > $TMPC <<EOF
2384 #include <stdio.h>
2385 #include <jpeglib.h>
2386 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2388 vnc_jpeg_cflags=""
2389 vnc_jpeg_libs="-ljpeg"
2390 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2391 vnc_jpeg=yes
2392 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2393 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2394 else
2395 if test "$vnc_jpeg" = "yes" ; then
2396 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2398 vnc_jpeg=no
2402 ##########################################
2403 # VNC PNG detection
2404 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2405 cat > $TMPC <<EOF
2406 //#include <stdio.h>
2407 #include <png.h>
2408 #include <stddef.h>
2409 int main(void) {
2410 png_structp png_ptr;
2411 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2412 return png_ptr != 0;
2415 if $pkg_config libpng --exists; then
2416 vnc_png_cflags=`$pkg_config libpng --cflags`
2417 vnc_png_libs=`$pkg_config libpng --libs`
2418 else
2419 vnc_png_cflags=""
2420 vnc_png_libs="-lpng"
2422 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2423 vnc_png=yes
2424 libs_softmmu="$vnc_png_libs $libs_softmmu"
2425 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2426 else
2427 if test "$vnc_png" = "yes" ; then
2428 feature_not_found "vnc-png" "Install libpng devel"
2430 vnc_png=no
2434 ##########################################
2435 # fnmatch() probe, used for ACL routines
2436 fnmatch="no"
2437 cat > $TMPC << EOF
2438 #include <fnmatch.h>
2439 int main(void)
2441 fnmatch("foo", "foo", 0);
2442 return 0;
2445 if compile_prog "" "" ; then
2446 fnmatch="yes"
2449 ##########################################
2450 # uuid_generate() probe, used for vdi block driver
2451 # Note that on some systems (notably MacOSX) no extra library
2452 # need be linked to get the uuid functions.
2453 if test "$uuid" != "no" ; then
2454 uuid_libs="-luuid"
2455 cat > $TMPC << EOF
2456 #include <uuid/uuid.h>
2457 int main(void)
2459 uuid_t my_uuid;
2460 uuid_generate(my_uuid);
2461 return 0;
2464 if compile_prog "" "" ; then
2465 uuid="yes"
2466 elif compile_prog "" "$uuid_libs" ; then
2467 uuid="yes"
2468 libs_softmmu="$uuid_libs $libs_softmmu"
2469 libs_tools="$uuid_libs $libs_tools"
2470 else
2471 if test "$uuid" = "yes" ; then
2472 feature_not_found "uuid" "Install libuuid devel"
2474 uuid=no
2478 if test "$vhdx" = "yes" ; then
2479 if test "$uuid" = "no" ; then
2480 error_exit "uuid required for VHDX support"
2482 elif test "$vhdx" != "no" ; then
2483 if test "$uuid" = "yes" ; then
2484 vhdx=yes
2485 else
2486 vhdx=no
2490 ##########################################
2491 # xfsctl() probe, used for raw-posix
2492 if test "$xfs" != "no" ; then
2493 cat > $TMPC << EOF
2494 #include <stddef.h> /* NULL */
2495 #include <xfs/xfs.h>
2496 int main(void)
2498 xfsctl(NULL, 0, 0, NULL);
2499 return 0;
2502 if compile_prog "" "" ; then
2503 xfs="yes"
2504 else
2505 if test "$xfs" = "yes" ; then
2506 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2508 xfs=no
2512 ##########################################
2513 # vde libraries probe
2514 if test "$vde" != "no" ; then
2515 vde_libs="-lvdeplug"
2516 cat > $TMPC << EOF
2517 #include <libvdeplug.h>
2518 int main(void)
2520 struct vde_open_args a = {0, 0, 0};
2521 char s[] = "";
2522 vde_open(s, s, &a);
2523 return 0;
2526 if compile_prog "" "$vde_libs" ; then
2527 vde=yes
2528 libs_softmmu="$vde_libs $libs_softmmu"
2529 libs_tools="$vde_libs $libs_tools"
2530 else
2531 if test "$vde" = "yes" ; then
2532 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2534 vde=no
2538 ##########################################
2539 # netmap support probe
2540 # Apart from looking for netmap headers, we make sure that the host API version
2541 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2542 # a minor/major version number. Minor new features will be marked with values up
2543 # to 15, and if something happens that requires a change to the backend we will
2544 # move above 15, submit the backend fixes and modify this two bounds.
2545 if test "$netmap" != "no" ; then
2546 cat > $TMPC << EOF
2547 #include <inttypes.h>
2548 #include <net/if.h>
2549 #include <net/netmap.h>
2550 #include <net/netmap_user.h>
2551 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2552 #error
2553 #endif
2554 int main(void) { return 0; }
2556 if compile_prog "" "" ; then
2557 netmap=yes
2558 else
2559 if test "$netmap" = "yes" ; then
2560 feature_not_found "netmap"
2562 netmap=no
2566 ##########################################
2567 # libcap-ng library probe
2568 if test "$cap_ng" != "no" ; then
2569 cap_libs="-lcap-ng"
2570 cat > $TMPC << EOF
2571 #include <cap-ng.h>
2572 int main(void)
2574 capng_capability_to_name(CAPNG_EFFECTIVE);
2575 return 0;
2578 if compile_prog "" "$cap_libs" ; then
2579 cap_ng=yes
2580 libs_tools="$cap_libs $libs_tools"
2581 else
2582 if test "$cap_ng" = "yes" ; then
2583 feature_not_found "cap_ng" "Install libcap-ng devel"
2585 cap_ng=no
2589 ##########################################
2590 # Sound support libraries probe
2592 audio_drv_probe()
2594 drv=$1
2595 hdr=$2
2596 lib=$3
2597 exp=$4
2598 cfl=$5
2599 cat > $TMPC << EOF
2600 #include <$hdr>
2601 int main(void) { $exp }
2603 if compile_prog "$cfl" "$lib" ; then
2605 else
2606 error_exit "$drv check failed" \
2607 "Make sure to have the $drv libs and headers installed."
2611 audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2612 for drv in $audio_drv_list; do
2613 case $drv in
2614 alsa)
2615 audio_drv_probe $drv alsa/asoundlib.h -lasound \
2616 "return snd_pcm_close((snd_pcm_t *)0);"
2617 libs_softmmu="-lasound $libs_softmmu"
2621 audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2622 "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2623 libs_softmmu="-lpulse $libs_softmmu"
2624 audio_pt_int="yes"
2627 coreaudio)
2628 libs_softmmu="-framework CoreAudio $libs_softmmu"
2631 dsound)
2632 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2633 audio_win_int="yes"
2636 oss)
2637 libs_softmmu="$oss_lib $libs_softmmu"
2640 sdl|wav)
2641 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2645 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2646 error_exit "Unknown driver '$drv' selected" \
2647 "Possible drivers are: $audio_possible_drivers"
2650 esac
2651 done
2653 ##########################################
2654 # BrlAPI probe
2656 if test "$brlapi" != "no" ; then
2657 brlapi_libs="-lbrlapi"
2658 cat > $TMPC << EOF
2659 #include <brlapi.h>
2660 #include <stddef.h>
2661 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2663 if compile_prog "" "$brlapi_libs" ; then
2664 brlapi=yes
2665 libs_softmmu="$brlapi_libs $libs_softmmu"
2666 else
2667 if test "$brlapi" = "yes" ; then
2668 feature_not_found "brlapi" "Install brlapi devel"
2670 brlapi=no
2674 ##########################################
2675 # curses probe
2676 if test "$curses" != "no" ; then
2677 if test "$mingw32" = "yes" ; then
2678 curses_list="-lpdcurses"
2679 else
2680 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2682 curses_found=no
2683 cat > $TMPC << EOF
2684 #include <curses.h>
2685 int main(void) {
2686 const char *s = curses_version();
2687 resize_term(0, 0);
2688 return s != 0;
2691 IFS=:
2692 for curses_lib in $curses_list; do
2693 unset IFS
2694 if compile_prog "" "$curses_lib" ; then
2695 curses_found=yes
2696 libs_softmmu="$curses_lib $libs_softmmu"
2697 break
2699 done
2700 unset IFS
2701 if test "$curses_found" = "yes" ; then
2702 curses=yes
2703 else
2704 if test "$curses" = "yes" ; then
2705 feature_not_found "curses" "Install ncurses devel"
2707 curses=no
2711 ##########################################
2712 # curl probe
2713 if test "$curl" != "no" ; then
2714 if $pkg_config libcurl --exists; then
2715 curlconfig="$pkg_config libcurl"
2716 else
2717 curlconfig=curl-config
2719 cat > $TMPC << EOF
2720 #include <curl/curl.h>
2721 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2723 curl_cflags=`$curlconfig --cflags 2>/dev/null`
2724 curl_libs=`$curlconfig --libs 2>/dev/null`
2725 if compile_prog "$curl_cflags" "$curl_libs" ; then
2726 curl=yes
2727 else
2728 if test "$curl" = "yes" ; then
2729 feature_not_found "curl" "Install libcurl devel"
2731 curl=no
2733 fi # test "$curl"
2735 ##########################################
2736 # bluez support probe
2737 if test "$bluez" != "no" ; then
2738 cat > $TMPC << EOF
2739 #include <bluetooth/bluetooth.h>
2740 int main(void) { return bt_error(0); }
2742 bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2743 bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
2744 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2745 bluez=yes
2746 libs_softmmu="$bluez_libs $libs_softmmu"
2747 else
2748 if test "$bluez" = "yes" ; then
2749 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2751 bluez="no"
2755 ##########################################
2756 # glib support probe
2758 glib_req_ver=2.22
2759 glib_modules=gthread-2.0
2760 if test "$modules" = yes; then
2761 glib_modules="$glib_modules gmodule-2.0"
2764 for i in $glib_modules; do
2765 if $pkg_config --atleast-version=$glib_req_ver $i; then
2766 glib_cflags=`$pkg_config --cflags $i`
2767 glib_libs=`$pkg_config --libs $i`
2768 CFLAGS="$glib_cflags $CFLAGS"
2769 LIBS="$glib_libs $LIBS"
2770 libs_qga="$glib_libs $libs_qga"
2771 else
2772 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2774 done
2776 # g_test_trap_subprocess added in 2.38. Used by some tests.
2777 glib_subprocess=yes
2778 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2779 glib_subprocess=no
2782 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
2783 cat > $TMPC << EOF
2784 #include <glib.h>
2785 int main(void) { return 0; }
2787 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
2788 if cc_has_warning_flag "-Wno-unknown-attributes"; then
2789 glib_cflags="-Wno-unknown-attributes $glib_cflags"
2790 CFLAGS="-Wno-unknown-attributes $CFLAGS"
2794 ##########################################
2795 # SHA command probe for modules
2796 if test "$modules" = yes; then
2797 shacmd_probe="sha1sum sha1 shasum"
2798 for c in $shacmd_probe; do
2799 if has $c; then
2800 shacmd="$c"
2801 break
2803 done
2804 if test "$shacmd" = ""; then
2805 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2809 ##########################################
2810 # pixman support probe
2812 if test "$pixman" = ""; then
2813 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
2814 pixman="none"
2815 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
2816 pixman="system"
2817 else
2818 pixman="internal"
2821 if test "$pixman" = "none"; then
2822 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
2823 error_exit "pixman disabled but system emulation or tools build" \
2824 "enabled. You can turn off pixman only if you also" \
2825 "disable all system emulation targets and the tools" \
2826 "build with '--disable-tools --disable-system'."
2828 pixman_cflags=
2829 pixman_libs=
2830 elif test "$pixman" = "system"; then
2831 # pixman version has been checked above
2832 pixman_cflags=`$pkg_config --cflags pixman-1`
2833 pixman_libs=`$pkg_config --libs pixman-1`
2834 else
2835 if test ! -d ${source_path}/pixman/pixman; then
2836 error_exit "pixman >= 0.21.8 not present. Your options:" \
2837 " (1) Preferred: Install the pixman devel package (any recent" \
2838 " distro should have packages as Xorg needs pixman too)." \
2839 " (2) Fetch the pixman submodule, using:" \
2840 " git submodule update --init pixman"
2842 mkdir -p pixman/pixman
2843 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
2844 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
2847 ##########################################
2848 # libcap probe
2850 if test "$cap" != "no" ; then
2851 cat > $TMPC <<EOF
2852 #include <stdio.h>
2853 #include <sys/capability.h>
2854 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
2856 if compile_prog "" "-lcap" ; then
2857 cap=yes
2858 else
2859 cap=no
2863 ##########################################
2864 # pthread probe
2865 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
2867 pthread=no
2868 cat > $TMPC << EOF
2869 #include <pthread.h>
2870 static void *f(void *p) { return NULL; }
2871 int main(void) {
2872 pthread_t thread;
2873 pthread_create(&thread, 0, f, 0);
2874 return 0;
2877 if compile_prog "" "" ; then
2878 pthread=yes
2879 else
2880 for pthread_lib in $PTHREADLIBS_LIST; do
2881 if compile_prog "" "$pthread_lib" ; then
2882 pthread=yes
2883 found=no
2884 for lib_entry in $LIBS; do
2885 if test "$lib_entry" = "$pthread_lib"; then
2886 found=yes
2887 break
2889 done
2890 if test "$found" = "no"; then
2891 LIBS="$pthread_lib $LIBS"
2893 break
2895 done
2898 if test "$mingw32" != yes -a "$pthread" = no; then
2899 error_exit "pthread check failed" \
2900 "Make sure to have the pthread libs and headers installed."
2903 # check for pthread_setname_np
2904 pthread_setname_np=no
2905 cat > $TMPC << EOF
2906 #include <pthread.h>
2908 static void *f(void *p) { return NULL; }
2909 int main(void)
2911 pthread_t thread;
2912 pthread_create(&thread, 0, f, 0);
2913 pthread_setname_np(thread, "QEMU");
2914 return 0;
2917 if compile_prog "" "$pthread_lib" ; then
2918 pthread_setname_np=yes
2921 ##########################################
2922 # rbd probe
2923 if test "$rbd" != "no" ; then
2924 cat > $TMPC <<EOF
2925 #include <stdio.h>
2926 #include <rbd/librbd.h>
2927 int main(void) {
2928 rados_t cluster;
2929 rados_create(&cluster, NULL);
2930 return 0;
2933 rbd_libs="-lrbd -lrados"
2934 if compile_prog "" "$rbd_libs" ; then
2935 rbd=yes
2936 else
2937 if test "$rbd" = "yes" ; then
2938 feature_not_found "rados block device" "Install librbd/ceph devel"
2940 rbd=no
2944 ##########################################
2945 # libssh2 probe
2946 min_libssh2_version=1.2.8
2947 if test "$libssh2" != "no" ; then
2948 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
2949 libssh2_cflags=`$pkg_config libssh2 --cflags`
2950 libssh2_libs=`$pkg_config libssh2 --libs`
2951 libssh2=yes
2952 else
2953 if test "$libssh2" = "yes" ; then
2954 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
2956 libssh2=no
2960 ##########################################
2961 # libssh2_sftp_fsync probe
2963 if test "$libssh2" = "yes"; then
2964 cat > $TMPC <<EOF
2965 #include <stdio.h>
2966 #include <libssh2.h>
2967 #include <libssh2_sftp.h>
2968 int main(void) {
2969 LIBSSH2_SESSION *session;
2970 LIBSSH2_SFTP *sftp;
2971 LIBSSH2_SFTP_HANDLE *sftp_handle;
2972 session = libssh2_session_init ();
2973 sftp = libssh2_sftp_init (session);
2974 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
2975 libssh2_sftp_fsync (sftp_handle);
2976 return 0;
2979 # libssh2_cflags/libssh2_libs defined in previous test.
2980 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
2981 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
2985 ##########################################
2986 # linux-aio probe
2988 if test "$linux_aio" != "no" ; then
2989 cat > $TMPC <<EOF
2990 #include <libaio.h>
2991 #include <sys/eventfd.h>
2992 #include <stddef.h>
2993 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
2995 if compile_prog "" "-laio" ; then
2996 linux_aio=yes
2997 else
2998 if test "$linux_aio" = "yes" ; then
2999 feature_not_found "linux AIO" "Install libaio devel"
3001 linux_aio=no
3005 ##########################################
3006 # TPM passthrough is only on x86 Linux
3008 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3009 tpm_passthrough=$tpm
3010 else
3011 tpm_passthrough=no
3014 ##########################################
3015 # attr probe
3017 if test "$attr" != "no" ; then
3018 cat > $TMPC <<EOF
3019 #include <stdio.h>
3020 #include <sys/types.h>
3021 #ifdef CONFIG_LIBATTR
3022 #include <attr/xattr.h>
3023 #else
3024 #include <sys/xattr.h>
3025 #endif
3026 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3028 if compile_prog "" "" ; then
3029 attr=yes
3030 # Older distros have <attr/xattr.h>, and need -lattr:
3031 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3032 attr=yes
3033 LIBS="-lattr $LIBS"
3034 libattr=yes
3035 else
3036 if test "$attr" = "yes" ; then
3037 feature_not_found "ATTR" "Install libc6 or libattr devel"
3039 attr=no
3043 ##########################################
3044 # iovec probe
3045 cat > $TMPC <<EOF
3046 #include <sys/types.h>
3047 #include <sys/uio.h>
3048 #include <unistd.h>
3049 int main(void) { return sizeof(struct iovec); }
3051 iovec=no
3052 if compile_prog "" "" ; then
3053 iovec=yes
3056 ##########################################
3057 # preadv probe
3058 cat > $TMPC <<EOF
3059 #include <sys/types.h>
3060 #include <sys/uio.h>
3061 #include <unistd.h>
3062 int main(void) { return preadv(0, 0, 0, 0); }
3064 preadv=no
3065 if compile_prog "" "" ; then
3066 preadv=yes
3069 ##########################################
3070 # fdt probe
3071 # fdt support is mandatory for at least some target architectures,
3072 # so insist on it if we're building those system emulators.
3073 fdt_required=no
3074 for target in $target_list; do
3075 case $target in
3076 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3077 fdt_required=yes
3079 esac
3080 done
3082 if test "$fdt_required" = "yes"; then
3083 if test "$fdt" = "no"; then
3084 error_exit "fdt disabled but some requested targets require it." \
3085 "You can turn off fdt only if you also disable all the system emulation" \
3086 "targets which need it (by specifying a cut down --target-list)."
3088 fdt=yes
3091 if test "$fdt" != "no" ; then
3092 fdt_libs="-lfdt"
3093 # explicitly check for libfdt_env.h as it is missing in some stable installs
3094 # and test for required functions to make sure we are on a version >= 1.4.0
3095 cat > $TMPC << EOF
3096 #include <libfdt.h>
3097 #include <libfdt_env.h>
3098 int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3100 if compile_prog "" "$fdt_libs" ; then
3101 # system DTC is good - use it
3102 fdt=yes
3103 elif test -d ${source_path}/dtc/libfdt ; then
3104 # have submodule DTC - use it
3105 fdt=yes
3106 dtc_internal="yes"
3107 mkdir -p dtc
3108 if [ "$pwd_is_source_path" != "y" ] ; then
3109 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3110 symlink "$source_path/dtc/scripts" "dtc/scripts"
3112 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3113 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3114 elif test "$fdt" = "yes" ; then
3115 # have neither and want - prompt for system/submodule install
3116 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3117 " (1) Preferred: Install the DTC (libfdt) devel package" \
3118 " (2) Fetch the DTC submodule, using:" \
3119 " git submodule update --init dtc"
3120 else
3121 # don't have and don't want
3122 fdt_libs=
3123 fdt=no
3127 libs_softmmu="$libs_softmmu $fdt_libs"
3129 ##########################################
3130 # opengl probe (for sdl2, milkymist-tmu2)
3132 # GLX probe, used by milkymist-tmu2
3133 # this is temporary, code will be switched to egl mid-term.
3134 cat > $TMPC << EOF
3135 #include <X11/Xlib.h>
3136 #include <GL/gl.h>
3137 #include <GL/glx.h>
3138 int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
3140 if compile_prog "" "-lGL -lX11" ; then
3141 have_glx=yes
3142 else
3143 have_glx=no
3146 if test "$opengl" != "no" ; then
3147 opengl_pkgs="gl glesv2 epoxy egl"
3148 if $pkg_config $opengl_pkgs x11 && test "$have_glx" = "yes"; then
3149 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3150 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3151 opengl=yes
3152 else
3153 if test "$opengl" = "yes" ; then
3154 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3156 opengl_cflags=""
3157 opengl_libs=""
3158 opengl=no
3163 ##########################################
3164 # archipelago probe
3165 if test "$archipelago" != "no" ; then
3166 cat > $TMPC <<EOF
3167 #include <stdio.h>
3168 #include <xseg/xseg.h>
3169 #include <xseg/protocol.h>
3170 int main(void) {
3171 xseg_initialize();
3172 return 0;
3175 archipelago_libs=-lxseg
3176 if compile_prog "" "$archipelago_libs"; then
3177 archipelago="yes"
3178 libs_tools="$archipelago_libs $libs_tools"
3179 libs_softmmu="$archipelago_libs $libs_softmmu"
3181 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3182 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3183 echo "license and therefore prevent redistribution."
3184 echo
3185 echo "To disable Archipelago, use --disable-archipelago"
3186 else
3187 if test "$archipelago" = "yes" ; then
3188 feature_not_found "Archipelago backend support" "Install libxseg devel"
3190 archipelago="no"
3195 ##########################################
3196 # glusterfs probe
3197 if test "$glusterfs" != "no" ; then
3198 if $pkg_config --atleast-version=3 glusterfs-api; then
3199 glusterfs="yes"
3200 glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3201 glusterfs_libs=`$pkg_config --libs glusterfs-api`
3202 if $pkg_config --atleast-version=5 glusterfs-api; then
3203 glusterfs_discard="yes"
3205 if $pkg_config --atleast-version=6 glusterfs-api; then
3206 glusterfs_zerofill="yes"
3208 else
3209 if test "$glusterfs" = "yes" ; then
3210 feature_not_found "GlusterFS backend support" \
3211 "Install glusterfs-api devel >= 3"
3213 glusterfs="no"
3217 # Check for inotify functions when we are building linux-user
3218 # emulator. This is done because older glibc versions don't
3219 # have syscall stubs for these implemented. In that case we
3220 # don't provide them even if kernel supports them.
3222 inotify=no
3223 cat > $TMPC << EOF
3224 #include <sys/inotify.h>
3227 main(void)
3229 /* try to start inotify */
3230 return inotify_init();
3233 if compile_prog "" "" ; then
3234 inotify=yes
3237 inotify1=no
3238 cat > $TMPC << EOF
3239 #include <sys/inotify.h>
3242 main(void)
3244 /* try to start inotify */
3245 return inotify_init1(0);
3248 if compile_prog "" "" ; then
3249 inotify1=yes
3252 # check if utimensat and futimens are supported
3253 utimens=no
3254 cat > $TMPC << EOF
3255 #define _ATFILE_SOURCE
3256 #include <stddef.h>
3257 #include <fcntl.h>
3258 #include <sys/stat.h>
3260 int main(void)
3262 utimensat(AT_FDCWD, "foo", NULL, 0);
3263 futimens(0, NULL);
3264 return 0;
3267 if compile_prog "" "" ; then
3268 utimens=yes
3271 # check if pipe2 is there
3272 pipe2=no
3273 cat > $TMPC << EOF
3274 #include <unistd.h>
3275 #include <fcntl.h>
3277 int main(void)
3279 int pipefd[2];
3280 return pipe2(pipefd, O_CLOEXEC);
3283 if compile_prog "" "" ; then
3284 pipe2=yes
3287 # check if accept4 is there
3288 accept4=no
3289 cat > $TMPC << EOF
3290 #include <sys/socket.h>
3291 #include <stddef.h>
3293 int main(void)
3295 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3296 return 0;
3299 if compile_prog "" "" ; then
3300 accept4=yes
3303 # check if tee/splice is there. vmsplice was added same time.
3304 splice=no
3305 cat > $TMPC << EOF
3306 #include <unistd.h>
3307 #include <fcntl.h>
3308 #include <limits.h>
3310 int main(void)
3312 int len, fd = 0;
3313 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3314 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3315 return 0;
3318 if compile_prog "" "" ; then
3319 splice=yes
3322 ##########################################
3323 # libnuma probe
3325 if test "$numa" != "no" ; then
3326 cat > $TMPC << EOF
3327 #include <numa.h>
3328 int main(void) { return numa_available(); }
3331 if compile_prog "" "-lnuma" ; then
3332 numa=yes
3333 libs_softmmu="-lnuma $libs_softmmu"
3334 else
3335 if test "$numa" = "yes" ; then
3336 feature_not_found "numa" "install numactl devel"
3338 numa=no
3342 ##########################################
3343 # tcmalloc probe
3345 if test "$tcmalloc" = "yes" ; then
3346 cat > $TMPC << EOF
3347 #include <stdlib.h>
3348 int main(void) { malloc(1); return 0; }
3351 if compile_prog "" "-ltcmalloc" ; then
3352 LIBS="-ltcmalloc $LIBS"
3353 else
3354 feature_not_found "tcmalloc" "install gperftools devel"
3358 ##########################################
3359 # signalfd probe
3360 signalfd="no"
3361 cat > $TMPC << EOF
3362 #include <unistd.h>
3363 #include <sys/syscall.h>
3364 #include <signal.h>
3365 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3368 if compile_prog "" "" ; then
3369 signalfd=yes
3372 # check if eventfd is supported
3373 eventfd=no
3374 cat > $TMPC << EOF
3375 #include <sys/eventfd.h>
3377 int main(void)
3379 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3382 if compile_prog "" "" ; then
3383 eventfd=yes
3386 # check for fallocate
3387 fallocate=no
3388 cat > $TMPC << EOF
3389 #include <fcntl.h>
3391 int main(void)
3393 fallocate(0, 0, 0, 0);
3394 return 0;
3397 if compile_prog "" "" ; then
3398 fallocate=yes
3401 # check for fallocate hole punching
3402 fallocate_punch_hole=no
3403 cat > $TMPC << EOF
3404 #include <fcntl.h>
3405 #include <linux/falloc.h>
3407 int main(void)
3409 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3410 return 0;
3413 if compile_prog "" "" ; then
3414 fallocate_punch_hole=yes
3417 # check that fallocate supports range zeroing inside the file
3418 fallocate_zero_range=no
3419 cat > $TMPC << EOF
3420 #include <fcntl.h>
3421 #include <linux/falloc.h>
3423 int main(void)
3425 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3426 return 0;
3429 if compile_prog "" "" ; then
3430 fallocate_zero_range=yes
3433 # check for posix_fallocate
3434 posix_fallocate=no
3435 cat > $TMPC << EOF
3436 #include <fcntl.h>
3438 int main(void)
3440 posix_fallocate(0, 0, 0);
3441 return 0;
3444 if compile_prog "" "" ; then
3445 posix_fallocate=yes
3448 # check for sync_file_range
3449 sync_file_range=no
3450 cat > $TMPC << EOF
3451 #include <fcntl.h>
3453 int main(void)
3455 sync_file_range(0, 0, 0, 0);
3456 return 0;
3459 if compile_prog "" "" ; then
3460 sync_file_range=yes
3463 # check for linux/fiemap.h and FS_IOC_FIEMAP
3464 fiemap=no
3465 cat > $TMPC << EOF
3466 #include <sys/ioctl.h>
3467 #include <linux/fs.h>
3468 #include <linux/fiemap.h>
3470 int main(void)
3472 ioctl(0, FS_IOC_FIEMAP, 0);
3473 return 0;
3476 if compile_prog "" "" ; then
3477 fiemap=yes
3480 # check for dup3
3481 dup3=no
3482 cat > $TMPC << EOF
3483 #include <unistd.h>
3485 int main(void)
3487 dup3(0, 0, 0);
3488 return 0;
3491 if compile_prog "" "" ; then
3492 dup3=yes
3495 # check for ppoll support
3496 ppoll=no
3497 cat > $TMPC << EOF
3498 #include <poll.h>
3500 int main(void)
3502 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3503 ppoll(&pfd, 1, 0, 0);
3504 return 0;
3507 if compile_prog "" "" ; then
3508 ppoll=yes
3511 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3512 prctl_pr_set_timerslack=no
3513 cat > $TMPC << EOF
3514 #include <sys/prctl.h>
3516 int main(void)
3518 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3519 return 0;
3522 if compile_prog "" "" ; then
3523 prctl_pr_set_timerslack=yes
3526 # check for epoll support
3527 epoll=no
3528 cat > $TMPC << EOF
3529 #include <sys/epoll.h>
3531 int main(void)
3533 epoll_create(0);
3534 return 0;
3537 if compile_prog "" "" ; then
3538 epoll=yes
3541 # epoll_create1 and epoll_pwait are later additions
3542 # so we must check separately for their presence
3543 epoll_create1=no
3544 cat > $TMPC << EOF
3545 #include <sys/epoll.h>
3547 int main(void)
3549 /* Note that we use epoll_create1 as a value, not as
3550 * a function being called. This is necessary so that on
3551 * old SPARC glibc versions where the function was present in
3552 * the library but not declared in the header file we will
3553 * fail the configure check. (Otherwise we will get a compiler
3554 * warning but not an error, and will proceed to fail the
3555 * qemu compile where we compile with -Werror.)
3557 return (int)(uintptr_t)&epoll_create1;
3560 if compile_prog "" "" ; then
3561 epoll_create1=yes
3564 epoll_pwait=no
3565 cat > $TMPC << EOF
3566 #include <sys/epoll.h>
3568 int main(void)
3570 epoll_pwait(0, 0, 0, 0, 0);
3571 return 0;
3574 if compile_prog "" "" ; then
3575 epoll_pwait=yes
3578 # check for sendfile support
3579 sendfile=no
3580 cat > $TMPC << EOF
3581 #include <sys/sendfile.h>
3583 int main(void)
3585 return sendfile(0, 0, 0, 0);
3588 if compile_prog "" "" ; then
3589 sendfile=yes
3592 # check for timerfd support (glibc 2.8 and newer)
3593 timerfd=no
3594 cat > $TMPC << EOF
3595 #include <sys/timerfd.h>
3597 int main(void)
3599 return(timerfd_create(CLOCK_REALTIME, 0));
3602 if compile_prog "" "" ; then
3603 timerfd=yes
3606 # check for setns and unshare support
3607 setns=no
3608 cat > $TMPC << EOF
3609 #include <sched.h>
3611 int main(void)
3613 int ret;
3614 ret = setns(0, 0);
3615 ret = unshare(0);
3616 return ret;
3619 if compile_prog "" "" ; then
3620 setns=yes
3623 # Check if tools are available to build documentation.
3624 if test "$docs" != "no" ; then
3625 if has makeinfo && has pod2man; then
3626 docs=yes
3627 else
3628 if test "$docs" = "yes" ; then
3629 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3631 docs=no
3635 # Search for bswap_32 function
3636 byteswap_h=no
3637 cat > $TMPC << EOF
3638 #include <byteswap.h>
3639 int main(void) { return bswap_32(0); }
3641 if compile_prog "" "" ; then
3642 byteswap_h=yes
3645 # Search for bswap32 function
3646 bswap_h=no
3647 cat > $TMPC << EOF
3648 #include <sys/endian.h>
3649 #include <sys/types.h>
3650 #include <machine/bswap.h>
3651 int main(void) { return bswap32(0); }
3653 if compile_prog "" "" ; then
3654 bswap_h=yes
3657 ##########################################
3658 # Do we have libiscsi >= 1.9.0
3659 if test "$libiscsi" != "no" ; then
3660 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3661 libiscsi="yes"
3662 libiscsi_cflags=$($pkg_config --cflags libiscsi)
3663 libiscsi_libs=$($pkg_config --libs libiscsi)
3664 else
3665 if test "$libiscsi" = "yes" ; then
3666 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3668 libiscsi="no"
3672 ##########################################
3673 # Do we need libm
3674 cat > $TMPC << EOF
3675 #include <math.h>
3676 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3678 if compile_prog "" "" ; then
3680 elif compile_prog "" "-lm" ; then
3681 LIBS="-lm $LIBS"
3682 libs_qga="-lm $libs_qga"
3683 else
3684 error_exit "libm check failed"
3687 ##########################################
3688 # Do we need librt
3689 # uClibc provides 2 versions of clock_gettime(), one with realtime
3690 # support and one without. This means that the clock_gettime() don't
3691 # need -lrt. We still need it for timer_create() so we check for this
3692 # function in addition.
3693 cat > $TMPC <<EOF
3694 #include <signal.h>
3695 #include <time.h>
3696 int main(void) {
3697 timer_create(CLOCK_REALTIME, NULL, NULL);
3698 return clock_gettime(CLOCK_REALTIME, NULL);
3702 if compile_prog "" "" ; then
3704 # we need pthread for static linking. use previous pthread test result
3705 elif compile_prog "" "$pthread_lib -lrt" ; then
3706 LIBS="$LIBS -lrt"
3707 libs_qga="$libs_qga -lrt"
3710 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3711 "$aix" != "yes" -a "$haiku" != "yes" ; then
3712 libs_softmmu="-lutil $libs_softmmu"
3715 ##########################################
3716 # spice probe
3717 if test "$spice" != "no" ; then
3718 cat > $TMPC << EOF
3719 #include <spice.h>
3720 int main(void) { spice_server_new(); return 0; }
3722 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3723 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3724 if $pkg_config --atleast-version=0.12.0 spice-server && \
3725 $pkg_config --atleast-version=0.12.3 spice-protocol && \
3726 compile_prog "$spice_cflags" "$spice_libs" ; then
3727 spice="yes"
3728 libs_softmmu="$libs_softmmu $spice_libs"
3729 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3730 spice_protocol_version=$($pkg_config --modversion spice-protocol)
3731 spice_server_version=$($pkg_config --modversion spice-server)
3732 else
3733 if test "$spice" = "yes" ; then
3734 feature_not_found "spice" \
3735 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3737 spice="no"
3741 # check for libcacard for smartcard support
3742 smartcard_cflags=""
3743 # TODO - what's the minimal nss version we support?
3744 if test "$smartcard_nss" != "no"; then
3745 cat > $TMPC << EOF
3746 #include <pk11pub.h>
3747 int main(void) { PK11_FreeSlot(0); return 0; }
3749 # FIXME: do not include $glib_* in here
3750 nss_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
3751 nss_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
3752 test_cflags="$nss_cflags"
3753 # The header files in nss < 3.13.3 have a bug which causes them to
3754 # emit a warning. If we're going to compile QEMU with -Werror, then
3755 # test that the headers don't have this bug. Otherwise we would pass
3756 # the configure test but fail to compile QEMU later.
3757 if test "$werror" = "yes"; then
3758 test_cflags="-Werror $test_cflags"
3760 if test -n "$libtool" &&
3761 $pkg_config --atleast-version=3.12.8 nss && \
3762 compile_prog "$test_cflags" "$nss_libs"; then
3763 smartcard_nss="yes"
3764 else
3765 if test "$smartcard_nss" = "yes"; then
3766 feature_not_found "nss" "Install nss devel >= 3.12.8"
3768 smartcard_nss="no"
3772 # check for libusb
3773 if test "$libusb" != "no" ; then
3774 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
3775 libusb="yes"
3776 libusb_cflags=$($pkg_config --cflags libusb-1.0)
3777 libusb_libs=$($pkg_config --libs libusb-1.0)
3778 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3779 libs_softmmu="$libs_softmmu $libusb_libs"
3780 else
3781 if test "$libusb" = "yes"; then
3782 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
3784 libusb="no"
3788 # check for usbredirparser for usb network redirection support
3789 if test "$usb_redir" != "no" ; then
3790 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
3791 usb_redir="yes"
3792 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3793 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
3794 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
3795 libs_softmmu="$libs_softmmu $usb_redir_libs"
3796 else
3797 if test "$usb_redir" = "yes"; then
3798 feature_not_found "usb-redir" "Install usbredir devel"
3800 usb_redir="no"
3804 ##########################################
3805 # check if we have VSS SDK headers for win
3807 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3808 case "$vss_win32_sdk" in
3809 "") vss_win32_include="-I$source_path" ;;
3810 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3811 # handle path with spaces. So we symlink the headers into ".sdk/vss".
3812 vss_win32_include="-I$source_path/.sdk/vss"
3813 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3815 *) vss_win32_include="-I$vss_win32_sdk"
3816 esac
3817 cat > $TMPC << EOF
3818 #define __MIDL_user_allocate_free_DEFINED__
3819 #include <inc/win2003/vss.h>
3820 int main(void) { return VSS_CTX_BACKUP; }
3822 if compile_prog "$vss_win32_include" "" ; then
3823 guest_agent_with_vss="yes"
3824 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3825 libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3826 else
3827 if test "$vss_win32_sdk" != "" ; then
3828 echo "ERROR: Please download and install Microsoft VSS SDK:"
3829 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3830 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3831 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
3832 echo "ERROR: The headers are extracted in the directory \`inc'."
3833 feature_not_found "VSS support"
3835 guest_agent_with_vss="no"
3839 ##########################################
3840 # lookup Windows platform SDK (if not specified)
3841 # The SDK is needed only to build .tlb (type library) file of guest agent
3842 # VSS provider from the source. It is usually unnecessary because the
3843 # pre-compiled .tlb file is included.
3845 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
3846 if test -z "$win_sdk"; then
3847 programfiles="$PROGRAMFILES"
3848 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3849 if test -n "$programfiles"; then
3850 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3851 else
3852 feature_not_found "Windows SDK"
3854 elif test "$win_sdk" = "no"; then
3855 win_sdk=""
3859 ##########################################
3860 # Guest agent Window MSI package
3862 if test "$guest_agent" != yes; then
3863 if test "$guest_agent_msi" = yes; then
3864 error_exit "MSI guest agent package requires guest agent enabled"
3866 guest_agent_msi=no
3867 elif test "$mingw32" != "yes"; then
3868 if test "$guest_agent_msi" = "yes"; then
3869 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
3871 guest_agent_msi=no
3872 elif ! has wixl; then
3873 if test "$guest_agent_msi" = "yes"; then
3874 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
3876 guest_agent_msi=no
3879 if test "$guest_agent_msi" != "no"; then
3880 if test "$guest_agent_with_vss" = "yes"; then
3881 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
3884 if test "$QEMU_GA_MANUFACTURER" = ""; then
3885 QEMU_GA_MANUFACTURER=QEMU
3888 if test "$QEMU_GA_DISTRO" = ""; then
3889 QEMU_GA_DISTRO=Linux
3892 if test "$QEMU_GA_VERSION" = ""; then
3893 QEMU_GA_VERSION=`cat $source_path/VERSION`
3896 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin"
3898 case "$cpu" in
3899 x86_64)
3900 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
3902 i386)
3903 QEMU_GA_MSI_ARCH="-D Arch=32"
3906 error_exit "CPU $cpu not supported for building installation package"
3908 esac
3911 ##########################################
3912 # check if we have fdatasync
3914 fdatasync=no
3915 cat > $TMPC << EOF
3916 #include <unistd.h>
3917 int main(void) {
3918 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
3919 return fdatasync(0);
3920 #else
3921 #error Not supported
3922 #endif
3925 if compile_prog "" "" ; then
3926 fdatasync=yes
3929 ##########################################
3930 # check if we have madvise
3932 madvise=no
3933 cat > $TMPC << EOF
3934 #include <sys/types.h>
3935 #include <sys/mman.h>
3936 #include <stddef.h>
3937 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
3939 if compile_prog "" "" ; then
3940 madvise=yes
3943 ##########################################
3944 # check if we have posix_madvise
3946 posix_madvise=no
3947 cat > $TMPC << EOF
3948 #include <sys/mman.h>
3949 #include <stddef.h>
3950 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
3952 if compile_prog "" "" ; then
3953 posix_madvise=yes
3956 ##########################################
3957 # check if we have usable SIGEV_THREAD_ID
3959 sigev_thread_id=no
3960 cat > $TMPC << EOF
3961 #include <signal.h>
3962 int main(void) {
3963 struct sigevent ev;
3964 ev.sigev_notify = SIGEV_THREAD_ID;
3965 ev._sigev_un._tid = 0;
3966 asm volatile("" : : "g"(&ev));
3967 return 0;
3970 if compile_prog "" "" ; then
3971 sigev_thread_id=yes
3974 ##########################################
3975 # check if trace backend exists
3977 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
3978 if test "$?" -ne 0 ; then
3979 error_exit "invalid trace backends" \
3980 "Please choose supported trace backends."
3983 ##########################################
3984 # For 'ust' backend, test if ust headers are present
3985 if have_backend "ust"; then
3986 cat > $TMPC << EOF
3987 #include <lttng/tracepoint.h>
3988 int main(void) { return 0; }
3990 if compile_prog "" "" ; then
3991 if $pkg_config lttng-ust --exists; then
3992 lttng_ust_libs=`$pkg_config --libs lttng-ust`
3993 else
3994 lttng_ust_libs="-llttng-ust"
3996 if $pkg_config liburcu-bp --exists; then
3997 urcu_bp_libs=`$pkg_config --libs liburcu-bp`
3998 else
3999 urcu_bp_libs="-lurcu-bp"
4002 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4003 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4004 else
4005 error_exit "Trace backend 'ust' missing lttng-ust header files"
4009 ##########################################
4010 # For 'dtrace' backend, test if 'dtrace' command is present
4011 if have_backend "dtrace"; then
4012 if ! has 'dtrace' ; then
4013 error_exit "dtrace command is not found in PATH $PATH"
4015 trace_backend_stap="no"
4016 if has 'stap' ; then
4017 trace_backend_stap="yes"
4021 ##########################################
4022 # check and set a backend for coroutine
4024 # We prefer ucontext, but it's not always possible. The fallback
4025 # is sigcontext. gthread is not selectable except explicitly, because
4026 # it is not functional enough to run QEMU proper. (It is occasionally
4027 # useful for debugging purposes.) On Windows the only valid backend
4028 # is the Windows-specific one.
4030 ucontext_works=no
4031 if test "$darwin" != "yes"; then
4032 cat > $TMPC << EOF
4033 #include <ucontext.h>
4034 #ifdef __stub_makecontext
4035 #error Ignoring glibc stub makecontext which will always fail
4036 #endif
4037 int main(void) { makecontext(0, 0, 0); return 0; }
4039 if compile_prog "" "" ; then
4040 ucontext_works=yes
4044 if test "$coroutine" = ""; then
4045 if test "$mingw32" = "yes"; then
4046 coroutine=win32
4047 elif test "$ucontext_works" = "yes"; then
4048 coroutine=ucontext
4049 else
4050 coroutine=sigaltstack
4052 else
4053 case $coroutine in
4054 windows)
4055 if test "$mingw32" != "yes"; then
4056 error_exit "'windows' coroutine backend only valid for Windows"
4058 # Unfortunately the user visible backend name doesn't match the
4059 # coroutine-*.c filename for this case, so we have to adjust it here.
4060 coroutine=win32
4062 ucontext)
4063 if test "$ucontext_works" != "yes"; then
4064 feature_not_found "ucontext"
4067 gthread|sigaltstack)
4068 if test "$mingw32" = "yes"; then
4069 error_exit "only the 'windows' coroutine backend is valid for Windows"
4073 error_exit "unknown coroutine backend $coroutine"
4075 esac
4078 if test "$coroutine_pool" = ""; then
4079 if test "$coroutine" = "gthread"; then
4080 coroutine_pool=no
4081 else
4082 coroutine_pool=yes
4085 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4086 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4089 ##########################################
4090 # check if we have open_by_handle_at
4092 open_by_handle_at=no
4093 cat > $TMPC << EOF
4094 #include <fcntl.h>
4095 #if !defined(AT_EMPTY_PATH)
4096 # error missing definition
4097 #else
4098 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4099 #endif
4101 if compile_prog "" "" ; then
4102 open_by_handle_at=yes
4105 ########################################
4106 # check if we have linux/magic.h
4108 linux_magic_h=no
4109 cat > $TMPC << EOF
4110 #include <linux/magic.h>
4111 int main(void) {
4112 return 0;
4115 if compile_prog "" "" ; then
4116 linux_magic_h=yes
4119 ########################################
4120 # check whether we can disable warning option with a pragma (this is needed
4121 # to silence warnings in the headers of some versions of external libraries).
4122 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4123 # only a warning.
4125 # If we can't selectively disable warning in the code, disable -Werror so that
4126 # the build doesn't fail anyway.
4128 pragma_disable_unused_but_set=no
4129 cat > $TMPC << EOF
4130 #pragma GCC diagnostic push
4131 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4132 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4133 #pragma GCC diagnostic pop
4135 int main(void) {
4136 return 0;
4139 if compile_prog "-Werror" "" ; then
4140 pragma_diagnostic_available=yes
4141 else
4142 werror=no
4145 ########################################
4146 # check if we have valgrind/valgrind.h
4148 valgrind_h=no
4149 cat > $TMPC << EOF
4150 #include <valgrind/valgrind.h>
4151 int main(void) {
4152 return 0;
4155 if compile_prog "" "" ; then
4156 valgrind_h=yes
4159 ########################################
4160 # check if environ is declared
4162 has_environ=no
4163 cat > $TMPC << EOF
4164 #include <unistd.h>
4165 int main(void) {
4166 environ = 0;
4167 return 0;
4170 if compile_prog "" "" ; then
4171 has_environ=yes
4174 ########################################
4175 # check if cpuid.h is usable.
4177 cpuid_h=no
4178 cat > $TMPC << EOF
4179 #include <cpuid.h>
4180 int main(void) {
4181 unsigned a, b, c, d;
4182 int max = __get_cpuid_max(0, 0);
4184 if (max >= 1) {
4185 __cpuid(1, a, b, c, d);
4188 if (max >= 7) {
4189 __cpuid_count(7, 0, a, b, c, d);
4192 return 0;
4195 if compile_prog "" "" ; then
4196 cpuid_h=yes
4199 ########################################
4200 # check if __[u]int128_t is usable.
4202 int128=no
4203 cat > $TMPC << EOF
4204 #if defined(__clang_major__) && defined(__clang_minor__)
4205 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4206 # error __int128_t does not work in CLANG before 3.2
4207 # endif
4208 #endif
4209 __int128_t a;
4210 __uint128_t b;
4211 int main (void) {
4212 a = a + b;
4213 b = a * b;
4214 a = a * a;
4215 return 0;
4218 if compile_prog "" "" ; then
4219 int128=yes
4222 ########################################
4223 # check if getauxval is available.
4225 getauxval=no
4226 cat > $TMPC << EOF
4227 #include <sys/auxv.h>
4228 int main(void) {
4229 return getauxval(AT_HWCAP) == 0;
4232 if compile_prog "" "" ; then
4233 getauxval=yes
4236 ########################################
4237 # check if ccache is interfering with
4238 # semantic analysis of macros
4240 ccache_cpp2=no
4241 cat > $TMPC << EOF
4242 static const int Z = 1;
4243 #define fn() ({ Z; })
4244 #define TAUT(X) ((X) == Z)
4245 #define PAREN(X, Y) (X == Y)
4246 #define ID(X) (X)
4247 int main(int argc, char *argv[])
4249 int x = 0, y = 0;
4250 x = ID(x);
4251 x = fn();
4252 fn();
4253 if (PAREN(x, y)) return 0;
4254 if (TAUT(Z)) return 0;
4255 return 0;
4259 if ! compile_object "-Werror"; then
4260 ccache_cpp2=yes
4263 ##########################################
4264 # End of CC checks
4265 # After here, no more $cc or $ld runs
4267 if test "$gcov" = "yes" ; then
4268 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4269 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4270 elif test "$debug" = "no" ; then
4271 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4274 ##########################################
4275 # Do we have libnfs
4276 if test "$libnfs" != "no" ; then
4277 if $pkg_config --atleast-version=1.9.3 libnfs; then
4278 libnfs="yes"
4279 libnfs_libs=$($pkg_config --libs libnfs)
4280 LIBS="$LIBS $libnfs_libs"
4281 else
4282 if test "$libnfs" = "yes" ; then
4283 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4285 libnfs="no"
4289 # Disable zero malloc errors for official releases unless explicitly told to
4290 # enable/disable
4291 if test -z "$zero_malloc" ; then
4292 if test "$z_version" = "50" ; then
4293 zero_malloc="no"
4294 else
4295 zero_malloc="yes"
4299 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4300 if test "$werror" = "yes"; then
4301 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4304 if test "$solaris" = "no" ; then
4305 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4306 LDFLAGS="-Wl,--warn-common $LDFLAGS"
4310 # test if pod2man has --utf8 option
4311 if pod2man --help | grep -q utf8; then
4312 POD2MAN="pod2man --utf8"
4313 else
4314 POD2MAN="pod2man"
4317 # Use ASLR, no-SEH and DEP if available
4318 if test "$mingw32" = "yes" ; then
4319 for flag in --dynamicbase --no-seh --nxcompat; do
4320 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4321 LDFLAGS="-Wl,$flag $LDFLAGS"
4323 done
4326 qemu_confdir=$sysconfdir$confsuffix
4327 qemu_moddir=$libdir$confsuffix
4328 qemu_datadir=$datadir$confsuffix
4329 qemu_localedir="$datadir/locale"
4331 tools=""
4332 if test "$want_tools" = "yes" ; then
4333 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4334 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4335 tools="qemu-nbd\$(EXESUF) $tools"
4338 if test "$softmmu" = yes ; then
4339 if test "$virtfs" != no ; then
4340 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4341 virtfs=yes
4342 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4343 else
4344 if test "$virtfs" = yes; then
4345 error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4347 virtfs=no
4351 if [ "$guest_agent" != "no" ]; then
4352 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4353 tools="qemu-ga\$(EXESUF) $tools"
4354 if [ "$mingw32" = "yes" -a "$guest_agent_with_vss" = "yes" ]; then
4355 tools="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb $tools"
4357 guest_agent=yes
4358 elif [ "$guest_agent" != yes ]; then
4359 guest_agent=no
4360 else
4361 error_exit "Guest agent is not supported on this platform"
4365 # Mac OS X ships with a broken assembler
4366 roms=
4367 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4368 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4369 "$softmmu" = yes ; then
4370 roms="optionrom"
4372 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4373 roms="$roms spapr-rtas"
4376 if test "$cpu" = "s390x" ; then
4377 roms="$roms s390-ccw"
4380 # Probe for the need for relocating the user-only binary.
4381 if test "$pie" = "no" ; then
4382 textseg_addr=
4383 case "$cpu" in
4384 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4385 # ??? Rationale for choosing this address
4386 textseg_addr=0x60000000
4388 mips)
4389 # A 256M aligned address, high in the address space, with enough
4390 # room for the code_gen_buffer above it before the stack.
4391 textseg_addr=0x60000000
4393 esac
4394 if [ -n "$textseg_addr" ]; then
4395 cat > $TMPC <<EOF
4396 int main(void) { return 0; }
4398 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4399 if ! compile_prog "" "$textseg_ldflags"; then
4400 # In case ld does not support -Ttext-segment, edit the default linker
4401 # script via sed to set the .text start addr. This is needed on FreeBSD
4402 # at least.
4403 $ld --verbose | sed \
4404 -e '1,/==================================================/d' \
4405 -e '/==================================================/,$d' \
4406 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4407 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4408 textseg_ldflags="-Wl,-T../config-host.ld"
4413 # prepend pixman and ftd flags after all config tests are done
4414 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4415 libs_softmmu="$pixman_libs $libs_softmmu"
4417 echo "Install prefix $prefix"
4418 echo "BIOS directory `eval echo $qemu_datadir`"
4419 echo "binary directory `eval echo $bindir`"
4420 echo "library directory `eval echo $libdir`"
4421 echo "module directory `eval echo $qemu_moddir`"
4422 echo "libexec directory `eval echo $libexecdir`"
4423 echo "include directory `eval echo $includedir`"
4424 echo "config directory `eval echo $sysconfdir`"
4425 if test "$mingw32" = "no" ; then
4426 echo "local state directory `eval echo $local_statedir`"
4427 echo "Manual directory `eval echo $mandir`"
4428 echo "ELF interp prefix $interp_prefix"
4429 else
4430 echo "local state directory queried at runtime"
4431 echo "Windows SDK $win_sdk"
4433 echo "Source path $source_path"
4434 echo "C compiler $cc"
4435 echo "Host C compiler $host_cc"
4436 echo "C++ compiler $cxx"
4437 echo "Objective-C compiler $objcc"
4438 echo "ARFLAGS $ARFLAGS"
4439 echo "CFLAGS $CFLAGS"
4440 echo "QEMU_CFLAGS $QEMU_CFLAGS"
4441 echo "LDFLAGS $LDFLAGS"
4442 echo "make $make"
4443 echo "install $install"
4444 echo "python $python"
4445 if test "$slirp" = "yes" ; then
4446 echo "smbd $smbd"
4448 echo "module support $modules"
4449 echo "host CPU $cpu"
4450 echo "host big endian $bigendian"
4451 echo "target list $target_list"
4452 echo "tcg debug enabled $debug_tcg"
4453 echo "gprof enabled $gprof"
4454 echo "sparse enabled $sparse"
4455 echo "strip binaries $strip_opt"
4456 echo "profiler $profiler"
4457 echo "static build $static"
4458 if test "$darwin" = "yes" ; then
4459 echo "Cocoa support $cocoa"
4461 echo "pixman $pixman"
4462 echo "SDL support $sdl"
4463 echo "GTK support $gtk"
4464 echo "GNUTLS support $gnutls"
4465 echo "GNUTLS hash $gnutls_hash"
4466 echo "VTE support $vte"
4467 echo "curses support $curses"
4468 echo "curl support $curl"
4469 echo "mingw32 support $mingw32"
4470 echo "Audio drivers $audio_drv_list"
4471 echo "Block whitelist (rw) $block_drv_rw_whitelist"
4472 echo "Block whitelist (ro) $block_drv_ro_whitelist"
4473 echo "VirtFS support $virtfs"
4474 echo "VNC support $vnc"
4475 if test "$vnc" = "yes" ; then
4476 echo "VNC TLS support $vnc_tls"
4477 echo "VNC SASL support $vnc_sasl"
4478 echo "VNC JPEG support $vnc_jpeg"
4479 echo "VNC PNG support $vnc_png"
4480 echo "VNC WS support $vnc_ws"
4482 if test -n "$sparc_cpu"; then
4483 echo "Target Sparc Arch $sparc_cpu"
4485 echo "xen support $xen"
4486 if test "$xen" = "yes" ; then
4487 echo "xen ctrl version $xen_ctrl_version"
4489 echo "brlapi support $brlapi"
4490 echo "bluez support $bluez"
4491 echo "Documentation $docs"
4492 echo "GUEST_BASE $guest_base"
4493 echo "PIE $pie"
4494 echo "vde support $vde"
4495 echo "netmap support $netmap"
4496 echo "Linux AIO support $linux_aio"
4497 echo "ATTR/XATTR support $attr"
4498 echo "Install blobs $blobs"
4499 echo "KVM support $kvm"
4500 echo "RDMA support $rdma"
4501 echo "TCG interpreter $tcg_interpreter"
4502 echo "fdt support $fdt"
4503 echo "preadv support $preadv"
4504 echo "fdatasync $fdatasync"
4505 echo "madvise $madvise"
4506 echo "posix_madvise $posix_madvise"
4507 echo "sigev_thread_id $sigev_thread_id"
4508 echo "uuid support $uuid"
4509 echo "libcap-ng support $cap_ng"
4510 echo "vhost-net support $vhost_net"
4511 echo "vhost-scsi support $vhost_scsi"
4512 echo "Trace backends $trace_backends"
4513 if test "$trace_backend" = "simple"; then
4514 echo "Trace output file $trace_file-<pid>"
4516 if test "$spice" = "yes"; then
4517 echo "spice support $spice ($spice_protocol_version/$spice_server_version)"
4518 else
4519 echo "spice support $spice"
4521 echo "rbd support $rbd"
4522 echo "xfsctl support $xfs"
4523 echo "nss used $smartcard_nss"
4524 echo "libusb $libusb"
4525 echo "usb net redir $usb_redir"
4526 echo "OpenGL support $opengl"
4527 echo "libiscsi support $libiscsi"
4528 echo "libnfs support $libnfs"
4529 echo "build guest agent $guest_agent"
4530 echo "QGA VSS support $guest_agent_with_vss"
4531 echo "seccomp support $seccomp"
4532 echo "coroutine backend $coroutine"
4533 echo "coroutine pool $coroutine_pool"
4534 echo "GlusterFS support $glusterfs"
4535 echo "Archipelago support $archipelago"
4536 echo "gcov $gcov_tool"
4537 echo "gcov enabled $gcov"
4538 echo "TPM support $tpm"
4539 echo "libssh2 support $libssh2"
4540 echo "TPM passthrough $tpm_passthrough"
4541 echo "QOM debugging $qom_cast_debug"
4542 echo "vhdx $vhdx"
4543 echo "Quorum $quorum"
4544 echo "lzo support $lzo"
4545 echo "snappy support $snappy"
4546 echo "bzip2 support $bzip2"
4547 echo "NUMA host support $numa"
4548 echo "tcmalloc support $tcmalloc"
4550 if test "$sdl_too_old" = "yes"; then
4551 echo "-> Your SDL version is too old - please upgrade to have SDL support"
4554 config_host_mak="config-host.mak"
4556 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4558 echo "# Automatically generated by configure - do not modify" > $config_host_mak
4559 echo >> $config_host_mak
4561 echo all: >> $config_host_mak
4562 echo "prefix=$prefix" >> $config_host_mak
4563 echo "bindir=$bindir" >> $config_host_mak
4564 echo "libdir=$libdir" >> $config_host_mak
4565 echo "libexecdir=$libexecdir" >> $config_host_mak
4566 echo "includedir=$includedir" >> $config_host_mak
4567 echo "mandir=$mandir" >> $config_host_mak
4568 echo "sysconfdir=$sysconfdir" >> $config_host_mak
4569 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4570 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4571 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4572 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4573 if test "$mingw32" = "no" ; then
4574 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4576 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4577 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4578 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4579 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4580 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4582 echo "ARCH=$ARCH" >> $config_host_mak
4584 if test "$debug_tcg" = "yes" ; then
4585 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4587 if test "$strip_opt" = "yes" ; then
4588 echo "STRIP=${strip}" >> $config_host_mak
4590 if test "$bigendian" = "yes" ; then
4591 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4593 if test "$mingw32" = "yes" ; then
4594 echo "CONFIG_WIN32=y" >> $config_host_mak
4595 rc_version=`cat $source_path/VERSION`
4596 version_major=${rc_version%%.*}
4597 rc_version=${rc_version#*.}
4598 version_minor=${rc_version%%.*}
4599 rc_version=${rc_version#*.}
4600 version_subminor=${rc_version%%.*}
4601 version_micro=0
4602 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4603 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4604 if test "$guest_agent_with_vss" = "yes" ; then
4605 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4606 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4608 if test "$guest_agent_msi" != "no"; then
4609 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
4610 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4611 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
4612 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
4613 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4614 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4615 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4617 else
4618 echo "CONFIG_POSIX=y" >> $config_host_mak
4621 if test "$linux" = "yes" ; then
4622 echo "CONFIG_LINUX=y" >> $config_host_mak
4625 if test "$darwin" = "yes" ; then
4626 echo "CONFIG_DARWIN=y" >> $config_host_mak
4629 if test "$aix" = "yes" ; then
4630 echo "CONFIG_AIX=y" >> $config_host_mak
4633 if test "$solaris" = "yes" ; then
4634 echo "CONFIG_SOLARIS=y" >> $config_host_mak
4635 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
4636 if test "$needs_libsunmath" = "yes" ; then
4637 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
4640 if test "$haiku" = "yes" ; then
4641 echo "CONFIG_HAIKU=y" >> $config_host_mak
4643 if test "$static" = "yes" ; then
4644 echo "CONFIG_STATIC=y" >> $config_host_mak
4646 if test "$profiler" = "yes" ; then
4647 echo "CONFIG_PROFILER=y" >> $config_host_mak
4649 if test "$slirp" = "yes" ; then
4650 echo "CONFIG_SLIRP=y" >> $config_host_mak
4651 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4653 if test "$vde" = "yes" ; then
4654 echo "CONFIG_VDE=y" >> $config_host_mak
4656 if test "$netmap" = "yes" ; then
4657 echo "CONFIG_NETMAP=y" >> $config_host_mak
4659 if test "$l2tpv3" = "yes" ; then
4660 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4662 if test "$cap_ng" = "yes" ; then
4663 echo "CONFIG_LIBCAP=y" >> $config_host_mak
4665 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4666 for drv in $audio_drv_list; do
4667 def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4668 echo "$def=y" >> $config_host_mak
4669 done
4670 if test "$audio_pt_int" = "yes" ; then
4671 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4673 if test "$audio_win_int" = "yes" ; then
4674 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4676 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4677 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4678 if test "$vnc" = "yes" ; then
4679 echo "CONFIG_VNC=y" >> $config_host_mak
4681 if test "$vnc_tls" = "yes" ; then
4682 echo "CONFIG_VNC_TLS=y" >> $config_host_mak
4684 if test "$vnc_sasl" = "yes" ; then
4685 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4687 if test "$vnc_jpeg" = "yes" ; then
4688 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
4690 if test "$vnc_png" = "yes" ; then
4691 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
4693 if test "$vnc_ws" = "yes" ; then
4694 echo "CONFIG_VNC_WS=y" >> $config_host_mak
4695 echo "VNC_WS_CFLAGS=$vnc_ws_cflags" >> $config_host_mak
4697 if test "$fnmatch" = "yes" ; then
4698 echo "CONFIG_FNMATCH=y" >> $config_host_mak
4700 if test "$uuid" = "yes" ; then
4701 echo "CONFIG_UUID=y" >> $config_host_mak
4703 if test "$xfs" = "yes" ; then
4704 echo "CONFIG_XFS=y" >> $config_host_mak
4706 qemu_version=`head $source_path/VERSION`
4707 echo "VERSION=$qemu_version" >>$config_host_mak
4708 echo "PKGVERSION=$pkgversion" >>$config_host_mak
4709 echo "SRC_PATH=$source_path" >> $config_host_mak
4710 echo "TARGET_DIRS=$target_list" >> $config_host_mak
4711 if [ "$docs" = "yes" ] ; then
4712 echo "BUILD_DOCS=yes" >> $config_host_mak
4714 if test "$modules" = "yes"; then
4715 # $shacmd can generate a hash started with digit, which the compiler doesn't
4716 # like as an symbol. So prefix it with an underscore
4717 echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
4718 echo "CONFIG_MODULES=y" >> $config_host_mak
4720 if test "$sdl" = "yes" ; then
4721 echo "CONFIG_SDL=y" >> $config_host_mak
4722 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
4723 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
4725 if test "$cocoa" = "yes" ; then
4726 echo "CONFIG_COCOA=y" >> $config_host_mak
4728 if test "$curses" = "yes" ; then
4729 echo "CONFIG_CURSES=y" >> $config_host_mak
4731 if test "$utimens" = "yes" ; then
4732 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
4734 if test "$pipe2" = "yes" ; then
4735 echo "CONFIG_PIPE2=y" >> $config_host_mak
4737 if test "$accept4" = "yes" ; then
4738 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
4740 if test "$splice" = "yes" ; then
4741 echo "CONFIG_SPLICE=y" >> $config_host_mak
4743 if test "$eventfd" = "yes" ; then
4744 echo "CONFIG_EVENTFD=y" >> $config_host_mak
4746 if test "$fallocate" = "yes" ; then
4747 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
4749 if test "$fallocate_punch_hole" = "yes" ; then
4750 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
4752 if test "$fallocate_zero_range" = "yes" ; then
4753 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
4755 if test "$posix_fallocate" = "yes" ; then
4756 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
4758 if test "$sync_file_range" = "yes" ; then
4759 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
4761 if test "$fiemap" = "yes" ; then
4762 echo "CONFIG_FIEMAP=y" >> $config_host_mak
4764 if test "$dup3" = "yes" ; then
4765 echo "CONFIG_DUP3=y" >> $config_host_mak
4767 if test "$ppoll" = "yes" ; then
4768 echo "CONFIG_PPOLL=y" >> $config_host_mak
4770 if test "$prctl_pr_set_timerslack" = "yes" ; then
4771 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
4773 if test "$epoll" = "yes" ; then
4774 echo "CONFIG_EPOLL=y" >> $config_host_mak
4776 if test "$epoll_create1" = "yes" ; then
4777 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
4779 if test "$epoll_pwait" = "yes" ; then
4780 echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
4782 if test "$sendfile" = "yes" ; then
4783 echo "CONFIG_SENDFILE=y" >> $config_host_mak
4785 if test "$timerfd" = "yes" ; then
4786 echo "CONFIG_TIMERFD=y" >> $config_host_mak
4788 if test "$setns" = "yes" ; then
4789 echo "CONFIG_SETNS=y" >> $config_host_mak
4791 if test "$inotify" = "yes" ; then
4792 echo "CONFIG_INOTIFY=y" >> $config_host_mak
4794 if test "$inotify1" = "yes" ; then
4795 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
4797 if test "$byteswap_h" = "yes" ; then
4798 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
4800 if test "$bswap_h" = "yes" ; then
4801 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
4803 if test "$curl" = "yes" ; then
4804 echo "CONFIG_CURL=m" >> $config_host_mak
4805 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
4806 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
4808 if test "$brlapi" = "yes" ; then
4809 echo "CONFIG_BRLAPI=y" >> $config_host_mak
4811 if test "$bluez" = "yes" ; then
4812 echo "CONFIG_BLUEZ=y" >> $config_host_mak
4813 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
4815 if test "$glib_subprocess" = "yes" ; then
4816 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
4818 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4819 if test "$gtk" = "yes" ; then
4820 echo "CONFIG_GTK=y" >> $config_host_mak
4821 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
4822 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
4824 if test "$gnutls" = "yes" ; then
4825 echo "CONFIG_GNUTLS=y" >> $config_host_mak
4827 if test "$gnutls_hash" = "yes" ; then
4828 echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak
4830 if test "$vte" = "yes" ; then
4831 echo "CONFIG_VTE=y" >> $config_host_mak
4832 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
4834 if test "$xen" = "yes" ; then
4835 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4836 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4838 if test "$linux_aio" = "yes" ; then
4839 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4841 if test "$attr" = "yes" ; then
4842 echo "CONFIG_ATTR=y" >> $config_host_mak
4844 if test "$libattr" = "yes" ; then
4845 echo "CONFIG_LIBATTR=y" >> $config_host_mak
4847 if test "$virtfs" = "yes" ; then
4848 echo "CONFIG_VIRTFS=y" >> $config_host_mak
4850 if test "$vhost_scsi" = "yes" ; then
4851 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4853 if test "$vhost_net" = "yes" ; then
4854 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
4856 if test "$blobs" = "yes" ; then
4857 echo "INSTALL_BLOBS=yes" >> $config_host_mak
4859 if test "$iovec" = "yes" ; then
4860 echo "CONFIG_IOVEC=y" >> $config_host_mak
4862 if test "$preadv" = "yes" ; then
4863 echo "CONFIG_PREADV=y" >> $config_host_mak
4865 if test "$fdt" = "yes" ; then
4866 echo "CONFIG_FDT=y" >> $config_host_mak
4868 if test "$signalfd" = "yes" ; then
4869 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
4871 if test "$tcg_interpreter" = "yes" ; then
4872 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4874 if test "$fdatasync" = "yes" ; then
4875 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
4877 if test "$madvise" = "yes" ; then
4878 echo "CONFIG_MADVISE=y" >> $config_host_mak
4880 if test "$posix_madvise" = "yes" ; then
4881 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
4883 if test "$sigev_thread_id" = "yes" ; then
4884 echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
4887 if test "$spice" = "yes" ; then
4888 echo "CONFIG_SPICE=y" >> $config_host_mak
4891 if test "$smartcard_nss" = "yes" ; then
4892 echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
4893 echo "NSS_LIBS=$nss_libs" >> $config_host_mak
4894 echo "NSS_CFLAGS=$nss_cflags" >> $config_host_mak
4897 if test "$libusb" = "yes" ; then
4898 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
4901 if test "$usb_redir" = "yes" ; then
4902 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
4905 if test "$opengl" = "yes" ; then
4906 echo "CONFIG_OPENGL=y" >> $config_host_mak
4907 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
4908 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
4911 if test "$lzo" = "yes" ; then
4912 echo "CONFIG_LZO=y" >> $config_host_mak
4915 if test "$snappy" = "yes" ; then
4916 echo "CONFIG_SNAPPY=y" >> $config_host_mak
4919 if test "$bzip2" = "yes" ; then
4920 echo "CONFIG_BZIP2=y" >> $config_host_mak
4921 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
4924 if test "$libiscsi" = "yes" ; then
4925 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
4926 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
4927 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
4930 if test "$libnfs" = "yes" ; then
4931 echo "CONFIG_LIBNFS=y" >> $config_host_mak
4934 if test "$seccomp" = "yes"; then
4935 echo "CONFIG_SECCOMP=y" >> $config_host_mak
4938 # XXX: suppress that
4939 if [ "$bsd" = "yes" ] ; then
4940 echo "CONFIG_BSD=y" >> $config_host_mak
4943 if test "$zero_malloc" = "yes" ; then
4944 echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
4946 if test "$qom_cast_debug" = "yes" ; then
4947 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
4949 if test "$rbd" = "yes" ; then
4950 echo "CONFIG_RBD=m" >> $config_host_mak
4951 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
4952 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
4955 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
4956 if test "$coroutine_pool" = "yes" ; then
4957 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
4958 else
4959 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
4962 if test "$open_by_handle_at" = "yes" ; then
4963 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
4966 if test "$linux_magic_h" = "yes" ; then
4967 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
4970 if test "$pragma_diagnostic_available" = "yes" ; then
4971 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
4974 if test "$valgrind_h" = "yes" ; then
4975 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
4978 if test "$has_environ" = "yes" ; then
4979 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
4982 if test "$cpuid_h" = "yes" ; then
4983 echo "CONFIG_CPUID_H=y" >> $config_host_mak
4986 if test "$int128" = "yes" ; then
4987 echo "CONFIG_INT128=y" >> $config_host_mak
4990 if test "$getauxval" = "yes" ; then
4991 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
4994 if test "$glusterfs" = "yes" ; then
4995 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
4996 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
4997 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5000 if test "$glusterfs_discard" = "yes" ; then
5001 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5004 if test "$glusterfs_zerofill" = "yes" ; then
5005 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5008 if test "$archipelago" = "yes" ; then
5009 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5010 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5013 if test "$libssh2" = "yes" ; then
5014 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5015 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5016 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5019 if test "$quorum" = "yes" ; then
5020 echo "CONFIG_QUORUM=y" >> $config_host_mak
5023 if test "$vhdx" = "yes" ; then
5024 echo "CONFIG_VHDX=y" >> $config_host_mak
5027 # USB host support
5028 if test "$libusb" = "yes"; then
5029 echo "HOST_USB=libusb legacy" >> $config_host_mak
5030 else
5031 echo "HOST_USB=stub" >> $config_host_mak
5034 # TPM passthrough support?
5035 if test "$tpm" = "yes"; then
5036 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5037 if test "$tpm_passthrough" = "yes"; then
5038 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5042 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5043 if have_backend "nop"; then
5044 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5046 if have_backend "simple"; then
5047 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5048 # Set the appropriate trace file.
5049 trace_file="\"$trace_file-\" FMT_pid"
5051 if have_backend "stderr"; then
5052 echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
5054 if have_backend "ust"; then
5055 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5057 if have_backend "dtrace"; then
5058 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5059 if test "$trace_backend_stap" = "yes" ; then
5060 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5063 if have_backend "ftrace"; then
5064 if test "$linux" = "yes" ; then
5065 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5066 else
5067 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5070 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5072 if test "$rdma" = "yes" ; then
5073 echo "CONFIG_RDMA=y" >> $config_host_mak
5076 # Hold two types of flag:
5077 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5078 # a thread we have a handle to
5079 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5080 # platform
5081 if test "$pthread_setname_np" = "yes" ; then
5082 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5083 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5086 if test "$tcg_interpreter" = "yes"; then
5087 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5088 elif test "$ARCH" = "sparc64" ; then
5089 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5090 elif test "$ARCH" = "s390x" ; then
5091 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5092 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5093 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5094 elif test "$ARCH" = "ppc64" ; then
5095 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5096 else
5097 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5099 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5101 echo "TOOLS=$tools" >> $config_host_mak
5102 echo "ROMS=$roms" >> $config_host_mak
5103 echo "MAKE=$make" >> $config_host_mak
5104 echo "INSTALL=$install" >> $config_host_mak
5105 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5106 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5107 if test -n "$libtool"; then
5108 echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
5109 echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
5110 else
5111 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5112 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5114 echo "PYTHON=$python" >> $config_host_mak
5115 echo "CC=$cc" >> $config_host_mak
5116 if $iasl -h > /dev/null 2>&1; then
5117 echo "IASL=$iasl" >> $config_host_mak
5119 echo "CC_I386=$cc_i386" >> $config_host_mak
5120 echo "HOST_CC=$host_cc" >> $config_host_mak
5121 echo "CXX=$cxx" >> $config_host_mak
5122 echo "OBJCC=$objcc" >> $config_host_mak
5123 echo "AR=$ar" >> $config_host_mak
5124 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5125 echo "AS=$as" >> $config_host_mak
5126 echo "CPP=$cpp" >> $config_host_mak
5127 echo "OBJCOPY=$objcopy" >> $config_host_mak
5128 echo "LD=$ld" >> $config_host_mak
5129 echo "NM=$nm" >> $config_host_mak
5130 echo "WINDRES=$windres" >> $config_host_mak
5131 echo "LIBTOOL=$libtool" >> $config_host_mak
5132 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5133 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5134 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5135 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5136 if test "$sparse" = "yes" ; then
5137 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
5138 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
5139 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
5140 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5141 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5143 if test "$cross_prefix" != ""; then
5144 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5145 else
5146 echo "AUTOCONF_HOST := " >> $config_host_mak
5148 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5149 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5150 echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
5151 echo "LIBS+=$LIBS" >> $config_host_mak
5152 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5153 echo "EXESUF=$EXESUF" >> $config_host_mak
5154 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5155 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5156 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5157 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5158 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5159 if test "$gcov" = "yes" ; then
5160 echo "CONFIG_GCOV=y" >> $config_host_mak
5161 echo "GCOV=$gcov_tool" >> $config_host_mak
5164 # use included Linux headers
5165 if test "$linux" = "yes" ; then
5166 mkdir -p linux-headers
5167 case "$cpu" in
5168 i386|x86_64|x32)
5169 linux_arch=x86
5171 ppcemb|ppc|ppc64)
5172 linux_arch=powerpc
5174 s390x)
5175 linux_arch=s390
5177 aarch64)
5178 linux_arch=arm64
5180 mips64)
5181 linux_arch=mips
5184 # For most CPUs the kernel architecture name and QEMU CPU name match.
5185 linux_arch="$cpu"
5187 esac
5188 # For non-KVM architectures we will not have asm headers
5189 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5190 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5194 for target in $target_list; do
5195 target_dir="$target"
5196 config_target_mak=$target_dir/config-target.mak
5197 target_name=`echo $target | cut -d '-' -f 1`
5198 target_bigendian="no"
5200 case "$target_name" in
5201 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5202 target_bigendian=yes
5204 esac
5205 target_softmmu="no"
5206 target_user_only="no"
5207 target_linux_user="no"
5208 target_bsd_user="no"
5209 case "$target" in
5210 ${target_name}-softmmu)
5211 target_softmmu="yes"
5213 ${target_name}-linux-user)
5214 if test "$linux" != "yes" ; then
5215 error_exit "Target '$target' is only available on a Linux host"
5217 target_user_only="yes"
5218 target_linux_user="yes"
5220 ${target_name}-bsd-user)
5221 if test "$bsd" != "yes" ; then
5222 error_exit "Target '$target' is only available on a BSD host"
5224 target_user_only="yes"
5225 target_bsd_user="yes"
5228 error_exit "Target '$target' not recognised"
5229 exit 1
5231 esac
5233 mkdir -p $target_dir
5234 echo "# Automatically generated by configure - do not modify" > $config_target_mak
5236 bflt="no"
5237 interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
5238 gdb_xml_files=""
5240 TARGET_ARCH="$target_name"
5241 TARGET_BASE_ARCH=""
5242 TARGET_ABI_DIR=""
5244 case "$target_name" in
5245 i386)
5247 x86_64)
5248 TARGET_BASE_ARCH=i386
5250 alpha)
5252 arm|armeb)
5253 TARGET_ARCH=arm
5254 bflt="yes"
5255 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5257 aarch64)
5258 TARGET_BASE_ARCH=arm
5259 bflt="yes"
5260 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5262 cris)
5264 lm32)
5266 m68k)
5267 bflt="yes"
5268 gdb_xml_files="cf-core.xml cf-fp.xml"
5270 microblaze|microblazeel)
5271 TARGET_ARCH=microblaze
5272 bflt="yes"
5274 mips|mipsel)
5275 TARGET_ARCH=mips
5276 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5278 mipsn32|mipsn32el)
5279 TARGET_ARCH=mips64
5280 TARGET_BASE_ARCH=mips
5281 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5282 echo "TARGET_ABI32=y" >> $config_target_mak
5284 mips64|mips64el)
5285 TARGET_ARCH=mips64
5286 TARGET_BASE_ARCH=mips
5287 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5289 moxie)
5291 or32)
5292 TARGET_ARCH=openrisc
5293 TARGET_BASE_ARCH=openrisc
5295 ppc)
5296 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5298 ppcemb)
5299 TARGET_BASE_ARCH=ppc
5300 TARGET_ABI_DIR=ppc
5301 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5303 ppc64)
5304 TARGET_BASE_ARCH=ppc
5305 TARGET_ABI_DIR=ppc
5306 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5308 ppc64le)
5309 TARGET_ARCH=ppc64
5310 TARGET_BASE_ARCH=ppc
5311 TARGET_ABI_DIR=ppc
5312 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5314 ppc64abi32)
5315 TARGET_ARCH=ppc64
5316 TARGET_BASE_ARCH=ppc
5317 TARGET_ABI_DIR=ppc
5318 echo "TARGET_ABI32=y" >> $config_target_mak
5319 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5321 sh4|sh4eb)
5322 TARGET_ARCH=sh4
5323 bflt="yes"
5325 sparc)
5327 sparc64)
5328 TARGET_BASE_ARCH=sparc
5330 sparc32plus)
5331 TARGET_ARCH=sparc64
5332 TARGET_BASE_ARCH=sparc
5333 TARGET_ABI_DIR=sparc
5334 echo "TARGET_ABI32=y" >> $config_target_mak
5336 s390x)
5337 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml"
5339 tricore)
5341 unicore32)
5343 xtensa|xtensaeb)
5344 TARGET_ARCH=xtensa
5347 error_exit "Unsupported target CPU"
5349 esac
5350 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5351 if [ "$TARGET_BASE_ARCH" = "" ]; then
5352 TARGET_BASE_ARCH=$TARGET_ARCH
5355 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5357 upper() {
5358 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5361 target_arch_name="`upper $TARGET_ARCH`"
5362 echo "TARGET_$target_arch_name=y" >> $config_target_mak
5363 echo "TARGET_NAME=$target_name" >> $config_target_mak
5364 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5365 if [ "$TARGET_ABI_DIR" = "" ]; then
5366 TARGET_ABI_DIR=$TARGET_ARCH
5368 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5369 if [ "$HOST_VARIANT_DIR" != "" ]; then
5370 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5372 case "$target_name" in
5373 i386|x86_64)
5374 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5375 echo "CONFIG_XEN=y" >> $config_target_mak
5376 if test "$xen_pci_passthrough" = yes; then
5377 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5382 esac
5383 case "$target_name" in
5384 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5385 # Make sure the target and host cpus are compatible
5386 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5387 \( "$target_name" = "$cpu" -o \
5388 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5389 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
5390 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
5391 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5392 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5393 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
5394 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
5395 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
5396 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
5397 echo "CONFIG_KVM=y" >> $config_target_mak
5398 if test "$vhost_net" = "yes" ; then
5399 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5402 esac
5403 if test "$target_bigendian" = "yes" ; then
5404 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5406 if test "$target_softmmu" = "yes" ; then
5407 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5409 if test "$target_user_only" = "yes" ; then
5410 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5411 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5413 if test "$target_linux_user" = "yes" ; then
5414 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5416 list=""
5417 if test ! -z "$gdb_xml_files" ; then
5418 for x in $gdb_xml_files; do
5419 list="$list $source_path/gdb-xml/$x"
5420 done
5421 echo "TARGET_XML_FILES=$list" >> $config_target_mak
5424 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5425 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5427 if test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then
5428 echo "CONFIG_USE_GUEST_BASE=y" >> $config_target_mak
5430 if test "$target_bsd_user" = "yes" ; then
5431 echo "CONFIG_BSD_USER=y" >> $config_target_mak
5434 # generate QEMU_CFLAGS/LDFLAGS for targets
5436 cflags=""
5437 ldflags=""
5439 for i in $ARCH $TARGET_BASE_ARCH ; do
5440 case "$i" in
5441 alpha)
5442 echo "CONFIG_ALPHA_DIS=y" >> $config_target_mak
5443 echo "CONFIG_ALPHA_DIS=y" >> config-all-disas.mak
5445 aarch64)
5446 if test -n "${cxx}"; then
5447 echo "CONFIG_ARM_A64_DIS=y" >> $config_target_mak
5448 echo "CONFIG_ARM_A64_DIS=y" >> config-all-disas.mak
5451 arm)
5452 echo "CONFIG_ARM_DIS=y" >> $config_target_mak
5453 echo "CONFIG_ARM_DIS=y" >> config-all-disas.mak
5454 if test -n "${cxx}"; then
5455 echo "CONFIG_ARM_A64_DIS=y" >> $config_target_mak
5456 echo "CONFIG_ARM_A64_DIS=y" >> config-all-disas.mak
5459 cris)
5460 echo "CONFIG_CRIS_DIS=y" >> $config_target_mak
5461 echo "CONFIG_CRIS_DIS=y" >> config-all-disas.mak
5463 hppa)
5464 echo "CONFIG_HPPA_DIS=y" >> $config_target_mak
5465 echo "CONFIG_HPPA_DIS=y" >> config-all-disas.mak
5467 i386|x86_64|x32)
5468 echo "CONFIG_I386_DIS=y" >> $config_target_mak
5469 echo "CONFIG_I386_DIS=y" >> config-all-disas.mak
5471 ia64*)
5472 echo "CONFIG_IA64_DIS=y" >> $config_target_mak
5473 echo "CONFIG_IA64_DIS=y" >> config-all-disas.mak
5475 lm32)
5476 echo "CONFIG_LM32_DIS=y" >> $config_target_mak
5477 echo "CONFIG_LM32_DIS=y" >> config-all-disas.mak
5479 m68k)
5480 echo "CONFIG_M68K_DIS=y" >> $config_target_mak
5481 echo "CONFIG_M68K_DIS=y" >> config-all-disas.mak
5483 microblaze*)
5484 echo "CONFIG_MICROBLAZE_DIS=y" >> $config_target_mak
5485 echo "CONFIG_MICROBLAZE_DIS=y" >> config-all-disas.mak
5487 mips*)
5488 echo "CONFIG_MIPS_DIS=y" >> $config_target_mak
5489 echo "CONFIG_MIPS_DIS=y" >> config-all-disas.mak
5491 moxie*)
5492 echo "CONFIG_MOXIE_DIS=y" >> $config_target_mak
5493 echo "CONFIG_MOXIE_DIS=y" >> config-all-disas.mak
5495 or32)
5496 echo "CONFIG_OPENRISC_DIS=y" >> $config_target_mak
5497 echo "CONFIG_OPENRISC_DIS=y" >> config-all-disas.mak
5499 ppc*)
5500 echo "CONFIG_PPC_DIS=y" >> $config_target_mak
5501 echo "CONFIG_PPC_DIS=y" >> config-all-disas.mak
5503 s390*)
5504 echo "CONFIG_S390_DIS=y" >> $config_target_mak
5505 echo "CONFIG_S390_DIS=y" >> config-all-disas.mak
5507 sh4)
5508 echo "CONFIG_SH4_DIS=y" >> $config_target_mak
5509 echo "CONFIG_SH4_DIS=y" >> config-all-disas.mak
5511 sparc*)
5512 echo "CONFIG_SPARC_DIS=y" >> $config_target_mak
5513 echo "CONFIG_SPARC_DIS=y" >> config-all-disas.mak
5515 xtensa*)
5516 echo "CONFIG_XTENSA_DIS=y" >> $config_target_mak
5517 echo "CONFIG_XTENSA_DIS=y" >> config-all-disas.mak
5519 esac
5520 done
5521 if test "$tcg_interpreter" = "yes" ; then
5522 echo "CONFIG_TCI_DIS=y" >> $config_target_mak
5523 echo "CONFIG_TCI_DIS=y" >> config-all-disas.mak
5526 case "$ARCH" in
5527 alpha)
5528 # Ensure there's only a single GP
5529 cflags="-msmall-data $cflags"
5531 esac
5533 if test "$gprof" = "yes" ; then
5534 echo "TARGET_GPROF=yes" >> $config_target_mak
5535 if test "$target_linux_user" = "yes" ; then
5536 cflags="-p $cflags"
5537 ldflags="-p $ldflags"
5539 if test "$target_softmmu" = "yes" ; then
5540 ldflags="-p $ldflags"
5541 echo "GPROF_CFLAGS=-p" >> $config_target_mak
5545 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5546 ldflags="$ldflags $textseg_ldflags"
5549 echo "LDFLAGS+=$ldflags" >> $config_target_mak
5550 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5552 done # for target in $targets
5554 if [ "$pixman" = "internal" ]; then
5555 echo "config-host.h: subdir-pixman" >> $config_host_mak
5558 if test "$rdma" = "yes" ; then
5559 echo "CONFIG_RDMA=y" >> $config_host_mak
5562 if [ "$dtc_internal" = "yes" ]; then
5563 echo "config-host.h: subdir-dtc" >> $config_host_mak
5566 if test "$numa" = "yes"; then
5567 echo "CONFIG_NUMA=y" >> $config_host_mak
5570 if test "$ccache_cpp2" = "yes"; then
5571 echo "export CCACHE_CPP2=y" >> $config_host_mak
5574 # build tree in object directory in case the source is not in the current directory
5575 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5576 DIRS="$DIRS fsdev"
5577 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
5578 DIRS="$DIRS roms/seabios roms/vgabios"
5579 DIRS="$DIRS qapi-generated"
5580 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5581 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5582 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
5583 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
5584 FILES="$FILES pc-bios/spapr-rtas/Makefile"
5585 FILES="$FILES pc-bios/s390-ccw/Makefile"
5586 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5587 FILES="$FILES pc-bios/qemu-icon.bmp"
5588 for bios_file in \
5589 $source_path/pc-bios/*.bin \
5590 $source_path/pc-bios/*.aml \
5591 $source_path/pc-bios/*.rom \
5592 $source_path/pc-bios/*.dtb \
5593 $source_path/pc-bios/*.img \
5594 $source_path/pc-bios/openbios-* \
5595 $source_path/pc-bios/u-boot.* \
5596 $source_path/pc-bios/palcode-*
5598 FILES="$FILES pc-bios/`basename $bios_file`"
5599 done
5600 for test_file in `find $source_path/tests/acpi-test-data -type f`
5602 FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5603 done
5604 mkdir -p $DIRS
5605 for f in $FILES ; do
5606 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5607 symlink "$source_path/$f" "$f"
5609 done
5611 # temporary config to build submodules
5612 for rom in seabios vgabios ; do
5613 config_mak=roms/$rom/config.mak
5614 echo "# Automatically generated by configure - do not modify" > $config_mak
5615 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5616 echo "AS=$as" >> $config_mak
5617 echo "CC=$cc" >> $config_mak
5618 echo "BCC=bcc" >> $config_mak
5619 echo "CPP=$cpp" >> $config_mak
5620 echo "OBJCOPY=objcopy" >> $config_mak
5621 echo "IASL=$iasl" >> $config_mak
5622 echo "LD=$ld" >> $config_mak
5623 done
5625 # set up qemu-iotests in this build directory
5626 iotests_common_env="tests/qemu-iotests/common.env"
5627 iotests_check="tests/qemu-iotests/check"
5629 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5630 echo >> "$iotests_common_env"
5631 echo "export PYTHON='$python'" >> "$iotests_common_env"
5633 if [ ! -e "$iotests_check" ]; then
5634 symlink "$source_path/$iotests_check" "$iotests_check"
5637 # Save the configure command line for later reuse.
5638 cat <<EOD >config.status
5639 #!/bin/sh
5640 # Generated by configure.
5641 # Run this file to recreate the current configuration.
5642 # Compiler output produced by configure, useful for debugging
5643 # configure, is in config.log if it exists.
5645 printf "exec" >>config.status
5646 printf " '%s'" "$0" "$@" >>config.status
5647 echo >>config.status
5648 chmod +x config.status
5650 rm -r "$TMPDIR1"