Merge remote-tracking branch 'qemu/master'
[qemu/ar7.git] / configure
blob5931bf26bd66804749add63ab6623848705af086
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 -Wno-override-init|\
96 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
97 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
100 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
102 esac
103 done
106 compile_object() {
107 do_cc $QEMU_CFLAGS -c -o $TMPO $TMPC
110 compile_prog() {
111 local_cflags="$1"
112 local_ldflags="$2"
113 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
116 do_libtool() {
117 local mode=$1
118 shift
119 # Run the compiler, capturing its output to the log.
120 echo $libtool $mode --tag=CC $cc "$@" >> config.log
121 $libtool $mode --tag=CC $cc "$@" >> config.log 2>&1 || return $?
122 # Test passed. If this is an --enable-werror build, rerun
123 # the test with -Werror and bail out if it fails. This
124 # makes warning-generating-errors in configure test code
125 # obvious to developers.
126 if test "$werror" != "yes"; then
127 return 0
129 # Don't bother rerunning the compile if we were already using -Werror
130 case "$*" in
131 *-Werror*)
132 return 0
134 esac
135 echo $libtool $mode --tag=CC $cc -Werror "$@" >> config.log
136 $libtool $mode --tag=CC $cc -Werror "$@" >> config.log 2>&1 && return $?
137 error_exit "configure test passed without -Werror but failed with -Werror." \
138 "This is probably a bug in the configure script. The failing command" \
139 "will be at the bottom of config.log." \
140 "You can run configure with --disable-werror to bypass this check."
143 libtool_prog() {
144 do_libtool --mode=compile $QEMU_CFLAGS -c -fPIE -DPIE -o $TMPO $TMPC || return $?
145 do_libtool --mode=link $LDFLAGS -o $TMPA $TMPL -rpath /usr/local/lib
148 # symbolically link $1 to $2. Portable version of "ln -sf".
149 symlink() {
150 rm -rf "$2"
151 mkdir -p "$(dirname "$2")"
152 ln -s "$1" "$2"
155 # check whether a command is available to this shell (may be either an
156 # executable or a builtin)
157 has() {
158 type "$1" >/dev/null 2>&1
161 # search for an executable in PATH
162 path_of() {
163 local_command="$1"
164 local_ifs="$IFS"
165 local_dir=""
167 # pathname has a dir component?
168 if [ "${local_command#*/}" != "$local_command" ]; then
169 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
170 echo "$local_command"
171 return 0
174 if [ -z "$local_command" ]; then
175 return 1
178 IFS=:
179 for local_dir in $PATH; do
180 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
181 echo "$local_dir/$local_command"
182 IFS="${local_ifs:-$(printf ' \t\n')}"
183 return 0
185 done
186 # not found
187 IFS="${local_ifs:-$(printf ' \t\n')}"
188 return 1
191 have_backend () {
192 echo "$trace_backends" | grep "$1" >/dev/null
195 # default parameters
196 source_path=`dirname "$0"`
197 cpu=""
198 iasl="iasl"
199 interp_prefix="/usr/gnemul/qemu-%M"
200 static="no"
201 cross_prefix=""
202 audio_drv_list=""
203 block_drv_rw_whitelist=""
204 block_drv_ro_whitelist=""
205 host_cc="cc"
206 libs_softmmu=""
207 libs_tools=""
208 audio_pt_int=""
209 audio_win_int=""
210 cc_i386=i386-pc-linux-gnu-gcc
211 libs_qga=""
212 debug_info="yes"
213 stack_protector=""
215 # Don't accept a target_list environment variable.
216 unset target_list
218 # Default value for a variable defining feature "foo".
219 # * foo="no" feature will only be used if --enable-foo arg is given
220 # * foo="" feature will be searched for, and if found, will be used
221 # unless --disable-foo is given
222 # * foo="yes" this value will only be set by --enable-foo flag.
223 # feature will searched for,
224 # if not found, configure exits with error
226 # Always add --enable-foo and --disable-foo command line args.
227 # Distributions want to ensure that several features are compiled in, and it
228 # is impossible without a --enable-foo that exits if a feature is not found.
230 bluez=""
231 brlapi=""
232 curl=""
233 curses=""
234 docs=""
235 fdt=""
236 netmap="no"
237 pixman=""
238 sdl=""
239 sdlabi="1.2"
240 virtfs=""
241 vnc="yes"
242 sparse="no"
243 uuid=""
244 vde=""
245 vnc_tls=""
246 vnc_sasl=""
247 vnc_jpeg=""
248 vnc_png=""
249 vnc_ws=""
250 xen=""
251 xen_ctrl_version=""
252 xen_pci_passthrough=""
253 linux_aio=""
254 cap_ng=""
255 attr=""
256 libattr=""
257 xfs=""
259 vhost_net="no"
260 vhost_scsi="no"
261 kvm="no"
262 rdma=""
263 gprof="no"
264 debug_tcg="no"
265 debug="no"
266 strip_opt="yes"
267 tcg_interpreter="no"
268 bigendian="no"
269 mingw32="no"
270 gcov="no"
271 gcov_tool="gcov"
272 EXESUF=""
273 DSOSUF=".so"
274 LDFLAGS_SHARED="-shared"
275 modules="no"
276 prefix="/usr/local"
277 mandir="\${prefix}/share/man"
278 datadir="\${prefix}/share"
279 qemu_docdir="\${prefix}/share/doc/qemu"
280 bindir="\${prefix}/bin"
281 libdir="\${prefix}/lib"
282 libexecdir="\${prefix}/libexec"
283 includedir="\${prefix}/include"
284 sysconfdir="\${prefix}/etc"
285 local_statedir="\${prefix}/var"
286 confsuffix="/qemu"
287 slirp="yes"
288 fmod_lib=""
289 fmod_inc=""
290 oss_lib=""
291 bsd="no"
292 haiku="no"
293 linux="no"
294 solaris="no"
295 profiler="no"
296 cocoa="no"
297 softmmu="yes"
298 linux_user="no"
299 bsd_user="no"
300 guest_base="yes"
301 aix="no"
302 blobs="yes"
303 pkgversion=""
304 pie=""
305 zero_malloc=""
306 qom_cast_debug="yes"
307 trace_backends="nop"
308 trace_file="trace"
309 spice=""
310 rbd=""
311 smartcard_nss=""
312 libusb=""
313 usb_redir=""
314 opengl=""
315 zlib="yes"
316 lzo=""
317 snappy=""
318 bzip2=""
319 guest_agent=""
320 guest_agent_with_vss="no"
321 vss_win32_sdk=""
322 win_sdk="no"
323 want_tools="yes"
324 libiscsi=""
325 libnfs=""
326 coroutine=""
327 coroutine_pool=""
328 seccomp=""
329 glusterfs=""
330 glusterfs_discard="no"
331 glusterfs_zerofill="no"
332 archipelago="no"
333 gtk=""
334 gtkabi=""
335 vte=""
336 tpm="yes"
337 libssh2=""
338 vhdx=""
339 quorum=""
340 numa=""
341 tcmalloc="no"
343 # parse CC options first
344 for opt do
345 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
346 case "$opt" in
347 --cross-prefix=*) cross_prefix="$optarg"
349 --cc=*) CC="$optarg"
351 --cxx=*) CXX="$optarg"
353 --source-path=*) source_path="$optarg"
355 --cpu=*) cpu="$optarg"
357 --extra-cflags=*) QEMU_CFLAGS="$optarg $QEMU_CFLAGS"
358 EXTRA_CFLAGS="$optarg"
360 --extra-ldflags=*) LDFLAGS="$optarg $LDFLAGS"
361 EXTRA_LDFLAGS="$optarg"
363 --enable-debug-info) debug_info="yes"
365 --disable-debug-info) debug_info="no"
367 esac
368 done
369 # OS specific
370 # Using uname is really, really broken. Once we have the right set of checks
371 # we can eliminate its usage altogether.
373 # Preferred compiler:
374 # ${CC} (if set)
375 # ${cross_prefix}gcc (if cross-prefix specified)
376 # system compiler
377 if test -z "${CC}${cross_prefix}"; then
378 cc="$host_cc"
379 else
380 cc="${CC-${cross_prefix}gcc}"
383 if test -z "${CXX}${cross_prefix}"; then
384 cxx="c++"
385 else
386 cxx="${CXX-${cross_prefix}g++}"
389 ar="${AR-${cross_prefix}ar}"
390 as="${AS-${cross_prefix}as}"
391 cpp="${CPP-$cc -E}"
392 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
393 ld="${LD-${cross_prefix}ld}"
394 libtool="${LIBTOOL-${cross_prefix}libtool}"
395 nm="${NM-${cross_prefix}nm}"
396 strip="${STRIP-${cross_prefix}strip}"
397 windres="${WINDRES-${cross_prefix}windres}"
398 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
399 query_pkg_config() {
400 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
402 pkg_config=query_pkg_config
403 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
404 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
406 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
407 ARFLAGS="${ARFLAGS-rv}"
409 # default flags for all hosts
410 QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
411 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
412 QEMU_CFLAGS="-Wmissing-format-attribute $QEMU_CFLAGS"
413 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
414 QEMU_CFLAGS="-Wno-unused-parameter $QEMU_CFLAGS"
415 QEMU_CFLAGS="-Wno-missing-field-initializers $QEMU_CFLAGS"
416 QEMU_CFLAGS="-Wno-sign-compare $QEMU_CFLAGS"
417 QEMU_CFLAGS="-Wno-override-init $QEMU_CFLAGS"
418 QEMU_CFLAGS="-Wno-error=format $QEMU_CFLAGS"
419 QEMU_CFLAGS="-Wno-error=format-extra-args $QEMU_CFLAGS"
420 QEMU_CFLAGS="-Wno-error=parentheses $QEMU_CFLAGS"
421 QEMU_CFLAGS="-Wextra $QEMU_CFLAGS"
422 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
423 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
424 if test "$debug_info" = "yes"; then
425 CFLAGS="-g $CFLAGS"
426 LDFLAGS="-g $LDFLAGS"
429 # make source path absolute
430 source_path=`cd "$source_path"; pwd`
432 cc_macros=`$cc $QEMU_CFLAGS -E -dD - </dev/null`
434 # running configure in the source tree?
435 # we know that's the case if configure is there.
436 if test -f "./configure"; then
437 pwd_is_source_path="y"
438 else
439 pwd_is_source_path="n"
442 check_define() {
443 cat > $TMPC <<EOF
444 #if !defined($1)
445 #error $1 not defined
446 #endif
447 int main(void) { return 0; }
449 compile_object
452 if check_define __linux__ ; then
453 targetos="Linux"
454 elif check_define _WIN32 ; then
455 targetos='MINGW32'
456 elif check_define __OpenBSD__ ; then
457 targetos='OpenBSD'
458 elif check_define __sun__ ; then
459 targetos='SunOS'
460 elif check_define __HAIKU__ ; then
461 targetos='Haiku'
462 else
463 targetos=`uname -s`
466 # Some host OSes need non-standard checks for which CPU to use.
467 # Note that these checks are broken for cross-compilation: if you're
468 # cross-compiling to one of these OSes then you'll need to specify
469 # the correct CPU with the --cpu option.
470 case $targetos in
471 Darwin)
472 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
473 # run 64-bit userspace code.
474 # If the user didn't specify a CPU explicitly and the kernel says this is
475 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
476 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
477 cpu="x86_64"
480 SunOS)
481 # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
482 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
483 cpu="x86_64"
485 esac
487 if test ! -z "$cpu" ; then
488 # command line argument
490 elif check_define __i386__ ; then
491 cpu="i386"
492 elif check_define __x86_64__ ; then
493 if check_define __ILP32__ ; then
494 cpu="x32"
495 else
496 cpu="x86_64"
498 elif check_define __sparc__ ; then
499 if check_define __arch64__ ; then
500 cpu="sparc64"
501 else
502 cpu="sparc"
504 elif check_define _ARCH_PPC ; then
505 if check_define _ARCH_PPC64 ; then
506 cpu="ppc64"
507 else
508 cpu="ppc"
510 elif check_define __mips__ ; then
511 if check_define __mips64 ; then
512 cpu="mips64"
513 else
514 cpu="mips"
516 elif check_define __ia64__ ; then
517 cpu="ia64"
518 elif check_define __s390__ ; then
519 if check_define __s390x__ ; then
520 cpu="s390x"
521 else
522 cpu="s390"
524 elif check_define __arm__ ; then
525 cpu="arm"
526 elif check_define __aarch64__ ; then
527 cpu="aarch64"
528 elif check_define __hppa__ ; then
529 cpu="hppa"
530 else
531 cpu=`uname -m`
534 ARCH=
535 # Normalise host CPU name and set ARCH.
536 # Note that this case should only have supported host CPUs, not guests.
537 case "$cpu" in
538 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
539 cpu="$cpu"
541 i386|i486|i586|i686|i86pc|BePC)
542 cpu="i386"
544 x86_64|amd64)
545 cpu="x86_64"
547 armv*b|armv*l|arm)
548 cpu="arm"
550 aarch64)
551 cpu="aarch64"
553 mips*)
554 cpu="mips"
555 if check_define __MIPSEL__ ; then
556 cpu="${cpu}el"
559 sparc|sun4[cdmuv])
560 cpu="sparc"
562 sh4)
563 cpu="sh4"
566 # This will result in either an error or falling back to TCI later
567 ARCH=unknown
569 esac
570 if test -z "$ARCH"; then
571 ARCH="$cpu"
574 # OS specific
576 # host *BSD for user mode
577 HOST_VARIANT_DIR=""
579 case $targetos in
580 CYGWIN*)
581 mingw32="yes"
582 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
583 audio_possible_drivers="winwave sdl"
584 audio_drv_list="winwave"
586 MINGW32*)
587 mingw32="yes"
588 audio_possible_drivers="winwave dsound sdl fmod"
589 audio_drv_list="winwave"
591 GNU/kFreeBSD)
592 bsd="yes"
593 audio_drv_list="oss"
594 audio_possible_drivers="oss sdl esd pa"
596 FreeBSD)
597 bsd="yes"
598 make="${MAKE-gmake}"
599 audio_drv_list="oss"
600 audio_possible_drivers="oss sdl esd pa"
601 # needed for kinfo_getvmmap(3) in libutil.h
602 LIBS="-lutil $LIBS"
603 netmap="" # enable netmap autodetect
604 HOST_VARIANT_DIR="freebsd"
606 DragonFly)
607 bsd="yes"
608 make="${MAKE-gmake}"
609 audio_drv_list="oss"
610 audio_possible_drivers="oss sdl esd pa"
611 HOST_VARIANT_DIR="dragonfly"
613 NetBSD)
614 bsd="yes"
615 make="${MAKE-gmake}"
616 audio_drv_list="oss"
617 audio_possible_drivers="oss sdl esd"
618 oss_lib="-lossaudio"
619 HOST_VARIANT_DIR="netbsd"
621 OpenBSD)
622 bsd="yes"
623 make="${MAKE-gmake}"
624 audio_drv_list="sdl"
625 audio_possible_drivers="sdl esd"
626 HOST_VARIANT_DIR="openbsd"
628 Darwin)
629 bsd="yes"
630 darwin="yes"
631 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
632 if [ "$cpu" = "x86_64" ] ; then
633 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
634 LDFLAGS="-arch x86_64 $LDFLAGS"
636 cocoa="yes"
637 audio_drv_list="coreaudio"
638 audio_possible_drivers="coreaudio sdl fmod"
639 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
640 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
641 # Disable attempts to use ObjectiveC features in os/object.h since they
642 # won't work when we're compiling with gcc as a C compiler.
643 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
644 HOST_VARIANT_DIR="darwin"
646 SunOS)
647 solaris="yes"
648 make="${MAKE-gmake}"
649 install="${INSTALL-ginstall}"
650 ld="gld"
651 smbd="${SMBD-/usr/sfw/sbin/smbd}"
652 needs_libsunmath="no"
653 solarisrev=`uname -r | cut -f2 -d.`
654 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
655 if test "$solarisrev" -le 9 ; then
656 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
657 needs_libsunmath="yes"
658 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
659 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
660 LIBS="-lsunmath $LIBS"
661 else
662 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
663 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
664 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
665 "Studio 11 can be downloaded from www.sun.com."
669 if test -f /usr/include/sys/soundcard.h ; then
670 audio_drv_list="oss"
672 audio_possible_drivers="oss sdl"
673 # needed for CMSG_ macros in sys/socket.h
674 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
675 # needed for TIOCWIN* defines in termios.h
676 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
677 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
678 solarisnetlibs="-lsocket -lnsl -lresolv"
679 LIBS="$solarisnetlibs $LIBS"
680 libs_qga="$solarisnetlibs $libs_qga"
682 AIX)
683 aix="yes"
684 make="${MAKE-gmake}"
686 Haiku)
687 haiku="yes"
688 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
689 LIBS="-lposix_error_mapper -lnetwork $LIBS"
692 audio_drv_list="oss"
693 audio_possible_drivers="oss alsa sdl esd pa"
694 linux="yes"
695 linux_user="yes"
696 kvm="yes"
697 vhost_net="yes"
698 vhost_scsi="yes"
699 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" -o "$cpu" = "x32" ] ; then
700 audio_possible_drivers="$audio_possible_drivers fmod"
702 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
704 esac
706 if [ "$bsd" = "yes" ] ; then
707 if [ "$darwin" != "yes" ] ; then
708 bsd_user="yes"
712 : ${make=${MAKE-make}}
713 : ${install=${INSTALL-install}}
714 : ${python=${PYTHON-python}}
715 : ${smbd=${SMBD-/usr/sbin/smbd}}
717 # Default objcc to clang if available, otherwise use CC
718 if has clang; then
719 objcc=clang
720 else
721 objcc="$cc"
724 if test "$mingw32" = "yes" ; then
725 EXESUF=".exe"
726 DSOSUF=".dll"
727 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
728 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
729 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
730 # MinGW-w64 needs _POSIX defined.
731 QEMU_CFLAGS="-D_POSIX=1 $QEMU_CFLAGS"
732 # MinGW needs -mthreads for TLS and macro _MT.
733 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
734 QEMU_CFLAGS="-I\$(SRC_PATH)/hosts/w32/include $QEMU_CFLAGS"
735 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
736 cat > $TMPC << EOF
737 int main(void) { return 0; }
739 if compile_prog "" "-liberty" ; then
740 LIBS="-liberty $LIBS"
742 prefix="c:/Program Files/QEMU"
743 mandir="\${prefix}"
744 datadir="\${prefix}"
745 qemu_docdir="\${prefix}"
746 bindir="\${prefix}"
747 sysconfdir="\${prefix}"
748 local_statedir=
749 confsuffix=""
750 libs_qga="-lws2_32 -lwinmm -lpowrprof $libs_qga"
753 werror=""
755 for opt do
756 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
757 case "$opt" in
758 --help|-h) show_help=yes
760 --version|-V) exec cat $source_path/VERSION
762 --prefix=*) prefix="$optarg"
764 --interp-prefix=*) interp_prefix="$optarg"
766 --source-path=*)
768 --cross-prefix=*)
770 --cc=*)
772 --host-cc=*) host_cc="$optarg"
774 --cxx=*)
776 --iasl=*) iasl="$optarg"
778 --objcc=*) objcc="$optarg"
780 --make=*) make="$optarg"
782 --install=*) install="$optarg"
784 --python=*) python="$optarg"
786 --gcov=*) gcov_tool="$optarg"
788 --smbd=*) smbd="$optarg"
790 --extra-cflags=*)
792 --extra-ldflags=*)
794 --enable-debug-info)
796 --disable-debug-info)
798 --enable-modules)
799 modules="yes"
801 --cpu=*)
803 --target-list=*) target_list="$optarg"
805 --enable-trace-backends=*) trace_backends="$optarg"
807 # XXX: backwards compatibility
808 --enable-trace-backend=*) trace_backends="$optarg"
810 --with-trace-file=*) trace_file="$optarg"
812 --enable-gprof) gprof="yes"
814 --enable-gcov) gcov="yes"
816 --static)
817 static="yes"
818 LDFLAGS="-static $LDFLAGS"
819 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
821 --mandir=*) mandir="$optarg"
823 --bindir=*) bindir="$optarg"
825 --libdir=*) libdir="$optarg"
827 --libexecdir=*) libexecdir="$optarg"
829 --includedir=*) includedir="$optarg"
831 --datadir=*) datadir="$optarg"
833 --with-confsuffix=*) confsuffix="$optarg"
835 --docdir=*) qemu_docdir="$optarg"
837 --sysconfdir=*) sysconfdir="$optarg"
839 --localstatedir=*) local_statedir="$optarg"
841 --sbindir=*|--sharedstatedir=*|\
842 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
843 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
844 # These switches are silently ignored, for compatibility with
845 # autoconf-generated configure scripts. This allows QEMU's
846 # configure to be used by RPM and similar macros that set
847 # lots of directory switches by default.
849 --with-system-pixman) pixman="system"
851 --without-system-pixman) pixman="internal"
853 --without-pixman) pixman="none"
855 --disable-sdl) sdl="no"
857 --enable-sdl) sdl="yes"
859 --with-sdlabi=*) sdlabi="$optarg"
861 --disable-qom-cast-debug) qom_cast_debug="no"
863 --enable-qom-cast-debug) qom_cast_debug="yes"
865 --disable-virtfs) virtfs="no"
867 --enable-virtfs) virtfs="yes"
869 --disable-vnc) vnc="no"
871 --enable-vnc) vnc="yes"
873 --fmod-lib=*) fmod_lib="$optarg"
875 --fmod-inc=*) fmod_inc="$optarg"
877 --oss-lib=*) oss_lib="$optarg"
879 --audio-drv-list=*) audio_drv_list="$optarg"
881 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
883 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
885 --enable-debug-tcg) debug_tcg="yes"
887 --disable-debug-tcg) debug_tcg="no"
889 --enable-debug)
890 # Enable debugging options that aren't excessively noisy
891 debug_tcg="yes"
892 debug="yes"
893 strip_opt="no"
895 --enable-sparse) sparse="yes"
897 --disable-sparse) sparse="no"
899 --disable-strip) strip_opt="no"
901 --disable-vnc-tls) vnc_tls="no"
903 --enable-vnc-tls) vnc_tls="yes"
905 --disable-vnc-sasl) vnc_sasl="no"
907 --enable-vnc-sasl) vnc_sasl="yes"
909 --disable-vnc-jpeg) vnc_jpeg="no"
911 --enable-vnc-jpeg) vnc_jpeg="yes"
913 --disable-vnc-png) vnc_png="no"
915 --enable-vnc-png) vnc_png="yes"
917 --disable-vnc-ws) vnc_ws="no"
919 --enable-vnc-ws) vnc_ws="yes"
921 --disable-slirp) slirp="no"
923 --disable-uuid) uuid="no"
925 --enable-uuid) uuid="yes"
927 --disable-vde) vde="no"
929 --enable-vde) vde="yes"
931 --disable-netmap) netmap="no"
933 --enable-netmap) netmap="yes"
935 --disable-xen) xen="no"
937 --enable-xen) xen="yes"
939 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
941 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
943 --disable-brlapi) brlapi="no"
945 --enable-brlapi) brlapi="yes"
947 --disable-bluez) bluez="no"
949 --enable-bluez) bluez="yes"
951 --disable-kvm) kvm="no"
953 --enable-kvm) kvm="yes"
955 --disable-tcg-interpreter) tcg_interpreter="no"
957 --enable-tcg-interpreter) tcg_interpreter="yes"
959 --disable-cap-ng) cap_ng="no"
961 --enable-cap-ng) cap_ng="yes"
963 --disable-spice) spice="no"
965 --enable-spice) spice="yes"
967 --disable-libiscsi) libiscsi="no"
969 --enable-libiscsi) libiscsi="yes"
971 --disable-libnfs) libnfs="no"
973 --enable-libnfs) libnfs="yes"
975 --enable-profiler) profiler="yes"
977 --disable-cocoa) cocoa="no"
979 --enable-cocoa)
980 cocoa="yes" ;
981 sdl="no" ;
982 audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
984 --disable-system) softmmu="no"
986 --enable-system) softmmu="yes"
988 --disable-user)
989 linux_user="no" ;
990 bsd_user="no" ;
992 --enable-user) ;;
993 --disable-linux-user) linux_user="no"
995 --enable-linux-user) linux_user="yes"
997 --disable-bsd-user) bsd_user="no"
999 --enable-bsd-user) bsd_user="yes"
1001 --enable-guest-base) guest_base="yes"
1003 --disable-guest-base) guest_base="no"
1005 --enable-pie) pie="yes"
1007 --disable-pie) pie="no"
1009 --enable-werror) werror="yes"
1011 --disable-werror) werror="no"
1013 --enable-stack-protector) stack_protector="yes"
1015 --disable-stack-protector) stack_protector="no"
1017 --disable-curses) curses="no"
1019 --enable-curses) curses="yes"
1021 --disable-curl) curl="no"
1023 --enable-curl) curl="yes"
1025 --disable-fdt) fdt="no"
1027 --enable-fdt) fdt="yes"
1029 --disable-linux-aio) linux_aio="no"
1031 --enable-linux-aio) linux_aio="yes"
1033 --disable-attr) attr="no"
1035 --enable-attr) attr="yes"
1037 --disable-blobs) blobs="no"
1039 --with-pkgversion=*) pkgversion=" ($optarg)"
1041 --with-coroutine=*) coroutine="$optarg"
1043 --disable-coroutine-pool) coroutine_pool="no"
1045 --enable-coroutine-pool) coroutine_pool="yes"
1047 --disable-docs) docs="no"
1049 --enable-docs) docs="yes"
1051 --disable-vhost-net) vhost_net="no"
1053 --enable-vhost-net) vhost_net="yes"
1055 --disable-vhost-scsi) vhost_scsi="no"
1057 --enable-vhost-scsi) vhost_scsi="yes"
1059 --disable-opengl) opengl="no"
1061 --enable-opengl) opengl="yes"
1063 --disable-rbd) rbd="no"
1065 --enable-rbd) rbd="yes"
1067 --disable-xfsctl) xfs="no"
1069 --enable-xfsctl) xfs="yes"
1071 --disable-smartcard-nss) smartcard_nss="no"
1073 --enable-smartcard-nss) smartcard_nss="yes"
1075 --disable-libusb) libusb="no"
1077 --enable-libusb) libusb="yes"
1079 --disable-usb-redir) usb_redir="no"
1081 --enable-usb-redir) usb_redir="yes"
1083 --disable-zlib-test) zlib="no"
1085 --disable-lzo) lzo="no"
1087 --enable-lzo) lzo="yes"
1089 --disable-snappy) snappy="no"
1091 --enable-snappy) snappy="yes"
1093 --disable-bzip2) bzip2="no"
1095 --enable-bzip2) bzip2="yes"
1097 --enable-guest-agent) guest_agent="yes"
1099 --disable-guest-agent) guest_agent="no"
1101 --with-vss-sdk) vss_win32_sdk=""
1103 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1105 --without-vss-sdk) vss_win32_sdk="no"
1107 --with-win-sdk) win_sdk=""
1109 --with-win-sdk=*) win_sdk="$optarg"
1111 --without-win-sdk) win_sdk="no"
1113 --enable-tools) want_tools="yes"
1115 --disable-tools) want_tools="no"
1117 --enable-seccomp) seccomp="yes"
1119 --disable-seccomp) seccomp="no"
1121 --disable-glusterfs) glusterfs="no"
1123 --enable-glusterfs) glusterfs="yes"
1125 --disable-archipelago) archipelago="no"
1127 --enable-archipelago) archipelago="yes"
1129 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1130 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1132 --disable-gtk) gtk="no"
1134 --enable-gtk) gtk="yes"
1136 --enable-rdma) rdma="yes"
1138 --disable-rdma) rdma="no"
1140 --with-gtkabi=*) gtkabi="$optarg"
1142 --disable-vte) vte="no"
1144 --enable-vte) vte="yes"
1146 --disable-tpm) tpm="no"
1148 --enable-tpm) tpm="yes"
1150 --disable-libssh2) libssh2="no"
1152 --enable-libssh2) libssh2="yes"
1154 --enable-vhdx) vhdx="yes"
1156 --disable-vhdx) vhdx="no"
1158 --disable-quorum) quorum="no"
1160 --enable-quorum) quorum="yes"
1162 --disable-numa) numa="no"
1164 --enable-numa) numa="yes"
1166 --disable-tcmalloc) tcmalloc="no"
1168 --enable-tcmalloc) tcmalloc="yes"
1171 echo "ERROR: unknown option $opt"
1172 echo "Try '$0 --help' for more information"
1173 exit 1
1175 esac
1176 done
1178 if ! has $python; then
1179 error_exit "Python not found. Use --python=/path/to/python"
1182 # Note that if the Python conditional here evaluates True we will exit
1183 # with status 1 which is a shell 'false' value.
1184 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
1185 error_exit "Cannot use '$python', Python 2.4 or later is required." \
1186 "Note that Python 3 or later is not yet supported." \
1187 "Use --python=/path/to/python to specify a supported Python."
1190 # The -B switch was added in Python 2.6.
1191 # If it is supplied, compiled files are not written.
1192 # Use it for Python versions which support it.
1193 if $python -B -c 'import sys; sys.exit(0)' 2>/dev/null; then
1194 python="$python -B"
1197 case "$cpu" in
1198 ppc)
1199 CPU_CFLAGS="-m32"
1200 LDFLAGS="-m32 $LDFLAGS"
1202 ppc64)
1203 CPU_CFLAGS="-m64"
1204 LDFLAGS="-m64 $LDFLAGS"
1206 sparc)
1207 LDFLAGS="-m32 $LDFLAGS"
1208 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1210 sparc64)
1211 LDFLAGS="-m64 $LDFLAGS"
1212 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1214 s390)
1215 CPU_CFLAGS="-m31"
1216 LDFLAGS="-m31 $LDFLAGS"
1218 s390x)
1219 CPU_CFLAGS="-m64"
1220 LDFLAGS="-m64 $LDFLAGS"
1222 i386)
1223 CPU_CFLAGS="-m32"
1224 LDFLAGS="-m32 $LDFLAGS"
1225 cc_i386='$(CC) -m32'
1227 x86_64)
1228 CPU_CFLAGS="-m64"
1229 LDFLAGS="-m64 $LDFLAGS"
1230 cc_i386='$(CC) -m32'
1232 x32)
1233 CPU_CFLAGS="-mx32"
1234 LDFLAGS="-mx32 $LDFLAGS"
1235 cc_i386='$(CC) -m32'
1237 # No special flags required for other host CPUs
1238 esac
1240 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1241 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1243 default_target_list=""
1245 mak_wilds=""
1247 if [ "$softmmu" = "yes" ]; then
1248 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1250 if [ "$linux_user" = "yes" ]; then
1251 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1253 if [ "$bsd_user" = "yes" ]; then
1254 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1257 for config in $mak_wilds; do
1258 default_target_list="${default_target_list} $(basename "$config" .mak)"
1259 done
1261 if test x"$show_help" = x"yes" ; then
1262 cat << EOF
1264 Usage: configure [options]
1265 Options: [defaults in brackets after descriptions]
1267 Standard options:
1268 --help print this message
1269 --prefix=PREFIX install in PREFIX [$prefix]
1270 --interp-prefix=PREFIX where to find shared libraries, etc.
1271 use %M for cpu name [$interp_prefix]
1272 --target-list=LIST set target list (default: build everything)
1273 $(echo Available targets: $default_target_list | \
1274 fold -s -w 53 | sed -e 's/^/ /')
1276 Advanced options (experts only):
1277 --source-path=PATH path of source code [$source_path]
1278 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1279 --cc=CC use C compiler CC [$cc]
1280 --iasl=IASL use ACPI compiler IASL [$iasl]
1281 --host-cc=CC use C compiler CC [$host_cc] for code run at
1282 build time
1283 --cxx=CXX use C++ compiler CXX [$cxx]
1284 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1285 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1286 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1287 --make=MAKE use specified make [$make]
1288 --install=INSTALL use specified install [$install]
1289 --python=PYTHON use specified python [$python]
1290 --smbd=SMBD use specified smbd [$smbd]
1291 --static enable static build [$static]
1292 --mandir=PATH install man pages in PATH
1293 --datadir=PATH install firmware in PATH$confsuffix
1294 --docdir=PATH install documentation in PATH$confsuffix
1295 --bindir=PATH install binaries in PATH
1296 --libdir=PATH install libraries in PATH
1297 --sysconfdir=PATH install config in PATH$confsuffix
1298 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1299 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1300 --enable-modules enable modules support
1301 --enable-debug-tcg enable TCG debugging
1302 --disable-debug-tcg disable TCG debugging (default)
1303 --enable-debug-info enable debugging information (default)
1304 --disable-debug-info disable debugging information
1305 --enable-debug enable common debug build options
1306 --enable-sparse enable sparse checker
1307 --disable-sparse disable sparse checker (default)
1308 --disable-strip disable stripping binaries
1309 --disable-werror disable compilation abort on warning
1310 --disable-stack-protector disable compiler-provided stack protection
1311 --disable-sdl disable SDL
1312 --enable-sdl enable SDL
1313 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1314 --disable-gtk disable gtk UI
1315 --enable-gtk enable gtk UI
1316 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1317 --disable-virtfs disable VirtFS
1318 --enable-virtfs enable VirtFS
1319 --disable-vnc disable VNC
1320 --enable-vnc enable VNC
1321 --disable-cocoa disable Cocoa (Mac OS X only)
1322 --enable-cocoa enable Cocoa (default on Mac OS X)
1323 --audio-drv-list=LIST set audio drivers list:
1324 Available drivers: $audio_possible_drivers
1325 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1326 --block-drv-rw-whitelist=L
1327 set block driver read-write whitelist
1328 (affects only QEMU, not qemu-img)
1329 --block-drv-ro-whitelist=L
1330 set block driver read-only whitelist
1331 (affects only QEMU, not qemu-img)
1332 --disable-xen disable xen backend driver support
1333 --enable-xen enable xen backend driver support
1334 --disable-xen-pci-passthrough
1335 --enable-xen-pci-passthrough
1336 --disable-brlapi disable BrlAPI
1337 --enable-brlapi enable BrlAPI
1338 --disable-vnc-tls disable TLS encryption for VNC server
1339 --enable-vnc-tls enable TLS encryption for VNC server
1340 --disable-vnc-sasl disable SASL encryption for VNC server
1341 --enable-vnc-sasl enable SASL encryption for VNC server
1342 --disable-vnc-jpeg disable JPEG lossy compression for VNC server
1343 --enable-vnc-jpeg enable JPEG lossy compression for VNC server
1344 --disable-vnc-png disable PNG compression for VNC server (default)
1345 --enable-vnc-png enable PNG compression for VNC server
1346 --disable-vnc-ws disable Websockets support for VNC server
1347 --enable-vnc-ws enable Websockets support for VNC server
1348 --disable-curses disable curses output
1349 --enable-curses enable curses output
1350 --disable-curl disable curl connectivity
1351 --enable-curl enable curl connectivity
1352 --disable-fdt disable fdt device tree
1353 --enable-fdt enable fdt device tree
1354 --disable-bluez disable bluez stack connectivity
1355 --enable-bluez enable bluez stack connectivity
1356 --disable-slirp disable SLIRP userspace network connectivity
1357 --disable-kvm disable KVM acceleration support
1358 --enable-kvm enable KVM acceleration support
1359 --disable-rdma disable RDMA-based migration support
1360 --enable-rdma enable RDMA-based migration support
1361 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1362 --enable-system enable all system emulation targets
1363 --disable-system disable all system emulation targets
1364 --enable-user enable supported user emulation targets
1365 --disable-user disable all user emulation targets
1366 --enable-linux-user enable all linux usermode emulation targets
1367 --disable-linux-user disable all linux usermode emulation targets
1368 --enable-bsd-user enable all BSD usermode emulation targets
1369 --disable-bsd-user disable all BSD usermode emulation targets
1370 --enable-guest-base enable GUEST_BASE support for usermode
1371 emulation targets
1372 --disable-guest-base disable GUEST_BASE support
1373 --enable-pie build Position Independent Executables
1374 --disable-pie do not build Position Independent Executables
1375 --fmod-lib path to FMOD library
1376 --fmod-inc path to FMOD includes
1377 --oss-lib path to OSS library
1378 --cpu=CPU Build for host CPU [$cpu]
1379 --disable-uuid disable uuid support
1380 --enable-uuid enable uuid support
1381 --disable-vde disable support for vde network
1382 --enable-vde enable support for vde network
1383 --disable-netmap disable support for netmap network
1384 --enable-netmap enable support for netmap network
1385 --disable-linux-aio disable Linux AIO support
1386 --enable-linux-aio enable Linux AIO support
1387 --disable-cap-ng disable libcap-ng support
1388 --enable-cap-ng enable libcap-ng support
1389 --disable-attr disable attr and xattr support
1390 --enable-attr enable attr and xattr support
1391 --disable-blobs disable installing provided firmware blobs
1392 --enable-docs enable documentation build
1393 --disable-docs disable documentation build
1394 --disable-vhost-net disable vhost-net acceleration support
1395 --enable-vhost-net enable vhost-net acceleration support
1396 --enable-trace-backends=B Set trace backend
1397 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1398 --with-trace-file=NAME Full PATH,NAME of file to store traces
1399 Default:trace-<pid>
1400 --disable-spice disable spice
1401 --enable-spice enable spice
1402 --enable-rbd enable building the rados block device (rbd)
1403 --disable-libiscsi disable iscsi support
1404 --enable-libiscsi enable iscsi support
1405 --disable-libnfs disable nfs support
1406 --enable-libnfs enable nfs support
1407 --disable-smartcard-nss disable smartcard nss support
1408 --enable-smartcard-nss enable smartcard nss support
1409 --disable-libusb disable libusb (for usb passthrough)
1410 --enable-libusb enable libusb (for usb passthrough)
1411 --disable-usb-redir disable usb network redirection support
1412 --enable-usb-redir enable usb network redirection support
1413 --enable-lzo enable the support of lzo compression library
1414 --enable-snappy enable the support of snappy compression library
1415 --enable-bzip2 enable the support of bzip2 compression library (for
1416 reading bzip2-compressed dmg images)
1417 --disable-guest-agent disable building of the QEMU Guest Agent
1418 --enable-guest-agent enable building of the QEMU Guest Agent
1419 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1420 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1421 --disable-seccomp disable seccomp support
1422 --enable-seccomp enable seccomp support
1423 --with-coroutine=BACKEND coroutine backend. Supported options:
1424 gthread, ucontext, sigaltstack, windows
1425 --disable-coroutine-pool disable coroutine freelist (worse performance)
1426 --enable-coroutine-pool enable coroutine freelist (better performance)
1427 --enable-glusterfs enable GlusterFS backend
1428 --disable-glusterfs disable GlusterFS backend
1429 --enable-archipelago enable Archipelago backend
1430 --disable-archipelago disable Archipelago backend
1431 --enable-gcov enable test coverage analysis with gcov
1432 --gcov=GCOV use specified gcov [$gcov_tool]
1433 --disable-tpm disable TPM support
1434 --enable-tpm enable TPM support
1435 --disable-libssh2 disable ssh block device support
1436 --enable-libssh2 enable ssh block device support
1437 --disable-vhdx disable support for the Microsoft VHDX image format
1438 --enable-vhdx enable support for the Microsoft VHDX image format
1439 --disable-quorum disable quorum block filter support
1440 --enable-quorum enable quorum block filter support
1441 --disable-numa disable libnuma support
1442 --enable-numa enable libnuma support
1443 --disable-tcmalloc disable tcmalloc support
1444 --enable-tcmalloc enable tcmalloc support
1446 NOTE: The object files are built at the place where configure is launched
1448 exit 0
1451 # Now we have handled --enable-tcg-interpreter and know we're not just
1452 # printing the help message, bail out if the host CPU isn't supported.
1453 if test "$ARCH" = "unknown"; then
1454 if test "$tcg_interpreter" = "yes" ; then
1455 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1456 ARCH=tci
1457 else
1458 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1462 # Consult white-list to determine whether to enable werror
1463 # by default. Only enable by default for git builds
1464 z_version=`cut -f3 -d. $source_path/VERSION`
1466 if test -z "$werror" ; then
1467 if test -d "$source_path/.git" -a \
1468 "$linux" = "yes" ; then
1469 werror="yes"
1470 else
1471 werror="no"
1475 # check that the C compiler works.
1476 cat > $TMPC <<EOF
1477 int main(void) { return 0; }
1480 if compile_object ; then
1481 : C compiler works ok
1482 else
1483 error_exit "\"$cc\" either does not exist or does not work"
1486 # Check that the C++ compiler exists and works with the C compiler
1487 if has $cxx; then
1488 cat > $TMPC <<EOF
1489 int c_function(void);
1490 int main(void) { return c_function(); }
1493 compile_object
1495 cat > $TMPCXX <<EOF
1496 extern "C" {
1497 int c_function(void);
1499 int c_function(void) { return 42; }
1502 update_cxxflags
1504 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1505 # C++ compiler $cxx works ok with C compiler $cc
1507 else
1508 echo "C++ compiler $cxx does not work with C compiler $cc"
1509 echo "Disabling C++ specific optional code"
1510 cxx=
1512 else
1513 echo "No C++ compiler available; disabling C++ specific optional code"
1514 cxx=
1517 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1518 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1519 gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1520 gcc_flags="-Wunused-but-set-variable $gcc_flags"
1521 gcc_flags="-Wendif-labels $gcc_flags"
1522 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1523 gcc_flags="-Wno-string-plus-int $gcc_flags"
1524 # Note that we do not add -Werror to gcc_flags here, because that would
1525 # enable it for all configure tests. If a configure test failed due
1526 # to -Werror this would just silently disable some features,
1527 # so it's too error prone.
1528 cat > $TMPC << EOF
1529 int main(void) { return 0; }
1531 for flag in $gcc_flags; do
1532 # Use the positive sense of the flag when testing for -Wno-wombat
1533 # support (gcc will happily accept the -Wno- form of unknown
1534 # warning options).
1535 optflag="$(echo $flag | sed -e 's/^-Wno-/-W/')"
1536 if compile_prog "-Werror $optflag" "" ; then
1537 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1539 done
1541 if test "$mingw32" = "yes"; then
1542 stack_protector="no"
1544 if test "$stack_protector" != "no"; then
1545 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1546 sp_on=0
1547 for flag in $gcc_flags; do
1548 # We need to check both a compile and a link, since some compiler
1549 # setups fail only on a .c->.o compile and some only at link time
1550 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1551 compile_prog "-Werror $flag" ""; then
1552 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1553 LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
1554 sp_on=1
1555 break
1557 done
1558 if test "$stack_protector" = yes; then
1559 if test $sp_on = 0; then
1560 error_exit "Stack protector not supported"
1565 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1566 # large functions that use global variables. The bug is in all releases of
1567 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1568 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1569 cat > $TMPC << EOF
1570 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1571 int main(void) { return 0; }
1572 #else
1573 #error No bug in this compiler.
1574 #endif
1576 if compile_prog "-Werror -fno-gcse" "" ; then
1577 TRANSLATE_OPT_CFLAGS=-fno-gcse
1580 if test "$static" = "yes" ; then
1581 if test "$modules" = "yes" ; then
1582 error_exit "static and modules are mutually incompatible"
1584 if test "$pie" = "yes" ; then
1585 error_exit "static and pie are mutually incompatible"
1586 else
1587 pie="no"
1591 # Unconditional check for compiler __thread support
1592 cat > $TMPC << EOF
1593 static __thread int tls_var;
1594 int main(void) { return tls_var; }
1597 if ! compile_prog "-Werror" "" ; then
1598 error_exit "Your compiler does not support the __thread specifier for " \
1599 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1602 if test "$pie" = ""; then
1603 case "$cpu-$targetos" in
1604 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1607 pie="no"
1609 esac
1612 if test "$pie" != "no" ; then
1613 cat > $TMPC << EOF
1615 #ifdef __linux__
1616 # define THREAD __thread
1617 #else
1618 # define THREAD
1619 #endif
1621 static THREAD int tls_var;
1623 int main(void) { return tls_var; }
1626 if compile_prog "-fPIE -DPIE" "-pie"; then
1627 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1628 LDFLAGS="-pie $LDFLAGS"
1629 pie="yes"
1630 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1631 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1633 else
1634 if test "$pie" = "yes"; then
1635 error_exit "PIE not available due to missing toolchain support"
1636 else
1637 echo "Disabling PIE due to missing toolchain support"
1638 pie="no"
1642 if compile_prog "-fno-pie" "-nopie"; then
1643 CFLAGS_NOPIE="-fno-pie"
1644 LDFLAGS_NOPIE="-nopie"
1648 # check for broken gcc and libtool in RHEL5
1649 if test -n "$libtool" -a "$pie" != "no" ; then
1650 cat > $TMPC <<EOF
1652 void *f(unsigned char *buf, int len);
1653 void *g(unsigned char *buf, int len);
1655 void *
1656 f(unsigned char *buf, int len)
1658 return (void*)0L;
1661 void *
1662 g(unsigned char *buf, int len)
1664 return f(buf, len);
1668 if ! libtool_prog; then
1669 echo "Disabling libtool due to broken toolchain support"
1670 libtool=
1674 ##########################################
1675 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1676 # use i686 as default anyway, but for those that don't, an explicit
1677 # specification is necessary
1679 if test "$cpu" = "i386"; then
1680 cat > $TMPC << EOF
1681 static int sfaa(int *ptr)
1683 return __sync_fetch_and_and(ptr, 0);
1686 int main(void)
1688 int val = 42;
1689 val = __sync_val_compare_and_swap(&val, 0, 1);
1690 sfaa(&val);
1691 return val;
1694 if ! compile_prog "" "" ; then
1695 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1699 #########################################
1700 # Solaris specific configure tool chain decisions
1702 if test "$solaris" = "yes" ; then
1703 if has $install; then
1705 else
1706 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1707 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1708 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1710 if test "`path_of $install`" = "/usr/sbin/install" ; then
1711 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1712 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1713 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1715 if has ar; then
1717 else
1718 if test -f /usr/ccs/bin/ar ; then
1719 error_exit "No path includes ar" \
1720 "Add /usr/ccs/bin to your path and rerun configure"
1722 error_exit "No path includes ar"
1726 if test -z "${target_list+xxx}" ; then
1727 target_list="$default_target_list"
1728 else
1729 target_list=`echo "$target_list" | sed -e 's/,/ /g'`
1732 # Check that we recognised the target name; this allows a more
1733 # friendly error message than if we let it fall through.
1734 for target in $target_list; do
1735 case " $default_target_list " in
1736 *" $target "*)
1739 error_exit "Unknown target name '$target'"
1741 esac
1742 done
1744 # see if system emulation was really requested
1745 case " $target_list " in
1746 *"-softmmu "*) softmmu=yes
1748 *) softmmu=no
1750 esac
1752 feature_not_found() {
1753 feature=$1
1754 remedy=$2
1756 error_exit "User requested feature $feature" \
1757 "configure was not able to find it." \
1758 "$remedy"
1761 # ---
1762 # big/little endian test
1763 cat > $TMPC << EOF
1764 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1765 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1766 extern int foo(short *, short *);
1767 int main(int argc, char *argv[]) {
1768 return foo(big_endian, little_endian);
1772 if compile_object ; then
1773 if grep -q BiGeNdIaN $TMPO ; then
1774 bigendian="yes"
1775 elif grep -q LiTtLeEnDiAn $TMPO ; then
1776 bigendian="no"
1777 else
1778 echo big/little test failed
1780 else
1781 echo big/little test failed
1784 ##########################################
1785 # L2TPV3 probe
1787 cat > $TMPC <<EOF
1788 #include <sys/socket.h>
1789 #include <linux/ip.h>
1790 int main(void) { return sizeof(struct mmsghdr); }
1792 if compile_prog "" "" ; then
1793 l2tpv3=yes
1794 else
1795 l2tpv3=no
1798 ##########################################
1799 # pkg-config probe
1801 if ! has "$pkg_config_exe"; then
1802 error_exit "pkg-config binary '$pkg_config_exe' not found"
1805 ##########################################
1806 # NPTL probe
1808 if test "$linux_user" = "yes"; then
1809 cat > $TMPC <<EOF
1810 #include <sched.h>
1811 #include <linux/futex.h>
1812 int main(void) {
1813 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1814 #error bork
1815 #endif
1816 return 0;
1819 if ! compile_object ; then
1820 feature_not_found "nptl" "Install glibc and linux kernel headers."
1824 ##########################################
1825 # zlib check
1827 if test "$zlib" != "no" ; then
1828 cat > $TMPC << EOF
1829 #include <zlib.h>
1830 int main(void) { zlibVersion(); return 0; }
1832 if compile_prog "" "-lz" ; then
1834 else
1835 error_exit "zlib check failed" \
1836 "Make sure to have the zlib libs and headers installed."
1839 LIBS="$LIBS -lz"
1841 ##########################################
1842 # lzo check
1844 if test "$lzo" != "no" ; then
1845 cat > $TMPC << EOF
1846 #include <lzo/lzo1x.h>
1847 int main(void) { lzo_version(); return 0; }
1849 if compile_prog "" "-llzo2" ; then
1850 libs_softmmu="$libs_softmmu -llzo2"
1851 lzo="yes"
1852 else
1853 if test "$lzo" = "yes"; then
1854 feature_not_found "liblzo2" "Install liblzo2 devel"
1856 lzo="no"
1860 ##########################################
1861 # snappy check
1863 if test "$snappy" != "no" ; then
1864 cat > $TMPC << EOF
1865 #include <snappy-c.h>
1866 int main(void) { snappy_max_compressed_length(4096); return 0; }
1868 if compile_prog "" "-lsnappy" ; then
1869 libs_softmmu="$libs_softmmu -lsnappy"
1870 snappy="yes"
1871 else
1872 if test "$snappy" = "yes"; then
1873 feature_not_found "libsnappy" "Install libsnappy devel"
1875 snappy="no"
1879 ##########################################
1880 # bzip2 check
1882 if test "$bzip2" != "no" ; then
1883 cat > $TMPC << EOF
1884 #include <bzlib.h>
1885 int main(void) { BZ2_bzlibVersion(); return 0; }
1887 if compile_prog "" "-lbz2" ; then
1888 bzip2="yes"
1889 else
1890 if test "$bzip2" = "yes"; then
1891 feature_not_found "libbzip2" "Install libbzip2 devel"
1893 bzip2="no"
1897 ##########################################
1898 # libseccomp check
1900 if test "$seccomp" != "no" ; then
1901 if test "$cpu" = "i386" || test "$cpu" = "x86_64" &&
1902 $pkg_config --atleast-version=2.1.1 libseccomp; then
1903 libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`"
1904 QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`"
1905 seccomp="yes"
1906 else
1907 if test "$seccomp" = "yes"; then
1908 feature_not_found "libseccomp" "Install libseccomp devel >= 2.1.1"
1910 seccomp="no"
1913 ##########################################
1914 # xen probe
1916 if test "$xen" != "no" ; then
1917 xen_libs="-lxenstore -lxenctrl -lxenguest"
1919 # First we test whether Xen headers and libraries are available.
1920 # If no, we are done and there is no Xen support.
1921 # If yes, more tests are run to detect the Xen version.
1923 # Xen (any)
1924 cat > $TMPC <<EOF
1925 #include <xenctrl.h>
1926 int main(void) {
1927 return 0;
1930 if ! compile_prog "" "$xen_libs" ; then
1931 # Xen not found
1932 if test "$xen" = "yes" ; then
1933 feature_not_found "xen" "Install xen devel"
1935 xen=no
1937 # Xen unstable
1938 elif
1939 cat > $TMPC <<EOF &&
1940 #include <xenctrl.h>
1941 #include <xenstore.h>
1942 #include <stdint.h>
1943 #include <xen/hvm/hvm_info_table.h>
1944 #if !defined(HVM_MAX_VCPUS)
1945 # error HVM_MAX_VCPUS not defined
1946 #endif
1947 int main(void) {
1948 xc_interface *xc;
1949 xs_daemon_open();
1950 xc = xc_interface_open(0, 0, 0);
1951 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1952 xc_gnttab_open(NULL, 0);
1953 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1954 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1955 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
1956 return 0;
1959 compile_prog "" "$xen_libs"
1960 then
1961 xen_ctrl_version=450
1962 xen=yes
1964 elif
1965 cat > $TMPC <<EOF &&
1966 #include <xenctrl.h>
1967 #include <xenstore.h>
1968 #include <stdint.h>
1969 #include <xen/hvm/hvm_info_table.h>
1970 #if !defined(HVM_MAX_VCPUS)
1971 # error HVM_MAX_VCPUS not defined
1972 #endif
1973 int main(void) {
1974 xc_interface *xc;
1975 xs_daemon_open();
1976 xc = xc_interface_open(0, 0, 0);
1977 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1978 xc_gnttab_open(NULL, 0);
1979 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1980 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1981 return 0;
1984 compile_prog "" "$xen_libs"
1985 then
1986 xen_ctrl_version=420
1987 xen=yes
1989 elif
1990 cat > $TMPC <<EOF &&
1991 #include <xenctrl.h>
1992 #include <xs.h>
1993 #include <stdint.h>
1994 #include <xen/hvm/hvm_info_table.h>
1995 #if !defined(HVM_MAX_VCPUS)
1996 # error HVM_MAX_VCPUS not defined
1997 #endif
1998 int main(void) {
1999 xs_daemon_open();
2000 xc_interface_open(0, 0, 0);
2001 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2002 xc_gnttab_open(NULL, 0);
2003 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2004 return 0;
2007 compile_prog "" "$xen_libs"
2008 then
2009 xen_ctrl_version=410
2010 xen=yes
2012 # Xen 4.0.0
2013 elif
2014 cat > $TMPC <<EOF &&
2015 #include <xenctrl.h>
2016 #include <xs.h>
2017 #include <stdint.h>
2018 #include <xen/hvm/hvm_info_table.h>
2019 #if !defined(HVM_MAX_VCPUS)
2020 # error HVM_MAX_VCPUS not defined
2021 #endif
2022 int main(void) {
2023 struct xen_add_to_physmap xatp = {
2024 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
2026 xs_daemon_open();
2027 xc_interface_open();
2028 xc_gnttab_open();
2029 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2030 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
2031 return 0;
2034 compile_prog "" "$xen_libs"
2035 then
2036 xen_ctrl_version=400
2037 xen=yes
2039 # Xen 3.4.0
2040 elif
2041 cat > $TMPC <<EOF &&
2042 #include <xenctrl.h>
2043 #include <xs.h>
2044 int main(void) {
2045 struct xen_add_to_physmap xatp = {
2046 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
2048 xs_daemon_open();
2049 xc_interface_open();
2050 xc_gnttab_open();
2051 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2052 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
2053 return 0;
2056 compile_prog "" "$xen_libs"
2057 then
2058 xen_ctrl_version=340
2059 xen=yes
2061 # Xen 3.3.0
2062 elif
2063 cat > $TMPC <<EOF &&
2064 #include <xenctrl.h>
2065 #include <xs.h>
2066 int main(void) {
2067 xs_daemon_open();
2068 xc_interface_open();
2069 xc_gnttab_open();
2070 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2071 return 0;
2074 compile_prog "" "$xen_libs"
2075 then
2076 xen_ctrl_version=330
2077 xen=yes
2079 # Xen version unsupported
2080 else
2081 if test "$xen" = "yes" ; then
2082 feature_not_found "xen (unsupported version)" "Install supported xen (e.g. 4.0, 3.4, 3.3)"
2084 xen=no
2087 if test "$xen" = yes; then
2088 libs_softmmu="$xen_libs $libs_softmmu"
2092 if test "$xen_pci_passthrough" != "no"; then
2093 if test "$xen" = "yes" && test "$linux" = "yes" &&
2094 test "$xen_ctrl_version" -ge 340; then
2095 xen_pci_passthrough=yes
2096 else
2097 if test "$xen_pci_passthrough" = "yes"; then
2098 if test "$xen_ctrl_version" -lt 340; then
2099 error_exit "User requested feature Xen PCI Passthrough" \
2100 "This feature does not work with Xen 3.3"
2102 error_exit "User requested feature Xen PCI Passthrough" \
2103 " but this feature requires /sys from Linux"
2105 xen_pci_passthrough=no
2109 ##########################################
2110 # libtool probe
2112 if ! has $libtool; then
2113 libtool=
2116 # MacOSX ships with a libtool which isn't the GNU one; weed this
2117 # out by checking whether libtool supports the --version switch
2118 if test -n "$libtool"; then
2119 if ! "$libtool" --version >/dev/null 2>&1; then
2120 libtool=
2124 ##########################################
2125 # Sparse probe
2126 if test "$sparse" != "no" ; then
2127 if has cgcc; then
2128 sparse=yes
2129 else
2130 if test "$sparse" = "yes" ; then
2131 feature_not_found "sparse" "Install sparse binary"
2133 sparse=no
2137 ##########################################
2138 # X11 probe
2139 x11_cflags=
2140 x11_libs=-lX11
2141 if $pkg_config --exists "x11"; then
2142 x11_cflags=`$pkg_config --cflags x11`
2143 x11_libs=`$pkg_config --libs x11`
2146 ##########################################
2147 # GTK probe
2149 if test "$gtkabi" = ""; then
2150 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2151 # Use 3.0 as a fallback if that is available.
2152 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2153 gtkabi=2.0
2154 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2155 gtkabi=3.0
2156 else
2157 gtkabi=2.0
2161 if test "$gtk" != "no"; then
2162 gtkpackage="gtk+-$gtkabi"
2163 gtkx11package="gtk+-x11-$gtkabi"
2164 if test "$gtkabi" = "3.0" ; then
2165 gtkversion="3.0.0"
2166 else
2167 gtkversion="2.18.0"
2169 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2170 gtk_cflags=`$pkg_config --cflags $gtkpackage`
2171 gtk_libs=`$pkg_config --libs $gtkpackage`
2172 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2173 gtk_cflags="$gtk_cflags $x11_cflags"
2174 gtk_libs="$gtk_libs $x11_libs"
2176 libs_softmmu="$gtk_libs $libs_softmmu"
2177 gtk="yes"
2178 elif test "$gtk" = "yes"; then
2179 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2180 else
2181 gtk="no"
2185 ##########################################
2186 # VTE probe
2188 if test "$vte" != "no"; then
2189 if test "$gtkabi" = "3.0"; then
2190 vtepackage="vte-2.90"
2191 vteversion="0.32.0"
2192 else
2193 vtepackage="vte"
2194 vteversion="0.24.0"
2196 if $pkg_config --exists "$vtepackage >= $vteversion"; then
2197 vte_cflags=`$pkg_config --cflags $vtepackage`
2198 vte_libs=`$pkg_config --libs $vtepackage`
2199 libs_softmmu="$vte_libs $libs_softmmu"
2200 vte="yes"
2201 elif test "$vte" = "yes"; then
2202 if test "$gtkabi" = "3.0"; then
2203 feature_not_found "vte" "Install libvte-2.90 devel"
2204 else
2205 feature_not_found "vte" "Install libvte devel"
2207 else
2208 vte="no"
2212 ##########################################
2213 # SDL probe
2215 # Look for sdl configuration program (pkg-config or sdl-config). Try
2216 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2218 if test $sdlabi = "2.0"; then
2219 sdl_config=$sdl2_config
2220 sdlname=sdl2
2221 sdlconfigname=sdl2_config
2222 else
2223 sdlname=sdl
2224 sdlconfigname=sdl_config
2227 if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2228 sdl_config=$sdlconfigname
2231 if $pkg_config $sdlname --exists; then
2232 sdlconfig="$pkg_config $sdlname"
2233 _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
2234 elif has ${sdl_config}; then
2235 sdlconfig="$sdl_config"
2236 _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2237 else
2238 if test "$sdl" = "yes" ; then
2239 feature_not_found "sdl" "Install SDL devel"
2241 sdl=no
2243 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2244 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2247 sdl_too_old=no
2248 if test "$sdl" != "no" ; then
2249 cat > $TMPC << EOF
2250 #include <SDL.h>
2251 #undef main /* We don't want SDL to override our main() */
2252 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2254 sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
2255 if test "$static" = "yes" ; then
2256 sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2257 else
2258 sdl_libs=`$sdlconfig --libs 2> /dev/null`
2260 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2261 if test "$_sdlversion" -lt 121 ; then
2262 sdl_too_old=yes
2263 else
2264 if test "$cocoa" = "no" ; then
2265 sdl=yes
2269 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2270 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2271 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2272 sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2273 sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
2275 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2277 else
2278 sdl=no
2280 fi # static link
2281 else # sdl not found
2282 if test "$sdl" = "yes" ; then
2283 feature_not_found "sdl" "Install SDL devel"
2285 sdl=no
2286 fi # sdl compile test
2289 if test "$sdl" = "yes" ; then
2290 cat > $TMPC <<EOF
2291 #include <SDL.h>
2292 #if defined(SDL_VIDEO_DRIVER_X11)
2293 #include <X11/XKBlib.h>
2294 #else
2295 #error No x11 support
2296 #endif
2297 int main(void) { return 0; }
2299 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2300 sdl_cflags="$sdl_cflags $x11_cflags"
2301 sdl_libs="$sdl_libs $x11_libs"
2303 libs_softmmu="$sdl_libs $libs_softmmu"
2306 ##########################################
2307 # RDMA needs OpenFabrics libraries
2308 if test "$rdma" != "no" ; then
2309 cat > $TMPC <<EOF
2310 #include <rdma/rdma_cma.h>
2311 int main(void) { return 0; }
2313 rdma_libs="-lrdmacm -libverbs"
2314 if compile_prog "" "$rdma_libs" ; then
2315 rdma="yes"
2316 libs_softmmu="$libs_softmmu $rdma_libs"
2317 else
2318 if test "$rdma" = "yes" ; then
2319 error_exit \
2320 " OpenFabrics librdmacm/libibverbs not present." \
2321 " Your options:" \
2322 " (1) Fast: Install infiniband packages from your distro." \
2323 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2324 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2326 rdma="no"
2330 ##########################################
2331 # VNC TLS/WS detection
2332 if test "$vnc" = "yes" -a \( "$vnc_tls" != "no" -o "$vnc_ws" != "no" \) ; then
2333 cat > $TMPC <<EOF
2334 #include <gnutls/gnutls.h>
2335 int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
2337 if $pkg_config --exists gnutls; then
2338 vnc_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2339 vnc_tls_libs=`$pkg_config --libs gnutls 2>/dev/null`
2340 else
2341 vnc_tls_cflags=
2342 vnc_tls_libs=-lgnutls
2344 if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then
2345 if test "$vnc_tls" != "no" ; then
2346 vnc_tls=yes
2348 if test "$vnc_ws" != "no" ; then
2349 vnc_ws=yes
2351 libs_softmmu="$vnc_tls_libs $libs_softmmu"
2352 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_tls_cflags"
2353 else
2354 if test "$vnc_tls" = "yes" ; then
2355 feature_not_found "vnc-tls" "Install gnutls devel"
2357 if test "$vnc_ws" = "yes" ; then
2358 feature_not_found "vnc-ws" "Install gnutls devel"
2360 vnc_tls=no
2361 vnc_ws=no
2365 ##########################################
2366 # Quorum probe (check for gnutls)
2367 if test "$quorum" != "no" ; then
2368 cat > $TMPC <<EOF
2369 #include <gnutls/gnutls.h>
2370 #include <gnutls/crypto.h>
2371 int main(void) {char data[4096], digest[32];
2372 gnutls_hash_fast(GNUTLS_DIG_SHA256, data, 4096, digest);
2373 return 0;
2376 quorum_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2377 quorum_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2378 if compile_prog "$quorum_tls_cflags" "$quorum_tls_libs" ; then
2379 qcow_tls=yes
2380 libs_softmmu="$quorum_tls_libs $libs_softmmu"
2381 libs_tools="$quorum_tls_libs $libs_softmmu"
2382 QEMU_CFLAGS="$QEMU_CFLAGS $quorum_tls_cflags"
2383 quorum="yes"
2384 else
2385 if test "$quorum" = "yes"; then
2386 feature_not_found "gnutls" "gnutls > 2.10.0 required to compile Quorum"
2388 quorum="no"
2392 ##########################################
2393 # VNC SASL detection
2394 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2395 cat > $TMPC <<EOF
2396 #include <sasl/sasl.h>
2397 #include <stdio.h>
2398 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2400 # Assuming Cyrus-SASL installed in /usr prefix
2401 vnc_sasl_cflags=""
2402 vnc_sasl_libs="-lsasl2"
2403 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2404 vnc_sasl=yes
2405 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2406 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2407 else
2408 if test "$vnc_sasl" = "yes" ; then
2409 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2411 vnc_sasl=no
2415 ##########################################
2416 # VNC JPEG detection
2417 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2418 cat > $TMPC <<EOF
2419 #include <stdio.h>
2420 #include <jpeglib.h>
2421 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2423 vnc_jpeg_cflags=""
2424 vnc_jpeg_libs="-ljpeg"
2425 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2426 vnc_jpeg=yes
2427 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2428 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2429 else
2430 if test "$vnc_jpeg" = "yes" ; then
2431 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2433 vnc_jpeg=no
2437 ##########################################
2438 # VNC PNG detection
2439 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2440 cat > $TMPC <<EOF
2441 //#include <stdio.h>
2442 #include <png.h>
2443 #include <stddef.h>
2444 int main(void) {
2445 png_structp png_ptr;
2446 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2447 return png_ptr != 0;
2450 if $pkg_config libpng --exists; then
2451 vnc_png_cflags=`$pkg_config libpng --cflags`
2452 vnc_png_libs=`$pkg_config libpng --libs`
2453 else
2454 vnc_png_cflags=""
2455 vnc_png_libs="-lpng"
2457 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2458 vnc_png=yes
2459 libs_softmmu="$vnc_png_libs $libs_softmmu"
2460 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2461 else
2462 if test "$vnc_png" = "yes" ; then
2463 feature_not_found "vnc-png" "Install libpng devel"
2465 vnc_png=no
2469 ##########################################
2470 # fnmatch() probe, used for ACL routines
2471 fnmatch="no"
2472 cat > $TMPC << EOF
2473 #include <fnmatch.h>
2474 int main(void)
2476 fnmatch("foo", "foo", 0);
2477 return 0;
2480 if compile_prog "" "" ; then
2481 fnmatch="yes"
2484 ##########################################
2485 # uuid_generate() probe, used for vdi block driver
2486 # Note that on some systems (notably MacOSX) no extra library
2487 # need be linked to get the uuid functions.
2488 if test "$uuid" != "no" ; then
2489 uuid_libs="-luuid"
2490 cat > $TMPC << EOF
2491 #include <uuid/uuid.h>
2492 int main(void)
2494 uuid_t my_uuid;
2495 uuid_generate(my_uuid);
2496 return 0;
2499 if compile_prog "" "" ; then
2500 uuid="yes"
2501 elif compile_prog "" "$uuid_libs" ; then
2502 uuid="yes"
2503 libs_softmmu="$uuid_libs $libs_softmmu"
2504 libs_tools="$uuid_libs $libs_tools"
2505 else
2506 if test "$uuid" = "yes" ; then
2507 feature_not_found "uuid" "Install libuuid devel"
2509 uuid=no
2513 if test "$vhdx" = "yes" ; then
2514 if test "$uuid" = "no" ; then
2515 error_exit "uuid required for VHDX support"
2517 elif test "$vhdx" != "no" ; then
2518 if test "$uuid" = "yes" ; then
2519 vhdx=yes
2520 else
2521 vhdx=no
2525 ##########################################
2526 # xfsctl() probe, used for raw-posix
2527 if test "$xfs" != "no" ; then
2528 cat > $TMPC << EOF
2529 #include <stddef.h> /* NULL */
2530 #include <xfs/xfs.h>
2531 int main(void)
2533 xfsctl(NULL, 0, 0, NULL);
2534 return 0;
2537 if compile_prog "" "" ; then
2538 xfs="yes"
2539 else
2540 if test "$xfs" = "yes" ; then
2541 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2543 xfs=no
2547 ##########################################
2548 # vde libraries probe
2549 if test "$vde" != "no" ; then
2550 vde_libs="-lvdeplug"
2551 cat > $TMPC << EOF
2552 #include <stddef.h>
2553 #include <libvdeplug.h>
2554 int main(void)
2556 struct vde_open_args a = {0, 0, 0};
2557 char s[] = "";
2558 vde_open(s, s, &a);
2559 return 0;
2562 if compile_prog "" "$vde_libs" ; then
2563 vde=yes
2564 libs_softmmu="$vde_libs $libs_softmmu"
2565 libs_tools="$vde_libs $libs_tools"
2566 else
2567 if test "$vde" = "yes" ; then
2568 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2570 vde=no
2574 ##########################################
2575 # netmap support probe
2576 # Apart from looking for netmap headers, we make sure that the host API version
2577 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2578 # a minor/major version number. Minor new features will be marked with values up
2579 # to 15, and if something happens that requires a change to the backend we will
2580 # move above 15, submit the backend fixes and modify this two bounds.
2581 if test "$netmap" != "no" ; then
2582 cat > $TMPC << EOF
2583 #include <inttypes.h>
2584 #include <net/if.h>
2585 #include <net/netmap.h>
2586 #include <net/netmap_user.h>
2587 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2588 #error
2589 #endif
2590 int main(void) { return 0; }
2592 if compile_prog "" "" ; then
2593 netmap=yes
2594 else
2595 if test "$netmap" = "yes" ; then
2596 feature_not_found "netmap"
2598 netmap=no
2602 ##########################################
2603 # libcap-ng library probe
2604 if test "$cap_ng" != "no" ; then
2605 cap_libs="-lcap-ng"
2606 cat > $TMPC << EOF
2607 #include <cap-ng.h>
2608 int main(void)
2610 capng_capability_to_name(CAPNG_EFFECTIVE);
2611 return 0;
2614 if compile_prog "" "$cap_libs" ; then
2615 cap_ng=yes
2616 libs_tools="$cap_libs $libs_tools"
2617 else
2618 if test "$cap_ng" = "yes" ; then
2619 feature_not_found "cap_ng" "Install libcap-ng devel"
2621 cap_ng=no
2625 ##########################################
2626 # Sound support libraries probe
2628 audio_drv_probe()
2630 drv=$1
2631 hdr=$2
2632 lib=$3
2633 exp=$4
2634 cfl=$5
2635 cat > $TMPC << EOF
2636 #include <$hdr>
2637 int main(void) { $exp }
2639 if compile_prog "$cfl" "$lib" ; then
2641 else
2642 error_exit "$drv check failed" \
2643 "Make sure to have the $drv libs and headers installed."
2647 audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2648 for drv in $audio_drv_list; do
2649 case $drv in
2650 alsa)
2651 audio_drv_probe $drv alsa/asoundlib.h -lasound \
2652 "return snd_pcm_close((snd_pcm_t *)0);"
2653 libs_softmmu="-lasound $libs_softmmu"
2656 fmod)
2657 if test -z $fmod_lib || test -z $fmod_inc; then
2658 error_exit "You must specify path to FMOD library and headers" \
2659 "Example: --fmod-inc=/path/include/fmod --fmod-lib=/path/lib/libfmod-3.74.so"
2661 audio_drv_probe $drv fmod.h $fmod_lib "return FSOUND_GetVersion();" "-I $fmod_inc"
2662 libs_softmmu="$fmod_lib $libs_softmmu"
2665 esd)
2666 audio_drv_probe $drv esd.h -lesd 'return esd_play_stream(0, 0, "", 0);'
2667 libs_softmmu="-lesd $libs_softmmu"
2668 audio_pt_int="yes"
2672 audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2673 "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2674 libs_softmmu="-lpulse $libs_softmmu"
2675 audio_pt_int="yes"
2678 coreaudio)
2679 libs_softmmu="-framework CoreAudio $libs_softmmu"
2682 dsound)
2683 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2684 audio_win_int="yes"
2687 oss)
2688 libs_softmmu="$oss_lib $libs_softmmu"
2691 sdl|wav)
2692 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2695 winwave)
2696 libs_softmmu="-lwinmm $libs_softmmu"
2697 audio_win_int="yes"
2701 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2702 error_exit "Unknown driver '$drv' selected" \
2703 "Possible drivers are: $audio_possible_drivers"
2706 esac
2707 done
2709 ##########################################
2710 # BrlAPI probe
2712 if test "$brlapi" != "no" ; then
2713 brlapi_libs="-lbrlapi"
2714 cat > $TMPC << EOF
2715 #include <brlapi.h>
2716 #include <stddef.h>
2717 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2719 if compile_prog "" "$brlapi_libs" ; then
2720 brlapi=yes
2721 libs_softmmu="$brlapi_libs $libs_softmmu"
2722 else
2723 if test "$brlapi" = "yes" ; then
2724 feature_not_found "brlapi" "Install brlapi devel"
2726 brlapi=no
2730 ##########################################
2731 # curses probe
2732 if test "$curses" != "no" ; then
2733 if test "$mingw32" = "yes" ; then
2734 curses_list="-lpdcurses"
2735 else
2736 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2738 curses_found=no
2739 cat > $TMPC << EOF
2740 #include <curses.h>
2741 int main(void) {
2742 const char *s = curses_version();
2743 resize_term(0, 0);
2744 return s != 0;
2747 IFS=:
2748 for curses_lib in $curses_list; do
2749 unset IFS
2750 if compile_prog "" "$curses_lib" ; then
2751 curses_found=yes
2752 libs_softmmu="$curses_lib $libs_softmmu"
2753 break
2755 done
2756 unset IFS
2757 if test "$curses_found" = "yes" ; then
2758 curses=yes
2759 else
2760 if test "$curses" = "yes" ; then
2761 feature_not_found "curses" "Install ncurses devel"
2763 curses=no
2767 ##########################################
2768 # curl probe
2769 if test "$curl" != "no" ; then
2770 if $pkg_config libcurl --exists; then
2771 curlconfig="$pkg_config libcurl"
2772 else
2773 curlconfig=curl-config
2775 cat > $TMPC << EOF
2776 #include <curl/curl.h>
2777 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2779 curl_cflags=`$curlconfig --cflags 2>/dev/null`
2780 curl_libs=`$curlconfig --libs 2>/dev/null`
2781 if compile_prog "$curl_cflags" "$curl_libs" ; then
2782 curl=yes
2783 else
2784 if test "$curl" = "yes" ; then
2785 feature_not_found "curl" "Install libcurl devel"
2787 curl=no
2789 fi # test "$curl"
2791 ##########################################
2792 # bluez support probe
2793 if test "$bluez" != "no" ; then
2794 cat > $TMPC << EOF
2795 #include <bluetooth/bluetooth.h>
2796 int main(void) { return bt_error(0); }
2798 bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2799 bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
2800 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2801 bluez=yes
2802 libs_softmmu="$bluez_libs $libs_softmmu"
2803 else
2804 if test "$bluez" = "yes" ; then
2805 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2807 bluez="no"
2811 ##########################################
2812 # glib support probe
2814 if test "$mingw32" = yes; then
2815 # g_poll is required in order to integrate with the glib main loop.
2816 glib_req_ver=2.20
2817 else
2818 glib_req_ver=2.12
2820 glib_modules=gthread-2.0
2821 if test "$modules" = yes; then
2822 glib_modules="$glib_modules gmodule-2.0"
2825 for i in $glib_modules; do
2826 if $pkg_config --atleast-version=$glib_req_ver $i; then
2827 glib_cflags=`$pkg_config --cflags $i`
2828 glib_libs=`$pkg_config --libs $i`
2829 CFLAGS="$glib_cflags $CFLAGS"
2830 LIBS="$glib_libs $LIBS"
2831 libs_qga="$glib_libs $libs_qga"
2832 else
2833 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2835 done
2837 # g_test_trap_subprocess added in 2.38. Used by some tests.
2838 glib_subprocess=yes
2839 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2840 glib_subprocess=no
2843 ##########################################
2844 # SHA command probe for modules
2845 if test "$modules" = yes; then
2846 shacmd_probe="sha1sum sha1 shasum"
2847 for c in $shacmd_probe; do
2848 if has $c; then
2849 shacmd="$c"
2850 break
2852 done
2853 if test "$shacmd" = ""; then
2854 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2858 ##########################################
2859 # pixman support probe
2861 if test "$pixman" = ""; then
2862 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
2863 pixman="none"
2864 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
2865 pixman="system"
2866 else
2867 pixman="internal"
2870 if test "$pixman" = "none"; then
2871 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
2872 error_exit "pixman disabled but system emulation or tools build" \
2873 "enabled. You can turn off pixman only if you also" \
2874 "disable all system emulation targets and the tools" \
2875 "build with '--disable-tools --disable-system'."
2877 pixman_cflags=
2878 pixman_libs=
2879 elif test "$pixman" = "system"; then
2880 # pixman version has been checked above
2881 pixman_cflags=`$pkg_config --cflags pixman-1`
2882 pixman_libs=`$pkg_config --libs pixman-1`
2883 else
2884 if test ! -d ${source_path}/pixman/pixman; then
2885 error_exit "pixman >= 0.21.8 not present. Your options:" \
2886 " (1) Preferred: Install the pixman devel package (any recent" \
2887 " distro should have packages as Xorg needs pixman too)." \
2888 " (2) Fetch the pixman submodule, using:" \
2889 " git submodule update --init pixman"
2891 mkdir -p pixman/pixman
2892 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
2893 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
2896 ##########################################
2897 # libcap probe
2899 if test "$cap" != "no" ; then
2900 cat > $TMPC <<EOF
2901 #include <stdio.h>
2902 #include <sys/capability.h>
2903 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
2905 if compile_prog "" "-lcap" ; then
2906 cap=yes
2907 else
2908 cap=no
2912 ##########################################
2913 # pthread probe
2914 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
2916 pthread=no
2917 cat > $TMPC << EOF
2918 #include <pthread.h>
2919 static void *f(void *p) { return NULL; }
2920 int main(void) {
2921 pthread_t thread;
2922 pthread_create(&thread, 0, f, 0);
2923 return 0;
2926 if compile_prog "" "" ; then
2927 pthread=yes
2928 else
2929 for pthread_lib in $PTHREADLIBS_LIST; do
2930 if compile_prog "" "$pthread_lib" ; then
2931 pthread=yes
2932 found=no
2933 for lib_entry in $LIBS; do
2934 if test "$lib_entry" = "$pthread_lib"; then
2935 found=yes
2936 break
2938 done
2939 if test "$found" = "no"; then
2940 LIBS="$pthread_lib $LIBS"
2942 break
2944 done
2947 if test "$mingw32" != yes -a "$pthread" = no; then
2948 error_exit "pthread check failed" \
2949 "Make sure to have the pthread libs and headers installed."
2952 # check for pthread_setname_np
2953 pthread_setname_np=no
2954 cat > $TMPC << EOF
2955 #include <pthread.h>
2957 static void *f(void *p) { return NULL; }
2958 int main(void)
2960 pthread_t thread;
2961 pthread_create(&thread, 0, f, 0);
2962 pthread_setname_np(thread, "QEMU");
2963 return 0;
2966 if compile_prog "" "$pthread_lib" ; then
2967 pthread_setname_np=yes
2970 ##########################################
2971 # rbd probe
2972 if test "$rbd" != "no" ; then
2973 cat > $TMPC <<EOF
2974 #include <stdio.h>
2975 #include <rbd/librbd.h>
2976 int main(void) {
2977 rados_t cluster;
2978 rados_create(&cluster, NULL);
2979 return 0;
2982 rbd_libs="-lrbd -lrados"
2983 if compile_prog "" "$rbd_libs" ; then
2984 rbd=yes
2985 else
2986 if test "$rbd" = "yes" ; then
2987 feature_not_found "rados block device" "Install librbd/ceph devel"
2989 rbd=no
2993 ##########################################
2994 # libssh2 probe
2995 min_libssh2_version=1.2.8
2996 if test "$libssh2" != "no" ; then
2997 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
2998 libssh2_cflags=`$pkg_config libssh2 --cflags`
2999 libssh2_libs=`$pkg_config libssh2 --libs`
3000 libssh2=yes
3001 else
3002 if test "$libssh2" = "yes" ; then
3003 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3005 libssh2=no
3009 ##########################################
3010 # libssh2_sftp_fsync probe
3012 if test "$libssh2" = "yes"; then
3013 cat > $TMPC <<EOF
3014 #include <stdio.h>
3015 #include <libssh2.h>
3016 #include <libssh2_sftp.h>
3017 int main(void) {
3018 LIBSSH2_SESSION *session;
3019 LIBSSH2_SFTP *sftp;
3020 LIBSSH2_SFTP_HANDLE *sftp_handle;
3021 session = libssh2_session_init ();
3022 sftp = libssh2_sftp_init (session);
3023 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3024 libssh2_sftp_fsync (sftp_handle);
3025 return 0;
3028 # libssh2_cflags/libssh2_libs defined in previous test.
3029 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3030 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3034 ##########################################
3035 # linux-aio probe
3037 if test "$linux_aio" != "no" ; then
3038 cat > $TMPC <<EOF
3039 #include <libaio.h>
3040 #include <sys/eventfd.h>
3041 #include <stddef.h>
3042 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3044 if compile_prog "" "-laio" ; then
3045 linux_aio=yes
3046 else
3047 if test "$linux_aio" = "yes" ; then
3048 feature_not_found "linux AIO" "Install libaio devel"
3050 linux_aio=no
3054 ##########################################
3055 # TPM passthrough is only on x86 Linux
3057 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3058 tpm_passthrough=$tpm
3059 else
3060 tpm_passthrough=no
3063 ##########################################
3064 # attr probe
3066 if test "$attr" != "no" ; then
3067 cat > $TMPC <<EOF
3068 #include <stdio.h>
3069 #include <sys/types.h>
3070 #ifdef CONFIG_LIBATTR
3071 #include <attr/xattr.h>
3072 #else
3073 #include <sys/xattr.h>
3074 #endif
3075 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3077 if compile_prog "" "" ; then
3078 attr=yes
3079 # Older distros have <attr/xattr.h>, and need -lattr:
3080 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3081 attr=yes
3082 LIBS="-lattr $LIBS"
3083 libattr=yes
3084 else
3085 if test "$attr" = "yes" ; then
3086 feature_not_found "ATTR" "Install libc6 or libattr devel"
3088 attr=no
3092 ##########################################
3093 # iovec probe
3094 cat > $TMPC <<EOF
3095 #include <sys/types.h>
3096 #include <sys/uio.h>
3097 #include <unistd.h>
3098 int main(void) { return sizeof(struct iovec); }
3100 iovec=no
3101 if compile_prog "" "" ; then
3102 iovec=yes
3105 ##########################################
3106 # preadv probe
3107 cat > $TMPC <<EOF
3108 #include <sys/types.h>
3109 #include <sys/uio.h>
3110 #include <unistd.h>
3111 int main(void) { return preadv(0, 0, 0, 0); }
3113 preadv=no
3114 if compile_prog "" "" ; then
3115 preadv=yes
3118 ##########################################
3119 # fdt probe
3120 # fdt support is mandatory for at least some target architectures,
3121 # so insist on it if we're building those system emulators.
3122 fdt_required=no
3123 for target in $target_list; do
3124 case $target in
3125 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3126 fdt_required=yes
3128 esac
3129 done
3131 if test "$fdt_required" = "yes"; then
3132 if test "$fdt" = "no"; then
3133 error_exit "fdt disabled but some requested targets require it." \
3134 "You can turn off fdt only if you also disable all the system emulation" \
3135 "targets which need it (by specifying a cut down --target-list)."
3137 fdt=yes
3140 if test "$fdt" != "no" ; then
3141 fdt_libs="-lfdt"
3142 # explicitly check for libfdt_env.h as it is missing in some stable installs
3143 cat > $TMPC << EOF
3144 #include <libfdt_env.h>
3145 int main(void) { return 0; }
3147 if compile_prog "" "$fdt_libs" ; then
3148 # system DTC is good - use it
3149 fdt=yes
3150 elif test -d ${source_path}/dtc/libfdt ; then
3151 # have submodule DTC - use it
3152 fdt=yes
3153 dtc_internal="yes"
3154 mkdir -p dtc
3155 if [ "$pwd_is_source_path" != "y" ] ; then
3156 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3157 symlink "$source_path/dtc/scripts" "dtc/scripts"
3159 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3160 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3161 elif test "$fdt" = "yes" ; then
3162 # have neither and want - prompt for system/submodule install
3163 error_exit "DTC (libfdt) not present. Your options:" \
3164 " (1) Preferred: Install the DTC (libfdt) devel package" \
3165 " (2) Fetch the DTC submodule, using:" \
3166 " git submodule update --init dtc"
3167 else
3168 # don't have and don't want
3169 fdt_libs=
3170 fdt=no
3174 libs_softmmu="$libs_softmmu $fdt_libs"
3176 ##########################################
3177 # opengl probe (for sdl2, milkymist-tmu2)
3179 # GLX probe, used by milkymist-tmu2
3180 # this is temporary, code will be switched to egl mid-term.
3181 cat > $TMPC << EOF
3182 #include <X11/Xlib.h>
3183 #include <GL/gl.h>
3184 #include <GL/glx.h>
3185 int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
3187 if compile_prog "" "-lGL -lX11" ; then
3188 have_glx=yes
3189 else
3190 have_glx=no
3193 if test "$opengl" != "no" ; then
3194 opengl_pkgs="gl glesv2"
3195 if $pkg_config $opengl_pkgs x11 && test "$have_glx" = "yes"; then
3196 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3197 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3198 opengl=yes
3199 else
3200 if test "$opengl" = "yes" ; then
3201 feature_not_found "opengl" "Install GL devel (e.g. MESA)"
3203 opengl_cflags=""
3204 opengl_libs=""
3205 opengl=no
3210 ##########################################
3211 # archipelago probe
3212 if test "$archipelago" != "no" ; then
3213 cat > $TMPC <<EOF
3214 #include <stdio.h>
3215 #include <xseg/xseg.h>
3216 #include <xseg/protocol.h>
3217 int main(void) {
3218 xseg_initialize();
3219 return 0;
3222 archipelago_libs=-lxseg
3223 if compile_prog "" "$archipelago_libs"; then
3224 archipelago="yes"
3225 libs_tools="$archipelago_libs $libs_tools"
3226 libs_softmmu="$archipelago_libs $libs_softmmu"
3228 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3229 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3230 echo "license and therefore prevent redistribution."
3231 echo
3232 echo "To disable Archipelago, use --disable-archipelago"
3233 else
3234 if test "$archipelago" = "yes" ; then
3235 feature_not_found "Archipelago backend support" "Install libxseg devel"
3237 archipelago="no"
3242 ##########################################
3243 # glusterfs probe
3244 if test "$glusterfs" != "no" ; then
3245 if $pkg_config --atleast-version=3 glusterfs-api; then
3246 glusterfs="yes"
3247 glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3248 glusterfs_libs=`$pkg_config --libs glusterfs-api`
3249 if $pkg_config --atleast-version=5 glusterfs-api; then
3250 glusterfs_discard="yes"
3252 if $pkg_config --atleast-version=6 glusterfs-api; then
3253 glusterfs_zerofill="yes"
3255 else
3256 if test "$glusterfs" = "yes" ; then
3257 feature_not_found "GlusterFS backend support" \
3258 "Install glusterfs-api devel >= 3"
3260 glusterfs="no"
3264 # Check for inotify functions when we are building linux-user
3265 # emulator. This is done because older glibc versions don't
3266 # have syscall stubs for these implemented. In that case we
3267 # don't provide them even if kernel supports them.
3269 inotify=no
3270 cat > $TMPC << EOF
3271 #include <sys/inotify.h>
3274 main(void)
3276 /* try to start inotify */
3277 return inotify_init();
3280 if compile_prog "" "" ; then
3281 inotify=yes
3284 inotify1=no
3285 cat > $TMPC << EOF
3286 #include <sys/inotify.h>
3289 main(void)
3291 /* try to start inotify */
3292 return inotify_init1(0);
3295 if compile_prog "" "" ; then
3296 inotify1=yes
3299 # check if utimensat and futimens are supported
3300 utimens=no
3301 cat > $TMPC << EOF
3302 #define _ATFILE_SOURCE
3303 #include <stddef.h>
3304 #include <fcntl.h>
3305 #include <sys/stat.h>
3307 int main(void)
3309 utimensat(AT_FDCWD, "foo", NULL, 0);
3310 futimens(0, NULL);
3311 return 0;
3314 if compile_prog "" "" ; then
3315 utimens=yes
3318 # check if pipe2 is there
3319 pipe2=no
3320 cat > $TMPC << EOF
3321 #include <unistd.h>
3322 #include <fcntl.h>
3324 int main(void)
3326 int pipefd[2];
3327 return pipe2(pipefd, O_CLOEXEC);
3330 if compile_prog "" "" ; then
3331 pipe2=yes
3334 # check if accept4 is there
3335 accept4=no
3336 cat > $TMPC << EOF
3337 #include <sys/socket.h>
3338 #include <stddef.h>
3340 int main(void)
3342 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3343 return 0;
3346 if compile_prog "" "" ; then
3347 accept4=yes
3350 # check if tee/splice is there. vmsplice was added same time.
3351 splice=no
3352 cat > $TMPC << EOF
3353 #include <unistd.h>
3354 #include <fcntl.h>
3355 #include <limits.h>
3357 int main(void)
3359 int len, fd = 0;
3360 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3361 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3362 return 0;
3365 if compile_prog "" "" ; then
3366 splice=yes
3369 ##########################################
3370 # libnuma probe
3372 if test "$numa" != "no" ; then
3373 cat > $TMPC << EOF
3374 #include <numa.h>
3375 int main(void) { return numa_available(); }
3378 if compile_prog "" "-lnuma" ; then
3379 numa=yes
3380 libs_softmmu="-lnuma $libs_softmmu"
3381 else
3382 if test "$numa" = "yes" ; then
3383 feature_not_found "numa" "install numactl devel"
3385 numa=no
3389 ##########################################
3390 # tcmalloc probe
3392 if test "$tcmalloc" = "yes" ; then
3393 cat > $TMPC << EOF
3394 #include <stdlib.h>
3395 int main(void) { malloc(1); return 0; }
3398 if compile_prog "" "-ltcmalloc" ; then
3399 LIBS="-ltcmalloc $LIBS"
3400 else
3401 feature_not_found "tcmalloc" "install gperftools devel"
3405 ##########################################
3406 # signalfd probe
3407 signalfd="no"
3408 cat > $TMPC << EOF
3409 #include <unistd.h>
3410 #include <sys/syscall.h>
3411 #include <signal.h>
3412 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3415 if compile_prog "" "" ; then
3416 signalfd=yes
3419 # check if eventfd is supported
3420 eventfd=no
3421 cat > $TMPC << EOF
3422 #include <sys/eventfd.h>
3424 int main(void)
3426 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3429 if compile_prog "" "" ; then
3430 eventfd=yes
3433 # check for fallocate
3434 fallocate=no
3435 cat > $TMPC << EOF
3436 #include <fcntl.h>
3438 int main(void)
3440 fallocate(0, 0, 0, 0);
3441 return 0;
3444 if compile_prog "" "" ; then
3445 fallocate=yes
3448 # check for fallocate hole punching
3449 fallocate_punch_hole=no
3450 cat > $TMPC << EOF
3451 #include <fcntl.h>
3452 #include <linux/falloc.h>
3454 int main(void)
3456 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3457 return 0;
3460 if compile_prog "" "" ; then
3461 fallocate_punch_hole=yes
3464 # check that fallocate supports range zeroing inside the file
3465 fallocate_zero_range=no
3466 cat > $TMPC << EOF
3467 #include <fcntl.h>
3468 #include <linux/falloc.h>
3470 int main(void)
3472 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3473 return 0;
3476 if compile_prog "" "" ; then
3477 fallocate_zero_range=yes
3480 # check for posix_fallocate
3481 posix_fallocate=no
3482 cat > $TMPC << EOF
3483 #include <fcntl.h>
3485 int main(void)
3487 posix_fallocate(0, 0, 0);
3488 return 0;
3491 if compile_prog "" "" ; then
3492 posix_fallocate=yes
3495 # check for sync_file_range
3496 sync_file_range=no
3497 cat > $TMPC << EOF
3498 #include <fcntl.h>
3500 int main(void)
3502 sync_file_range(0, 0, 0, 0);
3503 return 0;
3506 if compile_prog "" "" ; then
3507 sync_file_range=yes
3510 # check for linux/fiemap.h and FS_IOC_FIEMAP
3511 fiemap=no
3512 cat > $TMPC << EOF
3513 #include <sys/ioctl.h>
3514 #include <linux/fs.h>
3515 #include <linux/fiemap.h>
3517 int main(void)
3519 ioctl(0, FS_IOC_FIEMAP, 0);
3520 return 0;
3523 if compile_prog "" "" ; then
3524 fiemap=yes
3527 # check for dup3
3528 dup3=no
3529 cat > $TMPC << EOF
3530 #include <unistd.h>
3532 int main(void)
3534 dup3(0, 0, 0);
3535 return 0;
3538 if compile_prog "" "" ; then
3539 dup3=yes
3542 # check for ppoll support
3543 ppoll=no
3544 cat > $TMPC << EOF
3545 #include <poll.h>
3547 int main(void)
3549 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3550 ppoll(&pfd, 1, 0, 0);
3551 return 0;
3554 if compile_prog "" "" ; then
3555 ppoll=yes
3558 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3559 prctl_pr_set_timerslack=no
3560 cat > $TMPC << EOF
3561 #include <sys/prctl.h>
3563 int main(void)
3565 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3566 return 0;
3569 if compile_prog "" "" ; then
3570 prctl_pr_set_timerslack=yes
3573 # check for epoll support
3574 epoll=no
3575 cat > $TMPC << EOF
3576 #include <sys/epoll.h>
3578 int main(void)
3580 epoll_create(0);
3581 return 0;
3584 if compile_prog "" "" ; then
3585 epoll=yes
3588 # epoll_create1 and epoll_pwait are later additions
3589 # so we must check separately for their presence
3590 epoll_create1=no
3591 cat > $TMPC << EOF
3592 #include <sys/epoll.h>
3594 int main(void)
3596 /* Note that we use epoll_create1 as a value, not as
3597 * a function being called. This is necessary so that on
3598 * old SPARC glibc versions where the function was present in
3599 * the library but not declared in the header file we will
3600 * fail the configure check. (Otherwise we will get a compiler
3601 * warning but not an error, and will proceed to fail the
3602 * qemu compile where we compile with -Werror.)
3604 return (int)(uintptr_t)&epoll_create1;
3607 if compile_prog "" "" ; then
3608 epoll_create1=yes
3611 epoll_pwait=no
3612 cat > $TMPC << EOF
3613 #include <sys/epoll.h>
3615 int main(void)
3617 epoll_pwait(0, 0, 0, 0, 0);
3618 return 0;
3621 if compile_prog "" "" ; then
3622 epoll_pwait=yes
3625 # check for sendfile support
3626 sendfile=no
3627 cat > $TMPC << EOF
3628 #include <sys/sendfile.h>
3630 int main(void)
3632 return sendfile(0, 0, 0, 0);
3635 if compile_prog "" "" ; then
3636 sendfile=yes
3639 # check for timerfd support (glibc 2.8 and newer)
3640 timerfd=no
3641 cat > $TMPC << EOF
3642 #include <sys/timerfd.h>
3644 int main(void)
3646 return(timerfd_create(CLOCK_REALTIME, 0));
3649 if compile_prog "" "" ; then
3650 timerfd=yes
3653 # check for setns and unshare support
3654 setns=no
3655 cat > $TMPC << EOF
3656 #include <sched.h>
3658 int main(void)
3660 int ret;
3661 ret = setns(0, 0);
3662 ret = unshare(0);
3663 return ret;
3666 if compile_prog "" "" ; then
3667 setns=yes
3670 # Check if tools are available to build documentation.
3671 if test "$docs" != "no" ; then
3672 if has makeinfo && has pod2man; then
3673 docs=yes
3674 else
3675 if test "$docs" = "yes" ; then
3676 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3678 docs=no
3682 if test "$want_tools" = ""; then
3683 if test `expr "$target_list" : ".*softmmu.*"` != 0; then
3684 want_tools=yes
3685 else
3686 want_tools=no
3690 # Search for bswap_32 function
3691 byteswap_h=no
3692 cat > $TMPC << EOF
3693 #include <byteswap.h>
3694 int main(void) { return bswap_32(0); }
3696 if compile_prog "" "" ; then
3697 byteswap_h=yes
3700 # Search for bswap32 function
3701 bswap_h=no
3702 cat > $TMPC << EOF
3703 #include <sys/endian.h>
3704 #include <sys/types.h>
3705 #include <machine/bswap.h>
3706 int main(void) { return bswap32(0); }
3708 if compile_prog "" "" ; then
3709 bswap_h=yes
3712 ##########################################
3713 # Do we have libiscsi >= 1.9.0
3714 if test "$libiscsi" != "no" ; then
3715 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3716 libiscsi="yes"
3717 libiscsi_cflags=$($pkg_config --cflags libiscsi)
3718 libiscsi_libs=$($pkg_config --libs libiscsi)
3719 else
3720 if test "$libiscsi" = "yes" ; then
3721 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3723 libiscsi="no"
3727 ##########################################
3728 # Do we need libm
3729 cat > $TMPC << EOF
3730 #include <math.h>
3731 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3733 if compile_prog "" "" ; then
3735 elif compile_prog "" "-lm" ; then
3736 LIBS="-lm $LIBS"
3737 libs_qga="-lm $libs_qga"
3738 else
3739 error_exit "libm check failed"
3742 ##########################################
3743 # Do we need librt
3744 # uClibc provides 2 versions of clock_gettime(), one with realtime
3745 # support and one without. This means that the clock_gettime() don't
3746 # need -lrt. We still need it for timer_create() so we check for this
3747 # function in addition.
3748 cat > $TMPC <<EOF
3749 #include <signal.h>
3750 #include <time.h>
3751 int main(void) {
3752 timer_create(CLOCK_REALTIME, NULL, NULL);
3753 return clock_gettime(CLOCK_REALTIME, NULL);
3757 if compile_prog "" "" ; then
3759 # we need pthread for static linking. use previous pthread test result
3760 elif compile_prog "" "$pthread_lib -lrt" ; then
3761 LIBS="$LIBS -lrt"
3762 libs_qga="$libs_qga -lrt"
3765 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3766 "$aix" != "yes" -a "$haiku" != "yes" ; then
3767 libs_softmmu="-lutil $libs_softmmu"
3770 ##########################################
3771 # spice probe
3772 if test "$spice" != "no" ; then
3773 cat > $TMPC << EOF
3774 #include <spice.h>
3775 int main(void) { spice_server_new(); return 0; }
3777 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3778 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3779 if $pkg_config --atleast-version=0.12.0 spice-server && \
3780 $pkg_config --atleast-version=0.12.3 spice-protocol && \
3781 compile_prog "$spice_cflags" "$spice_libs" ; then
3782 spice="yes"
3783 libs_softmmu="$libs_softmmu $spice_libs"
3784 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3785 spice_protocol_version=$($pkg_config --modversion spice-protocol)
3786 spice_server_version=$($pkg_config --modversion spice-server)
3787 else
3788 if test "$spice" = "yes" ; then
3789 feature_not_found "spice" \
3790 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3792 spice="no"
3796 # check for libcacard for smartcard support
3797 smartcard_cflags=""
3798 # TODO - what's the minimal nss version we support?
3799 if test "$smartcard_nss" != "no"; then
3800 cat > $TMPC << EOF
3801 #include <pk11pub.h>
3802 int main(void) { PK11_FreeSlot(0); return 0; }
3804 # FIXME: do not include $glib_* in here
3805 nss_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
3806 nss_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
3807 test_cflags="$nss_cflags"
3808 # The header files in nss < 3.13.3 have a bug which causes them to
3809 # emit a warning. If we're going to compile QEMU with -Werror, then
3810 # test that the headers don't have this bug. Otherwise we would pass
3811 # the configure test but fail to compile QEMU later.
3812 if test "$werror" = "yes"; then
3813 test_cflags="-Werror $test_cflags"
3815 if test -n "$libtool" &&
3816 $pkg_config --atleast-version=3.12.8 nss && \
3817 compile_prog "$test_cflags" "$nss_libs"; then
3818 smartcard_nss="yes"
3819 else
3820 if test "$smartcard_nss" = "yes"; then
3821 feature_not_found "nss" "Install nss devel >= 3.12.8"
3823 smartcard_nss="no"
3827 # check for libusb
3828 if test "$libusb" != "no" ; then
3829 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
3830 libusb="yes"
3831 libusb_cflags=$($pkg_config --cflags libusb-1.0)
3832 libusb_libs=$($pkg_config --libs libusb-1.0)
3833 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3834 libs_softmmu="$libs_softmmu $libusb_libs"
3835 else
3836 if test "$libusb" = "yes"; then
3837 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
3839 libusb="no"
3843 # check for usbredirparser for usb network redirection support
3844 if test "$usb_redir" != "no" ; then
3845 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
3846 usb_redir="yes"
3847 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3848 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
3849 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
3850 libs_softmmu="$libs_softmmu $usb_redir_libs"
3851 else
3852 if test "$usb_redir" = "yes"; then
3853 feature_not_found "usb-redir" "Install usbredir devel"
3855 usb_redir="no"
3859 ##########################################
3860 # check if we have VSS SDK headers for win
3862 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3863 case "$vss_win32_sdk" in
3864 "") vss_win32_include="-I$source_path" ;;
3865 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3866 # handle path with spaces. So we symlink the headers into ".sdk/vss".
3867 vss_win32_include="-I$source_path/.sdk/vss"
3868 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3870 *) vss_win32_include="-I$vss_win32_sdk"
3871 esac
3872 cat > $TMPC << EOF
3873 #define __MIDL_user_allocate_free_DEFINED__
3874 #include <inc/win2003/vss.h>
3875 int main(void) { return VSS_CTX_BACKUP; }
3877 if compile_prog "$vss_win32_include" "" ; then
3878 guest_agent_with_vss="yes"
3879 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3880 libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3881 else
3882 if test "$vss_win32_sdk" != "" ; then
3883 echo "ERROR: Please download and install Microsoft VSS SDK:"
3884 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3885 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3886 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
3887 echo "ERROR: The headers are extracted in the directory \`inc'."
3888 feature_not_found "VSS support"
3890 guest_agent_with_vss="no"
3894 ##########################################
3895 # lookup Windows platform SDK (if not specified)
3896 # The SDK is needed only to build .tlb (type library) file of guest agent
3897 # VSS provider from the source. It is usually unnecessary because the
3898 # pre-compiled .tlb file is included.
3900 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
3901 if test -z "$win_sdk"; then
3902 programfiles="$PROGRAMFILES"
3903 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3904 if test -n "$programfiles"; then
3905 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3906 else
3907 feature_not_found "Windows SDK"
3909 elif test "$win_sdk" = "no"; then
3910 win_sdk=""
3914 ##########################################
3916 ##########################################
3917 # check if we have fdatasync
3919 fdatasync=no
3920 cat > $TMPC << EOF
3921 #include <unistd.h>
3922 int main(void) {
3923 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
3924 return fdatasync(0);
3925 #else
3926 #error Not supported
3927 #endif
3930 if compile_prog "" "" ; then
3931 fdatasync=yes
3934 ##########################################
3935 # check if we have madvise
3937 madvise=no
3938 cat > $TMPC << EOF
3939 #include <sys/types.h>
3940 #include <sys/mman.h>
3941 #include <stddef.h>
3942 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
3944 if compile_prog "" "" ; then
3945 madvise=yes
3948 ##########################################
3949 # check if we have posix_madvise
3951 posix_madvise=no
3952 cat > $TMPC << EOF
3953 #include <sys/mman.h>
3954 #include <stddef.h>
3955 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
3957 if compile_prog "" "" ; then
3958 posix_madvise=yes
3961 ##########################################
3962 # check if we have usable SIGEV_THREAD_ID
3964 sigev_thread_id=no
3965 cat > $TMPC << EOF
3966 #include <signal.h>
3967 int main(void) {
3968 struct sigevent ev;
3969 ev.sigev_notify = SIGEV_THREAD_ID;
3970 ev._sigev_un._tid = 0;
3971 asm volatile("" : : "g"(&ev));
3972 return 0;
3975 if compile_prog "" "" ; then
3976 sigev_thread_id=yes
3979 ##########################################
3980 # check if trace backend exists
3982 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
3983 if test "$?" -ne 0 ; then
3984 error_exit "invalid trace backends" \
3985 "Please choose supported trace backends."
3988 ##########################################
3989 # For 'ust' backend, test if ust headers are present
3990 if have_backend "ust"; then
3991 cat > $TMPC << EOF
3992 #include <lttng/tracepoint.h>
3993 int main(void) { return 0; }
3995 if compile_prog "" "" ; then
3996 if $pkg_config lttng-ust --exists; then
3997 lttng_ust_libs=`$pkg_config --libs lttng-ust`
3998 else
3999 lttng_ust_libs="-llttng-ust"
4001 if $pkg_config liburcu-bp --exists; then
4002 urcu_bp_libs=`$pkg_config --libs liburcu-bp`
4003 else
4004 urcu_bp_libs="-lurcu-bp"
4007 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4008 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4009 else
4010 error_exit "Trace backend 'ust' missing lttng-ust header files"
4014 ##########################################
4015 # For 'dtrace' backend, test if 'dtrace' command is present
4016 if have_backend "dtrace"; then
4017 if ! has 'dtrace' ; then
4018 error_exit "dtrace command is not found in PATH $PATH"
4020 trace_backend_stap="no"
4021 if has 'stap' ; then
4022 trace_backend_stap="yes"
4026 ##########################################
4027 # check and set a backend for coroutine
4029 # We prefer ucontext, but it's not always possible. The fallback
4030 # is sigcontext. gthread is not selectable except explicitly, because
4031 # it is not functional enough to run QEMU proper. (It is occasionally
4032 # useful for debugging purposes.) On Windows the only valid backend
4033 # is the Windows-specific one.
4035 ucontext_works=no
4036 if test "$darwin" != "yes"; then
4037 cat > $TMPC << EOF
4038 #include <ucontext.h>
4039 #ifdef __stub_makecontext
4040 #error Ignoring glibc stub makecontext which will always fail
4041 #endif
4042 int main(void) { makecontext(0, 0, 0); return 0; }
4044 if compile_prog "" "" ; then
4045 ucontext_works=yes
4049 if test "$coroutine" = ""; then
4050 if test "$mingw32" = "yes"; then
4051 coroutine=win32
4052 elif test "$ucontext_works" = "yes"; then
4053 coroutine=ucontext
4054 else
4055 coroutine=sigaltstack
4057 else
4058 case $coroutine in
4059 windows)
4060 if test "$mingw32" != "yes"; then
4061 error_exit "'windows' coroutine backend only valid for Windows"
4063 # Unfortunately the user visible backend name doesn't match the
4064 # coroutine-*.c filename for this case, so we have to adjust it here.
4065 coroutine=win32
4067 ucontext)
4068 if test "$ucontext_works" != "yes"; then
4069 feature_not_found "ucontext"
4072 gthread|sigaltstack)
4073 if test "$mingw32" = "yes"; then
4074 error_exit "only the 'windows' coroutine backend is valid for Windows"
4078 error_exit "unknown coroutine backend $coroutine"
4080 esac
4083 if test "$coroutine_pool" = ""; then
4084 if test "$coroutine" = "gthread" -o "$coroutine" = "win32"; then
4085 coroutine_pool=no
4086 else
4087 coroutine_pool=yes
4090 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4091 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4094 ##########################################
4095 # check if we have open_by_handle_at
4097 open_by_handle_at=no
4098 cat > $TMPC << EOF
4099 #include <fcntl.h>
4100 #if !defined(AT_EMPTY_PATH)
4101 # error missing definition
4102 #else
4103 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4104 #endif
4106 if compile_prog "" "" ; then
4107 open_by_handle_at=yes
4110 ########################################
4111 # check if we have linux/magic.h
4113 linux_magic_h=no
4114 cat > $TMPC << EOF
4115 #include <linux/magic.h>
4116 int main(void) {
4117 return 0;
4120 if compile_prog "" "" ; then
4121 linux_magic_h=yes
4124 ########################################
4125 # check whether we can disable warning option with a pragma (this is needed
4126 # to silence warnings in the headers of some versions of external libraries).
4127 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4128 # only a warning.
4130 # If we can't selectively disable warning in the code, disable -Werror so that
4131 # the build doesn't fail anyway.
4133 pragma_disable_unused_but_set=no
4134 cat > $TMPC << EOF
4135 #pragma GCC diagnostic push
4136 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4137 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4138 #pragma GCC diagnostic pop
4140 int main(void) {
4141 return 0;
4144 if compile_prog "-Werror" "" ; then
4145 pragma_diagnostic_available=yes
4148 ########################################
4149 # check if we have valgrind/valgrind.h
4151 valgrind_h=no
4152 cat > $TMPC << EOF
4153 #include <valgrind/valgrind.h>
4154 int main(void) {
4155 return 0;
4158 if compile_prog "" "" ; then
4159 valgrind_h=yes
4162 ########################################
4163 # check if environ is declared
4165 has_environ=no
4166 cat > $TMPC << EOF
4167 #include <unistd.h>
4168 int main(void) {
4169 environ = 0;
4170 return 0;
4173 if compile_prog "" "" ; then
4174 has_environ=yes
4177 ########################################
4178 # check if cpuid.h is usable.
4180 cpuid_h=no
4181 cat > $TMPC << EOF
4182 #include <cpuid.h>
4183 int main(void) {
4184 unsigned a, b, c, d;
4185 int max = __get_cpuid_max(0, 0);
4187 if (max >= 1) {
4188 __cpuid(1, a, b, c, d);
4191 if (max >= 7) {
4192 __cpuid_count(7, 0, a, b, c, d);
4195 return 0;
4198 if compile_prog "" "" ; then
4199 cpuid_h=yes
4202 ########################################
4203 # check if __[u]int128_t is usable.
4205 int128=no
4206 cat > $TMPC << EOF
4207 #if defined(__clang_major__) && defined(__clang_minor__)
4208 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4209 # error __int128_t does not work in CLANG before 3.2
4210 # endif
4211 #endif
4212 __int128_t a;
4213 __uint128_t b;
4214 int main (void) {
4215 a = a + b;
4216 b = a * b;
4217 a = a * a;
4218 return 0;
4221 if compile_prog "" "" ; then
4222 int128=yes
4225 ########################################
4226 # check if getauxval is available.
4228 getauxval=no
4229 cat > $TMPC << EOF
4230 #include <sys/auxv.h>
4231 int main(void) {
4232 return getauxval(AT_HWCAP) == 0;
4235 if compile_prog "" "" ; then
4236 getauxval=yes
4239 ##########################################
4240 # End of CC checks
4241 # After here, no more $cc or $ld runs
4243 if test "$gcov" = "yes" ; then
4244 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4245 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4246 elif test "$debug" = "no" ; then
4247 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4250 ##########################################
4251 # Do we have libnfs
4252 if test "$libnfs" != "no" ; then
4253 if $pkg_config --atleast-version=1.9.3 libnfs; then
4254 libnfs="yes"
4255 libnfs_libs=$($pkg_config --libs libnfs)
4256 LIBS="$LIBS $libnfs_libs"
4257 else
4258 if test "$libnfs" = "yes" ; then
4259 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4261 libnfs="no"
4265 # Disable zero malloc errors for official releases unless explicitly told to
4266 # enable/disable
4267 if test -z "$zero_malloc" ; then
4268 if test "$z_version" = "50" ; then
4269 zero_malloc="no"
4270 else
4271 zero_malloc="yes"
4275 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4276 if test "$werror" = "yes"; then
4277 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4280 if test "$solaris" = "no" ; then
4281 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4282 LDFLAGS="-Wl,--warn-common $LDFLAGS"
4286 # test if pod2man has --utf8 option
4287 if pod2man --help | grep -q utf8; then
4288 POD2MAN="pod2man --utf8"
4289 else
4290 POD2MAN="pod2man"
4293 # Use large addresses, ASLR, no-SEH and DEP if available.
4294 if test "$mingw32" = "yes" ; then
4295 if test "$cpu" = i386; then
4296 LDFLAGS="-Wl,--large-address-aware $LDFLAGS"
4298 for flag in --dynamicbase --no-seh --nxcompat; do
4299 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4300 LDFLAGS="-Wl,$flag $LDFLAGS"
4302 done
4305 qemu_confdir=$sysconfdir$confsuffix
4306 qemu_moddir=$libdir$confsuffix
4307 qemu_datadir=$datadir$confsuffix
4308 qemu_localedir="$datadir/locale"
4310 tools=""
4311 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4312 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4313 tools="qemu-nbd\$(EXESUF) $tools"
4315 if test "$softmmu" = yes ; then
4316 if test "$virtfs" != no ; then
4317 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4318 virtfs=yes
4319 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4320 else
4321 if test "$virtfs" = yes; then
4322 error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4324 virtfs=no
4328 if [ "$guest_agent" != "no" ]; then
4329 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4330 tools="qemu-ga\$(EXESUF) $tools"
4331 if [ "$mingw32" = "yes" -a "$guest_agent_with_vss" = "yes" ]; then
4332 tools="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb $tools"
4334 guest_agent=yes
4335 elif [ "$guest_agent" != yes ]; then
4336 guest_agent=no
4337 else
4338 error_exit "Guest agent is not supported on this platform"
4342 # Mac OS X ships with a broken assembler
4343 roms=
4344 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4345 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4346 "$softmmu" = yes ; then
4347 roms="optionrom"
4349 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4350 roms="$roms spapr-rtas"
4353 if test "$cpu" = "s390x" ; then
4354 roms="$roms s390-ccw"
4357 # Probe for the need for relocating the user-only binary.
4358 if test "$pie" = "no" ; then
4359 textseg_addr=
4360 case "$cpu" in
4361 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4362 # ??? Rationale for choosing this address
4363 textseg_addr=0x60000000
4365 mips)
4366 # A 256M aligned address, high in the address space, with enough
4367 # room for the code_gen_buffer above it before the stack.
4368 textseg_addr=0x60000000
4370 esac
4371 if [ -n "$textseg_addr" ]; then
4372 cat > $TMPC <<EOF
4373 int main(void) { return 0; }
4375 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4376 if ! compile_prog "" "$textseg_ldflags"; then
4377 # In case ld does not support -Ttext-segment, edit the default linker
4378 # script via sed to set the .text start addr. This is needed on FreeBSD
4379 # at least.
4380 $ld --verbose | sed \
4381 -e '1,/==================================================/d' \
4382 -e '/==================================================/,$d' \
4383 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4384 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4385 textseg_ldflags="-Wl,-T../config-host.ld"
4390 # prepend pixman and ftd flags after all config tests are done
4391 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4392 libs_softmmu="$pixman_libs $libs_softmmu"
4394 echo "Install prefix $prefix"
4395 echo "BIOS directory `eval echo $qemu_datadir`"
4396 echo "binary directory `eval echo $bindir`"
4397 echo "library directory `eval echo $libdir`"
4398 echo "module directory `eval echo $qemu_moddir`"
4399 echo "libexec directory `eval echo $libexecdir`"
4400 echo "include directory `eval echo $includedir`"
4401 echo "config directory `eval echo $sysconfdir`"
4402 if test "$mingw32" = "no" ; then
4403 echo "local state directory `eval echo $local_statedir`"
4404 echo "Manual directory `eval echo $mandir`"
4405 echo "ELF interp prefix $interp_prefix"
4406 else
4407 echo "local state directory queried at runtime"
4408 echo "Windows SDK $win_sdk"
4410 echo "Source path $source_path"
4411 echo "C compiler $cc"
4412 echo "Host C compiler $host_cc"
4413 echo "C++ compiler $cxx"
4414 echo "Objective-C compiler $objcc"
4415 echo "ARFLAGS $ARFLAGS"
4416 echo "CFLAGS $CFLAGS"
4417 echo "QEMU_CFLAGS $QEMU_CFLAGS"
4418 echo "LDFLAGS $LDFLAGS"
4419 echo "make $make"
4420 echo "install $install"
4421 echo "python $python"
4422 if test "$slirp" = "yes" ; then
4423 echo "smbd $smbd"
4425 echo "module support $modules"
4426 echo "host CPU $cpu"
4427 echo "host big endian $bigendian"
4428 echo "target list $target_list"
4429 echo "tcg debug enabled $debug_tcg"
4430 echo "gprof enabled $gprof"
4431 echo "sparse enabled $sparse"
4432 echo "strip binaries $strip_opt"
4433 echo "profiler $profiler"
4434 echo "static build $static"
4435 if test "$darwin" = "yes" ; then
4436 echo "Cocoa support $cocoa"
4438 echo "pixman $pixman"
4439 echo "SDL support $sdl"
4440 echo "GTK support $gtk"
4441 echo "VTE support $vte"
4442 echo "curses support $curses"
4443 echo "curl support $curl"
4444 echo "mingw32 support $mingw32"
4445 echo "Audio drivers $audio_drv_list"
4446 echo "Block whitelist (rw) $block_drv_rw_whitelist"
4447 echo "Block whitelist (ro) $block_drv_ro_whitelist"
4448 echo "VirtFS support $virtfs"
4449 echo "VNC support $vnc"
4450 if test "$vnc" = "yes" ; then
4451 echo "VNC TLS support $vnc_tls"
4452 echo "VNC SASL support $vnc_sasl"
4453 echo "VNC JPEG support $vnc_jpeg"
4454 echo "VNC PNG support $vnc_png"
4455 echo "VNC WS support $vnc_ws"
4457 if test -n "$sparc_cpu"; then
4458 echo "Target Sparc Arch $sparc_cpu"
4460 echo "xen support $xen"
4461 if test "$xen" = "yes" ; then
4462 echo "xen ctrl version $xen_ctrl_version"
4464 echo "brlapi support $brlapi"
4465 echo "bluez support $bluez"
4466 echo "Documentation $docs"
4467 echo "Tools $tools"
4468 echo "GUEST_BASE $guest_base"
4469 echo "PIE $pie"
4470 echo "vde support $vde"
4471 echo "netmap support $netmap"
4472 echo "Linux AIO support $linux_aio"
4473 echo "(X)ATTR support $attr"
4474 echo "Install blobs $blobs"
4475 echo "KVM support $kvm"
4476 echo "RDMA support $rdma"
4477 echo "TCG interpreter $tcg_interpreter"
4478 echo "fdt support $fdt"
4479 echo "preadv support $preadv"
4480 echo "fdatasync $fdatasync"
4481 echo "madvise $madvise"
4482 echo "posix_madvise $posix_madvise"
4483 echo "sigev_thread_id $sigev_thread_id"
4484 echo "uuid support $uuid"
4485 echo "libcap-ng support $cap_ng"
4486 echo "vhost-net support $vhost_net"
4487 echo "vhost-scsi support $vhost_scsi"
4488 echo "Trace backends $trace_backends"
4489 if test "$trace_backend" = "simple"; then
4490 echo "Trace output file $trace_file-<pid>"
4492 if test "$spice" = "yes"; then
4493 echo "spice support $spice ($spice_protocol_version/$spice_server_version)"
4494 else
4495 echo "spice support $spice"
4497 echo "rbd support $rbd"
4498 echo "xfsctl support $xfs"
4499 echo "nss used $smartcard_nss"
4500 echo "libusb $libusb"
4501 echo "usb net redir $usb_redir"
4502 echo "OpenGL support $opengl"
4503 echo "libiscsi support $libiscsi"
4504 echo "libnfs support $libnfs"
4505 echo "build guest agent $guest_agent"
4506 echo "QGA VSS support $guest_agent_with_vss"
4507 echo "seccomp support $seccomp"
4508 echo "coroutine backend $coroutine"
4509 echo "coroutine pool $coroutine_pool"
4510 echo "GlusterFS support $glusterfs"
4511 echo "Archipelago support $archipelago"
4512 echo "gcov $gcov_tool"
4513 echo "gcov enabled $gcov"
4514 echo "TPM support $tpm"
4515 echo "libssh2 support $libssh2"
4516 echo "TPM passthrough $tpm_passthrough"
4517 echo "QOM debugging $qom_cast_debug"
4518 echo "vhdx $vhdx"
4519 echo "Quorum $quorum"
4520 echo "lzo support $lzo"
4521 echo "snappy support $snappy"
4522 echo "bzip2 support $bzip2"
4523 echo "NUMA host support $numa"
4524 echo "tcmalloc support $tcmalloc"
4526 if test "$sdl_too_old" = "yes"; then
4527 echo "-> Your SDL version is too old - please upgrade to have SDL support"
4530 config_host_mak="config-host.mak"
4532 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4534 echo "# Automatically generated by configure - do not modify" > $config_host_mak
4535 echo >> $config_host_mak
4537 echo all: >> $config_host_mak
4538 echo "prefix=$prefix" >> $config_host_mak
4539 echo "bindir=$bindir" >> $config_host_mak
4540 echo "libdir=$libdir" >> $config_host_mak
4541 echo "libexecdir=$libexecdir" >> $config_host_mak
4542 echo "includedir=$includedir" >> $config_host_mak
4543 echo "mandir=$mandir" >> $config_host_mak
4544 echo "sysconfdir=$sysconfdir" >> $config_host_mak
4545 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4546 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4547 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4548 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4549 if test "$mingw32" = "no" ; then
4550 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4552 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4553 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4554 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4555 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4556 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4558 echo "ARCH=$ARCH" >> $config_host_mak
4560 if test "$debug_tcg" = "yes" ; then
4561 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4563 if test "$strip_opt" = "yes" ; then
4564 echo "STRIP=${strip}" >> $config_host_mak
4566 if test "$bigendian" = "yes" ; then
4567 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4569 if test "$mingw32" = "yes" ; then
4570 echo "CONFIG_WIN32=y" >> $config_host_mak
4571 echo "CONFIG_INSTALLER=y" >> $config_host_mak
4572 rc_version=`cat "$source_path/VERSION"`
4573 version_major=${rc_version%%.*}
4574 rc_version=${rc_version#*.}
4575 version_minor=${rc_version%%.*}
4576 rc_version=${rc_version#*.}
4577 version_subminor=${rc_version%%.*}
4578 version_micro=0
4579 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4580 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4581 if test "$guest_agent_with_vss" = "yes" ; then
4582 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4583 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4585 else
4586 echo "CONFIG_POSIX=y" >> $config_host_mak
4589 if test "$linux" = "yes" ; then
4590 echo "CONFIG_LINUX=y" >> $config_host_mak
4593 if test "$darwin" = "yes" ; then
4594 echo "CONFIG_DARWIN=y" >> $config_host_mak
4597 if test "$aix" = "yes" ; then
4598 echo "CONFIG_AIX=y" >> $config_host_mak
4601 if test "$solaris" = "yes" ; then
4602 echo "CONFIG_SOLARIS=y" >> $config_host_mak
4603 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
4604 if test "$needs_libsunmath" = "yes" ; then
4605 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
4608 if test "$haiku" = "yes" ; then
4609 echo "CONFIG_HAIKU=y" >> $config_host_mak
4611 if test "$static" = "yes" ; then
4612 echo "CONFIG_STATIC=y" >> $config_host_mak
4614 if test "$profiler" = "yes" ; then
4615 echo "CONFIG_PROFILER=y" >> $config_host_mak
4617 if test "$slirp" = "yes" ; then
4618 echo "CONFIG_SLIRP=y" >> $config_host_mak
4619 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4621 if test "$vde" = "yes" ; then
4622 echo "CONFIG_VDE=y" >> $config_host_mak
4624 if test "$netmap" = "yes" ; then
4625 echo "CONFIG_NETMAP=y" >> $config_host_mak
4627 if test "$l2tpv3" = "yes" ; then
4628 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4630 if test "$cap_ng" = "yes" ; then
4631 echo "CONFIG_LIBCAP=y" >> $config_host_mak
4633 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4634 for drv in $audio_drv_list; do
4635 def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4636 echo "$def=y" >> $config_host_mak
4637 if test "$drv" = "fmod"; then
4638 echo "FMOD_CFLAGS=-I$fmod_inc" >> $config_host_mak
4640 done
4641 if test "$audio_pt_int" = "yes" ; then
4642 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4644 if test "$audio_win_int" = "yes" ; then
4645 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4647 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4648 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4649 if test "$vnc" = "yes" ; then
4650 echo "CONFIG_VNC=y" >> $config_host_mak
4652 if test "$vnc_tls" = "yes" ; then
4653 echo "CONFIG_VNC_TLS=y" >> $config_host_mak
4655 if test "$vnc_sasl" = "yes" ; then
4656 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4658 if test "$vnc_jpeg" = "yes" ; then
4659 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
4661 if test "$vnc_png" = "yes" ; then
4662 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
4664 if test "$vnc_ws" = "yes" ; then
4665 echo "CONFIG_VNC_WS=y" >> $config_host_mak
4666 echo "VNC_WS_CFLAGS=$vnc_ws_cflags" >> $config_host_mak
4668 if test "$fnmatch" = "yes" ; then
4669 echo "CONFIG_FNMATCH=y" >> $config_host_mak
4671 if test "$uuid" = "yes" ; then
4672 echo "CONFIG_UUID=y" >> $config_host_mak
4674 if test "$xfs" = "yes" ; then
4675 echo "CONFIG_XFS=y" >> $config_host_mak
4677 qemu_version=`head "$source_path/VERSION"`
4678 echo "VERSION=$qemu_version" >>$config_host_mak
4679 echo "PKGVERSION=$pkgversion" >>$config_host_mak
4680 echo "SRC_PATH=$source_path" >> $config_host_mak
4681 echo "TARGET_DIRS=$target_list" >> $config_host_mak
4682 if [ "$docs" = "yes" ] ; then
4683 echo "BUILD_DOCS=yes" >> $config_host_mak
4685 if [ "$want_tools" = "yes" ] ; then
4686 echo "BUILD_TOOLS=yes" >> $config_host_mak
4688 if test "$modules" = "yes"; then
4689 # $shacmd can generate a hash started with digit, which the compiler doesn't
4690 # like as an symbol. So prefix it with an underscore
4691 echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
4692 echo "CONFIG_MODULES=y" >> $config_host_mak
4694 if test "$sdl" = "yes" ; then
4695 echo "CONFIG_SDL=y" >> $config_host_mak
4696 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
4697 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
4699 if test "$cocoa" = "yes" ; then
4700 echo "CONFIG_COCOA=y" >> $config_host_mak
4702 if test "$curses" = "yes" ; then
4703 echo "CONFIG_CURSES=y" >> $config_host_mak
4705 if test "$utimens" = "yes" ; then
4706 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
4708 if test "$pipe2" = "yes" ; then
4709 echo "CONFIG_PIPE2=y" >> $config_host_mak
4711 if test "$accept4" = "yes" ; then
4712 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
4714 if test "$splice" = "yes" ; then
4715 echo "CONFIG_SPLICE=y" >> $config_host_mak
4717 if test "$eventfd" = "yes" ; then
4718 echo "CONFIG_EVENTFD=y" >> $config_host_mak
4720 if test "$fallocate" = "yes" ; then
4721 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
4723 if test "$fallocate_punch_hole" = "yes" ; then
4724 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
4726 if test "$fallocate_zero_range" = "yes" ; then
4727 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
4729 if test "$posix_fallocate" = "yes" ; then
4730 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
4732 if test "$sync_file_range" = "yes" ; then
4733 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
4735 if test "$fiemap" = "yes" ; then
4736 echo "CONFIG_FIEMAP=y" >> $config_host_mak
4738 if test "$dup3" = "yes" ; then
4739 echo "CONFIG_DUP3=y" >> $config_host_mak
4741 if test "$ppoll" = "yes" ; then
4742 echo "CONFIG_PPOLL=y" >> $config_host_mak
4744 if test "$prctl_pr_set_timerslack" = "yes" ; then
4745 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
4747 if test "$epoll" = "yes" ; then
4748 echo "CONFIG_EPOLL=y" >> $config_host_mak
4750 if test "$epoll_create1" = "yes" ; then
4751 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
4753 if test "$epoll_pwait" = "yes" ; then
4754 echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
4756 if test "$sendfile" = "yes" ; then
4757 echo "CONFIG_SENDFILE=y" >> $config_host_mak
4759 if test "$timerfd" = "yes" ; then
4760 echo "CONFIG_TIMERFD=y" >> $config_host_mak
4762 if test "$setns" = "yes" ; then
4763 echo "CONFIG_SETNS=y" >> $config_host_mak
4765 if test "$inotify" = "yes" ; then
4766 echo "CONFIG_INOTIFY=y" >> $config_host_mak
4768 if test "$inotify1" = "yes" ; then
4769 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
4771 if test "$byteswap_h" = "yes" ; then
4772 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
4774 if test "$bswap_h" = "yes" ; then
4775 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
4777 if test "$curl" = "yes" ; then
4778 echo "CONFIG_CURL=m" >> $config_host_mak
4779 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
4780 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
4782 if test "$brlapi" = "yes" ; then
4783 echo "CONFIG_BRLAPI=y" >> $config_host_mak
4785 if test "$bluez" = "yes" ; then
4786 echo "CONFIG_BLUEZ=y" >> $config_host_mak
4787 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
4789 if test "glib_subprocess" = "yes" ; then
4790 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
4792 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4793 if test "$gtk" = "yes" ; then
4794 echo "CONFIG_GTK=y" >> $config_host_mak
4795 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
4796 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
4798 if test "$vte" = "yes" ; then
4799 echo "CONFIG_VTE=y" >> $config_host_mak
4800 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
4802 if test "$xen" = "yes" ; then
4803 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4804 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4806 if test "$linux_aio" = "yes" ; then
4807 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4809 if test "$attr" = "yes" ; then
4810 echo "CONFIG_ATTR=y" >> $config_host_mak
4812 if test "$libattr" = "yes" ; then
4813 echo "CONFIG_LIBATTR=y" >> $config_host_mak
4815 if test "$virtfs" = "yes" ; then
4816 echo "CONFIG_VIRTFS=y" >> $config_host_mak
4818 if test "$vhost_scsi" = "yes" ; then
4819 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4821 if test "$vhost_net" = "yes" ; then
4822 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
4824 if test "$blobs" = "yes" ; then
4825 echo "INSTALL_BLOBS=yes" >> $config_host_mak
4827 if test "$iovec" = "yes" ; then
4828 echo "CONFIG_IOVEC=y" >> $config_host_mak
4830 if test "$preadv" = "yes" ; then
4831 echo "CONFIG_PREADV=y" >> $config_host_mak
4833 if test "$fdt" = "yes" ; then
4834 echo "CONFIG_FDT=y" >> $config_host_mak
4836 if test "$signalfd" = "yes" ; then
4837 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
4839 if test "$tcg_interpreter" = "yes" ; then
4840 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4842 if test "$fdatasync" = "yes" ; then
4843 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
4845 if test "$madvise" = "yes" ; then
4846 echo "CONFIG_MADVISE=y" >> $config_host_mak
4848 if test "$posix_madvise" = "yes" ; then
4849 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
4851 if test "$sigev_thread_id" = "yes" ; then
4852 echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
4855 if test "$spice" = "yes" ; then
4856 echo "CONFIG_SPICE=y" >> $config_host_mak
4859 if test "$smartcard_nss" = "yes" ; then
4860 echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
4861 echo "NSS_LIBS=$nss_libs" >> $config_host_mak
4862 echo "NSS_CFLAGS=$nss_cflags" >> $config_host_mak
4865 if test "$libusb" = "yes" ; then
4866 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
4869 if test "$usb_redir" = "yes" ; then
4870 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
4873 if test "$opengl" = "yes" ; then
4874 echo "CONFIG_OPENGL=y" >> $config_host_mak
4875 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
4876 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
4879 if test "$lzo" = "yes" ; then
4880 echo "CONFIG_LZO=y" >> $config_host_mak
4883 if test "$snappy" = "yes" ; then
4884 echo "CONFIG_SNAPPY=y" >> $config_host_mak
4887 if test "$bzip2" = "yes" ; then
4888 echo "CONFIG_BZIP2=y" >> $config_host_mak
4889 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
4892 if test "$libiscsi" = "yes" ; then
4893 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
4894 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
4895 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
4898 if test "$libnfs" = "yes" ; then
4899 echo "CONFIG_LIBNFS=y" >> $config_host_mak
4902 if test "$seccomp" = "yes"; then
4903 echo "CONFIG_SECCOMP=y" >> $config_host_mak
4906 # XXX: suppress that
4907 if [ "$bsd" = "yes" ] ; then
4908 echo "CONFIG_BSD=y" >> $config_host_mak
4911 if test "$zero_malloc" = "yes" ; then
4912 echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
4914 if test "$qom_cast_debug" = "yes" ; then
4915 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
4917 if test "$rbd" = "yes" ; then
4918 echo "CONFIG_RBD=m" >> $config_host_mak
4919 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
4920 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
4923 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
4924 if test "$coroutine_pool" = "yes" ; then
4925 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
4926 else
4927 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
4930 if test "$open_by_handle_at" = "yes" ; then
4931 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
4934 if test "$linux_magic_h" = "yes" ; then
4935 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
4938 if test "$pragma_diagnostic_available" = "yes" ; then
4939 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
4942 if test "$valgrind_h" = "yes" ; then
4943 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
4946 if test "$has_environ" = "yes" ; then
4947 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
4950 if test "$cpuid_h" = "yes" ; then
4951 echo "CONFIG_CPUID_H=y" >> $config_host_mak
4954 if test "$int128" = "yes" ; then
4955 echo "CONFIG_INT128=y" >> $config_host_mak
4958 if test "$getauxval" = "yes" ; then
4959 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
4962 if test "$glusterfs" = "yes" ; then
4963 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
4964 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
4965 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
4968 if test "$glusterfs_discard" = "yes" ; then
4969 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
4972 if test "$glusterfs_zerofill" = "yes" ; then
4973 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
4976 if test "$archipelago" = "yes" ; then
4977 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
4978 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
4981 if test "$libssh2" = "yes" ; then
4982 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
4983 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
4984 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
4987 if test "$quorum" = "yes" ; then
4988 echo "CONFIG_QUORUM=y" >> $config_host_mak
4991 if test "$vhdx" = "yes" ; then
4992 echo "CONFIG_VHDX=y" >> $config_host_mak
4995 # USB host support
4996 if test "$libusb" = "yes"; then
4997 echo "HOST_USB=libusb legacy" >> $config_host_mak
4998 else
4999 echo "HOST_USB=stub" >> $config_host_mak
5002 # TPM passthrough support?
5003 if test "$tpm" = "yes"; then
5004 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5005 if test "$tpm_passthrough" = "yes"; then
5006 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5010 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5011 if have_backend "nop"; then
5012 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5014 if have_backend "simple"; then
5015 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5016 # Set the appropriate trace file.
5017 trace_file="\"$trace_file-\" FMT_pid"
5019 if have_backend "stderr"; then
5020 echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
5022 if have_backend "ust"; then
5023 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5025 if have_backend "dtrace"; then
5026 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5027 if test "$trace_backend_stap" = "yes" ; then
5028 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5031 if have_backend "ftrace"; then
5032 if test "$linux" = "yes" ; then
5033 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5034 else
5035 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5038 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5040 if test "$rdma" = "yes" ; then
5041 echo "CONFIG_RDMA=y" >> $config_host_mak
5044 # Hold two types of flag:
5045 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5046 # a thread we have a handle to
5047 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5048 # platform
5049 if test "$pthread_setname_np" = "yes" ; then
5050 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5051 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5054 if test "$tcg_interpreter" = "yes"; then
5055 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5056 elif test "$ARCH" = "sparc64" ; then
5057 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5058 elif test "$ARCH" = "s390x" ; then
5059 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5060 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5061 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5062 elif test "$ARCH" = "ppc64" ; then
5063 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5064 else
5065 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5067 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5069 echo "TOOLS=$tools" >> $config_host_mak
5070 echo "ROMS=$roms" >> $config_host_mak
5071 echo "MAKE=$make" >> $config_host_mak
5072 echo "INSTALL=$install" >> $config_host_mak
5073 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5074 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5075 if test -n "$libtool"; then
5076 echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
5077 echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
5078 else
5079 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5080 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5082 echo "PYTHON=$python" >> $config_host_mak
5083 echo "CC=$cc" >> $config_host_mak
5084 if $iasl -h > /dev/null 2>&1; then
5085 echo "IASL=$iasl" >> $config_host_mak
5087 echo "CC_I386=$cc_i386" >> $config_host_mak
5088 echo "HOST_CC=$host_cc" >> $config_host_mak
5089 echo "CXX=$cxx" >> $config_host_mak
5090 echo "OBJCC=$objcc" >> $config_host_mak
5091 echo "AR=$ar" >> $config_host_mak
5092 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5093 echo "AS=$as" >> $config_host_mak
5094 echo "CPP=$cpp" >> $config_host_mak
5095 echo "OBJCOPY=$objcopy" >> $config_host_mak
5096 echo "LD=$ld" >> $config_host_mak
5097 echo "NM=$nm" >> $config_host_mak
5098 echo "WINDRES=$windres" >> $config_host_mak
5099 echo "LIBTOOL=$libtool" >> $config_host_mak
5100 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5101 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5102 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5103 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5104 if test "$sparse" = "yes" ; then
5105 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
5106 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
5107 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
5108 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5109 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5111 if test "$cross_prefix" != ""; then
5112 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5113 else
5114 echo "AUTOCONF_HOST := " >> $config_host_mak
5116 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5117 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5118 echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
5119 echo "LIBS+=$LIBS" >> $config_host_mak
5120 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5121 echo "EXESUF=$EXESUF" >> $config_host_mak
5122 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5123 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5124 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5125 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5126 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5127 if test "$gcov" = "yes" ; then
5128 echo "CONFIG_GCOV=y" >> $config_host_mak
5129 echo "GCOV=$gcov_tool" >> $config_host_mak
5132 # use included Linux headers
5133 if test "$linux" = "yes" ; then
5134 mkdir -p linux-headers
5135 case "$cpu" in
5136 i386|x86_64|x32)
5137 linux_arch=x86
5139 ppcemb|ppc|ppc64)
5140 linux_arch=powerpc
5142 s390x)
5143 linux_arch=s390
5145 aarch64)
5146 linux_arch=arm64
5148 mips64)
5149 linux_arch=mips
5152 # For most CPUs the kernel architecture name and QEMU CPU name match.
5153 linux_arch="$cpu"
5155 esac
5156 # For non-KVM architectures we will not have asm headers
5157 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5158 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5162 for target in $target_list; do
5163 target_dir="$target"
5164 config_target_mak=$target_dir/config-target.mak
5165 target_name=`echo $target | cut -d '-' -f 1`
5166 target_bigendian="no"
5168 case "$target_name" in
5169 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5170 target_bigendian=yes
5172 esac
5173 target_softmmu="no"
5174 target_user_only="no"
5175 target_linux_user="no"
5176 target_bsd_user="no"
5177 case "$target" in
5178 ${target_name}-softmmu)
5179 target_softmmu="yes"
5181 ${target_name}-linux-user)
5182 if test "$linux" != "yes" ; then
5183 error_exit "Target '$target' is only available on a Linux host"
5185 target_user_only="yes"
5186 target_linux_user="yes"
5188 ${target_name}-bsd-user)
5189 if test "$bsd" != "yes" ; then
5190 error_exit "Target '$target' is only available on a BSD host"
5192 target_user_only="yes"
5193 target_bsd_user="yes"
5196 error_exit "Target '$target' not recognised"
5197 exit 1
5199 esac
5201 mkdir -p $target_dir
5202 echo "# Automatically generated by configure - do not modify" > $config_target_mak
5204 bflt="no"
5205 interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
5206 gdb_xml_files=""
5208 TARGET_ARCH="$target_name"
5209 TARGET_BASE_ARCH=""
5210 TARGET_ABI_DIR=""
5212 case "$target_name" in
5213 i386)
5215 x86_64)
5216 TARGET_BASE_ARCH=i386
5218 alpha)
5220 arm|armeb)
5221 TARGET_ARCH=arm
5222 bflt="yes"
5223 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5225 aarch64)
5226 TARGET_BASE_ARCH=arm
5227 bflt="yes"
5228 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5230 cris)
5232 lm32)
5234 m68k)
5235 bflt="yes"
5236 gdb_xml_files="cf-core.xml cf-fp.xml"
5238 microblaze|microblazeel)
5239 TARGET_ARCH=microblaze
5240 bflt="yes"
5242 mips|mipsel)
5243 TARGET_ARCH=mips
5244 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5246 mipsn32|mipsn32el)
5247 TARGET_ARCH=mips64
5248 TARGET_BASE_ARCH=mips
5249 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5250 echo "TARGET_ABI32=y" >> $config_target_mak
5252 mips64|mips64el)
5253 TARGET_ARCH=mips64
5254 TARGET_BASE_ARCH=mips
5255 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5257 moxie)
5259 or32)
5260 TARGET_ARCH=openrisc
5261 TARGET_BASE_ARCH=openrisc
5263 ppc)
5264 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5266 ppcemb)
5267 TARGET_BASE_ARCH=ppc
5268 TARGET_ABI_DIR=ppc
5269 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5271 ppc64)
5272 TARGET_BASE_ARCH=ppc
5273 TARGET_ABI_DIR=ppc
5274 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5276 ppc64le)
5277 TARGET_ARCH=ppc64
5278 TARGET_BASE_ARCH=ppc
5279 TARGET_ABI_DIR=ppc
5280 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5282 ppc64abi32)
5283 TARGET_ARCH=ppc64
5284 TARGET_BASE_ARCH=ppc
5285 TARGET_ABI_DIR=ppc
5286 echo "TARGET_ABI32=y" >> $config_target_mak
5287 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5289 sh4|sh4eb)
5290 TARGET_ARCH=sh4
5291 bflt="yes"
5293 sparc)
5295 sparc64)
5296 TARGET_BASE_ARCH=sparc
5298 sparc32plus)
5299 TARGET_ARCH=sparc64
5300 TARGET_BASE_ARCH=sparc
5301 TARGET_ABI_DIR=sparc
5302 echo "TARGET_ABI32=y" >> $config_target_mak
5304 s390x)
5305 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml"
5307 tricore)
5309 unicore32)
5311 xtensa|xtensaeb)
5312 TARGET_ARCH=xtensa
5315 error_exit "Unsupported target CPU"
5317 esac
5318 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5319 if [ "$TARGET_BASE_ARCH" = "" ]; then
5320 TARGET_BASE_ARCH=$TARGET_ARCH
5323 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5325 upper() {
5326 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5329 target_arch_name="`upper $TARGET_ARCH`"
5330 echo "TARGET_$target_arch_name=y" >> $config_target_mak
5331 echo "TARGET_NAME=$target_name" >> $config_target_mak
5332 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5333 if [ "$TARGET_ABI_DIR" = "" ]; then
5334 TARGET_ABI_DIR=$TARGET_ARCH
5336 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5337 if [ "$HOST_VARIANT_DIR" != "" ]; then
5338 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5340 case "$target_name" in
5341 i386|x86_64)
5342 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5343 echo "CONFIG_XEN=y" >> $config_target_mak
5344 if test "$xen_pci_passthrough" = yes; then
5345 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5350 esac
5351 case "$target_name" in
5352 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5353 # Make sure the target and host cpus are compatible
5354 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5355 \( "$target_name" = "$cpu" -o \
5356 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5357 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
5358 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
5359 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5360 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5361 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
5362 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
5363 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
5364 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
5365 echo "CONFIG_KVM=y" >> $config_target_mak
5366 if test "$vhost_net" = "yes" ; then
5367 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5370 esac
5371 if test "$target_bigendian" = "yes" ; then
5372 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5374 if test "$target_softmmu" = "yes" ; then
5375 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5377 if test "$target_user_only" = "yes" ; then
5378 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5379 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5381 if test "$target_linux_user" = "yes" ; then
5382 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5384 list=""
5385 if test ! -z "$gdb_xml_files" ; then
5386 for x in $gdb_xml_files; do
5387 list="$list $source_path/gdb-xml/$x"
5388 done
5389 echo "TARGET_XML_FILES=$list" >> $config_target_mak
5392 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5393 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5395 if test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then
5396 echo "CONFIG_USE_GUEST_BASE=y" >> $config_target_mak
5398 if test "$target_bsd_user" = "yes" ; then
5399 echo "CONFIG_BSD_USER=y" >> $config_target_mak
5402 # generate QEMU_CFLAGS/LDFLAGS for targets
5404 cflags=""
5405 ldflags=""
5407 for i in $ARCH $TARGET_BASE_ARCH ; do
5408 case "$i" in
5409 alpha)
5410 echo "CONFIG_ALPHA_DIS=y" >> $config_target_mak
5411 echo "CONFIG_ALPHA_DIS=y" >> config-all-disas.mak
5413 aarch64)
5414 if test -n "${cxx}"; then
5415 echo "CONFIG_ARM_A64_DIS=y" >> $config_target_mak
5416 echo "CONFIG_ARM_A64_DIS=y" >> config-all-disas.mak
5419 arm)
5420 echo "CONFIG_ARM_DIS=y" >> $config_target_mak
5421 echo "CONFIG_ARM_DIS=y" >> config-all-disas.mak
5422 if test -n "${cxx}"; then
5423 echo "CONFIG_ARM_A64_DIS=y" >> $config_target_mak
5424 echo "CONFIG_ARM_A64_DIS=y" >> config-all-disas.mak
5427 cris)
5428 echo "CONFIG_CRIS_DIS=y" >> $config_target_mak
5429 echo "CONFIG_CRIS_DIS=y" >> config-all-disas.mak
5431 hppa)
5432 echo "CONFIG_HPPA_DIS=y" >> $config_target_mak
5433 echo "CONFIG_HPPA_DIS=y" >> config-all-disas.mak
5435 i386|x86_64|x32)
5436 echo "CONFIG_I386_DIS=y" >> $config_target_mak
5437 echo "CONFIG_I386_DIS=y" >> config-all-disas.mak
5439 ia64*)
5440 echo "CONFIG_IA64_DIS=y" >> $config_target_mak
5441 echo "CONFIG_IA64_DIS=y" >> config-all-disas.mak
5443 lm32)
5444 echo "CONFIG_LM32_DIS=y" >> $config_target_mak
5445 echo "CONFIG_LM32_DIS=y" >> config-all-disas.mak
5447 m68k)
5448 echo "CONFIG_M68K_DIS=y" >> $config_target_mak
5449 echo "CONFIG_M68K_DIS=y" >> config-all-disas.mak
5451 microblaze*)
5452 echo "CONFIG_MICROBLAZE_DIS=y" >> $config_target_mak
5453 echo "CONFIG_MICROBLAZE_DIS=y" >> config-all-disas.mak
5455 mips*)
5456 echo "CONFIG_MIPS_DIS=y" >> $config_target_mak
5457 echo "CONFIG_MIPS_DIS=y" >> config-all-disas.mak
5459 moxie*)
5460 echo "CONFIG_MOXIE_DIS=y" >> $config_target_mak
5461 echo "CONFIG_MOXIE_DIS=y" >> config-all-disas.mak
5463 or32)
5464 echo "CONFIG_OPENRISC_DIS=y" >> $config_target_mak
5465 echo "CONFIG_OPENRISC_DIS=y" >> config-all-disas.mak
5467 ppc*)
5468 echo "CONFIG_PPC_DIS=y" >> $config_target_mak
5469 echo "CONFIG_PPC_DIS=y" >> config-all-disas.mak
5471 s390*)
5472 echo "CONFIG_S390_DIS=y" >> $config_target_mak
5473 echo "CONFIG_S390_DIS=y" >> config-all-disas.mak
5475 sh4)
5476 echo "CONFIG_SH4_DIS=y" >> $config_target_mak
5477 echo "CONFIG_SH4_DIS=y" >> config-all-disas.mak
5479 sparc*)
5480 echo "CONFIG_SPARC_DIS=y" >> $config_target_mak
5481 echo "CONFIG_SPARC_DIS=y" >> config-all-disas.mak
5483 xtensa*)
5484 echo "CONFIG_XTENSA_DIS=y" >> $config_target_mak
5485 echo "CONFIG_XTENSA_DIS=y" >> config-all-disas.mak
5487 esac
5488 done
5489 if test "$tcg_interpreter" = "yes" ; then
5490 echo "CONFIG_TCI_DIS=y" >> $config_target_mak
5491 echo "CONFIG_TCI_DIS=y" >> config-all-disas.mak
5494 case "$ARCH" in
5495 alpha)
5496 # Ensure there's only a single GP
5497 cflags="-msmall-data $cflags"
5499 esac
5501 if test "$gprof" = "yes" ; then
5502 echo "TARGET_GPROF=yes" >> $config_target_mak
5503 if test "$target_linux_user" = "yes" ; then
5504 cflags="-p $cflags"
5505 ldflags="-p $ldflags"
5507 if test "$target_softmmu" = "yes" ; then
5508 ldflags="-p $ldflags"
5509 echo "GPROF_CFLAGS=-p" >> $config_target_mak
5513 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5514 ldflags="$ldflags $textseg_ldflags"
5517 echo "LDFLAGS+=$ldflags" >> $config_target_mak
5518 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5520 done # for target in $targets
5522 if [ "$pixman" = "internal" ]; then
5523 echo "config-host.h: subdir-pixman" >> $config_host_mak
5526 if test "$rdma" = "yes" ; then
5527 echo "CONFIG_RDMA=y" >> $config_host_mak
5530 if [ "$dtc_internal" = "yes" ]; then
5531 echo "config-host.h: subdir-dtc" >> $config_host_mak
5534 if test "$numa" = "yes"; then
5535 echo "CONFIG_NUMA=y" >> $config_host_mak
5538 # build tree in object directory in case the source is not in the current directory
5539 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5540 DIRS="$DIRS fsdev"
5541 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
5542 DIRS="$DIRS roms/seabios roms/vgabios"
5543 DIRS="$DIRS qapi-generated"
5544 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5545 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5546 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
5547 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
5548 FILES="$FILES pc-bios/spapr-rtas/Makefile"
5549 FILES="$FILES pc-bios/s390-ccw/Makefile"
5550 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5551 FILES="$FILES pc-bios/qemu-icon.bmp"
5552 for bios_file in \
5553 $source_path/pc-bios/*.bin \
5554 $source_path/pc-bios/*.aml \
5555 $source_path/pc-bios/*.rom \
5556 $source_path/pc-bios/*.dtb \
5557 $source_path/pc-bios/*.img \
5558 $source_path/pc-bios/openbios-* \
5559 $source_path/pc-bios/u-boot.* \
5560 $source_path/pc-bios/palcode-*
5562 FILES="$FILES pc-bios/`basename $bios_file`"
5563 done
5564 for test_file in `find $source_path/tests/acpi-test-data -type f`
5566 FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5567 done
5568 mkdir -p $DIRS
5569 for f in $FILES ; do
5570 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5571 symlink "$source_path/$f" "$f"
5573 done
5575 # temporary config to build submodules
5576 for rom in seabios vgabios ; do
5577 config_mak=roms/$rom/config.mak
5578 echo "# Automatically generated by configure - do not modify" > $config_mak
5579 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5580 echo "AS=$as" >> $config_mak
5581 echo "CC=$cc" >> $config_mak
5582 echo "BCC=bcc" >> $config_mak
5583 echo "CPP=$cpp" >> $config_mak
5584 echo "OBJCOPY=objcopy" >> $config_mak
5585 echo "IASL=$iasl" >> $config_mak
5586 echo "LD=$ld" >> $config_mak
5587 done
5589 # set up qemu-iotests in this build directory
5590 iotests_common_env="tests/qemu-iotests/common.env"
5591 iotests_check="tests/qemu-iotests/check"
5593 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5594 echo >> "$iotests_common_env"
5595 echo "export PYTHON='$python'" >> "$iotests_common_env"
5597 if [ ! -e "$iotests_check" ]; then
5598 symlink "$source_path/$iotests_check" "$iotests_check"
5601 # Save the configure command line for later reuse.
5602 cat <<EOD >config.status
5603 #!/bin/sh
5604 # Generated by configure.
5605 # Run this file to recreate the current configuration.
5606 # Compiler output produced by configure, useful for debugging
5607 # configure, is in config.log if it exists.
5609 printf "exec" >>config.status
5610 printf " '%s'" "$0" "$@" >>config.status
5611 echo >>config.status
5612 chmod +x config.status
5614 rm -r "$TMPDIR1"