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.)
23 echo "ERROR: failed to create temporary directory"
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"
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
41 echo "#" >> config.log
46 while test -n "$2"; do
59 # Run the compiler, capturing its output to the log. First argument
60 # is compiler binary to execute.
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
72 # Don't bother rerunning the compile if we were already using -Werror
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."
87 do_compiler "$cc" "$@"
91 do_compiler "$cxx" "$@"
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
102 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
103 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
106 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
114 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
120 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
123 # symbolically link $1 to $2. Portable version of "ln -sf".
126 mkdir -p "$(dirname "$2")"
130 # check whether a command is available to this shell (may be either an
131 # executable or a builtin)
133 type "$1" >/dev/null 2>&1
136 # search for an executable in PATH
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"
149 if [ -z "$local_command" ]; then
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')}"
162 IFS="${local_ifs:-$(printf ' \t\n')}"
167 echo "$trace_backends" | grep "$1" >/dev/null
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
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 | \
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
219 if test "$linux" != "yes"; then
220 print_error "Target '$target' is only available on a Linux host"
225 if test "$bsd" != "yes"; then
226 print_error "Target '$target' is only available on a BSD host"
231 print_error "Invalid target name '$target'"
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'"
244 source_path=$(dirname "$0")
247 interp_prefix="/usr/gnemul/qemu-%M"
251 block_drv_rw_whitelist=""
252 block_drv_ro_whitelist=""
258 cc_i386=i386-pc-linux-gnu-gcc
263 # Don't accept a target_list environment variable.
266 # Default value for a variable defining feature "foo".
267 # * foo="no" feature will only be used if --enable-foo arg is given
268 # * foo="" feature will be searched for, and if found, will be used
269 # unless --disable-foo is given
270 # * foo="yes" this value will only be set by --enable-foo flag.
271 # feature will searched for,
272 # if not found, configure exits with error
274 # Always add --enable-foo and --disable-foo command line args.
275 # Distributions want to ensure that several features are compiled in, and it
276 # is impossible without a --enable-foo that exits if a feature is not found.
297 xen_pv_domain_build="no"
298 xen_pci_passthrough=""
324 LDFLAGS_SHARED="-shared"
327 mandir="\${prefix}/share/man"
328 datadir="\${prefix}/share"
329 qemu_docdir="\${prefix}/share/doc/qemu"
330 bindir="\${prefix}/bin"
331 libdir="\${prefix}/lib"
332 libexecdir="\${prefix}/libexec"
333 includedir="\${prefix}/include"
334 sysconfdir="\${prefix}/etc"
335 local_statedir="\${prefix}/var"
367 guest_agent_with_vss="no"
368 guest_agent_ntddscsi="no"
377 debug_stack_usage="no"
381 glusterfs_xlator_opt="no"
382 glusterfs_discard="no"
383 glusterfs_fallocate="no"
384 glusterfs_zerofill="no"
388 tls_priority="NORMAL"
400 live_block_migration="yes"
411 # parse CC options first
413 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
415 --cross-prefix=*) cross_prefix="$optarg"
419 --cxx=*) CXX="$optarg"
421 --source-path=*) source_path="$optarg"
423 --cpu=*) cpu="$optarg"
425 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
426 EXTRA_CFLAGS="$optarg"
428 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
429 EXTRA_CXXFLAGS="$optarg"
431 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
432 EXTRA_LDFLAGS="$optarg"
434 --enable-debug-info) debug_info="yes"
436 --disable-debug-info) debug_info="no"
441 # Using uname is really, really broken. Once we have the right set of checks
442 # we can eliminate its usage altogether.
444 # Preferred compiler:
446 # ${cross_prefix}gcc (if cross-prefix specified)
448 if test -z "${CC}${cross_prefix}"; then
451 cc="${CC-${cross_prefix}gcc}"
454 if test -z "${CXX}${cross_prefix}"; then
457 cxx="${CXX-${cross_prefix}g++}"
460 ar="${AR-${cross_prefix}ar}"
461 as="${AS-${cross_prefix}as}"
464 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
465 ld="${LD-${cross_prefix}ld}"
466 nm="${NM-${cross_prefix}nm}"
467 strip="${STRIP-${cross_prefix}strip}"
468 windres="${WINDRES-${cross_prefix}windres}"
469 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
471 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
473 pkg_config=query_pkg_config
474 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
475 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
477 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
478 ARFLAGS="${ARFLAGS-rv}"
480 # default flags for all hosts
481 # We use -fwrapv to tell the compiler that we require a C dialect where
482 # left shift of signed integers is well defined and has the expected
483 # 2s-complement style results. (Both clang and gcc agree that it
484 # provides these semantics.)
485 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
486 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
487 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
488 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
489 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/accel/tcg -I\$(SRC_PATH)/include"
490 if test "$debug_info" = "yes"; then
492 LDFLAGS="-g $LDFLAGS"
495 # make source path absolute
496 source_path=$(cd "$source_path"; pwd)
498 # running configure in the source tree?
499 # we know that's the case if configure is there.
500 if test -f "./configure"; then
501 pwd_is_source_path="y"
503 pwd_is_source_path="n"
509 #error $1 not defined
511 int main(void) { return 0; }
519 int main(void) { return 0; }
526 int main(void) { return 0; }
530 if check_define __linux__ ; then
532 elif check_define _WIN32 ; then
534 elif check_define __OpenBSD__ ; then
536 elif check_define __sun__ ; then
538 elif check_define __HAIKU__ ; then
540 elif check_define __FreeBSD__ ; then
542 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
543 targetos='GNU/kFreeBSD'
544 elif check_define __DragonFly__ ; then
546 elif check_define __NetBSD__; then
548 elif check_define __APPLE__; then
550 elif check_define _AIX; then
553 # This is a fatal error, but don't report it yet, because we
554 # might be going to just print the --help text, or it might
555 # be the result of a missing compiler.
560 # Some host OSes need non-standard checks for which CPU to use.
561 # Note that these checks are broken for cross-compilation: if you're
562 # cross-compiling to one of these OSes then you'll need to specify
563 # the correct CPU with the --cpu option.
566 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
567 # run 64-bit userspace code.
568 # If the user didn't specify a CPU explicitly and the kernel says this is
569 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
570 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
575 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
576 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
581 if test ! -z "$cpu" ; then
582 # command line argument
584 elif check_define __i386__ ; then
586 elif check_define __x86_64__ ; then
587 if check_define __ILP32__ ; then
592 elif check_define __sparc__ ; then
593 if check_define __arch64__ ; then
598 elif check_define _ARCH_PPC ; then
599 if check_define _ARCH_PPC64 ; then
604 elif check_define __mips__ ; then
606 elif check_define __ia64__ ; then
608 elif check_define __s390__ ; then
609 if check_define __s390x__ ; then
614 elif check_define __arm__ ; then
616 elif check_define __aarch64__ ; then
623 # Normalise host CPU name and set ARCH.
624 # Note that this case should only have supported host CPUs, not guests.
626 ppc|ppc64|s390|s390x|sparc64|x32)
633 i386|i486|i586|i686|i86pc|BePC)
658 # This will result in either an error or falling back to TCI later
662 if test -z "$ARCH"; then
668 # host *BSD for user mode
675 audio_possible_drivers="dsound sdl"
676 if check_include dsound.h; then
677 audio_drv_list="dsound"
686 audio_possible_drivers="oss sdl pa"
692 audio_possible_drivers="oss sdl pa"
693 # needed for kinfo_getvmmap(3) in libutil.h
695 # needed for kinfo_getproc
696 libs_qga="-lutil $libs_qga"
697 netmap="" # enable netmap autodetect
698 HOST_VARIANT_DIR="freebsd"
705 audio_possible_drivers="oss sdl pa"
706 HOST_VARIANT_DIR="dragonfly"
712 audio_possible_drivers="oss sdl"
714 HOST_VARIANT_DIR="netbsd"
721 audio_possible_drivers="sdl"
722 HOST_VARIANT_DIR="openbsd"
728 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
729 if [ "$cpu" = "x86_64" ] ; then
730 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
731 LDFLAGS="-arch x86_64 $LDFLAGS"
734 audio_drv_list="coreaudio"
735 audio_possible_drivers="coreaudio sdl"
736 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
737 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
738 # Disable attempts to use ObjectiveC features in os/object.h since they
739 # won't work when we're compiling with gcc as a C compiler.
740 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
741 HOST_VARIANT_DIR="darwin"
747 install="${INSTALL-ginstall}"
749 smbd="${SMBD-/usr/sfw/sbin/smbd}"
750 needs_libsunmath="no"
751 solarisrev=$(uname -r | cut -f2 -d.)
752 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
753 if test "$solarisrev" -le 9 ; then
754 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
755 needs_libsunmath="yes"
756 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
757 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
758 LIBS="-lsunmath $LIBS"
760 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
761 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
762 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
763 "Studio 11 can be downloaded from www.sun.com."
767 if test -f /usr/include/sys/soundcard.h ; then
770 audio_possible_drivers="oss sdl"
771 # needed for CMSG_ macros in sys/socket.h
772 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
773 # needed for TIOCWIN* defines in termios.h
774 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
775 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
776 solarisnetlibs="-lsocket -lnsl -lresolv"
777 LIBS="$solarisnetlibs $LIBS"
778 libs_qga="$solarisnetlibs $libs_qga"
786 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
787 LIBS="-lposix_error_mapper -lnetwork $LIBS"
791 audio_possible_drivers="oss alsa sdl pa"
798 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
803 if [ "$bsd" = "yes" ] ; then
804 if [ "$darwin" != "yes" ] ; then
809 : ${make=${MAKE-make}}
810 : ${install=${INSTALL-install}}
811 : ${python=${PYTHON-python}}
812 : ${smbd=${SMBD-/usr/sbin/smbd}}
814 # Default objcc to clang if available, otherwise use CC
821 if test "$mingw32" = "yes" ; then
824 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
825 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
826 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
827 # MinGW needs -mthreads for TLS and macro _MT.
828 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
829 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
831 if compile_prog "" "-liberty" ; then
832 LIBS="-liberty $LIBS"
834 prefix="c:/Program Files/QEMU"
837 qemu_docdir="\${prefix}"
839 sysconfdir="\${prefix}"
842 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -liphlpapi -lnetapi32 $libs_qga"
848 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
850 --help|-h) show_help=yes
852 --version|-V) exec cat $source_path/VERSION
854 --prefix=*) prefix="$optarg"
856 --interp-prefix=*) interp_prefix="$optarg"
864 --host-cc=*) host_cc="$optarg"
868 --iasl=*) iasl="$optarg"
870 --objcc=*) objcc="$optarg"
872 --make=*) make="$optarg"
874 --install=*) install="$optarg"
876 --python=*) python="$optarg"
878 --gcov=*) gcov_tool="$optarg"
880 --smbd=*) smbd="$optarg"
890 --disable-debug-info)
900 --target-list=*) target_list="$optarg"
902 --enable-trace-backends=*) trace_backends="$optarg"
904 # XXX: backwards compatibility
905 --enable-trace-backend=*) trace_backends="$optarg"
907 --with-trace-file=*) trace_file="$optarg"
909 --enable-gprof) gprof="yes"
911 --enable-gcov) gcov="yes"
915 LDFLAGS="-static $LDFLAGS"
916 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
918 --mandir=*) mandir="$optarg"
920 --bindir=*) bindir="$optarg"
922 --libdir=*) libdir="$optarg"
924 --libexecdir=*) libexecdir="$optarg"
926 --includedir=*) includedir="$optarg"
928 --datadir=*) datadir="$optarg"
930 --with-confsuffix=*) confsuffix="$optarg"
932 --docdir=*) qemu_docdir="$optarg"
934 --sysconfdir=*) sysconfdir="$optarg"
936 --localstatedir=*) local_statedir="$optarg"
938 --sbindir=*|--sharedstatedir=*|\
939 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
940 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
941 # These switches are silently ignored, for compatibility with
942 # autoconf-generated configure scripts. This allows QEMU's
943 # configure to be used by RPM and similar macros that set
944 # lots of directory switches by default.
946 --with-system-pixman) pixman="system"
948 --without-system-pixman) pixman="internal"
950 --without-pixman) pixman="none"
952 --disable-sdl) sdl="no"
954 --enable-sdl) sdl="yes"
956 --with-sdlabi=*) sdlabi="$optarg"
958 --disable-qom-cast-debug) qom_cast_debug="no"
960 --enable-qom-cast-debug) qom_cast_debug="yes"
962 --disable-virtfs) virtfs="no"
964 --enable-virtfs) virtfs="yes"
966 --disable-vnc) vnc="no"
968 --enable-vnc) vnc="yes"
970 --oss-lib=*) oss_lib="$optarg"
972 --audio-drv-list=*) audio_drv_list="$optarg"
974 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
976 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
978 --enable-debug-tcg) debug_tcg="yes"
980 --disable-debug-tcg) debug_tcg="no"
983 # Enable debugging options that aren't excessively noisy
989 --enable-sparse) sparse="yes"
991 --disable-sparse) sparse="no"
993 --disable-strip) strip_opt="no"
995 --disable-vnc-sasl) vnc_sasl="no"
997 --enable-vnc-sasl) vnc_sasl="yes"
999 --disable-vnc-jpeg) vnc_jpeg="no"
1001 --enable-vnc-jpeg) vnc_jpeg="yes"
1003 --disable-vnc-png) vnc_png="no"
1005 --enable-vnc-png) vnc_png="yes"
1007 --disable-slirp) slirp="no"
1009 --disable-vde) vde="no"
1011 --enable-vde) vde="yes"
1013 --disable-netmap) netmap="no"
1015 --enable-netmap) netmap="yes"
1017 --disable-xen) xen="no"
1019 --enable-xen) xen="yes"
1021 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1023 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1025 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1027 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1029 --disable-brlapi) brlapi="no"
1031 --enable-brlapi) brlapi="yes"
1033 --disable-bluez) bluez="no"
1035 --enable-bluez) bluez="yes"
1037 --disable-kvm) kvm="no"
1039 --enable-kvm) kvm="yes"
1041 --disable-hax) hax="no"
1043 --enable-hax) hax="yes"
1045 --disable-tcg-interpreter) tcg_interpreter="no"
1047 --enable-tcg-interpreter) tcg_interpreter="yes"
1049 --disable-cap-ng) cap_ng="no"
1051 --enable-cap-ng) cap_ng="yes"
1053 --disable-tcg) tcg="no"
1055 --enable-tcg) tcg="yes"
1057 --disable-spice) spice="no"
1059 --enable-spice) spice="yes"
1061 --disable-libiscsi) libiscsi="no"
1063 --enable-libiscsi) libiscsi="yes"
1065 --disable-libnfs) libnfs="no"
1067 --enable-libnfs) libnfs="yes"
1069 --enable-profiler) profiler="yes"
1071 --disable-cocoa) cocoa="no"
1075 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1077 --disable-system) softmmu="no"
1079 --enable-system) softmmu="yes"
1086 --disable-linux-user) linux_user="no"
1088 --enable-linux-user) linux_user="yes"
1090 --disable-bsd-user) bsd_user="no"
1092 --enable-bsd-user) bsd_user="yes"
1094 --enable-pie) pie="yes"
1096 --disable-pie) pie="no"
1098 --enable-werror) werror="yes"
1100 --disable-werror) werror="no"
1102 --enable-stack-protector) stack_protector="yes"
1104 --disable-stack-protector) stack_protector="no"
1106 --disable-curses) curses="no"
1108 --enable-curses) curses="yes"
1110 --disable-curl) curl="no"
1112 --enable-curl) curl="yes"
1114 --disable-fdt) fdt="no"
1116 --enable-fdt) fdt="yes"
1118 --disable-linux-aio) linux_aio="no"
1120 --enable-linux-aio) linux_aio="yes"
1122 --disable-attr) attr="no"
1124 --enable-attr) attr="yes"
1126 --disable-blobs) blobs="no"
1128 --with-pkgversion=*) pkgversion=" ($optarg)"
1130 --with-coroutine=*) coroutine="$optarg"
1132 --disable-coroutine-pool) coroutine_pool="no"
1134 --enable-coroutine-pool) coroutine_pool="yes"
1136 --enable-debug-stack-usage) debug_stack_usage="yes"
1138 --enable-crypto-afalg) crypto_afalg="yes"
1140 --disable-crypto-afalg) crypto_afalg="no"
1142 --disable-docs) docs="no"
1144 --enable-docs) docs="yes"
1146 --disable-vhost-net) vhost_net="no"
1148 --enable-vhost-net) vhost_net="yes"
1150 --disable-vhost-scsi) vhost_scsi="no"
1152 --enable-vhost-scsi) vhost_scsi="yes"
1154 --disable-vhost-vsock) vhost_vsock="no"
1156 --enable-vhost-vsock) vhost_vsock="yes"
1158 --disable-opengl) opengl="no"
1160 --enable-opengl) opengl="yes"
1162 --disable-rbd) rbd="no"
1164 --enable-rbd) rbd="yes"
1166 --disable-xfsctl) xfs="no"
1168 --enable-xfsctl) xfs="yes"
1170 --disable-smartcard) smartcard="no"
1172 --enable-smartcard) smartcard="yes"
1174 --disable-libusb) libusb="no"
1176 --enable-libusb) libusb="yes"
1178 --disable-usb-redir) usb_redir="no"
1180 --enable-usb-redir) usb_redir="yes"
1182 --disable-zlib-test) zlib="no"
1184 --disable-lzo) lzo="no"
1186 --enable-lzo) lzo="yes"
1188 --disable-snappy) snappy="no"
1190 --enable-snappy) snappy="yes"
1192 --disable-bzip2) bzip2="no"
1194 --enable-bzip2) bzip2="yes"
1196 --enable-guest-agent) guest_agent="yes"
1198 --disable-guest-agent) guest_agent="no"
1200 --enable-guest-agent-msi) guest_agent_msi="yes"
1202 --disable-guest-agent-msi) guest_agent_msi="no"
1204 --with-vss-sdk) vss_win32_sdk=""
1206 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1208 --without-vss-sdk) vss_win32_sdk="no"
1210 --with-win-sdk) win_sdk=""
1212 --with-win-sdk=*) win_sdk="$optarg"
1214 --without-win-sdk) win_sdk="no"
1216 --enable-tools) want_tools="yes"
1218 --disable-tools) want_tools="no"
1220 --enable-seccomp) seccomp="yes"
1222 --disable-seccomp) seccomp="no"
1224 --disable-glusterfs) glusterfs="no"
1226 --enable-glusterfs) glusterfs="yes"
1228 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1229 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1231 --enable-vhdx|--disable-vhdx)
1232 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1234 --enable-uuid|--disable-uuid)
1235 echo "$0: $opt is obsolete, UUID support is always built" >&2
1237 --disable-gtk) gtk="no"
1239 --enable-gtk) gtk="yes"
1241 --tls-priority=*) tls_priority="$optarg"
1243 --disable-gnutls) gnutls="no"
1245 --enable-gnutls) gnutls="yes"
1247 --disable-nettle) nettle="no"
1249 --enable-nettle) nettle="yes"
1251 --disable-gcrypt) gcrypt="no"
1253 --enable-gcrypt) gcrypt="yes"
1255 --enable-rdma) rdma="yes"
1257 --disable-rdma) rdma="no"
1259 --with-gtkabi=*) gtkabi="$optarg"
1261 --disable-vte) vte="no"
1263 --enable-vte) vte="yes"
1265 --disable-virglrenderer) virglrenderer="no"
1267 --enable-virglrenderer) virglrenderer="yes"
1269 --disable-tpm) tpm="no"
1271 --enable-tpm) tpm="yes"
1273 --disable-libssh2) libssh2="no"
1275 --enable-libssh2) libssh2="yes"
1277 --disable-live-block-migration) live_block_migration="no"
1279 --enable-live-block-migration) live_block_migration="yes"
1281 --disable-numa) numa="no"
1283 --enable-numa) numa="yes"
1285 --disable-tcmalloc) tcmalloc="no"
1287 --enable-tcmalloc) tcmalloc="yes"
1289 --disable-jemalloc) jemalloc="no"
1291 --enable-jemalloc) jemalloc="yes"
1293 --disable-replication) replication="no"
1295 --enable-replication) replication="yes"
1297 --disable-vxhs) vxhs="no"
1299 --enable-vxhs) vxhs="yes"
1302 echo "ERROR: unknown option $opt"
1303 echo "Try '$0 --help' for more information"
1312 LDFLAGS="-m32 $LDFLAGS"
1316 LDFLAGS="-m64 $LDFLAGS"
1319 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1320 LDFLAGS="-m32 -mv8plus $LDFLAGS"
1323 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1324 LDFLAGS="-m64 $LDFLAGS"
1328 LDFLAGS="-m31 $LDFLAGS"
1332 LDFLAGS="-m64 $LDFLAGS"
1336 LDFLAGS="-m32 $LDFLAGS"
1337 cc_i386='$(CC) -m32'
1340 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1341 # If we truly care, we should simply detect this case at
1342 # runtime and generate the fallback to serial emulation.
1343 CPU_CFLAGS="-m64 -mcx16"
1344 LDFLAGS="-m64 $LDFLAGS"
1345 cc_i386='$(CC) -m32'
1349 LDFLAGS="-mx32 $LDFLAGS"
1350 cc_i386='$(CC) -m32'
1352 # No special flags required for other host CPUs
1355 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1356 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1358 # For user-mode emulation the host arch has to be one we explicitly
1359 # support, even if we're using TCI.
1360 if [ "$ARCH" = "unknown" ]; then
1365 default_target_list=""
1369 if [ "$softmmu" = "yes" ]; then
1370 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1372 if [ "$linux_user" = "yes" ]; then
1373 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1375 if [ "$bsd_user" = "yes" ]; then
1376 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1379 for config in $mak_wilds; do
1380 default_target_list="${default_target_list} $(basename "$config" .mak)"
1383 # Enumerate public trace backends for --help output
1384 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1386 if test x"$show_help" = x"yes" ; then
1389 Usage: configure [options]
1390 Options: [defaults in brackets after descriptions]
1393 --help print this message
1394 --prefix=PREFIX install in PREFIX [$prefix]
1395 --interp-prefix=PREFIX where to find shared libraries, etc.
1396 use %M for cpu name [$interp_prefix]
1397 --target-list=LIST set target list (default: build everything)
1398 $(echo Available targets: $default_target_list | \
1399 fold -s -w 53 | sed -e 's/^/ /')
1401 Advanced options (experts only):
1402 --source-path=PATH path of source code [$source_path]
1403 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1404 --cc=CC use C compiler CC [$cc]
1405 --iasl=IASL use ACPI compiler IASL [$iasl]
1406 --host-cc=CC use C compiler CC [$host_cc] for code run at
1408 --cxx=CXX use C++ compiler CXX [$cxx]
1409 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1410 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1411 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1412 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1413 --make=MAKE use specified make [$make]
1414 --install=INSTALL use specified install [$install]
1415 --python=PYTHON use specified python [$python]
1416 --smbd=SMBD use specified smbd [$smbd]
1417 --static enable static build [$static]
1418 --mandir=PATH install man pages in PATH
1419 --datadir=PATH install firmware in PATH$confsuffix
1420 --docdir=PATH install documentation in PATH$confsuffix
1421 --bindir=PATH install binaries in PATH
1422 --libdir=PATH install libraries in PATH
1423 --sysconfdir=PATH install config in PATH$confsuffix
1424 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1425 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1426 --enable-debug enable common debug build options
1427 --disable-strip disable stripping binaries
1428 --disable-werror disable compilation abort on warning
1429 --disable-stack-protector disable compiler-provided stack protection
1430 --audio-drv-list=LIST set audio drivers list:
1431 Available drivers: $audio_possible_drivers
1432 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1433 --block-drv-rw-whitelist=L
1434 set block driver read-write whitelist
1435 (affects only QEMU, not qemu-img)
1436 --block-drv-ro-whitelist=L
1437 set block driver read-only whitelist
1438 (affects only QEMU, not qemu-img)
1439 --enable-trace-backends=B Set trace backend
1440 Available backends: $trace_backend_list
1441 --with-trace-file=NAME Full PATH,NAME of file to store traces
1443 --disable-slirp disable SLIRP userspace network connectivity
1444 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1445 --oss-lib path to OSS library
1446 --cpu=CPU Build for host CPU [$cpu]
1447 --with-coroutine=BACKEND coroutine backend. Supported options:
1448 ucontext, sigaltstack, windows
1449 --enable-gcov enable test coverage analysis with gcov
1450 --gcov=GCOV use specified gcov [$gcov_tool]
1451 --disable-blobs disable installing provided firmware blobs
1452 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1453 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1454 --tls-priority default TLS protocol/cipher priority string
1455 --enable-gprof QEMU profiling with gprof
1456 --enable-profiler profiler support
1457 --enable-xen-pv-domain-build
1458 xen pv domain builder
1459 --enable-debug-stack-usage
1460 track the maximum stack usage of stacks created by qemu_alloc_stack
1462 Optional features, enabled with --enable-FEATURE and
1463 disabled with --disable-FEATURE, default is enabled if available:
1465 system all system emulation targets
1466 user supported user emulation targets
1467 linux-user all linux usermode emulation targets
1468 bsd-user all BSD usermode emulation targets
1469 docs build documentation
1470 guest-agent build the QEMU Guest Agent
1471 guest-agent-msi build guest agent Windows MSI installation package
1472 pie Position Independent Executables
1473 modules modules support
1474 debug-tcg TCG debugging (default is disabled)
1475 debug-info debugging information
1476 sparse sparse checker
1478 gnutls GNUTLS cryptography support
1479 nettle nettle cryptography support
1480 gcrypt libgcrypt cryptography support
1482 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1484 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1485 vte vte support for the gtk UI
1488 vnc-sasl SASL encryption for VNC server
1489 vnc-jpeg JPEG lossy compression for VNC server
1490 vnc-png PNG compression for VNC server
1491 cocoa Cocoa UI (Mac OS X only)
1493 xen xen backend driver support
1495 brlapi BrlAPI (Braile)
1496 curl curl connectivity
1498 bluez bluez stack connectivity
1499 kvm KVM acceleration support
1500 hax HAX acceleration support
1501 rdma RDMA-based migration support
1502 vde support for vde network
1503 netmap support for netmap network
1504 linux-aio Linux AIO support
1505 cap-ng libcap-ng support
1506 attr attr and xattr support
1507 vhost-net vhost-net acceleration support
1509 rbd rados block device (rbd)
1510 libiscsi iscsi support
1512 smartcard smartcard support (libcacard)
1513 libusb libusb (for usb passthrough)
1514 live-block-migration Block migration in the main migration stream
1515 usb-redir usb network redirection support
1516 lzo support of lzo compression library
1517 snappy support of snappy compression library
1518 bzip2 support of bzip2 compression library
1519 (for reading bzip2-compressed dmg images)
1520 seccomp seccomp support
1521 coroutine-pool coroutine freelist (better performance)
1522 glusterfs GlusterFS backend
1524 libssh2 ssh block device support
1525 numa libnuma support
1526 tcmalloc tcmalloc support
1527 jemalloc jemalloc support
1528 replication replication support
1529 vhost-vsock virtio sockets device support
1530 opengl opengl support
1531 virglrenderer virgl rendering support
1532 xfsctl xfsctl support
1533 qom-cast-debug cast debugging support
1534 tools build qemu-io, qemu-nbd and qemu-image tools
1535 vxhs Veritas HyperScale vDisk backend support
1536 crypto-afalg Linux AF_ALG crypto backend driver
1538 NOTE: The object files are built at the place where configure is launched
1543 if ! has $python; then
1544 error_exit "Python not found. Use --python=/path/to/python"
1547 # Note that if the Python conditional here evaluates True we will exit
1548 # with status 1 which is a shell 'false' value.
1549 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1550 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1551 "Note that Python 3 or later is not yet supported." \
1552 "Use --python=/path/to/python to specify a supported Python."
1555 # Suppress writing compiled files
1558 # Now we have handled --enable-tcg-interpreter and know we're not just
1559 # printing the help message, bail out if the host CPU isn't supported.
1560 if test "$ARCH" = "unknown"; then
1561 if test "$tcg_interpreter" = "yes" ; then
1562 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1564 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1568 # Consult white-list to determine whether to enable werror
1569 # by default. Only enable by default for git builds
1570 if test -z "$werror" ; then
1571 if test -d "$source_path/.git" -a \
1572 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1579 # check that the C compiler works.
1581 if compile_object ; then
1582 : C compiler works ok
1584 error_exit "\"$cc\" either does not exist or does not work"
1586 if ! compile_prog ; then
1587 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1590 if test "$bogus_os" = "yes"; then
1591 # Now that we know that we're not printing the help and that
1592 # the compiler works (so the results of the check_defines we used
1593 # to identify the OS are reliable), if we didn't recognize the
1594 # host OS we should stop now.
1595 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1598 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1599 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1600 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1601 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1602 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1603 gcc_flags="-Wno-string-plus-int $gcc_flags"
1604 # Note that we do not add -Werror to gcc_flags here, because that would
1605 # enable it for all configure tests. If a configure test failed due
1606 # to -Werror this would just silently disable some features,
1607 # so it's too error prone.
1609 cc_has_warning_flag() {
1612 # Use the positive sense of the flag when testing for -Wno-wombat
1613 # support (gcc will happily accept the -Wno- form of unknown
1615 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1616 compile_prog "-Werror $optflag" ""
1619 for flag in $gcc_flags; do
1620 if cc_has_warning_flag $flag ; then
1621 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1625 if test "$stack_protector" != "no"; then
1627 int main(int argc, char *argv[])
1629 char arr[64], *p = arr, *c = argv[0];
1636 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1638 for flag in $gcc_flags; do
1639 # We need to check both a compile and a link, since some compiler
1640 # setups fail only on a .c->.o compile and some only at link time
1641 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1642 compile_prog "-Werror $flag" ""; then
1643 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1648 if test "$stack_protector" = yes; then
1649 if test $sp_on = 0; then
1650 error_exit "Stack protector not supported"
1655 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1656 # large functions that use global variables. The bug is in all releases of
1657 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1658 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1660 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1661 int main(void) { return 0; }
1663 #error No bug in this compiler.
1666 if compile_prog "-Werror -fno-gcse" "" ; then
1667 TRANSLATE_OPT_CFLAGS=-fno-gcse
1670 if test "$static" = "yes" ; then
1671 if test "$modules" = "yes" ; then
1672 error_exit "static and modules are mutually incompatible"
1674 if test "$pie" = "yes" ; then
1675 error_exit "static and pie are mutually incompatible"
1681 # Unconditional check for compiler __thread support
1683 static __thread int tls_var;
1684 int main(void) { return tls_var; }
1687 if ! compile_prog "-Werror" "" ; then
1688 error_exit "Your compiler does not support the __thread specifier for " \
1689 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1692 if test "$pie" = ""; then
1693 case "$cpu-$targetos" in
1694 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1702 if test "$pie" != "no" ; then
1706 # define THREAD __thread
1711 static THREAD int tls_var;
1713 int main(void) { return tls_var; }
1716 if compile_prog "-fPIE -DPIE" "-pie"; then
1717 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1718 LDFLAGS="-pie $LDFLAGS"
1720 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1721 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1724 if test "$pie" = "yes"; then
1725 error_exit "PIE not available due to missing toolchain support"
1727 echo "Disabling PIE due to missing toolchain support"
1732 if compile_prog "-Werror -fno-pie" "-nopie"; then
1733 CFLAGS_NOPIE="-fno-pie"
1734 LDFLAGS_NOPIE="-nopie"
1738 ##########################################
1739 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1740 # use i686 as default anyway, but for those that don't, an explicit
1741 # specification is necessary
1743 if test "$cpu" = "i386"; then
1745 static int sfaa(int *ptr)
1747 return __sync_fetch_and_and(ptr, 0);
1753 val = __sync_val_compare_and_swap(&val, 0, 1);
1758 if ! compile_prog "" "" ; then
1759 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1763 #########################################
1764 # Solaris specific configure tool chain decisions
1766 if test "$solaris" = "yes" ; then
1767 if has $install; then
1770 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1771 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1772 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1774 if test "$(path_of $install)" = "/usr/sbin/install" ; then
1775 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1776 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1777 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1782 if test -f /usr/ccs/bin/ar ; then
1783 error_exit "No path includes ar" \
1784 "Add /usr/ccs/bin to your path and rerun configure"
1786 error_exit "No path includes ar"
1790 if test -z "${target_list+xxx}" ; then
1791 for target in $default_target_list; do
1792 supported_target $target 2>/dev/null && \
1793 target_list="$target_list $target"
1795 target_list="${target_list# }"
1797 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1798 for target in $target_list; do
1799 # Check that we recognised the target name; this allows a more
1800 # friendly error message than if we let it fall through.
1801 case " $default_target_list " in
1805 error_exit "Unknown target name '$target'"
1808 supported_target $target || exit 1
1812 # see if system emulation was really requested
1813 case " $target_list " in
1814 *"-softmmu "*) softmmu=yes
1820 feature_not_found() {
1824 error_exit "User requested feature $feature" \
1825 "configure was not able to find it." \
1830 # big/little endian test
1832 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1833 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1834 extern int foo(short *, short *);
1835 int main(int argc, char *argv[]) {
1836 return foo(big_endian, little_endian);
1840 if compile_object ; then
1841 if grep -q BiGeNdIaN $TMPO ; then
1843 elif grep -q LiTtLeEnDiAn $TMPO ; then
1846 echo big/little test failed
1849 echo big/little test failed
1852 ##########################################
1853 # cocoa implies not SDL or GTK
1854 # (the cocoa UI code currently assumes it is always the active UI
1855 # and doesn't interact well with other UI frontend code)
1856 if test "$cocoa" = "yes"; then
1857 if test "$sdl" = "yes"; then
1858 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1860 if test "$gtk" = "yes"; then
1861 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1867 # Some versions of Mac OS X incorrectly define SIZE_MAX
1871 int main(int argc, char *argv[]) {
1872 return printf("%zu", SIZE_MAX);
1875 have_broken_size_max=no
1876 if ! compile_object -Werror ; then
1877 have_broken_size_max=yes
1880 ##########################################
1884 #include <sys/socket.h>
1885 #include <linux/ip.h>
1886 int main(void) { return sizeof(struct mmsghdr); }
1888 if compile_prog "" "" ; then
1894 ##########################################
1895 # MinGW / Mingw-w64 localtime_r/gmtime_r check
1897 if test "$mingw32" = "yes"; then
1898 # Some versions of MinGW / Mingw-w64 lack localtime_r
1899 # and gmtime_r entirely.
1901 # Some versions of Mingw-w64 define a macro for
1902 # localtime_r/gmtime_r.
1904 # Some versions of Mingw-w64 will define functions
1905 # for localtime_r/gmtime_r, but only if you have
1906 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1907 # though, unistd.h and pthread.h both define
1910 # So this #undef localtime_r and #include <unistd.h>
1911 # are not in fact redundant.
1916 int main(void) { localtime_r(NULL, NULL); return 0; }
1918 if compile_prog "" "" ; then
1925 ##########################################
1928 if ! has "$pkg_config_exe"; then
1929 error_exit "pkg-config binary '$pkg_config_exe' not found"
1932 ##########################################
1935 if test "$linux_user" = "yes"; then
1938 #include <linux/futex.h>
1940 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1946 if ! compile_object ; then
1947 feature_not_found "nptl" "Install glibc and linux kernel headers."
1951 ##########################################
1952 # avx2 optimization requirement check
1955 #pragma GCC push_options
1956 #pragma GCC target("avx2")
1958 #include <immintrin.h>
1959 static int bar(void *a) {
1960 __m256i x = *(__m256i *)a;
1961 return _mm256_testz_si256(x, x);
1963 int main(int argc, char *argv[]) { return bar(argv[0]); }
1965 if compile_object "" ; then
1969 #########################################
1972 if test "$zlib" != "no" ; then
1975 int main(void) { zlibVersion(); return 0; }
1977 if compile_prog "" "-lz" ; then
1980 error_exit "zlib check failed" \
1981 "Make sure to have the zlib libs and headers installed."
1986 ##########################################
1989 if test "$lzo" != "no" ; then
1991 #include <lzo/lzo1x.h>
1992 int main(void) { lzo_version(); return 0; }
1994 if compile_prog "" "-llzo2" ; then
1995 libs_softmmu="$libs_softmmu -llzo2"
1998 if test "$lzo" = "yes"; then
1999 feature_not_found "liblzo2" "Install liblzo2 devel"
2005 ##########################################
2008 if test "$snappy" != "no" ; then
2010 #include <snappy-c.h>
2011 int main(void) { snappy_max_compressed_length(4096); return 0; }
2013 if compile_prog "" "-lsnappy" ; then
2014 libs_softmmu="$libs_softmmu -lsnappy"
2017 if test "$snappy" = "yes"; then
2018 feature_not_found "libsnappy" "Install libsnappy devel"
2024 ##########################################
2027 if test "$bzip2" != "no" ; then
2030 int main(void) { BZ2_bzlibVersion(); return 0; }
2032 if compile_prog "" "-lbz2" ; then
2035 if test "$bzip2" = "yes"; then
2036 feature_not_found "libbzip2" "Install libbzip2 devel"
2042 ##########################################
2045 if test "$seccomp" != "no" ; then
2048 libseccomp_minver="2.1.0"
2051 libseccomp_minver="2.2.0"
2054 libseccomp_minver="2.2.3"
2057 libseccomp_minver="2.3.0"
2060 libseccomp_minver=""
2064 if test "$libseccomp_minver" != "" &&
2065 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2066 libs_softmmu="$libs_softmmu $($pkg_config --libs libseccomp)"
2067 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libseccomp)"
2070 if test "$seccomp" = "yes" ; then
2071 if test "$libseccomp_minver" != "" ; then
2072 feature_not_found "libseccomp" \
2073 "Install libseccomp devel >= $libseccomp_minver"
2075 feature_not_found "libseccomp" \
2076 "libseccomp is not supported for host cpu $cpu"
2082 ##########################################
2085 if test "$xen" != "no" ; then
2086 # Check whether Xen library path is specified via --extra-ldflags to avoid
2087 # overriding this setting with pkg-config output. If not, try pkg-config
2088 # to obtain all needed flags.
2090 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2091 $pkg_config --exists xencontrol ; then
2092 xen_ctrl_version="$(printf '%d%02d%02d' \
2093 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2095 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2096 xen_pc="$xen_pc xenevtchn xendevicemodel"
2097 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2098 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2099 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2102 xen_libs="-lxenstore -lxenctrl -lxenguest"
2103 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2105 # First we test whether Xen headers and libraries are available.
2106 # If no, we are done and there is no Xen support.
2107 # If yes, more tests are run to detect the Xen version.
2111 #include <xenctrl.h>
2116 if ! compile_prog "" "$xen_libs" ; then
2118 if test "$xen" = "yes" ; then
2119 feature_not_found "xen" "Install xen devel"
2125 cat > $TMPC <<EOF &&
2126 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2127 #include <xenforeignmemory.h>
2129 xenforeignmemory_handle *xfmem;
2131 xfmem = xenforeignmemory_open(0, 0);
2132 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2137 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2139 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2140 xen_ctrl_version=41000
2143 cat > $TMPC <<EOF &&
2144 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2145 #define __XEN_TOOLS__
2146 #include <xendevicemodel.h>
2148 xendevicemodel_handle *xd;
2150 xd = xendevicemodel_open(0, 0);
2151 xendevicemodel_close(xd);
2156 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2158 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2159 xen_ctrl_version=40900
2162 cat > $TMPC <<EOF &&
2164 * If we have stable libs the we don't want the libxc compat
2165 * layers, regardless of what CFLAGS we may have been given.
2167 * Also, check if xengnttab_grant_copy_segment_t is defined and
2168 * grant copy operation is implemented.
2170 #undef XC_WANT_COMPAT_EVTCHN_API
2171 #undef XC_WANT_COMPAT_GNTTAB_API
2172 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2173 #include <xenctrl.h>
2174 #include <xenstore.h>
2175 #include <xenevtchn.h>
2176 #include <xengnttab.h>
2177 #include <xenforeignmemory.h>
2179 #include <xen/hvm/hvm_info_table.h>
2180 #if !defined(HVM_MAX_VCPUS)
2181 # error HVM_MAX_VCPUS not defined
2184 xc_interface *xc = NULL;
2185 xenforeignmemory_handle *xfmem;
2186 xenevtchn_handle *xe;
2187 xengnttab_handle *xg;
2188 xen_domain_handle_t handle;
2189 xengnttab_grant_copy_segment_t* seg = NULL;
2193 xc = xc_interface_open(0, 0, 0);
2194 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2195 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2196 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2197 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2198 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2200 xfmem = xenforeignmemory_open(0, 0);
2201 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2203 xe = xenevtchn_open(0, 0);
2206 xg = xengnttab_open(0, 0);
2207 xengnttab_grant_copy(xg, 0, seg);
2212 compile_prog "" "$xen_libs $xen_stable_libs"
2214 xen_ctrl_version=40800
2217 cat > $TMPC <<EOF &&
2219 * If we have stable libs the we don't want the libxc compat
2220 * layers, regardless of what CFLAGS we may have been given.
2222 #undef XC_WANT_COMPAT_EVTCHN_API
2223 #undef XC_WANT_COMPAT_GNTTAB_API
2224 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2225 #include <xenctrl.h>
2226 #include <xenstore.h>
2227 #include <xenevtchn.h>
2228 #include <xengnttab.h>
2229 #include <xenforeignmemory.h>
2231 #include <xen/hvm/hvm_info_table.h>
2232 #if !defined(HVM_MAX_VCPUS)
2233 # error HVM_MAX_VCPUS not defined
2236 xc_interface *xc = NULL;
2237 xenforeignmemory_handle *xfmem;
2238 xenevtchn_handle *xe;
2239 xengnttab_handle *xg;
2240 xen_domain_handle_t handle;
2244 xc = xc_interface_open(0, 0, 0);
2245 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2246 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2247 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2248 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2249 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2251 xfmem = xenforeignmemory_open(0, 0);
2252 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2254 xe = xenevtchn_open(0, 0);
2257 xg = xengnttab_open(0, 0);
2258 xengnttab_map_grant_ref(xg, 0, 0, 0);
2263 compile_prog "" "$xen_libs $xen_stable_libs"
2265 xen_ctrl_version=40701
2268 cat > $TMPC <<EOF &&
2269 #include <xenctrl.h>
2272 xc_interface *xc = NULL;
2273 xen_domain_handle_t handle;
2274 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2278 compile_prog "" "$xen_libs"
2280 xen_ctrl_version=40700
2285 cat > $TMPC <<EOF &&
2286 #include <xenctrl.h>
2287 #include <xenstore.h>
2289 #include <xen/hvm/hvm_info_table.h>
2290 #if !defined(HVM_MAX_VCPUS)
2291 # error HVM_MAX_VCPUS not defined
2296 xc = xc_interface_open(0, 0, 0);
2297 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2298 xc_gnttab_open(NULL, 0);
2299 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2300 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2301 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2302 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2306 compile_prog "" "$xen_libs"
2308 xen_ctrl_version=40600
2313 cat > $TMPC <<EOF &&
2314 #include <xenctrl.h>
2315 #include <xenstore.h>
2317 #include <xen/hvm/hvm_info_table.h>
2318 #if !defined(HVM_MAX_VCPUS)
2319 # error HVM_MAX_VCPUS not defined
2324 xc = xc_interface_open(0, 0, 0);
2325 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2326 xc_gnttab_open(NULL, 0);
2327 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2328 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2329 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2333 compile_prog "" "$xen_libs"
2335 xen_ctrl_version=40500
2339 cat > $TMPC <<EOF &&
2340 #include <xenctrl.h>
2341 #include <xenstore.h>
2343 #include <xen/hvm/hvm_info_table.h>
2344 #if !defined(HVM_MAX_VCPUS)
2345 # error HVM_MAX_VCPUS not defined
2350 xc = xc_interface_open(0, 0, 0);
2351 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2352 xc_gnttab_open(NULL, 0);
2353 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2354 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2358 compile_prog "" "$xen_libs"
2360 xen_ctrl_version=40200
2364 if test "$xen" = "yes" ; then
2365 feature_not_found "xen (unsupported version)" \
2366 "Install a supported xen (xen 4.2 or newer)"
2371 if test "$xen" = yes; then
2372 if test $xen_ctrl_version -ge 40701 ; then
2373 libs_softmmu="$xen_stable_libs $libs_softmmu"
2375 libs_softmmu="$xen_libs $libs_softmmu"
2380 if test "$xen_pci_passthrough" != "no"; then
2381 if test "$xen" = "yes" && test "$linux" = "yes"; then
2382 xen_pci_passthrough=yes
2384 if test "$xen_pci_passthrough" = "yes"; then
2385 error_exit "User requested feature Xen PCI Passthrough" \
2386 " but this feature requires /sys from Linux"
2388 xen_pci_passthrough=no
2392 if test "$xen_pv_domain_build" = "yes" &&
2393 test "$xen" != "yes"; then
2394 error_exit "User requested Xen PV domain builder support" \
2395 "which requires Xen support."
2398 ##########################################
2400 if test "$sparse" != "no" ; then
2404 if test "$sparse" = "yes" ; then
2405 feature_not_found "sparse" "Install sparse binary"
2411 ##########################################
2415 if $pkg_config --exists "x11"; then
2416 x11_cflags=$($pkg_config --cflags x11)
2417 x11_libs=$($pkg_config --libs x11)
2420 ##########################################
2423 if test "$gtkabi" = ""; then
2424 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2425 # Use 2.0 as a fallback if that is available.
2426 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2428 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2435 if test "$gtk" != "no"; then
2436 gtkpackage="gtk+-$gtkabi"
2437 gtkx11package="gtk+-x11-$gtkabi"
2438 if test "$gtkabi" = "3.0" ; then
2443 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2444 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2445 gtk_libs=$($pkg_config --libs $gtkpackage)
2446 gtk_version=$($pkg_config --modversion $gtkpackage)
2447 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2448 gtk_cflags="$gtk_cflags $x11_cflags"
2449 gtk_libs="$gtk_libs $x11_libs"
2451 libs_softmmu="$gtk_libs $libs_softmmu"
2453 elif test "$gtk" = "yes"; then
2454 feature_not_found "gtk" "Install gtk3-devel"
2461 ##########################################
2465 # Unfortunately some distros have bad pkg-config information for gnutls
2466 # such that it claims to exist but you get a compiler error if you try
2467 # to use the options returned by --libs. Specifically, Ubuntu for --static
2468 # builds doesn't work:
2469 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2471 # So sanity check the cflags/libs before assuming gnutls can be used.
2472 if ! $pkg_config --exists "gnutls"; then
2477 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2482 if test "$gnutls" != "no"; then
2483 if gnutls_works; then
2484 gnutls_cflags=$($pkg_config --cflags gnutls)
2485 gnutls_libs=$($pkg_config --libs gnutls)
2486 libs_softmmu="$gnutls_libs $libs_softmmu"
2487 libs_tools="$gnutls_libs $libs_tools"
2488 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2491 # gnutls_rnd requires >= 2.11.0
2492 if $pkg_config --exists "gnutls >= 2.11.0"; then
2498 if $pkg_config --exists 'gnutls >= 3.0'; then
2501 elif $pkg_config --exists 'gnutls >= 2.12'; then
2502 case $($pkg_config --libs --static gnutls) in
2520 elif test "$gnutls" = "yes"; then
2521 feature_not_found "gnutls" "Install gnutls devel"
2531 # If user didn't give a --disable/enable-gcrypt flag,
2532 # then mark as disabled if user requested nettle
2533 # explicitly, or if gnutls links to nettle
2534 if test -z "$gcrypt"
2536 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2542 # If user didn't give a --disable/enable-nettle flag,
2543 # then mark as disabled if user requested gcrypt
2544 # explicitly, or if gnutls links to gcrypt
2545 if test -z "$nettle"
2547 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2553 has_libgcrypt_config() {
2554 if ! has "libgcrypt-config"
2559 if test -n "$cross_prefix"
2561 host=$(libgcrypt-config --host)
2562 if test "$host-" != $cross_prefix
2571 if test "$gcrypt" != "no"; then
2572 if has_libgcrypt_config; then
2573 gcrypt_cflags=$(libgcrypt-config --cflags)
2574 gcrypt_libs=$(libgcrypt-config --libs)
2575 # Debian has remove -lgpg-error from libgcrypt-config
2576 # as it "spreads unnecessary dependencies" which in
2577 # turn breaks static builds...
2578 if test "$static" = "yes"
2580 gcrypt_libs="$gcrypt_libs -lgpg-error"
2582 libs_softmmu="$gcrypt_libs $libs_softmmu"
2583 libs_tools="$gcrypt_libs $libs_tools"
2584 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2586 if test -z "$nettle"; then
2593 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2595 NULL, 0, 0, 0, NULL);
2599 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2606 gcry_mac_hd_t handle;
2607 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2608 GCRY_MAC_FLAG_SECURE, NULL);
2612 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2616 if test "$gcrypt" = "yes"; then
2617 feature_not_found "gcrypt" "Install gcrypt devel"
2625 if test "$nettle" != "no"; then
2626 if $pkg_config --exists "nettle"; then
2627 nettle_cflags=$($pkg_config --cflags nettle)
2628 nettle_libs=$($pkg_config --libs nettle)
2629 nettle_version=$($pkg_config --modversion nettle)
2630 libs_softmmu="$nettle_libs $libs_softmmu"
2631 libs_tools="$nettle_libs $libs_tools"
2632 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2637 #include <nettle/pbkdf2.h>
2639 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2643 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2647 if test "$nettle" = "yes"; then
2648 feature_not_found "nettle" "Install nettle devel"
2655 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2657 error_exit "Only one of gcrypt & nettle can be enabled"
2660 ##########################################
2661 # libtasn1 - only for the TLS creds/session test suite
2666 if $pkg_config --exists "libtasn1"; then
2667 tasn1_cflags=$($pkg_config --cflags libtasn1)
2668 tasn1_libs=$($pkg_config --libs libtasn1)
2674 ##########################################
2675 # getifaddrs (for tests/test-io-channel-socket )
2678 if ! check_include "ifaddrs.h" ; then
2682 ##########################################
2685 if test "$vte" != "no"; then
2686 if test "$gtkabi" = "3.0"; then
2687 vteminversion="0.32.0"
2688 if $pkg_config --exists "vte-2.91"; then
2689 vtepackage="vte-2.91"
2691 vtepackage="vte-2.90"
2695 vteminversion="0.24.0"
2697 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2698 vte_cflags=$($pkg_config --cflags $vtepackage)
2699 vte_libs=$($pkg_config --libs $vtepackage)
2700 vteversion=$($pkg_config --modversion $vtepackage)
2701 libs_softmmu="$vte_libs $libs_softmmu"
2703 elif test "$vte" = "yes"; then
2704 if test "$gtkabi" = "3.0"; then
2705 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2707 feature_not_found "vte" "Install libvte devel"
2714 ##########################################
2717 # Look for sdl configuration program (pkg-config or sdl-config). Try
2718 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2720 if test "$sdlabi" = ""; then
2721 if $pkg_config --exists "sdl2"; then
2723 elif $pkg_config --exists "sdl"; then
2730 if test $sdlabi = "2.0"; then
2731 sdl_config=$sdl2_config
2733 sdlconfigname=sdl2_config
2734 elif test $sdlabi = "1.2"; then
2736 sdlconfigname=sdl_config
2738 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2741 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2742 sdl_config=$sdlconfigname
2745 if $pkg_config $sdlname --exists; then
2746 sdlconfig="$pkg_config $sdlname"
2747 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2748 elif has ${sdl_config}; then
2749 sdlconfig="$sdl_config"
2750 sdlversion=$($sdlconfig --version)
2752 if test "$sdl" = "yes" ; then
2753 feature_not_found "sdl" "Install SDL2-devel"
2757 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2758 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2762 if test "$sdl" != "no" ; then
2765 #undef main /* We don't want SDL to override our main() */
2766 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2768 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2769 if test "$static" = "yes" ; then
2770 if $pkg_config $sdlname --exists; then
2771 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2773 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2776 sdl_libs=$($sdlconfig --libs 2>/dev/null)
2778 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2779 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2785 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2786 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2787 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2788 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2789 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2791 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2797 else # sdl not found
2798 if test "$sdl" = "yes" ; then
2799 feature_not_found "sdl" "Install SDL devel"
2802 fi # sdl compile test
2805 if test "$sdl" = "yes" ; then
2808 #if defined(SDL_VIDEO_DRIVER_X11)
2809 #include <X11/XKBlib.h>
2811 #error No x11 support
2813 int main(void) { return 0; }
2815 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2816 sdl_cflags="$sdl_cflags $x11_cflags"
2817 sdl_libs="$sdl_libs $x11_libs"
2819 libs_softmmu="$sdl_libs $libs_softmmu"
2822 ##########################################
2823 # RDMA needs OpenFabrics libraries
2824 if test "$rdma" != "no" ; then
2826 #include <rdma/rdma_cma.h>
2827 int main(void) { return 0; }
2829 rdma_libs="-lrdmacm -libverbs"
2830 if compile_prog "" "$rdma_libs" ; then
2832 libs_softmmu="$libs_softmmu $rdma_libs"
2834 if test "$rdma" = "yes" ; then
2836 " OpenFabrics librdmacm/libibverbs not present." \
2838 " (1) Fast: Install infiniband packages from your distro." \
2839 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2840 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2847 ##########################################
2848 # VNC SASL detection
2849 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2851 #include <sasl/sasl.h>
2853 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2855 # Assuming Cyrus-SASL installed in /usr prefix
2857 vnc_sasl_libs="-lsasl2"
2858 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2860 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2861 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2863 if test "$vnc_sasl" = "yes" ; then
2864 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2870 ##########################################
2871 # VNC JPEG detection
2872 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2875 #include <jpeglib.h>
2876 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2879 vnc_jpeg_libs="-ljpeg"
2880 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2882 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2883 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2885 if test "$vnc_jpeg" = "yes" ; then
2886 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2892 ##########################################
2894 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2896 //#include <stdio.h>
2900 png_structp png_ptr;
2901 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2902 return png_ptr != 0;
2905 if $pkg_config libpng --exists; then
2906 vnc_png_cflags=$($pkg_config libpng --cflags)
2907 vnc_png_libs=$($pkg_config libpng --libs)
2910 vnc_png_libs="-lpng"
2912 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2914 libs_softmmu="$vnc_png_libs $libs_softmmu"
2915 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2917 if test "$vnc_png" = "yes" ; then
2918 feature_not_found "vnc-png" "Install libpng devel"
2924 ##########################################
2925 # fnmatch() probe, used for ACL routines
2928 #include <fnmatch.h>
2931 fnmatch("foo", "foo", 0);
2935 if compile_prog "" "" ; then
2939 ##########################################
2940 # xfsctl() probe, used for file-posix.c
2941 if test "$xfs" != "no" ; then
2943 #include <stddef.h> /* NULL */
2944 #include <xfs/xfs.h>
2947 xfsctl(NULL, 0, 0, NULL);
2951 if compile_prog "" "" ; then
2954 if test "$xfs" = "yes" ; then
2955 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2961 ##########################################
2962 # vde libraries probe
2963 if test "$vde" != "no" ; then
2964 vde_libs="-lvdeplug"
2966 #include <libvdeplug.h>
2969 struct vde_open_args a = {0, 0, 0};
2975 if compile_prog "" "$vde_libs" ; then
2977 libs_softmmu="$vde_libs $libs_softmmu"
2978 libs_tools="$vde_libs $libs_tools"
2980 if test "$vde" = "yes" ; then
2981 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2987 ##########################################
2988 # netmap support probe
2989 # Apart from looking for netmap headers, we make sure that the host API version
2990 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2991 # a minor/major version number. Minor new features will be marked with values up
2992 # to 15, and if something happens that requires a change to the backend we will
2993 # move above 15, submit the backend fixes and modify this two bounds.
2994 if test "$netmap" != "no" ; then
2996 #include <inttypes.h>
2998 #include <net/netmap.h>
2999 #include <net/netmap_user.h>
3000 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3003 int main(void) { return 0; }
3005 if compile_prog "" "" ; then
3008 if test "$netmap" = "yes" ; then
3009 feature_not_found "netmap"
3015 ##########################################
3016 # libcap-ng library probe
3017 if test "$cap_ng" != "no" ; then
3023 capng_capability_to_name(CAPNG_EFFECTIVE);
3027 if compile_prog "" "$cap_libs" ; then
3029 libs_tools="$cap_libs $libs_tools"
3031 if test "$cap_ng" = "yes" ; then
3032 feature_not_found "cap_ng" "Install libcap-ng devel"
3038 ##########################################
3039 # Sound support libraries probe
3050 int main(void) { $exp }
3052 if compile_prog "$cfl" "$lib" ; then
3055 error_exit "$drv check failed" \
3056 "Make sure to have the $drv libs and headers installed."
3060 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3061 for drv in $audio_drv_list; do
3064 audio_drv_probe $drv alsa/asoundlib.h -lasound \
3065 "return snd_pcm_close((snd_pcm_t *)0);"
3066 libs_softmmu="-lasound $libs_softmmu"
3070 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3071 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
3072 libs_softmmu="-lpulse $libs_softmmu"
3077 if test "$sdl" = "no"; then
3078 error_exit "sdl not found or disabled, can not use sdl audio driver"
3083 libs_softmmu="-framework CoreAudio $libs_softmmu"
3087 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
3092 libs_softmmu="$oss_lib $libs_softmmu"
3096 # XXX: Probes for CoreAudio, DirectSound
3100 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3101 error_exit "Unknown driver '$drv' selected" \
3102 "Possible drivers are: $audio_possible_drivers"
3108 ##########################################
3111 if test "$brlapi" != "no" ; then
3112 brlapi_libs="-lbrlapi"
3116 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3118 if compile_prog "" "$brlapi_libs" ; then
3120 libs_softmmu="$brlapi_libs $libs_softmmu"
3122 if test "$brlapi" = "yes" ; then
3123 feature_not_found "brlapi" "Install brlapi devel"
3129 ##########################################
3131 if test "$curses" != "no" ; then
3132 if test "$mingw32" = "yes" ; then
3133 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3134 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3136 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3137 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3146 setlocale(LC_ALL, "");
3148 addwstr(L"wide chars\n");
3150 add_wch(WACS_DEGREE);
3155 for curses_inc in $curses_inc_list; do
3156 # Make sure we get the wide character prototypes
3157 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3159 for curses_lib in $curses_lib_list; do
3161 if compile_prog "$curses_inc" "$curses_lib" ; then
3163 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
3164 libs_softmmu="$curses_lib $libs_softmmu"
3168 if test "$curses_found" = yes ; then
3173 if test "$curses_found" = "yes" ; then
3176 if test "$curses" = "yes" ; then
3177 feature_not_found "curses" "Install ncurses devel"
3183 ##########################################
3185 if test "$curl" != "no" ; then
3186 if $pkg_config libcurl --exists; then
3187 curlconfig="$pkg_config libcurl"
3189 curlconfig=curl-config
3192 #include <curl/curl.h>
3193 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3195 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3196 curl_libs=$($curlconfig --libs 2>/dev/null)
3197 if compile_prog "$curl_cflags" "$curl_libs" ; then
3200 if test "$curl" = "yes" ; then
3201 feature_not_found "curl" "Install libcurl devel"
3207 ##########################################
3208 # bluez support probe
3209 if test "$bluez" != "no" ; then
3211 #include <bluetooth/bluetooth.h>
3212 int main(void) { return bt_error(0); }
3214 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3215 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3216 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3218 libs_softmmu="$bluez_libs $libs_softmmu"
3220 if test "$bluez" = "yes" ; then
3221 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3227 ##########################################
3228 # glib support probe
3230 if test "$mingw32" = yes; then
3235 glib_modules=gthread-2.0
3236 if test "$modules" = yes; then
3237 glib_modules="$glib_modules gmodule-2.0"
3240 # This workaround is required due to a bug in pkg-config file for glib as it
3241 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3243 if test "$static" = yes -a "$mingw32" = yes; then
3244 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3247 for i in $glib_modules; do
3248 if $pkg_config --atleast-version=$glib_req_ver $i; then
3249 glib_cflags=$($pkg_config --cflags $i)
3250 glib_libs=$($pkg_config --libs $i)
3251 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3252 LIBS="$glib_libs $LIBS"
3253 libs_qga="$glib_libs $libs_qga"
3255 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3259 # Sanity check that the current size_t matches the
3260 # size that glib thinks it should be. This catches
3261 # problems on multi-arch where people try to build
3262 # 32-bit QEMU while pointing at 64-bit glib headers
3267 #define QEMU_BUILD_BUG_ON(x) \
3268 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3271 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3276 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3277 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3278 "You probably need to set PKG_CONFIG_LIBDIR"\
3279 "to point to the right pkg-config files for your"\
3283 # g_test_trap_subprocess added in 2.38. Used by some tests.
3285 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3289 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3292 int main(void) { return 0; }
3294 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3295 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3296 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3297 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3301 ##########################################
3302 # SHA command probe for modules
3303 if test "$modules" = yes; then
3304 shacmd_probe="sha1sum sha1 shasum"
3305 for c in $shacmd_probe; do
3311 if test "$shacmd" = ""; then
3312 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3316 ##########################################
3317 # pixman support probe
3319 if test "$pixman" = ""; then
3320 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3322 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3328 if test "$pixman" = "none"; then
3329 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
3330 error_exit "pixman disabled but system emulation or tools build" \
3331 "enabled. You can turn off pixman only if you also" \
3332 "disable all system emulation targets and the tools" \
3333 "build with '--disable-tools --disable-system'."
3337 elif test "$pixman" = "system"; then
3338 # pixman version has been checked above
3339 pixman_cflags=$($pkg_config --cflags pixman-1)
3340 pixman_libs=$($pkg_config --libs pixman-1)
3342 if test ! -d ${source_path}/pixman/pixman; then
3343 error_exit "pixman >= 0.21.8 not present. Your options:" \
3344 " (1) Preferred: Install the pixman devel package (any recent" \
3345 " distro should have packages as Xorg needs pixman too)." \
3346 " (2) Fetch the pixman submodule, using:" \
3347 " git submodule update --init pixman"
3349 mkdir -p pixman/pixman
3350 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3351 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
3354 ##########################################
3357 if test "$cap" != "no" ; then
3360 #include <sys/capability.h>
3361 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3363 if compile_prog "" "-lcap" ; then
3370 ##########################################
3372 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3376 #include <pthread.h>
3377 static void *f(void *p) { return NULL; }
3380 pthread_create(&thread, 0, f, 0);
3384 if compile_prog "" "" ; then
3387 for pthread_lib in $PTHREADLIBS_LIST; do
3388 if compile_prog "" "$pthread_lib" ; then
3391 for lib_entry in $LIBS; do
3392 if test "$lib_entry" = "$pthread_lib"; then
3397 if test "$found" = "no"; then
3398 LIBS="$pthread_lib $LIBS"
3400 PTHREAD_LIB="$pthread_lib"
3406 if test "$mingw32" != yes -a "$pthread" = no; then
3407 error_exit "pthread check failed" \
3408 "Make sure to have the pthread libs and headers installed."
3411 # check for pthread_setname_np
3412 pthread_setname_np=no
3414 #include <pthread.h>
3416 static void *f(void *p) { return NULL; }
3420 pthread_create(&thread, 0, f, 0);
3421 pthread_setname_np(thread, "QEMU");
3425 if compile_prog "" "$pthread_lib" ; then
3426 pthread_setname_np=yes
3429 ##########################################
3431 if test "$rbd" != "no" ; then
3434 #include <rbd/librbd.h>
3437 rados_create(&cluster, NULL);
3441 rbd_libs="-lrbd -lrados"
3442 if compile_prog "" "$rbd_libs" ; then
3445 if test "$rbd" = "yes" ; then
3446 feature_not_found "rados block device" "Install librbd/ceph devel"
3452 ##########################################
3454 min_libssh2_version=1.2.8
3455 if test "$libssh2" != "no" ; then
3456 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3457 libssh2_cflags=$($pkg_config libssh2 --cflags)
3458 libssh2_libs=$($pkg_config libssh2 --libs)
3461 if test "$libssh2" = "yes" ; then
3462 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3468 ##########################################
3469 # libssh2_sftp_fsync probe
3471 if test "$libssh2" = "yes"; then
3474 #include <libssh2.h>
3475 #include <libssh2_sftp.h>
3477 LIBSSH2_SESSION *session;
3479 LIBSSH2_SFTP_HANDLE *sftp_handle;
3480 session = libssh2_session_init ();
3481 sftp = libssh2_sftp_init (session);
3482 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3483 libssh2_sftp_fsync (sftp_handle);
3487 # libssh2_cflags/libssh2_libs defined in previous test.
3488 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3489 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3493 ##########################################
3496 if test "$linux_aio" != "no" ; then
3499 #include <sys/eventfd.h>
3501 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3503 if compile_prog "" "-laio" ; then
3506 if test "$linux_aio" = "yes" ; then
3507 feature_not_found "linux AIO" "Install libaio devel"
3513 ##########################################
3514 # TPM passthrough is only on x86 Linux
3516 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3517 tpm_passthrough=$tpm
3522 ##########################################
3525 if test "$attr" != "no" ; then
3528 #include <sys/types.h>
3529 #ifdef CONFIG_LIBATTR
3530 #include <attr/xattr.h>
3532 #include <sys/xattr.h>
3534 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3536 if compile_prog "" "" ; then
3538 # Older distros have <attr/xattr.h>, and need -lattr:
3539 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3544 if test "$attr" = "yes" ; then
3545 feature_not_found "ATTR" "Install libc6 or libattr devel"
3551 ##########################################
3554 #include <sys/types.h>
3555 #include <sys/uio.h>
3557 int main(void) { return sizeof(struct iovec); }
3560 if compile_prog "" "" ; then
3564 ##########################################
3567 #include <sys/types.h>
3568 #include <sys/uio.h>
3570 int main(void) { return preadv(0, 0, 0, 0); }
3573 if compile_prog "" "" ; then
3577 ##########################################
3579 # fdt support is mandatory for at least some target architectures,
3580 # so insist on it if we're building those system emulators.
3582 for target in $target_list; do
3584 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
3590 if test "$fdt_required" = "yes"; then
3591 if test "$fdt" = "no"; then
3592 error_exit "fdt disabled but some requested targets require it." \
3593 "You can turn off fdt only if you also disable all the system emulation" \
3594 "targets which need it (by specifying a cut down --target-list)."
3599 if test "$fdt" != "no" ; then
3601 # explicitly check for libfdt_env.h as it is missing in some stable installs
3602 # and test for required functions to make sure we are on a version >= 1.4.2
3605 #include <libfdt_env.h>
3606 int main(void) { fdt_first_subnode(0, 0); return 0; }
3608 if compile_prog "" "$fdt_libs" ; then
3609 # system DTC is good - use it
3611 elif test -d ${source_path}/dtc/libfdt ; then
3612 # have submodule DTC - use it
3616 if [ "$pwd_is_source_path" != "y" ] ; then
3617 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3618 symlink "$source_path/dtc/scripts" "dtc/scripts"
3620 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3621 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3622 elif test "$fdt" = "yes" ; then
3623 # have neither and want - prompt for system/submodule install
3624 error_exit "DTC (libfdt) version >= 1.4.2 not present. Your options:" \
3625 " (1) Preferred: Install the DTC (libfdt) devel package" \
3626 " (2) Fetch the DTC submodule, using:" \
3627 " git submodule update --init dtc"
3629 # don't have and don't want
3635 libs_softmmu="$libs_softmmu $fdt_libs"
3637 ##########################################
3638 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3640 if test "$opengl" != "no" ; then
3641 opengl_pkgs="epoxy libdrm gbm"
3642 if $pkg_config $opengl_pkgs x11; then
3643 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3644 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3646 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3649 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
3651 if test "$opengl" = "yes" ; then
3652 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3660 if test "$opengl" = "yes"; then
3662 #include <epoxy/egl.h>
3663 #ifndef EGL_MESA_image_dma_buf_export
3664 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3666 int main(void) { return 0; }
3668 if compile_prog "" "" ; then
3674 ##########################################
3676 if test "$glusterfs" != "no" ; then
3677 if $pkg_config --atleast-version=3 glusterfs-api; then
3679 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3680 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3681 if $pkg_config --atleast-version=4 glusterfs-api; then
3682 glusterfs_xlator_opt="yes"
3684 if $pkg_config --atleast-version=5 glusterfs-api; then
3685 glusterfs_discard="yes"
3687 if $pkg_config --atleast-version=6 glusterfs-api; then
3688 glusterfs_fallocate="yes"
3689 glusterfs_zerofill="yes"
3692 if test "$glusterfs" = "yes" ; then
3693 feature_not_found "GlusterFS backend support" \
3694 "Install glusterfs-api devel >= 3"
3700 # Check for inotify functions when we are building linux-user
3701 # emulator. This is done because older glibc versions don't
3702 # have syscall stubs for these implemented. In that case we
3703 # don't provide them even if kernel supports them.
3707 #include <sys/inotify.h>
3712 /* try to start inotify */
3713 return inotify_init();
3716 if compile_prog "" "" ; then
3722 #include <sys/inotify.h>
3727 /* try to start inotify */
3728 return inotify_init1(0);
3731 if compile_prog "" "" ; then
3735 # check if pipe2 is there
3744 return pipe2(pipefd, O_CLOEXEC);
3747 if compile_prog "" "" ; then
3751 # check if accept4 is there
3754 #include <sys/socket.h>
3759 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3763 if compile_prog "" "" ; then
3767 # check if tee/splice is there. vmsplice was added same time.
3777 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3778 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3782 if compile_prog "" "" ; then
3786 ##########################################
3789 if test "$numa" != "no" ; then
3792 int main(void) { return numa_available(); }
3795 if compile_prog "" "-lnuma" ; then
3797 libs_softmmu="-lnuma $libs_softmmu"
3799 if test "$numa" = "yes" ; then
3800 feature_not_found "numa" "install numactl devel"
3806 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3807 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3811 ##########################################
3814 if test "$tcmalloc" = "yes" ; then
3817 int main(void) { malloc(1); return 0; }
3820 if compile_prog "" "-ltcmalloc" ; then
3821 LIBS="-ltcmalloc $LIBS"
3823 feature_not_found "tcmalloc" "install gperftools devel"
3827 ##########################################
3830 if test "$jemalloc" = "yes" ; then
3833 int main(void) { malloc(1); return 0; }
3836 if compile_prog "" "-ljemalloc" ; then
3837 LIBS="-ljemalloc $LIBS"
3839 feature_not_found "jemalloc" "install jemalloc devel"
3843 ##########################################
3848 #include <sys/syscall.h>
3850 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3853 if compile_prog "" "" ; then
3857 # check if eventfd is supported
3860 #include <sys/eventfd.h>
3864 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3867 if compile_prog "" "" ; then
3871 # check if memfd is supported
3874 #include <sys/memfd.h>
3878 return memfd_create("foo", MFD_ALLOW_SEALING);
3881 if compile_prog "" "" ; then
3887 # check for fallocate
3894 fallocate(0, 0, 0, 0);
3898 if compile_prog "" "" ; then
3902 # check for fallocate hole punching
3903 fallocate_punch_hole=no
3906 #include <linux/falloc.h>
3910 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3914 if compile_prog "" "" ; then
3915 fallocate_punch_hole=yes
3918 # check that fallocate supports range zeroing inside the file
3919 fallocate_zero_range=no
3922 #include <linux/falloc.h>
3926 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3930 if compile_prog "" "" ; then
3931 fallocate_zero_range=yes
3934 # check for posix_fallocate
3941 posix_fallocate(0, 0, 0);
3945 if compile_prog "" "" ; then
3949 # check for sync_file_range
3956 sync_file_range(0, 0, 0, 0);
3960 if compile_prog "" "" ; then
3964 # check for linux/fiemap.h and FS_IOC_FIEMAP
3967 #include <sys/ioctl.h>
3968 #include <linux/fs.h>
3969 #include <linux/fiemap.h>
3973 ioctl(0, FS_IOC_FIEMAP, 0);
3977 if compile_prog "" "" ; then
3992 if compile_prog "" "" ; then
3996 # check for ppoll support
4003 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4004 ppoll(&pfd, 1, 0, 0);
4008 if compile_prog "" "" ; then
4012 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4013 prctl_pr_set_timerslack=no
4015 #include <sys/prctl.h>
4019 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4023 if compile_prog "" "" ; then
4024 prctl_pr_set_timerslack=yes
4027 # check for epoll support
4030 #include <sys/epoll.h>
4038 if compile_prog "" "" ; then
4042 # epoll_create1 is a later addition
4043 # so we must check separately for its presence
4046 #include <sys/epoll.h>
4050 /* Note that we use epoll_create1 as a value, not as
4051 * a function being called. This is necessary so that on
4052 * old SPARC glibc versions where the function was present in
4053 * the library but not declared in the header file we will
4054 * fail the configure check. (Otherwise we will get a compiler
4055 * warning but not an error, and will proceed to fail the
4056 * qemu compile where we compile with -Werror.)
4058 return (int)(uintptr_t)&epoll_create1;
4061 if compile_prog "" "" ; then
4065 # check for sendfile support
4068 #include <sys/sendfile.h>
4072 return sendfile(0, 0, 0, 0);
4075 if compile_prog "" "" ; then
4079 # check for timerfd support (glibc 2.8 and newer)
4082 #include <sys/timerfd.h>
4086 return(timerfd_create(CLOCK_REALTIME, 0));
4089 if compile_prog "" "" ; then
4093 # check for setns and unshare support
4106 if compile_prog "" "" ; then
4110 # clock_adjtime probe
4117 return clock_adjtime(0, 0);
4121 if compile_prog "" "" ; then
4136 if compile_prog "" "" ; then
4140 # Check if tools are available to build documentation.
4141 if test "$docs" != "no" ; then
4142 if has makeinfo && has pod2man; then
4145 if test "$docs" = "yes" ; then
4146 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4152 # Search for bswap_32 function
4155 #include <byteswap.h>
4156 int main(void) { return bswap_32(0); }
4158 if compile_prog "" "" ; then
4162 # Search for bswap32 function
4165 #include <sys/endian.h>
4166 #include <sys/types.h>
4167 #include <machine/bswap.h>
4168 int main(void) { return bswap32(0); }
4170 if compile_prog "" "" ; then
4174 ##########################################
4175 # Do we have libiscsi >= 1.9.0
4176 if test "$libiscsi" != "no" ; then
4177 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4179 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4180 libiscsi_libs=$($pkg_config --libs libiscsi)
4182 if test "$libiscsi" = "yes" ; then
4183 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4189 ##########################################
4193 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4195 if compile_prog "" "" ; then
4197 elif compile_prog "" "-lm" ; then
4199 libs_qga="-lm $libs_qga"
4201 error_exit "libm check failed"
4204 ##########################################
4206 # uClibc provides 2 versions of clock_gettime(), one with realtime
4207 # support and one without. This means that the clock_gettime() don't
4208 # need -lrt. We still need it for timer_create() so we check for this
4209 # function in addition.
4214 timer_create(CLOCK_REALTIME, NULL, NULL);
4215 return clock_gettime(CLOCK_REALTIME, NULL);
4219 if compile_prog "" "" ; then
4221 # we need pthread for static linking. use previous pthread test result
4222 elif compile_prog "" "$pthread_lib -lrt" ; then
4224 libs_qga="$libs_qga -lrt"
4227 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4228 "$aix" != "yes" -a "$haiku" != "yes" ; then
4229 libs_softmmu="-lutil $libs_softmmu"
4232 ##########################################
4234 if test "$spice" != "no" ; then
4237 int main(void) { spice_server_new(); return 0; }
4239 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4240 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4241 if $pkg_config --atleast-version=0.12.0 spice-server && \
4242 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4243 compile_prog "$spice_cflags" "$spice_libs" ; then
4245 libs_softmmu="$libs_softmmu $spice_libs"
4246 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4247 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4248 spice_server_version=$($pkg_config --modversion spice-server)
4250 if test "$spice" = "yes" ; then
4251 feature_not_found "spice" \
4252 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4258 # check for smartcard support
4260 if test "$smartcard" != "no"; then
4261 if $pkg_config libcacard; then
4262 libcacard_cflags=$($pkg_config --cflags libcacard)
4263 libcacard_libs=$($pkg_config --libs libcacard)
4264 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4265 libs_softmmu="$libs_softmmu $libcacard_libs"
4268 if test "$smartcard" = "yes"; then
4269 feature_not_found "smartcard" "Install libcacard devel"
4276 if test "$libusb" != "no" ; then
4277 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4279 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4280 libusb_libs=$($pkg_config --libs libusb-1.0)
4281 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4282 libs_softmmu="$libs_softmmu $libusb_libs"
4284 if test "$libusb" = "yes"; then
4285 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4291 # check for usbredirparser for usb network redirection support
4292 if test "$usb_redir" != "no" ; then
4293 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4295 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4296 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4297 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
4298 libs_softmmu="$libs_softmmu $usb_redir_libs"
4300 if test "$usb_redir" = "yes"; then
4301 feature_not_found "usb-redir" "Install usbredir devel"
4307 ##########################################
4308 # check if we have VSS SDK headers for win
4310 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4311 case "$vss_win32_sdk" in
4312 "") vss_win32_include="-isystem $source_path" ;;
4313 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4314 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4315 vss_win32_include="-isystem $source_path/.sdk/vss"
4316 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4318 *) vss_win32_include="-isystem $vss_win32_sdk"
4321 #define __MIDL_user_allocate_free_DEFINED__
4322 #include <inc/win2003/vss.h>
4323 int main(void) { return VSS_CTX_BACKUP; }
4325 if compile_prog "$vss_win32_include" "" ; then
4326 guest_agent_with_vss="yes"
4327 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4328 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4329 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4331 if test "$vss_win32_sdk" != "" ; then
4332 echo "ERROR: Please download and install Microsoft VSS SDK:"
4333 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4334 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4335 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4336 echo "ERROR: The headers are extracted in the directory \`inc'."
4337 feature_not_found "VSS support"
4339 guest_agent_with_vss="no"
4343 ##########################################
4344 # lookup Windows platform SDK (if not specified)
4345 # The SDK is needed only to build .tlb (type library) file of guest agent
4346 # VSS provider from the source. It is usually unnecessary because the
4347 # pre-compiled .tlb file is included.
4349 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4350 if test -z "$win_sdk"; then
4351 programfiles="$PROGRAMFILES"
4352 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4353 if test -n "$programfiles"; then
4354 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4356 feature_not_found "Windows SDK"
4358 elif test "$win_sdk" = "no"; then
4363 ##########################################
4364 # check if mingw environment provides a recent ntddscsi.h
4365 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4367 #include <windows.h>
4368 #include <ntddscsi.h>
4370 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4371 #error Missing required ioctl definitions
4373 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4377 if compile_prog "" "" ; then
4378 guest_agent_ntddscsi=yes
4379 libs_qga="-lsetupapi $libs_qga"
4383 ##########################################
4384 # virgl renderer probe
4386 if test "$virglrenderer" != "no" ; then
4388 #include <virglrenderer.h>
4389 int main(void) { virgl_renderer_poll(); return 0; }
4391 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4392 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4393 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4394 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4397 if test "$virglrenderer" = "yes" ; then
4398 feature_not_found "virglrenderer"
4404 ##########################################
4405 # check if we have fdatasync
4411 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4412 return fdatasync(0);
4414 #error Not supported
4418 if compile_prog "" "" ; then
4422 ##########################################
4423 # check if we have madvise
4427 #include <sys/types.h>
4428 #include <sys/mman.h>
4430 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4432 if compile_prog "" "" ; then
4436 ##########################################
4437 # check if we have posix_madvise
4441 #include <sys/mman.h>
4443 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4445 if compile_prog "" "" ; then
4449 ##########################################
4450 # check if we have posix_syslog
4455 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4457 if compile_prog "" "" ; then
4461 ##########################################
4462 # check if trace backend exists
4464 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4465 if test "$?" -ne 0 ; then
4466 error_exit "invalid trace backends" \
4467 "Please choose supported trace backends."
4470 ##########################################
4471 # For 'ust' backend, test if ust headers are present
4472 if have_backend "ust"; then
4474 #include <lttng/tracepoint.h>
4475 int main(void) { return 0; }
4477 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4478 if $pkg_config lttng-ust --exists; then
4479 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4481 lttng_ust_libs="-llttng-ust -ldl"
4483 if $pkg_config liburcu-bp --exists; then
4484 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4486 urcu_bp_libs="-lurcu-bp"
4489 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4490 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4492 error_exit "Trace backend 'ust' missing lttng-ust header files"
4496 ##########################################
4497 # For 'dtrace' backend, test if 'dtrace' command is present
4498 if have_backend "dtrace"; then
4499 if ! has 'dtrace' ; then
4500 error_exit "dtrace command is not found in PATH $PATH"
4502 trace_backend_stap="no"
4503 if has 'stap' ; then
4504 trace_backend_stap="yes"
4508 ##########################################
4509 # check and set a backend for coroutine
4511 # We prefer ucontext, but it's not always possible. The fallback
4512 # is sigcontext. On Windows the only valid backend is the Windows
4516 if test "$darwin" != "yes"; then
4518 #include <ucontext.h>
4519 #ifdef __stub_makecontext
4520 #error Ignoring glibc stub makecontext which will always fail
4522 int main(void) { makecontext(0, 0, 0); return 0; }
4524 if compile_prog "" "" ; then
4529 if test "$coroutine" = ""; then
4530 if test "$mingw32" = "yes"; then
4532 elif test "$ucontext_works" = "yes"; then
4535 coroutine=sigaltstack
4540 if test "$mingw32" != "yes"; then
4541 error_exit "'windows' coroutine backend only valid for Windows"
4543 # Unfortunately the user visible backend name doesn't match the
4544 # coroutine-*.c filename for this case, so we have to adjust it here.
4548 if test "$ucontext_works" != "yes"; then
4549 feature_not_found "ucontext"
4553 if test "$mingw32" = "yes"; then
4554 error_exit "only the 'windows' coroutine backend is valid for Windows"
4558 error_exit "unknown coroutine backend $coroutine"
4563 if test "$coroutine_pool" = ""; then
4567 if test "$debug_stack_usage" = "yes"; then
4568 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4569 error_exit "stack usage debugging is not supported for $cpu"
4571 if test "$coroutine_pool" = "yes"; then
4572 echo "WARN: disabling coroutine pool for stack usage debugging"
4578 ##########################################
4579 # check if we have open_by_handle_at
4581 open_by_handle_at=no
4584 #if !defined(AT_EMPTY_PATH)
4585 # error missing definition
4587 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4590 if compile_prog "" "" ; then
4591 open_by_handle_at=yes
4594 ########################################
4595 # check if we have linux/magic.h
4599 #include <linux/magic.h>
4604 if compile_prog "" "" ; then
4608 ########################################
4609 # check whether we can disable warning option with a pragma (this is needed
4610 # to silence warnings in the headers of some versions of external libraries).
4611 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4614 # If we can't selectively disable warning in the code, disable -Werror so that
4615 # the build doesn't fail anyway.
4617 pragma_disable_unused_but_set=no
4619 #pragma GCC diagnostic push
4620 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4621 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4622 #pragma GCC diagnostic pop
4628 if compile_prog "-Werror" "" ; then
4629 pragma_diagnostic_available=yes
4634 ########################################
4635 # check if we have valgrind/valgrind.h
4639 #include <valgrind/valgrind.h>
4644 if compile_prog "" "" ; then
4648 ########################################
4649 # check if environ is declared
4659 if compile_prog "" "" ; then
4663 ########################################
4664 # check if cpuid.h is usable.
4670 unsigned a, b, c, d;
4671 int max = __get_cpuid_max(0, 0);
4674 __cpuid(1, a, b, c, d);
4678 __cpuid_count(7, 0, a, b, c, d);
4684 if compile_prog "" "" ; then
4688 ########################################
4689 # check if __[u]int128_t is usable.
4693 #if defined(__clang_major__) && defined(__clang_minor__)
4694 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4695 # error __int128_t does not work in CLANG before 3.2
4707 if compile_prog "" "" ; then
4711 #########################################
4712 # See if 128-bit atomic operations are supported.
4715 if test "$int128" = "yes"; then
4719 unsigned __int128 x = 0, y = 0;
4720 y = __atomic_load_16(&x, 0);
4721 __atomic_store_16(&x, y, 0);
4722 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4726 if compile_prog "" "" ; then
4731 #########################################
4732 # See if 64-bit atomic operations are supported.
4733 # Note that without __atomic builtins, we can only
4734 # assume atomic loads/stores max at pointer size.
4740 uint64_t x = 0, y = 0;
4741 #ifdef __ATOMIC_RELAXED
4742 y = __atomic_load_8(&x, 0);
4743 __atomic_store_8(&x, y, 0);
4744 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4745 __atomic_exchange_8(&x, y, 0);
4746 __atomic_fetch_add_8(&x, y, 0);
4748 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4749 __sync_lock_test_and_set(&x, y);
4750 __sync_val_compare_and_swap(&x, y, 0);
4751 __sync_fetch_and_add(&x, y);
4756 if compile_prog "" "" ; then
4760 ########################################
4761 # check if getauxval is available.
4765 #include <sys/auxv.h>
4767 return getauxval(AT_HWCAP) == 0;
4770 if compile_prog "" "" ; then
4774 ########################################
4775 # check if ccache is interfering with
4776 # semantic analysis of macros
4781 static const int Z = 1;
4782 #define fn() ({ Z; })
4783 #define TAUT(X) ((X) == Z)
4784 #define PAREN(X, Y) (X == Y)
4786 int main(int argc, char *argv[])
4792 if (PAREN(x, y)) return 0;
4793 if (TAUT(Z)) return 0;
4798 if ! compile_object "-Werror"; then
4802 #################################################
4803 # clang does not support glibc + FORTIFY_SOURCE.
4805 if test "$fortify_source" != "no"; then
4806 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4807 fortify_source="no";
4808 elif test -n "$cxx" && has $cxx &&
4809 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4810 fortify_source="no";
4812 fortify_source="yes"
4816 ##########################################
4817 # check if struct fsxattr is available via linux/fs.h
4821 #include <linux/fs.h>
4827 if compile_prog "" "" ; then
4831 ##########################################
4832 # check if rtnetlink.h exists and is useful
4835 #include <linux/rtnetlink.h>
4837 return IFLA_PROTO_DOWN;
4840 if compile_prog "" "" ; then
4844 ##########################################
4845 # check for usable AF_VSOCK environment
4849 #include <sys/types.h>
4850 #include <sys/socket.h>
4851 #if !defined(AF_VSOCK)
4852 # error missing AF_VSOCK flag
4854 #include <linux/vm_sockets.h>
4857 struct sockaddr_vm svm;
4858 socklen_t len = sizeof(svm);
4859 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4860 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4861 if ((ret == -1) && (errno == ENOTCONN)) {
4867 if compile_prog "" "" ; then
4871 ##########################################
4872 # check for usable AF_ALG environment
4876 #include <sys/types.h>
4877 #include <sys/socket.h>
4878 #include <linux/if_alg.h>
4881 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
4885 if compile_prog "" "" ; then
4888 if test "$crypto_afalg" = "yes"
4890 if test "$have_afalg" != "yes"
4892 error_exit "AF_ALG requested but could not be detected"
4897 #################################################
4898 # Sparc implicitly links with --relax, which is
4899 # incompatible with -r, so --no-relax should be
4900 # given. It does no harm to give it on other
4903 # Note: the prototype is needed since QEMU_CFLAGS
4904 # contains -Wmissing-prototypes
4906 extern int foo(void);
4907 int foo(void) { return 0; }
4909 if ! compile_object ""; then
4910 error_exit "Failed to compile object file for LD_REL_FLAGS test"
4912 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
4913 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
4918 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
4919 feature_not_found "modules" "Cannot find how to build relocatable objects"
4922 ##########################################
4923 # check for sysmacros.h
4927 #include <sys/sysmacros.h>
4929 return makedev(0, 0);
4932 if compile_prog "" "" ; then
4936 ##########################################
4937 # Veritas HyperScale block driver VxHS
4938 # Check if libvxhs is installed
4940 if test "$vxhs" != "no" ; then
4943 #include <qnio/qnio_api.h>
4945 void *vxhs_callback;
4948 iio_init(QNIO_VERSION, vxhs_callback);
4952 vxhs_libs="-lvxhs -lssl"
4953 if compile_prog "" "$vxhs_libs" ; then
4956 if test "$vxhs" = "yes" ; then
4957 feature_not_found "vxhs block device" "Install libvxhs See github"
4963 ##########################################
4964 # check for _Static_assert()
4966 have_static_assert=no
4968 _Static_assert(1, "success");
4973 if compile_prog "" "" ; then
4974 have_static_assert=yes
4977 ##########################################
4978 # check for utmpx.h, it is missing e.g. on OpenBSD
4983 struct utmpx user_info;
4988 if compile_prog "" "" ; then
4992 ##########################################
4994 # After here, no more $cc or $ld runs
4996 if test "$gcov" = "yes" ; then
4997 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4998 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4999 elif test "$fortify_source" = "yes" ; then
5000 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5001 elif test "$debug" = "no"; then
5002 CFLAGS="-O2 $CFLAGS"
5005 ##########################################
5007 if test "$libnfs" != "no" ; then
5008 if $pkg_config --atleast-version=1.9.3 libnfs; then
5010 libnfs_libs=$($pkg_config --libs libnfs)
5012 if test "$libnfs" = "yes" ; then
5013 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5019 # Now we've finished running tests it's OK to add -Werror to the compiler flags
5020 if test "$werror" = "yes"; then
5021 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5024 if test "$solaris" = "no" ; then
5025 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5026 LDFLAGS="-Wl,--warn-common $LDFLAGS"
5030 # test if pod2man has --utf8 option
5031 if pod2man --help | grep -q utf8; then
5032 POD2MAN="pod2man --utf8"
5037 # Use ASLR, no-SEH and DEP if available
5038 if test "$mingw32" = "yes" ; then
5039 for flag in --dynamicbase --no-seh --nxcompat; do
5040 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
5041 LDFLAGS="-Wl,$flag $LDFLAGS"
5046 qemu_confdir=$sysconfdir$confsuffix
5047 qemu_moddir=$libdir$confsuffix
5048 qemu_datadir=$datadir$confsuffix
5049 qemu_localedir="$datadir/locale"
5051 # We can only support ivshmem if we have eventfd
5052 if [ "$eventfd" = "yes" ]; then
5057 if test "$want_tools" = "yes" ; then
5058 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
5059 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5060 tools="qemu-nbd\$(EXESUF) $tools"
5062 if [ "$ivshmem" = "yes" ]; then
5063 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5066 if test "$softmmu" = yes ; then
5067 if test "$virtfs" != no ; then
5068 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
5070 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5072 if test "$virtfs" = yes; then
5073 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
5080 # Probe for guest agent support/options
5082 if [ "$guest_agent" != "no" ]; then
5083 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5084 tools="qemu-ga $tools"
5086 elif [ "$guest_agent" != yes ]; then
5089 error_exit "Guest agent is not supported on this platform"
5093 # Guest agent Window MSI package
5095 if test "$guest_agent" != yes; then
5096 if test "$guest_agent_msi" = yes; then
5097 error_exit "MSI guest agent package requires guest agent enabled"
5100 elif test "$mingw32" != "yes"; then
5101 if test "$guest_agent_msi" = "yes"; then
5102 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5105 elif ! has wixl; then
5106 if test "$guest_agent_msi" = "yes"; then
5107 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5111 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5112 # disabled explicitly
5113 if test "$guest_agent_msi" != "no"; then
5118 if test "$guest_agent_msi" = "yes"; then
5119 if test "$guest_agent_with_vss" = "yes"; then
5120 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5123 if test "$QEMU_GA_MANUFACTURER" = ""; then
5124 QEMU_GA_MANUFACTURER=QEMU
5127 if test "$QEMU_GA_DISTRO" = ""; then
5128 QEMU_GA_DISTRO=Linux
5131 if test "$QEMU_GA_VERSION" = ""; then
5132 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5135 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5139 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5142 QEMU_GA_MSI_ARCH="-D Arch=32"
5145 error_exit "CPU $cpu not supported for building installation package"
5150 # Mac OS X ships with a broken assembler
5152 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5153 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5154 "$softmmu" = yes ; then
5155 # Different host OS linkers have different ideas about the name of the ELF
5156 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
5157 # variant; and Windows uses i386pe.
5158 for emu in elf_i386 elf_i386_fbsd i386pe; do
5159 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5160 ld_i386_emulation="$emu"
5166 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5167 roms="$roms spapr-rtas"
5170 if test "$cpu" = "s390x" ; then
5171 roms="$roms s390-ccw"
5174 # Probe for the need for relocating the user-only binary.
5175 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5178 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5179 # ??? Rationale for choosing this address
5180 textseg_addr=0x60000000
5183 # A 256M aligned address, high in the address space, with enough
5184 # room for the code_gen_buffer above it before the stack.
5185 textseg_addr=0x60000000
5188 if [ -n "$textseg_addr" ]; then
5190 int main(void) { return 0; }
5192 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5193 if ! compile_prog "" "$textseg_ldflags"; then
5194 # In case ld does not support -Ttext-segment, edit the default linker
5195 # script via sed to set the .text start addr. This is needed on FreeBSD
5197 if ! $ld --verbose >/dev/null 2>&1; then
5199 "We need to link the QEMU user mode binaries at a" \
5200 "specific text address. Unfortunately your linker" \
5201 "doesn't support either the -Ttext-segment option or" \
5202 "printing the default linker script with --verbose." \
5203 "If you don't want the user mode binaries, pass the" \
5204 "--disable-user option to configure."
5207 $ld --verbose | sed \
5208 -e '1,/==================================================/d' \
5209 -e '/==================================================/,$d' \
5210 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5211 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5212 textseg_ldflags="-Wl,-T../config-host.ld"
5217 # Check that the C++ compiler exists and works with the C compiler.
5218 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5221 int c_function(void);
5222 int main(void) { return c_function(); }
5229 int c_function(void);
5231 int c_function(void) { return 42; }
5236 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5237 # C++ compiler $cxx works ok with C compiler $cc
5240 echo "C++ compiler $cxx does not work with C compiler $cc"
5241 echo "Disabling C++ specific optional code"
5245 echo "No C++ compiler available; disabling C++ specific optional code"
5250 if test "$1" = "yes" ; then
5255 # prepend pixman and ftd flags after all config tests are done
5256 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5257 libs_softmmu="$pixman_libs $libs_softmmu"
5259 echo "Install prefix $prefix"
5260 echo "BIOS directory $(eval echo $qemu_datadir)"
5261 echo "binary directory $(eval echo $bindir)"
5262 echo "library directory $(eval echo $libdir)"
5263 echo "module directory $(eval echo $qemu_moddir)"
5264 echo "libexec directory $(eval echo $libexecdir)"
5265 echo "include directory $(eval echo $includedir)"
5266 echo "config directory $(eval echo $sysconfdir)"
5267 if test "$mingw32" = "no" ; then
5268 echo "local state directory $(eval echo $local_statedir)"
5269 echo "Manual directory $(eval echo $mandir)"
5270 echo "ELF interp prefix $interp_prefix"
5272 echo "local state directory queried at runtime"
5273 echo "Windows SDK $win_sdk"
5275 echo "Source path $source_path"
5276 echo "C compiler $cc"
5277 echo "Host C compiler $host_cc"
5278 echo "C++ compiler $cxx"
5279 echo "Objective-C compiler $objcc"
5280 echo "ARFLAGS $ARFLAGS"
5281 echo "CFLAGS $CFLAGS"
5282 echo "QEMU_CFLAGS $QEMU_CFLAGS"
5283 echo "LDFLAGS $LDFLAGS"
5285 echo "install $install"
5286 echo "python $python"
5287 if test "$slirp" = "yes" ; then
5290 echo "module support $modules"
5291 echo "host CPU $cpu"
5292 echo "host big endian $bigendian"
5293 echo "target list $target_list"
5294 echo "gprof enabled $gprof"
5295 echo "sparse enabled $sparse"
5296 echo "strip binaries $strip_opt"
5297 echo "profiler $profiler"
5298 echo "static build $static"
5299 if test "$darwin" = "yes" ; then
5300 echo "Cocoa support $cocoa"
5302 echo "pixman $pixman"
5303 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5304 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
5305 echo "GTK GL support $gtk_gl"
5306 echo "VTE support $vte $(echo_version $vte $vteversion)"
5307 echo "TLS priority $tls_priority"
5308 echo "GNUTLS support $gnutls"
5309 echo "GNUTLS rnd $gnutls_rnd"
5310 echo "libgcrypt $gcrypt"
5311 echo "libgcrypt kdf $gcrypt_kdf"
5312 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
5313 echo "nettle kdf $nettle_kdf"
5314 echo "libtasn1 $tasn1"
5315 echo "curses support $curses"
5316 echo "virgl support $virglrenderer"
5317 echo "curl support $curl"
5318 echo "mingw32 support $mingw32"
5319 echo "Audio drivers $audio_drv_list"
5320 echo "Block whitelist (rw) $block_drv_rw_whitelist"
5321 echo "Block whitelist (ro) $block_drv_ro_whitelist"
5322 echo "VirtFS support $virtfs"
5323 echo "VNC support $vnc"
5324 if test "$vnc" = "yes" ; then
5325 echo "VNC SASL support $vnc_sasl"
5326 echo "VNC JPEG support $vnc_jpeg"
5327 echo "VNC PNG support $vnc_png"
5329 if test -n "$sparc_cpu"; then
5330 echo "Target Sparc Arch $sparc_cpu"
5332 echo "xen support $xen"
5333 if test "$xen" = "yes" ; then
5334 echo "xen ctrl version $xen_ctrl_version"
5335 echo "pv dom build $xen_pv_domain_build"
5337 echo "brlapi support $brlapi"
5338 echo "bluez support $bluez"
5339 echo "Documentation $docs"
5341 echo "vde support $vde"
5342 echo "netmap support $netmap"
5343 echo "Linux AIO support $linux_aio"
5344 echo "ATTR/XATTR support $attr"
5345 echo "Install blobs $blobs"
5346 echo "KVM support $kvm"
5347 echo "HAX support $hax"
5348 echo "TCG support $tcg"
5349 if test "$tcg" = "yes" ; then
5350 echo "TCG debug enabled $debug_tcg"
5351 echo "TCG interpreter $tcg_interpreter"
5353 echo "RDMA support $rdma"
5354 echo "fdt support $fdt"
5355 echo "preadv support $preadv"
5356 echo "fdatasync $fdatasync"
5357 echo "madvise $madvise"
5358 echo "posix_madvise $posix_madvise"
5359 echo "libcap-ng support $cap_ng"
5360 echo "vhost-net support $vhost_net"
5361 echo "vhost-scsi support $vhost_scsi"
5362 echo "vhost-vsock support $vhost_vsock"
5363 echo "Trace backends $trace_backends"
5364 if have_backend "simple"; then
5365 echo "Trace output file $trace_file-<pid>"
5367 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5368 echo "rbd support $rbd"
5369 echo "xfsctl support $xfs"
5370 echo "smartcard support $smartcard"
5371 echo "libusb $libusb"
5372 echo "usb net redir $usb_redir"
5373 echo "OpenGL support $opengl"
5374 echo "OpenGL dmabufs $opengl_dmabuf"
5375 echo "libiscsi support $libiscsi"
5376 echo "libnfs support $libnfs"
5377 echo "build guest agent $guest_agent"
5378 echo "QGA VSS support $guest_agent_with_vss"
5379 echo "QGA w32 disk info $guest_agent_ntddscsi"
5380 echo "QGA MSI support $guest_agent_msi"
5381 echo "seccomp support $seccomp"
5382 echo "coroutine backend $coroutine"
5383 echo "coroutine pool $coroutine_pool"
5384 echo "debug stack usage $debug_stack_usage"
5385 echo "crypto afalg $crypto_afalg"
5386 echo "GlusterFS support $glusterfs"
5387 echo "gcov $gcov_tool"
5388 echo "gcov enabled $gcov"
5389 echo "TPM support $tpm"
5390 echo "libssh2 support $libssh2"
5391 echo "TPM passthrough $tpm_passthrough"
5392 echo "QOM debugging $qom_cast_debug"
5393 echo "Live block migration $live_block_migration"
5394 echo "lzo support $lzo"
5395 echo "snappy support $snappy"
5396 echo "bzip2 support $bzip2"
5397 echo "NUMA host support $numa"
5398 echo "tcmalloc support $tcmalloc"
5399 echo "jemalloc support $jemalloc"
5400 echo "avx2 optimization $avx2_opt"
5401 echo "replication support $replication"
5402 echo "VxHS block device $vxhs"
5404 if test "$sdl_too_old" = "yes"; then
5405 echo "-> Your SDL version is too old - please upgrade to have SDL support"
5408 if test "$supported_cpu" = "no"; then
5410 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5412 echo "CPU host architecture $cpu support is not currently maintained."
5413 echo "The QEMU project intends to remove support for this host CPU in"
5414 echo "a future release if nobody volunteers to maintain it and to"
5415 echo "provide a build host for our continuous integration setup."
5416 echo "configure has succeeded and you can continue to build, but"
5417 echo "if you care about QEMU on this platform you should contact"
5421 if test "$supported_os" = "no"; then
5423 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5425 echo "Host OS $targetos support is not currently maintained."
5426 echo "The QEMU project intends to remove support for this host OS in"
5427 echo "a future release if nobody volunteers to maintain it and to"
5428 echo "provide a build host for our continuous integration setup."
5429 echo "configure has succeeded and you can continue to build, but"
5430 echo "if you care about QEMU on this platform you should contact"
5434 config_host_mak="config-host.mak"
5436 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5438 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5439 echo >> $config_host_mak
5441 echo all: >> $config_host_mak
5442 echo "prefix=$prefix" >> $config_host_mak
5443 echo "bindir=$bindir" >> $config_host_mak
5444 echo "libdir=$libdir" >> $config_host_mak
5445 echo "libexecdir=$libexecdir" >> $config_host_mak
5446 echo "includedir=$includedir" >> $config_host_mak
5447 echo "mandir=$mandir" >> $config_host_mak
5448 echo "sysconfdir=$sysconfdir" >> $config_host_mak
5449 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5450 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5451 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5452 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5453 if test "$mingw32" = "no" ; then
5454 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5456 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5457 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5458 echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
5459 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5460 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5461 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5463 echo "ARCH=$ARCH" >> $config_host_mak
5465 if test "$debug_tcg" = "yes" ; then
5466 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5468 if test "$strip_opt" = "yes" ; then
5469 echo "STRIP=${strip}" >> $config_host_mak
5471 if test "$bigendian" = "yes" ; then
5472 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5474 if test "$mingw32" = "yes" ; then
5475 echo "CONFIG_WIN32=y" >> $config_host_mak
5476 rc_version=$(cat $source_path/VERSION)
5477 version_major=${rc_version%%.*}
5478 rc_version=${rc_version#*.}
5479 version_minor=${rc_version%%.*}
5480 rc_version=${rc_version#*.}
5481 version_subminor=${rc_version%%.*}
5483 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5484 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5485 if test "$guest_agent_with_vss" = "yes" ; then
5486 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5487 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5488 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5490 if test "$guest_agent_ntddscsi" = "yes" ; then
5491 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5493 if test "$guest_agent_msi" = "yes"; then
5494 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5495 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5496 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5497 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5498 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5499 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5500 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5503 echo "CONFIG_POSIX=y" >> $config_host_mak
5506 if test "$linux" = "yes" ; then
5507 echo "CONFIG_LINUX=y" >> $config_host_mak
5510 if test "$darwin" = "yes" ; then
5511 echo "CONFIG_DARWIN=y" >> $config_host_mak
5514 if test "$aix" = "yes" ; then
5515 echo "CONFIG_AIX=y" >> $config_host_mak
5518 if test "$solaris" = "yes" ; then
5519 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5520 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
5521 if test "$needs_libsunmath" = "yes" ; then
5522 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
5525 if test "$haiku" = "yes" ; then
5526 echo "CONFIG_HAIKU=y" >> $config_host_mak
5528 if test "$static" = "yes" ; then
5529 echo "CONFIG_STATIC=y" >> $config_host_mak
5531 if test "$profiler" = "yes" ; then
5532 echo "CONFIG_PROFILER=y" >> $config_host_mak
5534 if test "$slirp" = "yes" ; then
5535 echo "CONFIG_SLIRP=y" >> $config_host_mak
5536 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5538 if test "$vde" = "yes" ; then
5539 echo "CONFIG_VDE=y" >> $config_host_mak
5541 if test "$netmap" = "yes" ; then
5542 echo "CONFIG_NETMAP=y" >> $config_host_mak
5544 if test "$l2tpv3" = "yes" ; then
5545 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5547 if test "$cap_ng" = "yes" ; then
5548 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5550 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5551 for drv in $audio_drv_list; do
5552 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5553 echo "$def=y" >> $config_host_mak
5555 if test "$audio_pt_int" = "yes" ; then
5556 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5558 if test "$audio_win_int" = "yes" ; then
5559 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5561 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5562 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5563 if test "$vnc" = "yes" ; then
5564 echo "CONFIG_VNC=y" >> $config_host_mak
5566 if test "$vnc_sasl" = "yes" ; then
5567 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5569 if test "$vnc_jpeg" = "yes" ; then
5570 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5572 if test "$vnc_png" = "yes" ; then
5573 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5575 if test "$fnmatch" = "yes" ; then
5576 echo "CONFIG_FNMATCH=y" >> $config_host_mak
5578 if test "$xfs" = "yes" ; then
5579 echo "CONFIG_XFS=y" >> $config_host_mak
5581 qemu_version=$(head $source_path/VERSION)
5582 echo "VERSION=$qemu_version" >>$config_host_mak
5583 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5584 echo "SRC_PATH=$source_path" >> $config_host_mak
5585 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5586 if [ "$docs" = "yes" ] ; then
5587 echo "BUILD_DOCS=yes" >> $config_host_mak
5589 if test "$modules" = "yes"; then
5590 # $shacmd can generate a hash started with digit, which the compiler doesn't
5591 # like as an symbol. So prefix it with an underscore
5592 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5593 echo "CONFIG_MODULES=y" >> $config_host_mak
5595 if test "$sdl" = "yes" ; then
5596 echo "CONFIG_SDL=y" >> $config_host_mak
5597 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5598 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5600 if test "$cocoa" = "yes" ; then
5601 echo "CONFIG_COCOA=y" >> $config_host_mak
5603 if test "$curses" = "yes" ; then
5604 echo "CONFIG_CURSES=y" >> $config_host_mak
5606 if test "$pipe2" = "yes" ; then
5607 echo "CONFIG_PIPE2=y" >> $config_host_mak
5609 if test "$accept4" = "yes" ; then
5610 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5612 if test "$splice" = "yes" ; then
5613 echo "CONFIG_SPLICE=y" >> $config_host_mak
5615 if test "$eventfd" = "yes" ; then
5616 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5618 if test "$memfd" = "yes" ; then
5619 echo "CONFIG_MEMFD=y" >> $config_host_mak
5621 if test "$fallocate" = "yes" ; then
5622 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5624 if test "$fallocate_punch_hole" = "yes" ; then
5625 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5627 if test "$fallocate_zero_range" = "yes" ; then
5628 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5630 if test "$posix_fallocate" = "yes" ; then
5631 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5633 if test "$sync_file_range" = "yes" ; then
5634 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5636 if test "$fiemap" = "yes" ; then
5637 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5639 if test "$dup3" = "yes" ; then
5640 echo "CONFIG_DUP3=y" >> $config_host_mak
5642 if test "$ppoll" = "yes" ; then
5643 echo "CONFIG_PPOLL=y" >> $config_host_mak
5645 if test "$prctl_pr_set_timerslack" = "yes" ; then
5646 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5648 if test "$epoll" = "yes" ; then
5649 echo "CONFIG_EPOLL=y" >> $config_host_mak
5651 if test "$epoll_create1" = "yes" ; then
5652 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5654 if test "$sendfile" = "yes" ; then
5655 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5657 if test "$timerfd" = "yes" ; then
5658 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5660 if test "$setns" = "yes" ; then
5661 echo "CONFIG_SETNS=y" >> $config_host_mak
5663 if test "$clock_adjtime" = "yes" ; then
5664 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5666 if test "$syncfs" = "yes" ; then
5667 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5669 if test "$inotify" = "yes" ; then
5670 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5672 if test "$inotify1" = "yes" ; then
5673 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5675 if test "$byteswap_h" = "yes" ; then
5676 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5678 if test "$bswap_h" = "yes" ; then
5679 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5681 if test "$curl" = "yes" ; then
5682 echo "CONFIG_CURL=m" >> $config_host_mak
5683 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5684 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5686 if test "$brlapi" = "yes" ; then
5687 echo "CONFIG_BRLAPI=y" >> $config_host_mak
5689 if test "$bluez" = "yes" ; then
5690 echo "CONFIG_BLUEZ=y" >> $config_host_mak
5691 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5693 if test "$glib_subprocess" = "yes" ; then
5694 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5696 if test "$gtk" = "yes" ; then
5697 echo "CONFIG_GTK=y" >> $config_host_mak
5698 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5699 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5700 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5701 if test "$gtk_gl" = "yes" ; then
5702 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5705 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5706 if test "$gnutls" = "yes" ; then
5707 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5709 if test "$gnutls_rnd" = "yes" ; then
5710 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5712 if test "$gcrypt" = "yes" ; then
5713 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5714 if test "$gcrypt_hmac" = "yes" ; then
5715 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5717 if test "$gcrypt_kdf" = "yes" ; then
5718 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5721 if test "$nettle" = "yes" ; then
5722 echo "CONFIG_NETTLE=y" >> $config_host_mak
5723 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5724 if test "$nettle_kdf" = "yes" ; then
5725 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5728 if test "$tasn1" = "yes" ; then
5729 echo "CONFIG_TASN1=y" >> $config_host_mak
5731 if test "$have_ifaddrs_h" = "yes" ; then
5732 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5734 if test "$have_broken_size_max" = "yes" ; then
5735 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5738 # Work around a system header bug with some kernel/XFS header
5739 # versions where they both try to define 'struct fsxattr':
5740 # xfs headers will not try to redefine structs from linux headers
5741 # if this macro is set.
5742 if test "$have_fsxattr" = "yes" ; then
5743 echo "HAVE_FSXATTR=y" >> $config_host_mak
5745 if test "$vte" = "yes" ; then
5746 echo "CONFIG_VTE=y" >> $config_host_mak
5747 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5749 if test "$virglrenderer" = "yes" ; then
5750 echo "CONFIG_VIRGL=y" >> $config_host_mak
5751 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5752 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5754 if test "$xen" = "yes" ; then
5755 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5756 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5757 if test "$xen_pv_domain_build" = "yes" ; then
5758 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5761 if test "$linux_aio" = "yes" ; then
5762 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5764 if test "$attr" = "yes" ; then
5765 echo "CONFIG_ATTR=y" >> $config_host_mak
5767 if test "$libattr" = "yes" ; then
5768 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5770 if test "$virtfs" = "yes" ; then
5771 echo "CONFIG_VIRTFS=y" >> $config_host_mak
5773 if test "$vhost_scsi" = "yes" ; then
5774 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5776 if test "$vhost_net" = "yes" ; then
5777 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5779 if test "$vhost_vsock" = "yes" ; then
5780 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5782 if test "$blobs" = "yes" ; then
5783 echo "INSTALL_BLOBS=yes" >> $config_host_mak
5785 if test "$iovec" = "yes" ; then
5786 echo "CONFIG_IOVEC=y" >> $config_host_mak
5788 if test "$preadv" = "yes" ; then
5789 echo "CONFIG_PREADV=y" >> $config_host_mak
5791 if test "$fdt" = "yes" ; then
5792 echo "CONFIG_FDT=y" >> $config_host_mak
5794 if test "$signalfd" = "yes" ; then
5795 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5797 if test "$tcg" = "yes"; then
5798 echo "CONFIG_TCG=y" >> $config_host_mak
5799 if test "$tcg_interpreter" = "yes" ; then
5800 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5803 if test "$fdatasync" = "yes" ; then
5804 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5806 if test "$madvise" = "yes" ; then
5807 echo "CONFIG_MADVISE=y" >> $config_host_mak
5809 if test "$posix_madvise" = "yes" ; then
5810 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5813 if test "$spice" = "yes" ; then
5814 echo "CONFIG_SPICE=y" >> $config_host_mak
5817 if test "$smartcard" = "yes" ; then
5818 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5821 if test "$libusb" = "yes" ; then
5822 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5825 if test "$usb_redir" = "yes" ; then
5826 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5829 if test "$opengl" = "yes" ; then
5830 echo "CONFIG_OPENGL=y" >> $config_host_mak
5831 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5832 if test "$opengl_dmabuf" = "yes" ; then
5833 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5837 if test "$avx2_opt" = "yes" ; then
5838 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5841 if test "$lzo" = "yes" ; then
5842 echo "CONFIG_LZO=y" >> $config_host_mak
5845 if test "$snappy" = "yes" ; then
5846 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5849 if test "$bzip2" = "yes" ; then
5850 echo "CONFIG_BZIP2=y" >> $config_host_mak
5851 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5854 if test "$libiscsi" = "yes" ; then
5855 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5856 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5857 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5860 if test "$libnfs" = "yes" ; then
5861 echo "CONFIG_LIBNFS=m" >> $config_host_mak
5862 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
5865 if test "$seccomp" = "yes"; then
5866 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5869 # XXX: suppress that
5870 if [ "$bsd" = "yes" ] ; then
5871 echo "CONFIG_BSD=y" >> $config_host_mak
5874 if test "$localtime_r" = "yes" ; then
5875 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5877 if test "$qom_cast_debug" = "yes" ; then
5878 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5880 if test "$rbd" = "yes" ; then
5881 echo "CONFIG_RBD=m" >> $config_host_mak
5882 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5883 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5886 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5887 if test "$coroutine_pool" = "yes" ; then
5888 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5890 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5893 if test "$debug_stack_usage" = "yes" ; then
5894 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5897 if test "$crypto_afalg" = "yes" ; then
5898 echo "CONFIG_AF_ALG=y" >> $config_host_mak
5901 if test "$open_by_handle_at" = "yes" ; then
5902 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5905 if test "$linux_magic_h" = "yes" ; then
5906 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5909 if test "$pragma_diagnostic_available" = "yes" ; then
5910 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5913 if test "$valgrind_h" = "yes" ; then
5914 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5917 if test "$has_environ" = "yes" ; then
5918 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5921 if test "$cpuid_h" = "yes" ; then
5922 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5925 if test "$int128" = "yes" ; then
5926 echo "CONFIG_INT128=y" >> $config_host_mak
5929 if test "$atomic128" = "yes" ; then
5930 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5933 if test "$atomic64" = "yes" ; then
5934 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5937 if test "$getauxval" = "yes" ; then
5938 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5941 if test "$glusterfs" = "yes" ; then
5942 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5943 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5944 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5947 if test "$glusterfs_xlator_opt" = "yes" ; then
5948 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5951 if test "$glusterfs_discard" = "yes" ; then
5952 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5955 if test "$glusterfs_fallocate" = "yes" ; then
5956 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
5959 if test "$glusterfs_zerofill" = "yes" ; then
5960 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5963 if test "$libssh2" = "yes" ; then
5964 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5965 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5966 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5969 if test "$live_block_migration" = "yes" ; then
5970 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
5974 if test "$libusb" = "yes"; then
5975 echo "HOST_USB=libusb legacy" >> $config_host_mak
5977 echo "HOST_USB=stub" >> $config_host_mak
5980 # TPM passthrough support?
5981 if test "$tpm" = "yes"; then
5982 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5983 if test "$tpm_passthrough" = "yes"; then
5984 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5988 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5989 if have_backend "nop"; then
5990 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5992 if have_backend "simple"; then
5993 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5994 # Set the appropriate trace file.
5995 trace_file="\"$trace_file-\" FMT_pid"
5997 if have_backend "log"; then
5998 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6000 if have_backend "ust"; then
6001 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6003 if have_backend "dtrace"; then
6004 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6005 if test "$trace_backend_stap" = "yes" ; then
6006 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6009 if have_backend "ftrace"; then
6010 if test "$linux" = "yes" ; then
6011 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6013 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6016 if have_backend "syslog"; then
6017 if test "$posix_syslog" = "yes" ; then
6018 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6020 feature_not_found "syslog(trace backend)" "syslog not available"
6023 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6025 if test "$rdma" = "yes" ; then
6026 echo "CONFIG_RDMA=y" >> $config_host_mak
6029 if test "$have_rtnetlink" = "yes" ; then
6030 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6033 if test "$replication" = "yes" ; then
6034 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6037 if test "$have_af_vsock" = "yes" ; then
6038 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6041 if test "$have_sysmacros" = "yes" ; then
6042 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6045 if test "$have_static_assert" = "yes" ; then
6046 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6049 if test "$have_utmpx" = "yes" ; then
6050 echo "HAVE_UTMPX=y" >> $config_host_mak
6053 if test "$ivshmem" = "yes" ; then
6054 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6057 # Hold two types of flag:
6058 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6059 # a thread we have a handle to
6060 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6062 if test "$pthread_setname_np" = "yes" ; then
6063 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6064 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6067 if test "$vxhs" = "yes" ; then
6068 echo "CONFIG_VXHS=y" >> $config_host_mak
6069 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6072 if test "$tcg_interpreter" = "yes"; then
6073 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6074 elif test "$ARCH" = "sparc64" ; then
6075 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6076 elif test "$ARCH" = "s390x" ; then
6077 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6078 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6079 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6080 elif test "$ARCH" = "ppc64" ; then
6081 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6083 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6085 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
6087 echo "TOOLS=$tools" >> $config_host_mak
6088 echo "ROMS=$roms" >> $config_host_mak
6089 echo "MAKE=$make" >> $config_host_mak
6090 echo "INSTALL=$install" >> $config_host_mak
6091 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6092 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6093 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6094 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6095 echo "PYTHON=$python" >> $config_host_mak
6096 echo "CC=$cc" >> $config_host_mak
6097 if $iasl -h > /dev/null 2>&1; then
6098 echo "IASL=$iasl" >> $config_host_mak
6100 echo "CC_I386=$cc_i386" >> $config_host_mak
6101 echo "HOST_CC=$host_cc" >> $config_host_mak
6102 echo "CXX=$cxx" >> $config_host_mak
6103 echo "OBJCC=$objcc" >> $config_host_mak
6104 echo "AR=$ar" >> $config_host_mak
6105 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6106 echo "AS=$as" >> $config_host_mak
6107 echo "CCAS=$ccas" >> $config_host_mak
6108 echo "CPP=$cpp" >> $config_host_mak
6109 echo "OBJCOPY=$objcopy" >> $config_host_mak
6110 echo "LD=$ld" >> $config_host_mak
6111 echo "NM=$nm" >> $config_host_mak
6112 echo "WINDRES=$windres" >> $config_host_mak
6113 echo "CFLAGS=$CFLAGS" >> $config_host_mak
6114 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6115 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6116 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6117 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6118 if test "$sparse" = "yes" ; then
6119 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
6120 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
6121 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
6122 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6123 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6125 if test "$cross_prefix" != ""; then
6126 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6128 echo "AUTOCONF_HOST := " >> $config_host_mak
6130 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6131 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6132 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6133 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6134 echo "LIBS+=$LIBS" >> $config_host_mak
6135 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6136 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6137 echo "EXESUF=$EXESUF" >> $config_host_mak
6138 echo "DSOSUF=$DSOSUF" >> $config_host_mak
6139 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6140 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6141 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6142 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6143 echo "POD2MAN=$POD2MAN" >> $config_host_mak
6144 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6145 if test "$gcov" = "yes" ; then
6146 echo "CONFIG_GCOV=y" >> $config_host_mak
6147 echo "GCOV=$gcov_tool" >> $config_host_mak
6150 # use included Linux headers
6151 if test "$linux" = "yes" ; then
6152 mkdir -p linux-headers
6170 # For most CPUs the kernel architecture name and QEMU CPU name match.
6174 # For non-KVM architectures we will not have asm headers
6175 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6176 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6180 for target in $target_list; do
6181 target_dir="$target"
6182 config_target_mak=$target_dir/config-target.mak
6183 target_name=$(echo $target | cut -d '-' -f 1)
6184 target_bigendian="no"
6186 case "$target_name" in
6187 armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6188 target_bigendian=yes
6192 target_user_only="no"
6193 target_linux_user="no"
6194 target_bsd_user="no"
6196 ${target_name}-softmmu)
6197 target_softmmu="yes"
6199 ${target_name}-linux-user)
6200 target_user_only="yes"
6201 target_linux_user="yes"
6203 ${target_name}-bsd-user)
6204 target_user_only="yes"
6205 target_bsd_user="yes"
6208 error_exit "Target '$target' not recognised"
6213 mkdir -p $target_dir
6214 echo "# Automatically generated by configure - do not modify" > $config_target_mak
6218 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6221 TARGET_ARCH="$target_name"
6225 case "$target_name" in
6227 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6230 TARGET_BASE_ARCH=i386
6231 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
6240 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6243 TARGET_BASE_ARCH=arm
6246 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6256 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
6258 microblaze|microblazeel)
6259 TARGET_ARCH=microblaze
6264 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
6268 TARGET_BASE_ARCH=mips
6269 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6270 echo "TARGET_ABI32=y" >> $config_target_mak
6274 TARGET_BASE_ARCH=mips
6275 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
6282 TARGET_ARCH=openrisc
6283 TARGET_BASE_ARCH=openrisc
6286 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6289 TARGET_BASE_ARCH=ppc
6291 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6294 TARGET_BASE_ARCH=ppc
6297 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6301 TARGET_BASE_ARCH=ppc
6304 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6308 TARGET_BASE_ARCH=ppc
6310 echo "TARGET_ABI32=y" >> $config_target_mak
6311 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6320 TARGET_BASE_ARCH=sparc
6324 TARGET_BASE_ARCH=sparc
6325 TARGET_ABI_DIR=sparc
6326 echo "TARGET_ABI32=y" >> $config_target_mak
6329 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
6341 error_exit "Unsupported target CPU"
6344 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6345 if [ "$TARGET_BASE_ARCH" = "" ]; then
6346 TARGET_BASE_ARCH=$TARGET_ARCH
6349 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6352 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6355 target_arch_name="$(upper $TARGET_ARCH)"
6356 echo "TARGET_$target_arch_name=y" >> $config_target_mak
6357 echo "TARGET_NAME=$target_name" >> $config_target_mak
6358 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6359 if [ "$TARGET_ABI_DIR" = "" ]; then
6360 TARGET_ABI_DIR=$TARGET_ARCH
6362 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6363 if [ "$HOST_VARIANT_DIR" != "" ]; then
6364 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6367 if supported_xen_target $target; then
6368 echo "CONFIG_XEN=y" >> $config_target_mak
6369 if test "$xen_pci_passthrough" = yes; then
6370 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6373 if supported_kvm_target $target; then
6374 echo "CONFIG_KVM=y" >> $config_target_mak
6375 if test "$vhost_net" = "yes" ; then
6376 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6377 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
6380 if supported_hax_target $target; then
6381 echo "CONFIG_HAX=y" >> $config_target_mak
6383 if test "$target_bigendian" = "yes" ; then
6384 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
6386 if test "$target_softmmu" = "yes" ; then
6387 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6388 if test "$mttcg" = "yes" ; then
6389 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6392 if test "$target_user_only" = "yes" ; then
6393 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6394 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
6396 if test "$target_linux_user" = "yes" ; then
6397 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6400 if test ! -z "$gdb_xml_files" ; then
6401 for x in $gdb_xml_files; do
6402 list="$list $source_path/gdb-xml/$x"
6404 echo "TARGET_XML_FILES=$list" >> $config_target_mak
6407 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6408 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
6410 if test "$target_bsd_user" = "yes" ; then
6411 echo "CONFIG_BSD_USER=y" >> $config_target_mak
6414 # generate QEMU_CFLAGS/LDFLAGS for targets
6420 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6421 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6424 for i in $ARCH $TARGET_BASE_ARCH ; do
6427 disas_config "ALPHA"
6430 if test -n "${cxx}"; then
6431 disas_config "ARM_A64"
6436 if test -n "${cxx}"; then
6437 disas_config "ARM_A64"
6459 disas_config "MICROBLAZE"
6465 disas_config "MOXIE"
6468 disas_config "NIOS2"
6471 disas_config "OPENRISC"
6483 disas_config "SPARC"
6486 disas_config "XTENSA"
6490 if test "$tcg_interpreter" = "yes" ; then
6496 # Ensure there's only a single GP
6497 cflags="-msmall-data $cflags"
6501 if test "$gprof" = "yes" ; then
6502 echo "TARGET_GPROF=yes" >> $config_target_mak
6503 if test "$target_linux_user" = "yes" ; then
6505 ldflags="-p $ldflags"
6507 if test "$target_softmmu" = "yes" ; then
6508 ldflags="-p $ldflags"
6509 echo "GPROF_CFLAGS=-p" >> $config_target_mak
6513 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6514 ldflags="$ldflags $textseg_ldflags"
6517 echo "LDFLAGS+=$ldflags" >> $config_target_mak
6518 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6520 done # for target in $targets
6522 if [ "$pixman" = "internal" ]; then
6523 echo "config-host.h: subdir-pixman" >> $config_host_mak
6526 if [ "$dtc_internal" = "yes" ]; then
6527 echo "config-host.h: subdir-dtc" >> $config_host_mak
6530 if test "$numa" = "yes"; then
6531 echo "CONFIG_NUMA=y" >> $config_host_mak
6534 if test "$ccache_cpp2" = "yes"; then
6535 echo "export CCACHE_CPP2=y" >> $config_host_mak
6538 # build tree in object directory in case the source is not in the current directory
6539 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
6540 DIRS="$DIRS docs docs/interop fsdev"
6541 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
6542 DIRS="$DIRS roms/seabios roms/vgabios"
6543 DIRS="$DIRS qapi-generated"
6544 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6545 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6546 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
6547 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
6548 FILES="$FILES pc-bios/spapr-rtas/Makefile"
6549 FILES="$FILES pc-bios/s390-ccw/Makefile"
6550 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6551 FILES="$FILES pc-bios/qemu-icon.bmp"
6552 FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
6554 $source_path/pc-bios/*.bin \
6555 $source_path/pc-bios/*.lid \
6556 $source_path/pc-bios/*.aml \
6557 $source_path/pc-bios/*.rom \
6558 $source_path/pc-bios/*.dtb \
6559 $source_path/pc-bios/*.img \
6560 $source_path/pc-bios/openbios-* \
6561 $source_path/pc-bios/u-boot.* \
6562 $source_path/pc-bios/palcode-*
6564 FILES="$FILES pc-bios/$(basename $bios_file)"
6566 for test_file in $(find $source_path/tests/acpi-test-data -type f)
6568 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6571 for f in $FILES ; do
6572 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6573 symlink "$source_path/$f" "$f"
6577 # temporary config to build submodules
6578 for rom in seabios vgabios ; do
6579 config_mak=roms/$rom/config.mak
6580 echo "# Automatically generated by configure - do not modify" > $config_mak
6581 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6582 echo "AS=$as" >> $config_mak
6583 echo "CCAS=$ccas" >> $config_mak
6584 echo "CC=$cc" >> $config_mak
6585 echo "BCC=bcc" >> $config_mak
6586 echo "CPP=$cpp" >> $config_mak
6587 echo "OBJCOPY=objcopy" >> $config_mak
6588 echo "IASL=$iasl" >> $config_mak
6589 echo "LD=$ld" >> $config_mak
6592 # set up tests data directory
6593 if [ ! -e tests/data ]; then
6594 symlink "$source_path/tests/data" tests/data
6597 # set up qemu-iotests in this build directory
6598 iotests_common_env="tests/qemu-iotests/common.env"
6599 iotests_check="tests/qemu-iotests/check"
6601 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6602 echo >> "$iotests_common_env"
6603 echo "export PYTHON='$python'" >> "$iotests_common_env"
6605 if [ ! -e "$iotests_check" ]; then
6606 symlink "$source_path/$iotests_check" "$iotests_check"
6609 # Save the configure command line for later reuse.
6610 cat <<EOD >config.status
6612 # Generated by configure.
6613 # Run this file to recreate the current configuration.
6614 # Compiler output produced by configure, useful for debugging
6615 # configure, is in config.log if it exists.
6617 printf "exec" >>config.status
6618 printf " '%s'" "$0" "$@" >>config.status
6619 echo ' "$@"' >>config.status
6620 chmod +x config.status