include $(top_srcdir)/config/Rules.am
-AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
-AM_CPPFLAGS += -DDEBUG
+# Includes kernel code, generate warnings for large stack frames
+AM_CFLAGS += $(FRAME_LARGER_THAN)
+
+# Unconditionally enable ASSERTs
+AM_CPPFLAGS += -DDEBUG -UNDEBUG
DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
include $(top_srcdir)/config/Rules.am
-AM_CPPFLAGS += -DDEBUG
+# Unconditionally enable debugging for zdb
+AM_CPPFLAGS += -DDEBUG -UNDEBUG
DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
include $(top_srcdir)/config/Rules.am
-# -Wnoformat-truncation to get rid of compiler warning for unchecked
-# truncating snprintfs on gcc 7.1.1.
-AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(NO_FORMAT_TRUNCATION)
+# Get rid of compiler warning for unchecked truncating snprintfs on gcc 7.1.1
+AM_CFLAGS += $(NO_FORMAT_TRUNCATION)
+
+# Includes kernel code, generate warnings for large stack frames
+AM_CFLAGS += $(FRAME_LARGER_THAN)
+
+# Unconditionally enable ASSERTs
AM_CPPFLAGS += -DDEBUG -UNDEBUG
DEFAULT_INCLUDES += \
+#
+# Default build rules for all user space components, every Makefile.am
+# should include these rules and override or extend them as needed.
+#
+
DEFAULT_INCLUDES = -include ${top_builddir}/zfs_config.h
AM_LIBTOOLFLAGS = --silent
-AM_CFLAGS = ${DEBUG_CFLAGS} -Wall -Wstrict-prototypes
-AM_CFLAGS += ${NO_UNUSED_BUT_SET_VARIABLE}
-AM_CFLAGS += ${NO_BOOL_COMPARE}
-AM_CFLAGS += -fno-strict-aliasing
-AM_CFLAGS += -std=gnu99
+
+AM_CFLAGS = -std=gnu99 -Wall -Wstrict-prototypes -fno-strict-aliasing
+AM_CFLAGS += $(DEBUG_CFLAGS)
+AM_CFLAGS += $(ASAN_CFLAGS)
AM_CFLAGS += $(CODE_COVERAGE_CFLAGS)
-AM_CPPFLAGS = -D_GNU_SOURCE -D__EXTENSIONS__ -D_REENTRANT
-AM_CPPFLAGS += -D_POSIX_PTHREAD_SEMANTICS -D_FILE_OFFSET_BITS=64
-AM_CPPFLAGS += -D_LARGEFILE64_SOURCE -DHAVE_LARGE_STACKS=1
+
+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)
+
+AM_LDFLAGS = $(DEBUG_LDFLAGS)
+AM_LDFLAGS += $(ASAN_LDFLAGS)
--- /dev/null
+dnl #
+dnl # Enabled -fsanitize=address if supported by gcc.
+dnl #
+dnl # LDFLAGS needs -fsanitize=address at all times so libraries compiled with
+dnl # it will be linked successfully. CFLAGS will vary by binary being built.
+dnl #
+dnl # The ASAN_OPTIONS environment variable can be used to further control
+dnl # the behavior of binaries and libraries build with -fsanitize=address.
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_ASAN], [
+ AC_MSG_CHECKING([whether to build with -fsanitize=address support])
+ AC_ARG_ENABLE([asan],
+ [AS_HELP_STRING([--enable-asan],
+ [Enable -fsanitize=address support @<:@default=no@:>@])],
+ [],
+ [enable_asan=no])
+
+ AM_CONDITIONAL([ASAN_ENABLED], [test x$enable_asan = xyes])
+ AC_SUBST([ASAN_ENABLED], [$enable_asan])
+ AC_MSG_RESULT($enable_asan)
+
+ AS_IF([ test "$enable_asan" = "yes" ], [
+ AC_MSG_CHECKING([whether $CC supports -fsanitize=address])
+ saved_cflags="$CFLAGS"
+ CFLAGS="$CFLAGS -fsanitize=address"
+ AC_LINK_IFELSE([
+ AC_LANG_SOURCE([[ int main() { return 0; } ]])
+ ], [
+ ASAN_CFLAGS="-fsanitize=address"
+ ASAN_LDFLAGS="-fsanitize=address"
+ ASAN_ZFS="_with_asan"
+ AC_MSG_RESULT([yes])
+ ], [
+ AC_MSG_ERROR([$CC does not support -fsanitize=address])
+ ])
+ CFLAGS="$saved_cflags"
+ ], [
+ ASAN_CFLAGS=""
+ ASAN_LDFLAGS=""
+ ASAN_ZFS="_without_asan"
+ ])
+
+ AC_SUBST([ASAN_CFLAGS])
+ AC_SUBST([ASAN_LDFLAGS])
+ AC_SUBST([ASAN_ZFS])
+])
+
+dnl #
+dnl # Check if gcc supports -Wframe-larger-than=<size> option.
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN], [
+ AC_MSG_CHECKING([whether $CC supports -Wframe-larger-than=<size>])
+
+ saved_flags="$CFLAGS"
+ CFLAGS="$CFLAGS -Wframe-larger-than=4096"
+
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
+ FRAME_LARGER_THAN="-Wframe-larger-than=4096"
+ AC_MSG_RESULT([yes])
+ ], [
+ FRAME_LARGER_THAN=""
+ AC_MSG_RESULT([no])
+ ])
+
+ CFLAGS="$saved_flags"
+ AC_SUBST([FRAME_LARGER_THAN])
+])
+
+dnl #
+dnl # Check if gcc supports -Wno-format-truncation option.
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION], [
+ AC_MSG_CHECKING([whether $CC supports -Wno-format-truncation])
+
+ saved_flags="$CFLAGS"
+ CFLAGS="$CFLAGS -Wno-format-truncation"
+
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
+ NO_FORMAT_TRUNCATION=-Wno-format-truncation
+ AC_MSG_RESULT([yes])
+ ], [
+ NO_FORMAT_TRUNCATION=
+ AC_MSG_RESULT([no])
+ ])
+
+ CFLAGS="$saved_flags"
+ AC_SUBST([NO_FORMAT_TRUNCATION])
+])
+
+
+dnl #
+dnl # Check if gcc supports -Wno-bool-compare option.
+dnl #
+dnl # We actually invoke gcc with the -Wbool-compare option
+dnl # and infer the 'no-' version does or doesn't exist based upon
+dnl # the results. This is required because when checking any of
+dnl # no- prefixed options gcc always returns success.
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_BOOL_COMPARE], [
+ AC_MSG_CHECKING([whether $CC supports -Wno-bool-compare])
+
+ saved_flags="$CFLAGS"
+ CFLAGS="$CFLAGS -Wbool-compare"
+
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
+ NO_BOOL_COMPARE=-Wno-bool-compare
+ AC_MSG_RESULT([yes])
+ ], [
+ NO_BOOL_COMPARE=
+ AC_MSG_RESULT([no])
+ ])
+
+ CFLAGS="$saved_flags"
+ AC_SUBST([NO_BOOL_COMPARE])
+])
+
+dnl #
+dnl # Check if gcc supports -Wno-unused-but-set-variable option.
+dnl #
+dnl # We actually invoke gcc with the -Wunused-but-set-variable option
+dnl # and infer the 'no-' version does or doesn't exist based upon
+dnl # the results. This is required because when checking any of
+dnl # no- prefixed options gcc always returns success.
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_UNUSED_BUT_SET_VARIABLE], [
+ AC_MSG_CHECKING([whether $CC supports -Wno-unused-but-set-variable])
+
+ saved_flags="$CFLAGS"
+ CFLAGS="$CFLAGS -Wunused-but-set-variable"
+
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
+ NO_UNUSED_BUT_SET_VARIABLE=-Wno-unused-but-set-variable
+ AC_MSG_RESULT([yes])
+ ], [
+ NO_UNUSED_BUT_SET_VARIABLE=
+ AC_MSG_RESULT([no])
+ ])
+
+ CFLAGS="$saved_flags"
+ AC_SUBST([NO_UNUSED_BUT_SET_VARIABLE])
+])
+++ /dev/null
-dnl #
-dnl # Check if gcc supports -Wno-bool-compare option.
-dnl #
-dnl # We actually invoke gcc with the -Wbool-compare option
-dnl # and infer the 'no-' version does or doesn't exist based upon
-dnl # the results. This is required because when checking any of
-dnl # no- prefixed options gcc always returns success.
-dnl #
-AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_NO_BOOL_COMPARE], [
- AC_MSG_CHECKING([for -Wno-bool-compare support])
-
- saved_flags="$CFLAGS"
- CFLAGS="$CFLAGS -Wbool-compare"
-
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],
- [
- NO_BOOL_COMPARE=-Wno-bool-compare
- AC_MSG_RESULT([yes])
- ],
- [
- NO_BOOL_COMPARE=
- AC_MSG_RESULT([no])
- ])
-
- CFLAGS="$saved_flags"
- AC_SUBST([NO_BOOL_COMPARE])
-])
+++ /dev/null
-dnl #
-dnl # Check if gcc supports -Wno-unused-but-set-variable option.
-dnl #
-dnl # We actually invoke gcc with the -Wunused-but-set-variable option
-dnl # and infer the 'no-' version does or doesn't exist based upon
-dnl # the results. This is required because when checking any of
-dnl # no- prefixed options gcc always returns success.
-dnl #
-AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_NO_UNUSED_BUT_SET_VARIABLE], [
- AC_MSG_CHECKING([for -Wno-unused-but-set-variable support])
-
- saved_flags="$CFLAGS"
- CFLAGS="$CFLAGS -Wunused-but-set-variable"
-
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],
- [
- NO_UNUSED_BUT_SET_VARIABLE=-Wno-unused-but-set-variable
- AC_MSG_RESULT([yes])
- ],
- [
- NO_UNUSED_BUT_SET_VARIABLE=
- AC_MSG_RESULT([no])
- ])
-
- CFLAGS="$saved_flags"
- AC_SUBST([NO_UNUSED_BUT_SET_VARIABLE])
-])
ZFS_AC_KERNEL_VM_NODE_STAT
AS_IF([test "$LINUX_OBJ" != "$LINUX"], [
- KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
+ KERNEL_MAKE="$KERNEL_MAKE O=$LINUX_OBJ"
])
- AC_SUBST(KERNELMAKE_PARAMS)
-
- dnl # -Wall -fno-strict-aliasing -Wstrict-prototypes and other
- dnl # compiler options are added by the kernel build system.
- KERNELCPPFLAGS="$KERNELCPPFLAGS -std=gnu99"
- KERNELCPPFLAGS="$KERNELCPPFLAGS -Wno-declaration-after-statement"
- KERNELCPPFLAGS="$KERNELCPPFLAGS $NO_UNUSED_BUT_SET_VARIABLE"
- KERNELCPPFLAGS="$KERNELCPPFLAGS $NO_BOOL_COMPARE"
- KERNELCPPFLAGS="$KERNELCPPFLAGS -DHAVE_SPL -D_KERNEL"
- KERNELCPPFLAGS="$KERNELCPPFLAGS -DTEXT_DOMAIN=\\\"zfs-linux-kernel\\\""
-
- AC_SUBST(KERNELCPPFLAGS)
+ AC_SUBST(KERNEL_MAKE)
])
dnl #
+++ /dev/null
-dnl #
-dnl # Check if gcc supports -Wframe-larger-than=<size> option.
-dnl #
-AC_DEFUN([ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN], [
- AC_MSG_CHECKING([for -Wframe-larger-than=<size> support])
-
- saved_flags="$CFLAGS"
- CFLAGS="$CFLAGS -Wframe-larger-than=1024"
-
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],
- [
- FRAME_LARGER_THAN=-Wframe-larger-than=1024
- AC_MSG_RESULT([yes])
- ],
- [
- FRAME_LARGER_THAN=
- AC_MSG_RESULT([no])
- ])
-
- CFLAGS="$saved_flags"
- AC_SUBST([FRAME_LARGER_THAN])
-])
+++ /dev/null
-dnl #
-dnl # Check if gcc supports -Wno-format-truncation option.
-dnl #
-AC_DEFUN([ZFS_AC_CONFIG_USER_NO_FORMAT_TRUNCATION], [
- AC_MSG_CHECKING([for -Wno-format-truncation support])
-
- saved_flags="$CFLAGS"
- CFLAGS="$CFLAGS -Wno-format-truncation"
-
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],
- [
- NO_FORMAT_TRUNCATION=-Wno-format-truncation
- AC_MSG_RESULT([yes])
- ],
- [
- NO_FORMAT_TRUNCATION=
- AC_MSG_RESULT([no])
- ])
-
- CFLAGS="$saved_flags"
- AC_SUBST([NO_FORMAT_TRUNCATION])
-])
ZFS_AC_CONFIG_USER_LIBATTR
ZFS_AC_CONFIG_USER_LIBUDEV
ZFS_AC_CONFIG_USER_LIBSSL
- ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN
ZFS_AC_CONFIG_USER_RUNSTATEDIR
ZFS_AC_CONFIG_USER_MAKEDEV_IN_SYSMACROS
ZFS_AC_CONFIG_USER_MAKEDEV_IN_MKDEV
- ZFS_AC_CONFIG_USER_NO_FORMAT_TRUNCATION
ZFS_AC_TEST_FRAMEWORK
])
AC_DEFUN([ZFS_AC_DEBUG_ENABLE], [
- KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror"
- HOSTCFLAGS="${HOSTCFLAGS} -DDEBUG -Werror"
- DEBUG_CFLAGS="-DDEBUG -Werror"
- DEBUG_STACKFLAGS="-fstack-check"
+ DEBUG_CFLAGS="-Werror"
+ DEBUG_CPPFLAGS="-DDEBUG -UNDEBUG"
+ DEBUG_LDFLAGS=""
DEBUG_ZFS="_with_debug"
AC_DEFINE(ZFS_DEBUG, 1, [zfs debugging enabled])
+
+ KERNEL_DEBUG_CFLAGS="-Werror"
+ KERNEL_DEBUG_CPPFLAGS="-DDEBUG -UNDEBUG"
])
AC_DEFUN([ZFS_AC_DEBUG_DISABLE], [
- KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG "
- HOSTCFLAGS="${HOSTCFLAGS} -DNDEBUG "
- DEBUG_CFLAGS="-DNDEBUG"
- DEBUG_STACKFLAGS=""
+ DEBUG_CFLAGS=""
+ DEBUG_CPPFLAGS="-UDEBUG -DNDEBUG"
+ DEBUG_LDFLAGS=""
DEBUG_ZFS="_without_debug"
+
+ KERNEL_DEBUG_CFLAGS=""
+ KERNEL_DEBUG_CPPFLAGS="-UDEBUG -DNDEBUG"
])
+dnl #
+dnl # When debugging is enabled:
+dnl # - Enable all ASSERTs (-DDEBUG)
+dnl # - Promote all compiler warnings to errors (-Werror)
+dnl #
AC_DEFUN([ZFS_AC_DEBUG], [
AC_MSG_CHECKING([whether assertion support will be enabled])
AC_ARG_ENABLE([debug],
[AS_HELP_STRING([--enable-debug],
- [Enable assertion support @<:@default=no@:>@])],
+ [Enable compiler and code assertions @<:@default=no@:>@])],
[],
[enable_debug=no])
[ZFS_AC_DEBUG_DISABLE],
[AC_MSG_ERROR([Unknown option $enable_debug])])
- AC_SUBST(DEBUG_STACKFLAGS)
+ AC_SUBST(DEBUG_CFLAGS)
+ AC_SUBST(DEBUG_CPPFLAGS)
+ AC_SUBST(DEBUG_LDFLAGS)
AC_SUBST(DEBUG_ZFS)
+
+ AC_SUBST(KERNEL_DEBUG_CFLAGS)
+ AC_SUBST(KERNEL_DEBUG_CPPFLAGS)
+
AC_MSG_RESULT([$enable_debug])
])
-AC_DEFUN([ZFS_AC_DEBUGINFO_KERNEL], [
- KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS CONFIG_DEBUG_INFO=y"
- KERNELCPPFLAGS="${KERNELCPPFLAGS} -fno-inline"
+AC_DEFUN([ZFS_AC_DEBUGINFO_ENABLE], [
+ DEBUG_CFLAGS="$DEBUG_CFLAGS -g -fno-inline"
+
+ KERNEL_DEBUG_CFLAGS="$KERNEL_DEBUG_CFLAGS -fno-inline"
+ KERNEL_MAKE="$KERNEL_MAKE CONFIG_DEBUG_INFO=y"
+
+ DEBUGINFO_ZFS="_with_debuginfo"
])
-AC_DEFUN([ZFS_AC_DEBUGINFO_USER], [
- DEBUG_CFLAGS="${DEBUG_CFLAGS} -g -fno-inline"
+AC_DEFUN([ZFS_AC_DEBUGINFO_DISABLE], [
+ DEBUGINFO_ZFS="_without_debuginfo"
])
AC_DEFUN([ZFS_AC_DEBUGINFO], [
AS_CASE(["x$enable_debuginfo"],
["xyes"],
- [ZFS_AC_DEBUGINFO_KERNEL
- ZFS_AC_DEBUGINFO_USER],
- ["xkernel"],
- [ZFS_AC_DEBUGINFO_KERNEL],
- ["xuser"],
- [ZFS_AC_DEBUGINFO_USER],
+ [ZFS_AC_DEBUGINFO_ENABLE],
["xno"],
- [],
- [AC_MSG_ERROR([Unknown option $enable_debug])])
+ [ZFS_AC_DEBUGINFO_DISABLE],
+ [AC_MSG_ERROR([Unknown option $enable_debuginfo])])
AC_SUBST(DEBUG_CFLAGS)
+ AC_SUBST(DEBUGINFO_ZFS)
+
+ AC_SUBST(KERNEL_DEBUG_CFLAGS)
+ AC_SUBST(KERNEL_MAKE)
+
AC_MSG_RESULT([$enable_debuginfo])
])
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [
- ZFS_AC_CONFIG_ALWAYS_NO_UNUSED_BUT_SET_VARIABLE
- ZFS_AC_CONFIG_ALWAYS_NO_BOOL_COMPARE
+ ZFS_AC_CONFIG_ALWAYS_CC_NO_UNUSED_BUT_SET_VARIABLE
+ 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_ASAN
ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD
ZFS_AC_CONFIG_ALWAYS_ARCH
])
])
RPM_DEFINE_COMMON='--define "$(DEBUG_ZFS) 1"'
- RPM_DEFINE_UTIL='--define "_dracutdir $(dracutdir)" --define "_udevdir $(udevdir)" --define "_udevruledir $(udevruledir)" --define "_initconfdir $(DEFAULT_INITCONF_DIR)" $(DEFINE_INITRAMFS) $(DEFINE_SYSTEMD)'
- RPM_DEFINE_KMOD='--define "kernels $(LINUX_VERSION)" --define "require_spldir $(SPL)" --define "require_splobj $(SPL_OBJ)" --define "ksrc $(LINUX)" --define "kobj $(LINUX_OBJ)"'
- RPM_DEFINE_DKMS=
+ RPM_DEFINE_COMMON+=' --define "$(DEBUGINFO_ZFS) 1"'
+ RPM_DEFINE_COMMON+=' --define "$(ASAN_ZFS) 1"'
+
+ RPM_DEFINE_UTIL='--define "_dracutdir $(dracutdir)"'
+ RPM_DEFINE_UTIL+=' --define "_udevdir $(udevdir)"'
+ RPM_DEFINE_UTIL+=' --define "_udevruledir $(udevruledir)"'
+ RPM_DEFINE_UTIL+=' --define "_initconfdir $(DEFAULT_INITCONF_DIR)"'
+ RPM_DEFINE_UTIL+=' $(DEFINE_INITRAMFS)'
+ RPM_DEFINE_UTIL+=' $(DEFINE_SYSTEMD)'
+
+ RPM_DEFINE_KMOD='--define "kernels $(LINUX_VERSION)"'
+ RPM_DEFINE_KMOD+=' --define "require_spldir $(SPL)"'
+ RPM_DEFINE_KMOD+=' --define "require_splobj $(SPL_OBJ)"'
+ RPM_DEFINE_KMOD+=' --define "ksrc $(LINUX)"'
+ RPM_DEFINE_KMOD+=' --define "kobj $(LINUX_OBJ)"'
+
+ RPM_DEFINE_DKMS=''
SRPM_DEFINE_COMMON='--define "build_src_rpm 1"'
SRPM_DEFINE_UTIL=
VPATH = $(top_srcdir)/module/avl/
-AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
+# Includes kernel code, generate warnings for large stack frames
+AM_CFLAGS += $(FRAME_LARGER_THAN)
DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
include $(top_srcdir)/config/Rules.am
-AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
-
DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
-I$(top_srcdir)/lib/libspl/include
USER_C = \
rdwr_efi.c
-KERNEL_C =
-
-nodist_libefi_la_SOURCES = \
- $(USER_C) \
- $(KERNEL_C)
+nodist_libefi_la_SOURCES = $(USER_C)
libefi_la_LIBADD = $(LIBUUID)
$(top_srcdir)/module/icp \
$(top_srcdir)/lib/libicp
-AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
+# Includes kernel code, generate warnings for large stack frames
+AM_CFLAGS += $(FRAME_LARGER_THAN)
DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
$(top_srcdir)/module/nvpair \
$(top_srcdir)/lib/libnvpair
-AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(LIBTIRPC_CFLAGS)
+# Required CFLAGS for libtirpc
+AM_CFLAGS += $(LIBTIRPC_CFLAGS)
+
+# Includes kernel code, generate warnings for large stack frames
+AM_CFLAGS += $(FRAME_LARGER_THAN)
DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
smb.c \
smb.h
-KERNEL_C =
-
-nodist_libshare_la_SOURCES = \
- $(USER_C)
- $(KERNEL_C)
+nodist_libshare_la_SOURCES = $(USER_C)
EXTRA_DIST = $(USER_C)
$(top_srcdir)/lib/libspl \
$(top_srcdir)/lib/libspl/$(TARGET_ASM_DIR)
-AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
-
SUBDIRS = include $(TARGET_ASM_DIR)
DIST_SUBDIRS = include asm-generic asm-i386 asm-x86_64
USER_ASM = atomic.S
-KERNEL_C =
-
nodist_libspl_la_SOURCES = \
$(USER_C) \
- $(USER_ASM) \
- $(KERNEL_C)
+ $(USER_ASM)
libspl_la_LIBADD = -lrt
include $(top_srcdir)/config/Rules.am
-AM_CFLAGS += $(DEBUG_STACKFLAGS)
-
DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
-I$(top_srcdir)/lib/libspl/include
thread_pool.c \
thread_pool_impl.h
-KERNEL_C =
-
-nodist_libtpool_la_SOURCES = \
- $(USER_C) \
- $(KERNEL_C)
+nodist_libtpool_la_SOURCES = $(USER_C)
libtpool_la_LIBADD = \
$(top_builddir)/lib/libspl/libspl.la
VPATH = $(top_srcdir)/module/unicode
-AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
+# Includes kernel code, generate warnings for large stack frames
+AM_CFLAGS += $(FRAME_LARGER_THAN)
DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
include $(top_srcdir)/config/Rules.am
-AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
-
DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
-I$(top_srcdir)/lib/libspl/include
uu_pname.c \
uu_string.c
-KERNEL_C =
-
-nodist_libuutil_la_SOURCES = \
- $(USER_C) \
- $(KERNEL_C)
+nodist_libuutil_la_SOURCES = $(USER_C)
libuutil_la_LIBADD = \
$(top_builddir)/lib/libavl/libavl.la \
$(top_srcdir)/module/zcommon \
$(top_srcdir)/lib/libzfs
+# Suppress unused but set variable warnings often due to ASSERTs
+AM_CFLAGS += $(NO_UNUSED_BUT_SET_VARIABLE)
+
libzfs_pcdir = $(datarootdir)/pkgconfig
libzfs_pc_DATA = libzfs.pc libzfs_core.pc
USER_C = \
libzfs_core.c
-KERNEL_C =
-
-nodist_libzfs_core_la_SOURCES = \
- $(USER_C) \
- $(KERNEL_C)
+nodist_libzfs_core_la_SOURCES = $(USER_C)
libzfs_core_la_LIBADD = \
$(top_builddir)/lib/libnvpair/libnvpair.la
$(top_srcdir)/module/zcommon \
$(top_srcdir)/lib/libzpool
-AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
+# Suppress unused but set variable warnings often due to ASSERTs
+AM_CFLAGS += $(NO_UNUSED_BUT_SET_VARIABLE)
+
+# Includes kernel code generate warnings for large stack frames
+AM_CFLAGS += $(FRAME_LARGER_THAN)
DEFAULT_INCLUDES += \
-I$(top_srcdir)/include \
subdir-m += avl
+subdir-m += icp
subdir-m += nvpair
subdir-m += unicode
subdir-m += zcommon
subdir-m += zfs
-subdir-m += icp
INSTALL_MOD_DIR ?= extra
+ZFS_MODULE_CFLAGS += -std=gnu99 -Wno-declaration-after-statement
+ZFS_MODULE_CFLAGS += @KERNEL_DEBUG_CFLAGS@
ZFS_MODULE_CFLAGS += -include @SPL_OBJ@/spl_config.h
ZFS_MODULE_CFLAGS += -include @abs_top_builddir@/zfs_config.h
ZFS_MODULE_CFLAGS += -I@abs_top_srcdir@/include -I@SPL@/include -I@SPL@
+
+ZFS_MODULE_CPPFLAGS += -DHAVE_SPL -D_KERNEL
+ZFS_MODULE_CPPFLAGS += @KERNEL_DEBUG_CPPFLAGS@
+
@CONFIG_QAT_TRUE@ZFS_MODULE_CFLAGS += -I@QAT_SRC@/include
@CONFIG_QAT_TRUE@KBUILD_EXTRA_SYMBOLS += @QAT_SYMBOLS@
-export ZFS_MODULE_CFLAGS
+
+export ZFS_MODULE_CFLAGS ZFS_MODULE_CPPFLAGS
SUBDIR_TARGETS = icp
list='$(SUBDIR_TARGETS)'; for targetdir in $$list; do \
$(MAKE) -C $$targetdir; \
done
- $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNELMAKE_PARAMS@ CONFIG_ZFS=m $@
+ $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNEL_MAKE@ CONFIG_ZFS=m $@
clean:
@# Only cleanup the kernel build directories when CONFIG_KERNEL
@# is defined. This indicates that kernel modules should be built.
-@CONFIG_KERNEL_TRUE@ $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNELMAKE_PARAMS@ $@
+@CONFIG_KERNEL_TRUE@ $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNEL_MAKE@ $@
if [ -f @SPL_SYMBOLS@ ]; then $(RM) @SPL_SYMBOLS@; fi
if [ -f @LINUX_SYMBOLS@ ]; then $(RM) @LINUX_SYMBOLS@; fi
MODULE := zavl
-EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@
-
obj-$(CONFIG_ZFS) := $(MODULE).o
+ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS)
+
$(MODULE)-objs += avl.o
ASM_SOURCES :=
endif
-EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@
-EXTRA_AFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@
-
obj-$(CONFIG_ZFS) := $(MODULE).o
-ccflags-y += -I$(src)/include
-asflags-y += -I$(src)/include
-asflags-y += $(ZFS_MODULE_CFLAGS)
+asflags-y := -I$(src)/include
+ccflags-y := -I$(src)/include
+ccflags-y += $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS)
$(MODULE)-objs += illumos-crypto.o
$(MODULE)-objs += api/kcf_cipher.o
MODULE := znvpair
-EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@
-
obj-$(CONFIG_ZFS) := $(MODULE).o
+ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS)
+
$(MODULE)-objs += nvpair.o
$(MODULE)-objs += fnvpair.o
$(MODULE)-objs += nvpair_alloc_spl.o
MODULE := zunicode
-EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@
-
obj-$(CONFIG_ZFS) := $(MODULE).o
+ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS)
+
$(MODULE)-objs += u8_textprep.o
$(MODULE)-objs += uconv.o
MODULE := zcommon
-EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@
-
obj-$(CONFIG_ZFS) := $(MODULE).o
+ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS)
+
$(MODULE)-objs += zfeature_common.o
$(MODULE)-objs += zfs_comutil.o
$(MODULE)-objs += zfs_deleg.o
MODULE := zfs
-EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@
-
obj-$(CONFIG_ZFS) := $(MODULE).o
+ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS)
+
+# Suppress unused but set variable warnings often due to ASSERTs
+ccflags-y += $(NO_UNUSED_BUT_SET_VARIABLE)
+
$(MODULE)-objs += abd.o
$(MODULE)-objs += arc.o
$(MODULE)-objs += blkptr.o
#define buildforkernels akmod
%bcond_with debug
+%bcond_with debuginfo
Name: %{module}-kmod
%define debug --disable-debug
%endif
+%if %{with debuginfo}
+ %define debuginfo --enable-debuginfo
+%else
+ %define debuginfo --disable-debuginfo
+%endif
+
#
# Allow the overriding of spl locations
#
--with-linux-obj=%{kobj} \
--with-spl="%{spldir}" \
--with-spl-obj="%{splobj}" \
- %{debug}
+ %{debug} \
+ %{debuginfo}
make %{?_smp_mflags}
cd ..
done
%endif
%bcond_with debug
+%bcond_with debuginfo
+%bcond_with asan
%bcond_with systemd
# Generic enable switch for systemd
%else
%define debug --disable-debug
%endif
+
+%if %{with debuginfo}
+ %define debuginfo --enable-debuginfo
+%else
+ %define debuginfo --disable-debuginfo
+%endif
+
+%if %{with asan}
+ %define asan --enable-asan
+%else
+ %define asan --disable-asan
+%endif
+
%if 0%{?_systemd}
%define systemd --enable-systemd --with-systemdunitdir=%{_unitdir} --with-systemdpresetdir=%{_presetdir} --disable-sysvinit
%define systemd_svcs zfs-import-cache.service zfs-import-scan.service zfs-mount.service zfs-share.service zfs-zed.service zfs.target zfs-import.target
--with-dracutdir=%{_dracutdir} \
--disable-static \
%{debug} \
+ %{debuginfo} \
+ %{asan} \
%{systemd}
make %{?_smp_mflags}
%bcond_with debug
+%bcond_with debuginfo
Name: @PACKAGE@-kmod
Version: @VERSION@
%define debug --disable-debug
%endif
+%if %{with debuginfo}
+%define debuginfo --enable-debuginfo
+%else
+%define debuginfo --disable-debuginfo
+%endif
+
%setup -n %{kmod_name}-%{version}
%build
%configure \
--with-linux-obj=%{kobj} \
--with-spl="%{splsrc}" \
--with-spl-obj="%{splobj}" \
- %{debug}
+ %{debug} \
+ %{debuginfo}
make %{?_smp_mflags}
%install
# shellcheck disable=SC2034
PROG=zloop.sh
+GDB=${GDB:-gdb}
DEFAULTWORKDIR=/var/tmp
DEFAULTCOREDIR=/var/tmp/zloop
# enable core dumps
ulimit -c unlimited
+export ASAN_OPTIONS=abort_on_error=1:disable_coredump=0
if [[ -f "$(core_file)" ]]; then
echo -n "There's a core dump here you might want to look at first... "
include $(top_srcdir)/config/Rules.am
+
AM_CPPFLAGS += -I$(top_srcdir)/include
LDADD = $(top_srcdir)/lib/libicp/libicp.la
ulimit -c unlimited
echo "$corepath/core.zfs" >/proc/sys/kernel/core_pattern
echo 0 >/proc/sys/kernel/core_uses_pid
+ export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0"
else
log_must coreadm -p ${corepath}/core.%f
fi
ulimit -c unlimited
echo "$corepath/core.zpool" >/proc/sys/kernel/core_pattern
echo 0 >/proc/sys/kernel/core_uses_pid
+ export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0"
else
coreadm -p ${corepath}/core.%f
fi
[[ -f core ]] && log_must rm -f core
if is_linux; then
- ulimit -c unlimited
- echo "core" >/proc/sys/kernel/core_pattern
- echo 0 >/proc/sys/kernel/core_uses_pid
+ ulimit -c unlimited
+ echo "core" >/proc/sys/kernel/core_pattern
+ echo 0 >/proc/sys/kernel/core_uses_pid
+ export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0"
fi
ZFS_ABORT=1; export ZFS_ABORT
include $(top_srcdir)/config/Rules.am
+
AM_CPPFLAGS += -I$(top_srcdir)/include
AM_CPPFLAGS += -I$(top_srcdir)/lib/libspl/include
LDADD = $(top_srcdir)/lib/libicp/libicp.la