Merge remote-tracking branch 'remotes/cody/tags/jtc-for-upstream-pull-request' into...
[qemu/cris-port.git] / configure
blob33b945530e6403698bc7a0009565c517d7c95ee5
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 xen=""
250 xen_ctrl_version=""
251 xen_pci_passthrough=""
252 linux_aio=""
253 cap_ng=""
254 attr=""
255 libattr=""
256 xfs=""
258 vhost_net="no"
259 vhost_scsi="no"
260 kvm="no"
261 rdma=""
262 gprof="no"
263 debug_tcg="no"
264 debug="no"
265 strip_opt="yes"
266 tcg_interpreter="no"
267 bigendian="no"
268 mingw32="no"
269 gcov="no"
270 gcov_tool="gcov"
271 EXESUF=""
272 DSOSUF=".so"
273 LDFLAGS_SHARED="-shared"
274 modules="no"
275 prefix="/usr/local"
276 mandir="\${prefix}/share/man"
277 datadir="\${prefix}/share"
278 qemu_docdir="\${prefix}/share/doc/qemu"
279 bindir="\${prefix}/bin"
280 libdir="\${prefix}/lib"
281 libexecdir="\${prefix}/libexec"
282 includedir="\${prefix}/include"
283 sysconfdir="\${prefix}/etc"
284 local_statedir="\${prefix}/var"
285 confsuffix="/qemu"
286 slirp="yes"
287 oss_lib=""
288 bsd="no"
289 linux="no"
290 solaris="no"
291 profiler="no"
292 cocoa="no"
293 softmmu="yes"
294 linux_user="no"
295 bsd_user="no"
296 guest_base="yes"
297 aix="no"
298 blobs="yes"
299 pkgversion=""
300 pie=""
301 zero_malloc=""
302 qom_cast_debug="yes"
303 trace_backends="nop"
304 trace_file="trace"
305 spice=""
306 rbd=""
307 smartcard_nss=""
308 libusb=""
309 usb_redir=""
310 opengl=""
311 zlib="yes"
312 lzo=""
313 snappy=""
314 bzip2=""
315 guest_agent=""
316 guest_agent_with_vss="no"
317 guest_agent_ntddscsi="no"
318 guest_agent_msi=""
319 vss_win32_sdk=""
320 win_sdk="no"
321 want_tools="yes"
322 libiscsi=""
323 libnfs=""
324 coroutine=""
325 coroutine_pool=""
326 seccomp=""
327 glusterfs=""
328 glusterfs_discard="no"
329 glusterfs_zerofill="no"
330 archipelago="no"
331 gtk=""
332 gtkabi=""
333 gnutls=""
334 gnutls_hash=""
335 vte=""
336 tpm="yes"
337 libssh2=""
338 vhdx=""
339 numa=""
340 tcmalloc="no"
342 # parse CC options first
343 for opt do
344 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
345 case "$opt" in
346 --cross-prefix=*) cross_prefix="$optarg"
348 --cc=*) CC="$optarg"
350 --cxx=*) CXX="$optarg"
352 --source-path=*) source_path="$optarg"
354 --cpu=*) cpu="$optarg"
356 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
357 EXTRA_CFLAGS="$optarg"
359 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
360 EXTRA_LDFLAGS="$optarg"
362 --enable-debug-info) debug_info="yes"
364 --disable-debug-info) debug_info="no"
366 esac
367 done
368 # OS specific
369 # Using uname is really, really broken. Once we have the right set of checks
370 # we can eliminate its usage altogether.
372 # Preferred compiler:
373 # ${CC} (if set)
374 # ${cross_prefix}gcc (if cross-prefix specified)
375 # system compiler
376 if test -z "${CC}${cross_prefix}"; then
377 cc="$host_cc"
378 else
379 cc="${CC-${cross_prefix}gcc}"
382 if test -z "${CXX}${cross_prefix}"; then
383 cxx="c++"
384 else
385 cxx="${CXX-${cross_prefix}g++}"
388 ar="${AR-${cross_prefix}ar}"
389 as="${AS-${cross_prefix}as}"
390 cpp="${CPP-$cc -E}"
391 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
392 ld="${LD-${cross_prefix}ld}"
393 libtool="${LIBTOOL-${cross_prefix}libtool}"
394 nm="${NM-${cross_prefix}nm}"
395 strip="${STRIP-${cross_prefix}strip}"
396 windres="${WINDRES-${cross_prefix}windres}"
397 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
398 query_pkg_config() {
399 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
401 pkg_config=query_pkg_config
402 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
403 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
405 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
406 ARFLAGS="${ARFLAGS-rv}"
408 # default flags for all hosts
409 QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
410 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
411 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
412 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
413 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
414 if test "$debug_info" = "yes"; then
415 CFLAGS="-g $CFLAGS"
416 LDFLAGS="-g $LDFLAGS"
419 # make source path absolute
420 source_path=`cd "$source_path"; pwd`
422 # running configure in the source tree?
423 # we know that's the case if configure is there.
424 if test -f "./configure"; then
425 pwd_is_source_path="y"
426 else
427 pwd_is_source_path="n"
430 check_define() {
431 cat > $TMPC <<EOF
432 #if !defined($1)
433 #error $1 not defined
434 #endif
435 int main(void) { return 0; }
437 compile_object
440 check_include() {
441 cat > $TMPC <<EOF
442 #include <$1>
443 int main(void) { return 0; }
445 compile_object
448 write_c_skeleton() {
449 cat > $TMPC <<EOF
450 int main(void) { return 0; }
454 if check_define __linux__ ; then
455 targetos="Linux"
456 elif check_define _WIN32 ; then
457 targetos='MINGW32'
458 elif check_define __OpenBSD__ ; then
459 targetos='OpenBSD'
460 elif check_define __sun__ ; then
461 targetos='SunOS'
462 elif check_define __HAIKU__ ; then
463 targetos='Haiku'
464 else
465 targetos=`uname -s`
468 # Some host OSes need non-standard checks for which CPU to use.
469 # Note that these checks are broken for cross-compilation: if you're
470 # cross-compiling to one of these OSes then you'll need to specify
471 # the correct CPU with the --cpu option.
472 case $targetos in
473 Darwin)
474 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
475 # run 64-bit userspace code.
476 # If the user didn't specify a CPU explicitly and the kernel says this is
477 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
478 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
479 cpu="x86_64"
482 SunOS)
483 # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
484 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
485 cpu="x86_64"
487 esac
489 if test ! -z "$cpu" ; then
490 # command line argument
492 elif check_define __i386__ ; then
493 cpu="i386"
494 elif check_define __x86_64__ ; then
495 if check_define __ILP32__ ; then
496 cpu="x32"
497 else
498 cpu="x86_64"
500 elif check_define __sparc__ ; then
501 if check_define __arch64__ ; then
502 cpu="sparc64"
503 else
504 cpu="sparc"
506 elif check_define _ARCH_PPC ; then
507 if check_define _ARCH_PPC64 ; then
508 cpu="ppc64"
509 else
510 cpu="ppc"
512 elif check_define __mips__ ; then
513 cpu="mips"
514 elif check_define __ia64__ ; then
515 cpu="ia64"
516 elif check_define __s390__ ; then
517 if check_define __s390x__ ; then
518 cpu="s390x"
519 else
520 cpu="s390"
522 elif check_define __arm__ ; then
523 cpu="arm"
524 elif check_define __aarch64__ ; then
525 cpu="aarch64"
526 elif check_define __hppa__ ; then
527 cpu="hppa"
528 else
529 cpu=`uname -m`
532 ARCH=
533 # Normalise host CPU name and set ARCH.
534 # Note that this case should only have supported host CPUs, not guests.
535 case "$cpu" in
536 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
537 cpu="$cpu"
539 i386|i486|i586|i686|i86pc|BePC)
540 cpu="i386"
542 x86_64|amd64)
543 cpu="x86_64"
545 armv*b|armv*l|arm)
546 cpu="arm"
548 aarch64)
549 cpu="aarch64"
551 mips*)
552 cpu="mips"
554 sparc|sun4[cdmuv])
555 cpu="sparc"
558 # This will result in either an error or falling back to TCI later
559 ARCH=unknown
561 esac
562 if test -z "$ARCH"; then
563 ARCH="$cpu"
566 # OS specific
568 # host *BSD for user mode
569 HOST_VARIANT_DIR=""
571 case $targetos in
572 CYGWIN*)
573 mingw32="yes"
574 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
575 audio_possible_drivers="sdl"
576 audio_drv_list="sdl"
578 MINGW32*)
579 mingw32="yes"
580 audio_possible_drivers="dsound sdl"
581 if check_include dsound.h; then
582 audio_drv_list="dsound"
583 else
584 audio_drv_list=""
587 GNU/kFreeBSD)
588 bsd="yes"
589 audio_drv_list="oss"
590 audio_possible_drivers="oss sdl pa"
592 FreeBSD)
593 bsd="yes"
594 make="${MAKE-gmake}"
595 audio_drv_list="oss"
596 audio_possible_drivers="oss sdl pa"
597 # needed for kinfo_getvmmap(3) in libutil.h
598 LIBS="-lutil $LIBS"
599 netmap="" # enable netmap autodetect
600 HOST_VARIANT_DIR="freebsd"
602 DragonFly)
603 bsd="yes"
604 make="${MAKE-gmake}"
605 audio_drv_list="oss"
606 audio_possible_drivers="oss sdl pa"
607 HOST_VARIANT_DIR="dragonfly"
609 NetBSD)
610 bsd="yes"
611 make="${MAKE-gmake}"
612 audio_drv_list="oss"
613 audio_possible_drivers="oss sdl"
614 oss_lib="-lossaudio"
615 HOST_VARIANT_DIR="netbsd"
617 OpenBSD)
618 bsd="yes"
619 make="${MAKE-gmake}"
620 audio_drv_list="sdl"
621 audio_possible_drivers="sdl"
622 HOST_VARIANT_DIR="openbsd"
624 Darwin)
625 bsd="yes"
626 darwin="yes"
627 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
628 if [ "$cpu" = "x86_64" ] ; then
629 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
630 LDFLAGS="-arch x86_64 $LDFLAGS"
632 cocoa="yes"
633 audio_drv_list="coreaudio"
634 audio_possible_drivers="coreaudio sdl"
635 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
636 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
637 # Disable attempts to use ObjectiveC features in os/object.h since they
638 # won't work when we're compiling with gcc as a C compiler.
639 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
640 HOST_VARIANT_DIR="darwin"
642 SunOS)
643 solaris="yes"
644 make="${MAKE-gmake}"
645 install="${INSTALL-ginstall}"
646 ld="gld"
647 smbd="${SMBD-/usr/sfw/sbin/smbd}"
648 needs_libsunmath="no"
649 solarisrev=`uname -r | cut -f2 -d.`
650 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
651 if test "$solarisrev" -le 9 ; then
652 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
653 needs_libsunmath="yes"
654 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
655 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
656 LIBS="-lsunmath $LIBS"
657 else
658 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
659 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
660 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
661 "Studio 11 can be downloaded from www.sun.com."
665 if test -f /usr/include/sys/soundcard.h ; then
666 audio_drv_list="oss"
668 audio_possible_drivers="oss sdl"
669 # needed for CMSG_ macros in sys/socket.h
670 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
671 # needed for TIOCWIN* defines in termios.h
672 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
673 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
674 solarisnetlibs="-lsocket -lnsl -lresolv"
675 LIBS="$solarisnetlibs $LIBS"
676 libs_qga="$solarisnetlibs $libs_qga"
678 AIX)
679 aix="yes"
680 make="${MAKE-gmake}"
682 Haiku)
683 haiku="yes"
684 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
685 LIBS="-lposix_error_mapper -lnetwork $LIBS"
688 audio_drv_list="oss"
689 audio_possible_drivers="oss alsa sdl pa"
690 linux="yes"
691 linux_user="yes"
692 kvm="yes"
693 vhost_net="yes"
694 vhost_scsi="yes"
695 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
697 esac
699 if [ "$bsd" = "yes" ] ; then
700 if [ "$darwin" != "yes" ] ; then
701 bsd_user="yes"
705 : ${make=${MAKE-make}}
706 : ${install=${INSTALL-install}}
707 : ${python=${PYTHON-python}}
708 : ${smbd=${SMBD-/usr/sbin/smbd}}
710 # Default objcc to clang if available, otherwise use CC
711 if has clang; then
712 objcc=clang
713 else
714 objcc="$cc"
717 if test "$mingw32" = "yes" ; then
718 EXESUF=".exe"
719 DSOSUF=".dll"
720 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
721 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
722 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
723 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
724 write_c_skeleton;
725 if compile_prog "" "-liberty" ; then
726 LIBS="-liberty $LIBS"
728 prefix="c:/Program Files/QEMU"
729 mandir="\${prefix}"
730 datadir="\${prefix}"
731 qemu_docdir="\${prefix}"
732 bindir="\${prefix}"
733 sysconfdir="\${prefix}"
734 local_statedir=
735 confsuffix=""
736 libs_qga="-lws2_32 -lwinmm -lpowrprof -liphlpapi $libs_qga"
739 werror=""
741 for opt do
742 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
743 case "$opt" in
744 --help|-h) show_help=yes
746 --version|-V) exec cat $source_path/VERSION
748 --prefix=*) prefix="$optarg"
750 --interp-prefix=*) interp_prefix="$optarg"
752 --source-path=*)
754 --cross-prefix=*)
756 --cc=*)
758 --host-cc=*) host_cc="$optarg"
760 --cxx=*)
762 --iasl=*) iasl="$optarg"
764 --objcc=*) objcc="$optarg"
766 --make=*) make="$optarg"
768 --install=*) install="$optarg"
770 --python=*) python="$optarg"
772 --gcov=*) gcov_tool="$optarg"
774 --smbd=*) smbd="$optarg"
776 --extra-cflags=*)
778 --extra-ldflags=*)
780 --enable-debug-info)
782 --disable-debug-info)
784 --enable-modules)
785 modules="yes"
787 --cpu=*)
789 --target-list=*) target_list="$optarg"
791 --enable-trace-backends=*) trace_backends="$optarg"
793 # XXX: backwards compatibility
794 --enable-trace-backend=*) trace_backends="$optarg"
796 --with-trace-file=*) trace_file="$optarg"
798 --enable-gprof) gprof="yes"
800 --enable-gcov) gcov="yes"
802 --static)
803 static="yes"
804 LDFLAGS="-static $LDFLAGS"
805 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
807 --mandir=*) mandir="$optarg"
809 --bindir=*) bindir="$optarg"
811 --libdir=*) libdir="$optarg"
813 --libexecdir=*) libexecdir="$optarg"
815 --includedir=*) includedir="$optarg"
817 --datadir=*) datadir="$optarg"
819 --with-confsuffix=*) confsuffix="$optarg"
821 --docdir=*) qemu_docdir="$optarg"
823 --sysconfdir=*) sysconfdir="$optarg"
825 --localstatedir=*) local_statedir="$optarg"
827 --sbindir=*|--sharedstatedir=*|\
828 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
829 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
830 # These switches are silently ignored, for compatibility with
831 # autoconf-generated configure scripts. This allows QEMU's
832 # configure to be used by RPM and similar macros that set
833 # lots of directory switches by default.
835 --with-system-pixman) pixman="system"
837 --without-system-pixman) pixman="internal"
839 --without-pixman) pixman="none"
841 --disable-sdl) sdl="no"
843 --enable-sdl) sdl="yes"
845 --with-sdlabi=*) sdlabi="$optarg"
847 --disable-qom-cast-debug) qom_cast_debug="no"
849 --enable-qom-cast-debug) qom_cast_debug="yes"
851 --disable-virtfs) virtfs="no"
853 --enable-virtfs) virtfs="yes"
855 --disable-vnc) vnc="no"
857 --enable-vnc) vnc="yes"
859 --oss-lib=*) oss_lib="$optarg"
861 --audio-drv-list=*) audio_drv_list="$optarg"
863 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
865 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
867 --enable-debug-tcg) debug_tcg="yes"
869 --disable-debug-tcg) debug_tcg="no"
871 --enable-debug)
872 # Enable debugging options that aren't excessively noisy
873 debug_tcg="yes"
874 debug="yes"
875 strip_opt="no"
877 --enable-sparse) sparse="yes"
879 --disable-sparse) sparse="no"
881 --disable-strip) strip_opt="no"
883 --disable-vnc-tls) vnc_tls="no"
885 --enable-vnc-tls) vnc_tls="yes"
887 --disable-vnc-sasl) vnc_sasl="no"
889 --enable-vnc-sasl) vnc_sasl="yes"
891 --disable-vnc-jpeg) vnc_jpeg="no"
893 --enable-vnc-jpeg) vnc_jpeg="yes"
895 --disable-vnc-png) vnc_png="no"
897 --enable-vnc-png) vnc_png="yes"
899 --disable-slirp) slirp="no"
901 --disable-uuid) uuid="no"
903 --enable-uuid) uuid="yes"
905 --disable-vde) vde="no"
907 --enable-vde) vde="yes"
909 --disable-netmap) netmap="no"
911 --enable-netmap) netmap="yes"
913 --disable-xen) xen="no"
915 --enable-xen) xen="yes"
917 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
919 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
921 --disable-brlapi) brlapi="no"
923 --enable-brlapi) brlapi="yes"
925 --disable-bluez) bluez="no"
927 --enable-bluez) bluez="yes"
929 --disable-kvm) kvm="no"
931 --enable-kvm) kvm="yes"
933 --disable-tcg-interpreter) tcg_interpreter="no"
935 --enable-tcg-interpreter) tcg_interpreter="yes"
937 --disable-cap-ng) cap_ng="no"
939 --enable-cap-ng) cap_ng="yes"
941 --disable-spice) spice="no"
943 --enable-spice) spice="yes"
945 --disable-libiscsi) libiscsi="no"
947 --enable-libiscsi) libiscsi="yes"
949 --disable-libnfs) libnfs="no"
951 --enable-libnfs) libnfs="yes"
953 --enable-profiler) profiler="yes"
955 --disable-cocoa) cocoa="no"
957 --enable-cocoa)
958 cocoa="yes" ;
959 sdl="no" ;
960 audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
962 --disable-system) softmmu="no"
964 --enable-system) softmmu="yes"
966 --disable-user)
967 linux_user="no" ;
968 bsd_user="no" ;
970 --enable-user) ;;
971 --disable-linux-user) linux_user="no"
973 --enable-linux-user) linux_user="yes"
975 --disable-bsd-user) bsd_user="no"
977 --enable-bsd-user) bsd_user="yes"
979 --enable-guest-base) guest_base="yes"
981 --disable-guest-base) guest_base="no"
983 --enable-pie) pie="yes"
985 --disable-pie) pie="no"
987 --enable-werror) werror="yes"
989 --disable-werror) werror="no"
991 --enable-stack-protector) stack_protector="yes"
993 --disable-stack-protector) stack_protector="no"
995 --disable-curses) curses="no"
997 --enable-curses) curses="yes"
999 --disable-curl) curl="no"
1001 --enable-curl) curl="yes"
1003 --disable-fdt) fdt="no"
1005 --enable-fdt) fdt="yes"
1007 --disable-linux-aio) linux_aio="no"
1009 --enable-linux-aio) linux_aio="yes"
1011 --disable-attr) attr="no"
1013 --enable-attr) attr="yes"
1015 --disable-blobs) blobs="no"
1017 --with-pkgversion=*) pkgversion=" ($optarg)"
1019 --with-coroutine=*) coroutine="$optarg"
1021 --disable-coroutine-pool) coroutine_pool="no"
1023 --enable-coroutine-pool) coroutine_pool="yes"
1025 --disable-docs) docs="no"
1027 --enable-docs) docs="yes"
1029 --disable-vhost-net) vhost_net="no"
1031 --enable-vhost-net) vhost_net="yes"
1033 --disable-vhost-scsi) vhost_scsi="no"
1035 --enable-vhost-scsi) vhost_scsi="yes"
1037 --disable-opengl) opengl="no"
1039 --enable-opengl) opengl="yes"
1041 --disable-rbd) rbd="no"
1043 --enable-rbd) rbd="yes"
1045 --disable-xfsctl) xfs="no"
1047 --enable-xfsctl) xfs="yes"
1049 --disable-smartcard-nss) smartcard_nss="no"
1051 --enable-smartcard-nss) smartcard_nss="yes"
1053 --disable-libusb) libusb="no"
1055 --enable-libusb) libusb="yes"
1057 --disable-usb-redir) usb_redir="no"
1059 --enable-usb-redir) usb_redir="yes"
1061 --disable-zlib-test) zlib="no"
1063 --disable-lzo) lzo="no"
1065 --enable-lzo) lzo="yes"
1067 --disable-snappy) snappy="no"
1069 --enable-snappy) snappy="yes"
1071 --disable-bzip2) bzip2="no"
1073 --enable-bzip2) bzip2="yes"
1075 --enable-guest-agent) guest_agent="yes"
1077 --disable-guest-agent) guest_agent="no"
1079 --enable-guest-agent-msi) guest_agent_msi="yes"
1081 --disable-guest-agent-msi) guest_agent_msi="no"
1083 --with-vss-sdk) vss_win32_sdk=""
1085 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1087 --without-vss-sdk) vss_win32_sdk="no"
1089 --with-win-sdk) win_sdk=""
1091 --with-win-sdk=*) win_sdk="$optarg"
1093 --without-win-sdk) win_sdk="no"
1095 --enable-tools) want_tools="yes"
1097 --disable-tools) want_tools="no"
1099 --enable-seccomp) seccomp="yes"
1101 --disable-seccomp) seccomp="no"
1103 --disable-glusterfs) glusterfs="no"
1105 --enable-glusterfs) glusterfs="yes"
1107 --disable-archipelago) archipelago="no"
1109 --enable-archipelago) archipelago="yes"
1111 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1112 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1114 --disable-gtk) gtk="no"
1116 --enable-gtk) gtk="yes"
1118 --disable-gnutls) gnutls="no"
1120 --enable-gnutls) gnutls="yes"
1122 --enable-rdma) rdma="yes"
1124 --disable-rdma) rdma="no"
1126 --with-gtkabi=*) gtkabi="$optarg"
1128 --disable-vte) vte="no"
1130 --enable-vte) vte="yes"
1132 --disable-tpm) tpm="no"
1134 --enable-tpm) tpm="yes"
1136 --disable-libssh2) libssh2="no"
1138 --enable-libssh2) libssh2="yes"
1140 --enable-vhdx) vhdx="yes"
1142 --disable-vhdx) vhdx="no"
1144 --disable-numa) numa="no"
1146 --enable-numa) numa="yes"
1148 --disable-tcmalloc) tcmalloc="no"
1150 --enable-tcmalloc) tcmalloc="yes"
1153 echo "ERROR: unknown option $opt"
1154 echo "Try '$0 --help' for more information"
1155 exit 1
1157 esac
1158 done
1160 if ! has $python; then
1161 error_exit "Python not found. Use --python=/path/to/python"
1164 # Note that if the Python conditional here evaluates True we will exit
1165 # with status 1 which is a shell 'false' value.
1166 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
1167 error_exit "Cannot use '$python', Python 2.4 or later is required." \
1168 "Note that Python 3 or later is not yet supported." \
1169 "Use --python=/path/to/python to specify a supported Python."
1172 # The -B switch was added in Python 2.6.
1173 # If it is supplied, compiled files are not written.
1174 # Use it for Python versions which support it.
1175 if $python -B -c 'import sys; sys.exit(0)' 2>/dev/null; then
1176 python="$python -B"
1179 case "$cpu" in
1180 ppc)
1181 CPU_CFLAGS="-m32"
1182 LDFLAGS="-m32 $LDFLAGS"
1184 ppc64)
1185 CPU_CFLAGS="-m64"
1186 LDFLAGS="-m64 $LDFLAGS"
1188 sparc)
1189 LDFLAGS="-m32 $LDFLAGS"
1190 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1192 sparc64)
1193 LDFLAGS="-m64 $LDFLAGS"
1194 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1196 s390)
1197 CPU_CFLAGS="-m31"
1198 LDFLAGS="-m31 $LDFLAGS"
1200 s390x)
1201 CPU_CFLAGS="-m64"
1202 LDFLAGS="-m64 $LDFLAGS"
1204 i386)
1205 CPU_CFLAGS="-m32"
1206 LDFLAGS="-m32 $LDFLAGS"
1207 cc_i386='$(CC) -m32'
1209 x86_64)
1210 CPU_CFLAGS="-m64"
1211 LDFLAGS="-m64 $LDFLAGS"
1212 cc_i386='$(CC) -m32'
1214 x32)
1215 CPU_CFLAGS="-mx32"
1216 LDFLAGS="-mx32 $LDFLAGS"
1217 cc_i386='$(CC) -m32'
1219 # No special flags required for other host CPUs
1220 esac
1222 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1223 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1225 default_target_list=""
1227 mak_wilds=""
1229 if [ "$softmmu" = "yes" ]; then
1230 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1232 if [ "$linux_user" = "yes" ]; then
1233 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1235 if [ "$bsd_user" = "yes" ]; then
1236 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1239 for config in $mak_wilds; do
1240 default_target_list="${default_target_list} $(basename "$config" .mak)"
1241 done
1243 if test x"$show_help" = x"yes" ; then
1244 cat << EOF
1246 Usage: configure [options]
1247 Options: [defaults in brackets after descriptions]
1249 Standard options:
1250 --help print this message
1251 --prefix=PREFIX install in PREFIX [$prefix]
1252 --interp-prefix=PREFIX where to find shared libraries, etc.
1253 use %M for cpu name [$interp_prefix]
1254 --target-list=LIST set target list (default: build everything)
1255 $(echo Available targets: $default_target_list | \
1256 fold -s -w 53 | sed -e 's/^/ /')
1258 Advanced options (experts only):
1259 --source-path=PATH path of source code [$source_path]
1260 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1261 --cc=CC use C compiler CC [$cc]
1262 --iasl=IASL use ACPI compiler IASL [$iasl]
1263 --host-cc=CC use C compiler CC [$host_cc] for code run at
1264 build time
1265 --cxx=CXX use C++ compiler CXX [$cxx]
1266 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1267 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1268 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1269 --make=MAKE use specified make [$make]
1270 --install=INSTALL use specified install [$install]
1271 --python=PYTHON use specified python [$python]
1272 --smbd=SMBD use specified smbd [$smbd]
1273 --static enable static build [$static]
1274 --mandir=PATH install man pages in PATH
1275 --datadir=PATH install firmware in PATH$confsuffix
1276 --docdir=PATH install documentation in PATH$confsuffix
1277 --bindir=PATH install binaries in PATH
1278 --libdir=PATH install libraries in PATH
1279 --sysconfdir=PATH install config in PATH$confsuffix
1280 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1281 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1282 --enable-debug enable common debug build options
1283 --disable-strip disable stripping binaries
1284 --disable-werror disable compilation abort on warning
1285 --disable-stack-protector disable compiler-provided stack protection
1286 --audio-drv-list=LIST set audio drivers list:
1287 Available drivers: $audio_possible_drivers
1288 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1289 --block-drv-rw-whitelist=L
1290 set block driver read-write whitelist
1291 (affects only QEMU, not qemu-img)
1292 --block-drv-ro-whitelist=L
1293 set block driver read-only whitelist
1294 (affects only QEMU, not qemu-img)
1295 --enable-trace-backends=B Set trace backend
1296 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1297 --with-trace-file=NAME Full PATH,NAME of file to store traces
1298 Default:trace-<pid>
1299 --disable-slirp disable SLIRP userspace network connectivity
1300 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1301 --oss-lib path to OSS library
1302 --cpu=CPU Build for host CPU [$cpu]
1303 --with-coroutine=BACKEND coroutine backend. Supported options:
1304 gthread, ucontext, sigaltstack, windows
1305 --enable-gcov enable test coverage analysis with gcov
1306 --gcov=GCOV use specified gcov [$gcov_tool]
1307 --disable-blobs disable installing provided firmware blobs
1308 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1309 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1311 Optional features, enabled with --enable-FEATURE and
1312 disabled with --disable-FEATURE, default is enabled if available:
1314 system all system emulation targets
1315 user supported user emulation targets
1316 linux-user all linux usermode emulation targets
1317 bsd-user all BSD usermode emulation targets
1318 guest-base GUEST_BASE support for usermode emulation targets
1319 docs build documentation
1320 guest-agent build the QEMU Guest Agent
1321 guest-agent-msi build guest agent Windows MSI installation package
1322 pie Position Independent Executables
1323 modules modules support
1324 debug-tcg TCG debugging (default is disabled)
1325 debug-info debugging information
1326 sparse sparse checker
1328 gnutls GNUTLS cryptography support
1329 sdl SDL UI
1330 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1331 gtk gtk UI
1332 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1333 vte vte support for the gtk UI
1334 curses curses UI
1335 vnc VNC UI support
1336 vnc-tls TLS encryption for VNC server
1337 vnc-sasl SASL encryption for VNC server
1338 vnc-jpeg JPEG lossy compression for VNC server
1339 vnc-png PNG compression for VNC server
1340 vnc-ws Websockets support for VNC server
1341 cocoa Cocoa UI (Mac OS X only)
1342 virtfs VirtFS
1343 xen xen backend driver support
1344 xen-pci-passthrough
1345 brlapi BrlAPI (Braile)
1346 curl curl connectivity
1347 fdt fdt device tree
1348 bluez bluez stack connectivity
1349 kvm KVM acceleration support
1350 rdma RDMA-based migration support
1351 uuid uuid support
1352 vde support for vde network
1353 netmap support for netmap network
1354 linux-aio Linux AIO support
1355 cap-ng libcap-ng support
1356 attr attr and xattr support
1357 vhost-net vhost-net acceleration support
1358 spice spice
1359 rbd rados block device (rbd)
1360 libiscsi iscsi support
1361 libnfs nfs support
1362 smartcard-nss smartcard nss support
1363 libusb libusb (for usb passthrough)
1364 usb-redir usb network redirection support
1365 lzo support of lzo compression library
1366 snappy support of snappy compression library
1367 bzip2 support of bzip2 compression library
1368 (for reading bzip2-compressed dmg images)
1369 seccomp seccomp support
1370 coroutine-pool coroutine freelist (better performance)
1371 glusterfs GlusterFS backend
1372 archipelago Archipelago backend
1373 tpm TPM support
1374 libssh2 ssh block device support
1375 vhdx support for the Microsoft VHDX image format
1376 numa libnuma support
1377 tcmalloc tcmalloc support
1379 NOTE: The object files are built at the place where configure is launched
1381 exit 0
1384 # Now we have handled --enable-tcg-interpreter and know we're not just
1385 # printing the help message, bail out if the host CPU isn't supported.
1386 if test "$ARCH" = "unknown"; then
1387 if test "$tcg_interpreter" = "yes" ; then
1388 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1389 ARCH=tci
1390 else
1391 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1395 # Consult white-list to determine whether to enable werror
1396 # by default. Only enable by default for git builds
1397 z_version=`cut -f3 -d. $source_path/VERSION`
1399 if test -z "$werror" ; then
1400 if test -d "$source_path/.git" -a \
1401 "$linux" = "yes" ; then
1402 werror="yes"
1403 else
1404 werror="no"
1408 # check that the C compiler works.
1409 write_c_skeleton;
1410 if compile_object ; then
1411 : C compiler works ok
1412 else
1413 error_exit "\"$cc\" either does not exist or does not work"
1416 # Check that the C++ compiler exists and works with the C compiler
1417 if has $cxx; then
1418 cat > $TMPC <<EOF
1419 int c_function(void);
1420 int main(void) { return c_function(); }
1423 compile_object
1425 cat > $TMPCXX <<EOF
1426 extern "C" {
1427 int c_function(void);
1429 int c_function(void) { return 42; }
1432 update_cxxflags
1434 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1435 # C++ compiler $cxx works ok with C compiler $cc
1437 else
1438 echo "C++ compiler $cxx does not work with C compiler $cc"
1439 echo "Disabling C++ specific optional code"
1440 cxx=
1442 else
1443 echo "No C++ compiler available; disabling C++ specific optional code"
1444 cxx=
1447 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1448 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1449 gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1450 gcc_flags="-Wendif-labels $gcc_flags"
1451 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1452 gcc_flags="-Wno-string-plus-int $gcc_flags"
1453 # Note that we do not add -Werror to gcc_flags here, because that would
1454 # enable it for all configure tests. If a configure test failed due
1455 # to -Werror this would just silently disable some features,
1456 # so it's too error prone.
1458 cc_has_warning_flag() {
1459 write_c_skeleton;
1461 # Use the positive sense of the flag when testing for -Wno-wombat
1462 # support (gcc will happily accept the -Wno- form of unknown
1463 # warning options).
1464 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1465 compile_prog "-Werror $optflag" ""
1468 for flag in $gcc_flags; do
1469 if cc_has_warning_flag $flag ; then
1470 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1472 done
1474 if test "$stack_protector" != "no"; then
1475 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1476 sp_on=0
1477 for flag in $gcc_flags; do
1478 # We need to check both a compile and a link, since some compiler
1479 # setups fail only on a .c->.o compile and some only at link time
1480 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1481 compile_prog "-Werror $flag" ""; then
1482 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1483 LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
1484 sp_on=1
1485 break
1487 done
1488 if test "$stack_protector" = yes; then
1489 if test $sp_on = 0; then
1490 error_exit "Stack protector not supported"
1495 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1496 # large functions that use global variables. The bug is in all releases of
1497 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1498 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1499 cat > $TMPC << EOF
1500 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1501 int main(void) { return 0; }
1502 #else
1503 #error No bug in this compiler.
1504 #endif
1506 if compile_prog "-Werror -fno-gcse" "" ; then
1507 TRANSLATE_OPT_CFLAGS=-fno-gcse
1510 if test "$static" = "yes" ; then
1511 if test "$modules" = "yes" ; then
1512 error_exit "static and modules are mutually incompatible"
1514 if test "$pie" = "yes" ; then
1515 error_exit "static and pie are mutually incompatible"
1516 else
1517 pie="no"
1521 # Unconditional check for compiler __thread support
1522 cat > $TMPC << EOF
1523 static __thread int tls_var;
1524 int main(void) { return tls_var; }
1527 if ! compile_prog "-Werror" "" ; then
1528 error_exit "Your compiler does not support the __thread specifier for " \
1529 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1532 if test "$pie" = ""; then
1533 case "$cpu-$targetos" in
1534 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1537 pie="no"
1539 esac
1542 if test "$pie" != "no" ; then
1543 cat > $TMPC << EOF
1545 #ifdef __linux__
1546 # define THREAD __thread
1547 #else
1548 # define THREAD
1549 #endif
1551 static THREAD int tls_var;
1553 int main(void) { return tls_var; }
1556 if compile_prog "-fPIE -DPIE" "-pie"; then
1557 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1558 LDFLAGS="-pie $LDFLAGS"
1559 pie="yes"
1560 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1561 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1563 else
1564 if test "$pie" = "yes"; then
1565 error_exit "PIE not available due to missing toolchain support"
1566 else
1567 echo "Disabling PIE due to missing toolchain support"
1568 pie="no"
1572 if compile_prog "-Werror -fno-pie" "-nopie"; then
1573 CFLAGS_NOPIE="-fno-pie"
1574 LDFLAGS_NOPIE="-nopie"
1578 # check for broken gcc and libtool in RHEL5
1579 if test -n "$libtool" -a "$pie" != "no" ; then
1580 cat > $TMPC <<EOF
1582 void *f(unsigned char *buf, int len);
1583 void *g(unsigned char *buf, int len);
1585 void *
1586 f(unsigned char *buf, int len)
1588 return (void*)0L;
1591 void *
1592 g(unsigned char *buf, int len)
1594 return f(buf, len);
1598 if ! libtool_prog; then
1599 echo "Disabling libtool due to broken toolchain support"
1600 libtool=
1604 ##########################################
1605 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1606 # use i686 as default anyway, but for those that don't, an explicit
1607 # specification is necessary
1609 if test "$cpu" = "i386"; then
1610 cat > $TMPC << EOF
1611 static int sfaa(int *ptr)
1613 return __sync_fetch_and_and(ptr, 0);
1616 int main(void)
1618 int val = 42;
1619 val = __sync_val_compare_and_swap(&val, 0, 1);
1620 sfaa(&val);
1621 return val;
1624 if ! compile_prog "" "" ; then
1625 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1629 #########################################
1630 # Solaris specific configure tool chain decisions
1632 if test "$solaris" = "yes" ; then
1633 if has $install; then
1635 else
1636 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1637 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1638 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1640 if test "`path_of $install`" = "/usr/sbin/install" ; then
1641 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1642 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1643 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1645 if has ar; then
1647 else
1648 if test -f /usr/ccs/bin/ar ; then
1649 error_exit "No path includes ar" \
1650 "Add /usr/ccs/bin to your path and rerun configure"
1652 error_exit "No path includes ar"
1656 if test -z "${target_list+xxx}" ; then
1657 target_list="$default_target_list"
1658 else
1659 target_list=`echo "$target_list" | sed -e 's/,/ /g'`
1662 # Check that we recognised the target name; this allows a more
1663 # friendly error message than if we let it fall through.
1664 for target in $target_list; do
1665 case " $default_target_list " in
1666 *" $target "*)
1669 error_exit "Unknown target name '$target'"
1671 esac
1672 done
1674 # see if system emulation was really requested
1675 case " $target_list " in
1676 *"-softmmu "*) softmmu=yes
1678 *) softmmu=no
1680 esac
1682 feature_not_found() {
1683 feature=$1
1684 remedy=$2
1686 error_exit "User requested feature $feature" \
1687 "configure was not able to find it." \
1688 "$remedy"
1691 # ---
1692 # big/little endian test
1693 cat > $TMPC << EOF
1694 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1695 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1696 extern int foo(short *, short *);
1697 int main(int argc, char *argv[]) {
1698 return foo(big_endian, little_endian);
1702 if compile_object ; then
1703 if grep -q BiGeNdIaN $TMPO ; then
1704 bigendian="yes"
1705 elif grep -q LiTtLeEnDiAn $TMPO ; then
1706 bigendian="no"
1707 else
1708 echo big/little test failed
1710 else
1711 echo big/little test failed
1714 ##########################################
1715 # L2TPV3 probe
1717 cat > $TMPC <<EOF
1718 #include <sys/socket.h>
1719 #include <linux/ip.h>
1720 int main(void) { return sizeof(struct mmsghdr); }
1722 if compile_prog "" "" ; then
1723 l2tpv3=yes
1724 else
1725 l2tpv3=no
1728 ##########################################
1729 # pkg-config probe
1731 if ! has "$pkg_config_exe"; then
1732 error_exit "pkg-config binary '$pkg_config_exe' not found"
1735 ##########################################
1736 # NPTL probe
1738 if test "$linux_user" = "yes"; then
1739 cat > $TMPC <<EOF
1740 #include <sched.h>
1741 #include <linux/futex.h>
1742 int main(void) {
1743 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1744 #error bork
1745 #endif
1746 return 0;
1749 if ! compile_object ; then
1750 feature_not_found "nptl" "Install glibc and linux kernel headers."
1754 ##########################################
1755 # zlib check
1757 if test "$zlib" != "no" ; then
1758 cat > $TMPC << EOF
1759 #include <zlib.h>
1760 int main(void) { zlibVersion(); return 0; }
1762 if compile_prog "" "-lz" ; then
1764 else
1765 error_exit "zlib check failed" \
1766 "Make sure to have the zlib libs and headers installed."
1769 LIBS="$LIBS -lz"
1771 ##########################################
1772 # lzo check
1774 if test "$lzo" != "no" ; then
1775 cat > $TMPC << EOF
1776 #include <lzo/lzo1x.h>
1777 int main(void) { lzo_version(); return 0; }
1779 if compile_prog "" "-llzo2" ; then
1780 libs_softmmu="$libs_softmmu -llzo2"
1781 lzo="yes"
1782 else
1783 if test "$lzo" = "yes"; then
1784 feature_not_found "liblzo2" "Install liblzo2 devel"
1786 lzo="no"
1790 ##########################################
1791 # snappy check
1793 if test "$snappy" != "no" ; then
1794 cat > $TMPC << EOF
1795 #include <snappy-c.h>
1796 int main(void) { snappy_max_compressed_length(4096); return 0; }
1798 if compile_prog "" "-lsnappy" ; then
1799 libs_softmmu="$libs_softmmu -lsnappy"
1800 snappy="yes"
1801 else
1802 if test "$snappy" = "yes"; then
1803 feature_not_found "libsnappy" "Install libsnappy devel"
1805 snappy="no"
1809 ##########################################
1810 # bzip2 check
1812 if test "$bzip2" != "no" ; then
1813 cat > $TMPC << EOF
1814 #include <bzlib.h>
1815 int main(void) { BZ2_bzlibVersion(); return 0; }
1817 if compile_prog "" "-lbz2" ; then
1818 bzip2="yes"
1819 else
1820 if test "$bzip2" = "yes"; then
1821 feature_not_found "libbzip2" "Install libbzip2 devel"
1823 bzip2="no"
1827 ##########################################
1828 # libseccomp check
1830 if test "$seccomp" != "no" ; then
1831 if test "$cpu" = "i386" || test "$cpu" = "x86_64" &&
1832 $pkg_config --atleast-version=2.1.1 libseccomp; then
1833 libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`"
1834 QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`"
1835 seccomp="yes"
1836 else
1837 if test "$seccomp" = "yes"; then
1838 feature_not_found "libseccomp" "Install libseccomp devel >= 2.1.1"
1840 seccomp="no"
1843 ##########################################
1844 # xen probe
1846 if test "$xen" != "no" ; then
1847 xen_libs="-lxenstore -lxenctrl -lxenguest"
1849 # First we test whether Xen headers and libraries are available.
1850 # If no, we are done and there is no Xen support.
1851 # If yes, more tests are run to detect the Xen version.
1853 # Xen (any)
1854 cat > $TMPC <<EOF
1855 #include <xenctrl.h>
1856 int main(void) {
1857 return 0;
1860 if ! compile_prog "" "$xen_libs" ; then
1861 # Xen not found
1862 if test "$xen" = "yes" ; then
1863 feature_not_found "xen" "Install xen devel"
1865 xen=no
1867 # Xen unstable
1868 elif
1869 cat > $TMPC <<EOF &&
1870 #include <xenctrl.h>
1871 #include <xenstore.h>
1872 #include <stdint.h>
1873 #include <xen/hvm/hvm_info_table.h>
1874 #if !defined(HVM_MAX_VCPUS)
1875 # error HVM_MAX_VCPUS not defined
1876 #endif
1877 int main(void) {
1878 xc_interface *xc;
1879 xs_daemon_open();
1880 xc = xc_interface_open(0, 0, 0);
1881 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1882 xc_gnttab_open(NULL, 0);
1883 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1884 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1885 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
1886 return 0;
1889 compile_prog "" "$xen_libs"
1890 then
1891 xen_ctrl_version=450
1892 xen=yes
1894 elif
1895 cat > $TMPC <<EOF &&
1896 #include <xenctrl.h>
1897 #include <xenstore.h>
1898 #include <stdint.h>
1899 #include <xen/hvm/hvm_info_table.h>
1900 #if !defined(HVM_MAX_VCPUS)
1901 # error HVM_MAX_VCPUS not defined
1902 #endif
1903 int main(void) {
1904 xc_interface *xc;
1905 xs_daemon_open();
1906 xc = xc_interface_open(0, 0, 0);
1907 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1908 xc_gnttab_open(NULL, 0);
1909 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1910 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1911 return 0;
1914 compile_prog "" "$xen_libs"
1915 then
1916 xen_ctrl_version=420
1917 xen=yes
1919 elif
1920 cat > $TMPC <<EOF &&
1921 #include <xenctrl.h>
1922 #include <xs.h>
1923 #include <stdint.h>
1924 #include <xen/hvm/hvm_info_table.h>
1925 #if !defined(HVM_MAX_VCPUS)
1926 # error HVM_MAX_VCPUS not defined
1927 #endif
1928 int main(void) {
1929 xs_daemon_open();
1930 xc_interface_open(0, 0, 0);
1931 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1932 xc_gnttab_open(NULL, 0);
1933 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1934 return 0;
1937 compile_prog "" "$xen_libs"
1938 then
1939 xen_ctrl_version=410
1940 xen=yes
1942 # Xen 4.0.0
1943 elif
1944 cat > $TMPC <<EOF &&
1945 #include <xenctrl.h>
1946 #include <xs.h>
1947 #include <stdint.h>
1948 #include <xen/hvm/hvm_info_table.h>
1949 #if !defined(HVM_MAX_VCPUS)
1950 # error HVM_MAX_VCPUS not defined
1951 #endif
1952 int main(void) {
1953 struct xen_add_to_physmap xatp = {
1954 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
1956 xs_daemon_open();
1957 xc_interface_open();
1958 xc_gnttab_open();
1959 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1960 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
1961 return 0;
1964 compile_prog "" "$xen_libs"
1965 then
1966 xen_ctrl_version=400
1967 xen=yes
1969 # Xen 3.4.0
1970 elif
1971 cat > $TMPC <<EOF &&
1972 #include <xenctrl.h>
1973 #include <xs.h>
1974 int main(void) {
1975 struct xen_add_to_physmap xatp = {
1976 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
1978 xs_daemon_open();
1979 xc_interface_open();
1980 xc_gnttab_open();
1981 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1982 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
1983 return 0;
1986 compile_prog "" "$xen_libs"
1987 then
1988 xen_ctrl_version=340
1989 xen=yes
1991 # Xen 3.3.0
1992 elif
1993 cat > $TMPC <<EOF &&
1994 #include <xenctrl.h>
1995 #include <xs.h>
1996 int main(void) {
1997 xs_daemon_open();
1998 xc_interface_open();
1999 xc_gnttab_open();
2000 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2001 return 0;
2004 compile_prog "" "$xen_libs"
2005 then
2006 xen_ctrl_version=330
2007 xen=yes
2009 # Xen version unsupported
2010 else
2011 if test "$xen" = "yes" ; then
2012 feature_not_found "xen (unsupported version)" "Install supported xen (e.g. 4.0, 3.4, 3.3)"
2014 xen=no
2017 if test "$xen" = yes; then
2018 libs_softmmu="$xen_libs $libs_softmmu"
2022 if test "$xen_pci_passthrough" != "no"; then
2023 if test "$xen" = "yes" && test "$linux" = "yes" &&
2024 test "$xen_ctrl_version" -ge 340; then
2025 xen_pci_passthrough=yes
2026 else
2027 if test "$xen_pci_passthrough" = "yes"; then
2028 if test "$xen_ctrl_version" -lt 340; then
2029 error_exit "User requested feature Xen PCI Passthrough" \
2030 "This feature does not work with Xen 3.3"
2032 error_exit "User requested feature Xen PCI Passthrough" \
2033 " but this feature requires /sys from Linux"
2035 xen_pci_passthrough=no
2039 ##########################################
2040 # libtool probe
2042 if ! has $libtool; then
2043 libtool=
2046 # MacOSX ships with a libtool which isn't the GNU one; weed this
2047 # out by checking whether libtool supports the --version switch
2048 if test -n "$libtool"; then
2049 if ! "$libtool" --version >/dev/null 2>&1; then
2050 libtool=
2054 ##########################################
2055 # Sparse probe
2056 if test "$sparse" != "no" ; then
2057 if has cgcc; then
2058 sparse=yes
2059 else
2060 if test "$sparse" = "yes" ; then
2061 feature_not_found "sparse" "Install sparse binary"
2063 sparse=no
2067 ##########################################
2068 # X11 probe
2069 x11_cflags=
2070 x11_libs=-lX11
2071 if $pkg_config --exists "x11"; then
2072 x11_cflags=`$pkg_config --cflags x11`
2073 x11_libs=`$pkg_config --libs x11`
2076 ##########################################
2077 # GTK probe
2079 if test "$gtkabi" = ""; then
2080 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2081 # Use 3.0 as a fallback if that is available.
2082 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2083 gtkabi=2.0
2084 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2085 gtkabi=3.0
2086 else
2087 gtkabi=2.0
2091 if test "$gtk" != "no"; then
2092 gtkpackage="gtk+-$gtkabi"
2093 gtkx11package="gtk+-x11-$gtkabi"
2094 if test "$gtkabi" = "3.0" ; then
2095 gtkversion="3.0.0"
2096 else
2097 gtkversion="2.18.0"
2099 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2100 gtk_cflags=`$pkg_config --cflags $gtkpackage`
2101 gtk_libs=`$pkg_config --libs $gtkpackage`
2102 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2103 gtk_cflags="$gtk_cflags $x11_cflags"
2104 gtk_libs="$gtk_libs $x11_libs"
2106 libs_softmmu="$gtk_libs $libs_softmmu"
2107 gtk="yes"
2108 elif test "$gtk" = "yes"; then
2109 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2110 else
2111 gtk="no"
2116 ##########################################
2117 # GNUTLS probe
2119 gnutls_gcrypt=no
2120 gnutls_nettle=no
2121 if test "$gnutls" != "no"; then
2122 if $pkg_config --exists "gnutls"; then
2123 gnutls_cflags=`$pkg_config --cflags gnutls`
2124 gnutls_libs=`$pkg_config --libs gnutls`
2125 libs_softmmu="$gnutls_libs $libs_softmmu"
2126 libs_tools="$gnutls_libs $libs_tools"
2127 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2128 gnutls="yes"
2130 # gnutls_hash_init requires >= 2.9.10
2131 if $pkg_config --exists "gnutls >= 2.9.10"; then
2132 gnutls_hash="yes"
2133 else
2134 gnutls_hash="no"
2137 if $pkg_config --exists 'gnutls >= 3.0'; then
2138 gnutls_gcrypt=no
2139 gnutls_nettle=yes
2140 elif $pkg_config --exists 'gnutls >= 2.12'; then
2141 case `$pkg_config --libs --static gnutls` in
2142 *gcrypt*)
2143 gnutls_gcrypt=yes
2144 gnutls_nettle=no
2146 *nettle*)
2147 gnutls_gcrypt=no
2148 gnutls_nettle=yes
2151 gnutls_gcrypt=yes
2152 gnutls_nettle=no
2154 esac
2155 else
2156 gnutls_gcrypt=yes
2157 gnutls_nettle=no
2159 elif test "$gnutls" = "yes"; then
2160 feature_not_found "gnutls" "Install gnutls devel"
2161 else
2162 gnutls="no"
2163 gnutls_hash="no"
2165 else
2166 gnutls_hash="no"
2169 if test "$gnutls_gcrypt" != "no"; then
2170 if has "libgcrypt-config"; then
2171 gcrypt_cflags=`libgcrypt-config --cflags`
2172 gcrypt_libs=`libgcrypt-config --libs`
2173 libs_softmmu="$gcrypt_libs $libs_softmmu"
2174 libs_tools="$gcrypt_libs $libs_tools"
2175 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2176 else
2177 feature_not_found "gcrypt" "Install gcrypt devel"
2182 if test "$gnutls_nettle" != "no"; then
2183 if $pkg_config --exists "nettle"; then
2184 nettle_cflags=`$pkg_config --cflags nettle`
2185 nettle_libs=`$pkg_config --libs nettle`
2186 libs_softmmu="$nettle_libs $libs_softmmu"
2187 libs_tools="$nettle_libs $libs_tools"
2188 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2189 else
2190 feature_not_found "nettle" "Install nettle devel"
2195 ##########################################
2196 # VTE probe
2198 if test "$vte" != "no"; then
2199 if test "$gtkabi" = "3.0"; then
2200 vtepackage="vte-2.90"
2201 vteversion="0.32.0"
2202 else
2203 vtepackage="vte"
2204 vteversion="0.24.0"
2206 if $pkg_config --exists "$vtepackage >= $vteversion"; then
2207 vte_cflags=`$pkg_config --cflags $vtepackage`
2208 vte_libs=`$pkg_config --libs $vtepackage`
2209 libs_softmmu="$vte_libs $libs_softmmu"
2210 vte="yes"
2211 elif test "$vte" = "yes"; then
2212 if test "$gtkabi" = "3.0"; then
2213 feature_not_found "vte" "Install libvte-2.90 devel"
2214 else
2215 feature_not_found "vte" "Install libvte devel"
2217 else
2218 vte="no"
2222 ##########################################
2223 # SDL probe
2225 # Look for sdl configuration program (pkg-config or sdl-config). Try
2226 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2228 if test $sdlabi = "2.0"; then
2229 sdl_config=$sdl2_config
2230 sdlname=sdl2
2231 sdlconfigname=sdl2_config
2232 else
2233 sdlname=sdl
2234 sdlconfigname=sdl_config
2237 if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2238 sdl_config=$sdlconfigname
2241 if $pkg_config $sdlname --exists; then
2242 sdlconfig="$pkg_config $sdlname"
2243 _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
2244 elif has ${sdl_config}; then
2245 sdlconfig="$sdl_config"
2246 _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2247 else
2248 if test "$sdl" = "yes" ; then
2249 feature_not_found "sdl" "Install SDL devel"
2251 sdl=no
2253 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2254 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2257 sdl_too_old=no
2258 if test "$sdl" != "no" ; then
2259 cat > $TMPC << EOF
2260 #include <SDL.h>
2261 #undef main /* We don't want SDL to override our main() */
2262 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2264 sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
2265 if test "$static" = "yes" ; then
2266 sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2267 else
2268 sdl_libs=`$sdlconfig --libs 2> /dev/null`
2270 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2271 if test "$_sdlversion" -lt 121 ; then
2272 sdl_too_old=yes
2273 else
2274 if test "$cocoa" = "no" ; then
2275 sdl=yes
2279 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2280 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2281 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2282 sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2283 sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
2285 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2287 else
2288 sdl=no
2290 fi # static link
2291 else # sdl not found
2292 if test "$sdl" = "yes" ; then
2293 feature_not_found "sdl" "Install SDL devel"
2295 sdl=no
2296 fi # sdl compile test
2299 if test "$sdl" = "yes" ; then
2300 cat > $TMPC <<EOF
2301 #include <SDL.h>
2302 #if defined(SDL_VIDEO_DRIVER_X11)
2303 #include <X11/XKBlib.h>
2304 #else
2305 #error No x11 support
2306 #endif
2307 int main(void) { return 0; }
2309 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2310 sdl_cflags="$sdl_cflags $x11_cflags"
2311 sdl_libs="$sdl_libs $x11_libs"
2313 libs_softmmu="$sdl_libs $libs_softmmu"
2316 ##########################################
2317 # RDMA needs OpenFabrics libraries
2318 if test "$rdma" != "no" ; then
2319 cat > $TMPC <<EOF
2320 #include <rdma/rdma_cma.h>
2321 int main(void) { return 0; }
2323 rdma_libs="-lrdmacm -libverbs"
2324 if compile_prog "" "$rdma_libs" ; then
2325 rdma="yes"
2326 libs_softmmu="$libs_softmmu $rdma_libs"
2327 else
2328 if test "$rdma" = "yes" ; then
2329 error_exit \
2330 " OpenFabrics librdmacm/libibverbs not present." \
2331 " Your options:" \
2332 " (1) Fast: Install infiniband packages from your distro." \
2333 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2334 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2336 rdma="no"
2340 ##########################################
2341 # VNC TLS/WS detection
2342 if test "$vnc" = "yes" -a "$vnc_tls" != "no" ; then
2343 cat > $TMPC <<EOF
2344 #include <gnutls/gnutls.h>
2345 int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
2347 vnc_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2348 vnc_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2349 if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then
2350 if test "$vnc_tls" != "no" ; then
2351 vnc_tls=yes
2353 libs_softmmu="$vnc_tls_libs $libs_softmmu"
2354 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_tls_cflags"
2355 else
2356 if test "$vnc_tls" = "yes" ; then
2357 feature_not_found "vnc-tls" "Install gnutls devel"
2359 vnc_tls=no
2363 ##########################################
2364 # VNC SASL detection
2365 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2366 cat > $TMPC <<EOF
2367 #include <sasl/sasl.h>
2368 #include <stdio.h>
2369 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2371 # Assuming Cyrus-SASL installed in /usr prefix
2372 vnc_sasl_cflags=""
2373 vnc_sasl_libs="-lsasl2"
2374 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2375 vnc_sasl=yes
2376 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2377 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2378 else
2379 if test "$vnc_sasl" = "yes" ; then
2380 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2382 vnc_sasl=no
2386 ##########################################
2387 # VNC JPEG detection
2388 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2389 cat > $TMPC <<EOF
2390 #include <stdio.h>
2391 #include <jpeglib.h>
2392 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2394 vnc_jpeg_cflags=""
2395 vnc_jpeg_libs="-ljpeg"
2396 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2397 vnc_jpeg=yes
2398 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2399 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2400 else
2401 if test "$vnc_jpeg" = "yes" ; then
2402 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2404 vnc_jpeg=no
2408 ##########################################
2409 # VNC PNG detection
2410 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2411 cat > $TMPC <<EOF
2412 //#include <stdio.h>
2413 #include <png.h>
2414 #include <stddef.h>
2415 int main(void) {
2416 png_structp png_ptr;
2417 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2418 return png_ptr != 0;
2421 if $pkg_config libpng --exists; then
2422 vnc_png_cflags=`$pkg_config libpng --cflags`
2423 vnc_png_libs=`$pkg_config libpng --libs`
2424 else
2425 vnc_png_cflags=""
2426 vnc_png_libs="-lpng"
2428 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2429 vnc_png=yes
2430 libs_softmmu="$vnc_png_libs $libs_softmmu"
2431 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2432 else
2433 if test "$vnc_png" = "yes" ; then
2434 feature_not_found "vnc-png" "Install libpng devel"
2436 vnc_png=no
2440 ##########################################
2441 # fnmatch() probe, used for ACL routines
2442 fnmatch="no"
2443 cat > $TMPC << EOF
2444 #include <fnmatch.h>
2445 int main(void)
2447 fnmatch("foo", "foo", 0);
2448 return 0;
2451 if compile_prog "" "" ; then
2452 fnmatch="yes"
2455 ##########################################
2456 # uuid_generate() probe, used for vdi block driver
2457 # Note that on some systems (notably MacOSX) no extra library
2458 # need be linked to get the uuid functions.
2459 if test "$uuid" != "no" ; then
2460 uuid_libs="-luuid"
2461 cat > $TMPC << EOF
2462 #include <uuid/uuid.h>
2463 int main(void)
2465 uuid_t my_uuid;
2466 uuid_generate(my_uuid);
2467 return 0;
2470 if compile_prog "" "" ; then
2471 uuid="yes"
2472 elif compile_prog "" "$uuid_libs" ; then
2473 uuid="yes"
2474 libs_softmmu="$uuid_libs $libs_softmmu"
2475 libs_tools="$uuid_libs $libs_tools"
2476 else
2477 if test "$uuid" = "yes" ; then
2478 feature_not_found "uuid" "Install libuuid devel"
2480 uuid=no
2484 if test "$vhdx" = "yes" ; then
2485 if test "$uuid" = "no" ; then
2486 error_exit "uuid required for VHDX support"
2488 elif test "$vhdx" != "no" ; then
2489 if test "$uuid" = "yes" ; then
2490 vhdx=yes
2491 else
2492 vhdx=no
2496 ##########################################
2497 # xfsctl() probe, used for raw-posix
2498 if test "$xfs" != "no" ; then
2499 cat > $TMPC << EOF
2500 #include <stddef.h> /* NULL */
2501 #include <xfs/xfs.h>
2502 int main(void)
2504 xfsctl(NULL, 0, 0, NULL);
2505 return 0;
2508 if compile_prog "" "" ; then
2509 xfs="yes"
2510 else
2511 if test "$xfs" = "yes" ; then
2512 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2514 xfs=no
2518 ##########################################
2519 # vde libraries probe
2520 if test "$vde" != "no" ; then
2521 vde_libs="-lvdeplug"
2522 cat > $TMPC << EOF
2523 #include <libvdeplug.h>
2524 int main(void)
2526 struct vde_open_args a = {0, 0, 0};
2527 char s[] = "";
2528 vde_open(s, s, &a);
2529 return 0;
2532 if compile_prog "" "$vde_libs" ; then
2533 vde=yes
2534 libs_softmmu="$vde_libs $libs_softmmu"
2535 libs_tools="$vde_libs $libs_tools"
2536 else
2537 if test "$vde" = "yes" ; then
2538 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2540 vde=no
2544 ##########################################
2545 # netmap support probe
2546 # Apart from looking for netmap headers, we make sure that the host API version
2547 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2548 # a minor/major version number. Minor new features will be marked with values up
2549 # to 15, and if something happens that requires a change to the backend we will
2550 # move above 15, submit the backend fixes and modify this two bounds.
2551 if test "$netmap" != "no" ; then
2552 cat > $TMPC << EOF
2553 #include <inttypes.h>
2554 #include <net/if.h>
2555 #include <net/netmap.h>
2556 #include <net/netmap_user.h>
2557 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2558 #error
2559 #endif
2560 int main(void) { return 0; }
2562 if compile_prog "" "" ; then
2563 netmap=yes
2564 else
2565 if test "$netmap" = "yes" ; then
2566 feature_not_found "netmap"
2568 netmap=no
2572 ##########################################
2573 # libcap-ng library probe
2574 if test "$cap_ng" != "no" ; then
2575 cap_libs="-lcap-ng"
2576 cat > $TMPC << EOF
2577 #include <cap-ng.h>
2578 int main(void)
2580 capng_capability_to_name(CAPNG_EFFECTIVE);
2581 return 0;
2584 if compile_prog "" "$cap_libs" ; then
2585 cap_ng=yes
2586 libs_tools="$cap_libs $libs_tools"
2587 else
2588 if test "$cap_ng" = "yes" ; then
2589 feature_not_found "cap_ng" "Install libcap-ng devel"
2591 cap_ng=no
2595 ##########################################
2596 # Sound support libraries probe
2598 audio_drv_probe()
2600 drv=$1
2601 hdr=$2
2602 lib=$3
2603 exp=$4
2604 cfl=$5
2605 cat > $TMPC << EOF
2606 #include <$hdr>
2607 int main(void) { $exp }
2609 if compile_prog "$cfl" "$lib" ; then
2611 else
2612 error_exit "$drv check failed" \
2613 "Make sure to have the $drv libs and headers installed."
2617 audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2618 for drv in $audio_drv_list; do
2619 case $drv in
2620 alsa)
2621 audio_drv_probe $drv alsa/asoundlib.h -lasound \
2622 "return snd_pcm_close((snd_pcm_t *)0);"
2623 libs_softmmu="-lasound $libs_softmmu"
2627 audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2628 "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2629 libs_softmmu="-lpulse $libs_softmmu"
2630 audio_pt_int="yes"
2633 coreaudio)
2634 libs_softmmu="-framework CoreAudio $libs_softmmu"
2637 dsound)
2638 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2639 audio_win_int="yes"
2642 oss)
2643 libs_softmmu="$oss_lib $libs_softmmu"
2646 sdl|wav)
2647 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2651 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2652 error_exit "Unknown driver '$drv' selected" \
2653 "Possible drivers are: $audio_possible_drivers"
2656 esac
2657 done
2659 ##########################################
2660 # BrlAPI probe
2662 if test "$brlapi" != "no" ; then
2663 brlapi_libs="-lbrlapi"
2664 cat > $TMPC << EOF
2665 #include <brlapi.h>
2666 #include <stddef.h>
2667 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2669 if compile_prog "" "$brlapi_libs" ; then
2670 brlapi=yes
2671 libs_softmmu="$brlapi_libs $libs_softmmu"
2672 else
2673 if test "$brlapi" = "yes" ; then
2674 feature_not_found "brlapi" "Install brlapi devel"
2676 brlapi=no
2680 ##########################################
2681 # curses probe
2682 if test "$curses" != "no" ; then
2683 if test "$mingw32" = "yes" ; then
2684 curses_list="-lpdcurses"
2685 else
2686 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2688 curses_found=no
2689 cat > $TMPC << EOF
2690 #include <curses.h>
2691 int main(void) {
2692 const char *s = curses_version();
2693 resize_term(0, 0);
2694 return s != 0;
2697 IFS=:
2698 for curses_lib in $curses_list; do
2699 unset IFS
2700 if compile_prog "" "$curses_lib" ; then
2701 curses_found=yes
2702 libs_softmmu="$curses_lib $libs_softmmu"
2703 break
2705 done
2706 unset IFS
2707 if test "$curses_found" = "yes" ; then
2708 curses=yes
2709 else
2710 if test "$curses" = "yes" ; then
2711 feature_not_found "curses" "Install ncurses devel"
2713 curses=no
2717 ##########################################
2718 # curl probe
2719 if test "$curl" != "no" ; then
2720 if $pkg_config libcurl --exists; then
2721 curlconfig="$pkg_config libcurl"
2722 else
2723 curlconfig=curl-config
2725 cat > $TMPC << EOF
2726 #include <curl/curl.h>
2727 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2729 curl_cflags=`$curlconfig --cflags 2>/dev/null`
2730 curl_libs=`$curlconfig --libs 2>/dev/null`
2731 if compile_prog "$curl_cflags" "$curl_libs" ; then
2732 curl=yes
2733 else
2734 if test "$curl" = "yes" ; then
2735 feature_not_found "curl" "Install libcurl devel"
2737 curl=no
2739 fi # test "$curl"
2741 ##########################################
2742 # bluez support probe
2743 if test "$bluez" != "no" ; then
2744 cat > $TMPC << EOF
2745 #include <bluetooth/bluetooth.h>
2746 int main(void) { return bt_error(0); }
2748 bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2749 bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
2750 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2751 bluez=yes
2752 libs_softmmu="$bluez_libs $libs_softmmu"
2753 else
2754 if test "$bluez" = "yes" ; then
2755 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2757 bluez="no"
2761 ##########################################
2762 # glib support probe
2764 glib_req_ver=2.22
2765 glib_modules=gthread-2.0
2766 if test "$modules" = yes; then
2767 glib_modules="$glib_modules gmodule-2.0"
2770 for i in $glib_modules; do
2771 if $pkg_config --atleast-version=$glib_req_ver $i; then
2772 glib_cflags=`$pkg_config --cflags $i`
2773 glib_libs=`$pkg_config --libs $i`
2774 CFLAGS="$glib_cflags $CFLAGS"
2775 LIBS="$glib_libs $LIBS"
2776 libs_qga="$glib_libs $libs_qga"
2777 else
2778 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2780 done
2782 # g_test_trap_subprocess added in 2.38. Used by some tests.
2783 glib_subprocess=yes
2784 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2785 glib_subprocess=no
2788 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
2789 cat > $TMPC << EOF
2790 #include <glib.h>
2791 int main(void) { return 0; }
2793 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
2794 if cc_has_warning_flag "-Wno-unknown-attributes"; then
2795 glib_cflags="-Wno-unknown-attributes $glib_cflags"
2796 CFLAGS="-Wno-unknown-attributes $CFLAGS"
2800 ##########################################
2801 # SHA command probe for modules
2802 if test "$modules" = yes; then
2803 shacmd_probe="sha1sum sha1 shasum"
2804 for c in $shacmd_probe; do
2805 if has $c; then
2806 shacmd="$c"
2807 break
2809 done
2810 if test "$shacmd" = ""; then
2811 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2815 ##########################################
2816 # pixman support probe
2818 if test "$pixman" = ""; then
2819 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
2820 pixman="none"
2821 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
2822 pixman="system"
2823 else
2824 pixman="internal"
2827 if test "$pixman" = "none"; then
2828 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
2829 error_exit "pixman disabled but system emulation or tools build" \
2830 "enabled. You can turn off pixman only if you also" \
2831 "disable all system emulation targets and the tools" \
2832 "build with '--disable-tools --disable-system'."
2834 pixman_cflags=
2835 pixman_libs=
2836 elif test "$pixman" = "system"; then
2837 # pixman version has been checked above
2838 pixman_cflags=`$pkg_config --cflags pixman-1`
2839 pixman_libs=`$pkg_config --libs pixman-1`
2840 else
2841 if test ! -d ${source_path}/pixman/pixman; then
2842 error_exit "pixman >= 0.21.8 not present. Your options:" \
2843 " (1) Preferred: Install the pixman devel package (any recent" \
2844 " distro should have packages as Xorg needs pixman too)." \
2845 " (2) Fetch the pixman submodule, using:" \
2846 " git submodule update --init pixman"
2848 mkdir -p pixman/pixman
2849 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
2850 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
2853 ##########################################
2854 # libcap probe
2856 if test "$cap" != "no" ; then
2857 cat > $TMPC <<EOF
2858 #include <stdio.h>
2859 #include <sys/capability.h>
2860 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
2862 if compile_prog "" "-lcap" ; then
2863 cap=yes
2864 else
2865 cap=no
2869 ##########################################
2870 # pthread probe
2871 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
2873 pthread=no
2874 cat > $TMPC << EOF
2875 #include <pthread.h>
2876 static void *f(void *p) { return NULL; }
2877 int main(void) {
2878 pthread_t thread;
2879 pthread_create(&thread, 0, f, 0);
2880 return 0;
2883 if compile_prog "" "" ; then
2884 pthread=yes
2885 else
2886 for pthread_lib in $PTHREADLIBS_LIST; do
2887 if compile_prog "" "$pthread_lib" ; then
2888 pthread=yes
2889 found=no
2890 for lib_entry in $LIBS; do
2891 if test "$lib_entry" = "$pthread_lib"; then
2892 found=yes
2893 break
2895 done
2896 if test "$found" = "no"; then
2897 LIBS="$pthread_lib $LIBS"
2899 break
2901 done
2904 if test "$mingw32" != yes -a "$pthread" = no; then
2905 error_exit "pthread check failed" \
2906 "Make sure to have the pthread libs and headers installed."
2909 # check for pthread_setname_np
2910 pthread_setname_np=no
2911 cat > $TMPC << EOF
2912 #include <pthread.h>
2914 static void *f(void *p) { return NULL; }
2915 int main(void)
2917 pthread_t thread;
2918 pthread_create(&thread, 0, f, 0);
2919 pthread_setname_np(thread, "QEMU");
2920 return 0;
2923 if compile_prog "" "$pthread_lib" ; then
2924 pthread_setname_np=yes
2927 ##########################################
2928 # rbd probe
2929 if test "$rbd" != "no" ; then
2930 cat > $TMPC <<EOF
2931 #include <stdio.h>
2932 #include <rbd/librbd.h>
2933 int main(void) {
2934 rados_t cluster;
2935 rados_create(&cluster, NULL);
2936 return 0;
2939 rbd_libs="-lrbd -lrados"
2940 if compile_prog "" "$rbd_libs" ; then
2941 rbd=yes
2942 else
2943 if test "$rbd" = "yes" ; then
2944 feature_not_found "rados block device" "Install librbd/ceph devel"
2946 rbd=no
2950 ##########################################
2951 # libssh2 probe
2952 min_libssh2_version=1.2.8
2953 if test "$libssh2" != "no" ; then
2954 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
2955 libssh2_cflags=`$pkg_config libssh2 --cflags`
2956 libssh2_libs=`$pkg_config libssh2 --libs`
2957 libssh2=yes
2958 else
2959 if test "$libssh2" = "yes" ; then
2960 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
2962 libssh2=no
2966 ##########################################
2967 # libssh2_sftp_fsync probe
2969 if test "$libssh2" = "yes"; then
2970 cat > $TMPC <<EOF
2971 #include <stdio.h>
2972 #include <libssh2.h>
2973 #include <libssh2_sftp.h>
2974 int main(void) {
2975 LIBSSH2_SESSION *session;
2976 LIBSSH2_SFTP *sftp;
2977 LIBSSH2_SFTP_HANDLE *sftp_handle;
2978 session = libssh2_session_init ();
2979 sftp = libssh2_sftp_init (session);
2980 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
2981 libssh2_sftp_fsync (sftp_handle);
2982 return 0;
2985 # libssh2_cflags/libssh2_libs defined in previous test.
2986 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
2987 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
2991 ##########################################
2992 # linux-aio probe
2994 if test "$linux_aio" != "no" ; then
2995 cat > $TMPC <<EOF
2996 #include <libaio.h>
2997 #include <sys/eventfd.h>
2998 #include <stddef.h>
2999 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3001 if compile_prog "" "-laio" ; then
3002 linux_aio=yes
3003 else
3004 if test "$linux_aio" = "yes" ; then
3005 feature_not_found "linux AIO" "Install libaio devel"
3007 linux_aio=no
3011 ##########################################
3012 # TPM passthrough is only on x86 Linux
3014 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3015 tpm_passthrough=$tpm
3016 else
3017 tpm_passthrough=no
3020 ##########################################
3021 # attr probe
3023 if test "$attr" != "no" ; then
3024 cat > $TMPC <<EOF
3025 #include <stdio.h>
3026 #include <sys/types.h>
3027 #ifdef CONFIG_LIBATTR
3028 #include <attr/xattr.h>
3029 #else
3030 #include <sys/xattr.h>
3031 #endif
3032 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3034 if compile_prog "" "" ; then
3035 attr=yes
3036 # Older distros have <attr/xattr.h>, and need -lattr:
3037 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3038 attr=yes
3039 LIBS="-lattr $LIBS"
3040 libattr=yes
3041 else
3042 if test "$attr" = "yes" ; then
3043 feature_not_found "ATTR" "Install libc6 or libattr devel"
3045 attr=no
3049 ##########################################
3050 # iovec probe
3051 cat > $TMPC <<EOF
3052 #include <sys/types.h>
3053 #include <sys/uio.h>
3054 #include <unistd.h>
3055 int main(void) { return sizeof(struct iovec); }
3057 iovec=no
3058 if compile_prog "" "" ; then
3059 iovec=yes
3062 ##########################################
3063 # preadv probe
3064 cat > $TMPC <<EOF
3065 #include <sys/types.h>
3066 #include <sys/uio.h>
3067 #include <unistd.h>
3068 int main(void) { return preadv(0, 0, 0, 0); }
3070 preadv=no
3071 if compile_prog "" "" ; then
3072 preadv=yes
3075 ##########################################
3076 # fdt probe
3077 # fdt support is mandatory for at least some target architectures,
3078 # so insist on it if we're building those system emulators.
3079 fdt_required=no
3080 for target in $target_list; do
3081 case $target in
3082 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3083 fdt_required=yes
3085 esac
3086 done
3088 if test "$fdt_required" = "yes"; then
3089 if test "$fdt" = "no"; then
3090 error_exit "fdt disabled but some requested targets require it." \
3091 "You can turn off fdt only if you also disable all the system emulation" \
3092 "targets which need it (by specifying a cut down --target-list)."
3094 fdt=yes
3097 if test "$fdt" != "no" ; then
3098 fdt_libs="-lfdt"
3099 # explicitly check for libfdt_env.h as it is missing in some stable installs
3100 # and test for required functions to make sure we are on a version >= 1.4.0
3101 cat > $TMPC << EOF
3102 #include <libfdt.h>
3103 #include <libfdt_env.h>
3104 int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3106 if compile_prog "" "$fdt_libs" ; then
3107 # system DTC is good - use it
3108 fdt=yes
3109 elif test -d ${source_path}/dtc/libfdt ; then
3110 # have submodule DTC - use it
3111 fdt=yes
3112 dtc_internal="yes"
3113 mkdir -p dtc
3114 if [ "$pwd_is_source_path" != "y" ] ; then
3115 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3116 symlink "$source_path/dtc/scripts" "dtc/scripts"
3118 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3119 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3120 elif test "$fdt" = "yes" ; then
3121 # have neither and want - prompt for system/submodule install
3122 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3123 " (1) Preferred: Install the DTC (libfdt) devel package" \
3124 " (2) Fetch the DTC submodule, using:" \
3125 " git submodule update --init dtc"
3126 else
3127 # don't have and don't want
3128 fdt_libs=
3129 fdt=no
3133 libs_softmmu="$libs_softmmu $fdt_libs"
3135 ##########################################
3136 # opengl probe (for sdl2, milkymist-tmu2)
3138 # GLX probe, used by milkymist-tmu2
3139 # this is temporary, code will be switched to egl mid-term.
3140 cat > $TMPC << EOF
3141 #include <X11/Xlib.h>
3142 #include <GL/gl.h>
3143 #include <GL/glx.h>
3144 int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
3146 if compile_prog "" "-lGL -lX11" ; then
3147 have_glx=yes
3148 else
3149 have_glx=no
3152 if test "$opengl" != "no" ; then
3153 opengl_pkgs="gl glesv2 epoxy egl"
3154 if $pkg_config $opengl_pkgs x11 && test "$have_glx" = "yes"; then
3155 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3156 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3157 opengl=yes
3158 else
3159 if test "$opengl" = "yes" ; then
3160 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3162 opengl_cflags=""
3163 opengl_libs=""
3164 opengl=no
3169 ##########################################
3170 # archipelago probe
3171 if test "$archipelago" != "no" ; then
3172 cat > $TMPC <<EOF
3173 #include <stdio.h>
3174 #include <xseg/xseg.h>
3175 #include <xseg/protocol.h>
3176 int main(void) {
3177 xseg_initialize();
3178 return 0;
3181 archipelago_libs=-lxseg
3182 if compile_prog "" "$archipelago_libs"; then
3183 archipelago="yes"
3184 libs_tools="$archipelago_libs $libs_tools"
3185 libs_softmmu="$archipelago_libs $libs_softmmu"
3187 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3188 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3189 echo "license and therefore prevent redistribution."
3190 echo
3191 echo "To disable Archipelago, use --disable-archipelago"
3192 else
3193 if test "$archipelago" = "yes" ; then
3194 feature_not_found "Archipelago backend support" "Install libxseg devel"
3196 archipelago="no"
3201 ##########################################
3202 # glusterfs probe
3203 if test "$glusterfs" != "no" ; then
3204 if $pkg_config --atleast-version=3 glusterfs-api; then
3205 glusterfs="yes"
3206 glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3207 glusterfs_libs=`$pkg_config --libs glusterfs-api`
3208 if $pkg_config --atleast-version=5 glusterfs-api; then
3209 glusterfs_discard="yes"
3211 if $pkg_config --atleast-version=6 glusterfs-api; then
3212 glusterfs_zerofill="yes"
3214 else
3215 if test "$glusterfs" = "yes" ; then
3216 feature_not_found "GlusterFS backend support" \
3217 "Install glusterfs-api devel >= 3"
3219 glusterfs="no"
3223 # Check for inotify functions when we are building linux-user
3224 # emulator. This is done because older glibc versions don't
3225 # have syscall stubs for these implemented. In that case we
3226 # don't provide them even if kernel supports them.
3228 inotify=no
3229 cat > $TMPC << EOF
3230 #include <sys/inotify.h>
3233 main(void)
3235 /* try to start inotify */
3236 return inotify_init();
3239 if compile_prog "" "" ; then
3240 inotify=yes
3243 inotify1=no
3244 cat > $TMPC << EOF
3245 #include <sys/inotify.h>
3248 main(void)
3250 /* try to start inotify */
3251 return inotify_init1(0);
3254 if compile_prog "" "" ; then
3255 inotify1=yes
3258 # check if utimensat and futimens are supported
3259 utimens=no
3260 cat > $TMPC << EOF
3261 #define _ATFILE_SOURCE
3262 #include <stddef.h>
3263 #include <fcntl.h>
3264 #include <sys/stat.h>
3266 int main(void)
3268 utimensat(AT_FDCWD, "foo", NULL, 0);
3269 futimens(0, NULL);
3270 return 0;
3273 if compile_prog "" "" ; then
3274 utimens=yes
3277 # check if pipe2 is there
3278 pipe2=no
3279 cat > $TMPC << EOF
3280 #include <unistd.h>
3281 #include <fcntl.h>
3283 int main(void)
3285 int pipefd[2];
3286 return pipe2(pipefd, O_CLOEXEC);
3289 if compile_prog "" "" ; then
3290 pipe2=yes
3293 # check if accept4 is there
3294 accept4=no
3295 cat > $TMPC << EOF
3296 #include <sys/socket.h>
3297 #include <stddef.h>
3299 int main(void)
3301 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3302 return 0;
3305 if compile_prog "" "" ; then
3306 accept4=yes
3309 # check if tee/splice is there. vmsplice was added same time.
3310 splice=no
3311 cat > $TMPC << EOF
3312 #include <unistd.h>
3313 #include <fcntl.h>
3314 #include <limits.h>
3316 int main(void)
3318 int len, fd = 0;
3319 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3320 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3321 return 0;
3324 if compile_prog "" "" ; then
3325 splice=yes
3328 ##########################################
3329 # libnuma probe
3331 if test "$numa" != "no" ; then
3332 cat > $TMPC << EOF
3333 #include <numa.h>
3334 int main(void) { return numa_available(); }
3337 if compile_prog "" "-lnuma" ; then
3338 numa=yes
3339 libs_softmmu="-lnuma $libs_softmmu"
3340 else
3341 if test "$numa" = "yes" ; then
3342 feature_not_found "numa" "install numactl devel"
3344 numa=no
3348 ##########################################
3349 # tcmalloc probe
3351 if test "$tcmalloc" = "yes" ; then
3352 cat > $TMPC << EOF
3353 #include <stdlib.h>
3354 int main(void) { malloc(1); return 0; }
3357 if compile_prog "" "-ltcmalloc" ; then
3358 LIBS="-ltcmalloc $LIBS"
3359 else
3360 feature_not_found "tcmalloc" "install gperftools devel"
3364 ##########################################
3365 # signalfd probe
3366 signalfd="no"
3367 cat > $TMPC << EOF
3368 #include <unistd.h>
3369 #include <sys/syscall.h>
3370 #include <signal.h>
3371 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3374 if compile_prog "" "" ; then
3375 signalfd=yes
3378 # check if eventfd is supported
3379 eventfd=no
3380 cat > $TMPC << EOF
3381 #include <sys/eventfd.h>
3383 int main(void)
3385 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3388 if compile_prog "" "" ; then
3389 eventfd=yes
3392 # check for fallocate
3393 fallocate=no
3394 cat > $TMPC << EOF
3395 #include <fcntl.h>
3397 int main(void)
3399 fallocate(0, 0, 0, 0);
3400 return 0;
3403 if compile_prog "" "" ; then
3404 fallocate=yes
3407 # check for fallocate hole punching
3408 fallocate_punch_hole=no
3409 cat > $TMPC << EOF
3410 #include <fcntl.h>
3411 #include <linux/falloc.h>
3413 int main(void)
3415 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3416 return 0;
3419 if compile_prog "" "" ; then
3420 fallocate_punch_hole=yes
3423 # check that fallocate supports range zeroing inside the file
3424 fallocate_zero_range=no
3425 cat > $TMPC << EOF
3426 #include <fcntl.h>
3427 #include <linux/falloc.h>
3429 int main(void)
3431 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3432 return 0;
3435 if compile_prog "" "" ; then
3436 fallocate_zero_range=yes
3439 # check for posix_fallocate
3440 posix_fallocate=no
3441 cat > $TMPC << EOF
3442 #include <fcntl.h>
3444 int main(void)
3446 posix_fallocate(0, 0, 0);
3447 return 0;
3450 if compile_prog "" "" ; then
3451 posix_fallocate=yes
3454 # check for sync_file_range
3455 sync_file_range=no
3456 cat > $TMPC << EOF
3457 #include <fcntl.h>
3459 int main(void)
3461 sync_file_range(0, 0, 0, 0);
3462 return 0;
3465 if compile_prog "" "" ; then
3466 sync_file_range=yes
3469 # check for linux/fiemap.h and FS_IOC_FIEMAP
3470 fiemap=no
3471 cat > $TMPC << EOF
3472 #include <sys/ioctl.h>
3473 #include <linux/fs.h>
3474 #include <linux/fiemap.h>
3476 int main(void)
3478 ioctl(0, FS_IOC_FIEMAP, 0);
3479 return 0;
3482 if compile_prog "" "" ; then
3483 fiemap=yes
3486 # check for dup3
3487 dup3=no
3488 cat > $TMPC << EOF
3489 #include <unistd.h>
3491 int main(void)
3493 dup3(0, 0, 0);
3494 return 0;
3497 if compile_prog "" "" ; then
3498 dup3=yes
3501 # check for ppoll support
3502 ppoll=no
3503 cat > $TMPC << EOF
3504 #include <poll.h>
3506 int main(void)
3508 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3509 ppoll(&pfd, 1, 0, 0);
3510 return 0;
3513 if compile_prog "" "" ; then
3514 ppoll=yes
3517 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3518 prctl_pr_set_timerslack=no
3519 cat > $TMPC << EOF
3520 #include <sys/prctl.h>
3522 int main(void)
3524 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3525 return 0;
3528 if compile_prog "" "" ; then
3529 prctl_pr_set_timerslack=yes
3532 # check for epoll support
3533 epoll=no
3534 cat > $TMPC << EOF
3535 #include <sys/epoll.h>
3537 int main(void)
3539 epoll_create(0);
3540 return 0;
3543 if compile_prog "" "" ; then
3544 epoll=yes
3547 # epoll_create1 and epoll_pwait are later additions
3548 # so we must check separately for their presence
3549 epoll_create1=no
3550 cat > $TMPC << EOF
3551 #include <sys/epoll.h>
3553 int main(void)
3555 /* Note that we use epoll_create1 as a value, not as
3556 * a function being called. This is necessary so that on
3557 * old SPARC glibc versions where the function was present in
3558 * the library but not declared in the header file we will
3559 * fail the configure check. (Otherwise we will get a compiler
3560 * warning but not an error, and will proceed to fail the
3561 * qemu compile where we compile with -Werror.)
3563 return (int)(uintptr_t)&epoll_create1;
3566 if compile_prog "" "" ; then
3567 epoll_create1=yes
3570 epoll_pwait=no
3571 cat > $TMPC << EOF
3572 #include <sys/epoll.h>
3574 int main(void)
3576 epoll_pwait(0, 0, 0, 0, 0);
3577 return 0;
3580 if compile_prog "" "" ; then
3581 epoll_pwait=yes
3584 # check for sendfile support
3585 sendfile=no
3586 cat > $TMPC << EOF
3587 #include <sys/sendfile.h>
3589 int main(void)
3591 return sendfile(0, 0, 0, 0);
3594 if compile_prog "" "" ; then
3595 sendfile=yes
3598 # check for timerfd support (glibc 2.8 and newer)
3599 timerfd=no
3600 cat > $TMPC << EOF
3601 #include <sys/timerfd.h>
3603 int main(void)
3605 return(timerfd_create(CLOCK_REALTIME, 0));
3608 if compile_prog "" "" ; then
3609 timerfd=yes
3612 # check for setns and unshare support
3613 setns=no
3614 cat > $TMPC << EOF
3615 #include <sched.h>
3617 int main(void)
3619 int ret;
3620 ret = setns(0, 0);
3621 ret = unshare(0);
3622 return ret;
3625 if compile_prog "" "" ; then
3626 setns=yes
3629 # Check if tools are available to build documentation.
3630 if test "$docs" != "no" ; then
3631 if has makeinfo && has pod2man; then
3632 docs=yes
3633 else
3634 if test "$docs" = "yes" ; then
3635 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3637 docs=no
3641 # Search for bswap_32 function
3642 byteswap_h=no
3643 cat > $TMPC << EOF
3644 #include <byteswap.h>
3645 int main(void) { return bswap_32(0); }
3647 if compile_prog "" "" ; then
3648 byteswap_h=yes
3651 # Search for bswap32 function
3652 bswap_h=no
3653 cat > $TMPC << EOF
3654 #include <sys/endian.h>
3655 #include <sys/types.h>
3656 #include <machine/bswap.h>
3657 int main(void) { return bswap32(0); }
3659 if compile_prog "" "" ; then
3660 bswap_h=yes
3663 ##########################################
3664 # Do we have libiscsi >= 1.9.0
3665 if test "$libiscsi" != "no" ; then
3666 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3667 libiscsi="yes"
3668 libiscsi_cflags=$($pkg_config --cflags libiscsi)
3669 libiscsi_libs=$($pkg_config --libs libiscsi)
3670 else
3671 if test "$libiscsi" = "yes" ; then
3672 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3674 libiscsi="no"
3678 ##########################################
3679 # Do we need libm
3680 cat > $TMPC << EOF
3681 #include <math.h>
3682 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3684 if compile_prog "" "" ; then
3686 elif compile_prog "" "-lm" ; then
3687 LIBS="-lm $LIBS"
3688 libs_qga="-lm $libs_qga"
3689 else
3690 error_exit "libm check failed"
3693 ##########################################
3694 # Do we need librt
3695 # uClibc provides 2 versions of clock_gettime(), one with realtime
3696 # support and one without. This means that the clock_gettime() don't
3697 # need -lrt. We still need it for timer_create() so we check for this
3698 # function in addition.
3699 cat > $TMPC <<EOF
3700 #include <signal.h>
3701 #include <time.h>
3702 int main(void) {
3703 timer_create(CLOCK_REALTIME, NULL, NULL);
3704 return clock_gettime(CLOCK_REALTIME, NULL);
3708 if compile_prog "" "" ; then
3710 # we need pthread for static linking. use previous pthread test result
3711 elif compile_prog "" "$pthread_lib -lrt" ; then
3712 LIBS="$LIBS -lrt"
3713 libs_qga="$libs_qga -lrt"
3716 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3717 "$aix" != "yes" -a "$haiku" != "yes" ; then
3718 libs_softmmu="-lutil $libs_softmmu"
3721 ##########################################
3722 # spice probe
3723 if test "$spice" != "no" ; then
3724 cat > $TMPC << EOF
3725 #include <spice.h>
3726 int main(void) { spice_server_new(); return 0; }
3728 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3729 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3730 if $pkg_config --atleast-version=0.12.0 spice-server && \
3731 $pkg_config --atleast-version=0.12.3 spice-protocol && \
3732 compile_prog "$spice_cflags" "$spice_libs" ; then
3733 spice="yes"
3734 libs_softmmu="$libs_softmmu $spice_libs"
3735 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3736 spice_protocol_version=$($pkg_config --modversion spice-protocol)
3737 spice_server_version=$($pkg_config --modversion spice-server)
3738 else
3739 if test "$spice" = "yes" ; then
3740 feature_not_found "spice" \
3741 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3743 spice="no"
3747 # check for libcacard for smartcard support
3748 smartcard_cflags=""
3749 # TODO - what's the minimal nss version we support?
3750 if test "$smartcard_nss" != "no"; then
3751 cat > $TMPC << EOF
3752 #include <pk11pub.h>
3753 int main(void) { PK11_FreeSlot(0); return 0; }
3755 # FIXME: do not include $glib_* in here
3756 nss_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
3757 nss_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
3758 test_cflags="$nss_cflags"
3759 # The header files in nss < 3.13.3 have a bug which causes them to
3760 # emit a warning. If we're going to compile QEMU with -Werror, then
3761 # test that the headers don't have this bug. Otherwise we would pass
3762 # the configure test but fail to compile QEMU later.
3763 if test "$werror" = "yes"; then
3764 test_cflags="-Werror $test_cflags"
3766 if test -n "$libtool" &&
3767 $pkg_config --atleast-version=3.12.8 nss && \
3768 compile_prog "$test_cflags" "$nss_libs"; then
3769 smartcard_nss="yes"
3770 else
3771 if test "$smartcard_nss" = "yes"; then
3772 feature_not_found "nss" "Install nss devel >= 3.12.8"
3774 smartcard_nss="no"
3778 # check for libusb
3779 if test "$libusb" != "no" ; then
3780 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
3781 libusb="yes"
3782 libusb_cflags=$($pkg_config --cflags libusb-1.0)
3783 libusb_libs=$($pkg_config --libs libusb-1.0)
3784 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3785 libs_softmmu="$libs_softmmu $libusb_libs"
3786 else
3787 if test "$libusb" = "yes"; then
3788 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
3790 libusb="no"
3794 # check for usbredirparser for usb network redirection support
3795 if test "$usb_redir" != "no" ; then
3796 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
3797 usb_redir="yes"
3798 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3799 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
3800 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
3801 libs_softmmu="$libs_softmmu $usb_redir_libs"
3802 else
3803 if test "$usb_redir" = "yes"; then
3804 feature_not_found "usb-redir" "Install usbredir devel"
3806 usb_redir="no"
3810 ##########################################
3811 # check if we have VSS SDK headers for win
3813 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3814 case "$vss_win32_sdk" in
3815 "") vss_win32_include="-I$source_path" ;;
3816 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3817 # handle path with spaces. So we symlink the headers into ".sdk/vss".
3818 vss_win32_include="-I$source_path/.sdk/vss"
3819 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3821 *) vss_win32_include="-I$vss_win32_sdk"
3822 esac
3823 cat > $TMPC << EOF
3824 #define __MIDL_user_allocate_free_DEFINED__
3825 #include <inc/win2003/vss.h>
3826 int main(void) { return VSS_CTX_BACKUP; }
3828 if compile_prog "$vss_win32_include" "" ; then
3829 guest_agent_with_vss="yes"
3830 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3831 libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3832 else
3833 if test "$vss_win32_sdk" != "" ; then
3834 echo "ERROR: Please download and install Microsoft VSS SDK:"
3835 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3836 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3837 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
3838 echo "ERROR: The headers are extracted in the directory \`inc'."
3839 feature_not_found "VSS support"
3841 guest_agent_with_vss="no"
3845 ##########################################
3846 # lookup Windows platform SDK (if not specified)
3847 # The SDK is needed only to build .tlb (type library) file of guest agent
3848 # VSS provider from the source. It is usually unnecessary because the
3849 # pre-compiled .tlb file is included.
3851 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
3852 if test -z "$win_sdk"; then
3853 programfiles="$PROGRAMFILES"
3854 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3855 if test -n "$programfiles"; then
3856 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3857 else
3858 feature_not_found "Windows SDK"
3860 elif test "$win_sdk" = "no"; then
3861 win_sdk=""
3865 ##########################################
3866 # check if mingw environment provides a recent ntddscsi.h
3867 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
3868 cat > $TMPC << EOF
3869 #include <windows.h>
3870 #include <ntddscsi.h>
3871 int main(void) {
3872 #if !defined(IOCTL_SCSI_GET_ADDRESS)
3873 #error Missing required ioctl definitions
3874 #endif
3875 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
3876 return addr.Lun;
3879 if compile_prog "" "" ; then
3880 guest_agent_ntddscsi=yes
3881 libs_qga="-lsetupapi $libs_qga"
3885 ##########################################
3886 # Guest agent Window MSI package
3888 if test "$guest_agent" != yes; then
3889 if test "$guest_agent_msi" = yes; then
3890 error_exit "MSI guest agent package requires guest agent enabled"
3892 guest_agent_msi=no
3893 elif test "$mingw32" != "yes"; then
3894 if test "$guest_agent_msi" = "yes"; then
3895 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
3897 guest_agent_msi=no
3898 elif ! has wixl; then
3899 if test "$guest_agent_msi" = "yes"; then
3900 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
3902 guest_agent_msi=no
3905 if test "$guest_agent_msi" != "no"; then
3906 if test "$guest_agent_with_vss" = "yes"; then
3907 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
3910 if test "$QEMU_GA_MANUFACTURER" = ""; then
3911 QEMU_GA_MANUFACTURER=QEMU
3914 if test "$QEMU_GA_DISTRO" = ""; then
3915 QEMU_GA_DISTRO=Linux
3918 if test "$QEMU_GA_VERSION" = ""; then
3919 QEMU_GA_VERSION=`cat $source_path/VERSION`
3922 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin"
3924 case "$cpu" in
3925 x86_64)
3926 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
3928 i386)
3929 QEMU_GA_MSI_ARCH="-D Arch=32"
3932 error_exit "CPU $cpu not supported for building installation package"
3934 esac
3937 ##########################################
3938 # check if we have fdatasync
3940 fdatasync=no
3941 cat > $TMPC << EOF
3942 #include <unistd.h>
3943 int main(void) {
3944 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
3945 return fdatasync(0);
3946 #else
3947 #error Not supported
3948 #endif
3951 if compile_prog "" "" ; then
3952 fdatasync=yes
3955 ##########################################
3956 # check if we have madvise
3958 madvise=no
3959 cat > $TMPC << EOF
3960 #include <sys/types.h>
3961 #include <sys/mman.h>
3962 #include <stddef.h>
3963 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
3965 if compile_prog "" "" ; then
3966 madvise=yes
3969 ##########################################
3970 # check if we have posix_madvise
3972 posix_madvise=no
3973 cat > $TMPC << EOF
3974 #include <sys/mman.h>
3975 #include <stddef.h>
3976 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
3978 if compile_prog "" "" ; then
3979 posix_madvise=yes
3982 ##########################################
3983 # check if we have usable SIGEV_THREAD_ID
3985 sigev_thread_id=no
3986 cat > $TMPC << EOF
3987 #include <signal.h>
3988 int main(void) {
3989 struct sigevent ev;
3990 ev.sigev_notify = SIGEV_THREAD_ID;
3991 ev._sigev_un._tid = 0;
3992 asm volatile("" : : "g"(&ev));
3993 return 0;
3996 if compile_prog "" "" ; then
3997 sigev_thread_id=yes
4000 ##########################################
4001 # check if trace backend exists
4003 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4004 if test "$?" -ne 0 ; then
4005 error_exit "invalid trace backends" \
4006 "Please choose supported trace backends."
4009 ##########################################
4010 # For 'ust' backend, test if ust headers are present
4011 if have_backend "ust"; then
4012 cat > $TMPC << EOF
4013 #include <lttng/tracepoint.h>
4014 int main(void) { return 0; }
4016 if compile_prog "" "" ; then
4017 if $pkg_config lttng-ust --exists; then
4018 lttng_ust_libs=`$pkg_config --libs lttng-ust`
4019 else
4020 lttng_ust_libs="-llttng-ust"
4022 if $pkg_config liburcu-bp --exists; then
4023 urcu_bp_libs=`$pkg_config --libs liburcu-bp`
4024 else
4025 urcu_bp_libs="-lurcu-bp"
4028 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4029 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4030 else
4031 error_exit "Trace backend 'ust' missing lttng-ust header files"
4035 ##########################################
4036 # For 'dtrace' backend, test if 'dtrace' command is present
4037 if have_backend "dtrace"; then
4038 if ! has 'dtrace' ; then
4039 error_exit "dtrace command is not found in PATH $PATH"
4041 trace_backend_stap="no"
4042 if has 'stap' ; then
4043 trace_backend_stap="yes"
4047 ##########################################
4048 # check and set a backend for coroutine
4050 # We prefer ucontext, but it's not always possible. The fallback
4051 # is sigcontext. gthread is not selectable except explicitly, because
4052 # it is not functional enough to run QEMU proper. (It is occasionally
4053 # useful for debugging purposes.) On Windows the only valid backend
4054 # is the Windows-specific one.
4056 ucontext_works=no
4057 if test "$darwin" != "yes"; then
4058 cat > $TMPC << EOF
4059 #include <ucontext.h>
4060 #ifdef __stub_makecontext
4061 #error Ignoring glibc stub makecontext which will always fail
4062 #endif
4063 int main(void) { makecontext(0, 0, 0); return 0; }
4065 if compile_prog "" "" ; then
4066 ucontext_works=yes
4070 if test "$coroutine" = ""; then
4071 if test "$mingw32" = "yes"; then
4072 coroutine=win32
4073 elif test "$ucontext_works" = "yes"; then
4074 coroutine=ucontext
4075 else
4076 coroutine=sigaltstack
4078 else
4079 case $coroutine in
4080 windows)
4081 if test "$mingw32" != "yes"; then
4082 error_exit "'windows' coroutine backend only valid for Windows"
4084 # Unfortunately the user visible backend name doesn't match the
4085 # coroutine-*.c filename for this case, so we have to adjust it here.
4086 coroutine=win32
4088 ucontext)
4089 if test "$ucontext_works" != "yes"; then
4090 feature_not_found "ucontext"
4093 gthread|sigaltstack)
4094 if test "$mingw32" = "yes"; then
4095 error_exit "only the 'windows' coroutine backend is valid for Windows"
4099 error_exit "unknown coroutine backend $coroutine"
4101 esac
4104 if test "$coroutine_pool" = ""; then
4105 if test "$coroutine" = "gthread"; then
4106 coroutine_pool=no
4107 else
4108 coroutine_pool=yes
4111 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4112 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4115 ##########################################
4116 # check if we have open_by_handle_at
4118 open_by_handle_at=no
4119 cat > $TMPC << EOF
4120 #include <fcntl.h>
4121 #if !defined(AT_EMPTY_PATH)
4122 # error missing definition
4123 #else
4124 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4125 #endif
4127 if compile_prog "" "" ; then
4128 open_by_handle_at=yes
4131 ########################################
4132 # check if we have linux/magic.h
4134 linux_magic_h=no
4135 cat > $TMPC << EOF
4136 #include <linux/magic.h>
4137 int main(void) {
4138 return 0;
4141 if compile_prog "" "" ; then
4142 linux_magic_h=yes
4145 ########################################
4146 # check whether we can disable warning option with a pragma (this is needed
4147 # to silence warnings in the headers of some versions of external libraries).
4148 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4149 # only a warning.
4151 # If we can't selectively disable warning in the code, disable -Werror so that
4152 # the build doesn't fail anyway.
4154 pragma_disable_unused_but_set=no
4155 cat > $TMPC << EOF
4156 #pragma GCC diagnostic push
4157 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4158 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4159 #pragma GCC diagnostic pop
4161 int main(void) {
4162 return 0;
4165 if compile_prog "-Werror" "" ; then
4166 pragma_diagnostic_available=yes
4167 else
4168 werror=no
4171 ########################################
4172 # check if we have valgrind/valgrind.h
4174 valgrind_h=no
4175 cat > $TMPC << EOF
4176 #include <valgrind/valgrind.h>
4177 int main(void) {
4178 return 0;
4181 if compile_prog "" "" ; then
4182 valgrind_h=yes
4185 ########################################
4186 # check if environ is declared
4188 has_environ=no
4189 cat > $TMPC << EOF
4190 #include <unistd.h>
4191 int main(void) {
4192 environ = 0;
4193 return 0;
4196 if compile_prog "" "" ; then
4197 has_environ=yes
4200 ########################################
4201 # check if cpuid.h is usable.
4203 cpuid_h=no
4204 cat > $TMPC << EOF
4205 #include <cpuid.h>
4206 int main(void) {
4207 unsigned a, b, c, d;
4208 int max = __get_cpuid_max(0, 0);
4210 if (max >= 1) {
4211 __cpuid(1, a, b, c, d);
4214 if (max >= 7) {
4215 __cpuid_count(7, 0, a, b, c, d);
4218 return 0;
4221 if compile_prog "" "" ; then
4222 cpuid_h=yes
4225 ########################################
4226 # check if __[u]int128_t is usable.
4228 int128=no
4229 cat > $TMPC << EOF
4230 #if defined(__clang_major__) && defined(__clang_minor__)
4231 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4232 # error __int128_t does not work in CLANG before 3.2
4233 # endif
4234 #endif
4235 __int128_t a;
4236 __uint128_t b;
4237 int main (void) {
4238 a = a + b;
4239 b = a * b;
4240 a = a * a;
4241 return 0;
4244 if compile_prog "" "" ; then
4245 int128=yes
4248 ########################################
4249 # check if getauxval is available.
4251 getauxval=no
4252 cat > $TMPC << EOF
4253 #include <sys/auxv.h>
4254 int main(void) {
4255 return getauxval(AT_HWCAP) == 0;
4258 if compile_prog "" "" ; then
4259 getauxval=yes
4262 ########################################
4263 # check if ccache is interfering with
4264 # semantic analysis of macros
4266 ccache_cpp2=no
4267 cat > $TMPC << EOF
4268 static const int Z = 1;
4269 #define fn() ({ Z; })
4270 #define TAUT(X) ((X) == Z)
4271 #define PAREN(X, Y) (X == Y)
4272 #define ID(X) (X)
4273 int main(int argc, char *argv[])
4275 int x = 0, y = 0;
4276 x = ID(x);
4277 x = fn();
4278 fn();
4279 if (PAREN(x, y)) return 0;
4280 if (TAUT(Z)) return 0;
4281 return 0;
4285 if ! compile_object "-Werror"; then
4286 ccache_cpp2=yes
4289 ##########################################
4290 # End of CC checks
4291 # After here, no more $cc or $ld runs
4293 if test "$gcov" = "yes" ; then
4294 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4295 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4296 elif test "$debug" = "no" ; then
4297 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4300 ##########################################
4301 # Do we have libnfs
4302 if test "$libnfs" != "no" ; then
4303 if $pkg_config --atleast-version=1.9.3 libnfs; then
4304 libnfs="yes"
4305 libnfs_libs=$($pkg_config --libs libnfs)
4306 LIBS="$LIBS $libnfs_libs"
4307 else
4308 if test "$libnfs" = "yes" ; then
4309 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4311 libnfs="no"
4315 # Disable zero malloc errors for official releases unless explicitly told to
4316 # enable/disable
4317 if test -z "$zero_malloc" ; then
4318 if test "$z_version" = "50" ; then
4319 zero_malloc="no"
4320 else
4321 zero_malloc="yes"
4325 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4326 if test "$werror" = "yes"; then
4327 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4330 if test "$solaris" = "no" ; then
4331 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4332 LDFLAGS="-Wl,--warn-common $LDFLAGS"
4336 # test if pod2man has --utf8 option
4337 if pod2man --help | grep -q utf8; then
4338 POD2MAN="pod2man --utf8"
4339 else
4340 POD2MAN="pod2man"
4343 # Use ASLR, no-SEH and DEP if available
4344 if test "$mingw32" = "yes" ; then
4345 for flag in --dynamicbase --no-seh --nxcompat; do
4346 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4347 LDFLAGS="-Wl,$flag $LDFLAGS"
4349 done
4352 qemu_confdir=$sysconfdir$confsuffix
4353 qemu_moddir=$libdir$confsuffix
4354 qemu_datadir=$datadir$confsuffix
4355 qemu_localedir="$datadir/locale"
4357 tools=""
4358 if test "$want_tools" = "yes" ; then
4359 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4360 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4361 tools="qemu-nbd\$(EXESUF) $tools"
4364 if test "$softmmu" = yes ; then
4365 if test "$virtfs" != no ; then
4366 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4367 virtfs=yes
4368 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4369 else
4370 if test "$virtfs" = yes; then
4371 error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4373 virtfs=no
4377 if [ "$guest_agent" != "no" ]; then
4378 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4379 tools="qemu-ga\$(EXESUF) $tools"
4380 if [ "$mingw32" = "yes" -a "$guest_agent_with_vss" = "yes" ]; then
4381 tools="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb $tools"
4383 guest_agent=yes
4384 elif [ "$guest_agent" != yes ]; then
4385 guest_agent=no
4386 else
4387 error_exit "Guest agent is not supported on this platform"
4391 # Mac OS X ships with a broken assembler
4392 roms=
4393 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4394 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4395 "$softmmu" = yes ; then
4396 roms="optionrom"
4398 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4399 roms="$roms spapr-rtas"
4402 if test "$cpu" = "s390x" ; then
4403 roms="$roms s390-ccw"
4406 # Probe for the need for relocating the user-only binary.
4407 if test "$pie" = "no" ; then
4408 textseg_addr=
4409 case "$cpu" in
4410 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4411 # ??? Rationale for choosing this address
4412 textseg_addr=0x60000000
4414 mips)
4415 # A 256M aligned address, high in the address space, with enough
4416 # room for the code_gen_buffer above it before the stack.
4417 textseg_addr=0x60000000
4419 esac
4420 if [ -n "$textseg_addr" ]; then
4421 cat > $TMPC <<EOF
4422 int main(void) { return 0; }
4424 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4425 if ! compile_prog "" "$textseg_ldflags"; then
4426 # In case ld does not support -Ttext-segment, edit the default linker
4427 # script via sed to set the .text start addr. This is needed on FreeBSD
4428 # at least.
4429 $ld --verbose | sed \
4430 -e '1,/==================================================/d' \
4431 -e '/==================================================/,$d' \
4432 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4433 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4434 textseg_ldflags="-Wl,-T../config-host.ld"
4439 # prepend pixman and ftd flags after all config tests are done
4440 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4441 libs_softmmu="$pixman_libs $libs_softmmu"
4443 echo "Install prefix $prefix"
4444 echo "BIOS directory `eval echo $qemu_datadir`"
4445 echo "binary directory `eval echo $bindir`"
4446 echo "library directory `eval echo $libdir`"
4447 echo "module directory `eval echo $qemu_moddir`"
4448 echo "libexec directory `eval echo $libexecdir`"
4449 echo "include directory `eval echo $includedir`"
4450 echo "config directory `eval echo $sysconfdir`"
4451 if test "$mingw32" = "no" ; then
4452 echo "local state directory `eval echo $local_statedir`"
4453 echo "Manual directory `eval echo $mandir`"
4454 echo "ELF interp prefix $interp_prefix"
4455 else
4456 echo "local state directory queried at runtime"
4457 echo "Windows SDK $win_sdk"
4459 echo "Source path $source_path"
4460 echo "C compiler $cc"
4461 echo "Host C compiler $host_cc"
4462 echo "C++ compiler $cxx"
4463 echo "Objective-C compiler $objcc"
4464 echo "ARFLAGS $ARFLAGS"
4465 echo "CFLAGS $CFLAGS"
4466 echo "QEMU_CFLAGS $QEMU_CFLAGS"
4467 echo "LDFLAGS $LDFLAGS"
4468 echo "make $make"
4469 echo "install $install"
4470 echo "python $python"
4471 if test "$slirp" = "yes" ; then
4472 echo "smbd $smbd"
4474 echo "module support $modules"
4475 echo "host CPU $cpu"
4476 echo "host big endian $bigendian"
4477 echo "target list $target_list"
4478 echo "tcg debug enabled $debug_tcg"
4479 echo "gprof enabled $gprof"
4480 echo "sparse enabled $sparse"
4481 echo "strip binaries $strip_opt"
4482 echo "profiler $profiler"
4483 echo "static build $static"
4484 if test "$darwin" = "yes" ; then
4485 echo "Cocoa support $cocoa"
4487 echo "pixman $pixman"
4488 echo "SDL support $sdl"
4489 echo "GTK support $gtk"
4490 echo "GNUTLS support $gnutls"
4491 echo "GNUTLS hash $gnutls_hash"
4492 echo "GNUTLS gcrypt $gnutls_gcrypt"
4493 echo "GNUTLS nettle $gnutls_nettle"
4494 echo "VTE support $vte"
4495 echo "curses support $curses"
4496 echo "curl support $curl"
4497 echo "mingw32 support $mingw32"
4498 echo "Audio drivers $audio_drv_list"
4499 echo "Block whitelist (rw) $block_drv_rw_whitelist"
4500 echo "Block whitelist (ro) $block_drv_ro_whitelist"
4501 echo "VirtFS support $virtfs"
4502 echo "VNC support $vnc"
4503 if test "$vnc" = "yes" ; then
4504 echo "VNC TLS support $vnc_tls"
4505 echo "VNC SASL support $vnc_sasl"
4506 echo "VNC JPEG support $vnc_jpeg"
4507 echo "VNC PNG support $vnc_png"
4509 if test -n "$sparc_cpu"; then
4510 echo "Target Sparc Arch $sparc_cpu"
4512 echo "xen support $xen"
4513 if test "$xen" = "yes" ; then
4514 echo "xen ctrl version $xen_ctrl_version"
4516 echo "brlapi support $brlapi"
4517 echo "bluez support $bluez"
4518 echo "Documentation $docs"
4519 echo "GUEST_BASE $guest_base"
4520 echo "PIE $pie"
4521 echo "vde support $vde"
4522 echo "netmap support $netmap"
4523 echo "Linux AIO support $linux_aio"
4524 echo "ATTR/XATTR support $attr"
4525 echo "Install blobs $blobs"
4526 echo "KVM support $kvm"
4527 echo "RDMA support $rdma"
4528 echo "TCG interpreter $tcg_interpreter"
4529 echo "fdt support $fdt"
4530 echo "preadv support $preadv"
4531 echo "fdatasync $fdatasync"
4532 echo "madvise $madvise"
4533 echo "posix_madvise $posix_madvise"
4534 echo "sigev_thread_id $sigev_thread_id"
4535 echo "uuid support $uuid"
4536 echo "libcap-ng support $cap_ng"
4537 echo "vhost-net support $vhost_net"
4538 echo "vhost-scsi support $vhost_scsi"
4539 echo "Trace backends $trace_backends"
4540 if test "$trace_backend" = "simple"; then
4541 echo "Trace output file $trace_file-<pid>"
4543 if test "$spice" = "yes"; then
4544 echo "spice support $spice ($spice_protocol_version/$spice_server_version)"
4545 else
4546 echo "spice support $spice"
4548 echo "rbd support $rbd"
4549 echo "xfsctl support $xfs"
4550 echo "nss used $smartcard_nss"
4551 echo "libusb $libusb"
4552 echo "usb net redir $usb_redir"
4553 echo "OpenGL support $opengl"
4554 echo "libiscsi support $libiscsi"
4555 echo "libnfs support $libnfs"
4556 echo "build guest agent $guest_agent"
4557 echo "QGA VSS support $guest_agent_with_vss"
4558 echo "QGA w32 disk info $guest_agent_ntddscsi"
4559 echo "seccomp support $seccomp"
4560 echo "coroutine backend $coroutine"
4561 echo "coroutine pool $coroutine_pool"
4562 echo "GlusterFS support $glusterfs"
4563 echo "Archipelago support $archipelago"
4564 echo "gcov $gcov_tool"
4565 echo "gcov enabled $gcov"
4566 echo "TPM support $tpm"
4567 echo "libssh2 support $libssh2"
4568 echo "TPM passthrough $tpm_passthrough"
4569 echo "QOM debugging $qom_cast_debug"
4570 echo "vhdx $vhdx"
4571 echo "lzo support $lzo"
4572 echo "snappy support $snappy"
4573 echo "bzip2 support $bzip2"
4574 echo "NUMA host support $numa"
4575 echo "tcmalloc support $tcmalloc"
4577 if test "$sdl_too_old" = "yes"; then
4578 echo "-> Your SDL version is too old - please upgrade to have SDL support"
4581 config_host_mak="config-host.mak"
4583 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4585 echo "# Automatically generated by configure - do not modify" > $config_host_mak
4586 echo >> $config_host_mak
4588 echo all: >> $config_host_mak
4589 echo "prefix=$prefix" >> $config_host_mak
4590 echo "bindir=$bindir" >> $config_host_mak
4591 echo "libdir=$libdir" >> $config_host_mak
4592 echo "libexecdir=$libexecdir" >> $config_host_mak
4593 echo "includedir=$includedir" >> $config_host_mak
4594 echo "mandir=$mandir" >> $config_host_mak
4595 echo "sysconfdir=$sysconfdir" >> $config_host_mak
4596 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4597 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4598 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4599 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4600 if test "$mingw32" = "no" ; then
4601 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4603 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4604 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4605 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4606 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4607 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4609 echo "ARCH=$ARCH" >> $config_host_mak
4611 if test "$debug_tcg" = "yes" ; then
4612 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4614 if test "$strip_opt" = "yes" ; then
4615 echo "STRIP=${strip}" >> $config_host_mak
4617 if test "$bigendian" = "yes" ; then
4618 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4620 if test "$mingw32" = "yes" ; then
4621 echo "CONFIG_WIN32=y" >> $config_host_mak
4622 rc_version=`cat $source_path/VERSION`
4623 version_major=${rc_version%%.*}
4624 rc_version=${rc_version#*.}
4625 version_minor=${rc_version%%.*}
4626 rc_version=${rc_version#*.}
4627 version_subminor=${rc_version%%.*}
4628 version_micro=0
4629 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4630 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4631 if test "$guest_agent_with_vss" = "yes" ; then
4632 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4633 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4635 if test "$guest_agent_ntddscsi" = "yes" ; then
4636 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
4638 if test "$guest_agent_msi" != "no"; then
4639 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
4640 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4641 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
4642 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
4643 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4644 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4645 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4647 else
4648 echo "CONFIG_POSIX=y" >> $config_host_mak
4651 if test "$linux" = "yes" ; then
4652 echo "CONFIG_LINUX=y" >> $config_host_mak
4655 if test "$darwin" = "yes" ; then
4656 echo "CONFIG_DARWIN=y" >> $config_host_mak
4659 if test "$aix" = "yes" ; then
4660 echo "CONFIG_AIX=y" >> $config_host_mak
4663 if test "$solaris" = "yes" ; then
4664 echo "CONFIG_SOLARIS=y" >> $config_host_mak
4665 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
4666 if test "$needs_libsunmath" = "yes" ; then
4667 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
4670 if test "$haiku" = "yes" ; then
4671 echo "CONFIG_HAIKU=y" >> $config_host_mak
4673 if test "$static" = "yes" ; then
4674 echo "CONFIG_STATIC=y" >> $config_host_mak
4676 if test "$profiler" = "yes" ; then
4677 echo "CONFIG_PROFILER=y" >> $config_host_mak
4679 if test "$slirp" = "yes" ; then
4680 echo "CONFIG_SLIRP=y" >> $config_host_mak
4681 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4683 if test "$vde" = "yes" ; then
4684 echo "CONFIG_VDE=y" >> $config_host_mak
4686 if test "$netmap" = "yes" ; then
4687 echo "CONFIG_NETMAP=y" >> $config_host_mak
4689 if test "$l2tpv3" = "yes" ; then
4690 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4692 if test "$cap_ng" = "yes" ; then
4693 echo "CONFIG_LIBCAP=y" >> $config_host_mak
4695 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4696 for drv in $audio_drv_list; do
4697 def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4698 echo "$def=y" >> $config_host_mak
4699 done
4700 if test "$audio_pt_int" = "yes" ; then
4701 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4703 if test "$audio_win_int" = "yes" ; then
4704 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4706 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4707 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4708 if test "$vnc" = "yes" ; then
4709 echo "CONFIG_VNC=y" >> $config_host_mak
4711 if test "$vnc_tls" = "yes" ; then
4712 echo "CONFIG_VNC_TLS=y" >> $config_host_mak
4714 if test "$vnc_sasl" = "yes" ; then
4715 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4717 if test "$vnc_jpeg" = "yes" ; then
4718 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
4720 if test "$vnc_png" = "yes" ; then
4721 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
4723 if test "$fnmatch" = "yes" ; then
4724 echo "CONFIG_FNMATCH=y" >> $config_host_mak
4726 if test "$uuid" = "yes" ; then
4727 echo "CONFIG_UUID=y" >> $config_host_mak
4729 if test "$xfs" = "yes" ; then
4730 echo "CONFIG_XFS=y" >> $config_host_mak
4732 qemu_version=`head $source_path/VERSION`
4733 echo "VERSION=$qemu_version" >>$config_host_mak
4734 echo "PKGVERSION=$pkgversion" >>$config_host_mak
4735 echo "SRC_PATH=$source_path" >> $config_host_mak
4736 echo "TARGET_DIRS=$target_list" >> $config_host_mak
4737 if [ "$docs" = "yes" ] ; then
4738 echo "BUILD_DOCS=yes" >> $config_host_mak
4740 if test "$modules" = "yes"; then
4741 # $shacmd can generate a hash started with digit, which the compiler doesn't
4742 # like as an symbol. So prefix it with an underscore
4743 echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
4744 echo "CONFIG_MODULES=y" >> $config_host_mak
4746 if test "$sdl" = "yes" ; then
4747 echo "CONFIG_SDL=y" >> $config_host_mak
4748 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
4749 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
4751 if test "$cocoa" = "yes" ; then
4752 echo "CONFIG_COCOA=y" >> $config_host_mak
4754 if test "$curses" = "yes" ; then
4755 echo "CONFIG_CURSES=y" >> $config_host_mak
4757 if test "$utimens" = "yes" ; then
4758 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
4760 if test "$pipe2" = "yes" ; then
4761 echo "CONFIG_PIPE2=y" >> $config_host_mak
4763 if test "$accept4" = "yes" ; then
4764 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
4766 if test "$splice" = "yes" ; then
4767 echo "CONFIG_SPLICE=y" >> $config_host_mak
4769 if test "$eventfd" = "yes" ; then
4770 echo "CONFIG_EVENTFD=y" >> $config_host_mak
4772 if test "$fallocate" = "yes" ; then
4773 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
4775 if test "$fallocate_punch_hole" = "yes" ; then
4776 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
4778 if test "$fallocate_zero_range" = "yes" ; then
4779 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
4781 if test "$posix_fallocate" = "yes" ; then
4782 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
4784 if test "$sync_file_range" = "yes" ; then
4785 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
4787 if test "$fiemap" = "yes" ; then
4788 echo "CONFIG_FIEMAP=y" >> $config_host_mak
4790 if test "$dup3" = "yes" ; then
4791 echo "CONFIG_DUP3=y" >> $config_host_mak
4793 if test "$ppoll" = "yes" ; then
4794 echo "CONFIG_PPOLL=y" >> $config_host_mak
4796 if test "$prctl_pr_set_timerslack" = "yes" ; then
4797 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
4799 if test "$epoll" = "yes" ; then
4800 echo "CONFIG_EPOLL=y" >> $config_host_mak
4802 if test "$epoll_create1" = "yes" ; then
4803 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
4805 if test "$epoll_pwait" = "yes" ; then
4806 echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
4808 if test "$sendfile" = "yes" ; then
4809 echo "CONFIG_SENDFILE=y" >> $config_host_mak
4811 if test "$timerfd" = "yes" ; then
4812 echo "CONFIG_TIMERFD=y" >> $config_host_mak
4814 if test "$setns" = "yes" ; then
4815 echo "CONFIG_SETNS=y" >> $config_host_mak
4817 if test "$inotify" = "yes" ; then
4818 echo "CONFIG_INOTIFY=y" >> $config_host_mak
4820 if test "$inotify1" = "yes" ; then
4821 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
4823 if test "$byteswap_h" = "yes" ; then
4824 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
4826 if test "$bswap_h" = "yes" ; then
4827 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
4829 if test "$curl" = "yes" ; then
4830 echo "CONFIG_CURL=m" >> $config_host_mak
4831 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
4832 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
4834 if test "$brlapi" = "yes" ; then
4835 echo "CONFIG_BRLAPI=y" >> $config_host_mak
4837 if test "$bluez" = "yes" ; then
4838 echo "CONFIG_BLUEZ=y" >> $config_host_mak
4839 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
4841 if test "$glib_subprocess" = "yes" ; then
4842 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
4844 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4845 if test "$gtk" = "yes" ; then
4846 echo "CONFIG_GTK=y" >> $config_host_mak
4847 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
4848 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
4850 if test "$gnutls" = "yes" ; then
4851 echo "CONFIG_GNUTLS=y" >> $config_host_mak
4853 if test "$gnutls_hash" = "yes" ; then
4854 echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak
4856 if test "$gnutls_gcrypt" = "yes" ; then
4857 echo "CONFIG_GNUTLS_GCRYPT=y" >> $config_host_mak
4859 if test "$gnutls_nettle" = "yes" ; then
4860 echo "CONFIG_GNUTLS_NETTLE=y" >> $config_host_mak
4862 if test "$vte" = "yes" ; then
4863 echo "CONFIG_VTE=y" >> $config_host_mak
4864 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
4866 if test "$xen" = "yes" ; then
4867 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4868 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4870 if test "$linux_aio" = "yes" ; then
4871 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4873 if test "$attr" = "yes" ; then
4874 echo "CONFIG_ATTR=y" >> $config_host_mak
4876 if test "$libattr" = "yes" ; then
4877 echo "CONFIG_LIBATTR=y" >> $config_host_mak
4879 if test "$virtfs" = "yes" ; then
4880 echo "CONFIG_VIRTFS=y" >> $config_host_mak
4882 if test "$vhost_scsi" = "yes" ; then
4883 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4885 if test "$vhost_net" = "yes" ; then
4886 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
4888 if test "$blobs" = "yes" ; then
4889 echo "INSTALL_BLOBS=yes" >> $config_host_mak
4891 if test "$iovec" = "yes" ; then
4892 echo "CONFIG_IOVEC=y" >> $config_host_mak
4894 if test "$preadv" = "yes" ; then
4895 echo "CONFIG_PREADV=y" >> $config_host_mak
4897 if test "$fdt" = "yes" ; then
4898 echo "CONFIG_FDT=y" >> $config_host_mak
4900 if test "$signalfd" = "yes" ; then
4901 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
4903 if test "$tcg_interpreter" = "yes" ; then
4904 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4906 if test "$fdatasync" = "yes" ; then
4907 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
4909 if test "$madvise" = "yes" ; then
4910 echo "CONFIG_MADVISE=y" >> $config_host_mak
4912 if test "$posix_madvise" = "yes" ; then
4913 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
4915 if test "$sigev_thread_id" = "yes" ; then
4916 echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
4919 if test "$spice" = "yes" ; then
4920 echo "CONFIG_SPICE=y" >> $config_host_mak
4923 if test "$smartcard_nss" = "yes" ; then
4924 echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
4925 echo "NSS_LIBS=$nss_libs" >> $config_host_mak
4926 echo "NSS_CFLAGS=$nss_cflags" >> $config_host_mak
4929 if test "$libusb" = "yes" ; then
4930 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
4933 if test "$usb_redir" = "yes" ; then
4934 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
4937 if test "$opengl" = "yes" ; then
4938 echo "CONFIG_OPENGL=y" >> $config_host_mak
4939 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
4940 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
4943 if test "$lzo" = "yes" ; then
4944 echo "CONFIG_LZO=y" >> $config_host_mak
4947 if test "$snappy" = "yes" ; then
4948 echo "CONFIG_SNAPPY=y" >> $config_host_mak
4951 if test "$bzip2" = "yes" ; then
4952 echo "CONFIG_BZIP2=y" >> $config_host_mak
4953 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
4956 if test "$libiscsi" = "yes" ; then
4957 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
4958 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
4959 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
4962 if test "$libnfs" = "yes" ; then
4963 echo "CONFIG_LIBNFS=y" >> $config_host_mak
4966 if test "$seccomp" = "yes"; then
4967 echo "CONFIG_SECCOMP=y" >> $config_host_mak
4970 # XXX: suppress that
4971 if [ "$bsd" = "yes" ] ; then
4972 echo "CONFIG_BSD=y" >> $config_host_mak
4975 if test "$zero_malloc" = "yes" ; then
4976 echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
4978 if test "$qom_cast_debug" = "yes" ; then
4979 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
4981 if test "$rbd" = "yes" ; then
4982 echo "CONFIG_RBD=m" >> $config_host_mak
4983 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
4984 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
4987 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
4988 if test "$coroutine_pool" = "yes" ; then
4989 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
4990 else
4991 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
4994 if test "$open_by_handle_at" = "yes" ; then
4995 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
4998 if test "$linux_magic_h" = "yes" ; then
4999 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5002 if test "$pragma_diagnostic_available" = "yes" ; then
5003 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5006 if test "$valgrind_h" = "yes" ; then
5007 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5010 if test "$has_environ" = "yes" ; then
5011 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5014 if test "$cpuid_h" = "yes" ; then
5015 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5018 if test "$int128" = "yes" ; then
5019 echo "CONFIG_INT128=y" >> $config_host_mak
5022 if test "$getauxval" = "yes" ; then
5023 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5026 if test "$glusterfs" = "yes" ; then
5027 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5028 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5029 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5032 if test "$glusterfs_discard" = "yes" ; then
5033 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5036 if test "$glusterfs_zerofill" = "yes" ; then
5037 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5040 if test "$archipelago" = "yes" ; then
5041 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5042 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5045 if test "$libssh2" = "yes" ; then
5046 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5047 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5048 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5051 if test "$vhdx" = "yes" ; then
5052 echo "CONFIG_VHDX=y" >> $config_host_mak
5055 # USB host support
5056 if test "$libusb" = "yes"; then
5057 echo "HOST_USB=libusb legacy" >> $config_host_mak
5058 else
5059 echo "HOST_USB=stub" >> $config_host_mak
5062 # TPM passthrough support?
5063 if test "$tpm" = "yes"; then
5064 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5065 if test "$tpm_passthrough" = "yes"; then
5066 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5070 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5071 if have_backend "nop"; then
5072 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5074 if have_backend "simple"; then
5075 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5076 # Set the appropriate trace file.
5077 trace_file="\"$trace_file-\" FMT_pid"
5079 if have_backend "stderr"; then
5080 echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
5082 if have_backend "ust"; then
5083 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5085 if have_backend "dtrace"; then
5086 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5087 if test "$trace_backend_stap" = "yes" ; then
5088 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5091 if have_backend "ftrace"; then
5092 if test "$linux" = "yes" ; then
5093 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5094 else
5095 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5098 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5100 if test "$rdma" = "yes" ; then
5101 echo "CONFIG_RDMA=y" >> $config_host_mak
5104 # Hold two types of flag:
5105 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5106 # a thread we have a handle to
5107 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5108 # platform
5109 if test "$pthread_setname_np" = "yes" ; then
5110 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5111 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5114 if test "$tcg_interpreter" = "yes"; then
5115 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5116 elif test "$ARCH" = "sparc64" ; then
5117 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5118 elif test "$ARCH" = "s390x" ; then
5119 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5120 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5121 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5122 elif test "$ARCH" = "ppc64" ; then
5123 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5124 else
5125 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5127 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5129 echo "TOOLS=$tools" >> $config_host_mak
5130 echo "ROMS=$roms" >> $config_host_mak
5131 echo "MAKE=$make" >> $config_host_mak
5132 echo "INSTALL=$install" >> $config_host_mak
5133 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5134 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5135 if test -n "$libtool"; then
5136 echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
5137 echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
5138 else
5139 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5140 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5142 echo "PYTHON=$python" >> $config_host_mak
5143 echo "CC=$cc" >> $config_host_mak
5144 if $iasl -h > /dev/null 2>&1; then
5145 echo "IASL=$iasl" >> $config_host_mak
5147 echo "CC_I386=$cc_i386" >> $config_host_mak
5148 echo "HOST_CC=$host_cc" >> $config_host_mak
5149 echo "CXX=$cxx" >> $config_host_mak
5150 echo "OBJCC=$objcc" >> $config_host_mak
5151 echo "AR=$ar" >> $config_host_mak
5152 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5153 echo "AS=$as" >> $config_host_mak
5154 echo "CPP=$cpp" >> $config_host_mak
5155 echo "OBJCOPY=$objcopy" >> $config_host_mak
5156 echo "LD=$ld" >> $config_host_mak
5157 echo "NM=$nm" >> $config_host_mak
5158 echo "WINDRES=$windres" >> $config_host_mak
5159 echo "LIBTOOL=$libtool" >> $config_host_mak
5160 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5161 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5162 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5163 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5164 if test "$sparse" = "yes" ; then
5165 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
5166 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
5167 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
5168 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5169 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5171 if test "$cross_prefix" != ""; then
5172 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5173 else
5174 echo "AUTOCONF_HOST := " >> $config_host_mak
5176 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5177 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5178 echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
5179 echo "LIBS+=$LIBS" >> $config_host_mak
5180 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5181 echo "EXESUF=$EXESUF" >> $config_host_mak
5182 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5183 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5184 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5185 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5186 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5187 if test "$gcov" = "yes" ; then
5188 echo "CONFIG_GCOV=y" >> $config_host_mak
5189 echo "GCOV=$gcov_tool" >> $config_host_mak
5192 # use included Linux headers
5193 if test "$linux" = "yes" ; then
5194 mkdir -p linux-headers
5195 case "$cpu" in
5196 i386|x86_64|x32)
5197 linux_arch=x86
5199 ppcemb|ppc|ppc64)
5200 linux_arch=powerpc
5202 s390x)
5203 linux_arch=s390
5205 aarch64)
5206 linux_arch=arm64
5208 mips64)
5209 linux_arch=mips
5212 # For most CPUs the kernel architecture name and QEMU CPU name match.
5213 linux_arch="$cpu"
5215 esac
5216 # For non-KVM architectures we will not have asm headers
5217 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5218 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5222 for target in $target_list; do
5223 target_dir="$target"
5224 config_target_mak=$target_dir/config-target.mak
5225 target_name=`echo $target | cut -d '-' -f 1`
5226 target_bigendian="no"
5228 case "$target_name" in
5229 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5230 target_bigendian=yes
5232 esac
5233 target_softmmu="no"
5234 target_user_only="no"
5235 target_linux_user="no"
5236 target_bsd_user="no"
5237 case "$target" in
5238 ${target_name}-softmmu)
5239 target_softmmu="yes"
5241 ${target_name}-linux-user)
5242 if test "$linux" != "yes" ; then
5243 error_exit "Target '$target' is only available on a Linux host"
5245 target_user_only="yes"
5246 target_linux_user="yes"
5248 ${target_name}-bsd-user)
5249 if test "$bsd" != "yes" ; then
5250 error_exit "Target '$target' is only available on a BSD host"
5252 target_user_only="yes"
5253 target_bsd_user="yes"
5256 error_exit "Target '$target' not recognised"
5257 exit 1
5259 esac
5261 mkdir -p $target_dir
5262 echo "# Automatically generated by configure - do not modify" > $config_target_mak
5264 bflt="no"
5265 interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
5266 gdb_xml_files=""
5268 TARGET_ARCH="$target_name"
5269 TARGET_BASE_ARCH=""
5270 TARGET_ABI_DIR=""
5272 case "$target_name" in
5273 i386)
5275 x86_64)
5276 TARGET_BASE_ARCH=i386
5278 alpha)
5280 arm|armeb)
5281 TARGET_ARCH=arm
5282 bflt="yes"
5283 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5285 aarch64)
5286 TARGET_BASE_ARCH=arm
5287 bflt="yes"
5288 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5290 cris)
5292 lm32)
5294 m68k)
5295 bflt="yes"
5296 gdb_xml_files="cf-core.xml cf-fp.xml"
5298 microblaze|microblazeel)
5299 TARGET_ARCH=microblaze
5300 bflt="yes"
5302 mips|mipsel)
5303 TARGET_ARCH=mips
5304 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5306 mipsn32|mipsn32el)
5307 TARGET_ARCH=mips64
5308 TARGET_BASE_ARCH=mips
5309 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5310 echo "TARGET_ABI32=y" >> $config_target_mak
5312 mips64|mips64el)
5313 TARGET_ARCH=mips64
5314 TARGET_BASE_ARCH=mips
5315 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5317 moxie)
5319 or32)
5320 TARGET_ARCH=openrisc
5321 TARGET_BASE_ARCH=openrisc
5323 ppc)
5324 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5326 ppcemb)
5327 TARGET_BASE_ARCH=ppc
5328 TARGET_ABI_DIR=ppc
5329 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5331 ppc64)
5332 TARGET_BASE_ARCH=ppc
5333 TARGET_ABI_DIR=ppc
5334 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5336 ppc64le)
5337 TARGET_ARCH=ppc64
5338 TARGET_BASE_ARCH=ppc
5339 TARGET_ABI_DIR=ppc
5340 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5342 ppc64abi32)
5343 TARGET_ARCH=ppc64
5344 TARGET_BASE_ARCH=ppc
5345 TARGET_ABI_DIR=ppc
5346 echo "TARGET_ABI32=y" >> $config_target_mak
5347 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5349 sh4|sh4eb)
5350 TARGET_ARCH=sh4
5351 bflt="yes"
5353 sparc)
5355 sparc64)
5356 TARGET_BASE_ARCH=sparc
5358 sparc32plus)
5359 TARGET_ARCH=sparc64
5360 TARGET_BASE_ARCH=sparc
5361 TARGET_ABI_DIR=sparc
5362 echo "TARGET_ABI32=y" >> $config_target_mak
5364 s390x)
5365 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml"
5367 tricore)
5369 unicore32)
5371 xtensa|xtensaeb)
5372 TARGET_ARCH=xtensa
5375 error_exit "Unsupported target CPU"
5377 esac
5378 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5379 if [ "$TARGET_BASE_ARCH" = "" ]; then
5380 TARGET_BASE_ARCH=$TARGET_ARCH
5383 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5385 upper() {
5386 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5389 target_arch_name="`upper $TARGET_ARCH`"
5390 echo "TARGET_$target_arch_name=y" >> $config_target_mak
5391 echo "TARGET_NAME=$target_name" >> $config_target_mak
5392 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5393 if [ "$TARGET_ABI_DIR" = "" ]; then
5394 TARGET_ABI_DIR=$TARGET_ARCH
5396 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5397 if [ "$HOST_VARIANT_DIR" != "" ]; then
5398 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5400 case "$target_name" in
5401 i386|x86_64)
5402 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5403 echo "CONFIG_XEN=y" >> $config_target_mak
5404 if test "$xen_pci_passthrough" = yes; then
5405 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5410 esac
5411 case "$target_name" in
5412 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5413 # Make sure the target and host cpus are compatible
5414 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5415 \( "$target_name" = "$cpu" -o \
5416 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5417 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
5418 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
5419 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5420 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5421 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
5422 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
5423 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
5424 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
5425 echo "CONFIG_KVM=y" >> $config_target_mak
5426 if test "$vhost_net" = "yes" ; then
5427 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5430 esac
5431 if test "$target_bigendian" = "yes" ; then
5432 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5434 if test "$target_softmmu" = "yes" ; then
5435 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5437 if test "$target_user_only" = "yes" ; then
5438 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5439 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5441 if test "$target_linux_user" = "yes" ; then
5442 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5444 list=""
5445 if test ! -z "$gdb_xml_files" ; then
5446 for x in $gdb_xml_files; do
5447 list="$list $source_path/gdb-xml/$x"
5448 done
5449 echo "TARGET_XML_FILES=$list" >> $config_target_mak
5452 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5453 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5455 if test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then
5456 echo "CONFIG_USE_GUEST_BASE=y" >> $config_target_mak
5458 if test "$target_bsd_user" = "yes" ; then
5459 echo "CONFIG_BSD_USER=y" >> $config_target_mak
5462 # generate QEMU_CFLAGS/LDFLAGS for targets
5464 cflags=""
5465 ldflags=""
5467 for i in $ARCH $TARGET_BASE_ARCH ; do
5468 case "$i" in
5469 alpha)
5470 echo "CONFIG_ALPHA_DIS=y" >> $config_target_mak
5471 echo "CONFIG_ALPHA_DIS=y" >> config-all-disas.mak
5473 aarch64)
5474 if test -n "${cxx}"; then
5475 echo "CONFIG_ARM_A64_DIS=y" >> $config_target_mak
5476 echo "CONFIG_ARM_A64_DIS=y" >> config-all-disas.mak
5479 arm)
5480 echo "CONFIG_ARM_DIS=y" >> $config_target_mak
5481 echo "CONFIG_ARM_DIS=y" >> config-all-disas.mak
5482 if test -n "${cxx}"; then
5483 echo "CONFIG_ARM_A64_DIS=y" >> $config_target_mak
5484 echo "CONFIG_ARM_A64_DIS=y" >> config-all-disas.mak
5487 cris)
5488 echo "CONFIG_CRIS_DIS=y" >> $config_target_mak
5489 echo "CONFIG_CRIS_DIS=y" >> config-all-disas.mak
5491 hppa)
5492 echo "CONFIG_HPPA_DIS=y" >> $config_target_mak
5493 echo "CONFIG_HPPA_DIS=y" >> config-all-disas.mak
5495 i386|x86_64|x32)
5496 echo "CONFIG_I386_DIS=y" >> $config_target_mak
5497 echo "CONFIG_I386_DIS=y" >> config-all-disas.mak
5499 ia64*)
5500 echo "CONFIG_IA64_DIS=y" >> $config_target_mak
5501 echo "CONFIG_IA64_DIS=y" >> config-all-disas.mak
5503 lm32)
5504 echo "CONFIG_LM32_DIS=y" >> $config_target_mak
5505 echo "CONFIG_LM32_DIS=y" >> config-all-disas.mak
5507 m68k)
5508 echo "CONFIG_M68K_DIS=y" >> $config_target_mak
5509 echo "CONFIG_M68K_DIS=y" >> config-all-disas.mak
5511 microblaze*)
5512 echo "CONFIG_MICROBLAZE_DIS=y" >> $config_target_mak
5513 echo "CONFIG_MICROBLAZE_DIS=y" >> config-all-disas.mak
5515 mips*)
5516 echo "CONFIG_MIPS_DIS=y" >> $config_target_mak
5517 echo "CONFIG_MIPS_DIS=y" >> config-all-disas.mak
5519 moxie*)
5520 echo "CONFIG_MOXIE_DIS=y" >> $config_target_mak
5521 echo "CONFIG_MOXIE_DIS=y" >> config-all-disas.mak
5523 or32)
5524 echo "CONFIG_OPENRISC_DIS=y" >> $config_target_mak
5525 echo "CONFIG_OPENRISC_DIS=y" >> config-all-disas.mak
5527 ppc*)
5528 echo "CONFIG_PPC_DIS=y" >> $config_target_mak
5529 echo "CONFIG_PPC_DIS=y" >> config-all-disas.mak
5531 s390*)
5532 echo "CONFIG_S390_DIS=y" >> $config_target_mak
5533 echo "CONFIG_S390_DIS=y" >> config-all-disas.mak
5535 sh4)
5536 echo "CONFIG_SH4_DIS=y" >> $config_target_mak
5537 echo "CONFIG_SH4_DIS=y" >> config-all-disas.mak
5539 sparc*)
5540 echo "CONFIG_SPARC_DIS=y" >> $config_target_mak
5541 echo "CONFIG_SPARC_DIS=y" >> config-all-disas.mak
5543 xtensa*)
5544 echo "CONFIG_XTENSA_DIS=y" >> $config_target_mak
5545 echo "CONFIG_XTENSA_DIS=y" >> config-all-disas.mak
5547 esac
5548 done
5549 if test "$tcg_interpreter" = "yes" ; then
5550 echo "CONFIG_TCI_DIS=y" >> $config_target_mak
5551 echo "CONFIG_TCI_DIS=y" >> config-all-disas.mak
5554 case "$ARCH" in
5555 alpha)
5556 # Ensure there's only a single GP
5557 cflags="-msmall-data $cflags"
5559 esac
5561 if test "$gprof" = "yes" ; then
5562 echo "TARGET_GPROF=yes" >> $config_target_mak
5563 if test "$target_linux_user" = "yes" ; then
5564 cflags="-p $cflags"
5565 ldflags="-p $ldflags"
5567 if test "$target_softmmu" = "yes" ; then
5568 ldflags="-p $ldflags"
5569 echo "GPROF_CFLAGS=-p" >> $config_target_mak
5573 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5574 ldflags="$ldflags $textseg_ldflags"
5577 echo "LDFLAGS+=$ldflags" >> $config_target_mak
5578 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5580 done # for target in $targets
5582 if [ "$pixman" = "internal" ]; then
5583 echo "config-host.h: subdir-pixman" >> $config_host_mak
5586 if test "$rdma" = "yes" ; then
5587 echo "CONFIG_RDMA=y" >> $config_host_mak
5590 if [ "$dtc_internal" = "yes" ]; then
5591 echo "config-host.h: subdir-dtc" >> $config_host_mak
5594 if test "$numa" = "yes"; then
5595 echo "CONFIG_NUMA=y" >> $config_host_mak
5598 if test "$ccache_cpp2" = "yes"; then
5599 echo "export CCACHE_CPP2=y" >> $config_host_mak
5602 # build tree in object directory in case the source is not in the current directory
5603 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5604 DIRS="$DIRS fsdev"
5605 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
5606 DIRS="$DIRS roms/seabios roms/vgabios"
5607 DIRS="$DIRS qapi-generated"
5608 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5609 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5610 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
5611 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
5612 FILES="$FILES pc-bios/spapr-rtas/Makefile"
5613 FILES="$FILES pc-bios/s390-ccw/Makefile"
5614 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5615 FILES="$FILES pc-bios/qemu-icon.bmp"
5616 for bios_file in \
5617 $source_path/pc-bios/*.bin \
5618 $source_path/pc-bios/*.aml \
5619 $source_path/pc-bios/*.rom \
5620 $source_path/pc-bios/*.dtb \
5621 $source_path/pc-bios/*.img \
5622 $source_path/pc-bios/openbios-* \
5623 $source_path/pc-bios/u-boot.* \
5624 $source_path/pc-bios/palcode-*
5626 FILES="$FILES pc-bios/`basename $bios_file`"
5627 done
5628 for test_file in `find $source_path/tests/acpi-test-data -type f`
5630 FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5631 done
5632 mkdir -p $DIRS
5633 for f in $FILES ; do
5634 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5635 symlink "$source_path/$f" "$f"
5637 done
5639 # temporary config to build submodules
5640 for rom in seabios vgabios ; do
5641 config_mak=roms/$rom/config.mak
5642 echo "# Automatically generated by configure - do not modify" > $config_mak
5643 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5644 echo "AS=$as" >> $config_mak
5645 echo "CC=$cc" >> $config_mak
5646 echo "BCC=bcc" >> $config_mak
5647 echo "CPP=$cpp" >> $config_mak
5648 echo "OBJCOPY=objcopy" >> $config_mak
5649 echo "IASL=$iasl" >> $config_mak
5650 echo "LD=$ld" >> $config_mak
5651 done
5653 # set up qemu-iotests in this build directory
5654 iotests_common_env="tests/qemu-iotests/common.env"
5655 iotests_check="tests/qemu-iotests/check"
5657 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5658 echo >> "$iotests_common_env"
5659 echo "export PYTHON='$python'" >> "$iotests_common_env"
5661 if [ ! -e "$iotests_check" ]; then
5662 symlink "$source_path/$iotests_check" "$iotests_check"
5665 # Save the configure command line for later reuse.
5666 cat <<EOD >config.status
5667 #!/bin/sh
5668 # Generated by configure.
5669 # Run this file to recreate the current configuration.
5670 # Compiler output produced by configure, useful for debugging
5671 # configure, is in config.log if it exists.
5673 printf "exec" >>config.status
5674 printf " '%s'" "$0" "$@" >>config.status
5675 echo >>config.status
5676 chmod +x config.status
5678 rm -r "$TMPDIR1"