return 1
}
+
+ld_has() {
+ $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
+}
+
# default parameters
source_path=$(dirname "$0")
cpu=""
docs=""
fdt=""
netmap="no"
-pixman=""
sdl=""
sdlabi=""
virtfs=""
vhost_net="no"
vhost_scsi="no"
vhost_vsock="no"
+vhost_user=""
kvm="no"
hax="no"
rdma=""
softmmu="yes"
linux_user="no"
bsd_user="no"
-aix="no"
blobs="yes"
pkgversion=""
pie=""
usb_redir=""
opengl=""
opengl_dmabuf="no"
+cpuid_h="no"
avx2_opt="no"
zlib="yes"
lzo=""
targetos='SunOS'
elif check_define __HAIKU__ ; then
targetos='Haiku'
+elif check_define __FreeBSD__ ; then
+ targetos='FreeBSD'
+elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
+ targetos='GNU/kFreeBSD'
+elif check_define __DragonFly__ ; then
+ targetos='DragonFly'
+elif check_define __NetBSD__; then
+ targetos='NetBSD'
+elif check_define __APPLE__; then
+ targetos='Darwin'
else
- targetos=$(uname -s)
+ # This is a fatal error, but don't report it yet, because we
+ # might be going to just print the --help text, or it might
+ # be the result of a missing compiler.
+ targetos='bogus'
+ bogus_os='yes'
fi
# Some host OSes need non-standard checks for which CPU to use.
cpu="$cpu"
supported_cpu="yes"
;;
- ia64)
- cpu="$cpu"
- ;;
i386|i486|i586|i686|i86pc|BePC)
cpu="i386"
supported_cpu="yes"
install="${INSTALL-ginstall}"
ld="gld"
smbd="${SMBD-/usr/sfw/sbin/smbd}"
- needs_libsunmath="no"
- solarisrev=$(uname -r | cut -f2 -d.)
- if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
- if test "$solarisrev" -le 9 ; then
- if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
- needs_libsunmath="yes"
- QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
- LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
- LIBS="-lsunmath $LIBS"
- else
- error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
- "libsunmath from the Sun Studio compilers tools, due to a lack of" \
- "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
- "Studio 11 can be downloaded from www.sun.com."
- fi
- fi
- fi
if test -f /usr/include/sys/soundcard.h ; then
audio_drv_list="oss"
fi
LIBS="$solarisnetlibs $LIBS"
libs_qga="$solarisnetlibs $libs_qga"
;;
-AIX)
- aix="yes"
- make="${MAKE-gmake}"
-;;
Haiku)
haiku="yes"
QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
supported_os="yes"
;;
-*)
- # This is a fatal error, but don't report it yet, because we
- # might be going to just print the --help text, or it might
- # be the result of a missing compiler.
- bogus_os="yes"
-;;
esac
if [ "$bsd" = "yes" ] ; then
# configure to be used by RPM and similar macros that set
# lots of directory switches by default.
;;
- --with-system-pixman) pixman="system"
- ;;
- --without-system-pixman) pixman="internal"
- ;;
- --without-pixman) pixman="none"
- ;;
--disable-sdl) sdl="no"
;;
--enable-sdl) sdl="yes"
;;
--enable-vxhs) vxhs="yes"
;;
+ --disable-vhost-user) vhost_user="no"
+ ;;
+ --enable-vhost-user)
+ vhost_user="yes"
+ if test "$mingw32" = "yes"; then
+ error_exit "vhost-user isn't available on win32"
+ fi
+ ;;
*)
echo "ERROR: unknown option $opt"
echo "Try '$0 --help' for more information"
esac
done
+if test "$vhost_user" = ""; then
+ if test "$mingw32" = "yes"; then
+ vhost_user="no"
+ else
+ vhost_user="yes"
+ fi
+fi
+
case "$cpu" in
ppc)
CPU_CFLAGS="-m32"
tools build qemu-io, qemu-nbd and qemu-image tools
vxhs Veritas HyperScale vDisk backend support
crypto-afalg Linux AF_ALG crypto backend driver
+ vhost-user vhost-user support
NOTE: The object files are built at the place where configure is launched
EOF
# the compiler works (so the results of the check_defines we used
# to identify the OS are reliable), if we didn't recognize the
# host OS we should stop now.
- error_exit "Unrecognized host OS $targetos"
+ error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
fi
gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
fi
fi
-##########################################
-# avx2 optimization requirement check
-
-cat > $TMPC << EOF
-#pragma GCC push_options
-#pragma GCC target("avx2")
-#include <cpuid.h>
-#include <immintrin.h>
-static int bar(void *a) {
- __m256i x = *(__m256i *)a;
- return _mm256_testz_si256(x, x);
-}
-int main(int argc, char *argv[]) { return bar(argv[0]); }
-EOF
-if compile_object "" ; then
- avx2_opt="yes"
-fi
-
#########################################
# zlib check
arm|aarch64)
libseccomp_minver="2.2.3"
;;
- ppc|ppc64)
+ ppc|ppc64|s390x)
libseccomp_minver="2.3.0"
;;
*)
if test "$libseccomp_minver" != "" &&
$pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
- libs_softmmu="$libs_softmmu $($pkg_config --libs libseccomp)"
- QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libseccomp)"
+ seccomp_cflags="$($pkg_config --cflags libseccomp)"
+ seccomp_libs="$($pkg_config --libs libseccomp)"
seccomp="yes"
else
if test "$seccomp" = "yes" ; then
# Xen unstable
elif
cat > $TMPC <<EOF &&
+#undef XC_WANT_COMPAT_MAP_FOREIGN_API
+#include <xenforeignmemory.h>
+int main(void) {
+ xenforeignmemory_handle *xfmem;
+
+ xfmem = xenforeignmemory_open(0, 0);
+ xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
+
+ return 0;
+}
+EOF
+ compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
+ then
+ xen_stable_libs="-lxendevicemodel $xen_stable_libs"
+ xen_ctrl_version=41000
+ xen=yes
+ elif
+ cat > $TMPC <<EOF &&
#undef XC_WANT_COMPAT_DEVICEMODEL_API
#define __XEN_TOOLS__
#include <xendevicemodel.h>
sdl_cflags="$sdl_cflags $x11_cflags"
sdl_libs="$sdl_libs $x11_libs"
fi
- libs_softmmu="$sdl_libs $libs_softmmu"
fi
##########################################
EOF
if compile_prog "" "$vde_libs" ; then
vde=yes
- libs_softmmu="$vde_libs $libs_softmmu"
- libs_tools="$vde_libs $libs_tools"
else
if test "$vde" = "yes" ; then
feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
##########################################
# pixman support probe
-if test "$pixman" = ""; then
- if test "$want_tools" = "no" -a "$softmmu" = "no"; then
- pixman="none"
- elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
- pixman="system"
- else
- pixman="internal"
- fi
-fi
-if test "$pixman" = "none"; then
- if test "$want_tools" != "no" -o "$softmmu" != "no"; then
- error_exit "pixman disabled but system emulation or tools build" \
- "enabled. You can turn off pixman only if you also" \
- "disable all system emulation targets and the tools" \
- "build with '--disable-tools --disable-system'."
- fi
+if test "$want_tools" = "no" -a "$softmmu" = "no"; then
pixman_cflags=
pixman_libs=
-elif test "$pixman" = "system"; then
- # pixman version has been checked above
+elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
pixman_cflags=$($pkg_config --cflags pixman-1)
pixman_libs=$($pkg_config --libs pixman-1)
else
- if test ! -d ${source_path}/pixman/pixman; then
- error_exit "pixman >= 0.21.8 not present. Your options:" \
- " (1) Preferred: Install the pixman devel package (any recent" \
- " distro should have packages as Xorg needs pixman too)." \
- " (2) Fetch the pixman submodule, using:" \
- " git submodule update --init pixman"
- fi
- mkdir -p pixman/pixman
- pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
- pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
+ error_exit "pixman >= 0.21.8 not present." \
+ "Please install the pixman devel package."
fi
##########################################
fi
if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
- "$aix" != "yes" -a "$haiku" != "yes" ; then
+ "$haiku" != "yes" ; then
libs_softmmu="-lutil $libs_softmmu"
fi
########################################
# check if cpuid.h is usable.
-cpuid_h=no
cat > $TMPC << EOF
#include <cpuid.h>
int main(void) {
cpuid_h=yes
fi
+##########################################
+# avx2 optimization requirement check
+#
+# There is no point enabling this if cpuid.h is not usable,
+# since we won't be able to select the new routines.
+
+if test $cpuid_h = yes; then
+ cat > $TMPC << EOF
+#pragma GCC push_options
+#pragma GCC target("avx2")
+#include <cpuid.h>
+#include <immintrin.h>
+static int bar(void *a) {
+ __m256i x = *(__m256i *)a;
+ return _mm256_testz_si256(x, x);
+}
+int main(int argc, char *argv[]) { return bar(argv[0]); }
+EOF
+ if compile_object "" ; then
+ avx2_opt="yes"
+ fi
+fi
+
########################################
# check if __[u]int128_t is usable.
# Use ASLR, no-SEH and DEP if available
if test "$mingw32" = "yes" ; then
for flag in --dynamicbase --no-seh --nxcompat; do
- if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
+ if ld_has $flag ; then
LDFLAGS="-Wl,$flag $LDFLAGS"
fi
done
qemu_datadir=$datadir$confsuffix
qemu_localedir="$datadir/locale"
+# We can only support ivshmem if we have eventfd
+if [ "$eventfd" = "yes" ]; then
+ ivshmem=yes
+fi
+
tools=""
if test "$want_tools" = "yes" ; then
tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
tools="qemu-nbd\$(EXESUF) $tools"
+ fi
+ if [ "$ivshmem" = "yes" ]; then
tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
fi
fi
if test "$darwin" = "yes" ; then
echo "Cocoa support $cocoa"
fi
-echo "pixman $pixman"
echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
echo "GTK GL support $gtk_gl"
echo "vhost-net support $vhost_net"
echo "vhost-scsi support $vhost_scsi"
echo "vhost-vsock support $vhost_vsock"
+echo "vhost-user support $vhost_user"
echo "Trace backends $trace_backends"
if have_backend "simple"; then
echo "Trace output file $trace_file-<pid>"
echo "CONFIG_DARWIN=y" >> $config_host_mak
fi
-if test "$aix" = "yes" ; then
- echo "CONFIG_AIX=y" >> $config_host_mak
-fi
-
if test "$solaris" = "yes" ; then
echo "CONFIG_SOLARIS=y" >> $config_host_mak
- echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
- if test "$needs_libsunmath" = "yes" ; then
- echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
- fi
fi
if test "$haiku" = "yes" ; then
echo "CONFIG_HAIKU=y" >> $config_host_mak
fi
if test "$vde" = "yes" ; then
echo "CONFIG_VDE=y" >> $config_host_mak
+ echo "VDE_LIBS=$vde_libs" >> $config_host_mak
fi
if test "$netmap" = "yes" ; then
echo "CONFIG_NETMAP=y" >> $config_host_mak
echo "CONFIG_SDL=y" >> $config_host_mak
echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
+ echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
fi
if test "$cocoa" = "yes" ; then
echo "CONFIG_COCOA=y" >> $config_host_mak
if test "$vhost_scsi" = "yes" ; then
echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
fi
-if test "$vhost_net" = "yes" ; then
+if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
fi
if test "$vhost_vsock" = "yes" ; then
echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
fi
+if test "$vhost_user" = "yes" ; then
+ echo "CONFIG_VHOST_USER=y" >> $config_host_mak
+fi
if test "$blobs" = "yes" ; then
echo "INSTALL_BLOBS=yes" >> $config_host_mak
fi
if test "$seccomp" = "yes"; then
echo "CONFIG_SECCOMP=y" >> $config_host_mak
+ echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
+ echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
fi
# XXX: suppress that
echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
fi
-# USB host support
-if test "$libusb" = "yes"; then
- echo "HOST_USB=libusb legacy" >> $config_host_mak
-else
- echo "HOST_USB=stub" >> $config_host_mak
-fi
-
# TPM passthrough support?
if test "$tpm" = "yes"; then
echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
echo "HAVE_UTMPX=y" >> $config_host_mak
fi
+if test "$ivshmem" = "yes" ; then
+ echo "CONFIG_IVSHMEM=y" >> $config_host_mak
+fi
+
# Hold two types of flag:
# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
# a thread we have a handle to
echo "CONFIG_KVM=y" >> $config_target_mak
if test "$vhost_net" = "yes" ; then
echo "CONFIG_VHOST_NET=y" >> $config_target_mak
- echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
+ if test "$vhost_user" = "yes" ; then
+ echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
+ fi
fi
fi
if supported_hax_target $target; then
i386|x86_64|x32)
disas_config "I386"
;;
- ia64*)
- disas_config "IA64"
- ;;
lm32)
disas_config "LM32"
;;
ldflags="$ldflags $textseg_ldflags"
fi
+# Newer kernels on s390 check for an S390_PGSTE program header and
+# enable the pgste page table extensions in that case. This makes
+# the vm.allocate_pgste sysctl unnecessary. We enable this program
+# header if
+# - we build on s390x
+# - we build the system emulation for s390x (qemu-system-s390x)
+# - KVM is enabled
+# - the linker supports --s390-pgste
+if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
+ if ld_has --s390-pgste ; then
+ ldflags="-Wl,--s390-pgste $ldflags"
+ fi
+fi
+
echo "LDFLAGS+=$ldflags" >> $config_target_mak
echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
done # for target in $targets
-if [ "$pixman" = "internal" ]; then
- echo "config-host.h: subdir-pixman" >> $config_host_mak
-fi
-
if [ "$dtc_internal" = "yes" ]; then
echo "config-host.h: subdir-dtc" >> $config_host_mak
fi