mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
Add FreeBSD support to OpenZFS
Add the FreeBSD platform code to the OpenZFS repository. As of this commit the source can be compiled and tested on FreeBSD 11 and 12. Subsequent commits are now required to compile on FreeBSD and Linux. Additionally, they must pass the ZFS Test Suite on FreeBSD which is being run by the CI. As of this commit 1230 tests pass on FreeBSD and there are no unexpected failures. Reviewed-by: Sean Eric Fagan <sef@ixsystems.com> Reviewed-by: Jorgen Lundman <lundman@lundman.net> Reviewed-by: Richard Laager <rlaager@wiktel.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Co-authored-by: Ryan Moeller <ryan@iXsystems.com> Signed-off-by: Matt Macy <mmacy@FreeBSD.org> Signed-off-by: Ryan Moeller <ryan@iXsystems.com> Closes #898 Closes #8987
This commit is contained in:
+24
-2
@@ -14,26 +14,48 @@ DEFAULT_INCLUDES += \
|
||||
-I$(top_srcdir)/lib/libspl/include/os/linux
|
||||
endif
|
||||
|
||||
if BUILD_FREEBSD
|
||||
DEFAULT_INCLUDES += \
|
||||
-I$(top_srcdir)/lib/libspl/include/os/freebsd
|
||||
endif
|
||||
|
||||
AM_LIBTOOLFLAGS = --silent
|
||||
|
||||
AM_CFLAGS = -std=gnu99 -Wall -Wstrict-prototypes -fno-strict-aliasing
|
||||
AM_CFLAGS += $(NO_OMIT_FRAME_POINTER)
|
||||
AM_CFLAGS += $(DEBUG_CFLAGS)
|
||||
AM_CFLAGS += $(ASAN_CFLAGS)
|
||||
AM_CFLAGS += $(CODE_COVERAGE_CFLAGS)
|
||||
AM_CFLAGS += $(CODE_COVERAGE_CFLAGS) $(NO_FORMAT_ZERO_LENGTH)
|
||||
if BUILD_FREEBSD
|
||||
AM_CFLAGS += -fPIC -Werror -Wno-unknown-pragmas -Wno-enum-conversion
|
||||
AM_CFLAGS += -include $(top_srcdir)/include/os/freebsd/spl/sys/ccompile.h
|
||||
AM_CFLAGS += -I/usr/include -I/usr/local/include
|
||||
AM_CFLAGS += -D_MACHINE_ENDIAN_H_
|
||||
endif
|
||||
|
||||
AM_CPPFLAGS = -D_GNU_SOURCE
|
||||
AM_CPPFLAGS += -D_REENTRANT
|
||||
AM_CPPFLAGS += -D_FILE_OFFSET_BITS=64
|
||||
AM_CPPFLAGS += -D_LARGEFILE64_SOURCE
|
||||
AM_CPPFLAGS += -DHAVE_LARGE_STACKS=1
|
||||
AM_CPPFLAGS += -DTEXT_DOMAIN=\"zfs-linux-user\"
|
||||
AM_CPPFLAGS += -DLIBEXECDIR=\"$(libexecdir)\"
|
||||
AM_CPPFLAGS += -DRUNSTATEDIR=\"$(runstatedir)\"
|
||||
AM_CPPFLAGS += -DSBINDIR=\"$(sbindir)\"
|
||||
AM_CPPFLAGS += -DSYSCONFDIR=\"$(sysconfdir)\"
|
||||
AM_CPPFLAGS += $(DEBUG_CPPFLAGS)
|
||||
AM_CPPFLAGS += $(CODE_COVERAGE_CPPFLAGS)
|
||||
if BUILD_LINUX
|
||||
AM_CPPFLAGS += -DTEXT_DOMAIN=\"zfs-linux-user\"
|
||||
endif
|
||||
if BUILD_FREEBSD
|
||||
AM_CPPFLAGS += -DTEXT_DOMAIN=\"zfs-freebsd-user\"
|
||||
endif
|
||||
|
||||
AM_LDFLAGS = $(DEBUG_LDFLAGS)
|
||||
AM_LDFLAGS += $(ASAN_LDFLAGS)
|
||||
|
||||
if BUILD_FREEBSD
|
||||
AM_LDFLAGS += -fstack-protector-strong -shared
|
||||
AM_LDFLAGS += -Wl,-x -Wl,--fatal-warnings -Wl,--warn-shared-textrel
|
||||
AM_LDFLAGS += -lm
|
||||
endif
|
||||
|
||||
@@ -17,7 +17,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_ARCH], [
|
||||
i?86)
|
||||
TARGET_CPU=i386
|
||||
;;
|
||||
x86_64)
|
||||
amd64|x86_64)
|
||||
TARGET_CPU=x86_64
|
||||
;;
|
||||
powerpc*)
|
||||
|
||||
@@ -87,6 +87,27 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION], [
|
||||
AC_SUBST([NO_FORMAT_TRUNCATION])
|
||||
])
|
||||
|
||||
dnl #
|
||||
dnl # Check if gcc supports -Wno-format-truncation option.
|
||||
dnl #
|
||||
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_ZERO_LENGTH], [
|
||||
AC_MSG_CHECKING([whether $CC supports -Wno-format-zero-length])
|
||||
|
||||
saved_flags="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -Werror -Wno-format-zero-length"
|
||||
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
|
||||
NO_FORMAT_ZERO_LENGTH=-Wno-format-zero-length
|
||||
AC_MSG_RESULT([yes])
|
||||
], [
|
||||
NO_FORMAT_ZERO_LENGTH=
|
||||
AC_MSG_RESULT([no])
|
||||
])
|
||||
|
||||
CFLAGS="$saved_flags"
|
||||
AC_SUBST([NO_FORMAT_ZERO_LENGTH])
|
||||
])
|
||||
|
||||
|
||||
dnl #
|
||||
dnl # Check if gcc supports -Wno-bool-compare option.
|
||||
|
||||
+20
-18
@@ -2,29 +2,31 @@ dnl #
|
||||
dnl # Default ZFS kernel configuration
|
||||
dnl #
|
||||
AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
|
||||
dnl # Setup the kernel build environment.
|
||||
ZFS_AC_KERNEL
|
||||
ZFS_AC_QAT
|
||||
AM_COND_IF([BUILD_LINUX], [
|
||||
dnl # Setup the kernel build environment.
|
||||
ZFS_AC_KERNEL
|
||||
ZFS_AC_QAT
|
||||
|
||||
dnl # Sanity checks for module building and CONFIG_* defines
|
||||
ZFS_AC_KERNEL_TEST_MODULE
|
||||
ZFS_AC_KERNEL_CONFIG_DEFINED
|
||||
dnl # Sanity checks for module building and CONFIG_* defines
|
||||
ZFS_AC_KERNEL_TEST_MODULE
|
||||
ZFS_AC_KERNEL_CONFIG_DEFINED
|
||||
|
||||
dnl # Sequential ZFS_LINUX_TRY_COMPILE tests
|
||||
ZFS_AC_KERNEL_FPU_HEADER
|
||||
ZFS_AC_KERNEL_WAIT_QUEUE_ENTRY_T
|
||||
ZFS_AC_KERNEL_MISC_MINOR
|
||||
ZFS_AC_KERNEL_DECLARE_EVENT_CLASS
|
||||
dnl # Sequential ZFS_LINUX_TRY_COMPILE tests
|
||||
ZFS_AC_KERNEL_FPU_HEADER
|
||||
ZFS_AC_KERNEL_WAIT_QUEUE_ENTRY_T
|
||||
ZFS_AC_KERNEL_MISC_MINOR
|
||||
ZFS_AC_KERNEL_DECLARE_EVENT_CLASS
|
||||
|
||||
dnl # Parallel ZFS_LINUX_TEST_SRC / ZFS_LINUX_TEST_RESULT tests
|
||||
ZFS_AC_KERNEL_TEST_SRC
|
||||
ZFS_AC_KERNEL_TEST_RESULT
|
||||
dnl # Parallel ZFS_LINUX_TEST_SRC / ZFS_LINUX_TEST_RESULT tests
|
||||
ZFS_AC_KERNEL_TEST_SRC
|
||||
ZFS_AC_KERNEL_TEST_RESULT
|
||||
|
||||
AS_IF([test "$LINUX_OBJ" != "$LINUX"], [
|
||||
KERNEL_MAKE="$KERNEL_MAKE O=$LINUX_OBJ"
|
||||
AS_IF([test "$LINUX_OBJ" != "$LINUX"], [
|
||||
KERNEL_MAKE="$KERNEL_MAKE O=$LINUX_OBJ"
|
||||
])
|
||||
|
||||
AC_SUBST(KERNEL_MAKE)
|
||||
])
|
||||
|
||||
AC_SUBST(KERNEL_MAKE)
|
||||
])
|
||||
|
||||
dnl #
|
||||
|
||||
@@ -3,7 +3,7 @@ dnl # Checks if host toolchain supports SIMD instructions
|
||||
dnl #
|
||||
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD], [
|
||||
case "$host_cpu" in
|
||||
x86_64 | x86 | i686)
|
||||
amd64 | x86_64 | x86 | i686)
|
||||
ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE
|
||||
ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2
|
||||
ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3
|
||||
|
||||
+7
-6
@@ -4,14 +4,16 @@ dnl #
|
||||
AC_DEFUN([ZFS_AC_CONFIG_USER], [
|
||||
ZFS_AC_CONFIG_USER_GETTEXT
|
||||
ZFS_AC_CONFIG_USER_MOUNT_HELPER
|
||||
ZFS_AC_CONFIG_USER_UDEV
|
||||
ZFS_AC_CONFIG_USER_SYSTEMD
|
||||
ZFS_AC_CONFIG_USER_SYSVINIT
|
||||
ZFS_AC_CONFIG_USER_DRACUT
|
||||
ZFS_AC_CONFIG_USER_ZLIB
|
||||
ZFS_AC_CONFIG_USER_LIBUUID
|
||||
AM_COND_IF([BUILD_LINUX], [
|
||||
ZFS_AC_CONFIG_USER_UDEV
|
||||
ZFS_AC_CONFIG_USER_SYSTEMD
|
||||
ZFS_AC_CONFIG_USER_LIBUUID
|
||||
ZFS_AC_CONFIG_USER_LIBBLKID
|
||||
])
|
||||
ZFS_AC_CONFIG_USER_LIBTIRPC
|
||||
ZFS_AC_CONFIG_USER_LIBBLKID
|
||||
ZFS_AC_CONFIG_USER_LIBUDEV
|
||||
ZFS_AC_CONFIG_USER_LIBSSL
|
||||
ZFS_AC_CONFIG_USER_LIBAIO
|
||||
@@ -19,10 +21,9 @@ AC_DEFUN([ZFS_AC_CONFIG_USER], [
|
||||
ZFS_AC_CONFIG_USER_MAKEDEV_IN_SYSMACROS
|
||||
ZFS_AC_CONFIG_USER_MAKEDEV_IN_MKDEV
|
||||
ZFS_AC_CONFIG_USER_ZFSEXEC
|
||||
|
||||
ZFS_AC_TEST_FRAMEWORK
|
||||
|
||||
AC_CHECK_FUNCS([mlockall strlcat strlcpy])
|
||||
AC_CHECK_FUNCS([issetugid mlockall strlcat strlcpy])
|
||||
])
|
||||
|
||||
dnl #
|
||||
|
||||
+26
-12
@@ -157,6 +157,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [
|
||||
ZFS_AC_CONFIG_ALWAYS_CC_NO_BOOL_COMPARE
|
||||
ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN
|
||||
ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION
|
||||
ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_ZERO_LENGTH
|
||||
ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER
|
||||
ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA
|
||||
ZFS_AC_CONFIG_ALWAYS_CC_ASAN
|
||||
@@ -173,13 +174,6 @@ AC_DEFUN([ZFS_AC_CONFIG], [
|
||||
dnl # Remove the previous build test directory.
|
||||
rm -Rf build
|
||||
|
||||
AC_ARG_VAR([TEST_JOBS],
|
||||
[simultaneous jobs during configure (defaults to $(nproc))])
|
||||
if test "x$ac_cv_env_TEST_JOBS_set" != "xset"; then
|
||||
TEST_JOBS=$(nproc)
|
||||
fi
|
||||
AC_SUBST(TEST_JOBS)
|
||||
|
||||
ZFS_CONFIG=all
|
||||
AC_ARG_WITH([config],
|
||||
AS_HELP_STRING([--with-config=CONFIG],
|
||||
@@ -197,6 +191,16 @@ AC_DEFUN([ZFS_AC_CONFIG], [
|
||||
|
||||
ZFS_AC_CONFIG_ALWAYS
|
||||
|
||||
|
||||
AM_COND_IF([BUILD_LINUX], [
|
||||
AC_ARG_VAR([TEST_JOBS],
|
||||
[simultaneous jobs during configure (defaults to $(nproc))])
|
||||
if test "x$ac_cv_env_TEST_JOBS_set" != "xset"; then
|
||||
TEST_JOBS=$(nproc)
|
||||
fi
|
||||
AC_SUBST(TEST_JOBS)
|
||||
])
|
||||
|
||||
case "$ZFS_CONFIG" in
|
||||
kernel) ZFS_AC_CONFIG_KERNEL ;;
|
||||
user) ZFS_AC_CONFIG_USER ;;
|
||||
@@ -405,7 +409,7 @@ dnl # Using the VENDOR tag from config.guess set the default
|
||||
dnl # package type for 'make pkg': (rpm | deb | tgz)
|
||||
dnl #
|
||||
AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [
|
||||
AC_MSG_CHECKING([linux distribution])
|
||||
AC_MSG_CHECKING([os distribution])
|
||||
if test -f /etc/toss-release ; then
|
||||
VENDOR=toss ;
|
||||
elif test -f /etc/fedora-release ; then
|
||||
@@ -428,6 +432,8 @@ AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [
|
||||
VENDOR=debian ;
|
||||
elif test -f /etc/alpine-release ; then
|
||||
VENDOR=alpine ;
|
||||
elif test -f /bin/freebsd-version ; then
|
||||
VENDOR=freebsd ;
|
||||
else
|
||||
VENDOR= ;
|
||||
fi
|
||||
@@ -447,13 +453,17 @@ AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [
|
||||
lunar) DEFAULT_PACKAGE=tgz ;;
|
||||
ubuntu) DEFAULT_PACKAGE=deb ;;
|
||||
debian) DEFAULT_PACKAGE=deb ;;
|
||||
freebsd) DEFAULT_PACKAGE=pkg ;;
|
||||
*) DEFAULT_PACKAGE=rpm ;;
|
||||
esac
|
||||
AC_MSG_RESULT([$DEFAULT_PACKAGE])
|
||||
AC_SUBST(DEFAULT_PACKAGE)
|
||||
|
||||
DEFAULT_INIT_DIR=$sysconfdir/init.d
|
||||
AC_MSG_CHECKING([default init directory])
|
||||
case "$VENDOR" in
|
||||
freebsd) DEFAULT_INIT_DIR=$sysconfdir/rc.d ;;
|
||||
*) DEFAULT_INIT_DIR=$sysconfdir/init.d;;
|
||||
esac
|
||||
AC_MSG_RESULT([$DEFAULT_INIT_DIR])
|
||||
AC_SUBST(DEFAULT_INIT_DIR)
|
||||
|
||||
@@ -470,6 +480,7 @@ AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [
|
||||
lunar) DEFAULT_INIT_SCRIPT=lunar ;;
|
||||
ubuntu) DEFAULT_INIT_SCRIPT=lsb ;;
|
||||
debian) DEFAULT_INIT_SCRIPT=lsb ;;
|
||||
freebsd) DEFAULT_INIT_SCRIPT=freebsd;;
|
||||
*) DEFAULT_INIT_SCRIPT=lsb ;;
|
||||
esac
|
||||
AC_MSG_RESULT([$DEFAULT_INIT_SCRIPT])
|
||||
@@ -485,6 +496,7 @@ AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [
|
||||
sles) DEFAULT_INITCONF_DIR=/etc/sysconfig ;;
|
||||
ubuntu) DEFAULT_INITCONF_DIR=/etc/default ;;
|
||||
debian) DEFAULT_INITCONF_DIR=/etc/default ;;
|
||||
freebsd) DEFAULT_INITCONF_DIR=$sysconfdir/rc.conf.d;;
|
||||
*) DEFAULT_INITCONF_DIR=/etc/default ;;
|
||||
esac
|
||||
AC_MSG_RESULT([$DEFAULT_INITCONF_DIR])
|
||||
@@ -506,7 +518,9 @@ dnl # Default ZFS package configuration
|
||||
dnl #
|
||||
AC_DEFUN([ZFS_AC_PACKAGE], [
|
||||
ZFS_AC_DEFAULT_PACKAGE
|
||||
ZFS_AC_RPM
|
||||
ZFS_AC_DPKG
|
||||
ZFS_AC_ALIEN
|
||||
AS_IF([test x$VENDOR != xfreebsd], [
|
||||
ZFS_AC_RPM
|
||||
ZFS_AC_DPKG
|
||||
ZFS_AC_ALIEN
|
||||
])
|
||||
])
|
||||
|
||||
Reference in New Issue
Block a user