block: Document that x-blockdev-change breaks quorum children list
[qemu/ericb.git] / configure
blob100309c33f6da5349df48c86da82073472127766
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 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE=yes
14 # Temporary directory used for files created while
15 # configure runs. Since it is in the build directory
16 # we can safely blow away any previous version of it
17 # (and we need not jump through hoops to try to delete
18 # it when configure exits.)
19 TMPDIR1="config-temp"
20 rm -rf "${TMPDIR1}"
21 mkdir -p "${TMPDIR1}"
22 if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
27 TMPB="qemu-conf"
28 TMPC="${TMPDIR1}/${TMPB}.c"
29 TMPO="${TMPDIR1}/${TMPB}.o"
30 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
31 TMPE="${TMPDIR1}/${TMPB}.exe"
32 TMPMO="${TMPDIR1}/${TMPB}.mo"
34 rm -f config.log
36 # Print a helpful header at the top of config.log
37 echo "# QEMU configure log $(date)" >> config.log
38 printf "# Configured with:" >> config.log
39 printf " '%s'" "$0" "$@" >> config.log
40 echo >> config.log
41 echo "#" >> config.log
43 print_error() {
44 (echo
45 echo "ERROR: $1"
46 while test -n "$2"; do
47 echo " $2"
48 shift
49 done
50 echo) >&2
53 error_exit() {
54 print_error "$@"
55 exit 1
58 do_compiler() {
59 # Run the compiler, capturing its output to the log. First argument
60 # is compiler binary to execute.
61 local compiler="$1"
62 shift
63 echo $compiler "$@" >> config.log
64 $compiler "$@" >> config.log 2>&1 || return $?
65 # Test passed. If this is an --enable-werror build, rerun
66 # the test with -Werror and bail out if it fails. This
67 # makes warning-generating-errors in configure test code
68 # obvious to developers.
69 if test "$werror" != "yes"; then
70 return 0
72 # Don't bother rerunning the compile if we were already using -Werror
73 case "$*" in
74 *-Werror*)
75 return 0
77 esac
78 echo $compiler -Werror "$@" >> config.log
79 $compiler -Werror "$@" >> config.log 2>&1 && return $?
80 error_exit "configure test passed without -Werror but failed with -Werror." \
81 "This is probably a bug in the configure script. The failing command" \
82 "will be at the bottom of config.log." \
83 "You can run configure with --disable-werror to bypass this check."
86 do_cc() {
87 do_compiler "$cc" "$@"
90 do_cxx() {
91 do_compiler "$cxx" "$@"
94 update_cxxflags() {
95 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
96 # options which some versions of GCC's C++ compiler complain about
97 # because they only make sense for C programs.
98 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
100 for arg in $QEMU_CFLAGS; do
101 case $arg in
102 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
103 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
106 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
108 esac
109 done
112 compile_object() {
113 local_cflags="$1"
114 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
117 compile_prog() {
118 local_cflags="$1"
119 local_ldflags="$2"
120 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
123 # symbolically link $1 to $2. Portable version of "ln -sf".
124 symlink() {
125 rm -rf "$2"
126 mkdir -p "$(dirname "$2")"
127 ln -s "$1" "$2"
130 # check whether a command is available to this shell (may be either an
131 # executable or a builtin)
132 has() {
133 type "$1" >/dev/null 2>&1
136 # search for an executable in PATH
137 path_of() {
138 local_command="$1"
139 local_ifs="$IFS"
140 local_dir=""
142 # pathname has a dir component?
143 if [ "${local_command#*/}" != "$local_command" ]; then
144 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
145 echo "$local_command"
146 return 0
149 if [ -z "$local_command" ]; then
150 return 1
153 IFS=:
154 for local_dir in $PATH; do
155 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
156 echo "$local_dir/$local_command"
157 IFS="${local_ifs:-$(printf ' \t\n')}"
158 return 0
160 done
161 # not found
162 IFS="${local_ifs:-$(printf ' \t\n')}"
163 return 1
166 have_backend () {
167 echo "$trace_backends" | grep "$1" >/dev/null
170 glob() {
171 eval test -z '"${1#'"$2"'}"'
174 supported_hax_target() {
175 test "$hax" = "yes" || return 1
176 glob "$1" "*-softmmu" || return 1
177 case "${1%-softmmu}" in
178 i386|x86_64)
179 return 0
181 esac
182 return 1
185 supported_kvm_target() {
186 test "$kvm" = "yes" || return 1
187 glob "$1" "*-softmmu" || return 1
188 case "${1%-softmmu}:$cpu" in
189 arm:arm | aarch64:aarch64 | \
190 i386:i386 | i386:x86_64 | i386:x32 | \
191 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
192 mips:mips | mipsel:mips | \
193 ppc:ppc | ppcemb:ppc | ppc64:ppc | \
194 ppc:ppc64 | ppcemb:ppc64 | ppc64:ppc64 | \
195 s390x:s390x)
196 return 0
198 esac
199 return 1
202 supported_xen_target() {
203 test "$xen" = "yes" || return 1
204 glob "$1" "*-softmmu" || return 1
205 # Only i386 and x86_64 provide the xenpv machine.
206 case "${1%-softmmu}" in
207 i386|x86_64)
208 return 0
210 esac
211 return 1
214 supported_target() {
215 case "$1" in
216 *-softmmu)
218 *-linux-user)
219 if test "$linux" != "yes"; then
220 print_error "Target '$target' is only available on a Linux host"
221 return 1
224 *-bsd-user)
225 if test "$bsd" != "yes"; then
226 print_error "Target '$target' is only available on a BSD host"
227 return 1
231 print_error "Invalid target name '$target'"
232 return 1
234 esac
235 test "$tcg" = "yes" && return 0
236 supported_kvm_target "$1" && return 0
237 supported_xen_target "$1" && return 0
238 supported_hax_target "$1" && return 0
239 print_error "TCG disabled, but hardware accelerator not available for '$target'"
240 return 1
244 ld_has() {
245 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
248 # default parameters
249 source_path=$(dirname "$0")
250 cpu=""
251 iasl="iasl"
252 interp_prefix="/usr/gnemul/qemu-%M"
253 static="no"
254 cross_prefix=""
255 audio_drv_list=""
256 block_drv_rw_whitelist=""
257 block_drv_ro_whitelist=""
258 host_cc="cc"
259 libs_softmmu=""
260 libs_tools=""
261 audio_pt_int=""
262 audio_win_int=""
263 cc_i386=i386-pc-linux-gnu-gcc
264 libs_qga=""
265 debug_info="yes"
266 stack_protector=""
268 if test -e "$source_path/.git"
269 then
270 git_update=yes
271 git_submodules="ui/keycodemapdb"
272 else
273 git_update=no
274 git_submodules=""
276 git="git"
278 # Don't accept a target_list environment variable.
279 unset target_list
281 # Default value for a variable defining feature "foo".
282 # * foo="no" feature will only be used if --enable-foo arg is given
283 # * foo="" feature will be searched for, and if found, will be used
284 # unless --disable-foo is given
285 # * foo="yes" this value will only be set by --enable-foo flag.
286 # feature will searched for,
287 # if not found, configure exits with error
289 # Always add --enable-foo and --disable-foo command line args.
290 # Distributions want to ensure that several features are compiled in, and it
291 # is impossible without a --enable-foo that exits if a feature is not found.
293 bluez=""
294 brlapi=""
295 curl=""
296 curses=""
297 docs=""
298 fdt=""
299 netmap="no"
300 sdl=""
301 sdlabi=""
302 virtfs=""
303 mpath=""
304 vnc="yes"
305 sparse="no"
306 vde=""
307 vnc_sasl=""
308 vnc_jpeg=""
309 vnc_png=""
310 xkbcommon=""
311 xen=""
312 xen_ctrl_version=""
313 xen_pv_domain_build="no"
314 xen_pci_passthrough=""
315 linux_aio=""
316 cap_ng=""
317 attr=""
318 libattr=""
319 xfs=""
320 tcg="yes"
322 vhost_net="no"
323 vhost_scsi="no"
324 vhost_vsock="no"
325 vhost_user=""
326 kvm="no"
327 hax="no"
328 rdma=""
329 gprof="no"
330 debug_tcg="no"
331 debug="no"
332 fortify_source=""
333 strip_opt="yes"
334 tcg_interpreter="no"
335 bigendian="no"
336 mingw32="no"
337 gcov="no"
338 gcov_tool="gcov"
339 EXESUF=""
340 DSOSUF=".so"
341 LDFLAGS_SHARED="-shared"
342 modules="no"
343 prefix="/usr/local"
344 mandir="\${prefix}/share/man"
345 datadir="\${prefix}/share"
346 firmwarepath="\${prefix}/share/qemu-firmware"
347 qemu_docdir="\${prefix}/share/doc/qemu"
348 bindir="\${prefix}/bin"
349 libdir="\${prefix}/lib"
350 libexecdir="\${prefix}/libexec"
351 includedir="\${prefix}/include"
352 sysconfdir="\${prefix}/etc"
353 local_statedir="\${prefix}/var"
354 confsuffix="/qemu"
355 slirp="yes"
356 oss_lib=""
357 bsd="no"
358 linux="no"
359 solaris="no"
360 profiler="no"
361 cocoa="no"
362 softmmu="yes"
363 linux_user="no"
364 bsd_user="no"
365 blobs="yes"
366 pkgversion=""
367 pie=""
368 qom_cast_debug="yes"
369 trace_backends="log"
370 trace_file="trace"
371 spice=""
372 rbd=""
373 smartcard=""
374 libusb=""
375 usb_redir=""
376 opengl=""
377 opengl_dmabuf="no"
378 cpuid_h="no"
379 avx2_opt="no"
380 zlib="yes"
381 capstone=""
382 lzo=""
383 snappy=""
384 bzip2=""
385 guest_agent=""
386 guest_agent_with_vss="no"
387 guest_agent_ntddscsi="no"
388 guest_agent_msi=""
389 vss_win32_sdk=""
390 win_sdk="no"
391 want_tools="yes"
392 libiscsi=""
393 libnfs=""
394 coroutine=""
395 coroutine_pool=""
396 debug_stack_usage="no"
397 crypto_afalg="no"
398 seccomp=""
399 glusterfs=""
400 glusterfs_xlator_opt="no"
401 glusterfs_discard="no"
402 glusterfs_fallocate="no"
403 glusterfs_zerofill="no"
404 gtk=""
405 gtkabi=""
406 gtk_gl="no"
407 tls_priority="NORMAL"
408 gnutls=""
409 gnutls_rnd=""
410 nettle=""
411 nettle_kdf="no"
412 gcrypt=""
413 gcrypt_hmac="no"
414 gcrypt_kdf="no"
415 vte=""
416 virglrenderer=""
417 tpm="yes"
418 libssh2=""
419 live_block_migration="yes"
420 numa=""
421 tcmalloc="no"
422 jemalloc="no"
423 replication="yes"
424 vxhs=""
426 supported_cpu="no"
427 supported_os="no"
428 bogus_os="no"
429 malloc_trim=""
431 # parse CC options first
432 for opt do
433 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
434 case "$opt" in
435 --cross-prefix=*) cross_prefix="$optarg"
437 --cc=*) CC="$optarg"
439 --cxx=*) CXX="$optarg"
441 --source-path=*) source_path="$optarg"
443 --cpu=*) cpu="$optarg"
445 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
446 EXTRA_CFLAGS="$optarg"
448 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
449 EXTRA_CXXFLAGS="$optarg"
451 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
452 EXTRA_LDFLAGS="$optarg"
454 --enable-debug-info) debug_info="yes"
456 --disable-debug-info) debug_info="no"
458 esac
459 done
460 # OS specific
461 # Using uname is really, really broken. Once we have the right set of checks
462 # we can eliminate its usage altogether.
464 # Preferred compiler:
465 # ${CC} (if set)
466 # ${cross_prefix}gcc (if cross-prefix specified)
467 # system compiler
468 if test -z "${CC}${cross_prefix}"; then
469 cc="$host_cc"
470 else
471 cc="${CC-${cross_prefix}gcc}"
474 if test -z "${CXX}${cross_prefix}"; then
475 cxx="c++"
476 else
477 cxx="${CXX-${cross_prefix}g++}"
480 ar="${AR-${cross_prefix}ar}"
481 as="${AS-${cross_prefix}as}"
482 ccas="${CCAS-$cc}"
483 cpp="${CPP-$cc -E}"
484 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
485 ld="${LD-${cross_prefix}ld}"
486 ranlib="${RANLIB-${cross_prefix}ranlib}"
487 nm="${NM-${cross_prefix}nm}"
488 strip="${STRIP-${cross_prefix}strip}"
489 windres="${WINDRES-${cross_prefix}windres}"
490 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
491 query_pkg_config() {
492 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
494 pkg_config=query_pkg_config
495 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
496 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
498 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
499 ARFLAGS="${ARFLAGS-rv}"
501 # default flags for all hosts
502 # We use -fwrapv to tell the compiler that we require a C dialect where
503 # left shift of signed integers is well defined and has the expected
504 # 2s-complement style results. (Both clang and gcc agree that it
505 # provides these semantics.)
506 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
507 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
508 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
509 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
510 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/accel/tcg -I\$(SRC_PATH)/include"
511 if test "$debug_info" = "yes"; then
512 CFLAGS="-g $CFLAGS"
513 LDFLAGS="-g $LDFLAGS"
516 # make source path absolute
517 source_path=$(cd "$source_path"; pwd)
519 # running configure in the source tree?
520 # we know that's the case if configure is there.
521 if test -f "./configure"; then
522 pwd_is_source_path="y"
523 else
524 pwd_is_source_path="n"
527 check_define() {
528 cat > $TMPC <<EOF
529 #if !defined($1)
530 #error $1 not defined
531 #endif
532 int main(void) { return 0; }
534 compile_object
537 check_include() {
538 cat > $TMPC <<EOF
539 #include <$1>
540 int main(void) { return 0; }
542 compile_object
545 write_c_skeleton() {
546 cat > $TMPC <<EOF
547 int main(void) { return 0; }
551 if check_define __linux__ ; then
552 targetos="Linux"
553 elif check_define _WIN32 ; then
554 targetos='MINGW32'
555 elif check_define __OpenBSD__ ; then
556 targetos='OpenBSD'
557 elif check_define __sun__ ; then
558 targetos='SunOS'
559 elif check_define __HAIKU__ ; then
560 targetos='Haiku'
561 elif check_define __FreeBSD__ ; then
562 targetos='FreeBSD'
563 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
564 targetos='GNU/kFreeBSD'
565 elif check_define __DragonFly__ ; then
566 targetos='DragonFly'
567 elif check_define __NetBSD__; then
568 targetos='NetBSD'
569 elif check_define __APPLE__; then
570 targetos='Darwin'
571 else
572 # This is a fatal error, but don't report it yet, because we
573 # might be going to just print the --help text, or it might
574 # be the result of a missing compiler.
575 targetos='bogus'
576 bogus_os='yes'
579 # Some host OSes need non-standard checks for which CPU to use.
580 # Note that these checks are broken for cross-compilation: if you're
581 # cross-compiling to one of these OSes then you'll need to specify
582 # the correct CPU with the --cpu option.
583 case $targetos in
584 Darwin)
585 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
586 # run 64-bit userspace code.
587 # If the user didn't specify a CPU explicitly and the kernel says this is
588 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
589 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
590 cpu="x86_64"
593 SunOS)
594 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
595 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
596 cpu="x86_64"
598 esac
600 if test ! -z "$cpu" ; then
601 # command line argument
603 elif check_define __i386__ ; then
604 cpu="i386"
605 elif check_define __x86_64__ ; then
606 if check_define __ILP32__ ; then
607 cpu="x32"
608 else
609 cpu="x86_64"
611 elif check_define __sparc__ ; then
612 if check_define __arch64__ ; then
613 cpu="sparc64"
614 else
615 cpu="sparc"
617 elif check_define _ARCH_PPC ; then
618 if check_define _ARCH_PPC64 ; then
619 cpu="ppc64"
620 else
621 cpu="ppc"
623 elif check_define __mips__ ; then
624 cpu="mips"
625 elif check_define __ia64__ ; then
626 cpu="ia64"
627 elif check_define __s390__ ; then
628 if check_define __s390x__ ; then
629 cpu="s390x"
630 else
631 cpu="s390"
633 elif check_define __arm__ ; then
634 cpu="arm"
635 elif check_define __aarch64__ ; then
636 cpu="aarch64"
637 else
638 cpu=$(uname -m)
641 ARCH=
642 # Normalise host CPU name and set ARCH.
643 # Note that this case should only have supported host CPUs, not guests.
644 case "$cpu" in
645 ppc|ppc64|s390|s390x|sparc64|x32)
646 cpu="$cpu"
647 supported_cpu="yes"
649 i386|i486|i586|i686|i86pc|BePC)
650 cpu="i386"
651 supported_cpu="yes"
653 x86_64|amd64)
654 cpu="x86_64"
655 supported_cpu="yes"
657 armv*b|armv*l|arm)
658 cpu="arm"
659 supported_cpu="yes"
661 aarch64)
662 cpu="aarch64"
663 supported_cpu="yes"
665 mips*)
666 cpu="mips"
667 supported_cpu="yes"
669 sparc|sun4[cdmuv])
670 cpu="sparc"
671 supported_cpu="yes"
674 # This will result in either an error or falling back to TCI later
675 ARCH=unknown
677 esac
678 if test -z "$ARCH"; then
679 ARCH="$cpu"
682 # OS specific
684 # host *BSD for user mode
685 HOST_VARIANT_DIR=""
687 case $targetos in
688 MINGW32*)
689 mingw32="yes"
690 hax="yes"
691 audio_possible_drivers="dsound sdl"
692 if check_include dsound.h; then
693 audio_drv_list="dsound"
694 else
695 audio_drv_list=""
697 supported_os="yes"
699 GNU/kFreeBSD)
700 bsd="yes"
701 audio_drv_list="oss"
702 audio_possible_drivers="oss sdl pa"
704 FreeBSD)
705 bsd="yes"
706 make="${MAKE-gmake}"
707 audio_drv_list="oss"
708 audio_possible_drivers="oss sdl pa"
709 # needed for kinfo_getvmmap(3) in libutil.h
710 LIBS="-lutil $LIBS"
711 # needed for kinfo_getproc
712 libs_qga="-lutil $libs_qga"
713 netmap="" # enable netmap autodetect
714 HOST_VARIANT_DIR="freebsd"
715 supported_os="yes"
717 DragonFly)
718 bsd="yes"
719 make="${MAKE-gmake}"
720 audio_drv_list="oss"
721 audio_possible_drivers="oss sdl pa"
722 HOST_VARIANT_DIR="dragonfly"
724 NetBSD)
725 bsd="yes"
726 make="${MAKE-gmake}"
727 audio_drv_list="oss"
728 audio_possible_drivers="oss sdl"
729 oss_lib="-lossaudio"
730 HOST_VARIANT_DIR="netbsd"
731 supported_os="yes"
733 OpenBSD)
734 bsd="yes"
735 make="${MAKE-gmake}"
736 audio_drv_list="sdl"
737 audio_possible_drivers="sdl"
738 HOST_VARIANT_DIR="openbsd"
740 Darwin)
741 bsd="yes"
742 darwin="yes"
743 hax="yes"
744 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
745 if [ "$cpu" = "x86_64" ] ; then
746 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
747 LDFLAGS="-arch x86_64 $LDFLAGS"
749 cocoa="yes"
750 audio_drv_list="coreaudio"
751 audio_possible_drivers="coreaudio sdl"
752 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
753 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
754 # Disable attempts to use ObjectiveC features in os/object.h since they
755 # won't work when we're compiling with gcc as a C compiler.
756 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
757 HOST_VARIANT_DIR="darwin"
758 supported_os="yes"
760 SunOS)
761 solaris="yes"
762 make="${MAKE-gmake}"
763 install="${INSTALL-ginstall}"
764 smbd="${SMBD-/usr/sfw/sbin/smbd}"
765 if test -f /usr/include/sys/soundcard.h ; then
766 audio_drv_list="oss"
768 audio_possible_drivers="oss sdl"
769 # needed for CMSG_ macros in sys/socket.h
770 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
771 # needed for TIOCWIN* defines in termios.h
772 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
773 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
774 solarisnetlibs="-lsocket -lnsl -lresolv"
775 LIBS="$solarisnetlibs $LIBS"
776 libs_qga="$solarisnetlibs $libs_qga"
778 Haiku)
779 haiku="yes"
780 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
781 LIBS="-lposix_error_mapper -lnetwork $LIBS"
783 Linux)
784 audio_drv_list="oss"
785 audio_possible_drivers="oss alsa sdl pa"
786 linux="yes"
787 linux_user="yes"
788 kvm="yes"
789 vhost_net="yes"
790 vhost_scsi="yes"
791 vhost_vsock="yes"
792 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
793 supported_os="yes"
795 esac
797 if [ "$bsd" = "yes" ] ; then
798 if [ "$darwin" != "yes" ] ; then
799 bsd_user="yes"
803 : ${make=${MAKE-make}}
804 : ${install=${INSTALL-install}}
805 : ${python=${PYTHON-python}}
806 : ${smbd=${SMBD-/usr/sbin/smbd}}
808 # Default objcc to clang if available, otherwise use CC
809 if has clang; then
810 objcc=clang
811 else
812 objcc="$cc"
815 if test "$mingw32" = "yes" ; then
816 EXESUF=".exe"
817 DSOSUF=".dll"
818 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
819 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
820 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
821 # MinGW needs -mthreads for TLS and macro _MT.
822 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
823 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
824 write_c_skeleton;
825 if compile_prog "" "-liberty" ; then
826 LIBS="-liberty $LIBS"
828 prefix="c:/Program Files/QEMU"
829 mandir="\${prefix}"
830 datadir="\${prefix}"
831 qemu_docdir="\${prefix}"
832 bindir="\${prefix}"
833 sysconfdir="\${prefix}"
834 local_statedir=
835 confsuffix=""
836 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
839 werror=""
841 for opt do
842 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
843 case "$opt" in
844 --help|-h) show_help=yes
846 --version|-V) exec cat $source_path/VERSION
848 --prefix=*) prefix="$optarg"
850 --interp-prefix=*) interp_prefix="$optarg"
852 --source-path=*)
854 --cross-prefix=*)
856 --cc=*)
858 --host-cc=*) host_cc="$optarg"
860 --cxx=*)
862 --iasl=*) iasl="$optarg"
864 --objcc=*) objcc="$optarg"
866 --make=*) make="$optarg"
868 --install=*) install="$optarg"
870 --python=*) python="$optarg"
872 --gcov=*) gcov_tool="$optarg"
874 --smbd=*) smbd="$optarg"
876 --extra-cflags=*)
878 --extra-cxxflags=*)
880 --extra-ldflags=*)
882 --enable-debug-info)
884 --disable-debug-info)
886 --enable-modules)
887 modules="yes"
889 --disable-modules)
890 modules="no"
892 --cpu=*)
894 --target-list=*) target_list="$optarg"
896 --enable-trace-backends=*) trace_backends="$optarg"
898 # XXX: backwards compatibility
899 --enable-trace-backend=*) trace_backends="$optarg"
901 --with-trace-file=*) trace_file="$optarg"
903 --enable-gprof) gprof="yes"
905 --enable-gcov) gcov="yes"
907 --static)
908 static="yes"
909 LDFLAGS="-static $LDFLAGS"
910 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
912 --mandir=*) mandir="$optarg"
914 --bindir=*) bindir="$optarg"
916 --libdir=*) libdir="$optarg"
918 --libexecdir=*) libexecdir="$optarg"
920 --includedir=*) includedir="$optarg"
922 --datadir=*) datadir="$optarg"
924 --with-confsuffix=*) confsuffix="$optarg"
926 --docdir=*) qemu_docdir="$optarg"
928 --sysconfdir=*) sysconfdir="$optarg"
930 --localstatedir=*) local_statedir="$optarg"
932 --firmwarepath=*) firmwarepath="$optarg"
934 --sbindir=*|--sharedstatedir=*|\
935 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
936 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
937 # These switches are silently ignored, for compatibility with
938 # autoconf-generated configure scripts. This allows QEMU's
939 # configure to be used by RPM and similar macros that set
940 # lots of directory switches by default.
942 --disable-sdl) sdl="no"
944 --enable-sdl) sdl="yes"
946 --with-sdlabi=*) sdlabi="$optarg"
948 --disable-qom-cast-debug) qom_cast_debug="no"
950 --enable-qom-cast-debug) qom_cast_debug="yes"
952 --disable-virtfs) virtfs="no"
954 --enable-virtfs) virtfs="yes"
956 --disable-mpath) mpath="no"
958 --enable-mpath) mpath="yes"
960 --disable-vnc) vnc="no"
962 --enable-vnc) vnc="yes"
964 --oss-lib=*) oss_lib="$optarg"
966 --audio-drv-list=*) audio_drv_list="$optarg"
968 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
970 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
972 --enable-debug-tcg) debug_tcg="yes"
974 --disable-debug-tcg) debug_tcg="no"
976 --enable-debug)
977 # Enable debugging options that aren't excessively noisy
978 debug_tcg="yes"
979 debug="yes"
980 strip_opt="no"
981 fortify_source="no"
983 --enable-sparse) sparse="yes"
985 --disable-sparse) sparse="no"
987 --disable-strip) strip_opt="no"
989 --disable-vnc-sasl) vnc_sasl="no"
991 --enable-vnc-sasl) vnc_sasl="yes"
993 --disable-vnc-jpeg) vnc_jpeg="no"
995 --enable-vnc-jpeg) vnc_jpeg="yes"
997 --disable-vnc-png) vnc_png="no"
999 --enable-vnc-png) vnc_png="yes"
1001 --disable-slirp) slirp="no"
1003 --disable-vde) vde="no"
1005 --enable-vde) vde="yes"
1007 --disable-netmap) netmap="no"
1009 --enable-netmap) netmap="yes"
1011 --disable-xen) xen="no"
1013 --enable-xen) xen="yes"
1015 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1017 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1019 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1021 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1023 --disable-brlapi) brlapi="no"
1025 --enable-brlapi) brlapi="yes"
1027 --disable-bluez) bluez="no"
1029 --enable-bluez) bluez="yes"
1031 --disable-kvm) kvm="no"
1033 --enable-kvm) kvm="yes"
1035 --disable-hax) hax="no"
1037 --enable-hax) hax="yes"
1039 --disable-tcg-interpreter) tcg_interpreter="no"
1041 --enable-tcg-interpreter) tcg_interpreter="yes"
1043 --disable-cap-ng) cap_ng="no"
1045 --enable-cap-ng) cap_ng="yes"
1047 --disable-tcg) tcg="no"
1049 --enable-tcg) tcg="yes"
1051 --disable-malloc-trim) malloc_trim="no"
1053 --enable-malloc-trim) malloc_trim="yes"
1055 --disable-spice) spice="no"
1057 --enable-spice) spice="yes"
1059 --disable-libiscsi) libiscsi="no"
1061 --enable-libiscsi) libiscsi="yes"
1063 --disable-libnfs) libnfs="no"
1065 --enable-libnfs) libnfs="yes"
1067 --enable-profiler) profiler="yes"
1069 --disable-cocoa) cocoa="no"
1071 --enable-cocoa)
1072 cocoa="yes" ;
1073 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1075 --disable-system) softmmu="no"
1077 --enable-system) softmmu="yes"
1079 --disable-user)
1080 linux_user="no" ;
1081 bsd_user="no" ;
1083 --enable-user) ;;
1084 --disable-linux-user) linux_user="no"
1086 --enable-linux-user) linux_user="yes"
1088 --disable-bsd-user) bsd_user="no"
1090 --enable-bsd-user) bsd_user="yes"
1092 --enable-pie) pie="yes"
1094 --disable-pie) pie="no"
1096 --enable-werror) werror="yes"
1098 --disable-werror) werror="no"
1100 --enable-stack-protector) stack_protector="yes"
1102 --disable-stack-protector) stack_protector="no"
1104 --disable-curses) curses="no"
1106 --enable-curses) curses="yes"
1108 --disable-curl) curl="no"
1110 --enable-curl) curl="yes"
1112 --disable-fdt) fdt="no"
1114 --enable-fdt) fdt="yes"
1116 --disable-linux-aio) linux_aio="no"
1118 --enable-linux-aio) linux_aio="yes"
1120 --disable-attr) attr="no"
1122 --enable-attr) attr="yes"
1124 --disable-blobs) blobs="no"
1126 --with-pkgversion=*) pkgversion=" ($optarg)"
1128 --with-coroutine=*) coroutine="$optarg"
1130 --disable-coroutine-pool) coroutine_pool="no"
1132 --enable-coroutine-pool) coroutine_pool="yes"
1134 --enable-debug-stack-usage) debug_stack_usage="yes"
1136 --enable-crypto-afalg) crypto_afalg="yes"
1138 --disable-crypto-afalg) crypto_afalg="no"
1140 --disable-docs) docs="no"
1142 --enable-docs) docs="yes"
1144 --disable-vhost-net) vhost_net="no"
1146 --enable-vhost-net) vhost_net="yes"
1148 --disable-vhost-scsi) vhost_scsi="no"
1150 --enable-vhost-scsi) vhost_scsi="yes"
1152 --disable-vhost-vsock) vhost_vsock="no"
1154 --enable-vhost-vsock) vhost_vsock="yes"
1156 --disable-opengl) opengl="no"
1158 --enable-opengl) opengl="yes"
1160 --disable-rbd) rbd="no"
1162 --enable-rbd) rbd="yes"
1164 --disable-xfsctl) xfs="no"
1166 --enable-xfsctl) xfs="yes"
1168 --disable-smartcard) smartcard="no"
1170 --enable-smartcard) smartcard="yes"
1172 --disable-libusb) libusb="no"
1174 --enable-libusb) libusb="yes"
1176 --disable-usb-redir) usb_redir="no"
1178 --enable-usb-redir) usb_redir="yes"
1180 --disable-zlib-test) zlib="no"
1182 --disable-lzo) lzo="no"
1184 --enable-lzo) lzo="yes"
1186 --disable-snappy) snappy="no"
1188 --enable-snappy) snappy="yes"
1190 --disable-bzip2) bzip2="no"
1192 --enable-bzip2) bzip2="yes"
1194 --enable-guest-agent) guest_agent="yes"
1196 --disable-guest-agent) guest_agent="no"
1198 --enable-guest-agent-msi) guest_agent_msi="yes"
1200 --disable-guest-agent-msi) guest_agent_msi="no"
1202 --with-vss-sdk) vss_win32_sdk=""
1204 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1206 --without-vss-sdk) vss_win32_sdk="no"
1208 --with-win-sdk) win_sdk=""
1210 --with-win-sdk=*) win_sdk="$optarg"
1212 --without-win-sdk) win_sdk="no"
1214 --enable-tools) want_tools="yes"
1216 --disable-tools) want_tools="no"
1218 --enable-seccomp) seccomp="yes"
1220 --disable-seccomp) seccomp="no"
1222 --disable-glusterfs) glusterfs="no"
1224 --enable-glusterfs) glusterfs="yes"
1226 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1227 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1229 --enable-vhdx|--disable-vhdx)
1230 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1232 --enable-uuid|--disable-uuid)
1233 echo "$0: $opt is obsolete, UUID support is always built" >&2
1235 --disable-gtk) gtk="no"
1237 --enable-gtk) gtk="yes"
1239 --tls-priority=*) tls_priority="$optarg"
1241 --disable-gnutls) gnutls="no"
1243 --enable-gnutls) gnutls="yes"
1245 --disable-nettle) nettle="no"
1247 --enable-nettle) nettle="yes"
1249 --disable-gcrypt) gcrypt="no"
1251 --enable-gcrypt) gcrypt="yes"
1253 --enable-rdma) rdma="yes"
1255 --disable-rdma) rdma="no"
1257 --with-gtkabi=*) gtkabi="$optarg"
1259 --disable-vte) vte="no"
1261 --enable-vte) vte="yes"
1263 --disable-virglrenderer) virglrenderer="no"
1265 --enable-virglrenderer) virglrenderer="yes"
1267 --disable-tpm) tpm="no"
1269 --enable-tpm) tpm="yes"
1271 --disable-libssh2) libssh2="no"
1273 --enable-libssh2) libssh2="yes"
1275 --disable-live-block-migration) live_block_migration="no"
1277 --enable-live-block-migration) live_block_migration="yes"
1279 --disable-numa) numa="no"
1281 --enable-numa) numa="yes"
1283 --disable-tcmalloc) tcmalloc="no"
1285 --enable-tcmalloc) tcmalloc="yes"
1287 --disable-jemalloc) jemalloc="no"
1289 --enable-jemalloc) jemalloc="yes"
1291 --disable-replication) replication="no"
1293 --enable-replication) replication="yes"
1295 --disable-vxhs) vxhs="no"
1297 --enable-vxhs) vxhs="yes"
1299 --disable-vhost-user) vhost_user="no"
1301 --enable-vhost-user)
1302 vhost_user="yes"
1303 if test "$mingw32" = "yes"; then
1304 error_exit "vhost-user isn't available on win32"
1307 --disable-capstone) capstone="no"
1309 --enable-capstone) capstone="yes"
1311 --enable-capstone=git) capstone="git"
1313 --enable-capstone=system) capstone="system"
1315 --with-git=*) git="$optarg"
1317 --enable-git-update) git_update=yes
1319 --disable-git-update) git_update=no
1322 echo "ERROR: unknown option $opt"
1323 echo "Try '$0 --help' for more information"
1324 exit 1
1326 esac
1327 done
1329 if test "$vhost_user" = ""; then
1330 if test "$mingw32" = "yes"; then
1331 vhost_user="no"
1332 else
1333 vhost_user="yes"
1337 case "$cpu" in
1338 ppc)
1339 CPU_CFLAGS="-m32"
1340 LDFLAGS="-m32 $LDFLAGS"
1342 ppc64)
1343 CPU_CFLAGS="-m64"
1344 LDFLAGS="-m64 $LDFLAGS"
1346 sparc)
1347 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1348 LDFLAGS="-m32 -mv8plus $LDFLAGS"
1350 sparc64)
1351 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1352 LDFLAGS="-m64 $LDFLAGS"
1354 s390)
1355 CPU_CFLAGS="-m31"
1356 LDFLAGS="-m31 $LDFLAGS"
1358 s390x)
1359 CPU_CFLAGS="-m64"
1360 LDFLAGS="-m64 $LDFLAGS"
1362 i386)
1363 CPU_CFLAGS="-m32"
1364 LDFLAGS="-m32 $LDFLAGS"
1365 cc_i386='$(CC) -m32'
1367 x86_64)
1368 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1369 # If we truly care, we should simply detect this case at
1370 # runtime and generate the fallback to serial emulation.
1371 CPU_CFLAGS="-m64 -mcx16"
1372 LDFLAGS="-m64 $LDFLAGS"
1373 cc_i386='$(CC) -m32'
1375 x32)
1376 CPU_CFLAGS="-mx32"
1377 LDFLAGS="-mx32 $LDFLAGS"
1378 cc_i386='$(CC) -m32'
1380 # No special flags required for other host CPUs
1381 esac
1383 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1384 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1386 # For user-mode emulation the host arch has to be one we explicitly
1387 # support, even if we're using TCI.
1388 if [ "$ARCH" = "unknown" ]; then
1389 bsd_user="no"
1390 linux_user="no"
1393 default_target_list=""
1395 mak_wilds=""
1397 if [ "$softmmu" = "yes" ]; then
1398 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1400 if [ "$linux_user" = "yes" ]; then
1401 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1403 if [ "$bsd_user" = "yes" ]; then
1404 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1407 for config in $mak_wilds; do
1408 default_target_list="${default_target_list} $(basename "$config" .mak)"
1409 done
1411 # Enumerate public trace backends for --help output
1412 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1414 if test x"$show_help" = x"yes" ; then
1415 cat << EOF
1417 Usage: configure [options]
1418 Options: [defaults in brackets after descriptions]
1420 Standard options:
1421 --help print this message
1422 --prefix=PREFIX install in PREFIX [$prefix]
1423 --interp-prefix=PREFIX where to find shared libraries, etc.
1424 use %M for cpu name [$interp_prefix]
1425 --target-list=LIST set target list (default: build everything)
1426 $(echo Available targets: $default_target_list | \
1427 fold -s -w 53 | sed -e 's/^/ /')
1429 Advanced options (experts only):
1430 --source-path=PATH path of source code [$source_path]
1431 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1432 --cc=CC use C compiler CC [$cc]
1433 --iasl=IASL use ACPI compiler IASL [$iasl]
1434 --host-cc=CC use C compiler CC [$host_cc] for code run at
1435 build time
1436 --cxx=CXX use C++ compiler CXX [$cxx]
1437 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1438 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1439 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1440 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1441 --make=MAKE use specified make [$make]
1442 --install=INSTALL use specified install [$install]
1443 --python=PYTHON use specified python [$python]
1444 --smbd=SMBD use specified smbd [$smbd]
1445 --static enable static build [$static]
1446 --mandir=PATH install man pages in PATH
1447 --datadir=PATH install firmware in PATH$confsuffix
1448 --docdir=PATH install documentation in PATH$confsuffix
1449 --bindir=PATH install binaries in PATH
1450 --libdir=PATH install libraries in PATH
1451 --sysconfdir=PATH install config in PATH$confsuffix
1452 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1453 --firmwarepath=PATH search PATH for firmware files
1454 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1455 --enable-debug enable common debug build options
1456 --disable-strip disable stripping binaries
1457 --disable-werror disable compilation abort on warning
1458 --disable-stack-protector disable compiler-provided stack protection
1459 --audio-drv-list=LIST set audio drivers list:
1460 Available drivers: $audio_possible_drivers
1461 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1462 --block-drv-rw-whitelist=L
1463 set block driver read-write whitelist
1464 (affects only QEMU, not qemu-img)
1465 --block-drv-ro-whitelist=L
1466 set block driver read-only whitelist
1467 (affects only QEMU, not qemu-img)
1468 --enable-trace-backends=B Set trace backend
1469 Available backends: $trace_backend_list
1470 --with-trace-file=NAME Full PATH,NAME of file to store traces
1471 Default:trace-<pid>
1472 --disable-slirp disable SLIRP userspace network connectivity
1473 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1474 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1475 --oss-lib path to OSS library
1476 --cpu=CPU Build for host CPU [$cpu]
1477 --with-coroutine=BACKEND coroutine backend. Supported options:
1478 ucontext, sigaltstack, windows
1479 --enable-gcov enable test coverage analysis with gcov
1480 --gcov=GCOV use specified gcov [$gcov_tool]
1481 --disable-blobs disable installing provided firmware blobs
1482 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1483 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1484 --tls-priority default TLS protocol/cipher priority string
1485 --enable-gprof QEMU profiling with gprof
1486 --enable-profiler profiler support
1487 --enable-xen-pv-domain-build
1488 xen pv domain builder
1489 --enable-debug-stack-usage
1490 track the maximum stack usage of stacks created by qemu_alloc_stack
1492 Optional features, enabled with --enable-FEATURE and
1493 disabled with --disable-FEATURE, default is enabled if available:
1495 system all system emulation targets
1496 user supported user emulation targets
1497 linux-user all linux usermode emulation targets
1498 bsd-user all BSD usermode emulation targets
1499 docs build documentation
1500 guest-agent build the QEMU Guest Agent
1501 guest-agent-msi build guest agent Windows MSI installation package
1502 pie Position Independent Executables
1503 modules modules support
1504 debug-tcg TCG debugging (default is disabled)
1505 debug-info debugging information
1506 sparse sparse checker
1508 gnutls GNUTLS cryptography support
1509 nettle nettle cryptography support
1510 gcrypt libgcrypt cryptography support
1511 sdl SDL UI
1512 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1513 gtk gtk UI
1514 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1515 vte vte support for the gtk UI
1516 curses curses UI
1517 vnc VNC UI support
1518 vnc-sasl SASL encryption for VNC server
1519 vnc-jpeg JPEG lossy compression for VNC server
1520 vnc-png PNG compression for VNC server
1521 cocoa Cocoa UI (Mac OS X only)
1522 virtfs VirtFS
1523 mpath Multipath persistent reservation passthrough
1524 xen xen backend driver support
1525 xen-pci-passthrough
1526 brlapi BrlAPI (Braile)
1527 curl curl connectivity
1528 fdt fdt device tree
1529 bluez bluez stack connectivity
1530 kvm KVM acceleration support
1531 hax HAX acceleration support
1532 rdma RDMA-based migration support
1533 vde support for vde network
1534 netmap support for netmap network
1535 linux-aio Linux AIO support
1536 cap-ng libcap-ng support
1537 attr attr and xattr support
1538 vhost-net vhost-net acceleration support
1539 spice spice
1540 rbd rados block device (rbd)
1541 libiscsi iscsi support
1542 libnfs nfs support
1543 smartcard smartcard support (libcacard)
1544 libusb libusb (for usb passthrough)
1545 live-block-migration Block migration in the main migration stream
1546 usb-redir usb network redirection support
1547 lzo support of lzo compression library
1548 snappy support of snappy compression library
1549 bzip2 support of bzip2 compression library
1550 (for reading bzip2-compressed dmg images)
1551 seccomp seccomp support
1552 coroutine-pool coroutine freelist (better performance)
1553 glusterfs GlusterFS backend
1554 tpm TPM support
1555 libssh2 ssh block device support
1556 numa libnuma support
1557 tcmalloc tcmalloc support
1558 jemalloc jemalloc support
1559 replication replication support
1560 vhost-vsock virtio sockets device support
1561 opengl opengl support
1562 virglrenderer virgl rendering support
1563 xfsctl xfsctl support
1564 qom-cast-debug cast debugging support
1565 tools build qemu-io, qemu-nbd and qemu-image tools
1566 vxhs Veritas HyperScale vDisk backend support
1567 crypto-afalg Linux AF_ALG crypto backend driver
1568 vhost-user vhost-user support
1569 capstone capstone disassembler support
1571 NOTE: The object files are built at the place where configure is launched
1573 exit 0
1576 if ! has $python; then
1577 error_exit "Python not found. Use --python=/path/to/python"
1580 # Note that if the Python conditional here evaluates True we will exit
1581 # with status 1 which is a shell 'false' value.
1582 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1583 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1584 "Note that Python 3 or later is not yet supported." \
1585 "Use --python=/path/to/python to specify a supported Python."
1588 # Suppress writing compiled files
1589 python="$python -B"
1591 # Check that the C compiler works. Doing this here before testing
1592 # the host CPU ensures that we had a valid CC to autodetect the
1593 # $cpu var (and we should bail right here if that's not the case).
1594 # It also allows the help message to be printed without a CC.
1595 write_c_skeleton;
1596 if compile_object ; then
1597 : C compiler works ok
1598 else
1599 error_exit "\"$cc\" either does not exist or does not work"
1601 if ! compile_prog ; then
1602 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1605 # Now we have handled --enable-tcg-interpreter and know we're not just
1606 # printing the help message, bail out if the host CPU isn't supported.
1607 if test "$ARCH" = "unknown"; then
1608 if test "$tcg_interpreter" = "yes" ; then
1609 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1610 else
1611 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1615 # Consult white-list to determine whether to enable werror
1616 # by default. Only enable by default for git builds
1617 if test -z "$werror" ; then
1618 if test -d "$source_path/.git" -a \
1619 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1620 werror="yes"
1621 else
1622 werror="no"
1626 if test "$bogus_os" = "yes"; then
1627 # Now that we know that we're not printing the help and that
1628 # the compiler works (so the results of the check_defines we used
1629 # to identify the OS are reliable), if we didn't recognize the
1630 # host OS we should stop now.
1631 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1634 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1635 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1636 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1637 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1638 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1639 gcc_flags="-Wno-string-plus-int $gcc_flags"
1640 # Note that we do not add -Werror to gcc_flags here, because that would
1641 # enable it for all configure tests. If a configure test failed due
1642 # to -Werror this would just silently disable some features,
1643 # so it's too error prone.
1645 cc_has_warning_flag() {
1646 write_c_skeleton;
1648 # Use the positive sense of the flag when testing for -Wno-wombat
1649 # support (gcc will happily accept the -Wno- form of unknown
1650 # warning options).
1651 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1652 compile_prog "-Werror $optflag" ""
1655 for flag in $gcc_flags; do
1656 if cc_has_warning_flag $flag ; then
1657 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1659 done
1661 if test "$stack_protector" != "no"; then
1662 cat > $TMPC << EOF
1663 int main(int argc, char *argv[])
1665 char arr[64], *p = arr, *c = argv[0];
1666 while (*c) {
1667 *p++ = *c++;
1669 return 0;
1672 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1673 sp_on=0
1674 for flag in $gcc_flags; do
1675 # We need to check both a compile and a link, since some compiler
1676 # setups fail only on a .c->.o compile and some only at link time
1677 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1678 compile_prog "-Werror $flag" ""; then
1679 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1680 sp_on=1
1681 break
1683 done
1684 if test "$stack_protector" = yes; then
1685 if test $sp_on = 0; then
1686 error_exit "Stack protector not supported"
1691 # Disable -Wmissing-braces on older compilers that warn even for
1692 # the "universal" C zero initializer {0}.
1693 cat > $TMPC << EOF
1694 struct {
1695 int a[2];
1696 } x = {0};
1698 if compile_object "-Werror" "" ; then
1700 else
1701 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1704 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1705 # large functions that use global variables. The bug is in all releases of
1706 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1707 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1708 cat > $TMPC << EOF
1709 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1710 int main(void) { return 0; }
1711 #else
1712 #error No bug in this compiler.
1713 #endif
1715 if compile_prog "-Werror -fno-gcse" "" ; then
1716 TRANSLATE_OPT_CFLAGS=-fno-gcse
1719 if test "$static" = "yes" ; then
1720 if test "$modules" = "yes" ; then
1721 error_exit "static and modules are mutually incompatible"
1723 if test "$pie" = "yes" ; then
1724 error_exit "static and pie are mutually incompatible"
1725 else
1726 pie="no"
1730 # Unconditional check for compiler __thread support
1731 cat > $TMPC << EOF
1732 static __thread int tls_var;
1733 int main(void) { return tls_var; }
1736 if ! compile_prog "-Werror" "" ; then
1737 error_exit "Your compiler does not support the __thread specifier for " \
1738 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1741 if test "$pie" = ""; then
1742 case "$cpu-$targetos" in
1743 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1746 pie="no"
1748 esac
1751 if test "$pie" != "no" ; then
1752 cat > $TMPC << EOF
1754 #ifdef __linux__
1755 # define THREAD __thread
1756 #else
1757 # define THREAD
1758 #endif
1760 static THREAD int tls_var;
1762 int main(void) { return tls_var; }
1765 if compile_prog "-fPIE -DPIE" "-pie"; then
1766 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1767 LDFLAGS="-pie $LDFLAGS"
1768 pie="yes"
1769 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1770 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1772 else
1773 if test "$pie" = "yes"; then
1774 error_exit "PIE not available due to missing toolchain support"
1775 else
1776 echo "Disabling PIE due to missing toolchain support"
1777 pie="no"
1781 if compile_prog "-Werror -fno-pie" "-nopie"; then
1782 CFLAGS_NOPIE="-fno-pie"
1783 LDFLAGS_NOPIE="-nopie"
1787 ##########################################
1788 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1789 # use i686 as default anyway, but for those that don't, an explicit
1790 # specification is necessary
1792 if test "$cpu" = "i386"; then
1793 cat > $TMPC << EOF
1794 static int sfaa(int *ptr)
1796 return __sync_fetch_and_and(ptr, 0);
1799 int main(void)
1801 int val = 42;
1802 val = __sync_val_compare_and_swap(&val, 0, 1);
1803 sfaa(&val);
1804 return val;
1807 if ! compile_prog "" "" ; then
1808 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1812 #########################################
1813 # Solaris specific configure tool chain decisions
1815 if test "$solaris" = "yes" ; then
1816 if has $install; then
1818 else
1819 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1820 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1821 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1823 if test "$(path_of $install)" = "/usr/sbin/install" ; then
1824 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1825 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1826 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1828 if has ar; then
1830 else
1831 if test -f /usr/ccs/bin/ar ; then
1832 error_exit "No path includes ar" \
1833 "Add /usr/ccs/bin to your path and rerun configure"
1835 error_exit "No path includes ar"
1839 if test -z "${target_list+xxx}" ; then
1840 for target in $default_target_list; do
1841 supported_target $target 2>/dev/null && \
1842 target_list="$target_list $target"
1843 done
1844 target_list="${target_list# }"
1845 else
1846 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1847 for target in $target_list; do
1848 # Check that we recognised the target name; this allows a more
1849 # friendly error message than if we let it fall through.
1850 case " $default_target_list " in
1851 *" $target "*)
1854 error_exit "Unknown target name '$target'"
1856 esac
1857 supported_target $target || exit 1
1858 done
1861 # see if system emulation was really requested
1862 case " $target_list " in
1863 *"-softmmu "*) softmmu=yes
1865 *) softmmu=no
1867 esac
1869 feature_not_found() {
1870 feature=$1
1871 remedy=$2
1873 error_exit "User requested feature $feature" \
1874 "configure was not able to find it." \
1875 "$remedy"
1878 # ---
1879 # big/little endian test
1880 cat > $TMPC << EOF
1881 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1882 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1883 extern int foo(short *, short *);
1884 int main(int argc, char *argv[]) {
1885 return foo(big_endian, little_endian);
1889 if compile_object ; then
1890 if grep -q BiGeNdIaN $TMPO ; then
1891 bigendian="yes"
1892 elif grep -q LiTtLeEnDiAn $TMPO ; then
1893 bigendian="no"
1894 else
1895 echo big/little test failed
1897 else
1898 echo big/little test failed
1901 ##########################################
1902 # cocoa implies not SDL or GTK
1903 # (the cocoa UI code currently assumes it is always the active UI
1904 # and doesn't interact well with other UI frontend code)
1905 if test "$cocoa" = "yes"; then
1906 if test "$sdl" = "yes"; then
1907 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1909 if test "$gtk" = "yes"; then
1910 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1912 gtk=no
1913 sdl=no
1916 # Some versions of Mac OS X incorrectly define SIZE_MAX
1917 cat > $TMPC << EOF
1918 #include <stdint.h>
1919 #include <stdio.h>
1920 int main(int argc, char *argv[]) {
1921 return printf("%zu", SIZE_MAX);
1924 have_broken_size_max=no
1925 if ! compile_object -Werror ; then
1926 have_broken_size_max=yes
1929 ##########################################
1930 # L2TPV3 probe
1932 cat > $TMPC <<EOF
1933 #include <sys/socket.h>
1934 #include <linux/ip.h>
1935 int main(void) { return sizeof(struct mmsghdr); }
1937 if compile_prog "" "" ; then
1938 l2tpv3=yes
1939 else
1940 l2tpv3=no
1943 ##########################################
1944 # MinGW / Mingw-w64 localtime_r/gmtime_r check
1946 if test "$mingw32" = "yes"; then
1947 # Some versions of MinGW / Mingw-w64 lack localtime_r
1948 # and gmtime_r entirely.
1950 # Some versions of Mingw-w64 define a macro for
1951 # localtime_r/gmtime_r.
1953 # Some versions of Mingw-w64 will define functions
1954 # for localtime_r/gmtime_r, but only if you have
1955 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1956 # though, unistd.h and pthread.h both define
1957 # that for you.
1959 # So this #undef localtime_r and #include <unistd.h>
1960 # are not in fact redundant.
1961 cat > $TMPC << EOF
1962 #include <unistd.h>
1963 #include <time.h>
1964 #undef localtime_r
1965 int main(void) { localtime_r(NULL, NULL); return 0; }
1967 if compile_prog "" "" ; then
1968 localtime_r="yes"
1969 else
1970 localtime_r="no"
1974 ##########################################
1975 # pkg-config probe
1977 if ! has "$pkg_config_exe"; then
1978 error_exit "pkg-config binary '$pkg_config_exe' not found"
1981 ##########################################
1982 # NPTL probe
1984 if test "$linux_user" = "yes"; then
1985 cat > $TMPC <<EOF
1986 #include <sched.h>
1987 #include <linux/futex.h>
1988 int main(void) {
1989 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1990 #error bork
1991 #endif
1992 return 0;
1995 if ! compile_object ; then
1996 feature_not_found "nptl" "Install glibc and linux kernel headers."
2000 #########################################
2001 # zlib check
2003 if test "$zlib" != "no" ; then
2004 cat > $TMPC << EOF
2005 #include <zlib.h>
2006 int main(void) { zlibVersion(); return 0; }
2008 if compile_prog "" "-lz" ; then
2010 else
2011 error_exit "zlib check failed" \
2012 "Make sure to have the zlib libs and headers installed."
2015 LIBS="$LIBS -lz"
2017 ##########################################
2018 # lzo check
2020 if test "$lzo" != "no" ; then
2021 cat > $TMPC << EOF
2022 #include <lzo/lzo1x.h>
2023 int main(void) { lzo_version(); return 0; }
2025 if compile_prog "" "-llzo2" ; then
2026 libs_softmmu="$libs_softmmu -llzo2"
2027 lzo="yes"
2028 else
2029 if test "$lzo" = "yes"; then
2030 feature_not_found "liblzo2" "Install liblzo2 devel"
2032 lzo="no"
2036 ##########################################
2037 # snappy check
2039 if test "$snappy" != "no" ; then
2040 cat > $TMPC << EOF
2041 #include <snappy-c.h>
2042 int main(void) { snappy_max_compressed_length(4096); return 0; }
2044 if compile_prog "" "-lsnappy" ; then
2045 libs_softmmu="$libs_softmmu -lsnappy"
2046 snappy="yes"
2047 else
2048 if test "$snappy" = "yes"; then
2049 feature_not_found "libsnappy" "Install libsnappy devel"
2051 snappy="no"
2055 ##########################################
2056 # bzip2 check
2058 if test "$bzip2" != "no" ; then
2059 cat > $TMPC << EOF
2060 #include <bzlib.h>
2061 int main(void) { BZ2_bzlibVersion(); return 0; }
2063 if compile_prog "" "-lbz2" ; then
2064 bzip2="yes"
2065 else
2066 if test "$bzip2" = "yes"; then
2067 feature_not_found "libbzip2" "Install libbzip2 devel"
2069 bzip2="no"
2073 ##########################################
2074 # libseccomp check
2076 if test "$seccomp" != "no" ; then
2077 case "$cpu" in
2078 i386|x86_64)
2079 libseccomp_minver="2.1.0"
2081 mips)
2082 libseccomp_minver="2.2.0"
2084 arm|aarch64)
2085 libseccomp_minver="2.2.3"
2087 ppc|ppc64|s390x)
2088 libseccomp_minver="2.3.0"
2091 libseccomp_minver=""
2093 esac
2095 if test "$libseccomp_minver" != "" &&
2096 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2097 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2098 seccomp_libs="$($pkg_config --libs libseccomp)"
2099 seccomp="yes"
2100 else
2101 if test "$seccomp" = "yes" ; then
2102 if test "$libseccomp_minver" != "" ; then
2103 feature_not_found "libseccomp" \
2104 "Install libseccomp devel >= $libseccomp_minver"
2105 else
2106 feature_not_found "libseccomp" \
2107 "libseccomp is not supported for host cpu $cpu"
2110 seccomp="no"
2113 ##########################################
2114 # xen probe
2116 if test "$xen" != "no" ; then
2117 # Check whether Xen library path is specified via --extra-ldflags to avoid
2118 # overriding this setting with pkg-config output. If not, try pkg-config
2119 # to obtain all needed flags.
2121 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2122 $pkg_config --exists xencontrol ; then
2123 xen_ctrl_version="$(printf '%d%02d%02d' \
2124 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2125 xen=yes
2126 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2127 xen_pc="$xen_pc xenevtchn xendevicemodel"
2128 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2129 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2130 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2131 else
2133 xen_libs="-lxenstore -lxenctrl -lxenguest"
2134 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2136 # First we test whether Xen headers and libraries are available.
2137 # If no, we are done and there is no Xen support.
2138 # If yes, more tests are run to detect the Xen version.
2140 # Xen (any)
2141 cat > $TMPC <<EOF
2142 #include <xenctrl.h>
2143 int main(void) {
2144 return 0;
2147 if ! compile_prog "" "$xen_libs" ; then
2148 # Xen not found
2149 if test "$xen" = "yes" ; then
2150 feature_not_found "xen" "Install xen devel"
2152 xen=no
2154 # Xen unstable
2155 elif
2156 cat > $TMPC <<EOF &&
2157 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2158 #include <xenforeignmemory.h>
2159 int main(void) {
2160 xenforeignmemory_handle *xfmem;
2162 xfmem = xenforeignmemory_open(0, 0);
2163 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2165 return 0;
2168 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2169 then
2170 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2171 xen_ctrl_version=41000
2172 xen=yes
2173 elif
2174 cat > $TMPC <<EOF &&
2175 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2176 #define __XEN_TOOLS__
2177 #include <xendevicemodel.h>
2178 int main(void) {
2179 xendevicemodel_handle *xd;
2181 xd = xendevicemodel_open(0, 0);
2182 xendevicemodel_close(xd);
2184 return 0;
2187 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2188 then
2189 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2190 xen_ctrl_version=40900
2191 xen=yes
2192 elif
2193 cat > $TMPC <<EOF &&
2195 * If we have stable libs the we don't want the libxc compat
2196 * layers, regardless of what CFLAGS we may have been given.
2198 * Also, check if xengnttab_grant_copy_segment_t is defined and
2199 * grant copy operation is implemented.
2201 #undef XC_WANT_COMPAT_EVTCHN_API
2202 #undef XC_WANT_COMPAT_GNTTAB_API
2203 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2204 #include <xenctrl.h>
2205 #include <xenstore.h>
2206 #include <xenevtchn.h>
2207 #include <xengnttab.h>
2208 #include <xenforeignmemory.h>
2209 #include <stdint.h>
2210 #include <xen/hvm/hvm_info_table.h>
2211 #if !defined(HVM_MAX_VCPUS)
2212 # error HVM_MAX_VCPUS not defined
2213 #endif
2214 int main(void) {
2215 xc_interface *xc = NULL;
2216 xenforeignmemory_handle *xfmem;
2217 xenevtchn_handle *xe;
2218 xengnttab_handle *xg;
2219 xen_domain_handle_t handle;
2220 xengnttab_grant_copy_segment_t* seg = NULL;
2222 xs_daemon_open();
2224 xc = xc_interface_open(0, 0, 0);
2225 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2226 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2227 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2228 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2229 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2231 xfmem = xenforeignmemory_open(0, 0);
2232 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2234 xe = xenevtchn_open(0, 0);
2235 xenevtchn_fd(xe);
2237 xg = xengnttab_open(0, 0);
2238 xengnttab_grant_copy(xg, 0, seg);
2240 return 0;
2243 compile_prog "" "$xen_libs $xen_stable_libs"
2244 then
2245 xen_ctrl_version=40800
2246 xen=yes
2247 elif
2248 cat > $TMPC <<EOF &&
2250 * If we have stable libs the we don't want the libxc compat
2251 * layers, regardless of what CFLAGS we may have been given.
2253 #undef XC_WANT_COMPAT_EVTCHN_API
2254 #undef XC_WANT_COMPAT_GNTTAB_API
2255 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2256 #include <xenctrl.h>
2257 #include <xenstore.h>
2258 #include <xenevtchn.h>
2259 #include <xengnttab.h>
2260 #include <xenforeignmemory.h>
2261 #include <stdint.h>
2262 #include <xen/hvm/hvm_info_table.h>
2263 #if !defined(HVM_MAX_VCPUS)
2264 # error HVM_MAX_VCPUS not defined
2265 #endif
2266 int main(void) {
2267 xc_interface *xc = NULL;
2268 xenforeignmemory_handle *xfmem;
2269 xenevtchn_handle *xe;
2270 xengnttab_handle *xg;
2271 xen_domain_handle_t handle;
2273 xs_daemon_open();
2275 xc = xc_interface_open(0, 0, 0);
2276 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2277 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2278 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2279 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2280 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2282 xfmem = xenforeignmemory_open(0, 0);
2283 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2285 xe = xenevtchn_open(0, 0);
2286 xenevtchn_fd(xe);
2288 xg = xengnttab_open(0, 0);
2289 xengnttab_map_grant_ref(xg, 0, 0, 0);
2291 return 0;
2294 compile_prog "" "$xen_libs $xen_stable_libs"
2295 then
2296 xen_ctrl_version=40701
2297 xen=yes
2298 elif
2299 cat > $TMPC <<EOF &&
2300 #include <xenctrl.h>
2301 #include <stdint.h>
2302 int main(void) {
2303 xc_interface *xc = NULL;
2304 xen_domain_handle_t handle;
2305 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2306 return 0;
2309 compile_prog "" "$xen_libs"
2310 then
2311 xen_ctrl_version=40700
2312 xen=yes
2314 # Xen 4.6
2315 elif
2316 cat > $TMPC <<EOF &&
2317 #include <xenctrl.h>
2318 #include <xenstore.h>
2319 #include <stdint.h>
2320 #include <xen/hvm/hvm_info_table.h>
2321 #if !defined(HVM_MAX_VCPUS)
2322 # error HVM_MAX_VCPUS not defined
2323 #endif
2324 int main(void) {
2325 xc_interface *xc;
2326 xs_daemon_open();
2327 xc = xc_interface_open(0, 0, 0);
2328 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2329 xc_gnttab_open(NULL, 0);
2330 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2331 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2332 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2333 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2334 return 0;
2337 compile_prog "" "$xen_libs"
2338 then
2339 xen_ctrl_version=40600
2340 xen=yes
2342 # Xen 4.5
2343 elif
2344 cat > $TMPC <<EOF &&
2345 #include <xenctrl.h>
2346 #include <xenstore.h>
2347 #include <stdint.h>
2348 #include <xen/hvm/hvm_info_table.h>
2349 #if !defined(HVM_MAX_VCPUS)
2350 # error HVM_MAX_VCPUS not defined
2351 #endif
2352 int main(void) {
2353 xc_interface *xc;
2354 xs_daemon_open();
2355 xc = xc_interface_open(0, 0, 0);
2356 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2357 xc_gnttab_open(NULL, 0);
2358 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2359 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2360 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2361 return 0;
2364 compile_prog "" "$xen_libs"
2365 then
2366 xen_ctrl_version=40500
2367 xen=yes
2369 elif
2370 cat > $TMPC <<EOF &&
2371 #include <xenctrl.h>
2372 #include <xenstore.h>
2373 #include <stdint.h>
2374 #include <xen/hvm/hvm_info_table.h>
2375 #if !defined(HVM_MAX_VCPUS)
2376 # error HVM_MAX_VCPUS not defined
2377 #endif
2378 int main(void) {
2379 xc_interface *xc;
2380 xs_daemon_open();
2381 xc = xc_interface_open(0, 0, 0);
2382 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2383 xc_gnttab_open(NULL, 0);
2384 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2385 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2386 return 0;
2389 compile_prog "" "$xen_libs"
2390 then
2391 xen_ctrl_version=40200
2392 xen=yes
2394 else
2395 if test "$xen" = "yes" ; then
2396 feature_not_found "xen (unsupported version)" \
2397 "Install a supported xen (xen 4.2 or newer)"
2399 xen=no
2402 if test "$xen" = yes; then
2403 if test $xen_ctrl_version -ge 40701 ; then
2404 libs_softmmu="$xen_stable_libs $libs_softmmu"
2406 libs_softmmu="$xen_libs $libs_softmmu"
2411 if test "$xen_pci_passthrough" != "no"; then
2412 if test "$xen" = "yes" && test "$linux" = "yes"; then
2413 xen_pci_passthrough=yes
2414 else
2415 if test "$xen_pci_passthrough" = "yes"; then
2416 error_exit "User requested feature Xen PCI Passthrough" \
2417 " but this feature requires /sys from Linux"
2419 xen_pci_passthrough=no
2423 if test "$xen_pv_domain_build" = "yes" &&
2424 test "$xen" != "yes"; then
2425 error_exit "User requested Xen PV domain builder support" \
2426 "which requires Xen support."
2429 ##########################################
2430 # Sparse probe
2431 if test "$sparse" != "no" ; then
2432 if has cgcc; then
2433 sparse=yes
2434 else
2435 if test "$sparse" = "yes" ; then
2436 feature_not_found "sparse" "Install sparse binary"
2438 sparse=no
2442 ##########################################
2443 # X11 probe
2444 x11_cflags=
2445 x11_libs=-lX11
2446 if $pkg_config --exists "x11"; then
2447 x11_cflags=$($pkg_config --cflags x11)
2448 x11_libs=$($pkg_config --libs x11)
2451 ##########################################
2452 # GTK probe
2454 if test "$gtkabi" = ""; then
2455 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2456 # Use 2.0 as a fallback if that is available.
2457 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2458 gtkabi=3.0
2459 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2460 gtkabi=2.0
2461 else
2462 gtkabi=3.0
2466 if test "$gtk" != "no"; then
2467 gtkpackage="gtk+-$gtkabi"
2468 gtkx11package="gtk+-x11-$gtkabi"
2469 if test "$gtkabi" = "3.0" ; then
2470 gtkversion="3.0.0"
2471 else
2472 gtkversion="2.18.0"
2474 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2475 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2476 gtk_libs=$($pkg_config --libs $gtkpackage)
2477 gtk_version=$($pkg_config --modversion $gtkpackage)
2478 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2479 gtk_cflags="$gtk_cflags $x11_cflags"
2480 gtk_libs="$gtk_libs $x11_libs"
2482 libs_softmmu="$gtk_libs $libs_softmmu"
2483 gtk="yes"
2484 elif test "$gtk" = "yes"; then
2485 feature_not_found "gtk" "Install gtk3-devel"
2486 else
2487 gtk="no"
2492 ##########################################
2493 # GNUTLS probe
2495 gnutls_works() {
2496 # Unfortunately some distros have bad pkg-config information for gnutls
2497 # such that it claims to exist but you get a compiler error if you try
2498 # to use the options returned by --libs. Specifically, Ubuntu for --static
2499 # builds doesn't work:
2500 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2502 # So sanity check the cflags/libs before assuming gnutls can be used.
2503 if ! $pkg_config --exists "gnutls"; then
2504 return 1
2507 write_c_skeleton
2508 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2511 gnutls_gcrypt=no
2512 gnutls_nettle=no
2513 if test "$gnutls" != "no"; then
2514 if gnutls_works; then
2515 gnutls_cflags=$($pkg_config --cflags gnutls)
2516 gnutls_libs=$($pkg_config --libs gnutls)
2517 libs_softmmu="$gnutls_libs $libs_softmmu"
2518 libs_tools="$gnutls_libs $libs_tools"
2519 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2520 gnutls="yes"
2522 # gnutls_rnd requires >= 2.11.0
2523 if $pkg_config --exists "gnutls >= 2.11.0"; then
2524 gnutls_rnd="yes"
2525 else
2526 gnutls_rnd="no"
2529 if $pkg_config --exists 'gnutls >= 3.0'; then
2530 gnutls_gcrypt=no
2531 gnutls_nettle=yes
2532 elif $pkg_config --exists 'gnutls >= 2.12'; then
2533 case $($pkg_config --libs --static gnutls) in
2534 *gcrypt*)
2535 gnutls_gcrypt=yes
2536 gnutls_nettle=no
2538 *nettle*)
2539 gnutls_gcrypt=no
2540 gnutls_nettle=yes
2543 gnutls_gcrypt=yes
2544 gnutls_nettle=no
2546 esac
2547 else
2548 gnutls_gcrypt=yes
2549 gnutls_nettle=no
2551 elif test "$gnutls" = "yes"; then
2552 feature_not_found "gnutls" "Install gnutls devel"
2553 else
2554 gnutls="no"
2555 gnutls_rnd="no"
2557 else
2558 gnutls_rnd="no"
2562 # If user didn't give a --disable/enable-gcrypt flag,
2563 # then mark as disabled if user requested nettle
2564 # explicitly, or if gnutls links to nettle
2565 if test -z "$gcrypt"
2566 then
2567 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2568 then
2569 gcrypt="no"
2573 # If user didn't give a --disable/enable-nettle flag,
2574 # then mark as disabled if user requested gcrypt
2575 # explicitly, or if gnutls links to gcrypt
2576 if test -z "$nettle"
2577 then
2578 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2579 then
2580 nettle="no"
2584 has_libgcrypt_config() {
2585 if ! has "libgcrypt-config"
2586 then
2587 return 1
2590 if test -n "$cross_prefix"
2591 then
2592 host=$(libgcrypt-config --host)
2593 if test "$host-" != $cross_prefix
2594 then
2595 return 1
2599 return 0
2602 if test "$gcrypt" != "no"; then
2603 if has_libgcrypt_config; then
2604 gcrypt_cflags=$(libgcrypt-config --cflags)
2605 gcrypt_libs=$(libgcrypt-config --libs)
2606 # Debian has remove -lgpg-error from libgcrypt-config
2607 # as it "spreads unnecessary dependencies" which in
2608 # turn breaks static builds...
2609 if test "$static" = "yes"
2610 then
2611 gcrypt_libs="$gcrypt_libs -lgpg-error"
2613 libs_softmmu="$gcrypt_libs $libs_softmmu"
2614 libs_tools="$gcrypt_libs $libs_tools"
2615 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2616 gcrypt="yes"
2617 if test -z "$nettle"; then
2618 nettle="no"
2621 cat > $TMPC << EOF
2622 #include <gcrypt.h>
2623 int main(void) {
2624 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2625 GCRY_MD_SHA256,
2626 NULL, 0, 0, 0, NULL);
2627 return 0;
2630 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2631 gcrypt_kdf=yes
2634 cat > $TMPC << EOF
2635 #include <gcrypt.h>
2636 int main(void) {
2637 gcry_mac_hd_t handle;
2638 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2639 GCRY_MAC_FLAG_SECURE, NULL);
2640 return 0;
2643 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2644 gcrypt_hmac=yes
2646 else
2647 if test "$gcrypt" = "yes"; then
2648 feature_not_found "gcrypt" "Install gcrypt devel"
2649 else
2650 gcrypt="no"
2656 if test "$nettle" != "no"; then
2657 if $pkg_config --exists "nettle"; then
2658 nettle_cflags=$($pkg_config --cflags nettle)
2659 nettle_libs=$($pkg_config --libs nettle)
2660 nettle_version=$($pkg_config --modversion nettle)
2661 libs_softmmu="$nettle_libs $libs_softmmu"
2662 libs_tools="$nettle_libs $libs_tools"
2663 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2664 nettle="yes"
2666 cat > $TMPC << EOF
2667 #include <stddef.h>
2668 #include <nettle/pbkdf2.h>
2669 int main(void) {
2670 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2671 return 0;
2674 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2675 nettle_kdf=yes
2677 else
2678 if test "$nettle" = "yes"; then
2679 feature_not_found "nettle" "Install nettle devel"
2680 else
2681 nettle="no"
2686 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2687 then
2688 error_exit "Only one of gcrypt & nettle can be enabled"
2691 ##########################################
2692 # libtasn1 - only for the TLS creds/session test suite
2694 tasn1=yes
2695 tasn1_cflags=""
2696 tasn1_libs=""
2697 if $pkg_config --exists "libtasn1"; then
2698 tasn1_cflags=$($pkg_config --cflags libtasn1)
2699 tasn1_libs=$($pkg_config --libs libtasn1)
2700 else
2701 tasn1=no
2705 ##########################################
2706 # getifaddrs (for tests/test-io-channel-socket )
2708 have_ifaddrs_h=yes
2709 if ! check_include "ifaddrs.h" ; then
2710 have_ifaddrs_h=no
2713 ##########################################
2714 # VTE probe
2716 if test "$vte" != "no"; then
2717 if test "$gtkabi" = "3.0"; then
2718 vteminversion="0.32.0"
2719 if $pkg_config --exists "vte-2.91"; then
2720 vtepackage="vte-2.91"
2721 else
2722 vtepackage="vte-2.90"
2724 else
2725 vtepackage="vte"
2726 vteminversion="0.24.0"
2728 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2729 vte_cflags=$($pkg_config --cflags $vtepackage)
2730 vte_libs=$($pkg_config --libs $vtepackage)
2731 vteversion=$($pkg_config --modversion $vtepackage)
2732 libs_softmmu="$vte_libs $libs_softmmu"
2733 vte="yes"
2734 elif test "$vte" = "yes"; then
2735 if test "$gtkabi" = "3.0"; then
2736 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2737 else
2738 feature_not_found "vte" "Install libvte devel"
2740 else
2741 vte="no"
2745 ##########################################
2746 # SDL probe
2748 # Look for sdl configuration program (pkg-config or sdl-config). Try
2749 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2751 if test "$sdlabi" = ""; then
2752 if $pkg_config --exists "sdl2"; then
2753 sdlabi=2.0
2754 elif $pkg_config --exists "sdl"; then
2755 sdlabi=1.2
2756 else
2757 sdlabi=2.0
2761 if test $sdlabi = "2.0"; then
2762 sdl_config=$sdl2_config
2763 sdlname=sdl2
2764 sdlconfigname=sdl2_config
2765 elif test $sdlabi = "1.2"; then
2766 sdlname=sdl
2767 sdlconfigname=sdl_config
2768 else
2769 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2772 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2773 sdl_config=$sdlconfigname
2776 if $pkg_config $sdlname --exists; then
2777 sdlconfig="$pkg_config $sdlname"
2778 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2779 elif has ${sdl_config}; then
2780 sdlconfig="$sdl_config"
2781 sdlversion=$($sdlconfig --version)
2782 else
2783 if test "$sdl" = "yes" ; then
2784 feature_not_found "sdl" "Install SDL2-devel"
2786 sdl=no
2788 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2789 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2792 sdl_too_old=no
2793 if test "$sdl" != "no" ; then
2794 cat > $TMPC << EOF
2795 #include <SDL.h>
2796 #undef main /* We don't want SDL to override our main() */
2797 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2799 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2800 if test "$static" = "yes" ; then
2801 if $pkg_config $sdlname --exists; then
2802 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2803 else
2804 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2806 else
2807 sdl_libs=$($sdlconfig --libs 2>/dev/null)
2809 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2810 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2811 sdl_too_old=yes
2812 else
2813 sdl=yes
2816 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2817 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2818 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2819 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2820 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2822 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2824 else
2825 sdl=no
2827 fi # static link
2828 else # sdl not found
2829 if test "$sdl" = "yes" ; then
2830 feature_not_found "sdl" "Install SDL devel"
2832 sdl=no
2833 fi # sdl compile test
2836 if test "$sdl" = "yes" ; then
2837 cat > $TMPC <<EOF
2838 #include <SDL.h>
2839 #if defined(SDL_VIDEO_DRIVER_X11)
2840 #include <X11/XKBlib.h>
2841 #else
2842 #error No x11 support
2843 #endif
2844 int main(void) { return 0; }
2846 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2847 sdl_cflags="$sdl_cflags $x11_cflags"
2848 sdl_libs="$sdl_libs $x11_libs"
2852 ##########################################
2853 # RDMA needs OpenFabrics libraries
2854 if test "$rdma" != "no" ; then
2855 cat > $TMPC <<EOF
2856 #include <rdma/rdma_cma.h>
2857 int main(void) { return 0; }
2859 rdma_libs="-lrdmacm -libverbs"
2860 if compile_prog "" "$rdma_libs" ; then
2861 rdma="yes"
2862 else
2863 if test "$rdma" = "yes" ; then
2864 error_exit \
2865 " OpenFabrics librdmacm/libibverbs not present." \
2866 " Your options:" \
2867 " (1) Fast: Install infiniband packages from your distro." \
2868 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2869 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2871 rdma="no"
2876 ##########################################
2877 # VNC SASL detection
2878 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2879 cat > $TMPC <<EOF
2880 #include <sasl/sasl.h>
2881 #include <stdio.h>
2882 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2884 # Assuming Cyrus-SASL installed in /usr prefix
2885 vnc_sasl_cflags=""
2886 vnc_sasl_libs="-lsasl2"
2887 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2888 vnc_sasl=yes
2889 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2890 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2891 else
2892 if test "$vnc_sasl" = "yes" ; then
2893 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2895 vnc_sasl=no
2899 ##########################################
2900 # VNC JPEG detection
2901 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2902 cat > $TMPC <<EOF
2903 #include <stdio.h>
2904 #include <jpeglib.h>
2905 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2907 vnc_jpeg_cflags=""
2908 vnc_jpeg_libs="-ljpeg"
2909 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2910 vnc_jpeg=yes
2911 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2912 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2913 else
2914 if test "$vnc_jpeg" = "yes" ; then
2915 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2917 vnc_jpeg=no
2921 ##########################################
2922 # VNC PNG detection
2923 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2924 cat > $TMPC <<EOF
2925 //#include <stdio.h>
2926 #include <png.h>
2927 #include <stddef.h>
2928 int main(void) {
2929 png_structp png_ptr;
2930 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2931 return png_ptr != 0;
2934 if $pkg_config libpng --exists; then
2935 vnc_png_cflags=$($pkg_config libpng --cflags)
2936 vnc_png_libs=$($pkg_config libpng --libs)
2937 else
2938 vnc_png_cflags=""
2939 vnc_png_libs="-lpng"
2941 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2942 vnc_png=yes
2943 libs_softmmu="$vnc_png_libs $libs_softmmu"
2944 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2945 else
2946 if test "$vnc_png" = "yes" ; then
2947 feature_not_found "vnc-png" "Install libpng devel"
2949 vnc_png=no
2953 ##########################################
2954 # xkbcommon probe
2955 if test "$xkbcommon" != "no" ; then
2956 if $pkg_config xkbcommon --exists; then
2957 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
2958 xkbcommon_libs=$($pkg_config xkbcommon --libs)
2959 xkbcommon=yes
2960 else
2961 if test "$xkbcommon" = "yes" ; then
2962 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
2964 xkbcommon=no
2968 ##########################################
2969 # fnmatch() probe, used for ACL routines
2970 fnmatch="no"
2971 cat > $TMPC << EOF
2972 #include <fnmatch.h>
2973 int main(void)
2975 fnmatch("foo", "foo", 0);
2976 return 0;
2979 if compile_prog "" "" ; then
2980 fnmatch="yes"
2983 ##########################################
2984 # xfsctl() probe, used for file-posix.c
2985 if test "$xfs" != "no" ; then
2986 cat > $TMPC << EOF
2987 #include <stddef.h> /* NULL */
2988 #include <xfs/xfs.h>
2989 int main(void)
2991 xfsctl(NULL, 0, 0, NULL);
2992 return 0;
2995 if compile_prog "" "" ; then
2996 xfs="yes"
2997 else
2998 if test "$xfs" = "yes" ; then
2999 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3001 xfs=no
3005 ##########################################
3006 # vde libraries probe
3007 if test "$vde" != "no" ; then
3008 vde_libs="-lvdeplug"
3009 cat > $TMPC << EOF
3010 #include <libvdeplug.h>
3011 int main(void)
3013 struct vde_open_args a = {0, 0, 0};
3014 char s[] = "";
3015 vde_open(s, s, &a);
3016 return 0;
3019 if compile_prog "" "$vde_libs" ; then
3020 vde=yes
3021 else
3022 if test "$vde" = "yes" ; then
3023 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3025 vde=no
3029 ##########################################
3030 # netmap support probe
3031 # Apart from looking for netmap headers, we make sure that the host API version
3032 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3033 # a minor/major version number. Minor new features will be marked with values up
3034 # to 15, and if something happens that requires a change to the backend we will
3035 # move above 15, submit the backend fixes and modify this two bounds.
3036 if test "$netmap" != "no" ; then
3037 cat > $TMPC << EOF
3038 #include <inttypes.h>
3039 #include <net/if.h>
3040 #include <net/netmap.h>
3041 #include <net/netmap_user.h>
3042 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3043 #error
3044 #endif
3045 int main(void) { return 0; }
3047 if compile_prog "" "" ; then
3048 netmap=yes
3049 else
3050 if test "$netmap" = "yes" ; then
3051 feature_not_found "netmap"
3053 netmap=no
3057 ##########################################
3058 # libcap-ng library probe
3059 if test "$cap_ng" != "no" ; then
3060 cap_libs="-lcap-ng"
3061 cat > $TMPC << EOF
3062 #include <cap-ng.h>
3063 int main(void)
3065 capng_capability_to_name(CAPNG_EFFECTIVE);
3066 return 0;
3069 if compile_prog "" "$cap_libs" ; then
3070 cap_ng=yes
3071 libs_tools="$cap_libs $libs_tools"
3072 else
3073 if test "$cap_ng" = "yes" ; then
3074 feature_not_found "cap_ng" "Install libcap-ng devel"
3076 cap_ng=no
3080 ##########################################
3081 # Sound support libraries probe
3083 audio_drv_probe()
3085 drv=$1
3086 hdr=$2
3087 lib=$3
3088 exp=$4
3089 cfl=$5
3090 cat > $TMPC << EOF
3091 #include <$hdr>
3092 int main(void) { $exp }
3094 if compile_prog "$cfl" "$lib" ; then
3096 else
3097 error_exit "$drv check failed" \
3098 "Make sure to have the $drv libs and headers installed."
3102 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3103 for drv in $audio_drv_list; do
3104 case $drv in
3105 alsa)
3106 audio_drv_probe $drv alsa/asoundlib.h -lasound \
3107 "return snd_pcm_close((snd_pcm_t *)0);"
3108 alsa_libs="-lasound"
3112 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3113 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
3114 pulse_libs="-lpulse"
3115 audio_pt_int="yes"
3118 sdl)
3119 if test "$sdl" = "no"; then
3120 error_exit "sdl not found or disabled, can not use sdl audio driver"
3124 coreaudio)
3125 coreaudio_libs="-framework CoreAudio"
3128 dsound)
3129 dsound_libs="-lole32 -ldxguid"
3130 audio_win_int="yes"
3133 oss)
3134 oss_libs="$oss_lib"
3137 wav)
3138 # XXX: Probes for CoreAudio, DirectSound
3142 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3143 error_exit "Unknown driver '$drv' selected" \
3144 "Possible drivers are: $audio_possible_drivers"
3147 esac
3148 done
3150 ##########################################
3151 # BrlAPI probe
3153 if test "$brlapi" != "no" ; then
3154 brlapi_libs="-lbrlapi"
3155 cat > $TMPC << EOF
3156 #include <brlapi.h>
3157 #include <stddef.h>
3158 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3160 if compile_prog "" "$brlapi_libs" ; then
3161 brlapi=yes
3162 else
3163 if test "$brlapi" = "yes" ; then
3164 feature_not_found "brlapi" "Install brlapi devel"
3166 brlapi=no
3170 ##########################################
3171 # curses probe
3172 if test "$curses" != "no" ; then
3173 if test "$mingw32" = "yes" ; then
3174 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3175 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3176 else
3177 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3178 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3180 curses_found=no
3181 cat > $TMPC << EOF
3182 #include <locale.h>
3183 #include <curses.h>
3184 #include <wchar.h>
3185 int main(void) {
3186 wchar_t wch = L'w';
3187 setlocale(LC_ALL, "");
3188 resize_term(0, 0);
3189 addwstr(L"wide chars\n");
3190 addnwstr(&wch, 1);
3191 add_wch(WACS_DEGREE);
3192 return 0;
3195 IFS=:
3196 for curses_inc in $curses_inc_list; do
3197 # Make sure we get the wide character prototypes
3198 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3199 IFS=:
3200 for curses_lib in $curses_lib_list; do
3201 unset IFS
3202 if compile_prog "$curses_inc" "$curses_lib" ; then
3203 curses_found=yes
3204 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
3205 libs_softmmu="$curses_lib $libs_softmmu"
3206 break
3208 done
3209 if test "$curses_found" = yes ; then
3210 break
3212 done
3213 unset IFS
3214 if test "$curses_found" = "yes" ; then
3215 curses=yes
3216 else
3217 if test "$curses" = "yes" ; then
3218 feature_not_found "curses" "Install ncurses devel"
3220 curses=no
3224 ##########################################
3225 # curl probe
3226 if test "$curl" != "no" ; then
3227 if $pkg_config libcurl --exists; then
3228 curlconfig="$pkg_config libcurl"
3229 else
3230 curlconfig=curl-config
3232 cat > $TMPC << EOF
3233 #include <curl/curl.h>
3234 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3236 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3237 curl_libs=$($curlconfig --libs 2>/dev/null)
3238 if compile_prog "$curl_cflags" "$curl_libs" ; then
3239 curl=yes
3240 else
3241 if test "$curl" = "yes" ; then
3242 feature_not_found "curl" "Install libcurl devel"
3244 curl=no
3246 fi # test "$curl"
3248 ##########################################
3249 # bluez support probe
3250 if test "$bluez" != "no" ; then
3251 cat > $TMPC << EOF
3252 #include <bluetooth/bluetooth.h>
3253 int main(void) { return bt_error(0); }
3255 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3256 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3257 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3258 bluez=yes
3259 libs_softmmu="$bluez_libs $libs_softmmu"
3260 else
3261 if test "$bluez" = "yes" ; then
3262 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3264 bluez="no"
3268 ##########################################
3269 # glib support probe
3271 if test "$mingw32" = yes; then
3272 glib_req_ver=2.30
3273 else
3274 glib_req_ver=2.22
3276 glib_modules=gthread-2.0
3277 if test "$modules" = yes; then
3278 glib_modules="$glib_modules gmodule-2.0"
3281 # This workaround is required due to a bug in pkg-config file for glib as it
3282 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3284 if test "$static" = yes -a "$mingw32" = yes; then
3285 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3288 for i in $glib_modules; do
3289 if $pkg_config --atleast-version=$glib_req_ver $i; then
3290 glib_cflags=$($pkg_config --cflags $i)
3291 glib_libs=$($pkg_config --libs $i)
3292 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3293 LIBS="$glib_libs $LIBS"
3294 libs_qga="$glib_libs $libs_qga"
3295 else
3296 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3298 done
3300 # Sanity check that the current size_t matches the
3301 # size that glib thinks it should be. This catches
3302 # problems on multi-arch where people try to build
3303 # 32-bit QEMU while pointing at 64-bit glib headers
3304 cat > $TMPC <<EOF
3305 #include <glib.h>
3306 #include <unistd.h>
3308 #define QEMU_BUILD_BUG_ON(x) \
3309 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3311 int main(void) {
3312 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3313 return 0;
3317 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3318 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3319 "You probably need to set PKG_CONFIG_LIBDIR"\
3320 "to point to the right pkg-config files for your"\
3321 "build target"
3324 # g_test_trap_subprocess added in 2.38. Used by some tests.
3325 glib_subprocess=yes
3326 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3327 glib_subprocess=no
3330 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3331 cat > $TMPC << EOF
3332 #include <glib.h>
3333 int main(void) { return 0; }
3335 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3336 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3337 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3338 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3342 ##########################################
3343 # SHA command probe for modules
3344 if test "$modules" = yes; then
3345 shacmd_probe="sha1sum sha1 shasum"
3346 for c in $shacmd_probe; do
3347 if has $c; then
3348 shacmd="$c"
3349 break
3351 done
3352 if test "$shacmd" = ""; then
3353 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3357 ##########################################
3358 # pixman support probe
3360 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3361 pixman_cflags=
3362 pixman_libs=
3363 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3364 pixman_cflags=$($pkg_config --cflags pixman-1)
3365 pixman_libs=$($pkg_config --libs pixman-1)
3366 else
3367 error_exit "pixman >= 0.21.8 not present." \
3368 "Please install the pixman devel package."
3371 ##########################################
3372 # libmpathpersist probe
3374 if test "$mpath" != "no" ; then
3375 cat > $TMPC <<EOF
3376 #include <libudev.h>
3377 #include <mpath_persist.h>
3378 unsigned mpath_mx_alloc_len = 1024;
3379 int logsink;
3380 static struct config *multipath_conf;
3381 extern struct udev *udev;
3382 extern struct config *get_multipath_config(void);
3383 extern void put_multipath_config(struct config *conf);
3384 struct udev *udev;
3385 struct config *get_multipath_config(void) { return multipath_conf; }
3386 void put_multipath_config(struct config *conf) { }
3388 int main(void) {
3389 udev = udev_new();
3390 multipath_conf = mpath_lib_init();
3391 return 0;
3394 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3395 mpathpersist=yes
3396 else
3397 mpathpersist=no
3399 else
3400 mpathpersist=no
3403 ##########################################
3404 # libcap probe
3406 if test "$cap" != "no" ; then
3407 cat > $TMPC <<EOF
3408 #include <stdio.h>
3409 #include <sys/capability.h>
3410 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3412 if compile_prog "" "-lcap" ; then
3413 cap=yes
3414 else
3415 cap=no
3419 ##########################################
3420 # pthread probe
3421 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3423 pthread=no
3424 cat > $TMPC << EOF
3425 #include <pthread.h>
3426 static void *f(void *p) { return NULL; }
3427 int main(void) {
3428 pthread_t thread;
3429 pthread_create(&thread, 0, f, 0);
3430 return 0;
3433 if compile_prog "" "" ; then
3434 pthread=yes
3435 else
3436 for pthread_lib in $PTHREADLIBS_LIST; do
3437 if compile_prog "" "$pthread_lib" ; then
3438 pthread=yes
3439 found=no
3440 for lib_entry in $LIBS; do
3441 if test "$lib_entry" = "$pthread_lib"; then
3442 found=yes
3443 break
3445 done
3446 if test "$found" = "no"; then
3447 LIBS="$pthread_lib $LIBS"
3449 PTHREAD_LIB="$pthread_lib"
3450 break
3452 done
3455 if test "$mingw32" != yes -a "$pthread" = no; then
3456 error_exit "pthread check failed" \
3457 "Make sure to have the pthread libs and headers installed."
3460 # check for pthread_setname_np
3461 pthread_setname_np=no
3462 cat > $TMPC << EOF
3463 #include <pthread.h>
3465 static void *f(void *p) { return NULL; }
3466 int main(void)
3468 pthread_t thread;
3469 pthread_create(&thread, 0, f, 0);
3470 pthread_setname_np(thread, "QEMU");
3471 return 0;
3474 if compile_prog "" "$pthread_lib" ; then
3475 pthread_setname_np=yes
3478 ##########################################
3479 # rbd probe
3480 if test "$rbd" != "no" ; then
3481 cat > $TMPC <<EOF
3482 #include <stdio.h>
3483 #include <rbd/librbd.h>
3484 int main(void) {
3485 rados_t cluster;
3486 rados_create(&cluster, NULL);
3487 return 0;
3490 rbd_libs="-lrbd -lrados"
3491 if compile_prog "" "$rbd_libs" ; then
3492 rbd=yes
3493 else
3494 if test "$rbd" = "yes" ; then
3495 feature_not_found "rados block device" "Install librbd/ceph devel"
3497 rbd=no
3501 ##########################################
3502 # libssh2 probe
3503 min_libssh2_version=1.2.8
3504 if test "$libssh2" != "no" ; then
3505 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3506 libssh2_cflags=$($pkg_config libssh2 --cflags)
3507 libssh2_libs=$($pkg_config libssh2 --libs)
3508 libssh2=yes
3509 else
3510 if test "$libssh2" = "yes" ; then
3511 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3513 libssh2=no
3517 ##########################################
3518 # libssh2_sftp_fsync probe
3520 if test "$libssh2" = "yes"; then
3521 cat > $TMPC <<EOF
3522 #include <stdio.h>
3523 #include <libssh2.h>
3524 #include <libssh2_sftp.h>
3525 int main(void) {
3526 LIBSSH2_SESSION *session;
3527 LIBSSH2_SFTP *sftp;
3528 LIBSSH2_SFTP_HANDLE *sftp_handle;
3529 session = libssh2_session_init ();
3530 sftp = libssh2_sftp_init (session);
3531 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3532 libssh2_sftp_fsync (sftp_handle);
3533 return 0;
3536 # libssh2_cflags/libssh2_libs defined in previous test.
3537 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3538 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3542 ##########################################
3543 # linux-aio probe
3545 if test "$linux_aio" != "no" ; then
3546 cat > $TMPC <<EOF
3547 #include <libaio.h>
3548 #include <sys/eventfd.h>
3549 #include <stddef.h>
3550 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3552 if compile_prog "" "-laio" ; then
3553 linux_aio=yes
3554 else
3555 if test "$linux_aio" = "yes" ; then
3556 feature_not_found "linux AIO" "Install libaio devel"
3558 linux_aio=no
3562 ##########################################
3563 # TPM passthrough is only on x86 Linux
3565 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3566 tpm_passthrough=$tpm
3567 else
3568 tpm_passthrough=no
3571 # TPM emulator is for all posix systems
3572 if test "$mingw32" != "yes"; then
3573 tpm_emulator=$tpm
3574 else
3575 tpm_emulator=no
3577 ##########################################
3578 # attr probe
3580 if test "$attr" != "no" ; then
3581 cat > $TMPC <<EOF
3582 #include <stdio.h>
3583 #include <sys/types.h>
3584 #ifdef CONFIG_LIBATTR
3585 #include <attr/xattr.h>
3586 #else
3587 #include <sys/xattr.h>
3588 #endif
3589 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3591 if compile_prog "" "" ; then
3592 attr=yes
3593 # Older distros have <attr/xattr.h>, and need -lattr:
3594 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3595 attr=yes
3596 LIBS="-lattr $LIBS"
3597 libattr=yes
3598 else
3599 if test "$attr" = "yes" ; then
3600 feature_not_found "ATTR" "Install libc6 or libattr devel"
3602 attr=no
3606 ##########################################
3607 # iovec probe
3608 cat > $TMPC <<EOF
3609 #include <sys/types.h>
3610 #include <sys/uio.h>
3611 #include <unistd.h>
3612 int main(void) { return sizeof(struct iovec); }
3614 iovec=no
3615 if compile_prog "" "" ; then
3616 iovec=yes
3619 ##########################################
3620 # preadv probe
3621 cat > $TMPC <<EOF
3622 #include <sys/types.h>
3623 #include <sys/uio.h>
3624 #include <unistd.h>
3625 int main(void) { return preadv(0, 0, 0, 0); }
3627 preadv=no
3628 if compile_prog "" "" ; then
3629 preadv=yes
3632 ##########################################
3633 # fdt probe
3634 # fdt support is mandatory for at least some target architectures,
3635 # so insist on it if we're building those system emulators.
3636 fdt_required=no
3637 for target in $target_list; do
3638 case $target in
3639 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
3640 fdt_required=yes
3642 esac
3643 done
3645 if test "$fdt_required" = "yes"; then
3646 if test "$fdt" = "no"; then
3647 error_exit "fdt disabled but some requested targets require it." \
3648 "You can turn off fdt only if you also disable all the system emulation" \
3649 "targets which need it (by specifying a cut down --target-list)."
3651 fdt=yes
3654 if test "$fdt" != "no" ; then
3655 fdt_libs="-lfdt"
3656 # explicitly check for libfdt_env.h as it is missing in some stable installs
3657 # and test for required functions to make sure we are on a version >= 1.4.2
3658 cat > $TMPC << EOF
3659 #include <libfdt.h>
3660 #include <libfdt_env.h>
3661 int main(void) { fdt_first_subnode(0, 0); return 0; }
3663 if compile_prog "" "$fdt_libs" ; then
3664 # system DTC is good - use it
3665 fdt=yes
3666 else
3667 # have GIT checkout, so activate dtc submodule
3668 if test -e "${source_path}/.git" ; then
3669 git_submodules="${git_submodules} dtc"
3671 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3672 fdt=yes
3673 dtc_internal="yes"
3674 mkdir -p dtc
3675 if [ "$pwd_is_source_path" != "y" ] ; then
3676 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3677 symlink "$source_path/dtc/scripts" "dtc/scripts"
3679 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3680 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3681 elif test "$fdt" = "yes" ; then
3682 # Not a git build & no libfdt found, prompt for system install
3683 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3684 "Please install the DTC (libfdt) devel package"
3685 else
3686 # don't have and don't want
3687 fdt_libs=
3688 fdt=no
3693 libs_softmmu="$libs_softmmu $fdt_libs"
3695 ##########################################
3696 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3698 if test "$opengl" != "no" ; then
3699 opengl_pkgs="epoxy libdrm gbm"
3700 if $pkg_config $opengl_pkgs x11; then
3701 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3702 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3703 opengl=yes
3704 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3705 gtk_gl="yes"
3707 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
3708 else
3709 if test "$opengl" = "yes" ; then
3710 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3712 opengl_cflags=""
3713 opengl_libs=""
3714 opengl=no
3718 if test "$opengl" = "yes"; then
3719 cat > $TMPC << EOF
3720 #include <epoxy/egl.h>
3721 #ifndef EGL_MESA_image_dma_buf_export
3722 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3723 #endif
3724 int main(void) { return 0; }
3726 if compile_prog "" "" ; then
3727 opengl_dmabuf=yes
3732 ##########################################
3733 # glusterfs probe
3734 if test "$glusterfs" != "no" ; then
3735 if $pkg_config --atleast-version=3 glusterfs-api; then
3736 glusterfs="yes"
3737 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3738 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3739 if $pkg_config --atleast-version=4 glusterfs-api; then
3740 glusterfs_xlator_opt="yes"
3742 if $pkg_config --atleast-version=5 glusterfs-api; then
3743 glusterfs_discard="yes"
3745 if $pkg_config --atleast-version=6 glusterfs-api; then
3746 glusterfs_fallocate="yes"
3747 glusterfs_zerofill="yes"
3749 else
3750 if test "$glusterfs" = "yes" ; then
3751 feature_not_found "GlusterFS backend support" \
3752 "Install glusterfs-api devel >= 3"
3754 glusterfs="no"
3758 # Check for inotify functions when we are building linux-user
3759 # emulator. This is done because older glibc versions don't
3760 # have syscall stubs for these implemented. In that case we
3761 # don't provide them even if kernel supports them.
3763 inotify=no
3764 cat > $TMPC << EOF
3765 #include <sys/inotify.h>
3768 main(void)
3770 /* try to start inotify */
3771 return inotify_init();
3774 if compile_prog "" "" ; then
3775 inotify=yes
3778 inotify1=no
3779 cat > $TMPC << EOF
3780 #include <sys/inotify.h>
3783 main(void)
3785 /* try to start inotify */
3786 return inotify_init1(0);
3789 if compile_prog "" "" ; then
3790 inotify1=yes
3793 # check if pipe2 is there
3794 pipe2=no
3795 cat > $TMPC << EOF
3796 #include <unistd.h>
3797 #include <fcntl.h>
3799 int main(void)
3801 int pipefd[2];
3802 return pipe2(pipefd, O_CLOEXEC);
3805 if compile_prog "" "" ; then
3806 pipe2=yes
3809 # check if accept4 is there
3810 accept4=no
3811 cat > $TMPC << EOF
3812 #include <sys/socket.h>
3813 #include <stddef.h>
3815 int main(void)
3817 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3818 return 0;
3821 if compile_prog "" "" ; then
3822 accept4=yes
3825 # check if tee/splice is there. vmsplice was added same time.
3826 splice=no
3827 cat > $TMPC << EOF
3828 #include <unistd.h>
3829 #include <fcntl.h>
3830 #include <limits.h>
3832 int main(void)
3834 int len, fd = 0;
3835 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3836 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3837 return 0;
3840 if compile_prog "" "" ; then
3841 splice=yes
3844 ##########################################
3845 # libnuma probe
3847 if test "$numa" != "no" ; then
3848 cat > $TMPC << EOF
3849 #include <numa.h>
3850 int main(void) { return numa_available(); }
3853 if compile_prog "" "-lnuma" ; then
3854 numa=yes
3855 libs_softmmu="-lnuma $libs_softmmu"
3856 else
3857 if test "$numa" = "yes" ; then
3858 feature_not_found "numa" "install numactl devel"
3860 numa=no
3864 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3865 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3866 exit 1
3869 # Even if malloc_trim() is available, these non-libc memory allocators
3870 # do not support it.
3871 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
3872 if test "$malloc_trim" = "yes" ; then
3873 echo "Disabling malloc_trim with non-libc memory allocator"
3875 malloc_trim="no"
3878 #######################################
3879 # malloc_trim
3881 if test "$malloc_trim" != "no" ; then
3882 cat > $TMPC << EOF
3883 #include <malloc.h>
3884 int main(void) { malloc_trim(0); return 0; }
3886 if compile_prog "" "" ; then
3887 malloc_trim="yes"
3888 else
3889 malloc_trim="no"
3893 ##########################################
3894 # tcmalloc probe
3896 if test "$tcmalloc" = "yes" ; then
3897 cat > $TMPC << EOF
3898 #include <stdlib.h>
3899 int main(void) { malloc(1); return 0; }
3902 if compile_prog "" "-ltcmalloc" ; then
3903 LIBS="-ltcmalloc $LIBS"
3904 else
3905 feature_not_found "tcmalloc" "install gperftools devel"
3909 ##########################################
3910 # jemalloc probe
3912 if test "$jemalloc" = "yes" ; then
3913 cat > $TMPC << EOF
3914 #include <stdlib.h>
3915 int main(void) { malloc(1); return 0; }
3918 if compile_prog "" "-ljemalloc" ; then
3919 LIBS="-ljemalloc $LIBS"
3920 else
3921 feature_not_found "jemalloc" "install jemalloc devel"
3925 ##########################################
3926 # signalfd probe
3927 signalfd="no"
3928 cat > $TMPC << EOF
3929 #include <unistd.h>
3930 #include <sys/syscall.h>
3931 #include <signal.h>
3932 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3935 if compile_prog "" "" ; then
3936 signalfd=yes
3939 # check if eventfd is supported
3940 eventfd=no
3941 cat > $TMPC << EOF
3942 #include <sys/eventfd.h>
3944 int main(void)
3946 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3949 if compile_prog "" "" ; then
3950 eventfd=yes
3953 # check if memfd is supported
3954 memfd=no
3955 cat > $TMPC << EOF
3956 #include <sys/mman.h>
3958 int main(void)
3960 return memfd_create("foo", MFD_ALLOW_SEALING);
3963 if compile_prog "" "" ; then
3964 memfd=yes
3969 # check for fallocate
3970 fallocate=no
3971 cat > $TMPC << EOF
3972 #include <fcntl.h>
3974 int main(void)
3976 fallocate(0, 0, 0, 0);
3977 return 0;
3980 if compile_prog "" "" ; then
3981 fallocate=yes
3984 # check for fallocate hole punching
3985 fallocate_punch_hole=no
3986 cat > $TMPC << EOF
3987 #include <fcntl.h>
3988 #include <linux/falloc.h>
3990 int main(void)
3992 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3993 return 0;
3996 if compile_prog "" "" ; then
3997 fallocate_punch_hole=yes
4000 # check that fallocate supports range zeroing inside the file
4001 fallocate_zero_range=no
4002 cat > $TMPC << EOF
4003 #include <fcntl.h>
4004 #include <linux/falloc.h>
4006 int main(void)
4008 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4009 return 0;
4012 if compile_prog "" "" ; then
4013 fallocate_zero_range=yes
4016 # check for posix_fallocate
4017 posix_fallocate=no
4018 cat > $TMPC << EOF
4019 #include <fcntl.h>
4021 int main(void)
4023 posix_fallocate(0, 0, 0);
4024 return 0;
4027 if compile_prog "" "" ; then
4028 posix_fallocate=yes
4031 # check for sync_file_range
4032 sync_file_range=no
4033 cat > $TMPC << EOF
4034 #include <fcntl.h>
4036 int main(void)
4038 sync_file_range(0, 0, 0, 0);
4039 return 0;
4042 if compile_prog "" "" ; then
4043 sync_file_range=yes
4046 # check for linux/fiemap.h and FS_IOC_FIEMAP
4047 fiemap=no
4048 cat > $TMPC << EOF
4049 #include <sys/ioctl.h>
4050 #include <linux/fs.h>
4051 #include <linux/fiemap.h>
4053 int main(void)
4055 ioctl(0, FS_IOC_FIEMAP, 0);
4056 return 0;
4059 if compile_prog "" "" ; then
4060 fiemap=yes
4063 # check for dup3
4064 dup3=no
4065 cat > $TMPC << EOF
4066 #include <unistd.h>
4068 int main(void)
4070 dup3(0, 0, 0);
4071 return 0;
4074 if compile_prog "" "" ; then
4075 dup3=yes
4078 # check for ppoll support
4079 ppoll=no
4080 cat > $TMPC << EOF
4081 #include <poll.h>
4083 int main(void)
4085 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4086 ppoll(&pfd, 1, 0, 0);
4087 return 0;
4090 if compile_prog "" "" ; then
4091 ppoll=yes
4094 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4095 prctl_pr_set_timerslack=no
4096 cat > $TMPC << EOF
4097 #include <sys/prctl.h>
4099 int main(void)
4101 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4102 return 0;
4105 if compile_prog "" "" ; then
4106 prctl_pr_set_timerslack=yes
4109 # check for epoll support
4110 epoll=no
4111 cat > $TMPC << EOF
4112 #include <sys/epoll.h>
4114 int main(void)
4116 epoll_create(0);
4117 return 0;
4120 if compile_prog "" "" ; then
4121 epoll=yes
4124 # epoll_create1 is a later addition
4125 # so we must check separately for its presence
4126 epoll_create1=no
4127 cat > $TMPC << EOF
4128 #include <sys/epoll.h>
4130 int main(void)
4132 /* Note that we use epoll_create1 as a value, not as
4133 * a function being called. This is necessary so that on
4134 * old SPARC glibc versions where the function was present in
4135 * the library but not declared in the header file we will
4136 * fail the configure check. (Otherwise we will get a compiler
4137 * warning but not an error, and will proceed to fail the
4138 * qemu compile where we compile with -Werror.)
4140 return (int)(uintptr_t)&epoll_create1;
4143 if compile_prog "" "" ; then
4144 epoll_create1=yes
4147 # check for sendfile support
4148 sendfile=no
4149 cat > $TMPC << EOF
4150 #include <sys/sendfile.h>
4152 int main(void)
4154 return sendfile(0, 0, 0, 0);
4157 if compile_prog "" "" ; then
4158 sendfile=yes
4161 # check for timerfd support (glibc 2.8 and newer)
4162 timerfd=no
4163 cat > $TMPC << EOF
4164 #include <sys/timerfd.h>
4166 int main(void)
4168 return(timerfd_create(CLOCK_REALTIME, 0));
4171 if compile_prog "" "" ; then
4172 timerfd=yes
4175 # check for setns and unshare support
4176 setns=no
4177 cat > $TMPC << EOF
4178 #include <sched.h>
4180 int main(void)
4182 int ret;
4183 ret = setns(0, 0);
4184 ret = unshare(0);
4185 return ret;
4188 if compile_prog "" "" ; then
4189 setns=yes
4192 # clock_adjtime probe
4193 clock_adjtime=no
4194 cat > $TMPC <<EOF
4195 #include <time.h>
4197 int main(void)
4199 return clock_adjtime(0, 0);
4202 clock_adjtime=no
4203 if compile_prog "" "" ; then
4204 clock_adjtime=yes
4207 # syncfs probe
4208 syncfs=no
4209 cat > $TMPC <<EOF
4210 #include <unistd.h>
4212 int main(void)
4214 return syncfs(0);
4217 syncfs=no
4218 if compile_prog "" "" ; then
4219 syncfs=yes
4222 # Check if tools are available to build documentation.
4223 if test "$docs" != "no" ; then
4224 if has makeinfo && has pod2man; then
4225 docs=yes
4226 else
4227 if test "$docs" = "yes" ; then
4228 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4230 docs=no
4234 # Search for bswap_32 function
4235 byteswap_h=no
4236 cat > $TMPC << EOF
4237 #include <byteswap.h>
4238 int main(void) { return bswap_32(0); }
4240 if compile_prog "" "" ; then
4241 byteswap_h=yes
4244 # Search for bswap32 function
4245 bswap_h=no
4246 cat > $TMPC << EOF
4247 #include <sys/endian.h>
4248 #include <sys/types.h>
4249 #include <machine/bswap.h>
4250 int main(void) { return bswap32(0); }
4252 if compile_prog "" "" ; then
4253 bswap_h=yes
4256 ##########################################
4257 # Do we have libiscsi >= 1.9.0
4258 if test "$libiscsi" != "no" ; then
4259 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4260 libiscsi="yes"
4261 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4262 libiscsi_libs=$($pkg_config --libs libiscsi)
4263 else
4264 if test "$libiscsi" = "yes" ; then
4265 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4267 libiscsi="no"
4271 ##########################################
4272 # Do we need libm
4273 cat > $TMPC << EOF
4274 #include <math.h>
4275 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4277 if compile_prog "" "" ; then
4279 elif compile_prog "" "-lm" ; then
4280 LIBS="-lm $LIBS"
4281 libs_qga="-lm $libs_qga"
4282 else
4283 error_exit "libm check failed"
4286 ##########################################
4287 # Do we need librt
4288 # uClibc provides 2 versions of clock_gettime(), one with realtime
4289 # support and one without. This means that the clock_gettime() don't
4290 # need -lrt. We still need it for timer_create() so we check for this
4291 # function in addition.
4292 cat > $TMPC <<EOF
4293 #include <signal.h>
4294 #include <time.h>
4295 int main(void) {
4296 timer_create(CLOCK_REALTIME, NULL, NULL);
4297 return clock_gettime(CLOCK_REALTIME, NULL);
4301 if compile_prog "" "" ; then
4303 # we need pthread for static linking. use previous pthread test result
4304 elif compile_prog "" "$pthread_lib -lrt" ; then
4305 LIBS="$LIBS -lrt"
4306 libs_qga="$libs_qga -lrt"
4309 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4310 "$haiku" != "yes" ; then
4311 libs_softmmu="-lutil $libs_softmmu"
4314 ##########################################
4315 # spice probe
4316 if test "$spice" != "no" ; then
4317 cat > $TMPC << EOF
4318 #include <spice.h>
4319 int main(void) { spice_server_new(); return 0; }
4321 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4322 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4323 if $pkg_config --atleast-version=0.12.0 spice-server && \
4324 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4325 compile_prog "$spice_cflags" "$spice_libs" ; then
4326 spice="yes"
4327 libs_softmmu="$libs_softmmu $spice_libs"
4328 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4329 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4330 spice_server_version=$($pkg_config --modversion spice-server)
4331 else
4332 if test "$spice" = "yes" ; then
4333 feature_not_found "spice" \
4334 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4336 spice="no"
4340 # check for smartcard support
4341 if test "$smartcard" != "no"; then
4342 if $pkg_config libcacard; then
4343 libcacard_cflags=$($pkg_config --cflags libcacard)
4344 libcacard_libs=$($pkg_config --libs libcacard)
4345 smartcard="yes"
4346 else
4347 if test "$smartcard" = "yes"; then
4348 feature_not_found "smartcard" "Install libcacard devel"
4350 smartcard="no"
4354 # check for libusb
4355 if test "$libusb" != "no" ; then
4356 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4357 libusb="yes"
4358 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4359 libusb_libs=$($pkg_config --libs libusb-1.0)
4360 else
4361 if test "$libusb" = "yes"; then
4362 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4364 libusb="no"
4368 # check for usbredirparser for usb network redirection support
4369 if test "$usb_redir" != "no" ; then
4370 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4371 usb_redir="yes"
4372 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4373 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4374 else
4375 if test "$usb_redir" = "yes"; then
4376 feature_not_found "usb-redir" "Install usbredir devel"
4378 usb_redir="no"
4382 ##########################################
4383 # check if we have VSS SDK headers for win
4385 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4386 case "$vss_win32_sdk" in
4387 "") vss_win32_include="-isystem $source_path" ;;
4388 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4389 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4390 vss_win32_include="-isystem $source_path/.sdk/vss"
4391 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4393 *) vss_win32_include="-isystem $vss_win32_sdk"
4394 esac
4395 cat > $TMPC << EOF
4396 #define __MIDL_user_allocate_free_DEFINED__
4397 #include <inc/win2003/vss.h>
4398 int main(void) { return VSS_CTX_BACKUP; }
4400 if compile_prog "$vss_win32_include" "" ; then
4401 guest_agent_with_vss="yes"
4402 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4403 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4404 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4405 else
4406 if test "$vss_win32_sdk" != "" ; then
4407 echo "ERROR: Please download and install Microsoft VSS SDK:"
4408 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4409 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4410 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4411 echo "ERROR: The headers are extracted in the directory \`inc'."
4412 feature_not_found "VSS support"
4414 guest_agent_with_vss="no"
4418 ##########################################
4419 # lookup Windows platform SDK (if not specified)
4420 # The SDK is needed only to build .tlb (type library) file of guest agent
4421 # VSS provider from the source. It is usually unnecessary because the
4422 # pre-compiled .tlb file is included.
4424 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4425 if test -z "$win_sdk"; then
4426 programfiles="$PROGRAMFILES"
4427 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4428 if test -n "$programfiles"; then
4429 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4430 else
4431 feature_not_found "Windows SDK"
4433 elif test "$win_sdk" = "no"; then
4434 win_sdk=""
4438 ##########################################
4439 # check if mingw environment provides a recent ntddscsi.h
4440 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4441 cat > $TMPC << EOF
4442 #include <windows.h>
4443 #include <ntddscsi.h>
4444 int main(void) {
4445 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4446 #error Missing required ioctl definitions
4447 #endif
4448 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4449 return addr.Lun;
4452 if compile_prog "" "" ; then
4453 guest_agent_ntddscsi=yes
4454 libs_qga="-lsetupapi $libs_qga"
4458 ##########################################
4459 # virgl renderer probe
4461 if test "$virglrenderer" != "no" ; then
4462 cat > $TMPC << EOF
4463 #include <virglrenderer.h>
4464 int main(void) { virgl_renderer_poll(); return 0; }
4466 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4467 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4468 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4469 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4470 virglrenderer="yes"
4471 else
4472 if test "$virglrenderer" = "yes" ; then
4473 feature_not_found "virglrenderer"
4475 virglrenderer="no"
4479 ##########################################
4480 # capstone
4482 case "$capstone" in
4483 "" | yes)
4484 if $pkg_config capstone; then
4485 capstone=system
4486 elif test -e "${source_path}/.git" ; then
4487 capstone=git
4488 elif test -e "${source_path}/capstone/Makefile" ; then
4489 capstone=internal
4490 elif test -z "$capstone" ; then
4491 capstone=no
4492 else
4493 feature_not_found "capstone" "Install capstone devel or git submodule"
4497 system)
4498 if ! $pkg_config capstone; then
4499 feature_not_found "capstone" "Install capstone devel"
4502 esac
4504 case "$capstone" in
4505 git | internal)
4506 if test "$capstone" = git; then
4507 git_submodules="${git_submodules} capstone"
4509 mkdir -p capstone
4510 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4511 if test "$mingw32" = "yes"; then
4512 LIBCAPSTONE=capstone.lib
4513 else
4514 LIBCAPSTONE=libcapstone.a
4516 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4519 system)
4520 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4521 LIBS="$($pkg_config --libs capstone) $LIBS"
4527 error_exit "Unknown state for capstone: $capstone"
4529 esac
4531 ##########################################
4532 # check if we have fdatasync
4534 fdatasync=no
4535 cat > $TMPC << EOF
4536 #include <unistd.h>
4537 int main(void) {
4538 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4539 return fdatasync(0);
4540 #else
4541 #error Not supported
4542 #endif
4545 if compile_prog "" "" ; then
4546 fdatasync=yes
4549 ##########################################
4550 # check if we have madvise
4552 madvise=no
4553 cat > $TMPC << EOF
4554 #include <sys/types.h>
4555 #include <sys/mman.h>
4556 #include <stddef.h>
4557 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4559 if compile_prog "" "" ; then
4560 madvise=yes
4563 ##########################################
4564 # check if we have posix_madvise
4566 posix_madvise=no
4567 cat > $TMPC << EOF
4568 #include <sys/mman.h>
4569 #include <stddef.h>
4570 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4572 if compile_prog "" "" ; then
4573 posix_madvise=yes
4576 ##########################################
4577 # check if we have posix_syslog
4579 posix_syslog=no
4580 cat > $TMPC << EOF
4581 #include <syslog.h>
4582 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4584 if compile_prog "" "" ; then
4585 posix_syslog=yes
4588 ##########################################
4589 # check if we have sem_timedwait
4591 sem_timedwait=no
4592 cat > $TMPC << EOF
4593 #include <semaphore.h>
4594 int main(void) { return sem_timedwait(0, 0); }
4596 if compile_prog "" "" ; then
4597 sem_timedwait=yes
4600 ##########################################
4601 # check if trace backend exists
4603 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4604 if test "$?" -ne 0 ; then
4605 error_exit "invalid trace backends" \
4606 "Please choose supported trace backends."
4609 ##########################################
4610 # For 'ust' backend, test if ust headers are present
4611 if have_backend "ust"; then
4612 cat > $TMPC << EOF
4613 #include <lttng/tracepoint.h>
4614 int main(void) { return 0; }
4616 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4617 if $pkg_config lttng-ust --exists; then
4618 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4619 else
4620 lttng_ust_libs="-llttng-ust -ldl"
4622 if $pkg_config liburcu-bp --exists; then
4623 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4624 else
4625 urcu_bp_libs="-lurcu-bp"
4628 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4629 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4630 else
4631 error_exit "Trace backend 'ust' missing lttng-ust header files"
4635 ##########################################
4636 # For 'dtrace' backend, test if 'dtrace' command is present
4637 if have_backend "dtrace"; then
4638 if ! has 'dtrace' ; then
4639 error_exit "dtrace command is not found in PATH $PATH"
4641 trace_backend_stap="no"
4642 if has 'stap' ; then
4643 trace_backend_stap="yes"
4647 ##########################################
4648 # check and set a backend for coroutine
4650 # We prefer ucontext, but it's not always possible. The fallback
4651 # is sigcontext. On Windows the only valid backend is the Windows
4652 # specific one.
4654 ucontext_works=no
4655 if test "$darwin" != "yes"; then
4656 cat > $TMPC << EOF
4657 #include <ucontext.h>
4658 #ifdef __stub_makecontext
4659 #error Ignoring glibc stub makecontext which will always fail
4660 #endif
4661 int main(void) { makecontext(0, 0, 0); return 0; }
4663 if compile_prog "" "" ; then
4664 ucontext_works=yes
4668 if test "$coroutine" = ""; then
4669 if test "$mingw32" = "yes"; then
4670 coroutine=win32
4671 elif test "$ucontext_works" = "yes"; then
4672 coroutine=ucontext
4673 else
4674 coroutine=sigaltstack
4676 else
4677 case $coroutine in
4678 windows)
4679 if test "$mingw32" != "yes"; then
4680 error_exit "'windows' coroutine backend only valid for Windows"
4682 # Unfortunately the user visible backend name doesn't match the
4683 # coroutine-*.c filename for this case, so we have to adjust it here.
4684 coroutine=win32
4686 ucontext)
4687 if test "$ucontext_works" != "yes"; then
4688 feature_not_found "ucontext"
4691 sigaltstack)
4692 if test "$mingw32" = "yes"; then
4693 error_exit "only the 'windows' coroutine backend is valid for Windows"
4697 error_exit "unknown coroutine backend $coroutine"
4699 esac
4702 if test "$coroutine_pool" = ""; then
4703 coroutine_pool=yes
4706 if test "$debug_stack_usage" = "yes"; then
4707 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4708 error_exit "stack usage debugging is not supported for $cpu"
4710 if test "$coroutine_pool" = "yes"; then
4711 echo "WARN: disabling coroutine pool for stack usage debugging"
4712 coroutine_pool=no
4717 ##########################################
4718 # check if we have open_by_handle_at
4720 open_by_handle_at=no
4721 cat > $TMPC << EOF
4722 #include <fcntl.h>
4723 #if !defined(AT_EMPTY_PATH)
4724 # error missing definition
4725 #else
4726 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4727 #endif
4729 if compile_prog "" "" ; then
4730 open_by_handle_at=yes
4733 ########################################
4734 # check if we have linux/magic.h
4736 linux_magic_h=no
4737 cat > $TMPC << EOF
4738 #include <linux/magic.h>
4739 int main(void) {
4740 return 0;
4743 if compile_prog "" "" ; then
4744 linux_magic_h=yes
4747 ########################################
4748 # check whether we can disable warning option with a pragma (this is needed
4749 # to silence warnings in the headers of some versions of external libraries).
4750 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4751 # only a warning.
4753 # If we can't selectively disable warning in the code, disable -Werror so that
4754 # the build doesn't fail anyway.
4756 pragma_disable_unused_but_set=no
4757 cat > $TMPC << EOF
4758 #pragma GCC diagnostic push
4759 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4760 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4761 #pragma GCC diagnostic pop
4763 int main(void) {
4764 return 0;
4767 if compile_prog "-Werror" "" ; then
4768 pragma_diagnostic_available=yes
4769 else
4770 werror=no
4773 ########################################
4774 # check if we have valgrind/valgrind.h
4776 valgrind_h=no
4777 cat > $TMPC << EOF
4778 #include <valgrind/valgrind.h>
4779 int main(void) {
4780 return 0;
4783 if compile_prog "" "" ; then
4784 valgrind_h=yes
4787 ########################################
4788 # check if environ is declared
4790 has_environ=no
4791 cat > $TMPC << EOF
4792 #include <unistd.h>
4793 int main(void) {
4794 environ = 0;
4795 return 0;
4798 if compile_prog "" "" ; then
4799 has_environ=yes
4802 ########################################
4803 # check if cpuid.h is usable.
4805 cat > $TMPC << EOF
4806 #include <cpuid.h>
4807 int main(void) {
4808 unsigned a, b, c, d;
4809 int max = __get_cpuid_max(0, 0);
4811 if (max >= 1) {
4812 __cpuid(1, a, b, c, d);
4815 if (max >= 7) {
4816 __cpuid_count(7, 0, a, b, c, d);
4819 return 0;
4822 if compile_prog "" "" ; then
4823 cpuid_h=yes
4826 ##########################################
4827 # avx2 optimization requirement check
4829 # There is no point enabling this if cpuid.h is not usable,
4830 # since we won't be able to select the new routines.
4832 if test $cpuid_h = yes; then
4833 cat > $TMPC << EOF
4834 #pragma GCC push_options
4835 #pragma GCC target("avx2")
4836 #include <cpuid.h>
4837 #include <immintrin.h>
4838 static int bar(void *a) {
4839 __m256i x = *(__m256i *)a;
4840 return _mm256_testz_si256(x, x);
4842 int main(int argc, char *argv[]) { return bar(argv[0]); }
4844 if compile_object "" ; then
4845 avx2_opt="yes"
4849 ########################################
4850 # check if __[u]int128_t is usable.
4852 int128=no
4853 cat > $TMPC << EOF
4854 #if defined(__clang_major__) && defined(__clang_minor__)
4855 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4856 # error __int128_t does not work in CLANG before 3.2
4857 # endif
4858 #endif
4859 __int128_t a;
4860 __uint128_t b;
4861 int main (void) {
4862 a = a + b;
4863 b = a * b;
4864 a = a * a;
4865 return 0;
4868 if compile_prog "" "" ; then
4869 int128=yes
4872 #########################################
4873 # See if 128-bit atomic operations are supported.
4875 atomic128=no
4876 if test "$int128" = "yes"; then
4877 cat > $TMPC << EOF
4878 int main(void)
4880 unsigned __int128 x = 0, y = 0;
4881 y = __atomic_load_16(&x, 0);
4882 __atomic_store_16(&x, y, 0);
4883 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4884 return 0;
4887 if compile_prog "" "" ; then
4888 atomic128=yes
4892 #########################################
4893 # See if 64-bit atomic operations are supported.
4894 # Note that without __atomic builtins, we can only
4895 # assume atomic loads/stores max at pointer size.
4897 cat > $TMPC << EOF
4898 #include <stdint.h>
4899 int main(void)
4901 uint64_t x = 0, y = 0;
4902 #ifdef __ATOMIC_RELAXED
4903 y = __atomic_load_8(&x, 0);
4904 __atomic_store_8(&x, y, 0);
4905 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4906 __atomic_exchange_8(&x, y, 0);
4907 __atomic_fetch_add_8(&x, y, 0);
4908 #else
4909 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4910 __sync_lock_test_and_set(&x, y);
4911 __sync_val_compare_and_swap(&x, y, 0);
4912 __sync_fetch_and_add(&x, y);
4913 #endif
4914 return 0;
4917 if compile_prog "" "" ; then
4918 atomic64=yes
4921 ########################################
4922 # check if getauxval is available.
4924 getauxval=no
4925 cat > $TMPC << EOF
4926 #include <sys/auxv.h>
4927 int main(void) {
4928 return getauxval(AT_HWCAP) == 0;
4931 if compile_prog "" "" ; then
4932 getauxval=yes
4935 ########################################
4936 # check if ccache is interfering with
4937 # semantic analysis of macros
4939 unset CCACHE_CPP2
4940 ccache_cpp2=no
4941 cat > $TMPC << EOF
4942 static const int Z = 1;
4943 #define fn() ({ Z; })
4944 #define TAUT(X) ((X) == Z)
4945 #define PAREN(X, Y) (X == Y)
4946 #define ID(X) (X)
4947 int main(int argc, char *argv[])
4949 int x = 0, y = 0;
4950 x = ID(x);
4951 x = fn();
4952 fn();
4953 if (PAREN(x, y)) return 0;
4954 if (TAUT(Z)) return 0;
4955 return 0;
4959 if ! compile_object "-Werror"; then
4960 ccache_cpp2=yes
4963 #################################################
4964 # clang does not support glibc + FORTIFY_SOURCE.
4966 if test "$fortify_source" != "no"; then
4967 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4968 fortify_source="no";
4969 elif test -n "$cxx" && has $cxx &&
4970 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4971 fortify_source="no";
4972 else
4973 fortify_source="yes"
4977 ##########################################
4978 # check if struct fsxattr is available via linux/fs.h
4980 have_fsxattr=no
4981 cat > $TMPC << EOF
4982 #include <linux/fs.h>
4983 struct fsxattr foo;
4984 int main(void) {
4985 return 0;
4988 if compile_prog "" "" ; then
4989 have_fsxattr=yes
4992 ##########################################
4993 # check if rtnetlink.h exists and is useful
4994 have_rtnetlink=no
4995 cat > $TMPC << EOF
4996 #include <linux/rtnetlink.h>
4997 int main(void) {
4998 return IFLA_PROTO_DOWN;
5001 if compile_prog "" "" ; then
5002 have_rtnetlink=yes
5005 ##########################################
5006 # check for usable AF_VSOCK environment
5007 have_af_vsock=no
5008 cat > $TMPC << EOF
5009 #include <errno.h>
5010 #include <sys/types.h>
5011 #include <sys/socket.h>
5012 #if !defined(AF_VSOCK)
5013 # error missing AF_VSOCK flag
5014 #endif
5015 #include <linux/vm_sockets.h>
5016 int main(void) {
5017 int sock, ret;
5018 struct sockaddr_vm svm;
5019 socklen_t len = sizeof(svm);
5020 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5021 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5022 if ((ret == -1) && (errno == ENOTCONN)) {
5023 return 0;
5025 return -1;
5028 if compile_prog "" "" ; then
5029 have_af_vsock=yes
5032 ##########################################
5033 # check for usable AF_ALG environment
5034 hava_afalg=no
5035 cat > $TMPC << EOF
5036 #include <errno.h>
5037 #include <sys/types.h>
5038 #include <sys/socket.h>
5039 #include <linux/if_alg.h>
5040 int main(void) {
5041 int sock;
5042 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5043 return sock;
5046 if compile_prog "" "" ; then
5047 have_afalg=yes
5049 if test "$crypto_afalg" = "yes"
5050 then
5051 if test "$have_afalg" != "yes"
5052 then
5053 error_exit "AF_ALG requested but could not be detected"
5058 #################################################
5059 # Sparc implicitly links with --relax, which is
5060 # incompatible with -r, so --no-relax should be
5061 # given. It does no harm to give it on other
5062 # platforms too.
5064 # Note: the prototype is needed since QEMU_CFLAGS
5065 # contains -Wmissing-prototypes
5066 cat > $TMPC << EOF
5067 extern int foo(void);
5068 int foo(void) { return 0; }
5070 if ! compile_object ""; then
5071 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5073 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5074 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5075 LD_REL_FLAGS=$i
5076 break
5078 done
5079 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5080 feature_not_found "modules" "Cannot find how to build relocatable objects"
5083 ##########################################
5084 # check for sysmacros.h
5086 have_sysmacros=no
5087 cat > $TMPC << EOF
5088 #include <sys/sysmacros.h>
5089 int main(void) {
5090 return makedev(0, 0);
5093 if compile_prog "" "" ; then
5094 have_sysmacros=yes
5097 ##########################################
5098 # Veritas HyperScale block driver VxHS
5099 # Check if libvxhs is installed
5101 if test "$vxhs" != "no" ; then
5102 cat > $TMPC <<EOF
5103 #include <stdint.h>
5104 #include <qnio/qnio_api.h>
5106 void *vxhs_callback;
5108 int main(void) {
5109 iio_init(QNIO_VERSION, vxhs_callback);
5110 return 0;
5113 vxhs_libs="-lvxhs -lssl"
5114 if compile_prog "" "$vxhs_libs" ; then
5115 vxhs=yes
5116 else
5117 if test "$vxhs" = "yes" ; then
5118 feature_not_found "vxhs block device" "Install libvxhs See github"
5120 vxhs=no
5124 ##########################################
5125 # check for _Static_assert()
5127 have_static_assert=no
5128 cat > $TMPC << EOF
5129 _Static_assert(1, "success");
5130 int main(void) {
5131 return 0;
5134 if compile_prog "" "" ; then
5135 have_static_assert=yes
5138 ##########################################
5139 # check for utmpx.h, it is missing e.g. on OpenBSD
5141 have_utmpx=no
5142 cat > $TMPC << EOF
5143 #include <utmpx.h>
5144 struct utmpx user_info;
5145 int main(void) {
5146 return 0;
5149 if compile_prog "" "" ; then
5150 have_utmpx=yes
5153 ##########################################
5154 # End of CC checks
5155 # After here, no more $cc or $ld runs
5157 if test "$gcov" = "yes" ; then
5158 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5159 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5160 elif test "$fortify_source" = "yes" ; then
5161 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5162 elif test "$debug" = "no"; then
5163 CFLAGS="-O2 $CFLAGS"
5166 ##########################################
5167 # Do we have libnfs
5168 if test "$libnfs" != "no" ; then
5169 if $pkg_config --atleast-version=1.9.3 libnfs; then
5170 libnfs="yes"
5171 libnfs_libs=$($pkg_config --libs libnfs)
5172 else
5173 if test "$libnfs" = "yes" ; then
5174 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5176 libnfs="no"
5180 # Now we've finished running tests it's OK to add -Werror to the compiler flags
5181 if test "$werror" = "yes"; then
5182 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5185 if test "$solaris" = "no" ; then
5186 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5187 LDFLAGS="-Wl,--warn-common $LDFLAGS"
5191 # test if pod2man has --utf8 option
5192 if pod2man --help | grep -q utf8; then
5193 POD2MAN="pod2man --utf8"
5194 else
5195 POD2MAN="pod2man"
5198 # Use ASLR, no-SEH and DEP if available
5199 if test "$mingw32" = "yes" ; then
5200 for flag in --dynamicbase --no-seh --nxcompat; do
5201 if ld_has $flag ; then
5202 LDFLAGS="-Wl,$flag $LDFLAGS"
5204 done
5207 qemu_confdir=$sysconfdir$confsuffix
5208 qemu_moddir=$libdir$confsuffix
5209 qemu_datadir=$datadir$confsuffix
5210 qemu_localedir="$datadir/locale"
5212 # We can only support ivshmem if we have eventfd
5213 if [ "$eventfd" = "yes" ]; then
5214 ivshmem=yes
5217 tools=""
5218 if test "$want_tools" = "yes" ; then
5219 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
5220 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5221 tools="qemu-nbd\$(EXESUF) $tools"
5223 if [ "$ivshmem" = "yes" ]; then
5224 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5227 if test "$softmmu" = yes ; then
5228 if test "$linux" = yes; then
5229 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5230 virtfs=yes
5231 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5232 else
5233 if test "$virtfs" = yes; then
5234 error_exit "VirtFS requires libcap devel and libattr devel"
5236 virtfs=no
5238 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5239 mpath=yes
5240 else
5241 if test "$mpath" = yes; then
5242 error_exit "Multipath requires libmpathpersist devel"
5244 mpath=no
5246 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5247 else
5248 if test "$virtfs" = yes; then
5249 error_exit "VirtFS is supported only on Linux"
5251 virtfs=no
5252 if test "$mpath" = yes; then
5253 error_exit "Multipath is supported only on Linux"
5255 mpath=no
5257 if test "$xkbcommon" = "yes"; then
5258 tools="qemu-keymap\$(EXESUF) $tools"
5262 # Probe for guest agent support/options
5264 if [ "$guest_agent" != "no" ]; then
5265 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5266 tools="qemu-ga $tools"
5267 guest_agent=yes
5268 elif [ "$guest_agent" != yes ]; then
5269 guest_agent=no
5270 else
5271 error_exit "Guest agent is not supported on this platform"
5275 # Guest agent Window MSI package
5277 if test "$guest_agent" != yes; then
5278 if test "$guest_agent_msi" = yes; then
5279 error_exit "MSI guest agent package requires guest agent enabled"
5281 guest_agent_msi=no
5282 elif test "$mingw32" != "yes"; then
5283 if test "$guest_agent_msi" = "yes"; then
5284 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5286 guest_agent_msi=no
5287 elif ! has wixl; then
5288 if test "$guest_agent_msi" = "yes"; then
5289 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5291 guest_agent_msi=no
5292 else
5293 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5294 # disabled explicitly
5295 if test "$guest_agent_msi" != "no"; then
5296 guest_agent_msi=yes
5300 if test "$guest_agent_msi" = "yes"; then
5301 if test "$guest_agent_with_vss" = "yes"; then
5302 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5305 if test "$QEMU_GA_MANUFACTURER" = ""; then
5306 QEMU_GA_MANUFACTURER=QEMU
5309 if test "$QEMU_GA_DISTRO" = ""; then
5310 QEMU_GA_DISTRO=Linux
5313 if test "$QEMU_GA_VERSION" = ""; then
5314 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5317 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5319 case "$cpu" in
5320 x86_64)
5321 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5323 i386)
5324 QEMU_GA_MSI_ARCH="-D Arch=32"
5327 error_exit "CPU $cpu not supported for building installation package"
5329 esac
5332 # Mac OS X ships with a broken assembler
5333 roms=
5334 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5335 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5336 "$softmmu" = yes ; then
5337 # Different host OS linkers have different ideas about the name of the ELF
5338 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5339 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5340 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5341 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5342 ld_i386_emulation="$emu"
5343 roms="optionrom"
5344 break
5346 done
5348 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5349 roms="$roms spapr-rtas"
5352 if test "$cpu" = "s390x" ; then
5353 roms="$roms s390-ccw"
5356 # Probe for the need for relocating the user-only binary.
5357 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5358 textseg_addr=
5359 case "$cpu" in
5360 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5361 # ??? Rationale for choosing this address
5362 textseg_addr=0x60000000
5364 mips)
5365 # A 256M aligned address, high in the address space, with enough
5366 # room for the code_gen_buffer above it before the stack.
5367 textseg_addr=0x60000000
5369 esac
5370 if [ -n "$textseg_addr" ]; then
5371 cat > $TMPC <<EOF
5372 int main(void) { return 0; }
5374 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5375 if ! compile_prog "" "$textseg_ldflags"; then
5376 # In case ld does not support -Ttext-segment, edit the default linker
5377 # script via sed to set the .text start addr. This is needed on FreeBSD
5378 # at least.
5379 if ! $ld --verbose >/dev/null 2>&1; then
5380 error_exit \
5381 "We need to link the QEMU user mode binaries at a" \
5382 "specific text address. Unfortunately your linker" \
5383 "doesn't support either the -Ttext-segment option or" \
5384 "printing the default linker script with --verbose." \
5385 "If you don't want the user mode binaries, pass the" \
5386 "--disable-user option to configure."
5389 $ld --verbose | sed \
5390 -e '1,/==================================================/d' \
5391 -e '/==================================================/,$d' \
5392 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5393 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5394 textseg_ldflags="-Wl,-T../config-host.ld"
5399 # Check that the C++ compiler exists and works with the C compiler.
5400 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5401 if has $cxx; then
5402 cat > $TMPC <<EOF
5403 int c_function(void);
5404 int main(void) { return c_function(); }
5407 compile_object
5409 cat > $TMPCXX <<EOF
5410 extern "C" {
5411 int c_function(void);
5413 int c_function(void) { return 42; }
5416 update_cxxflags
5418 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5419 # C++ compiler $cxx works ok with C compiler $cc
5421 else
5422 echo "C++ compiler $cxx does not work with C compiler $cc"
5423 echo "Disabling C++ specific optional code"
5424 cxx=
5426 else
5427 echo "No C++ compiler available; disabling C++ specific optional code"
5428 cxx=
5431 echo_version() {
5432 if test "$1" = "yes" ; then
5433 echo "($2)"
5437 # prepend pixman and ftd flags after all config tests are done
5438 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5439 libs_softmmu="$pixman_libs $libs_softmmu"
5441 echo "Install prefix $prefix"
5442 echo "BIOS directory $(eval echo $qemu_datadir)"
5443 echo "firmware path $(eval echo $firmwarepath)"
5444 echo "binary directory $(eval echo $bindir)"
5445 echo "library directory $(eval echo $libdir)"
5446 echo "module directory $(eval echo $qemu_moddir)"
5447 echo "libexec directory $(eval echo $libexecdir)"
5448 echo "include directory $(eval echo $includedir)"
5449 echo "config directory $(eval echo $sysconfdir)"
5450 if test "$mingw32" = "no" ; then
5451 echo "local state directory $(eval echo $local_statedir)"
5452 echo "Manual directory $(eval echo $mandir)"
5453 echo "ELF interp prefix $interp_prefix"
5454 else
5455 echo "local state directory queried at runtime"
5456 echo "Windows SDK $win_sdk"
5458 echo "Source path $source_path"
5459 echo "GIT binary $git"
5460 echo "GIT submodules $git_submodules"
5461 echo "C compiler $cc"
5462 echo "Host C compiler $host_cc"
5463 echo "C++ compiler $cxx"
5464 echo "Objective-C compiler $objcc"
5465 echo "ARFLAGS $ARFLAGS"
5466 echo "CFLAGS $CFLAGS"
5467 echo "QEMU_CFLAGS $QEMU_CFLAGS"
5468 echo "LDFLAGS $LDFLAGS"
5469 echo "make $make"
5470 echo "install $install"
5471 echo "python $python"
5472 if test "$slirp" = "yes" ; then
5473 echo "smbd $smbd"
5475 echo "module support $modules"
5476 echo "host CPU $cpu"
5477 echo "host big endian $bigendian"
5478 echo "target list $target_list"
5479 echo "gprof enabled $gprof"
5480 echo "sparse enabled $sparse"
5481 echo "strip binaries $strip_opt"
5482 echo "profiler $profiler"
5483 echo "static build $static"
5484 if test "$darwin" = "yes" ; then
5485 echo "Cocoa support $cocoa"
5487 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5488 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
5489 echo "GTK GL support $gtk_gl"
5490 echo "VTE support $vte $(echo_version $vte $vteversion)"
5491 echo "TLS priority $tls_priority"
5492 echo "GNUTLS support $gnutls"
5493 echo "GNUTLS rnd $gnutls_rnd"
5494 echo "libgcrypt $gcrypt"
5495 echo "libgcrypt kdf $gcrypt_kdf"
5496 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
5497 echo "nettle kdf $nettle_kdf"
5498 echo "libtasn1 $tasn1"
5499 echo "curses support $curses"
5500 echo "virgl support $virglrenderer"
5501 echo "curl support $curl"
5502 echo "mingw32 support $mingw32"
5503 echo "Audio drivers $audio_drv_list"
5504 echo "Block whitelist (rw) $block_drv_rw_whitelist"
5505 echo "Block whitelist (ro) $block_drv_ro_whitelist"
5506 echo "VirtFS support $virtfs"
5507 echo "Multipath support $mpath"
5508 echo "VNC support $vnc"
5509 if test "$vnc" = "yes" ; then
5510 echo "VNC SASL support $vnc_sasl"
5511 echo "VNC JPEG support $vnc_jpeg"
5512 echo "VNC PNG support $vnc_png"
5514 if test -n "$sparc_cpu"; then
5515 echo "Target Sparc Arch $sparc_cpu"
5517 echo "xen support $xen"
5518 if test "$xen" = "yes" ; then
5519 echo "xen ctrl version $xen_ctrl_version"
5520 echo "pv dom build $xen_pv_domain_build"
5522 echo "brlapi support $brlapi"
5523 echo "bluez support $bluez"
5524 echo "Documentation $docs"
5525 echo "PIE $pie"
5526 echo "vde support $vde"
5527 echo "netmap support $netmap"
5528 echo "Linux AIO support $linux_aio"
5529 echo "ATTR/XATTR support $attr"
5530 echo "Install blobs $blobs"
5531 echo "KVM support $kvm"
5532 echo "HAX support $hax"
5533 echo "TCG support $tcg"
5534 if test "$tcg" = "yes" ; then
5535 echo "TCG debug enabled $debug_tcg"
5536 echo "TCG interpreter $tcg_interpreter"
5538 echo "malloc trim support $malloc_trim"
5539 echo "RDMA support $rdma"
5540 echo "fdt support $fdt"
5541 echo "preadv support $preadv"
5542 echo "fdatasync $fdatasync"
5543 echo "madvise $madvise"
5544 echo "posix_madvise $posix_madvise"
5545 echo "libcap-ng support $cap_ng"
5546 echo "vhost-net support $vhost_net"
5547 echo "vhost-scsi support $vhost_scsi"
5548 echo "vhost-vsock support $vhost_vsock"
5549 echo "vhost-user support $vhost_user"
5550 echo "Trace backends $trace_backends"
5551 if have_backend "simple"; then
5552 echo "Trace output file $trace_file-<pid>"
5554 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5555 echo "rbd support $rbd"
5556 echo "xfsctl support $xfs"
5557 echo "smartcard support $smartcard"
5558 echo "libusb $libusb"
5559 echo "usb net redir $usb_redir"
5560 echo "OpenGL support $opengl"
5561 echo "OpenGL dmabufs $opengl_dmabuf"
5562 echo "libiscsi support $libiscsi"
5563 echo "libnfs support $libnfs"
5564 echo "build guest agent $guest_agent"
5565 echo "QGA VSS support $guest_agent_with_vss"
5566 echo "QGA w32 disk info $guest_agent_ntddscsi"
5567 echo "QGA MSI support $guest_agent_msi"
5568 echo "seccomp support $seccomp"
5569 echo "coroutine backend $coroutine"
5570 echo "coroutine pool $coroutine_pool"
5571 echo "debug stack usage $debug_stack_usage"
5572 echo "crypto afalg $crypto_afalg"
5573 echo "GlusterFS support $glusterfs"
5574 echo "gcov $gcov_tool"
5575 echo "gcov enabled $gcov"
5576 echo "TPM support $tpm"
5577 echo "libssh2 support $libssh2"
5578 echo "TPM passthrough $tpm_passthrough"
5579 echo "TPM emulator $tpm_emulator"
5580 echo "QOM debugging $qom_cast_debug"
5581 echo "Live block migration $live_block_migration"
5582 echo "lzo support $lzo"
5583 echo "snappy support $snappy"
5584 echo "bzip2 support $bzip2"
5585 echo "NUMA host support $numa"
5586 echo "tcmalloc support $tcmalloc"
5587 echo "jemalloc support $jemalloc"
5588 echo "avx2 optimization $avx2_opt"
5589 echo "replication support $replication"
5590 echo "VxHS block device $vxhs"
5591 echo "capstone $capstone"
5593 if test "$sdl_too_old" = "yes"; then
5594 echo "-> Your SDL version is too old - please upgrade to have SDL support"
5597 if test "$supported_cpu" = "no"; then
5598 echo
5599 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5600 echo
5601 echo "CPU host architecture $cpu support is not currently maintained."
5602 echo "The QEMU project intends to remove support for this host CPU in"
5603 echo "a future release if nobody volunteers to maintain it and to"
5604 echo "provide a build host for our continuous integration setup."
5605 echo "configure has succeeded and you can continue to build, but"
5606 echo "if you care about QEMU on this platform you should contact"
5607 echo "us upstream at qemu-devel@nongnu.org."
5610 if test "$supported_os" = "no"; then
5611 echo
5612 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5613 echo
5614 echo "Host OS $targetos support is not currently maintained."
5615 echo "The QEMU project intends to remove support for this host OS in"
5616 echo "a future release if nobody volunteers to maintain it and to"
5617 echo "provide a build host for our continuous integration setup."
5618 echo "configure has succeeded and you can continue to build, but"
5619 echo "if you care about QEMU on this platform you should contact"
5620 echo "us upstream at qemu-devel@nongnu.org."
5623 config_host_mak="config-host.mak"
5625 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5627 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5628 echo >> $config_host_mak
5630 echo all: >> $config_host_mak
5631 echo "prefix=$prefix" >> $config_host_mak
5632 echo "bindir=$bindir" >> $config_host_mak
5633 echo "libdir=$libdir" >> $config_host_mak
5634 echo "libexecdir=$libexecdir" >> $config_host_mak
5635 echo "includedir=$includedir" >> $config_host_mak
5636 echo "mandir=$mandir" >> $config_host_mak
5637 echo "sysconfdir=$sysconfdir" >> $config_host_mak
5638 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5639 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5640 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
5641 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5642 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5643 if test "$mingw32" = "no" ; then
5644 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5646 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5647 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5648 echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
5649 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5650 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5651 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5652 echo "GIT=$git" >> $config_host_mak
5653 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5654 echo "GIT_UPDATE=$git_update" >> $config_host_mak
5656 echo "ARCH=$ARCH" >> $config_host_mak
5658 if test "$debug_tcg" = "yes" ; then
5659 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5661 if test "$strip_opt" = "yes" ; then
5662 echo "STRIP=${strip}" >> $config_host_mak
5664 if test "$bigendian" = "yes" ; then
5665 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5667 if test "$mingw32" = "yes" ; then
5668 echo "CONFIG_WIN32=y" >> $config_host_mak
5669 rc_version=$(cat $source_path/VERSION)
5670 version_major=${rc_version%%.*}
5671 rc_version=${rc_version#*.}
5672 version_minor=${rc_version%%.*}
5673 rc_version=${rc_version#*.}
5674 version_subminor=${rc_version%%.*}
5675 version_micro=0
5676 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5677 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5678 if test "$guest_agent_with_vss" = "yes" ; then
5679 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5680 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5681 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5683 if test "$guest_agent_ntddscsi" = "yes" ; then
5684 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5686 if test "$guest_agent_msi" = "yes"; then
5687 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5688 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5689 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5690 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5691 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5692 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5693 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5695 else
5696 echo "CONFIG_POSIX=y" >> $config_host_mak
5699 if test "$linux" = "yes" ; then
5700 echo "CONFIG_LINUX=y" >> $config_host_mak
5703 if test "$darwin" = "yes" ; then
5704 echo "CONFIG_DARWIN=y" >> $config_host_mak
5707 if test "$solaris" = "yes" ; then
5708 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5710 if test "$haiku" = "yes" ; then
5711 echo "CONFIG_HAIKU=y" >> $config_host_mak
5713 if test "$static" = "yes" ; then
5714 echo "CONFIG_STATIC=y" >> $config_host_mak
5716 if test "$profiler" = "yes" ; then
5717 echo "CONFIG_PROFILER=y" >> $config_host_mak
5719 if test "$slirp" = "yes" ; then
5720 echo "CONFIG_SLIRP=y" >> $config_host_mak
5721 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5723 if test "$vde" = "yes" ; then
5724 echo "CONFIG_VDE=y" >> $config_host_mak
5725 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
5727 if test "$netmap" = "yes" ; then
5728 echo "CONFIG_NETMAP=y" >> $config_host_mak
5730 if test "$l2tpv3" = "yes" ; then
5731 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5733 if test "$cap_ng" = "yes" ; then
5734 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5736 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5737 for drv in $audio_drv_list; do
5738 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5739 echo "$def=y" >> $config_host_mak
5740 done
5741 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5742 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5743 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5744 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5745 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
5746 if test "$audio_pt_int" = "yes" ; then
5747 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5749 if test "$audio_win_int" = "yes" ; then
5750 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5752 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5753 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5754 if test "$vnc" = "yes" ; then
5755 echo "CONFIG_VNC=y" >> $config_host_mak
5757 if test "$vnc_sasl" = "yes" ; then
5758 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5760 if test "$vnc_jpeg" = "yes" ; then
5761 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5763 if test "$vnc_png" = "yes" ; then
5764 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5766 if test "$xkbcommon" = "yes" ; then
5767 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
5768 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
5770 if test "$fnmatch" = "yes" ; then
5771 echo "CONFIG_FNMATCH=y" >> $config_host_mak
5773 if test "$xfs" = "yes" ; then
5774 echo "CONFIG_XFS=y" >> $config_host_mak
5776 qemu_version=$(head $source_path/VERSION)
5777 echo "VERSION=$qemu_version" >>$config_host_mak
5778 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5779 echo "SRC_PATH=$source_path" >> $config_host_mak
5780 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5781 if [ "$docs" = "yes" ] ; then
5782 echo "BUILD_DOCS=yes" >> $config_host_mak
5784 if test "$modules" = "yes"; then
5785 # $shacmd can generate a hash started with digit, which the compiler doesn't
5786 # like as an symbol. So prefix it with an underscore
5787 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5788 echo "CONFIG_MODULES=y" >> $config_host_mak
5790 if test "$sdl" = "yes" ; then
5791 echo "CONFIG_SDL=y" >> $config_host_mak
5792 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5793 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5794 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
5796 if test "$cocoa" = "yes" ; then
5797 echo "CONFIG_COCOA=y" >> $config_host_mak
5799 if test "$curses" = "yes" ; then
5800 echo "CONFIG_CURSES=y" >> $config_host_mak
5802 if test "$pipe2" = "yes" ; then
5803 echo "CONFIG_PIPE2=y" >> $config_host_mak
5805 if test "$accept4" = "yes" ; then
5806 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5808 if test "$splice" = "yes" ; then
5809 echo "CONFIG_SPLICE=y" >> $config_host_mak
5811 if test "$eventfd" = "yes" ; then
5812 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5814 if test "$memfd" = "yes" ; then
5815 echo "CONFIG_MEMFD=y" >> $config_host_mak
5817 if test "$fallocate" = "yes" ; then
5818 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5820 if test "$fallocate_punch_hole" = "yes" ; then
5821 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5823 if test "$fallocate_zero_range" = "yes" ; then
5824 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5826 if test "$posix_fallocate" = "yes" ; then
5827 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5829 if test "$sync_file_range" = "yes" ; then
5830 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5832 if test "$fiemap" = "yes" ; then
5833 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5835 if test "$dup3" = "yes" ; then
5836 echo "CONFIG_DUP3=y" >> $config_host_mak
5838 if test "$ppoll" = "yes" ; then
5839 echo "CONFIG_PPOLL=y" >> $config_host_mak
5841 if test "$prctl_pr_set_timerslack" = "yes" ; then
5842 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5844 if test "$epoll" = "yes" ; then
5845 echo "CONFIG_EPOLL=y" >> $config_host_mak
5847 if test "$epoll_create1" = "yes" ; then
5848 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5850 if test "$sendfile" = "yes" ; then
5851 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5853 if test "$timerfd" = "yes" ; then
5854 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5856 if test "$setns" = "yes" ; then
5857 echo "CONFIG_SETNS=y" >> $config_host_mak
5859 if test "$clock_adjtime" = "yes" ; then
5860 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5862 if test "$syncfs" = "yes" ; then
5863 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5865 if test "$inotify" = "yes" ; then
5866 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5868 if test "$inotify1" = "yes" ; then
5869 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5871 if test "$sem_timedwait" = "yes" ; then
5872 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
5874 if test "$byteswap_h" = "yes" ; then
5875 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5877 if test "$bswap_h" = "yes" ; then
5878 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5880 if test "$curl" = "yes" ; then
5881 echo "CONFIG_CURL=m" >> $config_host_mak
5882 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5883 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5885 if test "$brlapi" = "yes" ; then
5886 echo "CONFIG_BRLAPI=y" >> $config_host_mak
5887 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
5889 if test "$bluez" = "yes" ; then
5890 echo "CONFIG_BLUEZ=y" >> $config_host_mak
5891 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5893 if test "$glib_subprocess" = "yes" ; then
5894 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5896 if test "$gtk" = "yes" ; then
5897 echo "CONFIG_GTK=y" >> $config_host_mak
5898 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5899 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5900 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5901 if test "$gtk_gl" = "yes" ; then
5902 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5905 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5906 if test "$gnutls" = "yes" ; then
5907 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5909 if test "$gnutls_rnd" = "yes" ; then
5910 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5912 if test "$gcrypt" = "yes" ; then
5913 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5914 if test "$gcrypt_hmac" = "yes" ; then
5915 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5917 if test "$gcrypt_kdf" = "yes" ; then
5918 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5921 if test "$nettle" = "yes" ; then
5922 echo "CONFIG_NETTLE=y" >> $config_host_mak
5923 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5924 if test "$nettle_kdf" = "yes" ; then
5925 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5928 if test "$tasn1" = "yes" ; then
5929 echo "CONFIG_TASN1=y" >> $config_host_mak
5931 if test "$have_ifaddrs_h" = "yes" ; then
5932 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5934 if test "$have_broken_size_max" = "yes" ; then
5935 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5938 # Work around a system header bug with some kernel/XFS header
5939 # versions where they both try to define 'struct fsxattr':
5940 # xfs headers will not try to redefine structs from linux headers
5941 # if this macro is set.
5942 if test "$have_fsxattr" = "yes" ; then
5943 echo "HAVE_FSXATTR=y" >> $config_host_mak
5945 if test "$vte" = "yes" ; then
5946 echo "CONFIG_VTE=y" >> $config_host_mak
5947 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5949 if test "$virglrenderer" = "yes" ; then
5950 echo "CONFIG_VIRGL=y" >> $config_host_mak
5951 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5952 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5954 if test "$xen" = "yes" ; then
5955 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5956 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5957 if test "$xen_pv_domain_build" = "yes" ; then
5958 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5961 if test "$linux_aio" = "yes" ; then
5962 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5964 if test "$attr" = "yes" ; then
5965 echo "CONFIG_ATTR=y" >> $config_host_mak
5967 if test "$libattr" = "yes" ; then
5968 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5970 if test "$virtfs" = "yes" ; then
5971 echo "CONFIG_VIRTFS=y" >> $config_host_mak
5973 if test "$mpath" = "yes" ; then
5974 echo "CONFIG_MPATH=y" >> $config_host_mak
5976 if test "$vhost_scsi" = "yes" ; then
5977 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5979 if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
5980 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5982 if test "$vhost_vsock" = "yes" ; then
5983 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5985 if test "$vhost_user" = "yes" ; then
5986 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
5988 if test "$blobs" = "yes" ; then
5989 echo "INSTALL_BLOBS=yes" >> $config_host_mak
5991 if test "$iovec" = "yes" ; then
5992 echo "CONFIG_IOVEC=y" >> $config_host_mak
5994 if test "$preadv" = "yes" ; then
5995 echo "CONFIG_PREADV=y" >> $config_host_mak
5997 if test "$fdt" = "yes" ; then
5998 echo "CONFIG_FDT=y" >> $config_host_mak
6000 if test "$signalfd" = "yes" ; then
6001 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6003 if test "$tcg" = "yes"; then
6004 echo "CONFIG_TCG=y" >> $config_host_mak
6005 if test "$tcg_interpreter" = "yes" ; then
6006 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6009 if test "$fdatasync" = "yes" ; then
6010 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6012 if test "$madvise" = "yes" ; then
6013 echo "CONFIG_MADVISE=y" >> $config_host_mak
6015 if test "$posix_madvise" = "yes" ; then
6016 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6019 if test "$spice" = "yes" ; then
6020 echo "CONFIG_SPICE=y" >> $config_host_mak
6023 if test "$smartcard" = "yes" ; then
6024 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6025 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6026 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6029 if test "$libusb" = "yes" ; then
6030 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6031 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6032 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6035 if test "$usb_redir" = "yes" ; then
6036 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6037 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6038 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6041 if test "$opengl" = "yes" ; then
6042 echo "CONFIG_OPENGL=y" >> $config_host_mak
6043 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6044 if test "$opengl_dmabuf" = "yes" ; then
6045 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6049 if test "$malloc_trim" = "yes" ; then
6050 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6053 if test "$avx2_opt" = "yes" ; then
6054 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6057 if test "$lzo" = "yes" ; then
6058 echo "CONFIG_LZO=y" >> $config_host_mak
6061 if test "$snappy" = "yes" ; then
6062 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6065 if test "$bzip2" = "yes" ; then
6066 echo "CONFIG_BZIP2=y" >> $config_host_mak
6067 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6070 if test "$libiscsi" = "yes" ; then
6071 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6072 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6073 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6076 if test "$libnfs" = "yes" ; then
6077 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6078 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6081 if test "$seccomp" = "yes"; then
6082 echo "CONFIG_SECCOMP=y" >> $config_host_mak
6083 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6084 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6087 # XXX: suppress that
6088 if [ "$bsd" = "yes" ] ; then
6089 echo "CONFIG_BSD=y" >> $config_host_mak
6092 if test "$localtime_r" = "yes" ; then
6093 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6095 if test "$qom_cast_debug" = "yes" ; then
6096 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6098 if test "$rbd" = "yes" ; then
6099 echo "CONFIG_RBD=m" >> $config_host_mak
6100 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6101 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6104 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6105 if test "$coroutine_pool" = "yes" ; then
6106 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6107 else
6108 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6111 if test "$debug_stack_usage" = "yes" ; then
6112 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6115 if test "$crypto_afalg" = "yes" ; then
6116 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6119 if test "$open_by_handle_at" = "yes" ; then
6120 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6123 if test "$linux_magic_h" = "yes" ; then
6124 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6127 if test "$pragma_diagnostic_available" = "yes" ; then
6128 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6131 if test "$valgrind_h" = "yes" ; then
6132 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6135 if test "$has_environ" = "yes" ; then
6136 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6139 if test "$cpuid_h" = "yes" ; then
6140 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6143 if test "$int128" = "yes" ; then
6144 echo "CONFIG_INT128=y" >> $config_host_mak
6147 if test "$atomic128" = "yes" ; then
6148 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6151 if test "$atomic64" = "yes" ; then
6152 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6155 if test "$getauxval" = "yes" ; then
6156 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6159 if test "$glusterfs" = "yes" ; then
6160 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6161 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6162 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6165 if test "$glusterfs_xlator_opt" = "yes" ; then
6166 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6169 if test "$glusterfs_discard" = "yes" ; then
6170 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6173 if test "$glusterfs_fallocate" = "yes" ; then
6174 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6177 if test "$glusterfs_zerofill" = "yes" ; then
6178 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6181 if test "$libssh2" = "yes" ; then
6182 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6183 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6184 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6187 if test "$live_block_migration" = "yes" ; then
6188 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6191 if test "$tpm" = "yes"; then
6192 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6193 # TPM passthrough support?
6194 if test "$tpm_passthrough" = "yes"; then
6195 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6197 # TPM emulator support?
6198 if test "$tpm_emulator" = "yes"; then
6199 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6203 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6204 if have_backend "nop"; then
6205 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6207 if have_backend "simple"; then
6208 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6209 # Set the appropriate trace file.
6210 trace_file="\"$trace_file-\" FMT_pid"
6212 if have_backend "log"; then
6213 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6215 if have_backend "ust"; then
6216 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6218 if have_backend "dtrace"; then
6219 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6220 if test "$trace_backend_stap" = "yes" ; then
6221 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6224 if have_backend "ftrace"; then
6225 if test "$linux" = "yes" ; then
6226 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6227 else
6228 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6231 if have_backend "syslog"; then
6232 if test "$posix_syslog" = "yes" ; then
6233 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6234 else
6235 feature_not_found "syslog(trace backend)" "syslog not available"
6238 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6240 if test "$rdma" = "yes" ; then
6241 echo "CONFIG_RDMA=y" >> $config_host_mak
6242 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6245 if test "$have_rtnetlink" = "yes" ; then
6246 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6249 if test "$replication" = "yes" ; then
6250 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6253 if test "$have_af_vsock" = "yes" ; then
6254 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6257 if test "$have_sysmacros" = "yes" ; then
6258 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6261 if test "$have_static_assert" = "yes" ; then
6262 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6265 if test "$have_utmpx" = "yes" ; then
6266 echo "HAVE_UTMPX=y" >> $config_host_mak
6269 if test "$ivshmem" = "yes" ; then
6270 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6272 if test "$capstone" != "no" ; then
6273 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6276 # Hold two types of flag:
6277 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6278 # a thread we have a handle to
6279 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6280 # platform
6281 if test "$pthread_setname_np" = "yes" ; then
6282 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6283 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6286 if test "$vxhs" = "yes" ; then
6287 echo "CONFIG_VXHS=y" >> $config_host_mak
6288 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6291 if test "$tcg_interpreter" = "yes"; then
6292 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6293 elif test "$ARCH" = "sparc64" ; then
6294 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6295 elif test "$ARCH" = "s390x" ; then
6296 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6297 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6298 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6299 elif test "$ARCH" = "ppc64" ; then
6300 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6301 else
6302 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6304 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
6306 echo "TOOLS=$tools" >> $config_host_mak
6307 echo "ROMS=$roms" >> $config_host_mak
6308 echo "MAKE=$make" >> $config_host_mak
6309 echo "INSTALL=$install" >> $config_host_mak
6310 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6311 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6312 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6313 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6314 echo "PYTHON=$python" >> $config_host_mak
6315 echo "CC=$cc" >> $config_host_mak
6316 if $iasl -h > /dev/null 2>&1; then
6317 echo "IASL=$iasl" >> $config_host_mak
6319 echo "CC_I386=$cc_i386" >> $config_host_mak
6320 echo "HOST_CC=$host_cc" >> $config_host_mak
6321 echo "CXX=$cxx" >> $config_host_mak
6322 echo "OBJCC=$objcc" >> $config_host_mak
6323 echo "AR=$ar" >> $config_host_mak
6324 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6325 echo "AS=$as" >> $config_host_mak
6326 echo "CCAS=$ccas" >> $config_host_mak
6327 echo "CPP=$cpp" >> $config_host_mak
6328 echo "OBJCOPY=$objcopy" >> $config_host_mak
6329 echo "LD=$ld" >> $config_host_mak
6330 echo "RANLIB=$ranlib" >> $config_host_mak
6331 echo "NM=$nm" >> $config_host_mak
6332 echo "WINDRES=$windres" >> $config_host_mak
6333 echo "CFLAGS=$CFLAGS" >> $config_host_mak
6334 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6335 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6336 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6337 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6338 if test "$sparse" = "yes" ; then
6339 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
6340 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
6341 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
6342 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6343 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6345 if test "$cross_prefix" != ""; then
6346 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6347 else
6348 echo "AUTOCONF_HOST := " >> $config_host_mak
6350 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6351 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6352 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6353 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6354 echo "LIBS+=$LIBS" >> $config_host_mak
6355 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6356 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6357 echo "EXESUF=$EXESUF" >> $config_host_mak
6358 echo "DSOSUF=$DSOSUF" >> $config_host_mak
6359 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6360 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6361 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6362 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6363 echo "POD2MAN=$POD2MAN" >> $config_host_mak
6364 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6365 if test "$gcov" = "yes" ; then
6366 echo "CONFIG_GCOV=y" >> $config_host_mak
6367 echo "GCOV=$gcov_tool" >> $config_host_mak
6370 # use included Linux headers
6371 if test "$linux" = "yes" ; then
6372 mkdir -p linux-headers
6373 case "$cpu" in
6374 i386|x86_64|x32)
6375 linux_arch=x86
6377 ppcemb|ppc|ppc64)
6378 linux_arch=powerpc
6380 s390x)
6381 linux_arch=s390
6383 aarch64)
6384 linux_arch=arm64
6386 mips64)
6387 linux_arch=mips
6390 # For most CPUs the kernel architecture name and QEMU CPU name match.
6391 linux_arch="$cpu"
6393 esac
6394 # For non-KVM architectures we will not have asm headers
6395 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6396 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6400 for target in $target_list; do
6401 target_dir="$target"
6402 config_target_mak=$target_dir/config-target.mak
6403 target_name=$(echo $target | cut -d '-' -f 1)
6404 target_bigendian="no"
6406 case "$target_name" in
6407 armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6408 target_bigendian=yes
6410 esac
6411 target_softmmu="no"
6412 target_user_only="no"
6413 target_linux_user="no"
6414 target_bsd_user="no"
6415 case "$target" in
6416 ${target_name}-softmmu)
6417 target_softmmu="yes"
6419 ${target_name}-linux-user)
6420 target_user_only="yes"
6421 target_linux_user="yes"
6423 ${target_name}-bsd-user)
6424 target_user_only="yes"
6425 target_bsd_user="yes"
6428 error_exit "Target '$target' not recognised"
6429 exit 1
6431 esac
6433 mkdir -p $target_dir
6434 echo "# Automatically generated by configure - do not modify" > $config_target_mak
6436 bflt="no"
6437 mttcg="no"
6438 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6439 gdb_xml_files=""
6441 TARGET_ARCH="$target_name"
6442 TARGET_BASE_ARCH=""
6443 TARGET_ABI_DIR=""
6445 case "$target_name" in
6446 i386)
6447 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6449 x86_64)
6450 TARGET_BASE_ARCH=i386
6451 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
6453 alpha)
6454 mttcg="yes"
6456 arm|armeb)
6457 TARGET_ARCH=arm
6458 bflt="yes"
6459 mttcg="yes"
6460 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6462 aarch64)
6463 TARGET_BASE_ARCH=arm
6464 bflt="yes"
6465 mttcg="yes"
6466 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6468 cris)
6470 hppa)
6472 lm32)
6474 m68k)
6475 bflt="yes"
6476 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
6478 microblaze|microblazeel)
6479 TARGET_ARCH=microblaze
6480 bflt="yes"
6482 mips|mipsel)
6483 TARGET_ARCH=mips
6484 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
6486 mipsn32|mipsn32el)
6487 TARGET_ARCH=mips64
6488 TARGET_BASE_ARCH=mips
6489 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6490 echo "TARGET_ABI32=y" >> $config_target_mak
6492 mips64|mips64el)
6493 TARGET_ARCH=mips64
6494 TARGET_BASE_ARCH=mips
6495 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
6497 moxie)
6499 nios2)
6501 or1k)
6502 TARGET_ARCH=openrisc
6503 TARGET_BASE_ARCH=openrisc
6505 ppc)
6506 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6508 ppcemb)
6509 TARGET_BASE_ARCH=ppc
6510 TARGET_ABI_DIR=ppc
6511 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6513 ppc64)
6514 TARGET_BASE_ARCH=ppc
6515 TARGET_ABI_DIR=ppc
6516 mttcg=yes
6517 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6519 ppc64le)
6520 TARGET_ARCH=ppc64
6521 TARGET_BASE_ARCH=ppc
6522 TARGET_ABI_DIR=ppc
6523 mttcg=yes
6524 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6526 ppc64abi32)
6527 TARGET_ARCH=ppc64
6528 TARGET_BASE_ARCH=ppc
6529 TARGET_ABI_DIR=ppc
6530 echo "TARGET_ABI32=y" >> $config_target_mak
6531 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6533 sh4|sh4eb)
6534 TARGET_ARCH=sh4
6535 bflt="yes"
6537 sparc)
6539 sparc64)
6540 TARGET_BASE_ARCH=sparc
6542 sparc32plus)
6543 TARGET_ARCH=sparc64
6544 TARGET_BASE_ARCH=sparc
6545 TARGET_ABI_DIR=sparc
6546 echo "TARGET_ABI32=y" >> $config_target_mak
6548 s390x)
6549 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
6551 tilegx)
6553 tricore)
6555 unicore32)
6557 xtensa|xtensaeb)
6558 TARGET_ARCH=xtensa
6561 error_exit "Unsupported target CPU"
6563 esac
6564 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6565 if [ "$TARGET_BASE_ARCH" = "" ]; then
6566 TARGET_BASE_ARCH=$TARGET_ARCH
6569 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6571 upper() {
6572 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6575 target_arch_name="$(upper $TARGET_ARCH)"
6576 echo "TARGET_$target_arch_name=y" >> $config_target_mak
6577 echo "TARGET_NAME=$target_name" >> $config_target_mak
6578 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6579 if [ "$TARGET_ABI_DIR" = "" ]; then
6580 TARGET_ABI_DIR=$TARGET_ARCH
6582 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6583 if [ "$HOST_VARIANT_DIR" != "" ]; then
6584 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6587 if supported_xen_target $target; then
6588 echo "CONFIG_XEN=y" >> $config_target_mak
6589 if test "$xen_pci_passthrough" = yes; then
6590 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6593 if supported_kvm_target $target; then
6594 echo "CONFIG_KVM=y" >> $config_target_mak
6595 if test "$vhost_net" = "yes" ; then
6596 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6597 if test "$vhost_user" = "yes" ; then
6598 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6602 if supported_hax_target $target; then
6603 echo "CONFIG_HAX=y" >> $config_target_mak
6605 if test "$target_bigendian" = "yes" ; then
6606 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
6608 if test "$target_softmmu" = "yes" ; then
6609 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6610 if test "$mttcg" = "yes" ; then
6611 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6614 if test "$target_user_only" = "yes" ; then
6615 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6616 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
6618 if test "$target_linux_user" = "yes" ; then
6619 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6621 list=""
6622 if test ! -z "$gdb_xml_files" ; then
6623 for x in $gdb_xml_files; do
6624 list="$list $source_path/gdb-xml/$x"
6625 done
6626 echo "TARGET_XML_FILES=$list" >> $config_target_mak
6629 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6630 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
6632 if test "$target_bsd_user" = "yes" ; then
6633 echo "CONFIG_BSD_USER=y" >> $config_target_mak
6636 # generate QEMU_CFLAGS/LDFLAGS for targets
6638 cflags=""
6639 ldflags=""
6641 disas_config() {
6642 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6643 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6646 for i in $ARCH $TARGET_BASE_ARCH ; do
6647 case "$i" in
6648 alpha)
6649 disas_config "ALPHA"
6651 aarch64)
6652 if test -n "${cxx}"; then
6653 disas_config "ARM_A64"
6656 arm)
6657 disas_config "ARM"
6658 if test -n "${cxx}"; then
6659 disas_config "ARM_A64"
6662 cris)
6663 disas_config "CRIS"
6665 hppa)
6666 disas_config "HPPA"
6668 i386|x86_64|x32)
6669 disas_config "I386"
6671 lm32)
6672 disas_config "LM32"
6674 m68k)
6675 disas_config "M68K"
6677 microblaze*)
6678 disas_config "MICROBLAZE"
6680 mips*)
6681 disas_config "MIPS"
6683 moxie*)
6684 disas_config "MOXIE"
6686 nios2)
6687 disas_config "NIOS2"
6689 or1k)
6690 disas_config "OPENRISC"
6692 ppc*)
6693 disas_config "PPC"
6695 s390*)
6696 disas_config "S390"
6698 sh4)
6699 disas_config "SH4"
6701 sparc*)
6702 disas_config "SPARC"
6704 xtensa*)
6705 disas_config "XTENSA"
6707 esac
6708 done
6709 if test "$tcg_interpreter" = "yes" ; then
6710 disas_config "TCI"
6713 case "$ARCH" in
6714 alpha)
6715 # Ensure there's only a single GP
6716 cflags="-msmall-data $cflags"
6718 esac
6720 if test "$gprof" = "yes" ; then
6721 echo "TARGET_GPROF=yes" >> $config_target_mak
6722 if test "$target_linux_user" = "yes" ; then
6723 cflags="-p $cflags"
6724 ldflags="-p $ldflags"
6726 if test "$target_softmmu" = "yes" ; then
6727 ldflags="-p $ldflags"
6728 echo "GPROF_CFLAGS=-p" >> $config_target_mak
6732 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6733 ldflags="$ldflags $textseg_ldflags"
6736 # Newer kernels on s390 check for an S390_PGSTE program header and
6737 # enable the pgste page table extensions in that case. This makes
6738 # the vm.allocate_pgste sysctl unnecessary. We enable this program
6739 # header if
6740 # - we build on s390x
6741 # - we build the system emulation for s390x (qemu-system-s390x)
6742 # - KVM is enabled
6743 # - the linker supports --s390-pgste
6744 if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
6745 if ld_has --s390-pgste ; then
6746 ldflags="-Wl,--s390-pgste $ldflags"
6750 echo "LDFLAGS+=$ldflags" >> $config_target_mak
6751 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6753 done # for target in $targets
6755 if [ "$dtc_internal" = "yes" ]; then
6756 echo "config-host.h: subdir-dtc" >> $config_host_mak
6758 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
6759 echo "config-host.h: subdir-capstone" >> $config_host_mak
6761 if test -n "$LIBCAPSTONE"; then
6762 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
6765 if test "$numa" = "yes"; then
6766 echo "CONFIG_NUMA=y" >> $config_host_mak
6769 if test "$ccache_cpp2" = "yes"; then
6770 echo "export CCACHE_CPP2=y" >> $config_host_mak
6773 # build tree in object directory in case the source is not in the current directory
6774 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
6775 DIRS="$DIRS docs docs/interop fsdev scsi"
6776 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
6777 DIRS="$DIRS roms/seabios roms/vgabios"
6778 DIRS="$DIRS qapi-generated"
6779 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6780 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6781 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
6782 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
6783 FILES="$FILES pc-bios/spapr-rtas/Makefile"
6784 FILES="$FILES pc-bios/s390-ccw/Makefile"
6785 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6786 FILES="$FILES pc-bios/qemu-icon.bmp"
6787 FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
6788 for bios_file in \
6789 $source_path/pc-bios/*.bin \
6790 $source_path/pc-bios/*.lid \
6791 $source_path/pc-bios/*.aml \
6792 $source_path/pc-bios/*.rom \
6793 $source_path/pc-bios/*.dtb \
6794 $source_path/pc-bios/*.img \
6795 $source_path/pc-bios/openbios-* \
6796 $source_path/pc-bios/u-boot.* \
6797 $source_path/pc-bios/palcode-*
6799 FILES="$FILES pc-bios/$(basename $bios_file)"
6800 done
6801 for test_file in $(find $source_path/tests/acpi-test-data -type f)
6803 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6804 done
6805 mkdir -p $DIRS
6806 for f in $FILES ; do
6807 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6808 symlink "$source_path/$f" "$f"
6810 done
6812 # temporary config to build submodules
6813 for rom in seabios vgabios ; do
6814 config_mak=roms/$rom/config.mak
6815 echo "# Automatically generated by configure - do not modify" > $config_mak
6816 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6817 echo "AS=$as" >> $config_mak
6818 echo "CCAS=$ccas" >> $config_mak
6819 echo "CC=$cc" >> $config_mak
6820 echo "BCC=bcc" >> $config_mak
6821 echo "CPP=$cpp" >> $config_mak
6822 echo "OBJCOPY=objcopy" >> $config_mak
6823 echo "IASL=$iasl" >> $config_mak
6824 echo "LD=$ld" >> $config_mak
6825 echo "RANLIB=$ranlib" >> $config_mak
6826 done
6828 # set up tests data directory
6829 if [ ! -e tests/data ]; then
6830 symlink "$source_path/tests/data" tests/data
6833 # set up qemu-iotests in this build directory
6834 iotests_common_env="tests/qemu-iotests/common.env"
6835 iotests_check="tests/qemu-iotests/check"
6837 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6838 echo >> "$iotests_common_env"
6839 echo "export PYTHON='$python'" >> "$iotests_common_env"
6841 if [ ! -e "$iotests_check" ]; then
6842 symlink "$source_path/$iotests_check" "$iotests_check"
6845 # Save the configure command line for later reuse.
6846 cat <<EOD >config.status
6847 #!/bin/sh
6848 # Generated by configure.
6849 # Run this file to recreate the current configuration.
6850 # Compiler output produced by configure, useful for debugging
6851 # configure, is in config.log if it exists.
6853 printf "exec" >>config.status
6854 printf " '%s'" "$0" "$@" >>config.status
6855 echo ' "$@"' >>config.status
6856 chmod +x config.status
6858 rm -r "$TMPDIR1"