Merge remote-tracking branch 'remotes/stefanha/tags/net-pull-request' into staging
[qemu.git] / configure
blob1f0f485768687f8bdc3d99c9db8c4c95458c1806
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 do_cc $QEMU_CFLAGS -c -o $TMPO $TMPC
109 compile_prog() {
110 local_cflags="$1"
111 local_ldflags="$2"
112 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
115 do_libtool() {
116 local mode=$1
117 shift
118 # Run the compiler, capturing its output to the log.
119 echo $libtool $mode --tag=CC $cc "$@" >> config.log
120 $libtool $mode --tag=CC $cc "$@" >> config.log 2>&1 || return $?
121 # Test passed. If this is an --enable-werror build, rerun
122 # the test with -Werror and bail out if it fails. This
123 # makes warning-generating-errors in configure test code
124 # obvious to developers.
125 if test "$werror" != "yes"; then
126 return 0
128 # Don't bother rerunning the compile if we were already using -Werror
129 case "$*" in
130 *-Werror*)
131 return 0
133 esac
134 echo $libtool $mode --tag=CC $cc -Werror "$@" >> config.log
135 $libtool $mode --tag=CC $cc -Werror "$@" >> config.log 2>&1 && return $?
136 error_exit "configure test passed without -Werror but failed with -Werror." \
137 "This is probably a bug in the configure script. The failing command" \
138 "will be at the bottom of config.log." \
139 "You can run configure with --disable-werror to bypass this check."
142 libtool_prog() {
143 do_libtool --mode=compile $QEMU_CFLAGS -c -fPIE -DPIE -o $TMPO $TMPC || return $?
144 do_libtool --mode=link $LDFLAGS -o $TMPA $TMPL -rpath /usr/local/lib
147 # symbolically link $1 to $2. Portable version of "ln -sf".
148 symlink() {
149 rm -rf "$2"
150 mkdir -p "$(dirname "$2")"
151 ln -s "$1" "$2"
154 # check whether a command is available to this shell (may be either an
155 # executable or a builtin)
156 has() {
157 type "$1" >/dev/null 2>&1
160 # search for an executable in PATH
161 path_of() {
162 local_command="$1"
163 local_ifs="$IFS"
164 local_dir=""
166 # pathname has a dir component?
167 if [ "${local_command#*/}" != "$local_command" ]; then
168 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
169 echo "$local_command"
170 return 0
173 if [ -z "$local_command" ]; then
174 return 1
177 IFS=:
178 for local_dir in $PATH; do
179 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
180 echo "$local_dir/$local_command"
181 IFS="${local_ifs:-$(printf ' \t\n')}"
182 return 0
184 done
185 # not found
186 IFS="${local_ifs:-$(printf ' \t\n')}"
187 return 1
190 have_backend () {
191 echo "$trace_backends" | grep "$1" >/dev/null
194 # default parameters
195 source_path=`dirname "$0"`
196 cpu=""
197 iasl="iasl"
198 interp_prefix="/usr/gnemul/qemu-%M"
199 static="no"
200 cross_prefix=""
201 audio_drv_list=""
202 block_drv_rw_whitelist=""
203 block_drv_ro_whitelist=""
204 host_cc="cc"
205 libs_softmmu=""
206 libs_tools=""
207 audio_pt_int=""
208 audio_win_int=""
209 cc_i386=i386-pc-linux-gnu-gcc
210 libs_qga=""
211 debug_info="yes"
212 stack_protector=""
214 # Don't accept a target_list environment variable.
215 unset target_list
217 # Default value for a variable defining feature "foo".
218 # * foo="no" feature will only be used if --enable-foo arg is given
219 # * foo="" feature will be searched for, and if found, will be used
220 # unless --disable-foo is given
221 # * foo="yes" this value will only be set by --enable-foo flag.
222 # feature will searched for,
223 # if not found, configure exits with error
225 # Always add --enable-foo and --disable-foo command line args.
226 # Distributions want to ensure that several features are compiled in, and it
227 # is impossible without a --enable-foo that exits if a feature is not found.
229 bluez=""
230 brlapi=""
231 curl=""
232 curses=""
233 docs=""
234 fdt=""
235 netmap="no"
236 pixman=""
237 sdl=""
238 sdlabi="1.2"
239 virtfs=""
240 vnc="yes"
241 sparse="no"
242 uuid=""
243 vde=""
244 vnc_tls=""
245 vnc_sasl=""
246 vnc_jpeg=""
247 vnc_png=""
248 vnc_ws=""
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 fmod_lib=""
288 fmod_inc=""
289 oss_lib=""
290 bsd="no"
291 linux="no"
292 solaris="no"
293 profiler="no"
294 cocoa="no"
295 softmmu="yes"
296 linux_user="no"
297 bsd_user="no"
298 guest_base="yes"
299 aix="no"
300 blobs="yes"
301 pkgversion=""
302 pie=""
303 zero_malloc=""
304 qom_cast_debug="yes"
305 trace_backends="nop"
306 trace_file="trace"
307 spice=""
308 rbd=""
309 smartcard_nss=""
310 libusb=""
311 usb_redir=""
312 opengl=""
313 zlib="yes"
314 lzo=""
315 snappy=""
316 bzip2=""
317 guest_agent=""
318 guest_agent_with_vss="no"
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 vte=""
334 tpm="yes"
335 libssh2=""
336 vhdx=""
337 quorum=""
338 numa=""
339 tcmalloc="no"
341 # parse CC options first
342 for opt do
343 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
344 case "$opt" in
345 --cross-prefix=*) cross_prefix="$optarg"
347 --cc=*) CC="$optarg"
349 --cxx=*) CXX="$optarg"
351 --source-path=*) source_path="$optarg"
353 --cpu=*) cpu="$optarg"
355 --extra-cflags=*) QEMU_CFLAGS="$optarg $QEMU_CFLAGS"
356 EXTRA_CFLAGS="$optarg"
358 --extra-ldflags=*) LDFLAGS="$optarg $LDFLAGS"
359 EXTRA_LDFLAGS="$optarg"
361 --enable-debug-info) debug_info="yes"
363 --disable-debug-info) debug_info="no"
365 esac
366 done
367 # OS specific
368 # Using uname is really, really broken. Once we have the right set of checks
369 # we can eliminate its usage altogether.
371 # Preferred compiler:
372 # ${CC} (if set)
373 # ${cross_prefix}gcc (if cross-prefix specified)
374 # system compiler
375 if test -z "${CC}${cross_prefix}"; then
376 cc="$host_cc"
377 else
378 cc="${CC-${cross_prefix}gcc}"
381 if test -z "${CXX}${cross_prefix}"; then
382 cxx="c++"
383 else
384 cxx="${CXX-${cross_prefix}g++}"
387 ar="${AR-${cross_prefix}ar}"
388 as="${AS-${cross_prefix}as}"
389 cpp="${CPP-$cc -E}"
390 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
391 ld="${LD-${cross_prefix}ld}"
392 libtool="${LIBTOOL-${cross_prefix}libtool}"
393 nm="${NM-${cross_prefix}nm}"
394 strip="${STRIP-${cross_prefix}strip}"
395 windres="${WINDRES-${cross_prefix}windres}"
396 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
397 query_pkg_config() {
398 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
400 pkg_config=query_pkg_config
401 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
402 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
404 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
405 ARFLAGS="${ARFLAGS-rv}"
407 # default flags for all hosts
408 QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
409 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
410 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
411 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
412 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
413 if test "$debug_info" = "yes"; then
414 CFLAGS="-g $CFLAGS"
415 LDFLAGS="-g $LDFLAGS"
418 # make source path absolute
419 source_path=`cd "$source_path"; pwd`
421 # running configure in the source tree?
422 # we know that's the case if configure is there.
423 if test -f "./configure"; then
424 pwd_is_source_path="y"
425 else
426 pwd_is_source_path="n"
429 check_define() {
430 cat > $TMPC <<EOF
431 #if !defined($1)
432 #error $1 not defined
433 #endif
434 int main(void) { return 0; }
436 compile_object
439 if check_define __linux__ ; then
440 targetos="Linux"
441 elif check_define _WIN32 ; then
442 targetos='MINGW32'
443 elif check_define __OpenBSD__ ; then
444 targetos='OpenBSD'
445 elif check_define __sun__ ; then
446 targetos='SunOS'
447 elif check_define __HAIKU__ ; then
448 targetos='Haiku'
449 else
450 targetos=`uname -s`
453 # Some host OSes need non-standard checks for which CPU to use.
454 # Note that these checks are broken for cross-compilation: if you're
455 # cross-compiling to one of these OSes then you'll need to specify
456 # the correct CPU with the --cpu option.
457 case $targetos in
458 Darwin)
459 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
460 # run 64-bit userspace code.
461 # If the user didn't specify a CPU explicitly and the kernel says this is
462 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
463 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
464 cpu="x86_64"
467 SunOS)
468 # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
469 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
470 cpu="x86_64"
472 esac
474 if test ! -z "$cpu" ; then
475 # command line argument
477 elif check_define __i386__ ; then
478 cpu="i386"
479 elif check_define __x86_64__ ; then
480 if check_define __ILP32__ ; then
481 cpu="x32"
482 else
483 cpu="x86_64"
485 elif check_define __sparc__ ; then
486 if check_define __arch64__ ; then
487 cpu="sparc64"
488 else
489 cpu="sparc"
491 elif check_define _ARCH_PPC ; then
492 if check_define _ARCH_PPC64 ; then
493 cpu="ppc64"
494 else
495 cpu="ppc"
497 elif check_define __mips__ ; then
498 cpu="mips"
499 elif check_define __ia64__ ; then
500 cpu="ia64"
501 elif check_define __s390__ ; then
502 if check_define __s390x__ ; then
503 cpu="s390x"
504 else
505 cpu="s390"
507 elif check_define __arm__ ; then
508 cpu="arm"
509 elif check_define __aarch64__ ; then
510 cpu="aarch64"
511 elif check_define __hppa__ ; then
512 cpu="hppa"
513 else
514 cpu=`uname -m`
517 ARCH=
518 # Normalise host CPU name and set ARCH.
519 # Note that this case should only have supported host CPUs, not guests.
520 case "$cpu" in
521 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
522 cpu="$cpu"
524 i386|i486|i586|i686|i86pc|BePC)
525 cpu="i386"
527 x86_64|amd64)
528 cpu="x86_64"
530 armv*b|armv*l|arm)
531 cpu="arm"
533 aarch64)
534 cpu="aarch64"
536 mips*)
537 cpu="mips"
539 sparc|sun4[cdmuv])
540 cpu="sparc"
543 # This will result in either an error or falling back to TCI later
544 ARCH=unknown
546 esac
547 if test -z "$ARCH"; then
548 ARCH="$cpu"
551 # OS specific
553 # host *BSD for user mode
554 HOST_VARIANT_DIR=""
556 case $targetos in
557 CYGWIN*)
558 mingw32="yes"
559 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
560 audio_possible_drivers="winwave sdl"
561 audio_drv_list="winwave"
563 MINGW32*)
564 mingw32="yes"
565 audio_possible_drivers="winwave dsound sdl fmod"
566 audio_drv_list="winwave"
568 GNU/kFreeBSD)
569 bsd="yes"
570 audio_drv_list="oss"
571 audio_possible_drivers="oss sdl esd pa"
573 FreeBSD)
574 bsd="yes"
575 make="${MAKE-gmake}"
576 audio_drv_list="oss"
577 audio_possible_drivers="oss sdl esd pa"
578 # needed for kinfo_getvmmap(3) in libutil.h
579 LIBS="-lutil $LIBS"
580 netmap="" # enable netmap autodetect
581 HOST_VARIANT_DIR="freebsd"
583 DragonFly)
584 bsd="yes"
585 make="${MAKE-gmake}"
586 audio_drv_list="oss"
587 audio_possible_drivers="oss sdl esd pa"
588 HOST_VARIANT_DIR="dragonfly"
590 NetBSD)
591 bsd="yes"
592 make="${MAKE-gmake}"
593 audio_drv_list="oss"
594 audio_possible_drivers="oss sdl esd"
595 oss_lib="-lossaudio"
596 HOST_VARIANT_DIR="netbsd"
598 OpenBSD)
599 bsd="yes"
600 make="${MAKE-gmake}"
601 audio_drv_list="sdl"
602 audio_possible_drivers="sdl esd"
603 HOST_VARIANT_DIR="openbsd"
605 Darwin)
606 bsd="yes"
607 darwin="yes"
608 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
609 if [ "$cpu" = "x86_64" ] ; then
610 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
611 LDFLAGS="-arch x86_64 $LDFLAGS"
613 cocoa="yes"
614 audio_drv_list="coreaudio"
615 audio_possible_drivers="coreaudio sdl fmod"
616 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
617 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
618 # Disable attempts to use ObjectiveC features in os/object.h since they
619 # won't work when we're compiling with gcc as a C compiler.
620 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
621 HOST_VARIANT_DIR="darwin"
623 SunOS)
624 solaris="yes"
625 make="${MAKE-gmake}"
626 install="${INSTALL-ginstall}"
627 ld="gld"
628 smbd="${SMBD-/usr/sfw/sbin/smbd}"
629 needs_libsunmath="no"
630 solarisrev=`uname -r | cut -f2 -d.`
631 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
632 if test "$solarisrev" -le 9 ; then
633 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
634 needs_libsunmath="yes"
635 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
636 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
637 LIBS="-lsunmath $LIBS"
638 else
639 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
640 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
641 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
642 "Studio 11 can be downloaded from www.sun.com."
646 if test -f /usr/include/sys/soundcard.h ; then
647 audio_drv_list="oss"
649 audio_possible_drivers="oss sdl"
650 # needed for CMSG_ macros in sys/socket.h
651 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
652 # needed for TIOCWIN* defines in termios.h
653 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
654 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
655 solarisnetlibs="-lsocket -lnsl -lresolv"
656 LIBS="$solarisnetlibs $LIBS"
657 libs_qga="$solarisnetlibs $libs_qga"
659 AIX)
660 aix="yes"
661 make="${MAKE-gmake}"
663 Haiku)
664 haiku="yes"
665 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
666 LIBS="-lposix_error_mapper -lnetwork $LIBS"
669 audio_drv_list="oss"
670 audio_possible_drivers="oss alsa sdl esd pa"
671 linux="yes"
672 linux_user="yes"
673 kvm="yes"
674 vhost_net="yes"
675 vhost_scsi="yes"
676 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" -o "$cpu" = "x32" ] ; then
677 audio_possible_drivers="$audio_possible_drivers fmod"
679 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
681 esac
683 if [ "$bsd" = "yes" ] ; then
684 if [ "$darwin" != "yes" ] ; then
685 bsd_user="yes"
689 : ${make=${MAKE-make}}
690 : ${install=${INSTALL-install}}
691 : ${python=${PYTHON-python}}
692 : ${smbd=${SMBD-/usr/sbin/smbd}}
694 # Default objcc to clang if available, otherwise use CC
695 if has clang; then
696 objcc=clang
697 else
698 objcc="$cc"
701 if test "$mingw32" = "yes" ; then
702 EXESUF=".exe"
703 DSOSUF=".dll"
704 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
705 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
706 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
707 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
708 cat > $TMPC << EOF
709 int main(void) { return 0; }
711 if compile_prog "" "-liberty" ; then
712 LIBS="-liberty $LIBS"
714 prefix="c:/Program Files/QEMU"
715 mandir="\${prefix}"
716 datadir="\${prefix}"
717 qemu_docdir="\${prefix}"
718 bindir="\${prefix}"
719 sysconfdir="\${prefix}"
720 local_statedir=
721 confsuffix=""
722 libs_qga="-lws2_32 -lwinmm -lpowrprof $libs_qga"
725 werror=""
727 for opt do
728 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
729 case "$opt" in
730 --help|-h) show_help=yes
732 --version|-V) exec cat $source_path/VERSION
734 --prefix=*) prefix="$optarg"
736 --interp-prefix=*) interp_prefix="$optarg"
738 --source-path=*)
740 --cross-prefix=*)
742 --cc=*)
744 --host-cc=*) host_cc="$optarg"
746 --cxx=*)
748 --iasl=*) iasl="$optarg"
750 --objcc=*) objcc="$optarg"
752 --make=*) make="$optarg"
754 --install=*) install="$optarg"
756 --python=*) python="$optarg"
758 --gcov=*) gcov_tool="$optarg"
760 --smbd=*) smbd="$optarg"
762 --extra-cflags=*)
764 --extra-ldflags=*)
766 --enable-debug-info)
768 --disable-debug-info)
770 --enable-modules)
771 modules="yes"
773 --cpu=*)
775 --target-list=*) target_list="$optarg"
777 --enable-trace-backends=*) trace_backends="$optarg"
779 # XXX: backwards compatibility
780 --enable-trace-backend=*) trace_backends="$optarg"
782 --with-trace-file=*) trace_file="$optarg"
784 --enable-gprof) gprof="yes"
786 --enable-gcov) gcov="yes"
788 --static)
789 static="yes"
790 LDFLAGS="-static $LDFLAGS"
791 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
793 --mandir=*) mandir="$optarg"
795 --bindir=*) bindir="$optarg"
797 --libdir=*) libdir="$optarg"
799 --libexecdir=*) libexecdir="$optarg"
801 --includedir=*) includedir="$optarg"
803 --datadir=*) datadir="$optarg"
805 --with-confsuffix=*) confsuffix="$optarg"
807 --docdir=*) qemu_docdir="$optarg"
809 --sysconfdir=*) sysconfdir="$optarg"
811 --localstatedir=*) local_statedir="$optarg"
813 --sbindir=*|--sharedstatedir=*|\
814 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
815 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
816 # These switches are silently ignored, for compatibility with
817 # autoconf-generated configure scripts. This allows QEMU's
818 # configure to be used by RPM and similar macros that set
819 # lots of directory switches by default.
821 --with-system-pixman) pixman="system"
823 --without-system-pixman) pixman="internal"
825 --without-pixman) pixman="none"
827 --disable-sdl) sdl="no"
829 --enable-sdl) sdl="yes"
831 --with-sdlabi=*) sdlabi="$optarg"
833 --disable-qom-cast-debug) qom_cast_debug="no"
835 --enable-qom-cast-debug) qom_cast_debug="yes"
837 --disable-virtfs) virtfs="no"
839 --enable-virtfs) virtfs="yes"
841 --disable-vnc) vnc="no"
843 --enable-vnc) vnc="yes"
845 --fmod-lib=*) fmod_lib="$optarg"
847 --fmod-inc=*) fmod_inc="$optarg"
849 --oss-lib=*) oss_lib="$optarg"
851 --audio-drv-list=*) audio_drv_list="$optarg"
853 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
855 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
857 --enable-debug-tcg) debug_tcg="yes"
859 --disable-debug-tcg) debug_tcg="no"
861 --enable-debug)
862 # Enable debugging options that aren't excessively noisy
863 debug_tcg="yes"
864 debug="yes"
865 strip_opt="no"
867 --enable-sparse) sparse="yes"
869 --disable-sparse) sparse="no"
871 --disable-strip) strip_opt="no"
873 --disable-vnc-tls) vnc_tls="no"
875 --enable-vnc-tls) vnc_tls="yes"
877 --disable-vnc-sasl) vnc_sasl="no"
879 --enable-vnc-sasl) vnc_sasl="yes"
881 --disable-vnc-jpeg) vnc_jpeg="no"
883 --enable-vnc-jpeg) vnc_jpeg="yes"
885 --disable-vnc-png) vnc_png="no"
887 --enable-vnc-png) vnc_png="yes"
889 --disable-vnc-ws) vnc_ws="no"
891 --enable-vnc-ws) vnc_ws="yes"
893 --disable-slirp) slirp="no"
895 --disable-uuid) uuid="no"
897 --enable-uuid) uuid="yes"
899 --disable-vde) vde="no"
901 --enable-vde) vde="yes"
903 --disable-netmap) netmap="no"
905 --enable-netmap) netmap="yes"
907 --disable-xen) xen="no"
909 --enable-xen) xen="yes"
911 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
913 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
915 --disable-brlapi) brlapi="no"
917 --enable-brlapi) brlapi="yes"
919 --disable-bluez) bluez="no"
921 --enable-bluez) bluez="yes"
923 --disable-kvm) kvm="no"
925 --enable-kvm) kvm="yes"
927 --disable-tcg-interpreter) tcg_interpreter="no"
929 --enable-tcg-interpreter) tcg_interpreter="yes"
931 --disable-cap-ng) cap_ng="no"
933 --enable-cap-ng) cap_ng="yes"
935 --disable-spice) spice="no"
937 --enable-spice) spice="yes"
939 --disable-libiscsi) libiscsi="no"
941 --enable-libiscsi) libiscsi="yes"
943 --disable-libnfs) libnfs="no"
945 --enable-libnfs) libnfs="yes"
947 --enable-profiler) profiler="yes"
949 --disable-cocoa) cocoa="no"
951 --enable-cocoa)
952 cocoa="yes" ;
953 sdl="no" ;
954 audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
956 --disable-system) softmmu="no"
958 --enable-system) softmmu="yes"
960 --disable-user)
961 linux_user="no" ;
962 bsd_user="no" ;
964 --enable-user) ;;
965 --disable-linux-user) linux_user="no"
967 --enable-linux-user) linux_user="yes"
969 --disable-bsd-user) bsd_user="no"
971 --enable-bsd-user) bsd_user="yes"
973 --enable-guest-base) guest_base="yes"
975 --disable-guest-base) guest_base="no"
977 --enable-pie) pie="yes"
979 --disable-pie) pie="no"
981 --enable-werror) werror="yes"
983 --disable-werror) werror="no"
985 --enable-stack-protector) stack_protector="yes"
987 --disable-stack-protector) stack_protector="no"
989 --disable-curses) curses="no"
991 --enable-curses) curses="yes"
993 --disable-curl) curl="no"
995 --enable-curl) curl="yes"
997 --disable-fdt) fdt="no"
999 --enable-fdt) fdt="yes"
1001 --disable-linux-aio) linux_aio="no"
1003 --enable-linux-aio) linux_aio="yes"
1005 --disable-attr) attr="no"
1007 --enable-attr) attr="yes"
1009 --disable-blobs) blobs="no"
1011 --with-pkgversion=*) pkgversion=" ($optarg)"
1013 --with-coroutine=*) coroutine="$optarg"
1015 --disable-coroutine-pool) coroutine_pool="no"
1017 --enable-coroutine-pool) coroutine_pool="yes"
1019 --disable-docs) docs="no"
1021 --enable-docs) docs="yes"
1023 --disable-vhost-net) vhost_net="no"
1025 --enable-vhost-net) vhost_net="yes"
1027 --disable-vhost-scsi) vhost_scsi="no"
1029 --enable-vhost-scsi) vhost_scsi="yes"
1031 --disable-opengl) opengl="no"
1033 --enable-opengl) opengl="yes"
1035 --disable-rbd) rbd="no"
1037 --enable-rbd) rbd="yes"
1039 --disable-xfsctl) xfs="no"
1041 --enable-xfsctl) xfs="yes"
1043 --disable-smartcard-nss) smartcard_nss="no"
1045 --enable-smartcard-nss) smartcard_nss="yes"
1047 --disable-libusb) libusb="no"
1049 --enable-libusb) libusb="yes"
1051 --disable-usb-redir) usb_redir="no"
1053 --enable-usb-redir) usb_redir="yes"
1055 --disable-zlib-test) zlib="no"
1057 --disable-lzo) lzo="no"
1059 --enable-lzo) lzo="yes"
1061 --disable-snappy) snappy="no"
1063 --enable-snappy) snappy="yes"
1065 --disable-bzip2) bzip2="no"
1067 --enable-bzip2) bzip2="yes"
1069 --enable-guest-agent) guest_agent="yes"
1071 --disable-guest-agent) guest_agent="no"
1073 --with-vss-sdk) vss_win32_sdk=""
1075 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1077 --without-vss-sdk) vss_win32_sdk="no"
1079 --with-win-sdk) win_sdk=""
1081 --with-win-sdk=*) win_sdk="$optarg"
1083 --without-win-sdk) win_sdk="no"
1085 --enable-tools) want_tools="yes"
1087 --disable-tools) want_tools="no"
1089 --enable-seccomp) seccomp="yes"
1091 --disable-seccomp) seccomp="no"
1093 --disable-glusterfs) glusterfs="no"
1095 --enable-glusterfs) glusterfs="yes"
1097 --disable-archipelago) archipelago="no"
1099 --enable-archipelago) archipelago="yes"
1101 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1102 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1104 --disable-gtk) gtk="no"
1106 --enable-gtk) gtk="yes"
1108 --enable-rdma) rdma="yes"
1110 --disable-rdma) rdma="no"
1112 --with-gtkabi=*) gtkabi="$optarg"
1114 --disable-vte) vte="no"
1116 --enable-vte) vte="yes"
1118 --disable-tpm) tpm="no"
1120 --enable-tpm) tpm="yes"
1122 --disable-libssh2) libssh2="no"
1124 --enable-libssh2) libssh2="yes"
1126 --enable-vhdx) vhdx="yes"
1128 --disable-vhdx) vhdx="no"
1130 --disable-quorum) quorum="no"
1132 --enable-quorum) quorum="yes"
1134 --disable-numa) numa="no"
1136 --enable-numa) numa="yes"
1138 --disable-tcmalloc) tcmalloc="no"
1140 --enable-tcmalloc) tcmalloc="yes"
1143 echo "ERROR: unknown option $opt"
1144 echo "Try '$0 --help' for more information"
1145 exit 1
1147 esac
1148 done
1150 if ! has $python; then
1151 error_exit "Python not found. Use --python=/path/to/python"
1154 # Note that if the Python conditional here evaluates True we will exit
1155 # with status 1 which is a shell 'false' value.
1156 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
1157 error_exit "Cannot use '$python', Python 2.4 or later is required." \
1158 "Note that Python 3 or later is not yet supported." \
1159 "Use --python=/path/to/python to specify a supported Python."
1162 # The -B switch was added in Python 2.6.
1163 # If it is supplied, compiled files are not written.
1164 # Use it for Python versions which support it.
1165 if $python -B -c 'import sys; sys.exit(0)' 2>/dev/null; then
1166 python="$python -B"
1169 case "$cpu" in
1170 ppc)
1171 CPU_CFLAGS="-m32"
1172 LDFLAGS="-m32 $LDFLAGS"
1174 ppc64)
1175 CPU_CFLAGS="-m64"
1176 LDFLAGS="-m64 $LDFLAGS"
1178 sparc)
1179 LDFLAGS="-m32 $LDFLAGS"
1180 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1182 sparc64)
1183 LDFLAGS="-m64 $LDFLAGS"
1184 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1186 s390)
1187 CPU_CFLAGS="-m31"
1188 LDFLAGS="-m31 $LDFLAGS"
1190 s390x)
1191 CPU_CFLAGS="-m64"
1192 LDFLAGS="-m64 $LDFLAGS"
1194 i386)
1195 CPU_CFLAGS="-m32"
1196 LDFLAGS="-m32 $LDFLAGS"
1197 cc_i386='$(CC) -m32'
1199 x86_64)
1200 CPU_CFLAGS="-m64"
1201 LDFLAGS="-m64 $LDFLAGS"
1202 cc_i386='$(CC) -m32'
1204 x32)
1205 CPU_CFLAGS="-mx32"
1206 LDFLAGS="-mx32 $LDFLAGS"
1207 cc_i386='$(CC) -m32'
1209 # No special flags required for other host CPUs
1210 esac
1212 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1213 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1215 default_target_list=""
1217 mak_wilds=""
1219 if [ "$softmmu" = "yes" ]; then
1220 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1222 if [ "$linux_user" = "yes" ]; then
1223 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1225 if [ "$bsd_user" = "yes" ]; then
1226 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1229 for config in $mak_wilds; do
1230 default_target_list="${default_target_list} $(basename "$config" .mak)"
1231 done
1233 if test x"$show_help" = x"yes" ; then
1234 cat << EOF
1236 Usage: configure [options]
1237 Options: [defaults in brackets after descriptions]
1239 Standard options:
1240 --help print this message
1241 --prefix=PREFIX install in PREFIX [$prefix]
1242 --interp-prefix=PREFIX where to find shared libraries, etc.
1243 use %M for cpu name [$interp_prefix]
1244 --target-list=LIST set target list (default: build everything)
1245 $(echo Available targets: $default_target_list | \
1246 fold -s -w 53 | sed -e 's/^/ /')
1248 Advanced options (experts only):
1249 --source-path=PATH path of source code [$source_path]
1250 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1251 --cc=CC use C compiler CC [$cc]
1252 --iasl=IASL use ACPI compiler IASL [$iasl]
1253 --host-cc=CC use C compiler CC [$host_cc] for code run at
1254 build time
1255 --cxx=CXX use C++ compiler CXX [$cxx]
1256 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1257 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1258 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1259 --make=MAKE use specified make [$make]
1260 --install=INSTALL use specified install [$install]
1261 --python=PYTHON use specified python [$python]
1262 --smbd=SMBD use specified smbd [$smbd]
1263 --static enable static build [$static]
1264 --mandir=PATH install man pages in PATH
1265 --datadir=PATH install firmware in PATH$confsuffix
1266 --docdir=PATH install documentation in PATH$confsuffix
1267 --bindir=PATH install binaries in PATH
1268 --libdir=PATH install libraries in PATH
1269 --sysconfdir=PATH install config in PATH$confsuffix
1270 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1271 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1272 --enable-modules enable modules support
1273 --enable-debug-tcg enable TCG debugging
1274 --disable-debug-tcg disable TCG debugging (default)
1275 --enable-debug-info enable debugging information (default)
1276 --disable-debug-info disable debugging information
1277 --enable-debug enable common debug build options
1278 --enable-sparse enable sparse checker
1279 --disable-sparse disable sparse checker (default)
1280 --disable-strip disable stripping binaries
1281 --disable-werror disable compilation abort on warning
1282 --disable-stack-protector disable compiler-provided stack protection
1283 --disable-sdl disable SDL
1284 --enable-sdl enable SDL
1285 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1286 --disable-gtk disable gtk UI
1287 --enable-gtk enable gtk UI
1288 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1289 --disable-virtfs disable VirtFS
1290 --enable-virtfs enable VirtFS
1291 --disable-vnc disable VNC
1292 --enable-vnc enable VNC
1293 --disable-cocoa disable Cocoa (Mac OS X only)
1294 --enable-cocoa enable Cocoa (default on Mac OS X)
1295 --audio-drv-list=LIST set audio drivers list:
1296 Available drivers: $audio_possible_drivers
1297 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1298 --block-drv-rw-whitelist=L
1299 set block driver read-write whitelist
1300 (affects only QEMU, not qemu-img)
1301 --block-drv-ro-whitelist=L
1302 set block driver read-only whitelist
1303 (affects only QEMU, not qemu-img)
1304 --disable-xen disable xen backend driver support
1305 --enable-xen enable xen backend driver support
1306 --disable-xen-pci-passthrough
1307 --enable-xen-pci-passthrough
1308 --disable-brlapi disable BrlAPI
1309 --enable-brlapi enable BrlAPI
1310 --disable-vnc-tls disable TLS encryption for VNC server
1311 --enable-vnc-tls enable TLS encryption for VNC server
1312 --disable-vnc-sasl disable SASL encryption for VNC server
1313 --enable-vnc-sasl enable SASL encryption for VNC server
1314 --disable-vnc-jpeg disable JPEG lossy compression for VNC server
1315 --enable-vnc-jpeg enable JPEG lossy compression for VNC server
1316 --disable-vnc-png disable PNG compression for VNC server (default)
1317 --enable-vnc-png enable PNG compression for VNC server
1318 --disable-vnc-ws disable Websockets support for VNC server
1319 --enable-vnc-ws enable Websockets support for VNC server
1320 --disable-curses disable curses output
1321 --enable-curses enable curses output
1322 --disable-curl disable curl connectivity
1323 --enable-curl enable curl connectivity
1324 --disable-fdt disable fdt device tree
1325 --enable-fdt enable fdt device tree
1326 --disable-bluez disable bluez stack connectivity
1327 --enable-bluez enable bluez stack connectivity
1328 --disable-slirp disable SLIRP userspace network connectivity
1329 --disable-kvm disable KVM acceleration support
1330 --enable-kvm enable KVM acceleration support
1331 --disable-rdma disable RDMA-based migration support
1332 --enable-rdma enable RDMA-based migration support
1333 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1334 --enable-system enable all system emulation targets
1335 --disable-system disable all system emulation targets
1336 --enable-user enable supported user emulation targets
1337 --disable-user disable all user emulation targets
1338 --enable-linux-user enable all linux usermode emulation targets
1339 --disable-linux-user disable all linux usermode emulation targets
1340 --enable-bsd-user enable all BSD usermode emulation targets
1341 --disable-bsd-user disable all BSD usermode emulation targets
1342 --enable-guest-base enable GUEST_BASE support for usermode
1343 emulation targets
1344 --disable-guest-base disable GUEST_BASE support
1345 --enable-pie build Position Independent Executables
1346 --disable-pie do not build Position Independent Executables
1347 --fmod-lib path to FMOD library
1348 --fmod-inc path to FMOD includes
1349 --oss-lib path to OSS library
1350 --cpu=CPU Build for host CPU [$cpu]
1351 --disable-uuid disable uuid support
1352 --enable-uuid enable uuid support
1353 --disable-vde disable support for vde network
1354 --enable-vde enable support for vde network
1355 --disable-netmap disable support for netmap network
1356 --enable-netmap enable support for netmap network
1357 --disable-linux-aio disable Linux AIO support
1358 --enable-linux-aio enable Linux AIO support
1359 --disable-cap-ng disable libcap-ng support
1360 --enable-cap-ng enable libcap-ng support
1361 --disable-attr disable attr and xattr support
1362 --enable-attr enable attr and xattr support
1363 --disable-blobs disable installing provided firmware blobs
1364 --enable-docs enable documentation build
1365 --disable-docs disable documentation build
1366 --disable-vhost-net disable vhost-net acceleration support
1367 --enable-vhost-net enable vhost-net acceleration support
1368 --enable-trace-backends=B Set trace backend
1369 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1370 --with-trace-file=NAME Full PATH,NAME of file to store traces
1371 Default:trace-<pid>
1372 --disable-spice disable spice
1373 --enable-spice enable spice
1374 --enable-rbd enable building the rados block device (rbd)
1375 --disable-libiscsi disable iscsi support
1376 --enable-libiscsi enable iscsi support
1377 --disable-libnfs disable nfs support
1378 --enable-libnfs enable nfs support
1379 --disable-smartcard-nss disable smartcard nss support
1380 --enable-smartcard-nss enable smartcard nss support
1381 --disable-libusb disable libusb (for usb passthrough)
1382 --enable-libusb enable libusb (for usb passthrough)
1383 --disable-usb-redir disable usb network redirection support
1384 --enable-usb-redir enable usb network redirection support
1385 --enable-lzo enable the support of lzo compression library
1386 --enable-snappy enable the support of snappy compression library
1387 --enable-bzip2 enable the support of bzip2 compression library (for
1388 reading bzip2-compressed dmg images)
1389 --disable-guest-agent disable building of the QEMU Guest Agent
1390 --enable-guest-agent enable building of the QEMU Guest Agent
1391 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1392 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1393 --disable-seccomp disable seccomp support
1394 --enable-seccomp enable seccomp support
1395 --with-coroutine=BACKEND coroutine backend. Supported options:
1396 gthread, ucontext, sigaltstack, windows
1397 --disable-coroutine-pool disable coroutine freelist (worse performance)
1398 --enable-coroutine-pool enable coroutine freelist (better performance)
1399 --enable-glusterfs enable GlusterFS backend
1400 --disable-glusterfs disable GlusterFS backend
1401 --enable-archipelago enable Archipelago backend
1402 --disable-archipelago disable Archipelago backend
1403 --enable-gcov enable test coverage analysis with gcov
1404 --gcov=GCOV use specified gcov [$gcov_tool]
1405 --disable-tpm disable TPM support
1406 --enable-tpm enable TPM support
1407 --disable-libssh2 disable ssh block device support
1408 --enable-libssh2 enable ssh block device support
1409 --disable-vhdx disable support for the Microsoft VHDX image format
1410 --enable-vhdx enable support for the Microsoft VHDX image format
1411 --disable-quorum disable quorum block filter support
1412 --enable-quorum enable quorum block filter support
1413 --disable-numa disable libnuma support
1414 --enable-numa enable libnuma support
1415 --disable-tcmalloc disable tcmalloc support
1416 --enable-tcmalloc enable tcmalloc support
1418 NOTE: The object files are built at the place where configure is launched
1420 exit 0
1423 # Now we have handled --enable-tcg-interpreter and know we're not just
1424 # printing the help message, bail out if the host CPU isn't supported.
1425 if test "$ARCH" = "unknown"; then
1426 if test "$tcg_interpreter" = "yes" ; then
1427 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1428 ARCH=tci
1429 else
1430 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1434 # Consult white-list to determine whether to enable werror
1435 # by default. Only enable by default for git builds
1436 z_version=`cut -f3 -d. $source_path/VERSION`
1438 if test -z "$werror" ; then
1439 if test -d "$source_path/.git" -a \
1440 "$linux" = "yes" ; then
1441 werror="yes"
1442 else
1443 werror="no"
1447 # check that the C compiler works.
1448 cat > $TMPC <<EOF
1449 int main(void) { return 0; }
1452 if compile_object ; then
1453 : C compiler works ok
1454 else
1455 error_exit "\"$cc\" either does not exist or does not work"
1458 # Check that the C++ compiler exists and works with the C compiler
1459 if has $cxx; then
1460 cat > $TMPC <<EOF
1461 int c_function(void);
1462 int main(void) { return c_function(); }
1465 compile_object
1467 cat > $TMPCXX <<EOF
1468 extern "C" {
1469 int c_function(void);
1471 int c_function(void) { return 42; }
1474 update_cxxflags
1476 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1477 # C++ compiler $cxx works ok with C compiler $cc
1479 else
1480 echo "C++ compiler $cxx does not work with C compiler $cc"
1481 echo "Disabling C++ specific optional code"
1482 cxx=
1484 else
1485 echo "No C++ compiler available; disabling C++ specific optional code"
1486 cxx=
1489 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1490 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1491 gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1492 gcc_flags="-Wendif-labels $gcc_flags"
1493 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1494 gcc_flags="-Wno-string-plus-int $gcc_flags"
1495 # Note that we do not add -Werror to gcc_flags here, because that would
1496 # enable it for all configure tests. If a configure test failed due
1497 # to -Werror this would just silently disable some features,
1498 # so it's too error prone.
1499 cat > $TMPC << EOF
1500 int main(void) { return 0; }
1502 for flag in $gcc_flags; do
1503 # Use the positive sense of the flag when testing for -Wno-wombat
1504 # support (gcc will happily accept the -Wno- form of unknown
1505 # warning options).
1506 optflag="$(echo $flag | sed -e 's/^-Wno-/-W/')"
1507 if compile_prog "-Werror $optflag" "" ; then
1508 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1510 done
1512 if test "$stack_protector" != "no"; then
1513 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1514 sp_on=0
1515 for flag in $gcc_flags; do
1516 # We need to check both a compile and a link, since some compiler
1517 # setups fail only on a .c->.o compile and some only at link time
1518 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1519 compile_prog "-Werror $flag" ""; then
1520 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1521 LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
1522 sp_on=1
1523 break
1525 done
1526 if test "$stack_protector" = yes; then
1527 if test $sp_on = 0; then
1528 error_exit "Stack protector not supported"
1533 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1534 # large functions that use global variables. The bug is in all releases of
1535 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1536 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1537 cat > $TMPC << EOF
1538 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1539 int main(void) { return 0; }
1540 #else
1541 #error No bug in this compiler.
1542 #endif
1544 if compile_prog "-Werror -fno-gcse" "" ; then
1545 TRANSLATE_OPT_CFLAGS=-fno-gcse
1548 if test "$static" = "yes" ; then
1549 if test "$modules" = "yes" ; then
1550 error_exit "static and modules are mutually incompatible"
1552 if test "$pie" = "yes" ; then
1553 error_exit "static and pie are mutually incompatible"
1554 else
1555 pie="no"
1559 # Unconditional check for compiler __thread support
1560 cat > $TMPC << EOF
1561 static __thread int tls_var;
1562 int main(void) { return tls_var; }
1565 if ! compile_prog "-Werror" "" ; then
1566 error_exit "Your compiler does not support the __thread specifier for " \
1567 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1570 if test "$pie" = ""; then
1571 case "$cpu-$targetos" in
1572 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1575 pie="no"
1577 esac
1580 if test "$pie" != "no" ; then
1581 cat > $TMPC << EOF
1583 #ifdef __linux__
1584 # define THREAD __thread
1585 #else
1586 # define THREAD
1587 #endif
1589 static THREAD int tls_var;
1591 int main(void) { return tls_var; }
1594 if compile_prog "-fPIE -DPIE" "-pie"; then
1595 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1596 LDFLAGS="-pie $LDFLAGS"
1597 pie="yes"
1598 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1599 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1601 else
1602 if test "$pie" = "yes"; then
1603 error_exit "PIE not available due to missing toolchain support"
1604 else
1605 echo "Disabling PIE due to missing toolchain support"
1606 pie="no"
1610 if compile_prog "-fno-pie" "-nopie"; then
1611 CFLAGS_NOPIE="-fno-pie"
1612 LDFLAGS_NOPIE="-nopie"
1616 # check for broken gcc and libtool in RHEL5
1617 if test -n "$libtool" -a "$pie" != "no" ; then
1618 cat > $TMPC <<EOF
1620 void *f(unsigned char *buf, int len);
1621 void *g(unsigned char *buf, int len);
1623 void *
1624 f(unsigned char *buf, int len)
1626 return (void*)0L;
1629 void *
1630 g(unsigned char *buf, int len)
1632 return f(buf, len);
1636 if ! libtool_prog; then
1637 echo "Disabling libtool due to broken toolchain support"
1638 libtool=
1642 ##########################################
1643 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1644 # use i686 as default anyway, but for those that don't, an explicit
1645 # specification is necessary
1647 if test "$cpu" = "i386"; then
1648 cat > $TMPC << EOF
1649 static int sfaa(int *ptr)
1651 return __sync_fetch_and_and(ptr, 0);
1654 int main(void)
1656 int val = 42;
1657 val = __sync_val_compare_and_swap(&val, 0, 1);
1658 sfaa(&val);
1659 return val;
1662 if ! compile_prog "" "" ; then
1663 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1667 #########################################
1668 # Solaris specific configure tool chain decisions
1670 if test "$solaris" = "yes" ; then
1671 if has $install; then
1673 else
1674 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1675 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1676 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1678 if test "`path_of $install`" = "/usr/sbin/install" ; then
1679 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1680 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1681 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1683 if has ar; then
1685 else
1686 if test -f /usr/ccs/bin/ar ; then
1687 error_exit "No path includes ar" \
1688 "Add /usr/ccs/bin to your path and rerun configure"
1690 error_exit "No path includes ar"
1694 if test -z "${target_list+xxx}" ; then
1695 target_list="$default_target_list"
1696 else
1697 target_list=`echo "$target_list" | sed -e 's/,/ /g'`
1700 # Check that we recognised the target name; this allows a more
1701 # friendly error message than if we let it fall through.
1702 for target in $target_list; do
1703 case " $default_target_list " in
1704 *" $target "*)
1707 error_exit "Unknown target name '$target'"
1709 esac
1710 done
1712 # see if system emulation was really requested
1713 case " $target_list " in
1714 *"-softmmu "*) softmmu=yes
1716 *) softmmu=no
1718 esac
1720 feature_not_found() {
1721 feature=$1
1722 remedy=$2
1724 error_exit "User requested feature $feature" \
1725 "configure was not able to find it." \
1726 "$remedy"
1729 # ---
1730 # big/little endian test
1731 cat > $TMPC << EOF
1732 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1733 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1734 extern int foo(short *, short *);
1735 int main(int argc, char *argv[]) {
1736 return foo(big_endian, little_endian);
1740 if compile_object ; then
1741 if grep -q BiGeNdIaN $TMPO ; then
1742 bigendian="yes"
1743 elif grep -q LiTtLeEnDiAn $TMPO ; then
1744 bigendian="no"
1745 else
1746 echo big/little test failed
1748 else
1749 echo big/little test failed
1752 ##########################################
1753 # L2TPV3 probe
1755 cat > $TMPC <<EOF
1756 #include <sys/socket.h>
1757 #include <linux/ip.h>
1758 int main(void) { return sizeof(struct mmsghdr); }
1760 if compile_prog "" "" ; then
1761 l2tpv3=yes
1762 else
1763 l2tpv3=no
1766 ##########################################
1767 # pkg-config probe
1769 if ! has "$pkg_config_exe"; then
1770 error_exit "pkg-config binary '$pkg_config_exe' not found"
1773 ##########################################
1774 # NPTL probe
1776 if test "$linux_user" = "yes"; then
1777 cat > $TMPC <<EOF
1778 #include <sched.h>
1779 #include <linux/futex.h>
1780 int main(void) {
1781 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1782 #error bork
1783 #endif
1784 return 0;
1787 if ! compile_object ; then
1788 feature_not_found "nptl" "Install glibc and linux kernel headers."
1792 ##########################################
1793 # zlib check
1795 if test "$zlib" != "no" ; then
1796 cat > $TMPC << EOF
1797 #include <zlib.h>
1798 int main(void) { zlibVersion(); return 0; }
1800 if compile_prog "" "-lz" ; then
1802 else
1803 error_exit "zlib check failed" \
1804 "Make sure to have the zlib libs and headers installed."
1807 LIBS="$LIBS -lz"
1809 ##########################################
1810 # lzo check
1812 if test "$lzo" != "no" ; then
1813 cat > $TMPC << EOF
1814 #include <lzo/lzo1x.h>
1815 int main(void) { lzo_version(); return 0; }
1817 if compile_prog "" "-llzo2" ; then
1818 libs_softmmu="$libs_softmmu -llzo2"
1819 lzo="yes"
1820 else
1821 if test "$lzo" = "yes"; then
1822 feature_not_found "liblzo2" "Install liblzo2 devel"
1824 lzo="no"
1828 ##########################################
1829 # snappy check
1831 if test "$snappy" != "no" ; then
1832 cat > $TMPC << EOF
1833 #include <snappy-c.h>
1834 int main(void) { snappy_max_compressed_length(4096); return 0; }
1836 if compile_prog "" "-lsnappy" ; then
1837 libs_softmmu="$libs_softmmu -lsnappy"
1838 snappy="yes"
1839 else
1840 if test "$snappy" = "yes"; then
1841 feature_not_found "libsnappy" "Install libsnappy devel"
1843 snappy="no"
1847 ##########################################
1848 # bzip2 check
1850 if test "$bzip2" != "no" ; then
1851 cat > $TMPC << EOF
1852 #include <bzlib.h>
1853 int main(void) { BZ2_bzlibVersion(); return 0; }
1855 if compile_prog "" "-lbz2" ; then
1856 bzip2="yes"
1857 else
1858 if test "$bzip2" = "yes"; then
1859 feature_not_found "libbzip2" "Install libbzip2 devel"
1861 bzip2="no"
1865 ##########################################
1866 # libseccomp check
1868 if test "$seccomp" != "no" ; then
1869 if test "$cpu" = "i386" || test "$cpu" = "x86_64" &&
1870 $pkg_config --atleast-version=2.1.1 libseccomp; then
1871 libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`"
1872 QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`"
1873 seccomp="yes"
1874 else
1875 if test "$seccomp" = "yes"; then
1876 feature_not_found "libseccomp" "Install libseccomp devel >= 2.1.1"
1878 seccomp="no"
1881 ##########################################
1882 # xen probe
1884 if test "$xen" != "no" ; then
1885 xen_libs="-lxenstore -lxenctrl -lxenguest"
1887 # First we test whether Xen headers and libraries are available.
1888 # If no, we are done and there is no Xen support.
1889 # If yes, more tests are run to detect the Xen version.
1891 # Xen (any)
1892 cat > $TMPC <<EOF
1893 #include <xenctrl.h>
1894 int main(void) {
1895 return 0;
1898 if ! compile_prog "" "$xen_libs" ; then
1899 # Xen not found
1900 if test "$xen" = "yes" ; then
1901 feature_not_found "xen" "Install xen devel"
1903 xen=no
1905 # Xen unstable
1906 elif
1907 cat > $TMPC <<EOF &&
1908 #include <xenctrl.h>
1909 #include <xenstore.h>
1910 #include <stdint.h>
1911 #include <xen/hvm/hvm_info_table.h>
1912 #if !defined(HVM_MAX_VCPUS)
1913 # error HVM_MAX_VCPUS not defined
1914 #endif
1915 int main(void) {
1916 xc_interface *xc;
1917 xs_daemon_open();
1918 xc = xc_interface_open(0, 0, 0);
1919 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1920 xc_gnttab_open(NULL, 0);
1921 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1922 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1923 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
1924 return 0;
1927 compile_prog "" "$xen_libs"
1928 then
1929 xen_ctrl_version=450
1930 xen=yes
1932 elif
1933 cat > $TMPC <<EOF &&
1934 #include <xenctrl.h>
1935 #include <xenstore.h>
1936 #include <stdint.h>
1937 #include <xen/hvm/hvm_info_table.h>
1938 #if !defined(HVM_MAX_VCPUS)
1939 # error HVM_MAX_VCPUS not defined
1940 #endif
1941 int main(void) {
1942 xc_interface *xc;
1943 xs_daemon_open();
1944 xc = xc_interface_open(0, 0, 0);
1945 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1946 xc_gnttab_open(NULL, 0);
1947 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1948 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1949 return 0;
1952 compile_prog "" "$xen_libs"
1953 then
1954 xen_ctrl_version=420
1955 xen=yes
1957 elif
1958 cat > $TMPC <<EOF &&
1959 #include <xenctrl.h>
1960 #include <xs.h>
1961 #include <stdint.h>
1962 #include <xen/hvm/hvm_info_table.h>
1963 #if !defined(HVM_MAX_VCPUS)
1964 # error HVM_MAX_VCPUS not defined
1965 #endif
1966 int main(void) {
1967 xs_daemon_open();
1968 xc_interface_open(0, 0, 0);
1969 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1970 xc_gnttab_open(NULL, 0);
1971 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1972 return 0;
1975 compile_prog "" "$xen_libs"
1976 then
1977 xen_ctrl_version=410
1978 xen=yes
1980 # Xen 4.0.0
1981 elif
1982 cat > $TMPC <<EOF &&
1983 #include <xenctrl.h>
1984 #include <xs.h>
1985 #include <stdint.h>
1986 #include <xen/hvm/hvm_info_table.h>
1987 #if !defined(HVM_MAX_VCPUS)
1988 # error HVM_MAX_VCPUS not defined
1989 #endif
1990 int main(void) {
1991 struct xen_add_to_physmap xatp = {
1992 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
1994 xs_daemon_open();
1995 xc_interface_open();
1996 xc_gnttab_open();
1997 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1998 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
1999 return 0;
2002 compile_prog "" "$xen_libs"
2003 then
2004 xen_ctrl_version=400
2005 xen=yes
2007 # Xen 3.4.0
2008 elif
2009 cat > $TMPC <<EOF &&
2010 #include <xenctrl.h>
2011 #include <xs.h>
2012 int main(void) {
2013 struct xen_add_to_physmap xatp = {
2014 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
2016 xs_daemon_open();
2017 xc_interface_open();
2018 xc_gnttab_open();
2019 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2020 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
2021 return 0;
2024 compile_prog "" "$xen_libs"
2025 then
2026 xen_ctrl_version=340
2027 xen=yes
2029 # Xen 3.3.0
2030 elif
2031 cat > $TMPC <<EOF &&
2032 #include <xenctrl.h>
2033 #include <xs.h>
2034 int main(void) {
2035 xs_daemon_open();
2036 xc_interface_open();
2037 xc_gnttab_open();
2038 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2039 return 0;
2042 compile_prog "" "$xen_libs"
2043 then
2044 xen_ctrl_version=330
2045 xen=yes
2047 # Xen version unsupported
2048 else
2049 if test "$xen" = "yes" ; then
2050 feature_not_found "xen (unsupported version)" "Install supported xen (e.g. 4.0, 3.4, 3.3)"
2052 xen=no
2055 if test "$xen" = yes; then
2056 libs_softmmu="$xen_libs $libs_softmmu"
2060 if test "$xen_pci_passthrough" != "no"; then
2061 if test "$xen" = "yes" && test "$linux" = "yes" &&
2062 test "$xen_ctrl_version" -ge 340; then
2063 xen_pci_passthrough=yes
2064 else
2065 if test "$xen_pci_passthrough" = "yes"; then
2066 if test "$xen_ctrl_version" -lt 340; then
2067 error_exit "User requested feature Xen PCI Passthrough" \
2068 "This feature does not work with Xen 3.3"
2070 error_exit "User requested feature Xen PCI Passthrough" \
2071 " but this feature requires /sys from Linux"
2073 xen_pci_passthrough=no
2077 ##########################################
2078 # libtool probe
2080 if ! has $libtool; then
2081 libtool=
2084 # MacOSX ships with a libtool which isn't the GNU one; weed this
2085 # out by checking whether libtool supports the --version switch
2086 if test -n "$libtool"; then
2087 if ! "$libtool" --version >/dev/null 2>&1; then
2088 libtool=
2092 ##########################################
2093 # Sparse probe
2094 if test "$sparse" != "no" ; then
2095 if has cgcc; then
2096 sparse=yes
2097 else
2098 if test "$sparse" = "yes" ; then
2099 feature_not_found "sparse" "Install sparse binary"
2101 sparse=no
2105 ##########################################
2106 # X11 probe
2107 x11_cflags=
2108 x11_libs=-lX11
2109 if $pkg_config --exists "x11"; then
2110 x11_cflags=`$pkg_config --cflags x11`
2111 x11_libs=`$pkg_config --libs x11`
2114 ##########################################
2115 # GTK probe
2117 if test "$gtkabi" = ""; then
2118 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2119 # Use 3.0 as a fallback if that is available.
2120 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2121 gtkabi=2.0
2122 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2123 gtkabi=3.0
2124 else
2125 gtkabi=2.0
2129 if test "$gtk" != "no"; then
2130 gtkpackage="gtk+-$gtkabi"
2131 gtkx11package="gtk+-x11-$gtkabi"
2132 if test "$gtkabi" = "3.0" ; then
2133 gtkversion="3.0.0"
2134 else
2135 gtkversion="2.18.0"
2137 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2138 gtk_cflags=`$pkg_config --cflags $gtkpackage`
2139 gtk_libs=`$pkg_config --libs $gtkpackage`
2140 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2141 gtk_cflags="$gtk_cflags $x11_cflags"
2142 gtk_libs="$gtk_libs $x11_libs"
2144 libs_softmmu="$gtk_libs $libs_softmmu"
2145 gtk="yes"
2146 elif test "$gtk" = "yes"; then
2147 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2148 else
2149 gtk="no"
2153 ##########################################
2154 # VTE probe
2156 if test "$vte" != "no"; then
2157 if test "$gtkabi" = "3.0"; then
2158 vtepackage="vte-2.90"
2159 vteversion="0.32.0"
2160 else
2161 vtepackage="vte"
2162 vteversion="0.24.0"
2164 if $pkg_config --exists "$vtepackage >= $vteversion"; then
2165 vte_cflags=`$pkg_config --cflags $vtepackage`
2166 vte_libs=`$pkg_config --libs $vtepackage`
2167 libs_softmmu="$vte_libs $libs_softmmu"
2168 vte="yes"
2169 elif test "$vte" = "yes"; then
2170 if test "$gtkabi" = "3.0"; then
2171 feature_not_found "vte" "Install libvte-2.90 devel"
2172 else
2173 feature_not_found "vte" "Install libvte devel"
2175 else
2176 vte="no"
2180 ##########################################
2181 # SDL probe
2183 # Look for sdl configuration program (pkg-config or sdl-config). Try
2184 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2186 if test $sdlabi = "2.0"; then
2187 sdl_config=$sdl2_config
2188 sdlname=sdl2
2189 sdlconfigname=sdl2_config
2190 else
2191 sdlname=sdl
2192 sdlconfigname=sdl_config
2195 if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2196 sdl_config=$sdlconfigname
2199 if $pkg_config $sdlname --exists; then
2200 sdlconfig="$pkg_config $sdlname"
2201 _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
2202 elif has ${sdl_config}; then
2203 sdlconfig="$sdl_config"
2204 _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2205 else
2206 if test "$sdl" = "yes" ; then
2207 feature_not_found "sdl" "Install SDL devel"
2209 sdl=no
2211 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2212 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2215 sdl_too_old=no
2216 if test "$sdl" != "no" ; then
2217 cat > $TMPC << EOF
2218 #include <SDL.h>
2219 #undef main /* We don't want SDL to override our main() */
2220 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2222 sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
2223 if test "$static" = "yes" ; then
2224 sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2225 else
2226 sdl_libs=`$sdlconfig --libs 2> /dev/null`
2228 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2229 if test "$_sdlversion" -lt 121 ; then
2230 sdl_too_old=yes
2231 else
2232 if test "$cocoa" = "no" ; then
2233 sdl=yes
2237 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2238 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2239 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2240 sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2241 sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
2243 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2245 else
2246 sdl=no
2248 fi # static link
2249 else # sdl not found
2250 if test "$sdl" = "yes" ; then
2251 feature_not_found "sdl" "Install SDL devel"
2253 sdl=no
2254 fi # sdl compile test
2257 if test "$sdl" = "yes" ; then
2258 cat > $TMPC <<EOF
2259 #include <SDL.h>
2260 #if defined(SDL_VIDEO_DRIVER_X11)
2261 #include <X11/XKBlib.h>
2262 #else
2263 #error No x11 support
2264 #endif
2265 int main(void) { return 0; }
2267 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2268 sdl_cflags="$sdl_cflags $x11_cflags"
2269 sdl_libs="$sdl_libs $x11_libs"
2271 libs_softmmu="$sdl_libs $libs_softmmu"
2274 ##########################################
2275 # RDMA needs OpenFabrics libraries
2276 if test "$rdma" != "no" ; then
2277 cat > $TMPC <<EOF
2278 #include <rdma/rdma_cma.h>
2279 int main(void) { return 0; }
2281 rdma_libs="-lrdmacm -libverbs"
2282 if compile_prog "" "$rdma_libs" ; then
2283 rdma="yes"
2284 libs_softmmu="$libs_softmmu $rdma_libs"
2285 else
2286 if test "$rdma" = "yes" ; then
2287 error_exit \
2288 " OpenFabrics librdmacm/libibverbs not present." \
2289 " Your options:" \
2290 " (1) Fast: Install infiniband packages from your distro." \
2291 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2292 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2294 rdma="no"
2298 ##########################################
2299 # VNC TLS/WS detection
2300 if test "$vnc" = "yes" -a \( "$vnc_tls" != "no" -o "$vnc_ws" != "no" \) ; then
2301 cat > $TMPC <<EOF
2302 #include <gnutls/gnutls.h>
2303 int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
2305 vnc_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2306 vnc_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2307 if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then
2308 if test "$vnc_tls" != "no" ; then
2309 vnc_tls=yes
2311 if test "$vnc_ws" != "no" ; then
2312 vnc_ws=yes
2314 libs_softmmu="$vnc_tls_libs $libs_softmmu"
2315 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_tls_cflags"
2316 else
2317 if test "$vnc_tls" = "yes" ; then
2318 feature_not_found "vnc-tls" "Install gnutls devel"
2320 if test "$vnc_ws" = "yes" ; then
2321 feature_not_found "vnc-ws" "Install gnutls devel"
2323 vnc_tls=no
2324 vnc_ws=no
2328 ##########################################
2329 # Quorum probe (check for gnutls)
2330 if test "$quorum" != "no" ; then
2331 cat > $TMPC <<EOF
2332 #include <gnutls/gnutls.h>
2333 #include <gnutls/crypto.h>
2334 int main(void) {char data[4096], digest[32];
2335 gnutls_hash_fast(GNUTLS_DIG_SHA256, data, 4096, digest);
2336 return 0;
2339 quorum_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2340 quorum_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2341 if compile_prog "$quorum_tls_cflags" "$quorum_tls_libs" ; then
2342 qcow_tls=yes
2343 libs_softmmu="$quorum_tls_libs $libs_softmmu"
2344 libs_tools="$quorum_tls_libs $libs_softmmu"
2345 QEMU_CFLAGS="$QEMU_CFLAGS $quorum_tls_cflags"
2346 quorum="yes"
2347 else
2348 if test "$quorum" = "yes"; then
2349 feature_not_found "gnutls" "gnutls > 2.10.0 required to compile Quorum"
2351 quorum="no"
2355 ##########################################
2356 # VNC SASL detection
2357 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2358 cat > $TMPC <<EOF
2359 #include <sasl/sasl.h>
2360 #include <stdio.h>
2361 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2363 # Assuming Cyrus-SASL installed in /usr prefix
2364 vnc_sasl_cflags=""
2365 vnc_sasl_libs="-lsasl2"
2366 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2367 vnc_sasl=yes
2368 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2369 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2370 else
2371 if test "$vnc_sasl" = "yes" ; then
2372 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2374 vnc_sasl=no
2378 ##########################################
2379 # VNC JPEG detection
2380 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2381 cat > $TMPC <<EOF
2382 #include <stdio.h>
2383 #include <jpeglib.h>
2384 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2386 vnc_jpeg_cflags=""
2387 vnc_jpeg_libs="-ljpeg"
2388 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2389 vnc_jpeg=yes
2390 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2391 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2392 else
2393 if test "$vnc_jpeg" = "yes" ; then
2394 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2396 vnc_jpeg=no
2400 ##########################################
2401 # VNC PNG detection
2402 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2403 cat > $TMPC <<EOF
2404 //#include <stdio.h>
2405 #include <png.h>
2406 #include <stddef.h>
2407 int main(void) {
2408 png_structp png_ptr;
2409 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2410 return png_ptr != 0;
2413 if $pkg_config libpng --exists; then
2414 vnc_png_cflags=`$pkg_config libpng --cflags`
2415 vnc_png_libs=`$pkg_config libpng --libs`
2416 else
2417 vnc_png_cflags=""
2418 vnc_png_libs="-lpng"
2420 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2421 vnc_png=yes
2422 libs_softmmu="$vnc_png_libs $libs_softmmu"
2423 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2424 else
2425 if test "$vnc_png" = "yes" ; then
2426 feature_not_found "vnc-png" "Install libpng devel"
2428 vnc_png=no
2432 ##########################################
2433 # fnmatch() probe, used for ACL routines
2434 fnmatch="no"
2435 cat > $TMPC << EOF
2436 #include <fnmatch.h>
2437 int main(void)
2439 fnmatch("foo", "foo", 0);
2440 return 0;
2443 if compile_prog "" "" ; then
2444 fnmatch="yes"
2447 ##########################################
2448 # uuid_generate() probe, used for vdi block driver
2449 # Note that on some systems (notably MacOSX) no extra library
2450 # need be linked to get the uuid functions.
2451 if test "$uuid" != "no" ; then
2452 uuid_libs="-luuid"
2453 cat > $TMPC << EOF
2454 #include <uuid/uuid.h>
2455 int main(void)
2457 uuid_t my_uuid;
2458 uuid_generate(my_uuid);
2459 return 0;
2462 if compile_prog "" "" ; then
2463 uuid="yes"
2464 elif compile_prog "" "$uuid_libs" ; then
2465 uuid="yes"
2466 libs_softmmu="$uuid_libs $libs_softmmu"
2467 libs_tools="$uuid_libs $libs_tools"
2468 else
2469 if test "$uuid" = "yes" ; then
2470 feature_not_found "uuid" "Install libuuid devel"
2472 uuid=no
2476 if test "$vhdx" = "yes" ; then
2477 if test "$uuid" = "no" ; then
2478 error_exit "uuid required for VHDX support"
2480 elif test "$vhdx" != "no" ; then
2481 if test "$uuid" = "yes" ; then
2482 vhdx=yes
2483 else
2484 vhdx=no
2488 ##########################################
2489 # xfsctl() probe, used for raw-posix
2490 if test "$xfs" != "no" ; then
2491 cat > $TMPC << EOF
2492 #include <stddef.h> /* NULL */
2493 #include <xfs/xfs.h>
2494 int main(void)
2496 xfsctl(NULL, 0, 0, NULL);
2497 return 0;
2500 if compile_prog "" "" ; then
2501 xfs="yes"
2502 else
2503 if test "$xfs" = "yes" ; then
2504 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2506 xfs=no
2510 ##########################################
2511 # vde libraries probe
2512 if test "$vde" != "no" ; then
2513 vde_libs="-lvdeplug"
2514 cat > $TMPC << EOF
2515 #include <libvdeplug.h>
2516 int main(void)
2518 struct vde_open_args a = {0, 0, 0};
2519 char s[] = "";
2520 vde_open(s, s, &a);
2521 return 0;
2524 if compile_prog "" "$vde_libs" ; then
2525 vde=yes
2526 libs_softmmu="$vde_libs $libs_softmmu"
2527 libs_tools="$vde_libs $libs_tools"
2528 else
2529 if test "$vde" = "yes" ; then
2530 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2532 vde=no
2536 ##########################################
2537 # netmap support probe
2538 # Apart from looking for netmap headers, we make sure that the host API version
2539 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2540 # a minor/major version number. Minor new features will be marked with values up
2541 # to 15, and if something happens that requires a change to the backend we will
2542 # move above 15, submit the backend fixes and modify this two bounds.
2543 if test "$netmap" != "no" ; then
2544 cat > $TMPC << EOF
2545 #include <inttypes.h>
2546 #include <net/if.h>
2547 #include <net/netmap.h>
2548 #include <net/netmap_user.h>
2549 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2550 #error
2551 #endif
2552 int main(void) { return 0; }
2554 if compile_prog "" "" ; then
2555 netmap=yes
2556 else
2557 if test "$netmap" = "yes" ; then
2558 feature_not_found "netmap"
2560 netmap=no
2564 ##########################################
2565 # libcap-ng library probe
2566 if test "$cap_ng" != "no" ; then
2567 cap_libs="-lcap-ng"
2568 cat > $TMPC << EOF
2569 #include <cap-ng.h>
2570 int main(void)
2572 capng_capability_to_name(CAPNG_EFFECTIVE);
2573 return 0;
2576 if compile_prog "" "$cap_libs" ; then
2577 cap_ng=yes
2578 libs_tools="$cap_libs $libs_tools"
2579 else
2580 if test "$cap_ng" = "yes" ; then
2581 feature_not_found "cap_ng" "Install libcap-ng devel"
2583 cap_ng=no
2587 ##########################################
2588 # Sound support libraries probe
2590 audio_drv_probe()
2592 drv=$1
2593 hdr=$2
2594 lib=$3
2595 exp=$4
2596 cfl=$5
2597 cat > $TMPC << EOF
2598 #include <$hdr>
2599 int main(void) { $exp }
2601 if compile_prog "$cfl" "$lib" ; then
2603 else
2604 error_exit "$drv check failed" \
2605 "Make sure to have the $drv libs and headers installed."
2609 audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2610 for drv in $audio_drv_list; do
2611 case $drv in
2612 alsa)
2613 audio_drv_probe $drv alsa/asoundlib.h -lasound \
2614 "return snd_pcm_close((snd_pcm_t *)0);"
2615 libs_softmmu="-lasound $libs_softmmu"
2618 fmod)
2619 if test -z $fmod_lib || test -z $fmod_inc; then
2620 error_exit "You must specify path to FMOD library and headers" \
2621 "Example: --fmod-inc=/path/include/fmod --fmod-lib=/path/lib/libfmod-3.74.so"
2623 audio_drv_probe $drv fmod.h $fmod_lib "return FSOUND_GetVersion();" "-I $fmod_inc"
2624 libs_softmmu="$fmod_lib $libs_softmmu"
2627 esd)
2628 audio_drv_probe $drv esd.h -lesd 'return esd_play_stream(0, 0, "", 0);'
2629 libs_softmmu="-lesd $libs_softmmu"
2630 audio_pt_int="yes"
2634 audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2635 "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2636 libs_softmmu="-lpulse $libs_softmmu"
2637 audio_pt_int="yes"
2640 coreaudio)
2641 libs_softmmu="-framework CoreAudio $libs_softmmu"
2644 dsound)
2645 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2646 audio_win_int="yes"
2649 oss)
2650 libs_softmmu="$oss_lib $libs_softmmu"
2653 sdl|wav)
2654 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2657 winwave)
2658 libs_softmmu="-lwinmm $libs_softmmu"
2659 audio_win_int="yes"
2663 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2664 error_exit "Unknown driver '$drv' selected" \
2665 "Possible drivers are: $audio_possible_drivers"
2668 esac
2669 done
2671 ##########################################
2672 # BrlAPI probe
2674 if test "$brlapi" != "no" ; then
2675 brlapi_libs="-lbrlapi"
2676 cat > $TMPC << EOF
2677 #include <brlapi.h>
2678 #include <stddef.h>
2679 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2681 if compile_prog "" "$brlapi_libs" ; then
2682 brlapi=yes
2683 libs_softmmu="$brlapi_libs $libs_softmmu"
2684 else
2685 if test "$brlapi" = "yes" ; then
2686 feature_not_found "brlapi" "Install brlapi devel"
2688 brlapi=no
2692 ##########################################
2693 # curses probe
2694 if test "$curses" != "no" ; then
2695 if test "$mingw32" = "yes" ; then
2696 curses_list="-lpdcurses"
2697 else
2698 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2700 curses_found=no
2701 cat > $TMPC << EOF
2702 #include <curses.h>
2703 int main(void) {
2704 const char *s = curses_version();
2705 resize_term(0, 0);
2706 return s != 0;
2709 IFS=:
2710 for curses_lib in $curses_list; do
2711 unset IFS
2712 if compile_prog "" "$curses_lib" ; then
2713 curses_found=yes
2714 libs_softmmu="$curses_lib $libs_softmmu"
2715 break
2717 done
2718 unset IFS
2719 if test "$curses_found" = "yes" ; then
2720 curses=yes
2721 else
2722 if test "$curses" = "yes" ; then
2723 feature_not_found "curses" "Install ncurses devel"
2725 curses=no
2729 ##########################################
2730 # curl probe
2731 if test "$curl" != "no" ; then
2732 if $pkg_config libcurl --exists; then
2733 curlconfig="$pkg_config libcurl"
2734 else
2735 curlconfig=curl-config
2737 cat > $TMPC << EOF
2738 #include <curl/curl.h>
2739 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2741 curl_cflags=`$curlconfig --cflags 2>/dev/null`
2742 curl_libs=`$curlconfig --libs 2>/dev/null`
2743 if compile_prog "$curl_cflags" "$curl_libs" ; then
2744 curl=yes
2745 else
2746 if test "$curl" = "yes" ; then
2747 feature_not_found "curl" "Install libcurl devel"
2749 curl=no
2751 fi # test "$curl"
2753 ##########################################
2754 # bluez support probe
2755 if test "$bluez" != "no" ; then
2756 cat > $TMPC << EOF
2757 #include <bluetooth/bluetooth.h>
2758 int main(void) { return bt_error(0); }
2760 bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2761 bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
2762 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2763 bluez=yes
2764 libs_softmmu="$bluez_libs $libs_softmmu"
2765 else
2766 if test "$bluez" = "yes" ; then
2767 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2769 bluez="no"
2773 ##########################################
2774 # glib support probe
2776 if test "$mingw32" = yes; then
2777 # g_poll is required in order to integrate with the glib main loop.
2778 glib_req_ver=2.20
2779 else
2780 glib_req_ver=2.12
2782 glib_modules=gthread-2.0
2783 if test "$modules" = yes; then
2784 glib_modules="$glib_modules gmodule-2.0"
2787 for i in $glib_modules; do
2788 if $pkg_config --atleast-version=$glib_req_ver $i; then
2789 glib_cflags=`$pkg_config --cflags $i`
2790 glib_libs=`$pkg_config --libs $i`
2791 CFLAGS="$glib_cflags $CFLAGS"
2792 LIBS="$glib_libs $LIBS"
2793 libs_qga="$glib_libs $libs_qga"
2794 else
2795 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2797 done
2799 # g_test_trap_subprocess added in 2.38. Used by some tests.
2800 glib_subprocess=yes
2801 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2802 glib_subprocess=no
2805 ##########################################
2806 # SHA command probe for modules
2807 if test "$modules" = yes; then
2808 shacmd_probe="sha1sum sha1 shasum"
2809 for c in $shacmd_probe; do
2810 if has $c; then
2811 shacmd="$c"
2812 break
2814 done
2815 if test "$shacmd" = ""; then
2816 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2820 ##########################################
2821 # pixman support probe
2823 if test "$pixman" = ""; then
2824 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
2825 pixman="none"
2826 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
2827 pixman="system"
2828 else
2829 pixman="internal"
2832 if test "$pixman" = "none"; then
2833 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
2834 error_exit "pixman disabled but system emulation or tools build" \
2835 "enabled. You can turn off pixman only if you also" \
2836 "disable all system emulation targets and the tools" \
2837 "build with '--disable-tools --disable-system'."
2839 pixman_cflags=
2840 pixman_libs=
2841 elif test "$pixman" = "system"; then
2842 # pixman version has been checked above
2843 pixman_cflags=`$pkg_config --cflags pixman-1`
2844 pixman_libs=`$pkg_config --libs pixman-1`
2845 else
2846 if test ! -d ${source_path}/pixman/pixman; then
2847 error_exit "pixman >= 0.21.8 not present. Your options:" \
2848 " (1) Preferred: Install the pixman devel package (any recent" \
2849 " distro should have packages as Xorg needs pixman too)." \
2850 " (2) Fetch the pixman submodule, using:" \
2851 " git submodule update --init pixman"
2853 mkdir -p pixman/pixman
2854 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
2855 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
2858 ##########################################
2859 # libcap probe
2861 if test "$cap" != "no" ; then
2862 cat > $TMPC <<EOF
2863 #include <stdio.h>
2864 #include <sys/capability.h>
2865 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
2867 if compile_prog "" "-lcap" ; then
2868 cap=yes
2869 else
2870 cap=no
2874 ##########################################
2875 # pthread probe
2876 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
2878 pthread=no
2879 cat > $TMPC << EOF
2880 #include <pthread.h>
2881 static void *f(void *p) { return NULL; }
2882 int main(void) {
2883 pthread_t thread;
2884 pthread_create(&thread, 0, f, 0);
2885 return 0;
2888 if compile_prog "" "" ; then
2889 pthread=yes
2890 else
2891 for pthread_lib in $PTHREADLIBS_LIST; do
2892 if compile_prog "" "$pthread_lib" ; then
2893 pthread=yes
2894 found=no
2895 for lib_entry in $LIBS; do
2896 if test "$lib_entry" = "$pthread_lib"; then
2897 found=yes
2898 break
2900 done
2901 if test "$found" = "no"; then
2902 LIBS="$pthread_lib $LIBS"
2904 break
2906 done
2909 if test "$mingw32" != yes -a "$pthread" = no; then
2910 error_exit "pthread check failed" \
2911 "Make sure to have the pthread libs and headers installed."
2914 # check for pthread_setname_np
2915 pthread_setname_np=no
2916 cat > $TMPC << EOF
2917 #include <pthread.h>
2919 static void *f(void *p) { return NULL; }
2920 int main(void)
2922 pthread_t thread;
2923 pthread_create(&thread, 0, f, 0);
2924 pthread_setname_np(thread, "QEMU");
2925 return 0;
2928 if compile_prog "" "$pthread_lib" ; then
2929 pthread_setname_np=yes
2932 ##########################################
2933 # rbd probe
2934 if test "$rbd" != "no" ; then
2935 cat > $TMPC <<EOF
2936 #include <stdio.h>
2937 #include <rbd/librbd.h>
2938 int main(void) {
2939 rados_t cluster;
2940 rados_create(&cluster, NULL);
2941 return 0;
2944 rbd_libs="-lrbd -lrados"
2945 if compile_prog "" "$rbd_libs" ; then
2946 rbd=yes
2947 else
2948 if test "$rbd" = "yes" ; then
2949 feature_not_found "rados block device" "Install librbd/ceph devel"
2951 rbd=no
2955 ##########################################
2956 # libssh2 probe
2957 min_libssh2_version=1.2.8
2958 if test "$libssh2" != "no" ; then
2959 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
2960 libssh2_cflags=`$pkg_config libssh2 --cflags`
2961 libssh2_libs=`$pkg_config libssh2 --libs`
2962 libssh2=yes
2963 else
2964 if test "$libssh2" = "yes" ; then
2965 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
2967 libssh2=no
2971 ##########################################
2972 # libssh2_sftp_fsync probe
2974 if test "$libssh2" = "yes"; then
2975 cat > $TMPC <<EOF
2976 #include <stdio.h>
2977 #include <libssh2.h>
2978 #include <libssh2_sftp.h>
2979 int main(void) {
2980 LIBSSH2_SESSION *session;
2981 LIBSSH2_SFTP *sftp;
2982 LIBSSH2_SFTP_HANDLE *sftp_handle;
2983 session = libssh2_session_init ();
2984 sftp = libssh2_sftp_init (session);
2985 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
2986 libssh2_sftp_fsync (sftp_handle);
2987 return 0;
2990 # libssh2_cflags/libssh2_libs defined in previous test.
2991 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
2992 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
2996 ##########################################
2997 # linux-aio probe
2999 if test "$linux_aio" != "no" ; then
3000 cat > $TMPC <<EOF
3001 #include <libaio.h>
3002 #include <sys/eventfd.h>
3003 #include <stddef.h>
3004 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3006 if compile_prog "" "-laio" ; then
3007 linux_aio=yes
3008 else
3009 if test "$linux_aio" = "yes" ; then
3010 feature_not_found "linux AIO" "Install libaio devel"
3012 linux_aio=no
3016 ##########################################
3017 # TPM passthrough is only on x86 Linux
3019 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3020 tpm_passthrough=$tpm
3021 else
3022 tpm_passthrough=no
3025 ##########################################
3026 # attr probe
3028 if test "$attr" != "no" ; then
3029 cat > $TMPC <<EOF
3030 #include <stdio.h>
3031 #include <sys/types.h>
3032 #ifdef CONFIG_LIBATTR
3033 #include <attr/xattr.h>
3034 #else
3035 #include <sys/xattr.h>
3036 #endif
3037 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3039 if compile_prog "" "" ; then
3040 attr=yes
3041 # Older distros have <attr/xattr.h>, and need -lattr:
3042 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3043 attr=yes
3044 LIBS="-lattr $LIBS"
3045 libattr=yes
3046 else
3047 if test "$attr" = "yes" ; then
3048 feature_not_found "ATTR" "Install libc6 or libattr devel"
3050 attr=no
3054 ##########################################
3055 # iovec probe
3056 cat > $TMPC <<EOF
3057 #include <sys/types.h>
3058 #include <sys/uio.h>
3059 #include <unistd.h>
3060 int main(void) { return sizeof(struct iovec); }
3062 iovec=no
3063 if compile_prog "" "" ; then
3064 iovec=yes
3067 ##########################################
3068 # preadv probe
3069 cat > $TMPC <<EOF
3070 #include <sys/types.h>
3071 #include <sys/uio.h>
3072 #include <unistd.h>
3073 int main(void) { return preadv(0, 0, 0, 0); }
3075 preadv=no
3076 if compile_prog "" "" ; then
3077 preadv=yes
3080 ##########################################
3081 # fdt probe
3082 # fdt support is mandatory for at least some target architectures,
3083 # so insist on it if we're building those system emulators.
3084 fdt_required=no
3085 for target in $target_list; do
3086 case $target in
3087 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3088 fdt_required=yes
3090 esac
3091 done
3093 if test "$fdt_required" = "yes"; then
3094 if test "$fdt" = "no"; then
3095 error_exit "fdt disabled but some requested targets require it." \
3096 "You can turn off fdt only if you also disable all the system emulation" \
3097 "targets which need it (by specifying a cut down --target-list)."
3099 fdt=yes
3102 if test "$fdt" != "no" ; then
3103 fdt_libs="-lfdt"
3104 # explicitly check for libfdt_env.h as it is missing in some stable installs
3105 cat > $TMPC << EOF
3106 #include <libfdt_env.h>
3107 int main(void) { return 0; }
3109 if compile_prog "" "$fdt_libs" ; then
3110 # system DTC is good - use it
3111 fdt=yes
3112 elif test -d ${source_path}/dtc/libfdt ; then
3113 # have submodule DTC - use it
3114 fdt=yes
3115 dtc_internal="yes"
3116 mkdir -p dtc
3117 if [ "$pwd_is_source_path" != "y" ] ; then
3118 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3119 symlink "$source_path/dtc/scripts" "dtc/scripts"
3121 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3122 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3123 elif test "$fdt" = "yes" ; then
3124 # have neither and want - prompt for system/submodule install
3125 error_exit "DTC (libfdt) not present. Your options:" \
3126 " (1) Preferred: Install the DTC (libfdt) devel package" \
3127 " (2) Fetch the DTC submodule, using:" \
3128 " git submodule update --init dtc"
3129 else
3130 # don't have and don't want
3131 fdt_libs=
3132 fdt=no
3136 libs_softmmu="$libs_softmmu $fdt_libs"
3138 ##########################################
3139 # opengl probe (for sdl2, milkymist-tmu2)
3141 # GLX probe, used by milkymist-tmu2
3142 # this is temporary, code will be switched to egl mid-term.
3143 cat > $TMPC << EOF
3144 #include <X11/Xlib.h>
3145 #include <GL/gl.h>
3146 #include <GL/glx.h>
3147 int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
3149 if compile_prog "" "-lGL -lX11" ; then
3150 have_glx=yes
3151 else
3152 have_glx=no
3155 if test "$opengl" != "no" ; then
3156 opengl_pkgs="gl glesv2"
3157 if $pkg_config $opengl_pkgs x11 && test "$have_glx" = "yes"; then
3158 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3159 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3160 opengl=yes
3161 else
3162 if test "$opengl" = "yes" ; then
3163 feature_not_found "opengl" "Install GL devel (e.g. MESA)"
3165 opengl_cflags=""
3166 opengl_libs=""
3167 opengl=no
3172 ##########################################
3173 # archipelago probe
3174 if test "$archipelago" != "no" ; then
3175 cat > $TMPC <<EOF
3176 #include <stdio.h>
3177 #include <xseg/xseg.h>
3178 #include <xseg/protocol.h>
3179 int main(void) {
3180 xseg_initialize();
3181 return 0;
3184 archipelago_libs=-lxseg
3185 if compile_prog "" "$archipelago_libs"; then
3186 archipelago="yes"
3187 libs_tools="$archipelago_libs $libs_tools"
3188 libs_softmmu="$archipelago_libs $libs_softmmu"
3190 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3191 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3192 echo "license and therefore prevent redistribution."
3193 echo
3194 echo "To disable Archipelago, use --disable-archipelago"
3195 else
3196 if test "$archipelago" = "yes" ; then
3197 feature_not_found "Archipelago backend support" "Install libxseg devel"
3199 archipelago="no"
3204 ##########################################
3205 # glusterfs probe
3206 if test "$glusterfs" != "no" ; then
3207 if $pkg_config --atleast-version=3 glusterfs-api; then
3208 glusterfs="yes"
3209 glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3210 glusterfs_libs=`$pkg_config --libs glusterfs-api`
3211 if $pkg_config --atleast-version=5 glusterfs-api; then
3212 glusterfs_discard="yes"
3214 if $pkg_config --atleast-version=6 glusterfs-api; then
3215 glusterfs_zerofill="yes"
3217 else
3218 if test "$glusterfs" = "yes" ; then
3219 feature_not_found "GlusterFS backend support" \
3220 "Install glusterfs-api devel >= 3"
3222 glusterfs="no"
3226 # Check for inotify functions when we are building linux-user
3227 # emulator. This is done because older glibc versions don't
3228 # have syscall stubs for these implemented. In that case we
3229 # don't provide them even if kernel supports them.
3231 inotify=no
3232 cat > $TMPC << EOF
3233 #include <sys/inotify.h>
3236 main(void)
3238 /* try to start inotify */
3239 return inotify_init();
3242 if compile_prog "" "" ; then
3243 inotify=yes
3246 inotify1=no
3247 cat > $TMPC << EOF
3248 #include <sys/inotify.h>
3251 main(void)
3253 /* try to start inotify */
3254 return inotify_init1(0);
3257 if compile_prog "" "" ; then
3258 inotify1=yes
3261 # check if utimensat and futimens are supported
3262 utimens=no
3263 cat > $TMPC << EOF
3264 #define _ATFILE_SOURCE
3265 #include <stddef.h>
3266 #include <fcntl.h>
3267 #include <sys/stat.h>
3269 int main(void)
3271 utimensat(AT_FDCWD, "foo", NULL, 0);
3272 futimens(0, NULL);
3273 return 0;
3276 if compile_prog "" "" ; then
3277 utimens=yes
3280 # check if pipe2 is there
3281 pipe2=no
3282 cat > $TMPC << EOF
3283 #include <unistd.h>
3284 #include <fcntl.h>
3286 int main(void)
3288 int pipefd[2];
3289 return pipe2(pipefd, O_CLOEXEC);
3292 if compile_prog "" "" ; then
3293 pipe2=yes
3296 # check if accept4 is there
3297 accept4=no
3298 cat > $TMPC << EOF
3299 #include <sys/socket.h>
3300 #include <stddef.h>
3302 int main(void)
3304 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3305 return 0;
3308 if compile_prog "" "" ; then
3309 accept4=yes
3312 # check if tee/splice is there. vmsplice was added same time.
3313 splice=no
3314 cat > $TMPC << EOF
3315 #include <unistd.h>
3316 #include <fcntl.h>
3317 #include <limits.h>
3319 int main(void)
3321 int len, fd = 0;
3322 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3323 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3324 return 0;
3327 if compile_prog "" "" ; then
3328 splice=yes
3331 ##########################################
3332 # libnuma probe
3334 if test "$numa" != "no" ; then
3335 cat > $TMPC << EOF
3336 #include <numa.h>
3337 int main(void) { return numa_available(); }
3340 if compile_prog "" "-lnuma" ; then
3341 numa=yes
3342 libs_softmmu="-lnuma $libs_softmmu"
3343 else
3344 if test "$numa" = "yes" ; then
3345 feature_not_found "numa" "install numactl devel"
3347 numa=no
3351 ##########################################
3352 # tcmalloc probe
3354 if test "$tcmalloc" = "yes" ; then
3355 cat > $TMPC << EOF
3356 #include <stdlib.h>
3357 int main(void) { malloc(1); return 0; }
3360 if compile_prog "" "-ltcmalloc" ; then
3361 LIBS="-ltcmalloc $LIBS"
3362 else
3363 feature_not_found "tcmalloc" "install gperftools devel"
3367 ##########################################
3368 # signalfd probe
3369 signalfd="no"
3370 cat > $TMPC << EOF
3371 #include <unistd.h>
3372 #include <sys/syscall.h>
3373 #include <signal.h>
3374 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3377 if compile_prog "" "" ; then
3378 signalfd=yes
3381 # check if eventfd is supported
3382 eventfd=no
3383 cat > $TMPC << EOF
3384 #include <sys/eventfd.h>
3386 int main(void)
3388 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3391 if compile_prog "" "" ; then
3392 eventfd=yes
3395 # check for fallocate
3396 fallocate=no
3397 cat > $TMPC << EOF
3398 #include <fcntl.h>
3400 int main(void)
3402 fallocate(0, 0, 0, 0);
3403 return 0;
3406 if compile_prog "" "" ; then
3407 fallocate=yes
3410 # check for fallocate hole punching
3411 fallocate_punch_hole=no
3412 cat > $TMPC << EOF
3413 #include <fcntl.h>
3414 #include <linux/falloc.h>
3416 int main(void)
3418 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3419 return 0;
3422 if compile_prog "" "" ; then
3423 fallocate_punch_hole=yes
3426 # check that fallocate supports range zeroing inside the file
3427 fallocate_zero_range=no
3428 cat > $TMPC << EOF
3429 #include <fcntl.h>
3430 #include <linux/falloc.h>
3432 int main(void)
3434 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3435 return 0;
3438 if compile_prog "" "" ; then
3439 fallocate_zero_range=yes
3442 # check for posix_fallocate
3443 posix_fallocate=no
3444 cat > $TMPC << EOF
3445 #include <fcntl.h>
3447 int main(void)
3449 posix_fallocate(0, 0, 0);
3450 return 0;
3453 if compile_prog "" "" ; then
3454 posix_fallocate=yes
3457 # check for sync_file_range
3458 sync_file_range=no
3459 cat > $TMPC << EOF
3460 #include <fcntl.h>
3462 int main(void)
3464 sync_file_range(0, 0, 0, 0);
3465 return 0;
3468 if compile_prog "" "" ; then
3469 sync_file_range=yes
3472 # check for linux/fiemap.h and FS_IOC_FIEMAP
3473 fiemap=no
3474 cat > $TMPC << EOF
3475 #include <sys/ioctl.h>
3476 #include <linux/fs.h>
3477 #include <linux/fiemap.h>
3479 int main(void)
3481 ioctl(0, FS_IOC_FIEMAP, 0);
3482 return 0;
3485 if compile_prog "" "" ; then
3486 fiemap=yes
3489 # check for dup3
3490 dup3=no
3491 cat > $TMPC << EOF
3492 #include <unistd.h>
3494 int main(void)
3496 dup3(0, 0, 0);
3497 return 0;
3500 if compile_prog "" "" ; then
3501 dup3=yes
3504 # check for ppoll support
3505 ppoll=no
3506 cat > $TMPC << EOF
3507 #include <poll.h>
3509 int main(void)
3511 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3512 ppoll(&pfd, 1, 0, 0);
3513 return 0;
3516 if compile_prog "" "" ; then
3517 ppoll=yes
3520 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3521 prctl_pr_set_timerslack=no
3522 cat > $TMPC << EOF
3523 #include <sys/prctl.h>
3525 int main(void)
3527 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3528 return 0;
3531 if compile_prog "" "" ; then
3532 prctl_pr_set_timerslack=yes
3535 # check for epoll support
3536 epoll=no
3537 cat > $TMPC << EOF
3538 #include <sys/epoll.h>
3540 int main(void)
3542 epoll_create(0);
3543 return 0;
3546 if compile_prog "" "" ; then
3547 epoll=yes
3550 # epoll_create1 and epoll_pwait are later additions
3551 # so we must check separately for their presence
3552 epoll_create1=no
3553 cat > $TMPC << EOF
3554 #include <sys/epoll.h>
3556 int main(void)
3558 /* Note that we use epoll_create1 as a value, not as
3559 * a function being called. This is necessary so that on
3560 * old SPARC glibc versions where the function was present in
3561 * the library but not declared in the header file we will
3562 * fail the configure check. (Otherwise we will get a compiler
3563 * warning but not an error, and will proceed to fail the
3564 * qemu compile where we compile with -Werror.)
3566 return (int)(uintptr_t)&epoll_create1;
3569 if compile_prog "" "" ; then
3570 epoll_create1=yes
3573 epoll_pwait=no
3574 cat > $TMPC << EOF
3575 #include <sys/epoll.h>
3577 int main(void)
3579 epoll_pwait(0, 0, 0, 0, 0);
3580 return 0;
3583 if compile_prog "" "" ; then
3584 epoll_pwait=yes
3587 # check for sendfile support
3588 sendfile=no
3589 cat > $TMPC << EOF
3590 #include <sys/sendfile.h>
3592 int main(void)
3594 return sendfile(0, 0, 0, 0);
3597 if compile_prog "" "" ; then
3598 sendfile=yes
3601 # check for timerfd support (glibc 2.8 and newer)
3602 timerfd=no
3603 cat > $TMPC << EOF
3604 #include <sys/timerfd.h>
3606 int main(void)
3608 return(timerfd_create(CLOCK_REALTIME, 0));
3611 if compile_prog "" "" ; then
3612 timerfd=yes
3615 # check for setns and unshare support
3616 setns=no
3617 cat > $TMPC << EOF
3618 #include <sched.h>
3620 int main(void)
3622 int ret;
3623 ret = setns(0, 0);
3624 ret = unshare(0);
3625 return ret;
3628 if compile_prog "" "" ; then
3629 setns=yes
3632 # Check if tools are available to build documentation.
3633 if test "$docs" != "no" ; then
3634 if has makeinfo && has pod2man; then
3635 docs=yes
3636 else
3637 if test "$docs" = "yes" ; then
3638 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3640 docs=no
3644 # Search for bswap_32 function
3645 byteswap_h=no
3646 cat > $TMPC << EOF
3647 #include <byteswap.h>
3648 int main(void) { return bswap_32(0); }
3650 if compile_prog "" "" ; then
3651 byteswap_h=yes
3654 # Search for bswap32 function
3655 bswap_h=no
3656 cat > $TMPC << EOF
3657 #include <sys/endian.h>
3658 #include <sys/types.h>
3659 #include <machine/bswap.h>
3660 int main(void) { return bswap32(0); }
3662 if compile_prog "" "" ; then
3663 bswap_h=yes
3666 ##########################################
3667 # Do we have libiscsi >= 1.9.0
3668 if test "$libiscsi" != "no" ; then
3669 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3670 libiscsi="yes"
3671 libiscsi_cflags=$($pkg_config --cflags libiscsi)
3672 libiscsi_libs=$($pkg_config --libs libiscsi)
3673 else
3674 if test "$libiscsi" = "yes" ; then
3675 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3677 libiscsi="no"
3681 ##########################################
3682 # Do we need libm
3683 cat > $TMPC << EOF
3684 #include <math.h>
3685 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3687 if compile_prog "" "" ; then
3689 elif compile_prog "" "-lm" ; then
3690 LIBS="-lm $LIBS"
3691 libs_qga="-lm $libs_qga"
3692 else
3693 error_exit "libm check failed"
3696 ##########################################
3697 # Do we need librt
3698 # uClibc provides 2 versions of clock_gettime(), one with realtime
3699 # support and one without. This means that the clock_gettime() don't
3700 # need -lrt. We still need it for timer_create() so we check for this
3701 # function in addition.
3702 cat > $TMPC <<EOF
3703 #include <signal.h>
3704 #include <time.h>
3705 int main(void) {
3706 timer_create(CLOCK_REALTIME, NULL, NULL);
3707 return clock_gettime(CLOCK_REALTIME, NULL);
3711 if compile_prog "" "" ; then
3713 # we need pthread for static linking. use previous pthread test result
3714 elif compile_prog "" "$pthread_lib -lrt" ; then
3715 LIBS="$LIBS -lrt"
3716 libs_qga="$libs_qga -lrt"
3719 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3720 "$aix" != "yes" -a "$haiku" != "yes" ; then
3721 libs_softmmu="-lutil $libs_softmmu"
3724 ##########################################
3725 # spice probe
3726 if test "$spice" != "no" ; then
3727 cat > $TMPC << EOF
3728 #include <spice.h>
3729 int main(void) { spice_server_new(); return 0; }
3731 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3732 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3733 if $pkg_config --atleast-version=0.12.0 spice-server && \
3734 $pkg_config --atleast-version=0.12.3 spice-protocol && \
3735 compile_prog "$spice_cflags" "$spice_libs" ; then
3736 spice="yes"
3737 libs_softmmu="$libs_softmmu $spice_libs"
3738 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3739 spice_protocol_version=$($pkg_config --modversion spice-protocol)
3740 spice_server_version=$($pkg_config --modversion spice-server)
3741 else
3742 if test "$spice" = "yes" ; then
3743 feature_not_found "spice" \
3744 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3746 spice="no"
3750 # check for libcacard for smartcard support
3751 smartcard_cflags=""
3752 # TODO - what's the minimal nss version we support?
3753 if test "$smartcard_nss" != "no"; then
3754 cat > $TMPC << EOF
3755 #include <pk11pub.h>
3756 int main(void) { PK11_FreeSlot(0); return 0; }
3758 # FIXME: do not include $glib_* in here
3759 nss_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
3760 nss_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
3761 test_cflags="$nss_cflags"
3762 # The header files in nss < 3.13.3 have a bug which causes them to
3763 # emit a warning. If we're going to compile QEMU with -Werror, then
3764 # test that the headers don't have this bug. Otherwise we would pass
3765 # the configure test but fail to compile QEMU later.
3766 if test "$werror" = "yes"; then
3767 test_cflags="-Werror $test_cflags"
3769 if test -n "$libtool" &&
3770 $pkg_config --atleast-version=3.12.8 nss && \
3771 compile_prog "$test_cflags" "$nss_libs"; then
3772 smartcard_nss="yes"
3773 else
3774 if test "$smartcard_nss" = "yes"; then
3775 feature_not_found "nss" "Install nss devel >= 3.12.8"
3777 smartcard_nss="no"
3781 # check for libusb
3782 if test "$libusb" != "no" ; then
3783 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
3784 libusb="yes"
3785 libusb_cflags=$($pkg_config --cflags libusb-1.0)
3786 libusb_libs=$($pkg_config --libs libusb-1.0)
3787 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3788 libs_softmmu="$libs_softmmu $libusb_libs"
3789 else
3790 if test "$libusb" = "yes"; then
3791 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
3793 libusb="no"
3797 # check for usbredirparser for usb network redirection support
3798 if test "$usb_redir" != "no" ; then
3799 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
3800 usb_redir="yes"
3801 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3802 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
3803 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
3804 libs_softmmu="$libs_softmmu $usb_redir_libs"
3805 else
3806 if test "$usb_redir" = "yes"; then
3807 feature_not_found "usb-redir" "Install usbredir devel"
3809 usb_redir="no"
3813 ##########################################
3814 # check if we have VSS SDK headers for win
3816 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3817 case "$vss_win32_sdk" in
3818 "") vss_win32_include="-I$source_path" ;;
3819 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3820 # handle path with spaces. So we symlink the headers into ".sdk/vss".
3821 vss_win32_include="-I$source_path/.sdk/vss"
3822 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3824 *) vss_win32_include="-I$vss_win32_sdk"
3825 esac
3826 cat > $TMPC << EOF
3827 #define __MIDL_user_allocate_free_DEFINED__
3828 #include <inc/win2003/vss.h>
3829 int main(void) { return VSS_CTX_BACKUP; }
3831 if compile_prog "$vss_win32_include" "" ; then
3832 guest_agent_with_vss="yes"
3833 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3834 libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3835 else
3836 if test "$vss_win32_sdk" != "" ; then
3837 echo "ERROR: Please download and install Microsoft VSS SDK:"
3838 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3839 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3840 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
3841 echo "ERROR: The headers are extracted in the directory \`inc'."
3842 feature_not_found "VSS support"
3844 guest_agent_with_vss="no"
3848 ##########################################
3849 # lookup Windows platform SDK (if not specified)
3850 # The SDK is needed only to build .tlb (type library) file of guest agent
3851 # VSS provider from the source. It is usually unnecessary because the
3852 # pre-compiled .tlb file is included.
3854 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
3855 if test -z "$win_sdk"; then
3856 programfiles="$PROGRAMFILES"
3857 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3858 if test -n "$programfiles"; then
3859 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3860 else
3861 feature_not_found "Windows SDK"
3863 elif test "$win_sdk" = "no"; then
3864 win_sdk=""
3868 ##########################################
3870 ##########################################
3871 # check if we have fdatasync
3873 fdatasync=no
3874 cat > $TMPC << EOF
3875 #include <unistd.h>
3876 int main(void) {
3877 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
3878 return fdatasync(0);
3879 #else
3880 #error Not supported
3881 #endif
3884 if compile_prog "" "" ; then
3885 fdatasync=yes
3888 ##########################################
3889 # check if we have madvise
3891 madvise=no
3892 cat > $TMPC << EOF
3893 #include <sys/types.h>
3894 #include <sys/mman.h>
3895 #include <stddef.h>
3896 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
3898 if compile_prog "" "" ; then
3899 madvise=yes
3902 ##########################################
3903 # check if we have posix_madvise
3905 posix_madvise=no
3906 cat > $TMPC << EOF
3907 #include <sys/mman.h>
3908 #include <stddef.h>
3909 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
3911 if compile_prog "" "" ; then
3912 posix_madvise=yes
3915 ##########################################
3916 # check if we have usable SIGEV_THREAD_ID
3918 sigev_thread_id=no
3919 cat > $TMPC << EOF
3920 #include <signal.h>
3921 int main(void) {
3922 struct sigevent ev;
3923 ev.sigev_notify = SIGEV_THREAD_ID;
3924 ev._sigev_un._tid = 0;
3925 asm volatile("" : : "g"(&ev));
3926 return 0;
3929 if compile_prog "" "" ; then
3930 sigev_thread_id=yes
3933 ##########################################
3934 # check if trace backend exists
3936 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
3937 if test "$?" -ne 0 ; then
3938 error_exit "invalid trace backends" \
3939 "Please choose supported trace backends."
3942 ##########################################
3943 # For 'ust' backend, test if ust headers are present
3944 if have_backend "ust"; then
3945 cat > $TMPC << EOF
3946 #include <lttng/tracepoint.h>
3947 int main(void) { return 0; }
3949 if compile_prog "" "" ; then
3950 if $pkg_config lttng-ust --exists; then
3951 lttng_ust_libs=`$pkg_config --libs lttng-ust`
3952 else
3953 lttng_ust_libs="-llttng-ust"
3955 if $pkg_config liburcu-bp --exists; then
3956 urcu_bp_libs=`$pkg_config --libs liburcu-bp`
3957 else
3958 urcu_bp_libs="-lurcu-bp"
3961 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
3962 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
3963 else
3964 error_exit "Trace backend 'ust' missing lttng-ust header files"
3968 ##########################################
3969 # For 'dtrace' backend, test if 'dtrace' command is present
3970 if have_backend "dtrace"; then
3971 if ! has 'dtrace' ; then
3972 error_exit "dtrace command is not found in PATH $PATH"
3974 trace_backend_stap="no"
3975 if has 'stap' ; then
3976 trace_backend_stap="yes"
3980 ##########################################
3981 # check and set a backend for coroutine
3983 # We prefer ucontext, but it's not always possible. The fallback
3984 # is sigcontext. gthread is not selectable except explicitly, because
3985 # it is not functional enough to run QEMU proper. (It is occasionally
3986 # useful for debugging purposes.) On Windows the only valid backend
3987 # is the Windows-specific one.
3989 ucontext_works=no
3990 if test "$darwin" != "yes"; then
3991 cat > $TMPC << EOF
3992 #include <ucontext.h>
3993 #ifdef __stub_makecontext
3994 #error Ignoring glibc stub makecontext which will always fail
3995 #endif
3996 int main(void) { makecontext(0, 0, 0); return 0; }
3998 if compile_prog "" "" ; then
3999 ucontext_works=yes
4003 if test "$coroutine" = ""; then
4004 if test "$mingw32" = "yes"; then
4005 coroutine=win32
4006 elif test "$ucontext_works" = "yes"; then
4007 coroutine=ucontext
4008 else
4009 coroutine=sigaltstack
4011 else
4012 case $coroutine in
4013 windows)
4014 if test "$mingw32" != "yes"; then
4015 error_exit "'windows' coroutine backend only valid for Windows"
4017 # Unfortunately the user visible backend name doesn't match the
4018 # coroutine-*.c filename for this case, so we have to adjust it here.
4019 coroutine=win32
4021 ucontext)
4022 if test "$ucontext_works" != "yes"; then
4023 feature_not_found "ucontext"
4026 gthread|sigaltstack)
4027 if test "$mingw32" = "yes"; then
4028 error_exit "only the 'windows' coroutine backend is valid for Windows"
4032 error_exit "unknown coroutine backend $coroutine"
4034 esac
4037 if test "$coroutine_pool" = ""; then
4038 if test "$coroutine" = "gthread"; then
4039 coroutine_pool=no
4040 else
4041 coroutine_pool=yes
4044 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4045 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4048 ##########################################
4049 # check if we have open_by_handle_at
4051 open_by_handle_at=no
4052 cat > $TMPC << EOF
4053 #include <fcntl.h>
4054 #if !defined(AT_EMPTY_PATH)
4055 # error missing definition
4056 #else
4057 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4058 #endif
4060 if compile_prog "" "" ; then
4061 open_by_handle_at=yes
4064 ########################################
4065 # check if we have linux/magic.h
4067 linux_magic_h=no
4068 cat > $TMPC << EOF
4069 #include <linux/magic.h>
4070 int main(void) {
4071 return 0;
4074 if compile_prog "" "" ; then
4075 linux_magic_h=yes
4078 ########################################
4079 # check whether we can disable warning option with a pragma (this is needed
4080 # to silence warnings in the headers of some versions of external libraries).
4081 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4082 # only a warning.
4084 # If we can't selectively disable warning in the code, disable -Werror so that
4085 # the build doesn't fail anyway.
4087 pragma_disable_unused_but_set=no
4088 cat > $TMPC << EOF
4089 #pragma GCC diagnostic push
4090 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4091 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4092 #pragma GCC diagnostic pop
4094 int main(void) {
4095 return 0;
4098 if compile_prog "-Werror" "" ; then
4099 pragma_diagnostic_available=yes
4100 else
4101 werror=no
4104 ########################################
4105 # check if we have valgrind/valgrind.h
4107 valgrind_h=no
4108 cat > $TMPC << EOF
4109 #include <valgrind/valgrind.h>
4110 int main(void) {
4111 return 0;
4114 if compile_prog "" "" ; then
4115 valgrind_h=yes
4118 ########################################
4119 # check if environ is declared
4121 has_environ=no
4122 cat > $TMPC << EOF
4123 #include <unistd.h>
4124 int main(void) {
4125 environ = 0;
4126 return 0;
4129 if compile_prog "" "" ; then
4130 has_environ=yes
4133 ########################################
4134 # check if cpuid.h is usable.
4136 cpuid_h=no
4137 cat > $TMPC << EOF
4138 #include <cpuid.h>
4139 int main(void) {
4140 unsigned a, b, c, d;
4141 int max = __get_cpuid_max(0, 0);
4143 if (max >= 1) {
4144 __cpuid(1, a, b, c, d);
4147 if (max >= 7) {
4148 __cpuid_count(7, 0, a, b, c, d);
4151 return 0;
4154 if compile_prog "" "" ; then
4155 cpuid_h=yes
4158 ########################################
4159 # check if __[u]int128_t is usable.
4161 int128=no
4162 cat > $TMPC << EOF
4163 #if defined(__clang_major__) && defined(__clang_minor__)
4164 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4165 # error __int128_t does not work in CLANG before 3.2
4166 # endif
4167 #endif
4168 __int128_t a;
4169 __uint128_t b;
4170 int main (void) {
4171 a = a + b;
4172 b = a * b;
4173 a = a * a;
4174 return 0;
4177 if compile_prog "" "" ; then
4178 int128=yes
4181 ########################################
4182 # check if getauxval is available.
4184 getauxval=no
4185 cat > $TMPC << EOF
4186 #include <sys/auxv.h>
4187 int main(void) {
4188 return getauxval(AT_HWCAP) == 0;
4191 if compile_prog "" "" ; then
4192 getauxval=yes
4195 ##########################################
4196 # End of CC checks
4197 # After here, no more $cc or $ld runs
4199 if test "$gcov" = "yes" ; then
4200 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4201 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4202 elif test "$debug" = "no" ; then
4203 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4206 ##########################################
4207 # Do we have libnfs
4208 if test "$libnfs" != "no" ; then
4209 if $pkg_config --atleast-version=1.9.3 libnfs; then
4210 libnfs="yes"
4211 libnfs_libs=$($pkg_config --libs libnfs)
4212 LIBS="$LIBS $libnfs_libs"
4213 else
4214 if test "$libnfs" = "yes" ; then
4215 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4217 libnfs="no"
4221 # Disable zero malloc errors for official releases unless explicitly told to
4222 # enable/disable
4223 if test -z "$zero_malloc" ; then
4224 if test "$z_version" = "50" ; then
4225 zero_malloc="no"
4226 else
4227 zero_malloc="yes"
4231 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4232 if test "$werror" = "yes"; then
4233 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4236 if test "$solaris" = "no" ; then
4237 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4238 LDFLAGS="-Wl,--warn-common $LDFLAGS"
4242 # test if pod2man has --utf8 option
4243 if pod2man --help | grep -q utf8; then
4244 POD2MAN="pod2man --utf8"
4245 else
4246 POD2MAN="pod2man"
4249 # Use ASLR, no-SEH and DEP if available
4250 if test "$mingw32" = "yes" ; then
4251 for flag in --dynamicbase --no-seh --nxcompat; do
4252 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4253 LDFLAGS="-Wl,$flag $LDFLAGS"
4255 done
4258 qemu_confdir=$sysconfdir$confsuffix
4259 qemu_moddir=$libdir$confsuffix
4260 qemu_datadir=$datadir$confsuffix
4261 qemu_localedir="$datadir/locale"
4263 tools=""
4264 if test "$want_tools" = "yes" ; then
4265 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4266 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4267 tools="qemu-nbd\$(EXESUF) $tools"
4270 if test "$softmmu" = yes ; then
4271 if test "$virtfs" != no ; then
4272 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4273 virtfs=yes
4274 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4275 else
4276 if test "$virtfs" = yes; then
4277 error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4279 virtfs=no
4283 if [ "$guest_agent" != "no" ]; then
4284 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4285 tools="qemu-ga\$(EXESUF) $tools"
4286 if [ "$mingw32" = "yes" -a "$guest_agent_with_vss" = "yes" ]; then
4287 tools="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb $tools"
4289 guest_agent=yes
4290 elif [ "$guest_agent" != yes ]; then
4291 guest_agent=no
4292 else
4293 error_exit "Guest agent is not supported on this platform"
4297 # Mac OS X ships with a broken assembler
4298 roms=
4299 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4300 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4301 "$softmmu" = yes ; then
4302 roms="optionrom"
4304 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4305 roms="$roms spapr-rtas"
4308 if test "$cpu" = "s390x" ; then
4309 roms="$roms s390-ccw"
4312 # Probe for the need for relocating the user-only binary.
4313 if test "$pie" = "no" ; then
4314 textseg_addr=
4315 case "$cpu" in
4316 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4317 # ??? Rationale for choosing this address
4318 textseg_addr=0x60000000
4320 mips)
4321 # A 256M aligned address, high in the address space, with enough
4322 # room for the code_gen_buffer above it before the stack.
4323 textseg_addr=0x60000000
4325 esac
4326 if [ -n "$textseg_addr" ]; then
4327 cat > $TMPC <<EOF
4328 int main(void) { return 0; }
4330 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4331 if ! compile_prog "" "$textseg_ldflags"; then
4332 # In case ld does not support -Ttext-segment, edit the default linker
4333 # script via sed to set the .text start addr. This is needed on FreeBSD
4334 # at least.
4335 $ld --verbose | sed \
4336 -e '1,/==================================================/d' \
4337 -e '/==================================================/,$d' \
4338 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4339 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4340 textseg_ldflags="-Wl,-T../config-host.ld"
4345 # prepend pixman and ftd flags after all config tests are done
4346 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4347 libs_softmmu="$pixman_libs $libs_softmmu"
4349 echo "Install prefix $prefix"
4350 echo "BIOS directory `eval echo $qemu_datadir`"
4351 echo "binary directory `eval echo $bindir`"
4352 echo "library directory `eval echo $libdir`"
4353 echo "module directory `eval echo $qemu_moddir`"
4354 echo "libexec directory `eval echo $libexecdir`"
4355 echo "include directory `eval echo $includedir`"
4356 echo "config directory `eval echo $sysconfdir`"
4357 if test "$mingw32" = "no" ; then
4358 echo "local state directory `eval echo $local_statedir`"
4359 echo "Manual directory `eval echo $mandir`"
4360 echo "ELF interp prefix $interp_prefix"
4361 else
4362 echo "local state directory queried at runtime"
4363 echo "Windows SDK $win_sdk"
4365 echo "Source path $source_path"
4366 echo "C compiler $cc"
4367 echo "Host C compiler $host_cc"
4368 echo "C++ compiler $cxx"
4369 echo "Objective-C compiler $objcc"
4370 echo "ARFLAGS $ARFLAGS"
4371 echo "CFLAGS $CFLAGS"
4372 echo "QEMU_CFLAGS $QEMU_CFLAGS"
4373 echo "LDFLAGS $LDFLAGS"
4374 echo "make $make"
4375 echo "install $install"
4376 echo "python $python"
4377 if test "$slirp" = "yes" ; then
4378 echo "smbd $smbd"
4380 echo "module support $modules"
4381 echo "host CPU $cpu"
4382 echo "host big endian $bigendian"
4383 echo "target list $target_list"
4384 echo "tcg debug enabled $debug_tcg"
4385 echo "gprof enabled $gprof"
4386 echo "sparse enabled $sparse"
4387 echo "strip binaries $strip_opt"
4388 echo "profiler $profiler"
4389 echo "static build $static"
4390 if test "$darwin" = "yes" ; then
4391 echo "Cocoa support $cocoa"
4393 echo "pixman $pixman"
4394 echo "SDL support $sdl"
4395 echo "GTK support $gtk"
4396 echo "VTE support $vte"
4397 echo "curses support $curses"
4398 echo "curl support $curl"
4399 echo "mingw32 support $mingw32"
4400 echo "Audio drivers $audio_drv_list"
4401 echo "Block whitelist (rw) $block_drv_rw_whitelist"
4402 echo "Block whitelist (ro) $block_drv_ro_whitelist"
4403 echo "VirtFS support $virtfs"
4404 echo "VNC support $vnc"
4405 if test "$vnc" = "yes" ; then
4406 echo "VNC TLS support $vnc_tls"
4407 echo "VNC SASL support $vnc_sasl"
4408 echo "VNC JPEG support $vnc_jpeg"
4409 echo "VNC PNG support $vnc_png"
4410 echo "VNC WS support $vnc_ws"
4412 if test -n "$sparc_cpu"; then
4413 echo "Target Sparc Arch $sparc_cpu"
4415 echo "xen support $xen"
4416 if test "$xen" = "yes" ; then
4417 echo "xen ctrl version $xen_ctrl_version"
4419 echo "brlapi support $brlapi"
4420 echo "bluez support $bluez"
4421 echo "Documentation $docs"
4422 echo "GUEST_BASE $guest_base"
4423 echo "PIE $pie"
4424 echo "vde support $vde"
4425 echo "netmap support $netmap"
4426 echo "Linux AIO support $linux_aio"
4427 echo "ATTR/XATTR support $attr"
4428 echo "Install blobs $blobs"
4429 echo "KVM support $kvm"
4430 echo "RDMA support $rdma"
4431 echo "TCG interpreter $tcg_interpreter"
4432 echo "fdt support $fdt"
4433 echo "preadv support $preadv"
4434 echo "fdatasync $fdatasync"
4435 echo "madvise $madvise"
4436 echo "posix_madvise $posix_madvise"
4437 echo "sigev_thread_id $sigev_thread_id"
4438 echo "uuid support $uuid"
4439 echo "libcap-ng support $cap_ng"
4440 echo "vhost-net support $vhost_net"
4441 echo "vhost-scsi support $vhost_scsi"
4442 echo "Trace backends $trace_backends"
4443 if test "$trace_backend" = "simple"; then
4444 echo "Trace output file $trace_file-<pid>"
4446 if test "$spice" = "yes"; then
4447 echo "spice support $spice ($spice_protocol_version/$spice_server_version)"
4448 else
4449 echo "spice support $spice"
4451 echo "rbd support $rbd"
4452 echo "xfsctl support $xfs"
4453 echo "nss used $smartcard_nss"
4454 echo "libusb $libusb"
4455 echo "usb net redir $usb_redir"
4456 echo "OpenGL support $opengl"
4457 echo "libiscsi support $libiscsi"
4458 echo "libnfs support $libnfs"
4459 echo "build guest agent $guest_agent"
4460 echo "QGA VSS support $guest_agent_with_vss"
4461 echo "seccomp support $seccomp"
4462 echo "coroutine backend $coroutine"
4463 echo "coroutine pool $coroutine_pool"
4464 echo "GlusterFS support $glusterfs"
4465 echo "Archipelago support $archipelago"
4466 echo "gcov $gcov_tool"
4467 echo "gcov enabled $gcov"
4468 echo "TPM support $tpm"
4469 echo "libssh2 support $libssh2"
4470 echo "TPM passthrough $tpm_passthrough"
4471 echo "QOM debugging $qom_cast_debug"
4472 echo "vhdx $vhdx"
4473 echo "Quorum $quorum"
4474 echo "lzo support $lzo"
4475 echo "snappy support $snappy"
4476 echo "bzip2 support $bzip2"
4477 echo "NUMA host support $numa"
4478 echo "tcmalloc support $tcmalloc"
4480 if test "$sdl_too_old" = "yes"; then
4481 echo "-> Your SDL version is too old - please upgrade to have SDL support"
4484 config_host_mak="config-host.mak"
4486 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4488 echo "# Automatically generated by configure - do not modify" > $config_host_mak
4489 echo >> $config_host_mak
4491 echo all: >> $config_host_mak
4492 echo "prefix=$prefix" >> $config_host_mak
4493 echo "bindir=$bindir" >> $config_host_mak
4494 echo "libdir=$libdir" >> $config_host_mak
4495 echo "libexecdir=$libexecdir" >> $config_host_mak
4496 echo "includedir=$includedir" >> $config_host_mak
4497 echo "mandir=$mandir" >> $config_host_mak
4498 echo "sysconfdir=$sysconfdir" >> $config_host_mak
4499 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4500 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4501 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4502 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4503 if test "$mingw32" = "no" ; then
4504 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4506 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4507 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4508 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4509 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4510 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4512 echo "ARCH=$ARCH" >> $config_host_mak
4514 if test "$debug_tcg" = "yes" ; then
4515 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4517 if test "$strip_opt" = "yes" ; then
4518 echo "STRIP=${strip}" >> $config_host_mak
4520 if test "$bigendian" = "yes" ; then
4521 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4523 if test "$mingw32" = "yes" ; then
4524 echo "CONFIG_WIN32=y" >> $config_host_mak
4525 rc_version=`cat $source_path/VERSION`
4526 version_major=${rc_version%%.*}
4527 rc_version=${rc_version#*.}
4528 version_minor=${rc_version%%.*}
4529 rc_version=${rc_version#*.}
4530 version_subminor=${rc_version%%.*}
4531 version_micro=0
4532 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4533 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4534 if test "$guest_agent_with_vss" = "yes" ; then
4535 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4536 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4538 else
4539 echo "CONFIG_POSIX=y" >> $config_host_mak
4542 if test "$linux" = "yes" ; then
4543 echo "CONFIG_LINUX=y" >> $config_host_mak
4546 if test "$darwin" = "yes" ; then
4547 echo "CONFIG_DARWIN=y" >> $config_host_mak
4550 if test "$aix" = "yes" ; then
4551 echo "CONFIG_AIX=y" >> $config_host_mak
4554 if test "$solaris" = "yes" ; then
4555 echo "CONFIG_SOLARIS=y" >> $config_host_mak
4556 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
4557 if test "$needs_libsunmath" = "yes" ; then
4558 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
4561 if test "$haiku" = "yes" ; then
4562 echo "CONFIG_HAIKU=y" >> $config_host_mak
4564 if test "$static" = "yes" ; then
4565 echo "CONFIG_STATIC=y" >> $config_host_mak
4567 if test "$profiler" = "yes" ; then
4568 echo "CONFIG_PROFILER=y" >> $config_host_mak
4570 if test "$slirp" = "yes" ; then
4571 echo "CONFIG_SLIRP=y" >> $config_host_mak
4572 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4574 if test "$vde" = "yes" ; then
4575 echo "CONFIG_VDE=y" >> $config_host_mak
4577 if test "$netmap" = "yes" ; then
4578 echo "CONFIG_NETMAP=y" >> $config_host_mak
4580 if test "$l2tpv3" = "yes" ; then
4581 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4583 if test "$cap_ng" = "yes" ; then
4584 echo "CONFIG_LIBCAP=y" >> $config_host_mak
4586 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4587 for drv in $audio_drv_list; do
4588 def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4589 echo "$def=y" >> $config_host_mak
4590 if test "$drv" = "fmod"; then
4591 echo "FMOD_CFLAGS=-I$fmod_inc" >> $config_host_mak
4593 done
4594 if test "$audio_pt_int" = "yes" ; then
4595 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4597 if test "$audio_win_int" = "yes" ; then
4598 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4600 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4601 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4602 if test "$vnc" = "yes" ; then
4603 echo "CONFIG_VNC=y" >> $config_host_mak
4605 if test "$vnc_tls" = "yes" ; then
4606 echo "CONFIG_VNC_TLS=y" >> $config_host_mak
4608 if test "$vnc_sasl" = "yes" ; then
4609 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4611 if test "$vnc_jpeg" = "yes" ; then
4612 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
4614 if test "$vnc_png" = "yes" ; then
4615 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
4617 if test "$vnc_ws" = "yes" ; then
4618 echo "CONFIG_VNC_WS=y" >> $config_host_mak
4619 echo "VNC_WS_CFLAGS=$vnc_ws_cflags" >> $config_host_mak
4621 if test "$fnmatch" = "yes" ; then
4622 echo "CONFIG_FNMATCH=y" >> $config_host_mak
4624 if test "$uuid" = "yes" ; then
4625 echo "CONFIG_UUID=y" >> $config_host_mak
4627 if test "$xfs" = "yes" ; then
4628 echo "CONFIG_XFS=y" >> $config_host_mak
4630 qemu_version=`head $source_path/VERSION`
4631 echo "VERSION=$qemu_version" >>$config_host_mak
4632 echo "PKGVERSION=$pkgversion" >>$config_host_mak
4633 echo "SRC_PATH=$source_path" >> $config_host_mak
4634 echo "TARGET_DIRS=$target_list" >> $config_host_mak
4635 if [ "$docs" = "yes" ] ; then
4636 echo "BUILD_DOCS=yes" >> $config_host_mak
4638 if test "$modules" = "yes"; then
4639 # $shacmd can generate a hash started with digit, which the compiler doesn't
4640 # like as an symbol. So prefix it with an underscore
4641 echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
4642 echo "CONFIG_MODULES=y" >> $config_host_mak
4644 if test "$sdl" = "yes" ; then
4645 echo "CONFIG_SDL=y" >> $config_host_mak
4646 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
4647 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
4649 if test "$cocoa" = "yes" ; then
4650 echo "CONFIG_COCOA=y" >> $config_host_mak
4652 if test "$curses" = "yes" ; then
4653 echo "CONFIG_CURSES=y" >> $config_host_mak
4655 if test "$utimens" = "yes" ; then
4656 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
4658 if test "$pipe2" = "yes" ; then
4659 echo "CONFIG_PIPE2=y" >> $config_host_mak
4661 if test "$accept4" = "yes" ; then
4662 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
4664 if test "$splice" = "yes" ; then
4665 echo "CONFIG_SPLICE=y" >> $config_host_mak
4667 if test "$eventfd" = "yes" ; then
4668 echo "CONFIG_EVENTFD=y" >> $config_host_mak
4670 if test "$fallocate" = "yes" ; then
4671 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
4673 if test "$fallocate_punch_hole" = "yes" ; then
4674 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
4676 if test "$fallocate_zero_range" = "yes" ; then
4677 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
4679 if test "$posix_fallocate" = "yes" ; then
4680 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
4682 if test "$sync_file_range" = "yes" ; then
4683 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
4685 if test "$fiemap" = "yes" ; then
4686 echo "CONFIG_FIEMAP=y" >> $config_host_mak
4688 if test "$dup3" = "yes" ; then
4689 echo "CONFIG_DUP3=y" >> $config_host_mak
4691 if test "$ppoll" = "yes" ; then
4692 echo "CONFIG_PPOLL=y" >> $config_host_mak
4694 if test "$prctl_pr_set_timerslack" = "yes" ; then
4695 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
4697 if test "$epoll" = "yes" ; then
4698 echo "CONFIG_EPOLL=y" >> $config_host_mak
4700 if test "$epoll_create1" = "yes" ; then
4701 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
4703 if test "$epoll_pwait" = "yes" ; then
4704 echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
4706 if test "$sendfile" = "yes" ; then
4707 echo "CONFIG_SENDFILE=y" >> $config_host_mak
4709 if test "$timerfd" = "yes" ; then
4710 echo "CONFIG_TIMERFD=y" >> $config_host_mak
4712 if test "$setns" = "yes" ; then
4713 echo "CONFIG_SETNS=y" >> $config_host_mak
4715 if test "$inotify" = "yes" ; then
4716 echo "CONFIG_INOTIFY=y" >> $config_host_mak
4718 if test "$inotify1" = "yes" ; then
4719 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
4721 if test "$byteswap_h" = "yes" ; then
4722 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
4724 if test "$bswap_h" = "yes" ; then
4725 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
4727 if test "$curl" = "yes" ; then
4728 echo "CONFIG_CURL=m" >> $config_host_mak
4729 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
4730 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
4732 if test "$brlapi" = "yes" ; then
4733 echo "CONFIG_BRLAPI=y" >> $config_host_mak
4735 if test "$bluez" = "yes" ; then
4736 echo "CONFIG_BLUEZ=y" >> $config_host_mak
4737 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
4739 if test "glib_subprocess" = "yes" ; then
4740 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
4742 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4743 if test "$gtk" = "yes" ; then
4744 echo "CONFIG_GTK=y" >> $config_host_mak
4745 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
4746 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
4748 if test "$vte" = "yes" ; then
4749 echo "CONFIG_VTE=y" >> $config_host_mak
4750 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
4752 if test "$xen" = "yes" ; then
4753 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4754 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4756 if test "$linux_aio" = "yes" ; then
4757 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4759 if test "$attr" = "yes" ; then
4760 echo "CONFIG_ATTR=y" >> $config_host_mak
4762 if test "$libattr" = "yes" ; then
4763 echo "CONFIG_LIBATTR=y" >> $config_host_mak
4765 if test "$virtfs" = "yes" ; then
4766 echo "CONFIG_VIRTFS=y" >> $config_host_mak
4768 if test "$vhost_scsi" = "yes" ; then
4769 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4771 if test "$vhost_net" = "yes" ; then
4772 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
4774 if test "$blobs" = "yes" ; then
4775 echo "INSTALL_BLOBS=yes" >> $config_host_mak
4777 if test "$iovec" = "yes" ; then
4778 echo "CONFIG_IOVEC=y" >> $config_host_mak
4780 if test "$preadv" = "yes" ; then
4781 echo "CONFIG_PREADV=y" >> $config_host_mak
4783 if test "$fdt" = "yes" ; then
4784 echo "CONFIG_FDT=y" >> $config_host_mak
4786 if test "$signalfd" = "yes" ; then
4787 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
4789 if test "$tcg_interpreter" = "yes" ; then
4790 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4792 if test "$fdatasync" = "yes" ; then
4793 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
4795 if test "$madvise" = "yes" ; then
4796 echo "CONFIG_MADVISE=y" >> $config_host_mak
4798 if test "$posix_madvise" = "yes" ; then
4799 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
4801 if test "$sigev_thread_id" = "yes" ; then
4802 echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
4805 if test "$spice" = "yes" ; then
4806 echo "CONFIG_SPICE=y" >> $config_host_mak
4809 if test "$smartcard_nss" = "yes" ; then
4810 echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
4811 echo "NSS_LIBS=$nss_libs" >> $config_host_mak
4812 echo "NSS_CFLAGS=$nss_cflags" >> $config_host_mak
4815 if test "$libusb" = "yes" ; then
4816 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
4819 if test "$usb_redir" = "yes" ; then
4820 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
4823 if test "$opengl" = "yes" ; then
4824 echo "CONFIG_OPENGL=y" >> $config_host_mak
4825 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
4826 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
4829 if test "$lzo" = "yes" ; then
4830 echo "CONFIG_LZO=y" >> $config_host_mak
4833 if test "$snappy" = "yes" ; then
4834 echo "CONFIG_SNAPPY=y" >> $config_host_mak
4837 if test "$bzip2" = "yes" ; then
4838 echo "CONFIG_BZIP2=y" >> $config_host_mak
4839 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
4842 if test "$libiscsi" = "yes" ; then
4843 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
4844 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
4845 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
4848 if test "$libnfs" = "yes" ; then
4849 echo "CONFIG_LIBNFS=y" >> $config_host_mak
4852 if test "$seccomp" = "yes"; then
4853 echo "CONFIG_SECCOMP=y" >> $config_host_mak
4856 # XXX: suppress that
4857 if [ "$bsd" = "yes" ] ; then
4858 echo "CONFIG_BSD=y" >> $config_host_mak
4861 if test "$zero_malloc" = "yes" ; then
4862 echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
4864 if test "$qom_cast_debug" = "yes" ; then
4865 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
4867 if test "$rbd" = "yes" ; then
4868 echo "CONFIG_RBD=m" >> $config_host_mak
4869 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
4870 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
4873 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
4874 if test "$coroutine_pool" = "yes" ; then
4875 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
4876 else
4877 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
4880 if test "$open_by_handle_at" = "yes" ; then
4881 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
4884 if test "$linux_magic_h" = "yes" ; then
4885 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
4888 if test "$pragma_diagnostic_available" = "yes" ; then
4889 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
4892 if test "$valgrind_h" = "yes" ; then
4893 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
4896 if test "$has_environ" = "yes" ; then
4897 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
4900 if test "$cpuid_h" = "yes" ; then
4901 echo "CONFIG_CPUID_H=y" >> $config_host_mak
4904 if test "$int128" = "yes" ; then
4905 echo "CONFIG_INT128=y" >> $config_host_mak
4908 if test "$getauxval" = "yes" ; then
4909 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
4912 if test "$glusterfs" = "yes" ; then
4913 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
4914 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
4915 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
4918 if test "$glusterfs_discard" = "yes" ; then
4919 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
4922 if test "$glusterfs_zerofill" = "yes" ; then
4923 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
4926 if test "$archipelago" = "yes" ; then
4927 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
4928 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
4931 if test "$libssh2" = "yes" ; then
4932 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
4933 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
4934 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
4937 if test "$quorum" = "yes" ; then
4938 echo "CONFIG_QUORUM=y" >> $config_host_mak
4941 if test "$vhdx" = "yes" ; then
4942 echo "CONFIG_VHDX=y" >> $config_host_mak
4945 # USB host support
4946 if test "$libusb" = "yes"; then
4947 echo "HOST_USB=libusb legacy" >> $config_host_mak
4948 else
4949 echo "HOST_USB=stub" >> $config_host_mak
4952 # TPM passthrough support?
4953 if test "$tpm" = "yes"; then
4954 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
4955 if test "$tpm_passthrough" = "yes"; then
4956 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
4960 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
4961 if have_backend "nop"; then
4962 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
4964 if have_backend "simple"; then
4965 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
4966 # Set the appropriate trace file.
4967 trace_file="\"$trace_file-\" FMT_pid"
4969 if have_backend "stderr"; then
4970 echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
4972 if have_backend "ust"; then
4973 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
4975 if have_backend "dtrace"; then
4976 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
4977 if test "$trace_backend_stap" = "yes" ; then
4978 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
4981 if have_backend "ftrace"; then
4982 if test "$linux" = "yes" ; then
4983 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
4984 else
4985 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
4988 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
4990 if test "$rdma" = "yes" ; then
4991 echo "CONFIG_RDMA=y" >> $config_host_mak
4994 # Hold two types of flag:
4995 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
4996 # a thread we have a handle to
4997 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
4998 # platform
4999 if test "$pthread_setname_np" = "yes" ; then
5000 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5001 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5004 if test "$tcg_interpreter" = "yes"; then
5005 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5006 elif test "$ARCH" = "sparc64" ; then
5007 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5008 elif test "$ARCH" = "s390x" ; then
5009 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5010 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5011 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5012 elif test "$ARCH" = "ppc64" ; then
5013 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5014 else
5015 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5017 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5019 echo "TOOLS=$tools" >> $config_host_mak
5020 echo "ROMS=$roms" >> $config_host_mak
5021 echo "MAKE=$make" >> $config_host_mak
5022 echo "INSTALL=$install" >> $config_host_mak
5023 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5024 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5025 if test -n "$libtool"; then
5026 echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
5027 echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
5028 else
5029 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5030 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5032 echo "PYTHON=$python" >> $config_host_mak
5033 echo "CC=$cc" >> $config_host_mak
5034 if $iasl -h > /dev/null 2>&1; then
5035 echo "IASL=$iasl" >> $config_host_mak
5037 echo "CC_I386=$cc_i386" >> $config_host_mak
5038 echo "HOST_CC=$host_cc" >> $config_host_mak
5039 echo "CXX=$cxx" >> $config_host_mak
5040 echo "OBJCC=$objcc" >> $config_host_mak
5041 echo "AR=$ar" >> $config_host_mak
5042 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5043 echo "AS=$as" >> $config_host_mak
5044 echo "CPP=$cpp" >> $config_host_mak
5045 echo "OBJCOPY=$objcopy" >> $config_host_mak
5046 echo "LD=$ld" >> $config_host_mak
5047 echo "NM=$nm" >> $config_host_mak
5048 echo "WINDRES=$windres" >> $config_host_mak
5049 echo "LIBTOOL=$libtool" >> $config_host_mak
5050 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5051 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5052 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5053 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5054 if test "$sparse" = "yes" ; then
5055 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
5056 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
5057 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
5058 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5059 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5061 if test "$cross_prefix" != ""; then
5062 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5063 else
5064 echo "AUTOCONF_HOST := " >> $config_host_mak
5066 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5067 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5068 echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
5069 echo "LIBS+=$LIBS" >> $config_host_mak
5070 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5071 echo "EXESUF=$EXESUF" >> $config_host_mak
5072 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5073 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5074 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5075 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5076 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5077 if test "$gcov" = "yes" ; then
5078 echo "CONFIG_GCOV=y" >> $config_host_mak
5079 echo "GCOV=$gcov_tool" >> $config_host_mak
5082 # use included Linux headers
5083 if test "$linux" = "yes" ; then
5084 mkdir -p linux-headers
5085 case "$cpu" in
5086 i386|x86_64|x32)
5087 linux_arch=x86
5089 ppcemb|ppc|ppc64)
5090 linux_arch=powerpc
5092 s390x)
5093 linux_arch=s390
5095 aarch64)
5096 linux_arch=arm64
5098 mips64)
5099 linux_arch=mips
5102 # For most CPUs the kernel architecture name and QEMU CPU name match.
5103 linux_arch="$cpu"
5105 esac
5106 # For non-KVM architectures we will not have asm headers
5107 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5108 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5112 for target in $target_list; do
5113 target_dir="$target"
5114 config_target_mak=$target_dir/config-target.mak
5115 target_name=`echo $target | cut -d '-' -f 1`
5116 target_bigendian="no"
5118 case "$target_name" in
5119 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5120 target_bigendian=yes
5122 esac
5123 target_softmmu="no"
5124 target_user_only="no"
5125 target_linux_user="no"
5126 target_bsd_user="no"
5127 case "$target" in
5128 ${target_name}-softmmu)
5129 target_softmmu="yes"
5131 ${target_name}-linux-user)
5132 if test "$linux" != "yes" ; then
5133 error_exit "Target '$target' is only available on a Linux host"
5135 target_user_only="yes"
5136 target_linux_user="yes"
5138 ${target_name}-bsd-user)
5139 if test "$bsd" != "yes" ; then
5140 error_exit "Target '$target' is only available on a BSD host"
5142 target_user_only="yes"
5143 target_bsd_user="yes"
5146 error_exit "Target '$target' not recognised"
5147 exit 1
5149 esac
5151 mkdir -p $target_dir
5152 echo "# Automatically generated by configure - do not modify" > $config_target_mak
5154 bflt="no"
5155 interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
5156 gdb_xml_files=""
5158 TARGET_ARCH="$target_name"
5159 TARGET_BASE_ARCH=""
5160 TARGET_ABI_DIR=""
5162 case "$target_name" in
5163 i386)
5165 x86_64)
5166 TARGET_BASE_ARCH=i386
5168 alpha)
5170 arm|armeb)
5171 TARGET_ARCH=arm
5172 bflt="yes"
5173 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5175 aarch64)
5176 TARGET_BASE_ARCH=arm
5177 bflt="yes"
5178 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5180 cris)
5182 lm32)
5184 m68k)
5185 bflt="yes"
5186 gdb_xml_files="cf-core.xml cf-fp.xml"
5188 microblaze|microblazeel)
5189 TARGET_ARCH=microblaze
5190 bflt="yes"
5192 mips|mipsel)
5193 TARGET_ARCH=mips
5194 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5196 mipsn32|mipsn32el)
5197 TARGET_ARCH=mips64
5198 TARGET_BASE_ARCH=mips
5199 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5200 echo "TARGET_ABI32=y" >> $config_target_mak
5202 mips64|mips64el)
5203 TARGET_ARCH=mips64
5204 TARGET_BASE_ARCH=mips
5205 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5207 moxie)
5209 or32)
5210 TARGET_ARCH=openrisc
5211 TARGET_BASE_ARCH=openrisc
5213 ppc)
5214 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5216 ppcemb)
5217 TARGET_BASE_ARCH=ppc
5218 TARGET_ABI_DIR=ppc
5219 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5221 ppc64)
5222 TARGET_BASE_ARCH=ppc
5223 TARGET_ABI_DIR=ppc
5224 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5226 ppc64le)
5227 TARGET_ARCH=ppc64
5228 TARGET_BASE_ARCH=ppc
5229 TARGET_ABI_DIR=ppc
5230 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5232 ppc64abi32)
5233 TARGET_ARCH=ppc64
5234 TARGET_BASE_ARCH=ppc
5235 TARGET_ABI_DIR=ppc
5236 echo "TARGET_ABI32=y" >> $config_target_mak
5237 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5239 sh4|sh4eb)
5240 TARGET_ARCH=sh4
5241 bflt="yes"
5243 sparc)
5245 sparc64)
5246 TARGET_BASE_ARCH=sparc
5248 sparc32plus)
5249 TARGET_ARCH=sparc64
5250 TARGET_BASE_ARCH=sparc
5251 TARGET_ABI_DIR=sparc
5252 echo "TARGET_ABI32=y" >> $config_target_mak
5254 s390x)
5255 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml"
5257 tricore)
5259 unicore32)
5261 xtensa|xtensaeb)
5262 TARGET_ARCH=xtensa
5265 error_exit "Unsupported target CPU"
5267 esac
5268 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5269 if [ "$TARGET_BASE_ARCH" = "" ]; then
5270 TARGET_BASE_ARCH=$TARGET_ARCH
5273 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5275 upper() {
5276 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5279 target_arch_name="`upper $TARGET_ARCH`"
5280 echo "TARGET_$target_arch_name=y" >> $config_target_mak
5281 echo "TARGET_NAME=$target_name" >> $config_target_mak
5282 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5283 if [ "$TARGET_ABI_DIR" = "" ]; then
5284 TARGET_ABI_DIR=$TARGET_ARCH
5286 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5287 if [ "$HOST_VARIANT_DIR" != "" ]; then
5288 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5290 case "$target_name" in
5291 i386|x86_64)
5292 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5293 echo "CONFIG_XEN=y" >> $config_target_mak
5294 if test "$xen_pci_passthrough" = yes; then
5295 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5300 esac
5301 case "$target_name" in
5302 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5303 # Make sure the target and host cpus are compatible
5304 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5305 \( "$target_name" = "$cpu" -o \
5306 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5307 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
5308 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
5309 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5310 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5311 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
5312 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
5313 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
5314 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
5315 echo "CONFIG_KVM=y" >> $config_target_mak
5316 if test "$vhost_net" = "yes" ; then
5317 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5320 esac
5321 if test "$target_bigendian" = "yes" ; then
5322 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5324 if test "$target_softmmu" = "yes" ; then
5325 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5327 if test "$target_user_only" = "yes" ; then
5328 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5329 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5331 if test "$target_linux_user" = "yes" ; then
5332 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5334 list=""
5335 if test ! -z "$gdb_xml_files" ; then
5336 for x in $gdb_xml_files; do
5337 list="$list $source_path/gdb-xml/$x"
5338 done
5339 echo "TARGET_XML_FILES=$list" >> $config_target_mak
5342 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5343 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5345 if test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then
5346 echo "CONFIG_USE_GUEST_BASE=y" >> $config_target_mak
5348 if test "$target_bsd_user" = "yes" ; then
5349 echo "CONFIG_BSD_USER=y" >> $config_target_mak
5352 # generate QEMU_CFLAGS/LDFLAGS for targets
5354 cflags=""
5355 ldflags=""
5357 for i in $ARCH $TARGET_BASE_ARCH ; do
5358 case "$i" in
5359 alpha)
5360 echo "CONFIG_ALPHA_DIS=y" >> $config_target_mak
5361 echo "CONFIG_ALPHA_DIS=y" >> config-all-disas.mak
5363 aarch64)
5364 if test -n "${cxx}"; then
5365 echo "CONFIG_ARM_A64_DIS=y" >> $config_target_mak
5366 echo "CONFIG_ARM_A64_DIS=y" >> config-all-disas.mak
5369 arm)
5370 echo "CONFIG_ARM_DIS=y" >> $config_target_mak
5371 echo "CONFIG_ARM_DIS=y" >> config-all-disas.mak
5372 if test -n "${cxx}"; then
5373 echo "CONFIG_ARM_A64_DIS=y" >> $config_target_mak
5374 echo "CONFIG_ARM_A64_DIS=y" >> config-all-disas.mak
5377 cris)
5378 echo "CONFIG_CRIS_DIS=y" >> $config_target_mak
5379 echo "CONFIG_CRIS_DIS=y" >> config-all-disas.mak
5381 hppa)
5382 echo "CONFIG_HPPA_DIS=y" >> $config_target_mak
5383 echo "CONFIG_HPPA_DIS=y" >> config-all-disas.mak
5385 i386|x86_64|x32)
5386 echo "CONFIG_I386_DIS=y" >> $config_target_mak
5387 echo "CONFIG_I386_DIS=y" >> config-all-disas.mak
5389 ia64*)
5390 echo "CONFIG_IA64_DIS=y" >> $config_target_mak
5391 echo "CONFIG_IA64_DIS=y" >> config-all-disas.mak
5393 lm32)
5394 echo "CONFIG_LM32_DIS=y" >> $config_target_mak
5395 echo "CONFIG_LM32_DIS=y" >> config-all-disas.mak
5397 m68k)
5398 echo "CONFIG_M68K_DIS=y" >> $config_target_mak
5399 echo "CONFIG_M68K_DIS=y" >> config-all-disas.mak
5401 microblaze*)
5402 echo "CONFIG_MICROBLAZE_DIS=y" >> $config_target_mak
5403 echo "CONFIG_MICROBLAZE_DIS=y" >> config-all-disas.mak
5405 mips*)
5406 echo "CONFIG_MIPS_DIS=y" >> $config_target_mak
5407 echo "CONFIG_MIPS_DIS=y" >> config-all-disas.mak
5409 moxie*)
5410 echo "CONFIG_MOXIE_DIS=y" >> $config_target_mak
5411 echo "CONFIG_MOXIE_DIS=y" >> config-all-disas.mak
5413 or32)
5414 echo "CONFIG_OPENRISC_DIS=y" >> $config_target_mak
5415 echo "CONFIG_OPENRISC_DIS=y" >> config-all-disas.mak
5417 ppc*)
5418 echo "CONFIG_PPC_DIS=y" >> $config_target_mak
5419 echo "CONFIG_PPC_DIS=y" >> config-all-disas.mak
5421 s390*)
5422 echo "CONFIG_S390_DIS=y" >> $config_target_mak
5423 echo "CONFIG_S390_DIS=y" >> config-all-disas.mak
5425 sh4)
5426 echo "CONFIG_SH4_DIS=y" >> $config_target_mak
5427 echo "CONFIG_SH4_DIS=y" >> config-all-disas.mak
5429 sparc*)
5430 echo "CONFIG_SPARC_DIS=y" >> $config_target_mak
5431 echo "CONFIG_SPARC_DIS=y" >> config-all-disas.mak
5433 xtensa*)
5434 echo "CONFIG_XTENSA_DIS=y" >> $config_target_mak
5435 echo "CONFIG_XTENSA_DIS=y" >> config-all-disas.mak
5437 esac
5438 done
5439 if test "$tcg_interpreter" = "yes" ; then
5440 echo "CONFIG_TCI_DIS=y" >> $config_target_mak
5441 echo "CONFIG_TCI_DIS=y" >> config-all-disas.mak
5444 case "$ARCH" in
5445 alpha)
5446 # Ensure there's only a single GP
5447 cflags="-msmall-data $cflags"
5449 esac
5451 if test "$gprof" = "yes" ; then
5452 echo "TARGET_GPROF=yes" >> $config_target_mak
5453 if test "$target_linux_user" = "yes" ; then
5454 cflags="-p $cflags"
5455 ldflags="-p $ldflags"
5457 if test "$target_softmmu" = "yes" ; then
5458 ldflags="-p $ldflags"
5459 echo "GPROF_CFLAGS=-p" >> $config_target_mak
5463 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5464 ldflags="$ldflags $textseg_ldflags"
5467 echo "LDFLAGS+=$ldflags" >> $config_target_mak
5468 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5470 done # for target in $targets
5472 if [ "$pixman" = "internal" ]; then
5473 echo "config-host.h: subdir-pixman" >> $config_host_mak
5476 if test "$rdma" = "yes" ; then
5477 echo "CONFIG_RDMA=y" >> $config_host_mak
5480 if [ "$dtc_internal" = "yes" ]; then
5481 echo "config-host.h: subdir-dtc" >> $config_host_mak
5484 if test "$numa" = "yes"; then
5485 echo "CONFIG_NUMA=y" >> $config_host_mak
5488 # build tree in object directory in case the source is not in the current directory
5489 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5490 DIRS="$DIRS fsdev"
5491 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
5492 DIRS="$DIRS roms/seabios roms/vgabios"
5493 DIRS="$DIRS qapi-generated"
5494 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5495 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5496 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
5497 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
5498 FILES="$FILES pc-bios/spapr-rtas/Makefile"
5499 FILES="$FILES pc-bios/s390-ccw/Makefile"
5500 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5501 FILES="$FILES pc-bios/qemu-icon.bmp"
5502 for bios_file in \
5503 $source_path/pc-bios/*.bin \
5504 $source_path/pc-bios/*.aml \
5505 $source_path/pc-bios/*.rom \
5506 $source_path/pc-bios/*.dtb \
5507 $source_path/pc-bios/*.img \
5508 $source_path/pc-bios/openbios-* \
5509 $source_path/pc-bios/u-boot.* \
5510 $source_path/pc-bios/palcode-*
5512 FILES="$FILES pc-bios/`basename $bios_file`"
5513 done
5514 for test_file in `find $source_path/tests/acpi-test-data -type f`
5516 FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5517 done
5518 mkdir -p $DIRS
5519 for f in $FILES ; do
5520 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5521 symlink "$source_path/$f" "$f"
5523 done
5525 # temporary config to build submodules
5526 for rom in seabios vgabios ; do
5527 config_mak=roms/$rom/config.mak
5528 echo "# Automatically generated by configure - do not modify" > $config_mak
5529 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5530 echo "AS=$as" >> $config_mak
5531 echo "CC=$cc" >> $config_mak
5532 echo "BCC=bcc" >> $config_mak
5533 echo "CPP=$cpp" >> $config_mak
5534 echo "OBJCOPY=objcopy" >> $config_mak
5535 echo "IASL=$iasl" >> $config_mak
5536 echo "LD=$ld" >> $config_mak
5537 done
5539 # set up qemu-iotests in this build directory
5540 iotests_common_env="tests/qemu-iotests/common.env"
5541 iotests_check="tests/qemu-iotests/check"
5543 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5544 echo >> "$iotests_common_env"
5545 echo "export PYTHON='$python'" >> "$iotests_common_env"
5547 if [ ! -e "$iotests_check" ]; then
5548 symlink "$source_path/$iotests_check" "$iotests_check"
5551 # Save the configure command line for later reuse.
5552 cat <<EOD >config.status
5553 #!/bin/sh
5554 # Generated by configure.
5555 # Run this file to recreate the current configuration.
5556 # Compiler output produced by configure, useful for debugging
5557 # configure, is in config.log if it exists.
5559 printf "exec" >>config.status
5560 printf " '%s'" "$0" "$@" >>config.status
5561 echo >>config.status
5562 chmod +x config.status
5564 rm -r "$TMPDIR1"