Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20150615' into...
[qemu.git] / configure
blob222694f34d8841f1a55b721408b1aefab06e1810
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 vss_win32_sdk=""
319 win_sdk="no"
320 want_tools="yes"
321 libiscsi=""
322 libnfs=""
323 coroutine=""
324 coroutine_pool=""
325 seccomp=""
326 glusterfs=""
327 glusterfs_discard="no"
328 glusterfs_zerofill="no"
329 archipelago="no"
330 gtk=""
331 gtkabi=""
332 vte=""
333 tpm="yes"
334 libssh2=""
335 vhdx=""
336 quorum=""
337 numa=""
338 tcmalloc="no"
340 # parse CC options first
341 for opt do
342 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
343 case "$opt" in
344 --cross-prefix=*) cross_prefix="$optarg"
346 --cc=*) CC="$optarg"
348 --cxx=*) CXX="$optarg"
350 --source-path=*) source_path="$optarg"
352 --cpu=*) cpu="$optarg"
354 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
355 EXTRA_CFLAGS="$optarg"
357 --extra-ldflags=*) LDFLAGS="$optarg $LDFLAGS"
358 EXTRA_LDFLAGS="$optarg"
360 --enable-debug-info) debug_info="yes"
362 --disable-debug-info) debug_info="no"
364 esac
365 done
366 # OS specific
367 # Using uname is really, really broken. Once we have the right set of checks
368 # we can eliminate its usage altogether.
370 # Preferred compiler:
371 # ${CC} (if set)
372 # ${cross_prefix}gcc (if cross-prefix specified)
373 # system compiler
374 if test -z "${CC}${cross_prefix}"; then
375 cc="$host_cc"
376 else
377 cc="${CC-${cross_prefix}gcc}"
380 if test -z "${CXX}${cross_prefix}"; then
381 cxx="c++"
382 else
383 cxx="${CXX-${cross_prefix}g++}"
386 ar="${AR-${cross_prefix}ar}"
387 as="${AS-${cross_prefix}as}"
388 cpp="${CPP-$cc -E}"
389 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
390 ld="${LD-${cross_prefix}ld}"
391 libtool="${LIBTOOL-${cross_prefix}libtool}"
392 nm="${NM-${cross_prefix}nm}"
393 strip="${STRIP-${cross_prefix}strip}"
394 windres="${WINDRES-${cross_prefix}windres}"
395 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
396 query_pkg_config() {
397 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
399 pkg_config=query_pkg_config
400 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
401 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
403 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
404 ARFLAGS="${ARFLAGS-rv}"
406 # default flags for all hosts
407 QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
408 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
409 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
410 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
411 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
412 if test "$debug_info" = "yes"; then
413 CFLAGS="-g $CFLAGS"
414 LDFLAGS="-g $LDFLAGS"
417 # make source path absolute
418 source_path=`cd "$source_path"; pwd`
420 # running configure in the source tree?
421 # we know that's the case if configure is there.
422 if test -f "./configure"; then
423 pwd_is_source_path="y"
424 else
425 pwd_is_source_path="n"
428 check_define() {
429 cat > $TMPC <<EOF
430 #if !defined($1)
431 #error $1 not defined
432 #endif
433 int main(void) { return 0; }
435 compile_object
438 check_include() {
439 cat > $TMPC <<EOF
440 #include <$1>
441 int main(void) { return 0; }
443 compile_object
446 write_c_skeleton() {
447 cat > $TMPC <<EOF
448 int main(void) { return 0; }
452 if check_define __linux__ ; then
453 targetos="Linux"
454 elif check_define _WIN32 ; then
455 targetos='MINGW32'
456 elif check_define __OpenBSD__ ; then
457 targetos='OpenBSD'
458 elif check_define __sun__ ; then
459 targetos='SunOS'
460 elif check_define __HAIKU__ ; then
461 targetos='Haiku'
462 else
463 targetos=`uname -s`
466 # Some host OSes need non-standard checks for which CPU to use.
467 # Note that these checks are broken for cross-compilation: if you're
468 # cross-compiling to one of these OSes then you'll need to specify
469 # the correct CPU with the --cpu option.
470 case $targetos in
471 Darwin)
472 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
473 # run 64-bit userspace code.
474 # If the user didn't specify a CPU explicitly and the kernel says this is
475 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
476 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
477 cpu="x86_64"
480 SunOS)
481 # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
482 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
483 cpu="x86_64"
485 esac
487 if test ! -z "$cpu" ; then
488 # command line argument
490 elif check_define __i386__ ; then
491 cpu="i386"
492 elif check_define __x86_64__ ; then
493 if check_define __ILP32__ ; then
494 cpu="x32"
495 else
496 cpu="x86_64"
498 elif check_define __sparc__ ; then
499 if check_define __arch64__ ; then
500 cpu="sparc64"
501 else
502 cpu="sparc"
504 elif check_define _ARCH_PPC ; then
505 if check_define _ARCH_PPC64 ; then
506 cpu="ppc64"
507 else
508 cpu="ppc"
510 elif check_define __mips__ ; then
511 cpu="mips"
512 elif check_define __ia64__ ; then
513 cpu="ia64"
514 elif check_define __s390__ ; then
515 if check_define __s390x__ ; then
516 cpu="s390x"
517 else
518 cpu="s390"
520 elif check_define __arm__ ; then
521 cpu="arm"
522 elif check_define __aarch64__ ; then
523 cpu="aarch64"
524 elif check_define __hppa__ ; then
525 cpu="hppa"
526 else
527 cpu=`uname -m`
530 ARCH=
531 # Normalise host CPU name and set ARCH.
532 # Note that this case should only have supported host CPUs, not guests.
533 case "$cpu" in
534 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
535 cpu="$cpu"
537 i386|i486|i586|i686|i86pc|BePC)
538 cpu="i386"
540 x86_64|amd64)
541 cpu="x86_64"
543 armv*b|armv*l|arm)
544 cpu="arm"
546 aarch64)
547 cpu="aarch64"
549 mips*)
550 cpu="mips"
552 sparc|sun4[cdmuv])
553 cpu="sparc"
556 # This will result in either an error or falling back to TCI later
557 ARCH=unknown
559 esac
560 if test -z "$ARCH"; then
561 ARCH="$cpu"
564 # OS specific
566 # host *BSD for user mode
567 HOST_VARIANT_DIR=""
569 case $targetos in
570 CYGWIN*)
571 mingw32="yes"
572 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
573 audio_possible_drivers="sdl"
574 audio_drv_list="sdl"
576 MINGW32*)
577 mingw32="yes"
578 audio_possible_drivers="dsound sdl"
579 if check_include dsound.h; then
580 audio_drv_list="dsound"
581 else
582 audio_drv_list=""
585 GNU/kFreeBSD)
586 bsd="yes"
587 audio_drv_list="oss"
588 audio_possible_drivers="oss sdl pa"
590 FreeBSD)
591 bsd="yes"
592 make="${MAKE-gmake}"
593 audio_drv_list="oss"
594 audio_possible_drivers="oss sdl pa"
595 # needed for kinfo_getvmmap(3) in libutil.h
596 LIBS="-lutil $LIBS"
597 netmap="" # enable netmap autodetect
598 HOST_VARIANT_DIR="freebsd"
600 DragonFly)
601 bsd="yes"
602 make="${MAKE-gmake}"
603 audio_drv_list="oss"
604 audio_possible_drivers="oss sdl pa"
605 HOST_VARIANT_DIR="dragonfly"
607 NetBSD)
608 bsd="yes"
609 make="${MAKE-gmake}"
610 audio_drv_list="oss"
611 audio_possible_drivers="oss sdl"
612 oss_lib="-lossaudio"
613 HOST_VARIANT_DIR="netbsd"
615 OpenBSD)
616 bsd="yes"
617 make="${MAKE-gmake}"
618 audio_drv_list="sdl"
619 audio_possible_drivers="sdl"
620 HOST_VARIANT_DIR="openbsd"
622 Darwin)
623 bsd="yes"
624 darwin="yes"
625 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
626 if [ "$cpu" = "x86_64" ] ; then
627 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
628 LDFLAGS="-arch x86_64 $LDFLAGS"
630 cocoa="yes"
631 audio_drv_list="coreaudio"
632 audio_possible_drivers="coreaudio sdl"
633 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
634 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
635 # Disable attempts to use ObjectiveC features in os/object.h since they
636 # won't work when we're compiling with gcc as a C compiler.
637 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
638 HOST_VARIANT_DIR="darwin"
640 SunOS)
641 solaris="yes"
642 make="${MAKE-gmake}"
643 install="${INSTALL-ginstall}"
644 ld="gld"
645 smbd="${SMBD-/usr/sfw/sbin/smbd}"
646 needs_libsunmath="no"
647 solarisrev=`uname -r | cut -f2 -d.`
648 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
649 if test "$solarisrev" -le 9 ; then
650 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
651 needs_libsunmath="yes"
652 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
653 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
654 LIBS="-lsunmath $LIBS"
655 else
656 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
657 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
658 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
659 "Studio 11 can be downloaded from www.sun.com."
663 if test -f /usr/include/sys/soundcard.h ; then
664 audio_drv_list="oss"
666 audio_possible_drivers="oss sdl"
667 # needed for CMSG_ macros in sys/socket.h
668 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
669 # needed for TIOCWIN* defines in termios.h
670 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
671 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
672 solarisnetlibs="-lsocket -lnsl -lresolv"
673 LIBS="$solarisnetlibs $LIBS"
674 libs_qga="$solarisnetlibs $libs_qga"
676 AIX)
677 aix="yes"
678 make="${MAKE-gmake}"
680 Haiku)
681 haiku="yes"
682 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
683 LIBS="-lposix_error_mapper -lnetwork $LIBS"
686 audio_drv_list="oss"
687 audio_possible_drivers="oss alsa sdl pa"
688 linux="yes"
689 linux_user="yes"
690 kvm="yes"
691 vhost_net="yes"
692 vhost_scsi="yes"
693 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
695 esac
697 if [ "$bsd" = "yes" ] ; then
698 if [ "$darwin" != "yes" ] ; then
699 bsd_user="yes"
703 : ${make=${MAKE-make}}
704 : ${install=${INSTALL-install}}
705 : ${python=${PYTHON-python}}
706 : ${smbd=${SMBD-/usr/sbin/smbd}}
708 # Default objcc to clang if available, otherwise use CC
709 if has clang; then
710 objcc=clang
711 else
712 objcc="$cc"
715 if test "$mingw32" = "yes" ; then
716 EXESUF=".exe"
717 DSOSUF=".dll"
718 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
719 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
720 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
721 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
722 write_c_skeleton;
723 if compile_prog "" "-liberty" ; then
724 LIBS="-liberty $LIBS"
726 prefix="c:/Program Files/QEMU"
727 mandir="\${prefix}"
728 datadir="\${prefix}"
729 qemu_docdir="\${prefix}"
730 bindir="\${prefix}"
731 sysconfdir="\${prefix}"
732 local_statedir=
733 confsuffix=""
734 libs_qga="-lws2_32 -lwinmm -lpowrprof $libs_qga"
737 werror=""
739 for opt do
740 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
741 case "$opt" in
742 --help|-h) show_help=yes
744 --version|-V) exec cat $source_path/VERSION
746 --prefix=*) prefix="$optarg"
748 --interp-prefix=*) interp_prefix="$optarg"
750 --source-path=*)
752 --cross-prefix=*)
754 --cc=*)
756 --host-cc=*) host_cc="$optarg"
758 --cxx=*)
760 --iasl=*) iasl="$optarg"
762 --objcc=*) objcc="$optarg"
764 --make=*) make="$optarg"
766 --install=*) install="$optarg"
768 --python=*) python="$optarg"
770 --gcov=*) gcov_tool="$optarg"
772 --smbd=*) smbd="$optarg"
774 --extra-cflags=*)
776 --extra-ldflags=*)
778 --enable-debug-info)
780 --disable-debug-info)
782 --enable-modules)
783 modules="yes"
785 --cpu=*)
787 --target-list=*) target_list="$optarg"
789 --enable-trace-backends=*) trace_backends="$optarg"
791 # XXX: backwards compatibility
792 --enable-trace-backend=*) trace_backends="$optarg"
794 --with-trace-file=*) trace_file="$optarg"
796 --enable-gprof) gprof="yes"
798 --enable-gcov) gcov="yes"
800 --static)
801 static="yes"
802 LDFLAGS="-static $LDFLAGS"
803 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
805 --mandir=*) mandir="$optarg"
807 --bindir=*) bindir="$optarg"
809 --libdir=*) libdir="$optarg"
811 --libexecdir=*) libexecdir="$optarg"
813 --includedir=*) includedir="$optarg"
815 --datadir=*) datadir="$optarg"
817 --with-confsuffix=*) confsuffix="$optarg"
819 --docdir=*) qemu_docdir="$optarg"
821 --sysconfdir=*) sysconfdir="$optarg"
823 --localstatedir=*) local_statedir="$optarg"
825 --sbindir=*|--sharedstatedir=*|\
826 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
827 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
828 # These switches are silently ignored, for compatibility with
829 # autoconf-generated configure scripts. This allows QEMU's
830 # configure to be used by RPM and similar macros that set
831 # lots of directory switches by default.
833 --with-system-pixman) pixman="system"
835 --without-system-pixman) pixman="internal"
837 --without-pixman) pixman="none"
839 --disable-sdl) sdl="no"
841 --enable-sdl) sdl="yes"
843 --with-sdlabi=*) sdlabi="$optarg"
845 --disable-qom-cast-debug) qom_cast_debug="no"
847 --enable-qom-cast-debug) qom_cast_debug="yes"
849 --disable-virtfs) virtfs="no"
851 --enable-virtfs) virtfs="yes"
853 --disable-vnc) vnc="no"
855 --enable-vnc) vnc="yes"
857 --oss-lib=*) oss_lib="$optarg"
859 --audio-drv-list=*) audio_drv_list="$optarg"
861 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
863 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
865 --enable-debug-tcg) debug_tcg="yes"
867 --disable-debug-tcg) debug_tcg="no"
869 --enable-debug)
870 # Enable debugging options that aren't excessively noisy
871 debug_tcg="yes"
872 debug="yes"
873 strip_opt="no"
875 --enable-sparse) sparse="yes"
877 --disable-sparse) sparse="no"
879 --disable-strip) strip_opt="no"
881 --disable-vnc-tls) vnc_tls="no"
883 --enable-vnc-tls) vnc_tls="yes"
885 --disable-vnc-sasl) vnc_sasl="no"
887 --enable-vnc-sasl) vnc_sasl="yes"
889 --disable-vnc-jpeg) vnc_jpeg="no"
891 --enable-vnc-jpeg) vnc_jpeg="yes"
893 --disable-vnc-png) vnc_png="no"
895 --enable-vnc-png) vnc_png="yes"
897 --disable-vnc-ws) vnc_ws="no"
899 --enable-vnc-ws) vnc_ws="yes"
901 --disable-slirp) slirp="no"
903 --disable-uuid) uuid="no"
905 --enable-uuid) uuid="yes"
907 --disable-vde) vde="no"
909 --enable-vde) vde="yes"
911 --disable-netmap) netmap="no"
913 --enable-netmap) netmap="yes"
915 --disable-xen) xen="no"
917 --enable-xen) xen="yes"
919 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
921 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
923 --disable-brlapi) brlapi="no"
925 --enable-brlapi) brlapi="yes"
927 --disable-bluez) bluez="no"
929 --enable-bluez) bluez="yes"
931 --disable-kvm) kvm="no"
933 --enable-kvm) kvm="yes"
935 --disable-tcg-interpreter) tcg_interpreter="no"
937 --enable-tcg-interpreter) tcg_interpreter="yes"
939 --disable-cap-ng) cap_ng="no"
941 --enable-cap-ng) cap_ng="yes"
943 --disable-spice) spice="no"
945 --enable-spice) spice="yes"
947 --disable-libiscsi) libiscsi="no"
949 --enable-libiscsi) libiscsi="yes"
951 --disable-libnfs) libnfs="no"
953 --enable-libnfs) libnfs="yes"
955 --enable-profiler) profiler="yes"
957 --disable-cocoa) cocoa="no"
959 --enable-cocoa)
960 cocoa="yes" ;
961 sdl="no" ;
962 audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
964 --disable-system) softmmu="no"
966 --enable-system) softmmu="yes"
968 --disable-user)
969 linux_user="no" ;
970 bsd_user="no" ;
972 --enable-user) ;;
973 --disable-linux-user) linux_user="no"
975 --enable-linux-user) linux_user="yes"
977 --disable-bsd-user) bsd_user="no"
979 --enable-bsd-user) bsd_user="yes"
981 --enable-guest-base) guest_base="yes"
983 --disable-guest-base) guest_base="no"
985 --enable-pie) pie="yes"
987 --disable-pie) pie="no"
989 --enable-werror) werror="yes"
991 --disable-werror) werror="no"
993 --enable-stack-protector) stack_protector="yes"
995 --disable-stack-protector) stack_protector="no"
997 --disable-curses) curses="no"
999 --enable-curses) curses="yes"
1001 --disable-curl) curl="no"
1003 --enable-curl) curl="yes"
1005 --disable-fdt) fdt="no"
1007 --enable-fdt) fdt="yes"
1009 --disable-linux-aio) linux_aio="no"
1011 --enable-linux-aio) linux_aio="yes"
1013 --disable-attr) attr="no"
1015 --enable-attr) attr="yes"
1017 --disable-blobs) blobs="no"
1019 --with-pkgversion=*) pkgversion=" ($optarg)"
1021 --with-coroutine=*) coroutine="$optarg"
1023 --disable-coroutine-pool) coroutine_pool="no"
1025 --enable-coroutine-pool) coroutine_pool="yes"
1027 --disable-docs) docs="no"
1029 --enable-docs) docs="yes"
1031 --disable-vhost-net) vhost_net="no"
1033 --enable-vhost-net) vhost_net="yes"
1035 --disable-vhost-scsi) vhost_scsi="no"
1037 --enable-vhost-scsi) vhost_scsi="yes"
1039 --disable-opengl) opengl="no"
1041 --enable-opengl) opengl="yes"
1043 --disable-rbd) rbd="no"
1045 --enable-rbd) rbd="yes"
1047 --disable-xfsctl) xfs="no"
1049 --enable-xfsctl) xfs="yes"
1051 --disable-smartcard-nss) smartcard_nss="no"
1053 --enable-smartcard-nss) smartcard_nss="yes"
1055 --disable-libusb) libusb="no"
1057 --enable-libusb) libusb="yes"
1059 --disable-usb-redir) usb_redir="no"
1061 --enable-usb-redir) usb_redir="yes"
1063 --disable-zlib-test) zlib="no"
1065 --disable-lzo) lzo="no"
1067 --enable-lzo) lzo="yes"
1069 --disable-snappy) snappy="no"
1071 --enable-snappy) snappy="yes"
1073 --disable-bzip2) bzip2="no"
1075 --enable-bzip2) bzip2="yes"
1077 --enable-guest-agent) guest_agent="yes"
1079 --disable-guest-agent) guest_agent="no"
1081 --with-vss-sdk) vss_win32_sdk=""
1083 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1085 --without-vss-sdk) vss_win32_sdk="no"
1087 --with-win-sdk) win_sdk=""
1089 --with-win-sdk=*) win_sdk="$optarg"
1091 --without-win-sdk) win_sdk="no"
1093 --enable-tools) want_tools="yes"
1095 --disable-tools) want_tools="no"
1097 --enable-seccomp) seccomp="yes"
1099 --disable-seccomp) seccomp="no"
1101 --disable-glusterfs) glusterfs="no"
1103 --enable-glusterfs) glusterfs="yes"
1105 --disable-archipelago) archipelago="no"
1107 --enable-archipelago) archipelago="yes"
1109 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1110 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1112 --disable-gtk) gtk="no"
1114 --enable-gtk) gtk="yes"
1116 --enable-rdma) rdma="yes"
1118 --disable-rdma) rdma="no"
1120 --with-gtkabi=*) gtkabi="$optarg"
1122 --disable-vte) vte="no"
1124 --enable-vte) vte="yes"
1126 --disable-tpm) tpm="no"
1128 --enable-tpm) tpm="yes"
1130 --disable-libssh2) libssh2="no"
1132 --enable-libssh2) libssh2="yes"
1134 --enable-vhdx) vhdx="yes"
1136 --disable-vhdx) vhdx="no"
1138 --disable-quorum) quorum="no"
1140 --enable-quorum) quorum="yes"
1142 --disable-numa) numa="no"
1144 --enable-numa) numa="yes"
1146 --disable-tcmalloc) tcmalloc="no"
1148 --enable-tcmalloc) tcmalloc="yes"
1151 echo "ERROR: unknown option $opt"
1152 echo "Try '$0 --help' for more information"
1153 exit 1
1155 esac
1156 done
1158 if ! has $python; then
1159 error_exit "Python not found. Use --python=/path/to/python"
1162 # Note that if the Python conditional here evaluates True we will exit
1163 # with status 1 which is a shell 'false' value.
1164 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
1165 error_exit "Cannot use '$python', Python 2.4 or later is required." \
1166 "Note that Python 3 or later is not yet supported." \
1167 "Use --python=/path/to/python to specify a supported Python."
1170 # The -B switch was added in Python 2.6.
1171 # If it is supplied, compiled files are not written.
1172 # Use it for Python versions which support it.
1173 if $python -B -c 'import sys; sys.exit(0)' 2>/dev/null; then
1174 python="$python -B"
1177 case "$cpu" in
1178 ppc)
1179 CPU_CFLAGS="-m32"
1180 LDFLAGS="-m32 $LDFLAGS"
1182 ppc64)
1183 CPU_CFLAGS="-m64"
1184 LDFLAGS="-m64 $LDFLAGS"
1186 sparc)
1187 LDFLAGS="-m32 $LDFLAGS"
1188 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1190 sparc64)
1191 LDFLAGS="-m64 $LDFLAGS"
1192 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1194 s390)
1195 CPU_CFLAGS="-m31"
1196 LDFLAGS="-m31 $LDFLAGS"
1198 s390x)
1199 CPU_CFLAGS="-m64"
1200 LDFLAGS="-m64 $LDFLAGS"
1202 i386)
1203 CPU_CFLAGS="-m32"
1204 LDFLAGS="-m32 $LDFLAGS"
1205 cc_i386='$(CC) -m32'
1207 x86_64)
1208 CPU_CFLAGS="-m64"
1209 LDFLAGS="-m64 $LDFLAGS"
1210 cc_i386='$(CC) -m32'
1212 x32)
1213 CPU_CFLAGS="-mx32"
1214 LDFLAGS="-mx32 $LDFLAGS"
1215 cc_i386='$(CC) -m32'
1217 # No special flags required for other host CPUs
1218 esac
1220 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1221 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1223 default_target_list=""
1225 mak_wilds=""
1227 if [ "$softmmu" = "yes" ]; then
1228 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1230 if [ "$linux_user" = "yes" ]; then
1231 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1233 if [ "$bsd_user" = "yes" ]; then
1234 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1237 for config in $mak_wilds; do
1238 default_target_list="${default_target_list} $(basename "$config" .mak)"
1239 done
1241 if test x"$show_help" = x"yes" ; then
1242 cat << EOF
1244 Usage: configure [options]
1245 Options: [defaults in brackets after descriptions]
1247 Standard options:
1248 --help print this message
1249 --prefix=PREFIX install in PREFIX [$prefix]
1250 --interp-prefix=PREFIX where to find shared libraries, etc.
1251 use %M for cpu name [$interp_prefix]
1252 --target-list=LIST set target list (default: build everything)
1253 $(echo Available targets: $default_target_list | \
1254 fold -s -w 53 | sed -e 's/^/ /')
1256 Advanced options (experts only):
1257 --source-path=PATH path of source code [$source_path]
1258 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1259 --cc=CC use C compiler CC [$cc]
1260 --iasl=IASL use ACPI compiler IASL [$iasl]
1261 --host-cc=CC use C compiler CC [$host_cc] for code run at
1262 build time
1263 --cxx=CXX use C++ compiler CXX [$cxx]
1264 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1265 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1266 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1267 --make=MAKE use specified make [$make]
1268 --install=INSTALL use specified install [$install]
1269 --python=PYTHON use specified python [$python]
1270 --smbd=SMBD use specified smbd [$smbd]
1271 --static enable static build [$static]
1272 --mandir=PATH install man pages in PATH
1273 --datadir=PATH install firmware in PATH$confsuffix
1274 --docdir=PATH install documentation in PATH$confsuffix
1275 --bindir=PATH install binaries in PATH
1276 --libdir=PATH install libraries in PATH
1277 --sysconfdir=PATH install config in PATH$confsuffix
1278 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1279 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1280 --enable-modules enable modules support
1281 --enable-debug-tcg enable TCG debugging
1282 --disable-debug-tcg disable TCG debugging (default)
1283 --enable-debug-info enable debugging information (default)
1284 --disable-debug-info disable debugging information
1285 --enable-debug enable common debug build options
1286 --enable-sparse enable sparse checker
1287 --disable-sparse disable sparse checker (default)
1288 --disable-strip disable stripping binaries
1289 --disable-werror disable compilation abort on warning
1290 --disable-stack-protector disable compiler-provided stack protection
1291 --disable-sdl disable SDL
1292 --enable-sdl enable SDL
1293 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1294 --disable-gtk disable gtk UI
1295 --enable-gtk enable gtk UI
1296 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1297 --disable-virtfs disable VirtFS
1298 --enable-virtfs enable VirtFS
1299 --disable-vnc disable VNC
1300 --enable-vnc enable VNC
1301 --disable-cocoa disable Cocoa (Mac OS X only)
1302 --enable-cocoa enable Cocoa (default on Mac OS X)
1303 --audio-drv-list=LIST set audio drivers list:
1304 Available drivers: $audio_possible_drivers
1305 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1306 --block-drv-rw-whitelist=L
1307 set block driver read-write whitelist
1308 (affects only QEMU, not qemu-img)
1309 --block-drv-ro-whitelist=L
1310 set block driver read-only whitelist
1311 (affects only QEMU, not qemu-img)
1312 --disable-xen disable xen backend driver support
1313 --enable-xen enable xen backend driver support
1314 --disable-xen-pci-passthrough
1315 --enable-xen-pci-passthrough
1316 --disable-brlapi disable BrlAPI
1317 --enable-brlapi enable BrlAPI
1318 --disable-vnc-tls disable TLS encryption for VNC server
1319 --enable-vnc-tls enable TLS encryption for VNC server
1320 --disable-vnc-sasl disable SASL encryption for VNC server
1321 --enable-vnc-sasl enable SASL encryption for VNC server
1322 --disable-vnc-jpeg disable JPEG lossy compression for VNC server
1323 --enable-vnc-jpeg enable JPEG lossy compression for VNC server
1324 --disable-vnc-png disable PNG compression for VNC server (default)
1325 --enable-vnc-png enable PNG compression for VNC server
1326 --disable-vnc-ws disable Websockets support for VNC server
1327 --enable-vnc-ws enable Websockets support for VNC server
1328 --disable-curses disable curses output
1329 --enable-curses enable curses output
1330 --disable-curl disable curl connectivity
1331 --enable-curl enable curl connectivity
1332 --disable-fdt disable fdt device tree
1333 --enable-fdt enable fdt device tree
1334 --disable-bluez disable bluez stack connectivity
1335 --enable-bluez enable bluez stack connectivity
1336 --disable-slirp disable SLIRP userspace network connectivity
1337 --disable-kvm disable KVM acceleration support
1338 --enable-kvm enable KVM acceleration support
1339 --disable-rdma disable RDMA-based migration support
1340 --enable-rdma enable RDMA-based migration support
1341 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1342 --enable-system enable all system emulation targets
1343 --disable-system disable all system emulation targets
1344 --enable-user enable supported user emulation targets
1345 --disable-user disable all user emulation targets
1346 --enable-linux-user enable all linux usermode emulation targets
1347 --disable-linux-user disable all linux usermode emulation targets
1348 --enable-bsd-user enable all BSD usermode emulation targets
1349 --disable-bsd-user disable all BSD usermode emulation targets
1350 --enable-guest-base enable GUEST_BASE support for usermode
1351 emulation targets
1352 --disable-guest-base disable GUEST_BASE support
1353 --enable-pie build Position Independent Executables
1354 --disable-pie do not build Position Independent Executables
1355 --oss-lib path to OSS library
1356 --cpu=CPU Build for host CPU [$cpu]
1357 --disable-uuid disable uuid support
1358 --enable-uuid enable uuid support
1359 --disable-vde disable support for vde network
1360 --enable-vde enable support for vde network
1361 --disable-netmap disable support for netmap network
1362 --enable-netmap enable support for netmap network
1363 --disable-linux-aio disable Linux AIO support
1364 --enable-linux-aio enable Linux AIO support
1365 --disable-cap-ng disable libcap-ng support
1366 --enable-cap-ng enable libcap-ng support
1367 --disable-attr disable attr and xattr support
1368 --enable-attr enable attr and xattr support
1369 --disable-blobs disable installing provided firmware blobs
1370 --enable-docs enable documentation build
1371 --disable-docs disable documentation build
1372 --disable-vhost-net disable vhost-net acceleration support
1373 --enable-vhost-net enable vhost-net acceleration support
1374 --enable-trace-backends=B Set trace backend
1375 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1376 --with-trace-file=NAME Full PATH,NAME of file to store traces
1377 Default:trace-<pid>
1378 --disable-spice disable spice
1379 --enable-spice enable spice
1380 --enable-rbd enable building the rados block device (rbd)
1381 --disable-libiscsi disable iscsi support
1382 --enable-libiscsi enable iscsi support
1383 --disable-libnfs disable nfs support
1384 --enable-libnfs enable nfs support
1385 --disable-smartcard-nss disable smartcard nss support
1386 --enable-smartcard-nss enable smartcard nss support
1387 --disable-libusb disable libusb (for usb passthrough)
1388 --enable-libusb enable libusb (for usb passthrough)
1389 --disable-usb-redir disable usb network redirection support
1390 --enable-usb-redir enable usb network redirection support
1391 --enable-lzo enable the support of lzo compression library
1392 --enable-snappy enable the support of snappy compression library
1393 --enable-bzip2 enable the support of bzip2 compression library (for
1394 reading bzip2-compressed dmg images)
1395 --disable-guest-agent disable building of the QEMU Guest Agent
1396 --enable-guest-agent enable building of the QEMU Guest Agent
1397 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1398 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1399 --disable-seccomp disable seccomp support
1400 --enable-seccomp enable seccomp support
1401 --with-coroutine=BACKEND coroutine backend. Supported options:
1402 gthread, ucontext, sigaltstack, windows
1403 --disable-coroutine-pool disable coroutine freelist (worse performance)
1404 --enable-coroutine-pool enable coroutine freelist (better performance)
1405 --enable-glusterfs enable GlusterFS backend
1406 --disable-glusterfs disable GlusterFS backend
1407 --enable-archipelago enable Archipelago backend
1408 --disable-archipelago disable Archipelago backend
1409 --enable-gcov enable test coverage analysis with gcov
1410 --gcov=GCOV use specified gcov [$gcov_tool]
1411 --disable-tpm disable TPM support
1412 --enable-tpm enable TPM support
1413 --disable-libssh2 disable ssh block device support
1414 --enable-libssh2 enable ssh block device support
1415 --disable-vhdx disable support for the Microsoft VHDX image format
1416 --enable-vhdx enable support for the Microsoft VHDX image format
1417 --disable-quorum disable quorum block filter support
1418 --enable-quorum enable quorum block filter support
1419 --disable-numa disable libnuma support
1420 --enable-numa enable libnuma support
1421 --disable-tcmalloc disable tcmalloc support
1422 --enable-tcmalloc enable tcmalloc support
1424 NOTE: The object files are built at the place where configure is launched
1426 exit 0
1429 # Now we have handled --enable-tcg-interpreter and know we're not just
1430 # printing the help message, bail out if the host CPU isn't supported.
1431 if test "$ARCH" = "unknown"; then
1432 if test "$tcg_interpreter" = "yes" ; then
1433 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1434 ARCH=tci
1435 else
1436 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1440 # Consult white-list to determine whether to enable werror
1441 # by default. Only enable by default for git builds
1442 z_version=`cut -f3 -d. $source_path/VERSION`
1444 if test -z "$werror" ; then
1445 if test -d "$source_path/.git" -a \
1446 "$linux" = "yes" ; then
1447 werror="yes"
1448 else
1449 werror="no"
1453 # check that the C compiler works.
1454 write_c_skeleton;
1455 if compile_object ; then
1456 : C compiler works ok
1457 else
1458 error_exit "\"$cc\" either does not exist or does not work"
1461 # Check that the C++ compiler exists and works with the C compiler
1462 if has $cxx; then
1463 cat > $TMPC <<EOF
1464 int c_function(void);
1465 int main(void) { return c_function(); }
1468 compile_object
1470 cat > $TMPCXX <<EOF
1471 extern "C" {
1472 int c_function(void);
1474 int c_function(void) { return 42; }
1477 update_cxxflags
1479 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1480 # C++ compiler $cxx works ok with C compiler $cc
1482 else
1483 echo "C++ compiler $cxx does not work with C compiler $cc"
1484 echo "Disabling C++ specific optional code"
1485 cxx=
1487 else
1488 echo "No C++ compiler available; disabling C++ specific optional code"
1489 cxx=
1492 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1493 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1494 gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1495 gcc_flags="-Wendif-labels $gcc_flags"
1496 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1497 gcc_flags="-Wno-string-plus-int $gcc_flags"
1498 # Note that we do not add -Werror to gcc_flags here, because that would
1499 # enable it for all configure tests. If a configure test failed due
1500 # to -Werror this would just silently disable some features,
1501 # so it's too error prone.
1503 cc_has_warning_flag() {
1504 write_c_skeleton;
1506 # Use the positive sense of the flag when testing for -Wno-wombat
1507 # support (gcc will happily accept the -Wno- form of unknown
1508 # warning options).
1509 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1510 compile_prog "-Werror $optflag" ""
1513 for flag in $gcc_flags; do
1514 if cc_has_warning_flag $flag ; then
1515 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1517 done
1519 if test "$stack_protector" != "no"; then
1520 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1521 sp_on=0
1522 for flag in $gcc_flags; do
1523 # We need to check both a compile and a link, since some compiler
1524 # setups fail only on a .c->.o compile and some only at link time
1525 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1526 compile_prog "-Werror $flag" ""; then
1527 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1528 LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
1529 sp_on=1
1530 break
1532 done
1533 if test "$stack_protector" = yes; then
1534 if test $sp_on = 0; then
1535 error_exit "Stack protector not supported"
1540 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1541 # large functions that use global variables. The bug is in all releases of
1542 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1543 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1544 cat > $TMPC << EOF
1545 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1546 int main(void) { return 0; }
1547 #else
1548 #error No bug in this compiler.
1549 #endif
1551 if compile_prog "-Werror -fno-gcse" "" ; then
1552 TRANSLATE_OPT_CFLAGS=-fno-gcse
1555 if test "$static" = "yes" ; then
1556 if test "$modules" = "yes" ; then
1557 error_exit "static and modules are mutually incompatible"
1559 if test "$pie" = "yes" ; then
1560 error_exit "static and pie are mutually incompatible"
1561 else
1562 pie="no"
1566 # Unconditional check for compiler __thread support
1567 cat > $TMPC << EOF
1568 static __thread int tls_var;
1569 int main(void) { return tls_var; }
1572 if ! compile_prog "-Werror" "" ; then
1573 error_exit "Your compiler does not support the __thread specifier for " \
1574 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1577 if test "$pie" = ""; then
1578 case "$cpu-$targetos" in
1579 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1582 pie="no"
1584 esac
1587 if test "$pie" != "no" ; then
1588 cat > $TMPC << EOF
1590 #ifdef __linux__
1591 # define THREAD __thread
1592 #else
1593 # define THREAD
1594 #endif
1596 static THREAD int tls_var;
1598 int main(void) { return tls_var; }
1601 if compile_prog "-fPIE -DPIE" "-pie"; then
1602 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1603 LDFLAGS="-pie $LDFLAGS"
1604 pie="yes"
1605 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1606 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1608 else
1609 if test "$pie" = "yes"; then
1610 error_exit "PIE not available due to missing toolchain support"
1611 else
1612 echo "Disabling PIE due to missing toolchain support"
1613 pie="no"
1617 if compile_prog "-Werror -fno-pie" "-nopie"; then
1618 CFLAGS_NOPIE="-fno-pie"
1619 LDFLAGS_NOPIE="-nopie"
1623 # check for broken gcc and libtool in RHEL5
1624 if test -n "$libtool" -a "$pie" != "no" ; then
1625 cat > $TMPC <<EOF
1627 void *f(unsigned char *buf, int len);
1628 void *g(unsigned char *buf, int len);
1630 void *
1631 f(unsigned char *buf, int len)
1633 return (void*)0L;
1636 void *
1637 g(unsigned char *buf, int len)
1639 return f(buf, len);
1643 if ! libtool_prog; then
1644 echo "Disabling libtool due to broken toolchain support"
1645 libtool=
1649 ##########################################
1650 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1651 # use i686 as default anyway, but for those that don't, an explicit
1652 # specification is necessary
1654 if test "$cpu" = "i386"; then
1655 cat > $TMPC << EOF
1656 static int sfaa(int *ptr)
1658 return __sync_fetch_and_and(ptr, 0);
1661 int main(void)
1663 int val = 42;
1664 val = __sync_val_compare_and_swap(&val, 0, 1);
1665 sfaa(&val);
1666 return val;
1669 if ! compile_prog "" "" ; then
1670 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1674 #########################################
1675 # Solaris specific configure tool chain decisions
1677 if test "$solaris" = "yes" ; then
1678 if has $install; then
1680 else
1681 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1682 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1683 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1685 if test "`path_of $install`" = "/usr/sbin/install" ; then
1686 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1687 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1688 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1690 if has ar; then
1692 else
1693 if test -f /usr/ccs/bin/ar ; then
1694 error_exit "No path includes ar" \
1695 "Add /usr/ccs/bin to your path and rerun configure"
1697 error_exit "No path includes ar"
1701 if test -z "${target_list+xxx}" ; then
1702 target_list="$default_target_list"
1703 else
1704 target_list=`echo "$target_list" | sed -e 's/,/ /g'`
1707 # Check that we recognised the target name; this allows a more
1708 # friendly error message than if we let it fall through.
1709 for target in $target_list; do
1710 case " $default_target_list " in
1711 *" $target "*)
1714 error_exit "Unknown target name '$target'"
1716 esac
1717 done
1719 # see if system emulation was really requested
1720 case " $target_list " in
1721 *"-softmmu "*) softmmu=yes
1723 *) softmmu=no
1725 esac
1727 feature_not_found() {
1728 feature=$1
1729 remedy=$2
1731 error_exit "User requested feature $feature" \
1732 "configure was not able to find it." \
1733 "$remedy"
1736 # ---
1737 # big/little endian test
1738 cat > $TMPC << EOF
1739 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1740 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1741 extern int foo(short *, short *);
1742 int main(int argc, char *argv[]) {
1743 return foo(big_endian, little_endian);
1747 if compile_object ; then
1748 if grep -q BiGeNdIaN $TMPO ; then
1749 bigendian="yes"
1750 elif grep -q LiTtLeEnDiAn $TMPO ; then
1751 bigendian="no"
1752 else
1753 echo big/little test failed
1755 else
1756 echo big/little test failed
1759 ##########################################
1760 # L2TPV3 probe
1762 cat > $TMPC <<EOF
1763 #include <sys/socket.h>
1764 #include <linux/ip.h>
1765 int main(void) { return sizeof(struct mmsghdr); }
1767 if compile_prog "" "" ; then
1768 l2tpv3=yes
1769 else
1770 l2tpv3=no
1773 ##########################################
1774 # pkg-config probe
1776 if ! has "$pkg_config_exe"; then
1777 error_exit "pkg-config binary '$pkg_config_exe' not found"
1780 ##########################################
1781 # NPTL probe
1783 if test "$linux_user" = "yes"; then
1784 cat > $TMPC <<EOF
1785 #include <sched.h>
1786 #include <linux/futex.h>
1787 int main(void) {
1788 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1789 #error bork
1790 #endif
1791 return 0;
1794 if ! compile_object ; then
1795 feature_not_found "nptl" "Install glibc and linux kernel headers."
1799 ##########################################
1800 # zlib check
1802 if test "$zlib" != "no" ; then
1803 cat > $TMPC << EOF
1804 #include <zlib.h>
1805 int main(void) { zlibVersion(); return 0; }
1807 if compile_prog "" "-lz" ; then
1809 else
1810 error_exit "zlib check failed" \
1811 "Make sure to have the zlib libs and headers installed."
1814 LIBS="$LIBS -lz"
1816 ##########################################
1817 # lzo check
1819 if test "$lzo" != "no" ; then
1820 cat > $TMPC << EOF
1821 #include <lzo/lzo1x.h>
1822 int main(void) { lzo_version(); return 0; }
1824 if compile_prog "" "-llzo2" ; then
1825 libs_softmmu="$libs_softmmu -llzo2"
1826 lzo="yes"
1827 else
1828 if test "$lzo" = "yes"; then
1829 feature_not_found "liblzo2" "Install liblzo2 devel"
1831 lzo="no"
1835 ##########################################
1836 # snappy check
1838 if test "$snappy" != "no" ; then
1839 cat > $TMPC << EOF
1840 #include <snappy-c.h>
1841 int main(void) { snappy_max_compressed_length(4096); return 0; }
1843 if compile_prog "" "-lsnappy" ; then
1844 libs_softmmu="$libs_softmmu -lsnappy"
1845 snappy="yes"
1846 else
1847 if test "$snappy" = "yes"; then
1848 feature_not_found "libsnappy" "Install libsnappy devel"
1850 snappy="no"
1854 ##########################################
1855 # bzip2 check
1857 if test "$bzip2" != "no" ; then
1858 cat > $TMPC << EOF
1859 #include <bzlib.h>
1860 int main(void) { BZ2_bzlibVersion(); return 0; }
1862 if compile_prog "" "-lbz2" ; then
1863 bzip2="yes"
1864 else
1865 if test "$bzip2" = "yes"; then
1866 feature_not_found "libbzip2" "Install libbzip2 devel"
1868 bzip2="no"
1872 ##########################################
1873 # libseccomp check
1875 if test "$seccomp" != "no" ; then
1876 if test "$cpu" = "i386" || test "$cpu" = "x86_64" &&
1877 $pkg_config --atleast-version=2.1.1 libseccomp; then
1878 libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`"
1879 QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`"
1880 seccomp="yes"
1881 else
1882 if test "$seccomp" = "yes"; then
1883 feature_not_found "libseccomp" "Install libseccomp devel >= 2.1.1"
1885 seccomp="no"
1888 ##########################################
1889 # xen probe
1891 if test "$xen" != "no" ; then
1892 xen_libs="-lxenstore -lxenctrl -lxenguest"
1894 # First we test whether Xen headers and libraries are available.
1895 # If no, we are done and there is no Xen support.
1896 # If yes, more tests are run to detect the Xen version.
1898 # Xen (any)
1899 cat > $TMPC <<EOF
1900 #include <xenctrl.h>
1901 int main(void) {
1902 return 0;
1905 if ! compile_prog "" "$xen_libs" ; then
1906 # Xen not found
1907 if test "$xen" = "yes" ; then
1908 feature_not_found "xen" "Install xen devel"
1910 xen=no
1912 # Xen unstable
1913 elif
1914 cat > $TMPC <<EOF &&
1915 #include <xenctrl.h>
1916 #include <xenstore.h>
1917 #include <stdint.h>
1918 #include <xen/hvm/hvm_info_table.h>
1919 #if !defined(HVM_MAX_VCPUS)
1920 # error HVM_MAX_VCPUS not defined
1921 #endif
1922 int main(void) {
1923 xc_interface *xc;
1924 xs_daemon_open();
1925 xc = xc_interface_open(0, 0, 0);
1926 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1927 xc_gnttab_open(NULL, 0);
1928 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1929 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1930 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
1931 return 0;
1934 compile_prog "" "$xen_libs"
1935 then
1936 xen_ctrl_version=450
1937 xen=yes
1939 elif
1940 cat > $TMPC <<EOF &&
1941 #include <xenctrl.h>
1942 #include <xenstore.h>
1943 #include <stdint.h>
1944 #include <xen/hvm/hvm_info_table.h>
1945 #if !defined(HVM_MAX_VCPUS)
1946 # error HVM_MAX_VCPUS not defined
1947 #endif
1948 int main(void) {
1949 xc_interface *xc;
1950 xs_daemon_open();
1951 xc = xc_interface_open(0, 0, 0);
1952 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1953 xc_gnttab_open(NULL, 0);
1954 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1955 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1956 return 0;
1959 compile_prog "" "$xen_libs"
1960 then
1961 xen_ctrl_version=420
1962 xen=yes
1964 elif
1965 cat > $TMPC <<EOF &&
1966 #include <xenctrl.h>
1967 #include <xs.h>
1968 #include <stdint.h>
1969 #include <xen/hvm/hvm_info_table.h>
1970 #if !defined(HVM_MAX_VCPUS)
1971 # error HVM_MAX_VCPUS not defined
1972 #endif
1973 int main(void) {
1974 xs_daemon_open();
1975 xc_interface_open(0, 0, 0);
1976 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1977 xc_gnttab_open(NULL, 0);
1978 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1979 return 0;
1982 compile_prog "" "$xen_libs"
1983 then
1984 xen_ctrl_version=410
1985 xen=yes
1987 # Xen 4.0.0
1988 elif
1989 cat > $TMPC <<EOF &&
1990 #include <xenctrl.h>
1991 #include <xs.h>
1992 #include <stdint.h>
1993 #include <xen/hvm/hvm_info_table.h>
1994 #if !defined(HVM_MAX_VCPUS)
1995 # error HVM_MAX_VCPUS not defined
1996 #endif
1997 int main(void) {
1998 struct xen_add_to_physmap xatp = {
1999 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
2001 xs_daemon_open();
2002 xc_interface_open();
2003 xc_gnttab_open();
2004 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2005 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
2006 return 0;
2009 compile_prog "" "$xen_libs"
2010 then
2011 xen_ctrl_version=400
2012 xen=yes
2014 # Xen 3.4.0
2015 elif
2016 cat > $TMPC <<EOF &&
2017 #include <xenctrl.h>
2018 #include <xs.h>
2019 int main(void) {
2020 struct xen_add_to_physmap xatp = {
2021 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
2023 xs_daemon_open();
2024 xc_interface_open();
2025 xc_gnttab_open();
2026 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2027 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
2028 return 0;
2031 compile_prog "" "$xen_libs"
2032 then
2033 xen_ctrl_version=340
2034 xen=yes
2036 # Xen 3.3.0
2037 elif
2038 cat > $TMPC <<EOF &&
2039 #include <xenctrl.h>
2040 #include <xs.h>
2041 int main(void) {
2042 xs_daemon_open();
2043 xc_interface_open();
2044 xc_gnttab_open();
2045 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2046 return 0;
2049 compile_prog "" "$xen_libs"
2050 then
2051 xen_ctrl_version=330
2052 xen=yes
2054 # Xen version unsupported
2055 else
2056 if test "$xen" = "yes" ; then
2057 feature_not_found "xen (unsupported version)" "Install supported xen (e.g. 4.0, 3.4, 3.3)"
2059 xen=no
2062 if test "$xen" = yes; then
2063 libs_softmmu="$xen_libs $libs_softmmu"
2067 if test "$xen_pci_passthrough" != "no"; then
2068 if test "$xen" = "yes" && test "$linux" = "yes" &&
2069 test "$xen_ctrl_version" -ge 340; then
2070 xen_pci_passthrough=yes
2071 else
2072 if test "$xen_pci_passthrough" = "yes"; then
2073 if test "$xen_ctrl_version" -lt 340; then
2074 error_exit "User requested feature Xen PCI Passthrough" \
2075 "This feature does not work with Xen 3.3"
2077 error_exit "User requested feature Xen PCI Passthrough" \
2078 " but this feature requires /sys from Linux"
2080 xen_pci_passthrough=no
2084 ##########################################
2085 # libtool probe
2087 if ! has $libtool; then
2088 libtool=
2091 # MacOSX ships with a libtool which isn't the GNU one; weed this
2092 # out by checking whether libtool supports the --version switch
2093 if test -n "$libtool"; then
2094 if ! "$libtool" --version >/dev/null 2>&1; then
2095 libtool=
2099 ##########################################
2100 # Sparse probe
2101 if test "$sparse" != "no" ; then
2102 if has cgcc; then
2103 sparse=yes
2104 else
2105 if test "$sparse" = "yes" ; then
2106 feature_not_found "sparse" "Install sparse binary"
2108 sparse=no
2112 ##########################################
2113 # X11 probe
2114 x11_cflags=
2115 x11_libs=-lX11
2116 if $pkg_config --exists "x11"; then
2117 x11_cflags=`$pkg_config --cflags x11`
2118 x11_libs=`$pkg_config --libs x11`
2121 ##########################################
2122 # GTK probe
2124 if test "$gtkabi" = ""; then
2125 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2126 # Use 3.0 as a fallback if that is available.
2127 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2128 gtkabi=2.0
2129 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2130 gtkabi=3.0
2131 else
2132 gtkabi=2.0
2136 if test "$gtk" != "no"; then
2137 gtkpackage="gtk+-$gtkabi"
2138 gtkx11package="gtk+-x11-$gtkabi"
2139 if test "$gtkabi" = "3.0" ; then
2140 gtkversion="3.0.0"
2141 else
2142 gtkversion="2.18.0"
2144 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2145 gtk_cflags=`$pkg_config --cflags $gtkpackage`
2146 gtk_libs=`$pkg_config --libs $gtkpackage`
2147 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2148 gtk_cflags="$gtk_cflags $x11_cflags"
2149 gtk_libs="$gtk_libs $x11_libs"
2151 libs_softmmu="$gtk_libs $libs_softmmu"
2152 gtk="yes"
2153 elif test "$gtk" = "yes"; then
2154 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2155 else
2156 gtk="no"
2160 ##########################################
2161 # VTE probe
2163 if test "$vte" != "no"; then
2164 if test "$gtkabi" = "3.0"; then
2165 vtepackage="vte-2.90"
2166 vteversion="0.32.0"
2167 else
2168 vtepackage="vte"
2169 vteversion="0.24.0"
2171 if $pkg_config --exists "$vtepackage >= $vteversion"; then
2172 vte_cflags=`$pkg_config --cflags $vtepackage`
2173 vte_libs=`$pkg_config --libs $vtepackage`
2174 libs_softmmu="$vte_libs $libs_softmmu"
2175 vte="yes"
2176 elif test "$vte" = "yes"; then
2177 if test "$gtkabi" = "3.0"; then
2178 feature_not_found "vte" "Install libvte-2.90 devel"
2179 else
2180 feature_not_found "vte" "Install libvte devel"
2182 else
2183 vte="no"
2187 ##########################################
2188 # SDL probe
2190 # Look for sdl configuration program (pkg-config or sdl-config). Try
2191 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2193 if test $sdlabi = "2.0"; then
2194 sdl_config=$sdl2_config
2195 sdlname=sdl2
2196 sdlconfigname=sdl2_config
2197 else
2198 sdlname=sdl
2199 sdlconfigname=sdl_config
2202 if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2203 sdl_config=$sdlconfigname
2206 if $pkg_config $sdlname --exists; then
2207 sdlconfig="$pkg_config $sdlname"
2208 _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
2209 elif has ${sdl_config}; then
2210 sdlconfig="$sdl_config"
2211 _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2212 else
2213 if test "$sdl" = "yes" ; then
2214 feature_not_found "sdl" "Install SDL devel"
2216 sdl=no
2218 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2219 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2222 sdl_too_old=no
2223 if test "$sdl" != "no" ; then
2224 cat > $TMPC << EOF
2225 #include <SDL.h>
2226 #undef main /* We don't want SDL to override our main() */
2227 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2229 sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
2230 if test "$static" = "yes" ; then
2231 sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2232 else
2233 sdl_libs=`$sdlconfig --libs 2> /dev/null`
2235 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2236 if test "$_sdlversion" -lt 121 ; then
2237 sdl_too_old=yes
2238 else
2239 if test "$cocoa" = "no" ; then
2240 sdl=yes
2244 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2245 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2246 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2247 sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2248 sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
2250 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2252 else
2253 sdl=no
2255 fi # static link
2256 else # sdl not found
2257 if test "$sdl" = "yes" ; then
2258 feature_not_found "sdl" "Install SDL devel"
2260 sdl=no
2261 fi # sdl compile test
2264 if test "$sdl" = "yes" ; then
2265 cat > $TMPC <<EOF
2266 #include <SDL.h>
2267 #if defined(SDL_VIDEO_DRIVER_X11)
2268 #include <X11/XKBlib.h>
2269 #else
2270 #error No x11 support
2271 #endif
2272 int main(void) { return 0; }
2274 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2275 sdl_cflags="$sdl_cflags $x11_cflags"
2276 sdl_libs="$sdl_libs $x11_libs"
2278 libs_softmmu="$sdl_libs $libs_softmmu"
2281 ##########################################
2282 # RDMA needs OpenFabrics libraries
2283 if test "$rdma" != "no" ; then
2284 cat > $TMPC <<EOF
2285 #include <rdma/rdma_cma.h>
2286 int main(void) { return 0; }
2288 rdma_libs="-lrdmacm -libverbs"
2289 if compile_prog "" "$rdma_libs" ; then
2290 rdma="yes"
2291 libs_softmmu="$libs_softmmu $rdma_libs"
2292 else
2293 if test "$rdma" = "yes" ; then
2294 error_exit \
2295 " OpenFabrics librdmacm/libibverbs not present." \
2296 " Your options:" \
2297 " (1) Fast: Install infiniband packages from your distro." \
2298 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2299 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2301 rdma="no"
2305 ##########################################
2306 # VNC TLS/WS detection
2307 if test "$vnc" = "yes" -a \( "$vnc_tls" != "no" -o "$vnc_ws" != "no" \) ; then
2308 cat > $TMPC <<EOF
2309 #include <gnutls/gnutls.h>
2310 int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
2312 vnc_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2313 vnc_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2314 if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then
2315 if test "$vnc_tls" != "no" ; then
2316 vnc_tls=yes
2318 if test "$vnc_ws" != "no" ; then
2319 vnc_ws=yes
2321 libs_softmmu="$vnc_tls_libs $libs_softmmu"
2322 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_tls_cflags"
2323 else
2324 if test "$vnc_tls" = "yes" ; then
2325 feature_not_found "vnc-tls" "Install gnutls devel"
2327 if test "$vnc_ws" = "yes" ; then
2328 feature_not_found "vnc-ws" "Install gnutls devel"
2330 vnc_tls=no
2331 vnc_ws=no
2335 ##########################################
2336 # Quorum probe (check for gnutls)
2337 if test "$quorum" != "no" ; then
2338 cat > $TMPC <<EOF
2339 #include <gnutls/gnutls.h>
2340 #include <gnutls/crypto.h>
2341 int main(void) {char data[4096], digest[32];
2342 gnutls_hash_fast(GNUTLS_DIG_SHA256, data, 4096, digest);
2343 return 0;
2346 quorum_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2347 quorum_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2348 if compile_prog "$quorum_tls_cflags" "$quorum_tls_libs" ; then
2349 qcow_tls=yes
2350 libs_softmmu="$quorum_tls_libs $libs_softmmu"
2351 libs_tools="$quorum_tls_libs $libs_softmmu"
2352 QEMU_CFLAGS="$QEMU_CFLAGS $quorum_tls_cflags"
2353 quorum="yes"
2354 else
2355 if test "$quorum" = "yes"; then
2356 feature_not_found "gnutls" "gnutls > 2.10.0 required to compile Quorum"
2358 quorum="no"
2362 ##########################################
2363 # VNC SASL detection
2364 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2365 cat > $TMPC <<EOF
2366 #include <sasl/sasl.h>
2367 #include <stdio.h>
2368 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2370 # Assuming Cyrus-SASL installed in /usr prefix
2371 vnc_sasl_cflags=""
2372 vnc_sasl_libs="-lsasl2"
2373 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2374 vnc_sasl=yes
2375 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2376 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2377 else
2378 if test "$vnc_sasl" = "yes" ; then
2379 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2381 vnc_sasl=no
2385 ##########################################
2386 # VNC JPEG detection
2387 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2388 cat > $TMPC <<EOF
2389 #include <stdio.h>
2390 #include <jpeglib.h>
2391 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2393 vnc_jpeg_cflags=""
2394 vnc_jpeg_libs="-ljpeg"
2395 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2396 vnc_jpeg=yes
2397 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2398 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2399 else
2400 if test "$vnc_jpeg" = "yes" ; then
2401 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2403 vnc_jpeg=no
2407 ##########################################
2408 # VNC PNG detection
2409 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2410 cat > $TMPC <<EOF
2411 //#include <stdio.h>
2412 #include <png.h>
2413 #include <stddef.h>
2414 int main(void) {
2415 png_structp png_ptr;
2416 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2417 return png_ptr != 0;
2420 if $pkg_config libpng --exists; then
2421 vnc_png_cflags=`$pkg_config libpng --cflags`
2422 vnc_png_libs=`$pkg_config libpng --libs`
2423 else
2424 vnc_png_cflags=""
2425 vnc_png_libs="-lpng"
2427 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2428 vnc_png=yes
2429 libs_softmmu="$vnc_png_libs $libs_softmmu"
2430 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2431 else
2432 if test "$vnc_png" = "yes" ; then
2433 feature_not_found "vnc-png" "Install libpng devel"
2435 vnc_png=no
2439 ##########################################
2440 # fnmatch() probe, used for ACL routines
2441 fnmatch="no"
2442 cat > $TMPC << EOF
2443 #include <fnmatch.h>
2444 int main(void)
2446 fnmatch("foo", "foo", 0);
2447 return 0;
2450 if compile_prog "" "" ; then
2451 fnmatch="yes"
2454 ##########################################
2455 # uuid_generate() probe, used for vdi block driver
2456 # Note that on some systems (notably MacOSX) no extra library
2457 # need be linked to get the uuid functions.
2458 if test "$uuid" != "no" ; then
2459 uuid_libs="-luuid"
2460 cat > $TMPC << EOF
2461 #include <uuid/uuid.h>
2462 int main(void)
2464 uuid_t my_uuid;
2465 uuid_generate(my_uuid);
2466 return 0;
2469 if compile_prog "" "" ; then
2470 uuid="yes"
2471 elif compile_prog "" "$uuid_libs" ; then
2472 uuid="yes"
2473 libs_softmmu="$uuid_libs $libs_softmmu"
2474 libs_tools="$uuid_libs $libs_tools"
2475 else
2476 if test "$uuid" = "yes" ; then
2477 feature_not_found "uuid" "Install libuuid devel"
2479 uuid=no
2483 if test "$vhdx" = "yes" ; then
2484 if test "$uuid" = "no" ; then
2485 error_exit "uuid required for VHDX support"
2487 elif test "$vhdx" != "no" ; then
2488 if test "$uuid" = "yes" ; then
2489 vhdx=yes
2490 else
2491 vhdx=no
2495 ##########################################
2496 # xfsctl() probe, used for raw-posix
2497 if test "$xfs" != "no" ; then
2498 cat > $TMPC << EOF
2499 #include <stddef.h> /* NULL */
2500 #include <xfs/xfs.h>
2501 int main(void)
2503 xfsctl(NULL, 0, 0, NULL);
2504 return 0;
2507 if compile_prog "" "" ; then
2508 xfs="yes"
2509 else
2510 if test "$xfs" = "yes" ; then
2511 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2513 xfs=no
2517 ##########################################
2518 # vde libraries probe
2519 if test "$vde" != "no" ; then
2520 vde_libs="-lvdeplug"
2521 cat > $TMPC << EOF
2522 #include <libvdeplug.h>
2523 int main(void)
2525 struct vde_open_args a = {0, 0, 0};
2526 char s[] = "";
2527 vde_open(s, s, &a);
2528 return 0;
2531 if compile_prog "" "$vde_libs" ; then
2532 vde=yes
2533 libs_softmmu="$vde_libs $libs_softmmu"
2534 libs_tools="$vde_libs $libs_tools"
2535 else
2536 if test "$vde" = "yes" ; then
2537 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2539 vde=no
2543 ##########################################
2544 # netmap support probe
2545 # Apart from looking for netmap headers, we make sure that the host API version
2546 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2547 # a minor/major version number. Minor new features will be marked with values up
2548 # to 15, and if something happens that requires a change to the backend we will
2549 # move above 15, submit the backend fixes and modify this two bounds.
2550 if test "$netmap" != "no" ; then
2551 cat > $TMPC << EOF
2552 #include <inttypes.h>
2553 #include <net/if.h>
2554 #include <net/netmap.h>
2555 #include <net/netmap_user.h>
2556 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2557 #error
2558 #endif
2559 int main(void) { return 0; }
2561 if compile_prog "" "" ; then
2562 netmap=yes
2563 else
2564 if test "$netmap" = "yes" ; then
2565 feature_not_found "netmap"
2567 netmap=no
2571 ##########################################
2572 # libcap-ng library probe
2573 if test "$cap_ng" != "no" ; then
2574 cap_libs="-lcap-ng"
2575 cat > $TMPC << EOF
2576 #include <cap-ng.h>
2577 int main(void)
2579 capng_capability_to_name(CAPNG_EFFECTIVE);
2580 return 0;
2583 if compile_prog "" "$cap_libs" ; then
2584 cap_ng=yes
2585 libs_tools="$cap_libs $libs_tools"
2586 else
2587 if test "$cap_ng" = "yes" ; then
2588 feature_not_found "cap_ng" "Install libcap-ng devel"
2590 cap_ng=no
2594 ##########################################
2595 # Sound support libraries probe
2597 audio_drv_probe()
2599 drv=$1
2600 hdr=$2
2601 lib=$3
2602 exp=$4
2603 cfl=$5
2604 cat > $TMPC << EOF
2605 #include <$hdr>
2606 int main(void) { $exp }
2608 if compile_prog "$cfl" "$lib" ; then
2610 else
2611 error_exit "$drv check failed" \
2612 "Make sure to have the $drv libs and headers installed."
2616 audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2617 for drv in $audio_drv_list; do
2618 case $drv in
2619 alsa)
2620 audio_drv_probe $drv alsa/asoundlib.h -lasound \
2621 "return snd_pcm_close((snd_pcm_t *)0);"
2622 libs_softmmu="-lasound $libs_softmmu"
2626 audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2627 "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2628 libs_softmmu="-lpulse $libs_softmmu"
2629 audio_pt_int="yes"
2632 coreaudio)
2633 libs_softmmu="-framework CoreAudio $libs_softmmu"
2636 dsound)
2637 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2638 audio_win_int="yes"
2641 oss)
2642 libs_softmmu="$oss_lib $libs_softmmu"
2645 sdl|wav)
2646 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2650 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2651 error_exit "Unknown driver '$drv' selected" \
2652 "Possible drivers are: $audio_possible_drivers"
2655 esac
2656 done
2658 ##########################################
2659 # BrlAPI probe
2661 if test "$brlapi" != "no" ; then
2662 brlapi_libs="-lbrlapi"
2663 cat > $TMPC << EOF
2664 #include <brlapi.h>
2665 #include <stddef.h>
2666 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2668 if compile_prog "" "$brlapi_libs" ; then
2669 brlapi=yes
2670 libs_softmmu="$brlapi_libs $libs_softmmu"
2671 else
2672 if test "$brlapi" = "yes" ; then
2673 feature_not_found "brlapi" "Install brlapi devel"
2675 brlapi=no
2679 ##########################################
2680 # curses probe
2681 if test "$curses" != "no" ; then
2682 if test "$mingw32" = "yes" ; then
2683 curses_list="-lpdcurses"
2684 else
2685 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2687 curses_found=no
2688 cat > $TMPC << EOF
2689 #include <curses.h>
2690 int main(void) {
2691 const char *s = curses_version();
2692 resize_term(0, 0);
2693 return s != 0;
2696 IFS=:
2697 for curses_lib in $curses_list; do
2698 unset IFS
2699 if compile_prog "" "$curses_lib" ; then
2700 curses_found=yes
2701 libs_softmmu="$curses_lib $libs_softmmu"
2702 break
2704 done
2705 unset IFS
2706 if test "$curses_found" = "yes" ; then
2707 curses=yes
2708 else
2709 if test "$curses" = "yes" ; then
2710 feature_not_found "curses" "Install ncurses devel"
2712 curses=no
2716 ##########################################
2717 # curl probe
2718 if test "$curl" != "no" ; then
2719 if $pkg_config libcurl --exists; then
2720 curlconfig="$pkg_config libcurl"
2721 else
2722 curlconfig=curl-config
2724 cat > $TMPC << EOF
2725 #include <curl/curl.h>
2726 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2728 curl_cflags=`$curlconfig --cflags 2>/dev/null`
2729 curl_libs=`$curlconfig --libs 2>/dev/null`
2730 if compile_prog "$curl_cflags" "$curl_libs" ; then
2731 curl=yes
2732 else
2733 if test "$curl" = "yes" ; then
2734 feature_not_found "curl" "Install libcurl devel"
2736 curl=no
2738 fi # test "$curl"
2740 ##########################################
2741 # bluez support probe
2742 if test "$bluez" != "no" ; then
2743 cat > $TMPC << EOF
2744 #include <bluetooth/bluetooth.h>
2745 int main(void) { return bt_error(0); }
2747 bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2748 bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
2749 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2750 bluez=yes
2751 libs_softmmu="$bluez_libs $libs_softmmu"
2752 else
2753 if test "$bluez" = "yes" ; then
2754 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2756 bluez="no"
2760 ##########################################
2761 # glib support probe
2763 glib_req_ver=2.22
2764 glib_modules=gthread-2.0
2765 if test "$modules" = yes; then
2766 glib_modules="$glib_modules gmodule-2.0"
2769 for i in $glib_modules; do
2770 if $pkg_config --atleast-version=$glib_req_ver $i; then
2771 glib_cflags=`$pkg_config --cflags $i`
2772 glib_libs=`$pkg_config --libs $i`
2773 CFLAGS="$glib_cflags $CFLAGS"
2774 LIBS="$glib_libs $LIBS"
2775 libs_qga="$glib_libs $libs_qga"
2776 else
2777 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2779 done
2781 # g_test_trap_subprocess added in 2.38. Used by some tests.
2782 glib_subprocess=yes
2783 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2784 glib_subprocess=no
2787 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
2788 cat > $TMPC << EOF
2789 #include <glib.h>
2790 int main(void) { return 0; }
2792 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
2793 if cc_has_warning_flag "-Wno-unknown-attributes"; then
2794 glib_cflags="-Wno-unknown-attributes $glib_cflags"
2795 CFLAGS="-Wno-unknown-attributes $CFLAGS"
2799 ##########################################
2800 # SHA command probe for modules
2801 if test "$modules" = yes; then
2802 shacmd_probe="sha1sum sha1 shasum"
2803 for c in $shacmd_probe; do
2804 if has $c; then
2805 shacmd="$c"
2806 break
2808 done
2809 if test "$shacmd" = ""; then
2810 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2814 ##########################################
2815 # pixman support probe
2817 if test "$pixman" = ""; then
2818 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
2819 pixman="none"
2820 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
2821 pixman="system"
2822 else
2823 pixman="internal"
2826 if test "$pixman" = "none"; then
2827 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
2828 error_exit "pixman disabled but system emulation or tools build" \
2829 "enabled. You can turn off pixman only if you also" \
2830 "disable all system emulation targets and the tools" \
2831 "build with '--disable-tools --disable-system'."
2833 pixman_cflags=
2834 pixman_libs=
2835 elif test "$pixman" = "system"; then
2836 # pixman version has been checked above
2837 pixman_cflags=`$pkg_config --cflags pixman-1`
2838 pixman_libs=`$pkg_config --libs pixman-1`
2839 else
2840 if test ! -d ${source_path}/pixman/pixman; then
2841 error_exit "pixman >= 0.21.8 not present. Your options:" \
2842 " (1) Preferred: Install the pixman devel package (any recent" \
2843 " distro should have packages as Xorg needs pixman too)." \
2844 " (2) Fetch the pixman submodule, using:" \
2845 " git submodule update --init pixman"
2847 mkdir -p pixman/pixman
2848 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
2849 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
2852 ##########################################
2853 # libcap probe
2855 if test "$cap" != "no" ; then
2856 cat > $TMPC <<EOF
2857 #include <stdio.h>
2858 #include <sys/capability.h>
2859 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
2861 if compile_prog "" "-lcap" ; then
2862 cap=yes
2863 else
2864 cap=no
2868 ##########################################
2869 # pthread probe
2870 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
2872 pthread=no
2873 cat > $TMPC << EOF
2874 #include <pthread.h>
2875 static void *f(void *p) { return NULL; }
2876 int main(void) {
2877 pthread_t thread;
2878 pthread_create(&thread, 0, f, 0);
2879 return 0;
2882 if compile_prog "" "" ; then
2883 pthread=yes
2884 else
2885 for pthread_lib in $PTHREADLIBS_LIST; do
2886 if compile_prog "" "$pthread_lib" ; then
2887 pthread=yes
2888 found=no
2889 for lib_entry in $LIBS; do
2890 if test "$lib_entry" = "$pthread_lib"; then
2891 found=yes
2892 break
2894 done
2895 if test "$found" = "no"; then
2896 LIBS="$pthread_lib $LIBS"
2898 break
2900 done
2903 if test "$mingw32" != yes -a "$pthread" = no; then
2904 error_exit "pthread check failed" \
2905 "Make sure to have the pthread libs and headers installed."
2908 # check for pthread_setname_np
2909 pthread_setname_np=no
2910 cat > $TMPC << EOF
2911 #include <pthread.h>
2913 static void *f(void *p) { return NULL; }
2914 int main(void)
2916 pthread_t thread;
2917 pthread_create(&thread, 0, f, 0);
2918 pthread_setname_np(thread, "QEMU");
2919 return 0;
2922 if compile_prog "" "$pthread_lib" ; then
2923 pthread_setname_np=yes
2926 ##########################################
2927 # rbd probe
2928 if test "$rbd" != "no" ; then
2929 cat > $TMPC <<EOF
2930 #include <stdio.h>
2931 #include <rbd/librbd.h>
2932 int main(void) {
2933 rados_t cluster;
2934 rados_create(&cluster, NULL);
2935 return 0;
2938 rbd_libs="-lrbd -lrados"
2939 if compile_prog "" "$rbd_libs" ; then
2940 rbd=yes
2941 else
2942 if test "$rbd" = "yes" ; then
2943 feature_not_found "rados block device" "Install librbd/ceph devel"
2945 rbd=no
2949 ##########################################
2950 # libssh2 probe
2951 min_libssh2_version=1.2.8
2952 if test "$libssh2" != "no" ; then
2953 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
2954 libssh2_cflags=`$pkg_config libssh2 --cflags`
2955 libssh2_libs=`$pkg_config libssh2 --libs`
2956 libssh2=yes
2957 else
2958 if test "$libssh2" = "yes" ; then
2959 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
2961 libssh2=no
2965 ##########################################
2966 # libssh2_sftp_fsync probe
2968 if test "$libssh2" = "yes"; then
2969 cat > $TMPC <<EOF
2970 #include <stdio.h>
2971 #include <libssh2.h>
2972 #include <libssh2_sftp.h>
2973 int main(void) {
2974 LIBSSH2_SESSION *session;
2975 LIBSSH2_SFTP *sftp;
2976 LIBSSH2_SFTP_HANDLE *sftp_handle;
2977 session = libssh2_session_init ();
2978 sftp = libssh2_sftp_init (session);
2979 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
2980 libssh2_sftp_fsync (sftp_handle);
2981 return 0;
2984 # libssh2_cflags/libssh2_libs defined in previous test.
2985 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
2986 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
2990 ##########################################
2991 # linux-aio probe
2993 if test "$linux_aio" != "no" ; then
2994 cat > $TMPC <<EOF
2995 #include <libaio.h>
2996 #include <sys/eventfd.h>
2997 #include <stddef.h>
2998 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3000 if compile_prog "" "-laio" ; then
3001 linux_aio=yes
3002 else
3003 if test "$linux_aio" = "yes" ; then
3004 feature_not_found "linux AIO" "Install libaio devel"
3006 linux_aio=no
3010 ##########################################
3011 # TPM passthrough is only on x86 Linux
3013 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3014 tpm_passthrough=$tpm
3015 else
3016 tpm_passthrough=no
3019 ##########################################
3020 # attr probe
3022 if test "$attr" != "no" ; then
3023 cat > $TMPC <<EOF
3024 #include <stdio.h>
3025 #include <sys/types.h>
3026 #ifdef CONFIG_LIBATTR
3027 #include <attr/xattr.h>
3028 #else
3029 #include <sys/xattr.h>
3030 #endif
3031 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3033 if compile_prog "" "" ; then
3034 attr=yes
3035 # Older distros have <attr/xattr.h>, and need -lattr:
3036 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3037 attr=yes
3038 LIBS="-lattr $LIBS"
3039 libattr=yes
3040 else
3041 if test "$attr" = "yes" ; then
3042 feature_not_found "ATTR" "Install libc6 or libattr devel"
3044 attr=no
3048 ##########################################
3049 # iovec probe
3050 cat > $TMPC <<EOF
3051 #include <sys/types.h>
3052 #include <sys/uio.h>
3053 #include <unistd.h>
3054 int main(void) { return sizeof(struct iovec); }
3056 iovec=no
3057 if compile_prog "" "" ; then
3058 iovec=yes
3061 ##########################################
3062 # preadv probe
3063 cat > $TMPC <<EOF
3064 #include <sys/types.h>
3065 #include <sys/uio.h>
3066 #include <unistd.h>
3067 int main(void) { return preadv(0, 0, 0, 0); }
3069 preadv=no
3070 if compile_prog "" "" ; then
3071 preadv=yes
3074 ##########################################
3075 # fdt probe
3076 # fdt support is mandatory for at least some target architectures,
3077 # so insist on it if we're building those system emulators.
3078 fdt_required=no
3079 for target in $target_list; do
3080 case $target in
3081 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3082 fdt_required=yes
3084 esac
3085 done
3087 if test "$fdt_required" = "yes"; then
3088 if test "$fdt" = "no"; then
3089 error_exit "fdt disabled but some requested targets require it." \
3090 "You can turn off fdt only if you also disable all the system emulation" \
3091 "targets which need it (by specifying a cut down --target-list)."
3093 fdt=yes
3096 if test "$fdt" != "no" ; then
3097 fdt_libs="-lfdt"
3098 # explicitly check for libfdt_env.h as it is missing in some stable installs
3099 # and test for required functions to make sure we are on a version >= 1.4.0
3100 cat > $TMPC << EOF
3101 #include <libfdt.h>
3102 #include <libfdt_env.h>
3103 int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3105 if compile_prog "" "$fdt_libs" ; then
3106 # system DTC is good - use it
3107 fdt=yes
3108 elif test -d ${source_path}/dtc/libfdt ; then
3109 # have submodule DTC - use it
3110 fdt=yes
3111 dtc_internal="yes"
3112 mkdir -p dtc
3113 if [ "$pwd_is_source_path" != "y" ] ; then
3114 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3115 symlink "$source_path/dtc/scripts" "dtc/scripts"
3117 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3118 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3119 elif test "$fdt" = "yes" ; then
3120 # have neither and want - prompt for system/submodule install
3121 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3122 " (1) Preferred: Install the DTC (libfdt) devel package" \
3123 " (2) Fetch the DTC submodule, using:" \
3124 " git submodule update --init dtc"
3125 else
3126 # don't have and don't want
3127 fdt_libs=
3128 fdt=no
3132 libs_softmmu="$libs_softmmu $fdt_libs"
3134 ##########################################
3135 # opengl probe (for sdl2, milkymist-tmu2)
3137 # GLX probe, used by milkymist-tmu2
3138 # this is temporary, code will be switched to egl mid-term.
3139 cat > $TMPC << EOF
3140 #include <X11/Xlib.h>
3141 #include <GL/gl.h>
3142 #include <GL/glx.h>
3143 int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
3145 if compile_prog "" "-lGL -lX11" ; then
3146 have_glx=yes
3147 else
3148 have_glx=no
3151 if test "$opengl" != "no" ; then
3152 opengl_pkgs="gl glesv2 epoxy egl"
3153 if $pkg_config $opengl_pkgs x11 && test "$have_glx" = "yes"; then
3154 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3155 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3156 opengl=yes
3157 else
3158 if test "$opengl" = "yes" ; then
3159 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3161 opengl_cflags=""
3162 opengl_libs=""
3163 opengl=no
3168 ##########################################
3169 # archipelago probe
3170 if test "$archipelago" != "no" ; then
3171 cat > $TMPC <<EOF
3172 #include <stdio.h>
3173 #include <xseg/xseg.h>
3174 #include <xseg/protocol.h>
3175 int main(void) {
3176 xseg_initialize();
3177 return 0;
3180 archipelago_libs=-lxseg
3181 if compile_prog "" "$archipelago_libs"; then
3182 archipelago="yes"
3183 libs_tools="$archipelago_libs $libs_tools"
3184 libs_softmmu="$archipelago_libs $libs_softmmu"
3186 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3187 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3188 echo "license and therefore prevent redistribution."
3189 echo
3190 echo "To disable Archipelago, use --disable-archipelago"
3191 else
3192 if test "$archipelago" = "yes" ; then
3193 feature_not_found "Archipelago backend support" "Install libxseg devel"
3195 archipelago="no"
3200 ##########################################
3201 # glusterfs probe
3202 if test "$glusterfs" != "no" ; then
3203 if $pkg_config --atleast-version=3 glusterfs-api; then
3204 glusterfs="yes"
3205 glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3206 glusterfs_libs=`$pkg_config --libs glusterfs-api`
3207 if $pkg_config --atleast-version=5 glusterfs-api; then
3208 glusterfs_discard="yes"
3210 if $pkg_config --atleast-version=6 glusterfs-api; then
3211 glusterfs_zerofill="yes"
3213 else
3214 if test "$glusterfs" = "yes" ; then
3215 feature_not_found "GlusterFS backend support" \
3216 "Install glusterfs-api devel >= 3"
3218 glusterfs="no"
3222 # Check for inotify functions when we are building linux-user
3223 # emulator. This is done because older glibc versions don't
3224 # have syscall stubs for these implemented. In that case we
3225 # don't provide them even if kernel supports them.
3227 inotify=no
3228 cat > $TMPC << EOF
3229 #include <sys/inotify.h>
3232 main(void)
3234 /* try to start inotify */
3235 return inotify_init();
3238 if compile_prog "" "" ; then
3239 inotify=yes
3242 inotify1=no
3243 cat > $TMPC << EOF
3244 #include <sys/inotify.h>
3247 main(void)
3249 /* try to start inotify */
3250 return inotify_init1(0);
3253 if compile_prog "" "" ; then
3254 inotify1=yes
3257 # check if utimensat and futimens are supported
3258 utimens=no
3259 cat > $TMPC << EOF
3260 #define _ATFILE_SOURCE
3261 #include <stddef.h>
3262 #include <fcntl.h>
3263 #include <sys/stat.h>
3265 int main(void)
3267 utimensat(AT_FDCWD, "foo", NULL, 0);
3268 futimens(0, NULL);
3269 return 0;
3272 if compile_prog "" "" ; then
3273 utimens=yes
3276 # check if pipe2 is there
3277 pipe2=no
3278 cat > $TMPC << EOF
3279 #include <unistd.h>
3280 #include <fcntl.h>
3282 int main(void)
3284 int pipefd[2];
3285 return pipe2(pipefd, O_CLOEXEC);
3288 if compile_prog "" "" ; then
3289 pipe2=yes
3292 # check if accept4 is there
3293 accept4=no
3294 cat > $TMPC << EOF
3295 #include <sys/socket.h>
3296 #include <stddef.h>
3298 int main(void)
3300 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3301 return 0;
3304 if compile_prog "" "" ; then
3305 accept4=yes
3308 # check if tee/splice is there. vmsplice was added same time.
3309 splice=no
3310 cat > $TMPC << EOF
3311 #include <unistd.h>
3312 #include <fcntl.h>
3313 #include <limits.h>
3315 int main(void)
3317 int len, fd = 0;
3318 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3319 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3320 return 0;
3323 if compile_prog "" "" ; then
3324 splice=yes
3327 ##########################################
3328 # libnuma probe
3330 if test "$numa" != "no" ; then
3331 cat > $TMPC << EOF
3332 #include <numa.h>
3333 int main(void) { return numa_available(); }
3336 if compile_prog "" "-lnuma" ; then
3337 numa=yes
3338 libs_softmmu="-lnuma $libs_softmmu"
3339 else
3340 if test "$numa" = "yes" ; then
3341 feature_not_found "numa" "install numactl devel"
3343 numa=no
3347 ##########################################
3348 # tcmalloc probe
3350 if test "$tcmalloc" = "yes" ; then
3351 cat > $TMPC << EOF
3352 #include <stdlib.h>
3353 int main(void) { malloc(1); return 0; }
3356 if compile_prog "" "-ltcmalloc" ; then
3357 LIBS="-ltcmalloc $LIBS"
3358 else
3359 feature_not_found "tcmalloc" "install gperftools devel"
3363 ##########################################
3364 # signalfd probe
3365 signalfd="no"
3366 cat > $TMPC << EOF
3367 #include <unistd.h>
3368 #include <sys/syscall.h>
3369 #include <signal.h>
3370 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3373 if compile_prog "" "" ; then
3374 signalfd=yes
3377 # check if eventfd is supported
3378 eventfd=no
3379 cat > $TMPC << EOF
3380 #include <sys/eventfd.h>
3382 int main(void)
3384 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3387 if compile_prog "" "" ; then
3388 eventfd=yes
3391 # check for fallocate
3392 fallocate=no
3393 cat > $TMPC << EOF
3394 #include <fcntl.h>
3396 int main(void)
3398 fallocate(0, 0, 0, 0);
3399 return 0;
3402 if compile_prog "" "" ; then
3403 fallocate=yes
3406 # check for fallocate hole punching
3407 fallocate_punch_hole=no
3408 cat > $TMPC << EOF
3409 #include <fcntl.h>
3410 #include <linux/falloc.h>
3412 int main(void)
3414 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3415 return 0;
3418 if compile_prog "" "" ; then
3419 fallocate_punch_hole=yes
3422 # check that fallocate supports range zeroing inside the file
3423 fallocate_zero_range=no
3424 cat > $TMPC << EOF
3425 #include <fcntl.h>
3426 #include <linux/falloc.h>
3428 int main(void)
3430 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3431 return 0;
3434 if compile_prog "" "" ; then
3435 fallocate_zero_range=yes
3438 # check for posix_fallocate
3439 posix_fallocate=no
3440 cat > $TMPC << EOF
3441 #include <fcntl.h>
3443 int main(void)
3445 posix_fallocate(0, 0, 0);
3446 return 0;
3449 if compile_prog "" "" ; then
3450 posix_fallocate=yes
3453 # check for sync_file_range
3454 sync_file_range=no
3455 cat > $TMPC << EOF
3456 #include <fcntl.h>
3458 int main(void)
3460 sync_file_range(0, 0, 0, 0);
3461 return 0;
3464 if compile_prog "" "" ; then
3465 sync_file_range=yes
3468 # check for linux/fiemap.h and FS_IOC_FIEMAP
3469 fiemap=no
3470 cat > $TMPC << EOF
3471 #include <sys/ioctl.h>
3472 #include <linux/fs.h>
3473 #include <linux/fiemap.h>
3475 int main(void)
3477 ioctl(0, FS_IOC_FIEMAP, 0);
3478 return 0;
3481 if compile_prog "" "" ; then
3482 fiemap=yes
3485 # check for dup3
3486 dup3=no
3487 cat > $TMPC << EOF
3488 #include <unistd.h>
3490 int main(void)
3492 dup3(0, 0, 0);
3493 return 0;
3496 if compile_prog "" "" ; then
3497 dup3=yes
3500 # check for ppoll support
3501 ppoll=no
3502 cat > $TMPC << EOF
3503 #include <poll.h>
3505 int main(void)
3507 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3508 ppoll(&pfd, 1, 0, 0);
3509 return 0;
3512 if compile_prog "" "" ; then
3513 ppoll=yes
3516 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3517 prctl_pr_set_timerslack=no
3518 cat > $TMPC << EOF
3519 #include <sys/prctl.h>
3521 int main(void)
3523 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3524 return 0;
3527 if compile_prog "" "" ; then
3528 prctl_pr_set_timerslack=yes
3531 # check for epoll support
3532 epoll=no
3533 cat > $TMPC << EOF
3534 #include <sys/epoll.h>
3536 int main(void)
3538 epoll_create(0);
3539 return 0;
3542 if compile_prog "" "" ; then
3543 epoll=yes
3546 # epoll_create1 and epoll_pwait are later additions
3547 # so we must check separately for their presence
3548 epoll_create1=no
3549 cat > $TMPC << EOF
3550 #include <sys/epoll.h>
3552 int main(void)
3554 /* Note that we use epoll_create1 as a value, not as
3555 * a function being called. This is necessary so that on
3556 * old SPARC glibc versions where the function was present in
3557 * the library but not declared in the header file we will
3558 * fail the configure check. (Otherwise we will get a compiler
3559 * warning but not an error, and will proceed to fail the
3560 * qemu compile where we compile with -Werror.)
3562 return (int)(uintptr_t)&epoll_create1;
3565 if compile_prog "" "" ; then
3566 epoll_create1=yes
3569 epoll_pwait=no
3570 cat > $TMPC << EOF
3571 #include <sys/epoll.h>
3573 int main(void)
3575 epoll_pwait(0, 0, 0, 0, 0);
3576 return 0;
3579 if compile_prog "" "" ; then
3580 epoll_pwait=yes
3583 # check for sendfile support
3584 sendfile=no
3585 cat > $TMPC << EOF
3586 #include <sys/sendfile.h>
3588 int main(void)
3590 return sendfile(0, 0, 0, 0);
3593 if compile_prog "" "" ; then
3594 sendfile=yes
3597 # check for timerfd support (glibc 2.8 and newer)
3598 timerfd=no
3599 cat > $TMPC << EOF
3600 #include <sys/timerfd.h>
3602 int main(void)
3604 return(timerfd_create(CLOCK_REALTIME, 0));
3607 if compile_prog "" "" ; then
3608 timerfd=yes
3611 # check for setns and unshare support
3612 setns=no
3613 cat > $TMPC << EOF
3614 #include <sched.h>
3616 int main(void)
3618 int ret;
3619 ret = setns(0, 0);
3620 ret = unshare(0);
3621 return ret;
3624 if compile_prog "" "" ; then
3625 setns=yes
3628 # Check if tools are available to build documentation.
3629 if test "$docs" != "no" ; then
3630 if has makeinfo && has pod2man; then
3631 docs=yes
3632 else
3633 if test "$docs" = "yes" ; then
3634 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3636 docs=no
3640 # Search for bswap_32 function
3641 byteswap_h=no
3642 cat > $TMPC << EOF
3643 #include <byteswap.h>
3644 int main(void) { return bswap_32(0); }
3646 if compile_prog "" "" ; then
3647 byteswap_h=yes
3650 # Search for bswap32 function
3651 bswap_h=no
3652 cat > $TMPC << EOF
3653 #include <sys/endian.h>
3654 #include <sys/types.h>
3655 #include <machine/bswap.h>
3656 int main(void) { return bswap32(0); }
3658 if compile_prog "" "" ; then
3659 bswap_h=yes
3662 ##########################################
3663 # Do we have libiscsi >= 1.9.0
3664 if test "$libiscsi" != "no" ; then
3665 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3666 libiscsi="yes"
3667 libiscsi_cflags=$($pkg_config --cflags libiscsi)
3668 libiscsi_libs=$($pkg_config --libs libiscsi)
3669 else
3670 if test "$libiscsi" = "yes" ; then
3671 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3673 libiscsi="no"
3677 ##########################################
3678 # Do we need libm
3679 cat > $TMPC << EOF
3680 #include <math.h>
3681 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3683 if compile_prog "" "" ; then
3685 elif compile_prog "" "-lm" ; then
3686 LIBS="-lm $LIBS"
3687 libs_qga="-lm $libs_qga"
3688 else
3689 error_exit "libm check failed"
3692 ##########################################
3693 # Do we need librt
3694 # uClibc provides 2 versions of clock_gettime(), one with realtime
3695 # support and one without. This means that the clock_gettime() don't
3696 # need -lrt. We still need it for timer_create() so we check for this
3697 # function in addition.
3698 cat > $TMPC <<EOF
3699 #include <signal.h>
3700 #include <time.h>
3701 int main(void) {
3702 timer_create(CLOCK_REALTIME, NULL, NULL);
3703 return clock_gettime(CLOCK_REALTIME, NULL);
3707 if compile_prog "" "" ; then
3709 # we need pthread for static linking. use previous pthread test result
3710 elif compile_prog "" "$pthread_lib -lrt" ; then
3711 LIBS="$LIBS -lrt"
3712 libs_qga="$libs_qga -lrt"
3715 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3716 "$aix" != "yes" -a "$haiku" != "yes" ; then
3717 libs_softmmu="-lutil $libs_softmmu"
3720 ##########################################
3721 # spice probe
3722 if test "$spice" != "no" ; then
3723 cat > $TMPC << EOF
3724 #include <spice.h>
3725 int main(void) { spice_server_new(); return 0; }
3727 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3728 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3729 if $pkg_config --atleast-version=0.12.0 spice-server && \
3730 $pkg_config --atleast-version=0.12.3 spice-protocol && \
3731 compile_prog "$spice_cflags" "$spice_libs" ; then
3732 spice="yes"
3733 libs_softmmu="$libs_softmmu $spice_libs"
3734 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3735 spice_protocol_version=$($pkg_config --modversion spice-protocol)
3736 spice_server_version=$($pkg_config --modversion spice-server)
3737 else
3738 if test "$spice" = "yes" ; then
3739 feature_not_found "spice" \
3740 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3742 spice="no"
3746 # check for libcacard for smartcard support
3747 smartcard_cflags=""
3748 # TODO - what's the minimal nss version we support?
3749 if test "$smartcard_nss" != "no"; then
3750 cat > $TMPC << EOF
3751 #include <pk11pub.h>
3752 int main(void) { PK11_FreeSlot(0); return 0; }
3754 # FIXME: do not include $glib_* in here
3755 nss_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
3756 nss_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
3757 test_cflags="$nss_cflags"
3758 # The header files in nss < 3.13.3 have a bug which causes them to
3759 # emit a warning. If we're going to compile QEMU with -Werror, then
3760 # test that the headers don't have this bug. Otherwise we would pass
3761 # the configure test but fail to compile QEMU later.
3762 if test "$werror" = "yes"; then
3763 test_cflags="-Werror $test_cflags"
3765 if test -n "$libtool" &&
3766 $pkg_config --atleast-version=3.12.8 nss && \
3767 compile_prog "$test_cflags" "$nss_libs"; then
3768 smartcard_nss="yes"
3769 else
3770 if test "$smartcard_nss" = "yes"; then
3771 feature_not_found "nss" "Install nss devel >= 3.12.8"
3773 smartcard_nss="no"
3777 # check for libusb
3778 if test "$libusb" != "no" ; then
3779 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
3780 libusb="yes"
3781 libusb_cflags=$($pkg_config --cflags libusb-1.0)
3782 libusb_libs=$($pkg_config --libs libusb-1.0)
3783 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3784 libs_softmmu="$libs_softmmu $libusb_libs"
3785 else
3786 if test "$libusb" = "yes"; then
3787 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
3789 libusb="no"
3793 # check for usbredirparser for usb network redirection support
3794 if test "$usb_redir" != "no" ; then
3795 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
3796 usb_redir="yes"
3797 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3798 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
3799 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
3800 libs_softmmu="$libs_softmmu $usb_redir_libs"
3801 else
3802 if test "$usb_redir" = "yes"; then
3803 feature_not_found "usb-redir" "Install usbredir devel"
3805 usb_redir="no"
3809 ##########################################
3810 # check if we have VSS SDK headers for win
3812 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3813 case "$vss_win32_sdk" in
3814 "") vss_win32_include="-I$source_path" ;;
3815 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3816 # handle path with spaces. So we symlink the headers into ".sdk/vss".
3817 vss_win32_include="-I$source_path/.sdk/vss"
3818 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3820 *) vss_win32_include="-I$vss_win32_sdk"
3821 esac
3822 cat > $TMPC << EOF
3823 #define __MIDL_user_allocate_free_DEFINED__
3824 #include <inc/win2003/vss.h>
3825 int main(void) { return VSS_CTX_BACKUP; }
3827 if compile_prog "$vss_win32_include" "" ; then
3828 guest_agent_with_vss="yes"
3829 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3830 libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3831 else
3832 if test "$vss_win32_sdk" != "" ; then
3833 echo "ERROR: Please download and install Microsoft VSS SDK:"
3834 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3835 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3836 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
3837 echo "ERROR: The headers are extracted in the directory \`inc'."
3838 feature_not_found "VSS support"
3840 guest_agent_with_vss="no"
3844 ##########################################
3845 # lookup Windows platform SDK (if not specified)
3846 # The SDK is needed only to build .tlb (type library) file of guest agent
3847 # VSS provider from the source. It is usually unnecessary because the
3848 # pre-compiled .tlb file is included.
3850 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
3851 if test -z "$win_sdk"; then
3852 programfiles="$PROGRAMFILES"
3853 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3854 if test -n "$programfiles"; then
3855 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3856 else
3857 feature_not_found "Windows SDK"
3859 elif test "$win_sdk" = "no"; then
3860 win_sdk=""
3864 ##########################################
3866 ##########################################
3867 # check if we have fdatasync
3869 fdatasync=no
3870 cat > $TMPC << EOF
3871 #include <unistd.h>
3872 int main(void) {
3873 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
3874 return fdatasync(0);
3875 #else
3876 #error Not supported
3877 #endif
3880 if compile_prog "" "" ; then
3881 fdatasync=yes
3884 ##########################################
3885 # check if we have madvise
3887 madvise=no
3888 cat > $TMPC << EOF
3889 #include <sys/types.h>
3890 #include <sys/mman.h>
3891 #include <stddef.h>
3892 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
3894 if compile_prog "" "" ; then
3895 madvise=yes
3898 ##########################################
3899 # check if we have posix_madvise
3901 posix_madvise=no
3902 cat > $TMPC << EOF
3903 #include <sys/mman.h>
3904 #include <stddef.h>
3905 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
3907 if compile_prog "" "" ; then
3908 posix_madvise=yes
3911 ##########################################
3912 # check if we have usable SIGEV_THREAD_ID
3914 sigev_thread_id=no
3915 cat > $TMPC << EOF
3916 #include <signal.h>
3917 int main(void) {
3918 struct sigevent ev;
3919 ev.sigev_notify = SIGEV_THREAD_ID;
3920 ev._sigev_un._tid = 0;
3921 asm volatile("" : : "g"(&ev));
3922 return 0;
3925 if compile_prog "" "" ; then
3926 sigev_thread_id=yes
3929 ##########################################
3930 # check if trace backend exists
3932 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
3933 if test "$?" -ne 0 ; then
3934 error_exit "invalid trace backends" \
3935 "Please choose supported trace backends."
3938 ##########################################
3939 # For 'ust' backend, test if ust headers are present
3940 if have_backend "ust"; then
3941 cat > $TMPC << EOF
3942 #include <lttng/tracepoint.h>
3943 int main(void) { return 0; }
3945 if compile_prog "" "" ; then
3946 if $pkg_config lttng-ust --exists; then
3947 lttng_ust_libs=`$pkg_config --libs lttng-ust`
3948 else
3949 lttng_ust_libs="-llttng-ust"
3951 if $pkg_config liburcu-bp --exists; then
3952 urcu_bp_libs=`$pkg_config --libs liburcu-bp`
3953 else
3954 urcu_bp_libs="-lurcu-bp"
3957 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
3958 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
3959 else
3960 error_exit "Trace backend 'ust' missing lttng-ust header files"
3964 ##########################################
3965 # For 'dtrace' backend, test if 'dtrace' command is present
3966 if have_backend "dtrace"; then
3967 if ! has 'dtrace' ; then
3968 error_exit "dtrace command is not found in PATH $PATH"
3970 trace_backend_stap="no"
3971 if has 'stap' ; then
3972 trace_backend_stap="yes"
3976 ##########################################
3977 # check and set a backend for coroutine
3979 # We prefer ucontext, but it's not always possible. The fallback
3980 # is sigcontext. gthread is not selectable except explicitly, because
3981 # it is not functional enough to run QEMU proper. (It is occasionally
3982 # useful for debugging purposes.) On Windows the only valid backend
3983 # is the Windows-specific one.
3985 ucontext_works=no
3986 if test "$darwin" != "yes"; then
3987 cat > $TMPC << EOF
3988 #include <ucontext.h>
3989 #ifdef __stub_makecontext
3990 #error Ignoring glibc stub makecontext which will always fail
3991 #endif
3992 int main(void) { makecontext(0, 0, 0); return 0; }
3994 if compile_prog "" "" ; then
3995 ucontext_works=yes
3999 if test "$coroutine" = ""; then
4000 if test "$mingw32" = "yes"; then
4001 coroutine=win32
4002 elif test "$ucontext_works" = "yes"; then
4003 coroutine=ucontext
4004 else
4005 coroutine=sigaltstack
4007 else
4008 case $coroutine in
4009 windows)
4010 if test "$mingw32" != "yes"; then
4011 error_exit "'windows' coroutine backend only valid for Windows"
4013 # Unfortunately the user visible backend name doesn't match the
4014 # coroutine-*.c filename for this case, so we have to adjust it here.
4015 coroutine=win32
4017 ucontext)
4018 if test "$ucontext_works" != "yes"; then
4019 feature_not_found "ucontext"
4022 gthread|sigaltstack)
4023 if test "$mingw32" = "yes"; then
4024 error_exit "only the 'windows' coroutine backend is valid for Windows"
4028 error_exit "unknown coroutine backend $coroutine"
4030 esac
4033 if test "$coroutine_pool" = ""; then
4034 if test "$coroutine" = "gthread"; then
4035 coroutine_pool=no
4036 else
4037 coroutine_pool=yes
4040 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4041 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4044 ##########################################
4045 # check if we have open_by_handle_at
4047 open_by_handle_at=no
4048 cat > $TMPC << EOF
4049 #include <fcntl.h>
4050 #if !defined(AT_EMPTY_PATH)
4051 # error missing definition
4052 #else
4053 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4054 #endif
4056 if compile_prog "" "" ; then
4057 open_by_handle_at=yes
4060 ########################################
4061 # check if we have linux/magic.h
4063 linux_magic_h=no
4064 cat > $TMPC << EOF
4065 #include <linux/magic.h>
4066 int main(void) {
4067 return 0;
4070 if compile_prog "" "" ; then
4071 linux_magic_h=yes
4074 ########################################
4075 # check whether we can disable warning option with a pragma (this is needed
4076 # to silence warnings in the headers of some versions of external libraries).
4077 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4078 # only a warning.
4080 # If we can't selectively disable warning in the code, disable -Werror so that
4081 # the build doesn't fail anyway.
4083 pragma_disable_unused_but_set=no
4084 cat > $TMPC << EOF
4085 #pragma GCC diagnostic push
4086 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4087 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4088 #pragma GCC diagnostic pop
4090 int main(void) {
4091 return 0;
4094 if compile_prog "-Werror" "" ; then
4095 pragma_diagnostic_available=yes
4096 else
4097 werror=no
4100 ########################################
4101 # check if we have valgrind/valgrind.h
4103 valgrind_h=no
4104 cat > $TMPC << EOF
4105 #include <valgrind/valgrind.h>
4106 int main(void) {
4107 return 0;
4110 if compile_prog "" "" ; then
4111 valgrind_h=yes
4114 ########################################
4115 # check if environ is declared
4117 has_environ=no
4118 cat > $TMPC << EOF
4119 #include <unistd.h>
4120 int main(void) {
4121 environ = 0;
4122 return 0;
4125 if compile_prog "" "" ; then
4126 has_environ=yes
4129 ########################################
4130 # check if cpuid.h is usable.
4132 cpuid_h=no
4133 cat > $TMPC << EOF
4134 #include <cpuid.h>
4135 int main(void) {
4136 unsigned a, b, c, d;
4137 int max = __get_cpuid_max(0, 0);
4139 if (max >= 1) {
4140 __cpuid(1, a, b, c, d);
4143 if (max >= 7) {
4144 __cpuid_count(7, 0, a, b, c, d);
4147 return 0;
4150 if compile_prog "" "" ; then
4151 cpuid_h=yes
4154 ########################################
4155 # check if __[u]int128_t is usable.
4157 int128=no
4158 cat > $TMPC << EOF
4159 #if defined(__clang_major__) && defined(__clang_minor__)
4160 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4161 # error __int128_t does not work in CLANG before 3.2
4162 # endif
4163 #endif
4164 __int128_t a;
4165 __uint128_t b;
4166 int main (void) {
4167 a = a + b;
4168 b = a * b;
4169 a = a * a;
4170 return 0;
4173 if compile_prog "" "" ; then
4174 int128=yes
4177 ########################################
4178 # check if getauxval is available.
4180 getauxval=no
4181 cat > $TMPC << EOF
4182 #include <sys/auxv.h>
4183 int main(void) {
4184 return getauxval(AT_HWCAP) == 0;
4187 if compile_prog "" "" ; then
4188 getauxval=yes
4191 ########################################
4192 # check if ccache is interfering with
4193 # semantic analysis of macros
4195 ccache_cpp2=no
4196 cat > $TMPC << EOF
4197 static const int Z = 1;
4198 #define fn() ({ Z; })
4199 #define TAUT(X) ((X) == Z)
4200 #define PAREN(X, Y) (X == Y)
4201 #define ID(X) (X)
4202 int main(int argc, char *argv[])
4204 int x = 0, y = 0;
4205 x = ID(x);
4206 x = fn();
4207 fn();
4208 if (PAREN(x, y)) return 0;
4209 if (TAUT(Z)) return 0;
4210 return 0;
4214 if ! compile_object "-Werror"; then
4215 ccache_cpp2=yes
4218 ##########################################
4219 # End of CC checks
4220 # After here, no more $cc or $ld runs
4222 if test "$gcov" = "yes" ; then
4223 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4224 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4225 elif test "$debug" = "no" ; then
4226 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4229 ##########################################
4230 # Do we have libnfs
4231 if test "$libnfs" != "no" ; then
4232 if $pkg_config --atleast-version=1.9.3 libnfs; then
4233 libnfs="yes"
4234 libnfs_libs=$($pkg_config --libs libnfs)
4235 LIBS="$LIBS $libnfs_libs"
4236 else
4237 if test "$libnfs" = "yes" ; then
4238 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4240 libnfs="no"
4244 # Disable zero malloc errors for official releases unless explicitly told to
4245 # enable/disable
4246 if test -z "$zero_malloc" ; then
4247 if test "$z_version" = "50" ; then
4248 zero_malloc="no"
4249 else
4250 zero_malloc="yes"
4254 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4255 if test "$werror" = "yes"; then
4256 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4259 if test "$solaris" = "no" ; then
4260 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4261 LDFLAGS="-Wl,--warn-common $LDFLAGS"
4265 # test if pod2man has --utf8 option
4266 if pod2man --help | grep -q utf8; then
4267 POD2MAN="pod2man --utf8"
4268 else
4269 POD2MAN="pod2man"
4272 # Use ASLR, no-SEH and DEP if available
4273 if test "$mingw32" = "yes" ; then
4274 for flag in --dynamicbase --no-seh --nxcompat; do
4275 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4276 LDFLAGS="-Wl,$flag $LDFLAGS"
4278 done
4281 qemu_confdir=$sysconfdir$confsuffix
4282 qemu_moddir=$libdir$confsuffix
4283 qemu_datadir=$datadir$confsuffix
4284 qemu_localedir="$datadir/locale"
4286 tools=""
4287 if test "$want_tools" = "yes" ; then
4288 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4289 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4290 tools="qemu-nbd\$(EXESUF) $tools"
4293 if test "$softmmu" = yes ; then
4294 if test "$virtfs" != no ; then
4295 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4296 virtfs=yes
4297 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4298 else
4299 if test "$virtfs" = yes; then
4300 error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4302 virtfs=no
4306 if [ "$guest_agent" != "no" ]; then
4307 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4308 tools="qemu-ga\$(EXESUF) $tools"
4309 if [ "$mingw32" = "yes" -a "$guest_agent_with_vss" = "yes" ]; then
4310 tools="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb $tools"
4312 guest_agent=yes
4313 elif [ "$guest_agent" != yes ]; then
4314 guest_agent=no
4315 else
4316 error_exit "Guest agent is not supported on this platform"
4320 # Mac OS X ships with a broken assembler
4321 roms=
4322 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4323 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4324 "$softmmu" = yes ; then
4325 roms="optionrom"
4327 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4328 roms="$roms spapr-rtas"
4331 if test "$cpu" = "s390x" ; then
4332 roms="$roms s390-ccw"
4335 # Probe for the need for relocating the user-only binary.
4336 if test "$pie" = "no" ; then
4337 textseg_addr=
4338 case "$cpu" in
4339 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4340 # ??? Rationale for choosing this address
4341 textseg_addr=0x60000000
4343 mips)
4344 # A 256M aligned address, high in the address space, with enough
4345 # room for the code_gen_buffer above it before the stack.
4346 textseg_addr=0x60000000
4348 esac
4349 if [ -n "$textseg_addr" ]; then
4350 cat > $TMPC <<EOF
4351 int main(void) { return 0; }
4353 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4354 if ! compile_prog "" "$textseg_ldflags"; then
4355 # In case ld does not support -Ttext-segment, edit the default linker
4356 # script via sed to set the .text start addr. This is needed on FreeBSD
4357 # at least.
4358 $ld --verbose | sed \
4359 -e '1,/==================================================/d' \
4360 -e '/==================================================/,$d' \
4361 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4362 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4363 textseg_ldflags="-Wl,-T../config-host.ld"
4368 # prepend pixman and ftd flags after all config tests are done
4369 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4370 libs_softmmu="$pixman_libs $libs_softmmu"
4372 echo "Install prefix $prefix"
4373 echo "BIOS directory `eval echo $qemu_datadir`"
4374 echo "binary directory `eval echo $bindir`"
4375 echo "library directory `eval echo $libdir`"
4376 echo "module directory `eval echo $qemu_moddir`"
4377 echo "libexec directory `eval echo $libexecdir`"
4378 echo "include directory `eval echo $includedir`"
4379 echo "config directory `eval echo $sysconfdir`"
4380 if test "$mingw32" = "no" ; then
4381 echo "local state directory `eval echo $local_statedir`"
4382 echo "Manual directory `eval echo $mandir`"
4383 echo "ELF interp prefix $interp_prefix"
4384 else
4385 echo "local state directory queried at runtime"
4386 echo "Windows SDK $win_sdk"
4388 echo "Source path $source_path"
4389 echo "C compiler $cc"
4390 echo "Host C compiler $host_cc"
4391 echo "C++ compiler $cxx"
4392 echo "Objective-C compiler $objcc"
4393 echo "ARFLAGS $ARFLAGS"
4394 echo "CFLAGS $CFLAGS"
4395 echo "QEMU_CFLAGS $QEMU_CFLAGS"
4396 echo "LDFLAGS $LDFLAGS"
4397 echo "make $make"
4398 echo "install $install"
4399 echo "python $python"
4400 if test "$slirp" = "yes" ; then
4401 echo "smbd $smbd"
4403 echo "module support $modules"
4404 echo "host CPU $cpu"
4405 echo "host big endian $bigendian"
4406 echo "target list $target_list"
4407 echo "tcg debug enabled $debug_tcg"
4408 echo "gprof enabled $gprof"
4409 echo "sparse enabled $sparse"
4410 echo "strip binaries $strip_opt"
4411 echo "profiler $profiler"
4412 echo "static build $static"
4413 if test "$darwin" = "yes" ; then
4414 echo "Cocoa support $cocoa"
4416 echo "pixman $pixman"
4417 echo "SDL support $sdl"
4418 echo "GTK support $gtk"
4419 echo "VTE support $vte"
4420 echo "curses support $curses"
4421 echo "curl support $curl"
4422 echo "mingw32 support $mingw32"
4423 echo "Audio drivers $audio_drv_list"
4424 echo "Block whitelist (rw) $block_drv_rw_whitelist"
4425 echo "Block whitelist (ro) $block_drv_ro_whitelist"
4426 echo "VirtFS support $virtfs"
4427 echo "VNC support $vnc"
4428 if test "$vnc" = "yes" ; then
4429 echo "VNC TLS support $vnc_tls"
4430 echo "VNC SASL support $vnc_sasl"
4431 echo "VNC JPEG support $vnc_jpeg"
4432 echo "VNC PNG support $vnc_png"
4433 echo "VNC WS support $vnc_ws"
4435 if test -n "$sparc_cpu"; then
4436 echo "Target Sparc Arch $sparc_cpu"
4438 echo "xen support $xen"
4439 if test "$xen" = "yes" ; then
4440 echo "xen ctrl version $xen_ctrl_version"
4442 echo "brlapi support $brlapi"
4443 echo "bluez support $bluez"
4444 echo "Documentation $docs"
4445 echo "GUEST_BASE $guest_base"
4446 echo "PIE $pie"
4447 echo "vde support $vde"
4448 echo "netmap support $netmap"
4449 echo "Linux AIO support $linux_aio"
4450 echo "ATTR/XATTR support $attr"
4451 echo "Install blobs $blobs"
4452 echo "KVM support $kvm"
4453 echo "RDMA support $rdma"
4454 echo "TCG interpreter $tcg_interpreter"
4455 echo "fdt support $fdt"
4456 echo "preadv support $preadv"
4457 echo "fdatasync $fdatasync"
4458 echo "madvise $madvise"
4459 echo "posix_madvise $posix_madvise"
4460 echo "sigev_thread_id $sigev_thread_id"
4461 echo "uuid support $uuid"
4462 echo "libcap-ng support $cap_ng"
4463 echo "vhost-net support $vhost_net"
4464 echo "vhost-scsi support $vhost_scsi"
4465 echo "Trace backends $trace_backends"
4466 if test "$trace_backend" = "simple"; then
4467 echo "Trace output file $trace_file-<pid>"
4469 if test "$spice" = "yes"; then
4470 echo "spice support $spice ($spice_protocol_version/$spice_server_version)"
4471 else
4472 echo "spice support $spice"
4474 echo "rbd support $rbd"
4475 echo "xfsctl support $xfs"
4476 echo "nss used $smartcard_nss"
4477 echo "libusb $libusb"
4478 echo "usb net redir $usb_redir"
4479 echo "OpenGL support $opengl"
4480 echo "libiscsi support $libiscsi"
4481 echo "libnfs support $libnfs"
4482 echo "build guest agent $guest_agent"
4483 echo "QGA VSS support $guest_agent_with_vss"
4484 echo "seccomp support $seccomp"
4485 echo "coroutine backend $coroutine"
4486 echo "coroutine pool $coroutine_pool"
4487 echo "GlusterFS support $glusterfs"
4488 echo "Archipelago support $archipelago"
4489 echo "gcov $gcov_tool"
4490 echo "gcov enabled $gcov"
4491 echo "TPM support $tpm"
4492 echo "libssh2 support $libssh2"
4493 echo "TPM passthrough $tpm_passthrough"
4494 echo "QOM debugging $qom_cast_debug"
4495 echo "vhdx $vhdx"
4496 echo "Quorum $quorum"
4497 echo "lzo support $lzo"
4498 echo "snappy support $snappy"
4499 echo "bzip2 support $bzip2"
4500 echo "NUMA host support $numa"
4501 echo "tcmalloc support $tcmalloc"
4503 if test "$sdl_too_old" = "yes"; then
4504 echo "-> Your SDL version is too old - please upgrade to have SDL support"
4507 config_host_mak="config-host.mak"
4509 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4511 echo "# Automatically generated by configure - do not modify" > $config_host_mak
4512 echo >> $config_host_mak
4514 echo all: >> $config_host_mak
4515 echo "prefix=$prefix" >> $config_host_mak
4516 echo "bindir=$bindir" >> $config_host_mak
4517 echo "libdir=$libdir" >> $config_host_mak
4518 echo "libexecdir=$libexecdir" >> $config_host_mak
4519 echo "includedir=$includedir" >> $config_host_mak
4520 echo "mandir=$mandir" >> $config_host_mak
4521 echo "sysconfdir=$sysconfdir" >> $config_host_mak
4522 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4523 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4524 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4525 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4526 if test "$mingw32" = "no" ; then
4527 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4529 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4530 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4531 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4532 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4533 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4535 echo "ARCH=$ARCH" >> $config_host_mak
4537 if test "$debug_tcg" = "yes" ; then
4538 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4540 if test "$strip_opt" = "yes" ; then
4541 echo "STRIP=${strip}" >> $config_host_mak
4543 if test "$bigendian" = "yes" ; then
4544 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4546 if test "$mingw32" = "yes" ; then
4547 echo "CONFIG_WIN32=y" >> $config_host_mak
4548 rc_version=`cat $source_path/VERSION`
4549 version_major=${rc_version%%.*}
4550 rc_version=${rc_version#*.}
4551 version_minor=${rc_version%%.*}
4552 rc_version=${rc_version#*.}
4553 version_subminor=${rc_version%%.*}
4554 version_micro=0
4555 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4556 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4557 if test "$guest_agent_with_vss" = "yes" ; then
4558 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4559 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4561 else
4562 echo "CONFIG_POSIX=y" >> $config_host_mak
4565 if test "$linux" = "yes" ; then
4566 echo "CONFIG_LINUX=y" >> $config_host_mak
4569 if test "$darwin" = "yes" ; then
4570 echo "CONFIG_DARWIN=y" >> $config_host_mak
4573 if test "$aix" = "yes" ; then
4574 echo "CONFIG_AIX=y" >> $config_host_mak
4577 if test "$solaris" = "yes" ; then
4578 echo "CONFIG_SOLARIS=y" >> $config_host_mak
4579 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
4580 if test "$needs_libsunmath" = "yes" ; then
4581 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
4584 if test "$haiku" = "yes" ; then
4585 echo "CONFIG_HAIKU=y" >> $config_host_mak
4587 if test "$static" = "yes" ; then
4588 echo "CONFIG_STATIC=y" >> $config_host_mak
4590 if test "$profiler" = "yes" ; then
4591 echo "CONFIG_PROFILER=y" >> $config_host_mak
4593 if test "$slirp" = "yes" ; then
4594 echo "CONFIG_SLIRP=y" >> $config_host_mak
4595 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4597 if test "$vde" = "yes" ; then
4598 echo "CONFIG_VDE=y" >> $config_host_mak
4600 if test "$netmap" = "yes" ; then
4601 echo "CONFIG_NETMAP=y" >> $config_host_mak
4603 if test "$l2tpv3" = "yes" ; then
4604 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4606 if test "$cap_ng" = "yes" ; then
4607 echo "CONFIG_LIBCAP=y" >> $config_host_mak
4609 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4610 for drv in $audio_drv_list; do
4611 def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4612 echo "$def=y" >> $config_host_mak
4613 done
4614 if test "$audio_pt_int" = "yes" ; then
4615 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4617 if test "$audio_win_int" = "yes" ; then
4618 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4620 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4621 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4622 if test "$vnc" = "yes" ; then
4623 echo "CONFIG_VNC=y" >> $config_host_mak
4625 if test "$vnc_tls" = "yes" ; then
4626 echo "CONFIG_VNC_TLS=y" >> $config_host_mak
4628 if test "$vnc_sasl" = "yes" ; then
4629 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4631 if test "$vnc_jpeg" = "yes" ; then
4632 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
4634 if test "$vnc_png" = "yes" ; then
4635 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
4637 if test "$vnc_ws" = "yes" ; then
4638 echo "CONFIG_VNC_WS=y" >> $config_host_mak
4639 echo "VNC_WS_CFLAGS=$vnc_ws_cflags" >> $config_host_mak
4641 if test "$fnmatch" = "yes" ; then
4642 echo "CONFIG_FNMATCH=y" >> $config_host_mak
4644 if test "$uuid" = "yes" ; then
4645 echo "CONFIG_UUID=y" >> $config_host_mak
4647 if test "$xfs" = "yes" ; then
4648 echo "CONFIG_XFS=y" >> $config_host_mak
4650 qemu_version=`head $source_path/VERSION`
4651 echo "VERSION=$qemu_version" >>$config_host_mak
4652 echo "PKGVERSION=$pkgversion" >>$config_host_mak
4653 echo "SRC_PATH=$source_path" >> $config_host_mak
4654 echo "TARGET_DIRS=$target_list" >> $config_host_mak
4655 if [ "$docs" = "yes" ] ; then
4656 echo "BUILD_DOCS=yes" >> $config_host_mak
4658 if test "$modules" = "yes"; then
4659 # $shacmd can generate a hash started with digit, which the compiler doesn't
4660 # like as an symbol. So prefix it with an underscore
4661 echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
4662 echo "CONFIG_MODULES=y" >> $config_host_mak
4664 if test "$sdl" = "yes" ; then
4665 echo "CONFIG_SDL=y" >> $config_host_mak
4666 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
4667 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
4669 if test "$cocoa" = "yes" ; then
4670 echo "CONFIG_COCOA=y" >> $config_host_mak
4672 if test "$curses" = "yes" ; then
4673 echo "CONFIG_CURSES=y" >> $config_host_mak
4675 if test "$utimens" = "yes" ; then
4676 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
4678 if test "$pipe2" = "yes" ; then
4679 echo "CONFIG_PIPE2=y" >> $config_host_mak
4681 if test "$accept4" = "yes" ; then
4682 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
4684 if test "$splice" = "yes" ; then
4685 echo "CONFIG_SPLICE=y" >> $config_host_mak
4687 if test "$eventfd" = "yes" ; then
4688 echo "CONFIG_EVENTFD=y" >> $config_host_mak
4690 if test "$fallocate" = "yes" ; then
4691 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
4693 if test "$fallocate_punch_hole" = "yes" ; then
4694 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
4696 if test "$fallocate_zero_range" = "yes" ; then
4697 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
4699 if test "$posix_fallocate" = "yes" ; then
4700 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
4702 if test "$sync_file_range" = "yes" ; then
4703 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
4705 if test "$fiemap" = "yes" ; then
4706 echo "CONFIG_FIEMAP=y" >> $config_host_mak
4708 if test "$dup3" = "yes" ; then
4709 echo "CONFIG_DUP3=y" >> $config_host_mak
4711 if test "$ppoll" = "yes" ; then
4712 echo "CONFIG_PPOLL=y" >> $config_host_mak
4714 if test "$prctl_pr_set_timerslack" = "yes" ; then
4715 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
4717 if test "$epoll" = "yes" ; then
4718 echo "CONFIG_EPOLL=y" >> $config_host_mak
4720 if test "$epoll_create1" = "yes" ; then
4721 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
4723 if test "$epoll_pwait" = "yes" ; then
4724 echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
4726 if test "$sendfile" = "yes" ; then
4727 echo "CONFIG_SENDFILE=y" >> $config_host_mak
4729 if test "$timerfd" = "yes" ; then
4730 echo "CONFIG_TIMERFD=y" >> $config_host_mak
4732 if test "$setns" = "yes" ; then
4733 echo "CONFIG_SETNS=y" >> $config_host_mak
4735 if test "$inotify" = "yes" ; then
4736 echo "CONFIG_INOTIFY=y" >> $config_host_mak
4738 if test "$inotify1" = "yes" ; then
4739 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
4741 if test "$byteswap_h" = "yes" ; then
4742 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
4744 if test "$bswap_h" = "yes" ; then
4745 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
4747 if test "$curl" = "yes" ; then
4748 echo "CONFIG_CURL=m" >> $config_host_mak
4749 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
4750 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
4752 if test "$brlapi" = "yes" ; then
4753 echo "CONFIG_BRLAPI=y" >> $config_host_mak
4755 if test "$bluez" = "yes" ; then
4756 echo "CONFIG_BLUEZ=y" >> $config_host_mak
4757 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
4759 if test "glib_subprocess" = "yes" ; then
4760 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
4762 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4763 if test "$gtk" = "yes" ; then
4764 echo "CONFIG_GTK=y" >> $config_host_mak
4765 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
4766 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
4768 if test "$vte" = "yes" ; then
4769 echo "CONFIG_VTE=y" >> $config_host_mak
4770 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
4772 if test "$xen" = "yes" ; then
4773 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4774 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4776 if test "$linux_aio" = "yes" ; then
4777 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4779 if test "$attr" = "yes" ; then
4780 echo "CONFIG_ATTR=y" >> $config_host_mak
4782 if test "$libattr" = "yes" ; then
4783 echo "CONFIG_LIBATTR=y" >> $config_host_mak
4785 if test "$virtfs" = "yes" ; then
4786 echo "CONFIG_VIRTFS=y" >> $config_host_mak
4788 if test "$vhost_scsi" = "yes" ; then
4789 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4791 if test "$vhost_net" = "yes" ; then
4792 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
4794 if test "$blobs" = "yes" ; then
4795 echo "INSTALL_BLOBS=yes" >> $config_host_mak
4797 if test "$iovec" = "yes" ; then
4798 echo "CONFIG_IOVEC=y" >> $config_host_mak
4800 if test "$preadv" = "yes" ; then
4801 echo "CONFIG_PREADV=y" >> $config_host_mak
4803 if test "$fdt" = "yes" ; then
4804 echo "CONFIG_FDT=y" >> $config_host_mak
4806 if test "$signalfd" = "yes" ; then
4807 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
4809 if test "$tcg_interpreter" = "yes" ; then
4810 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4812 if test "$fdatasync" = "yes" ; then
4813 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
4815 if test "$madvise" = "yes" ; then
4816 echo "CONFIG_MADVISE=y" >> $config_host_mak
4818 if test "$posix_madvise" = "yes" ; then
4819 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
4821 if test "$sigev_thread_id" = "yes" ; then
4822 echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
4825 if test "$spice" = "yes" ; then
4826 echo "CONFIG_SPICE=y" >> $config_host_mak
4829 if test "$smartcard_nss" = "yes" ; then
4830 echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
4831 echo "NSS_LIBS=$nss_libs" >> $config_host_mak
4832 echo "NSS_CFLAGS=$nss_cflags" >> $config_host_mak
4835 if test "$libusb" = "yes" ; then
4836 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
4839 if test "$usb_redir" = "yes" ; then
4840 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
4843 if test "$opengl" = "yes" ; then
4844 echo "CONFIG_OPENGL=y" >> $config_host_mak
4845 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
4846 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
4849 if test "$lzo" = "yes" ; then
4850 echo "CONFIG_LZO=y" >> $config_host_mak
4853 if test "$snappy" = "yes" ; then
4854 echo "CONFIG_SNAPPY=y" >> $config_host_mak
4857 if test "$bzip2" = "yes" ; then
4858 echo "CONFIG_BZIP2=y" >> $config_host_mak
4859 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
4862 if test "$libiscsi" = "yes" ; then
4863 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
4864 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
4865 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
4868 if test "$libnfs" = "yes" ; then
4869 echo "CONFIG_LIBNFS=y" >> $config_host_mak
4872 if test "$seccomp" = "yes"; then
4873 echo "CONFIG_SECCOMP=y" >> $config_host_mak
4876 # XXX: suppress that
4877 if [ "$bsd" = "yes" ] ; then
4878 echo "CONFIG_BSD=y" >> $config_host_mak
4881 if test "$zero_malloc" = "yes" ; then
4882 echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
4884 if test "$qom_cast_debug" = "yes" ; then
4885 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
4887 if test "$rbd" = "yes" ; then
4888 echo "CONFIG_RBD=m" >> $config_host_mak
4889 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
4890 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
4893 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
4894 if test "$coroutine_pool" = "yes" ; then
4895 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
4896 else
4897 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
4900 if test "$open_by_handle_at" = "yes" ; then
4901 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
4904 if test "$linux_magic_h" = "yes" ; then
4905 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
4908 if test "$pragma_diagnostic_available" = "yes" ; then
4909 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
4912 if test "$valgrind_h" = "yes" ; then
4913 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
4916 if test "$has_environ" = "yes" ; then
4917 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
4920 if test "$cpuid_h" = "yes" ; then
4921 echo "CONFIG_CPUID_H=y" >> $config_host_mak
4924 if test "$int128" = "yes" ; then
4925 echo "CONFIG_INT128=y" >> $config_host_mak
4928 if test "$getauxval" = "yes" ; then
4929 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
4932 if test "$glusterfs" = "yes" ; then
4933 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
4934 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
4935 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
4938 if test "$glusterfs_discard" = "yes" ; then
4939 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
4942 if test "$glusterfs_zerofill" = "yes" ; then
4943 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
4946 if test "$archipelago" = "yes" ; then
4947 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
4948 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
4951 if test "$libssh2" = "yes" ; then
4952 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
4953 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
4954 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
4957 if test "$quorum" = "yes" ; then
4958 echo "CONFIG_QUORUM=y" >> $config_host_mak
4961 if test "$vhdx" = "yes" ; then
4962 echo "CONFIG_VHDX=y" >> $config_host_mak
4965 # USB host support
4966 if test "$libusb" = "yes"; then
4967 echo "HOST_USB=libusb legacy" >> $config_host_mak
4968 else
4969 echo "HOST_USB=stub" >> $config_host_mak
4972 # TPM passthrough support?
4973 if test "$tpm" = "yes"; then
4974 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
4975 if test "$tpm_passthrough" = "yes"; then
4976 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
4980 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
4981 if have_backend "nop"; then
4982 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
4984 if have_backend "simple"; then
4985 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
4986 # Set the appropriate trace file.
4987 trace_file="\"$trace_file-\" FMT_pid"
4989 if have_backend "stderr"; then
4990 echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
4992 if have_backend "ust"; then
4993 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
4995 if have_backend "dtrace"; then
4996 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
4997 if test "$trace_backend_stap" = "yes" ; then
4998 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5001 if have_backend "ftrace"; then
5002 if test "$linux" = "yes" ; then
5003 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5004 else
5005 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5008 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5010 if test "$rdma" = "yes" ; then
5011 echo "CONFIG_RDMA=y" >> $config_host_mak
5014 # Hold two types of flag:
5015 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5016 # a thread we have a handle to
5017 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5018 # platform
5019 if test "$pthread_setname_np" = "yes" ; then
5020 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5021 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5024 if test "$tcg_interpreter" = "yes"; then
5025 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5026 elif test "$ARCH" = "sparc64" ; then
5027 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5028 elif test "$ARCH" = "s390x" ; then
5029 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5030 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5031 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5032 elif test "$ARCH" = "ppc64" ; then
5033 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5034 else
5035 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5037 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5039 echo "TOOLS=$tools" >> $config_host_mak
5040 echo "ROMS=$roms" >> $config_host_mak
5041 echo "MAKE=$make" >> $config_host_mak
5042 echo "INSTALL=$install" >> $config_host_mak
5043 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5044 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5045 if test -n "$libtool"; then
5046 echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
5047 echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
5048 else
5049 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5050 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5052 echo "PYTHON=$python" >> $config_host_mak
5053 echo "CC=$cc" >> $config_host_mak
5054 if $iasl -h > /dev/null 2>&1; then
5055 echo "IASL=$iasl" >> $config_host_mak
5057 echo "CC_I386=$cc_i386" >> $config_host_mak
5058 echo "HOST_CC=$host_cc" >> $config_host_mak
5059 echo "CXX=$cxx" >> $config_host_mak
5060 echo "OBJCC=$objcc" >> $config_host_mak
5061 echo "AR=$ar" >> $config_host_mak
5062 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5063 echo "AS=$as" >> $config_host_mak
5064 echo "CPP=$cpp" >> $config_host_mak
5065 echo "OBJCOPY=$objcopy" >> $config_host_mak
5066 echo "LD=$ld" >> $config_host_mak
5067 echo "NM=$nm" >> $config_host_mak
5068 echo "WINDRES=$windres" >> $config_host_mak
5069 echo "LIBTOOL=$libtool" >> $config_host_mak
5070 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5071 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5072 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5073 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5074 if test "$sparse" = "yes" ; then
5075 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
5076 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
5077 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
5078 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5079 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5081 if test "$cross_prefix" != ""; then
5082 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5083 else
5084 echo "AUTOCONF_HOST := " >> $config_host_mak
5086 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5087 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5088 echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
5089 echo "LIBS+=$LIBS" >> $config_host_mak
5090 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5091 echo "EXESUF=$EXESUF" >> $config_host_mak
5092 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5093 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5094 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5095 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5096 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5097 if test "$gcov" = "yes" ; then
5098 echo "CONFIG_GCOV=y" >> $config_host_mak
5099 echo "GCOV=$gcov_tool" >> $config_host_mak
5102 # use included Linux headers
5103 if test "$linux" = "yes" ; then
5104 mkdir -p linux-headers
5105 case "$cpu" in
5106 i386|x86_64|x32)
5107 linux_arch=x86
5109 ppcemb|ppc|ppc64)
5110 linux_arch=powerpc
5112 s390x)
5113 linux_arch=s390
5115 aarch64)
5116 linux_arch=arm64
5118 mips64)
5119 linux_arch=mips
5122 # For most CPUs the kernel architecture name and QEMU CPU name match.
5123 linux_arch="$cpu"
5125 esac
5126 # For non-KVM architectures we will not have asm headers
5127 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5128 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5132 for target in $target_list; do
5133 target_dir="$target"
5134 config_target_mak=$target_dir/config-target.mak
5135 target_name=`echo $target | cut -d '-' -f 1`
5136 target_bigendian="no"
5138 case "$target_name" in
5139 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5140 target_bigendian=yes
5142 esac
5143 target_softmmu="no"
5144 target_user_only="no"
5145 target_linux_user="no"
5146 target_bsd_user="no"
5147 case "$target" in
5148 ${target_name}-softmmu)
5149 target_softmmu="yes"
5151 ${target_name}-linux-user)
5152 if test "$linux" != "yes" ; then
5153 error_exit "Target '$target' is only available on a Linux host"
5155 target_user_only="yes"
5156 target_linux_user="yes"
5158 ${target_name}-bsd-user)
5159 if test "$bsd" != "yes" ; then
5160 error_exit "Target '$target' is only available on a BSD host"
5162 target_user_only="yes"
5163 target_bsd_user="yes"
5166 error_exit "Target '$target' not recognised"
5167 exit 1
5169 esac
5171 mkdir -p $target_dir
5172 echo "# Automatically generated by configure - do not modify" > $config_target_mak
5174 bflt="no"
5175 interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
5176 gdb_xml_files=""
5178 TARGET_ARCH="$target_name"
5179 TARGET_BASE_ARCH=""
5180 TARGET_ABI_DIR=""
5182 case "$target_name" in
5183 i386)
5185 x86_64)
5186 TARGET_BASE_ARCH=i386
5188 alpha)
5190 arm|armeb)
5191 TARGET_ARCH=arm
5192 bflt="yes"
5193 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5195 aarch64)
5196 TARGET_BASE_ARCH=arm
5197 bflt="yes"
5198 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5200 cris)
5202 lm32)
5204 m68k)
5205 bflt="yes"
5206 gdb_xml_files="cf-core.xml cf-fp.xml"
5208 microblaze|microblazeel)
5209 TARGET_ARCH=microblaze
5210 bflt="yes"
5212 mips|mipsel)
5213 TARGET_ARCH=mips
5214 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5216 mipsn32|mipsn32el)
5217 TARGET_ARCH=mips64
5218 TARGET_BASE_ARCH=mips
5219 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5220 echo "TARGET_ABI32=y" >> $config_target_mak
5222 mips64|mips64el)
5223 TARGET_ARCH=mips64
5224 TARGET_BASE_ARCH=mips
5225 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5227 moxie)
5229 or32)
5230 TARGET_ARCH=openrisc
5231 TARGET_BASE_ARCH=openrisc
5233 ppc)
5234 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5236 ppcemb)
5237 TARGET_BASE_ARCH=ppc
5238 TARGET_ABI_DIR=ppc
5239 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5241 ppc64)
5242 TARGET_BASE_ARCH=ppc
5243 TARGET_ABI_DIR=ppc
5244 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5246 ppc64le)
5247 TARGET_ARCH=ppc64
5248 TARGET_BASE_ARCH=ppc
5249 TARGET_ABI_DIR=ppc
5250 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5252 ppc64abi32)
5253 TARGET_ARCH=ppc64
5254 TARGET_BASE_ARCH=ppc
5255 TARGET_ABI_DIR=ppc
5256 echo "TARGET_ABI32=y" >> $config_target_mak
5257 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5259 sh4|sh4eb)
5260 TARGET_ARCH=sh4
5261 bflt="yes"
5263 sparc)
5265 sparc64)
5266 TARGET_BASE_ARCH=sparc
5268 sparc32plus)
5269 TARGET_ARCH=sparc64
5270 TARGET_BASE_ARCH=sparc
5271 TARGET_ABI_DIR=sparc
5272 echo "TARGET_ABI32=y" >> $config_target_mak
5274 s390x)
5275 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml"
5277 tricore)
5279 unicore32)
5281 xtensa|xtensaeb)
5282 TARGET_ARCH=xtensa
5285 error_exit "Unsupported target CPU"
5287 esac
5288 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5289 if [ "$TARGET_BASE_ARCH" = "" ]; then
5290 TARGET_BASE_ARCH=$TARGET_ARCH
5293 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5295 upper() {
5296 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5299 target_arch_name="`upper $TARGET_ARCH`"
5300 echo "TARGET_$target_arch_name=y" >> $config_target_mak
5301 echo "TARGET_NAME=$target_name" >> $config_target_mak
5302 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5303 if [ "$TARGET_ABI_DIR" = "" ]; then
5304 TARGET_ABI_DIR=$TARGET_ARCH
5306 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5307 if [ "$HOST_VARIANT_DIR" != "" ]; then
5308 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5310 case "$target_name" in
5311 i386|x86_64)
5312 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5313 echo "CONFIG_XEN=y" >> $config_target_mak
5314 if test "$xen_pci_passthrough" = yes; then
5315 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5320 esac
5321 case "$target_name" in
5322 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5323 # Make sure the target and host cpus are compatible
5324 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5325 \( "$target_name" = "$cpu" -o \
5326 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5327 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
5328 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
5329 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5330 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5331 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
5332 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
5333 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
5334 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
5335 echo "CONFIG_KVM=y" >> $config_target_mak
5336 if test "$vhost_net" = "yes" ; then
5337 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5340 esac
5341 if test "$target_bigendian" = "yes" ; then
5342 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5344 if test "$target_softmmu" = "yes" ; then
5345 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5347 if test "$target_user_only" = "yes" ; then
5348 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5349 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5351 if test "$target_linux_user" = "yes" ; then
5352 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5354 list=""
5355 if test ! -z "$gdb_xml_files" ; then
5356 for x in $gdb_xml_files; do
5357 list="$list $source_path/gdb-xml/$x"
5358 done
5359 echo "TARGET_XML_FILES=$list" >> $config_target_mak
5362 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5363 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5365 if test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then
5366 echo "CONFIG_USE_GUEST_BASE=y" >> $config_target_mak
5368 if test "$target_bsd_user" = "yes" ; then
5369 echo "CONFIG_BSD_USER=y" >> $config_target_mak
5372 # generate QEMU_CFLAGS/LDFLAGS for targets
5374 cflags=""
5375 ldflags=""
5377 for i in $ARCH $TARGET_BASE_ARCH ; do
5378 case "$i" in
5379 alpha)
5380 echo "CONFIG_ALPHA_DIS=y" >> $config_target_mak
5381 echo "CONFIG_ALPHA_DIS=y" >> config-all-disas.mak
5383 aarch64)
5384 if test -n "${cxx}"; then
5385 echo "CONFIG_ARM_A64_DIS=y" >> $config_target_mak
5386 echo "CONFIG_ARM_A64_DIS=y" >> config-all-disas.mak
5389 arm)
5390 echo "CONFIG_ARM_DIS=y" >> $config_target_mak
5391 echo "CONFIG_ARM_DIS=y" >> config-all-disas.mak
5392 if test -n "${cxx}"; then
5393 echo "CONFIG_ARM_A64_DIS=y" >> $config_target_mak
5394 echo "CONFIG_ARM_A64_DIS=y" >> config-all-disas.mak
5397 cris)
5398 echo "CONFIG_CRIS_DIS=y" >> $config_target_mak
5399 echo "CONFIG_CRIS_DIS=y" >> config-all-disas.mak
5401 hppa)
5402 echo "CONFIG_HPPA_DIS=y" >> $config_target_mak
5403 echo "CONFIG_HPPA_DIS=y" >> config-all-disas.mak
5405 i386|x86_64|x32)
5406 echo "CONFIG_I386_DIS=y" >> $config_target_mak
5407 echo "CONFIG_I386_DIS=y" >> config-all-disas.mak
5409 ia64*)
5410 echo "CONFIG_IA64_DIS=y" >> $config_target_mak
5411 echo "CONFIG_IA64_DIS=y" >> config-all-disas.mak
5413 lm32)
5414 echo "CONFIG_LM32_DIS=y" >> $config_target_mak
5415 echo "CONFIG_LM32_DIS=y" >> config-all-disas.mak
5417 m68k)
5418 echo "CONFIG_M68K_DIS=y" >> $config_target_mak
5419 echo "CONFIG_M68K_DIS=y" >> config-all-disas.mak
5421 microblaze*)
5422 echo "CONFIG_MICROBLAZE_DIS=y" >> $config_target_mak
5423 echo "CONFIG_MICROBLAZE_DIS=y" >> config-all-disas.mak
5425 mips*)
5426 echo "CONFIG_MIPS_DIS=y" >> $config_target_mak
5427 echo "CONFIG_MIPS_DIS=y" >> config-all-disas.mak
5429 moxie*)
5430 echo "CONFIG_MOXIE_DIS=y" >> $config_target_mak
5431 echo "CONFIG_MOXIE_DIS=y" >> config-all-disas.mak
5433 or32)
5434 echo "CONFIG_OPENRISC_DIS=y" >> $config_target_mak
5435 echo "CONFIG_OPENRISC_DIS=y" >> config-all-disas.mak
5437 ppc*)
5438 echo "CONFIG_PPC_DIS=y" >> $config_target_mak
5439 echo "CONFIG_PPC_DIS=y" >> config-all-disas.mak
5441 s390*)
5442 echo "CONFIG_S390_DIS=y" >> $config_target_mak
5443 echo "CONFIG_S390_DIS=y" >> config-all-disas.mak
5445 sh4)
5446 echo "CONFIG_SH4_DIS=y" >> $config_target_mak
5447 echo "CONFIG_SH4_DIS=y" >> config-all-disas.mak
5449 sparc*)
5450 echo "CONFIG_SPARC_DIS=y" >> $config_target_mak
5451 echo "CONFIG_SPARC_DIS=y" >> config-all-disas.mak
5453 xtensa*)
5454 echo "CONFIG_XTENSA_DIS=y" >> $config_target_mak
5455 echo "CONFIG_XTENSA_DIS=y" >> config-all-disas.mak
5457 esac
5458 done
5459 if test "$tcg_interpreter" = "yes" ; then
5460 echo "CONFIG_TCI_DIS=y" >> $config_target_mak
5461 echo "CONFIG_TCI_DIS=y" >> config-all-disas.mak
5464 case "$ARCH" in
5465 alpha)
5466 # Ensure there's only a single GP
5467 cflags="-msmall-data $cflags"
5469 esac
5471 if test "$gprof" = "yes" ; then
5472 echo "TARGET_GPROF=yes" >> $config_target_mak
5473 if test "$target_linux_user" = "yes" ; then
5474 cflags="-p $cflags"
5475 ldflags="-p $ldflags"
5477 if test "$target_softmmu" = "yes" ; then
5478 ldflags="-p $ldflags"
5479 echo "GPROF_CFLAGS=-p" >> $config_target_mak
5483 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5484 ldflags="$ldflags $textseg_ldflags"
5487 echo "LDFLAGS+=$ldflags" >> $config_target_mak
5488 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5490 done # for target in $targets
5492 if [ "$pixman" = "internal" ]; then
5493 echo "config-host.h: subdir-pixman" >> $config_host_mak
5496 if test "$rdma" = "yes" ; then
5497 echo "CONFIG_RDMA=y" >> $config_host_mak
5500 if [ "$dtc_internal" = "yes" ]; then
5501 echo "config-host.h: subdir-dtc" >> $config_host_mak
5504 if test "$numa" = "yes"; then
5505 echo "CONFIG_NUMA=y" >> $config_host_mak
5508 if test "$ccache_cpp2" = "yes"; then
5509 echo "export CCACHE_CPP2=y" >> $config_host_mak
5512 # build tree in object directory in case the source is not in the current directory
5513 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5514 DIRS="$DIRS fsdev"
5515 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
5516 DIRS="$DIRS roms/seabios roms/vgabios"
5517 DIRS="$DIRS qapi-generated"
5518 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5519 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5520 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
5521 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
5522 FILES="$FILES pc-bios/spapr-rtas/Makefile"
5523 FILES="$FILES pc-bios/s390-ccw/Makefile"
5524 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5525 FILES="$FILES pc-bios/qemu-icon.bmp"
5526 for bios_file in \
5527 $source_path/pc-bios/*.bin \
5528 $source_path/pc-bios/*.aml \
5529 $source_path/pc-bios/*.rom \
5530 $source_path/pc-bios/*.dtb \
5531 $source_path/pc-bios/*.img \
5532 $source_path/pc-bios/openbios-* \
5533 $source_path/pc-bios/u-boot.* \
5534 $source_path/pc-bios/palcode-*
5536 FILES="$FILES pc-bios/`basename $bios_file`"
5537 done
5538 for test_file in `find $source_path/tests/acpi-test-data -type f`
5540 FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5541 done
5542 mkdir -p $DIRS
5543 for f in $FILES ; do
5544 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5545 symlink "$source_path/$f" "$f"
5547 done
5549 # temporary config to build submodules
5550 for rom in seabios vgabios ; do
5551 config_mak=roms/$rom/config.mak
5552 echo "# Automatically generated by configure - do not modify" > $config_mak
5553 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5554 echo "AS=$as" >> $config_mak
5555 echo "CC=$cc" >> $config_mak
5556 echo "BCC=bcc" >> $config_mak
5557 echo "CPP=$cpp" >> $config_mak
5558 echo "OBJCOPY=objcopy" >> $config_mak
5559 echo "IASL=$iasl" >> $config_mak
5560 echo "LD=$ld" >> $config_mak
5561 done
5563 # set up qemu-iotests in this build directory
5564 iotests_common_env="tests/qemu-iotests/common.env"
5565 iotests_check="tests/qemu-iotests/check"
5567 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5568 echo >> "$iotests_common_env"
5569 echo "export PYTHON='$python'" >> "$iotests_common_env"
5571 if [ ! -e "$iotests_check" ]; then
5572 symlink "$source_path/$iotests_check" "$iotests_check"
5575 # Save the configure command line for later reuse.
5576 cat <<EOD >config.status
5577 #!/bin/sh
5578 # Generated by configure.
5579 # Run this file to recreate the current configuration.
5580 # Compiler output produced by configure, useful for debugging
5581 # configure, is in config.log if it exists.
5583 printf "exec" >>config.status
5584 printf " '%s'" "$0" "$@" >>config.status
5585 echo >>config.status
5586 chmod +x config.status
5588 rm -r "$TMPDIR1"