diff --git a/configure.ac b/configure.ac index 0707384a73..867c3351d9 100644 --- a/configure.ac +++ b/configure.ac @@ -170,13 +170,12 @@ AC_CONFIG_FILES([ man/man1/Makefile man/man5/Makefile man/man8/Makefile + module/Kbuild module/Makefile module/avl/Makefile module/icp/Makefile module/lua/Makefile module/nvpair/Makefile - module/os/Makefile - module/os/linux/Makefile module/os/linux/spl/Makefile module/os/linux/zfs/Makefile module/spl/Makefile diff --git a/copy-builtin b/copy-builtin index 81fd175656..f77cbb8ffd 100755 --- a/copy-builtin +++ b/copy-builtin @@ -11,21 +11,6 @@ usage() [ "$#" -eq 1 ] || usage KERNEL_DIR="$(readlink --canonicalize-existing "$1")" -MODULES=() - -# When integrated in to a monolithic kernel the spl module must appear -# first. This ensures its module initialization function is run before -# any of the other module initialization functions which depend on it. -MODULES+="spl" - -for MODULE_DIR in module/* module/os/linux/* -do - [ -d "$MODULE_DIR" ] || continue - [ "spl" = "${MODULE_DIR##*/}" ] && continue - [ "os" = "${MODULE_DIR#*/}" ] && continue - MODULES+=("${MODULE_DIR#*/}") -done - if ! [ -e 'zfs_config.h' ] then echo >&2 @@ -43,12 +28,6 @@ cp --recursive include "$KERNEL_DIR/include/zfs" cp --recursive module "$KERNEL_DIR/fs/zfs" cp zfs_config.h "$KERNEL_DIR/include/zfs/" -for MODULE in "${MODULES[@]}" -do - sed -i.bak '/obj =/d' "$KERNEL_DIR/fs/zfs/$MODULE/Makefile" - sed -i.bak '/src =/d' "$KERNEL_DIR/fs/zfs/$MODULE/Makefile" -done - cat > "$KERNEL_DIR/fs/zfs/Kconfig" <<"EOF" config ZFS tristate "ZFS filesystem support" @@ -65,27 +44,6 @@ config ZFS If unsure, say N. EOF -{ - cat <<-"EOF" - ZFS_MODULE_CFLAGS = -I$(srctree)/include/zfs - ZFS_MODULE_CFLAGS += -I$(srctree)/include/zfs/os/linux/spl - ZFS_MODULE_CFLAGS += -I$(srctree)/include/zfs/os/linux/zfs - ZFS_MODULE_CFLAGS += -I$(srctree)/include/zfs/os/linux/kernel - ZFS_MODULE_CFLAGS += -include $(srctree)/include/zfs/zfs_config.h - ZFS_MODULE_CFLAGS += -std=gnu99 -Wno-declaration-after-statement - ZFS_MODULE_CPPFLAGS = -D_KERNEL - ZFS_MODULE_CPPFLAGS += -UDEBUG -DNDEBUG - export ZFS_MODULE_CFLAGS ZFS_MODULE_CPPFLAGS - - obj-$(CONFIG_ZFS) := - EOF - - for MODULE in "${MODULES[@]}" - do - echo 'obj-$(CONFIG_ZFS) += ' "$MODULE/" - done -} > "$KERNEL_DIR/fs/zfs/Kbuild" - add_after() { local FILE="$1" diff --git a/module/.gitignore b/module/.gitignore index 5f3d704872..7a4bd3673e 100644 --- a/module/.gitignore +++ b/module/.gitignore @@ -9,6 +9,7 @@ .*.d *.mod +/Kbuild /.cache.mk /.tmp_versions /Module.markers diff --git a/module/Kbuild.in b/module/Kbuild.in new file mode 100644 index 0000000000..b42ce9e6da --- /dev/null +++ b/module/Kbuild.in @@ -0,0 +1,44 @@ +# When integrated in to a monolithic kernel the spl module must appear +# first. This ensures its module initialization function is run before +# any of the other module initialization functions which depend on it. +ZFS_MODULES += spl/ +ZFS_MODULES += avl/ +ZFS_MODULES += icp/ +ZFS_MODULES += lua/ +ZFS_MODULES += nvpair/ +ZFS_MODULES += unicode/ +ZFS_MODULES += zcommon/ +ZFS_MODULES += zfs/ + +# The rest is only relevant when run by kbuild +ifneq ($(KERNELRELEASE),) + +obj-$(CONFIG_ZFS) := $(ZFS_MODULES) + +ZFS_MODULE_CFLAGS += -std=gnu99 -Wno-declaration-after-statement +ZFS_MODULE_CFLAGS += @KERNEL_DEBUG_CFLAGS@ @NO_FORMAT_ZERO_LENGTH@ + +ifneq ($(KBUILD_EXTMOD),) +zfs_include = @abs_top_srcdir@/include +ZFS_MODULE_CFLAGS += -include @abs_top_builddir@/zfs_config.h +else +zfs_include = $(srctree)/include/zfs +ZFS_MODULE_CFLAGS += -include $(zfs_include)/zfs_config.h +endif + +ZFS_MODULE_CFLAGS += -I$(zfs_include)/os/linux/kernel +ZFS_MODULE_CFLAGS += -I$(zfs_include)/os/linux/spl +ZFS_MODULE_CFLAGS += -I$(zfs_include)/os/linux/zfs +ZFS_MODULE_CFLAGS += -I$(zfs_include) +ZFS_MODULE_CPPFLAGS += -D_KERNEL +ZFS_MODULE_CPPFLAGS += @KERNEL_DEBUG_CPPFLAGS@ + +ifneq ($(KBUILD_EXTMOD),) +@CONFIG_QAT_TRUE@ZFS_MODULE_CFLAGS += -I@QAT_SRC@/include +@CONFIG_QAT_TRUE@KBUILD_EXTRA_SYMBOLS += @QAT_SYMBOLS@ +endif + +subdir-asflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) +subdir-ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) + +endif diff --git a/module/Makefile.in b/module/Makefile.in index 39acdac20b..3485649dc1 100644 --- a/module/Makefile.in +++ b/module/Makefile.in @@ -1,31 +1,7 @@ -obj-m += avl/ -obj-m += icp/ -obj-m += lua/ -obj-m += nvpair/ -obj-m += spl/ -obj-m += os/linux/spl/ -obj-m += unicode/ -obj-m += zcommon/ -obj-m += zfs/ -obj-m += os/linux/zfs/ +include Kbuild INSTALL_MOD_DIR ?= extra -ZFS_MODULE_CFLAGS += -std=gnu99 -Wno-declaration-after-statement -ZFS_MODULE_CFLAGS += @KERNEL_DEBUG_CFLAGS@ @NO_FORMAT_ZERO_LENGTH@ -ZFS_MODULE_CFLAGS += -include @abs_top_builddir@/zfs_config.h -ZFS_MODULE_CFLAGS += -I@abs_top_srcdir@/include/os/linux/kernel -ZFS_MODULE_CFLAGS += -I@abs_top_srcdir@/include/os/linux/spl -ZFS_MODULE_CFLAGS += -I@abs_top_srcdir@/include/os/linux/zfs -ZFS_MODULE_CFLAGS += -I@abs_top_srcdir@/include -ZFS_MODULE_CPPFLAGS += -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 ZFS_MODULE_CPPFLAGS - SUBDIR_TARGETS = icp lua all: modules @@ -119,7 +95,7 @@ modules_install: modules_install-@ac_system@ modules_uninstall-Linux: @# Uninstall the kernel modules kmoddir=$(DESTDIR)$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@ - list='$(obj-m)'; for objdir in $$list; do \ + list='$(ZFS_MODULES)'; for objdir in $$list; do \ $(RM) -R $$kmoddir/$(INSTALL_MOD_DIR)/$$objdir; \ done @@ -129,7 +105,7 @@ modules_uninstall-FreeBSD: modules_uninstall: modules_uninstall-@ac_system@ distdir: - list='$(obj-m)'; for objdir in $$list; do \ + list='$(ZFS_MODULES)'; for objdir in $$list os/linux/spl os/linux/zfs; do \ (cd @top_srcdir@/module && find $$objdir -name '*.[chS]' | \ while read path; do \ mkdir -p @abs_top_builddir@/module/$$distdir/$${path%/*}; \ diff --git a/module/avl/Makefile.in b/module/avl/Makefile.in index 217fa3ca52..991d5f95b8 100644 --- a/module/avl/Makefile.in +++ b/module/avl/Makefile.in @@ -1,10 +1,10 @@ -src = @abs_top_srcdir@/module/avl +ifneq ($(KBUILD_EXTMOD),) +src = @abs_srcdir@ obj = @abs_builddir@ +endif MODULE := zavl obj-$(CONFIG_ZFS) := $(MODULE).o -ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) - $(MODULE)-objs += avl.o diff --git a/module/icp/Makefile.in b/module/icp/Makefile.in index b6d34d15a6..7a01b2f08b 100644 --- a/module/icp/Makefile.in +++ b/module/icp/Makefile.in @@ -1,14 +1,17 @@ -src = @abs_top_srcdir@/module/icp +ifneq ($(KBUILD_EXTMOD),) +src = @abs_srcdir@ obj = @abs_builddir@ +icp_include = $(src)/include +else +icp_include = $(srctree)/$(src)/include +endif MODULE := icp obj-$(CONFIG_ZFS) := $(MODULE).o -asflags-y := -I@abs_top_srcdir@/module/icp/include -asflags-y += $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) -ccflags-y := -I@abs_top_srcdir@/module/icp/include -ccflags-y += $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) +asflags-y := -I$(icp_include) +ccflags-y := -I$(icp_include) $(MODULE)-objs += illumos-crypto.o $(MODULE)-objs += api/kcf_cipher.o diff --git a/module/lua/Makefile.in b/module/lua/Makefile.in index d49065fbe8..0a74c17e64 100644 --- a/module/lua/Makefile.in +++ b/module/lua/Makefile.in @@ -1,16 +1,13 @@ -src = @abs_top_srcdir@/module/lua +ifneq ($(KBUILD_EXTMOD),) +src = @abs_srcdir@ obj = @abs_builddir@ +endif MODULE := zlua obj-$(CONFIG_ZFS) := $(MODULE).o -asflags-y += $(ZFS_MODULE_CFLAGS) -ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) -ccflags-y += -DLUA_USE_LONGLONG - -# Suppress unused but set variable warnings often due to ASSERTs -ccflags-y += $(NO_UNUSED_BUT_SET_VARIABLE) +ccflags-y := -DLUA_USE_LONGLONG $(MODULE)-objs += lapi.o $(MODULE)-objs += lauxlib.o diff --git a/module/nvpair/Makefile.in b/module/nvpair/Makefile.in index f420ef98bc..d814523667 100644 --- a/module/nvpair/Makefile.in +++ b/module/nvpair/Makefile.in @@ -1,12 +1,12 @@ -src = @abs_top_srcdir@/module/nvpair +ifneq ($(KBUILD_EXTMOD),) +src = @abs_srcdir@ obj = @abs_builddir@ +endif MODULE := znvpair 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 diff --git a/module/os/Makefile.in b/module/os/Makefile.in deleted file mode 100644 index b9990d1bc0..0000000000 --- a/module/os/Makefile.in +++ /dev/null @@ -1 +0,0 @@ -subdirs-m = linux diff --git a/module/os/linux/Makefile.in b/module/os/linux/Makefile.in deleted file mode 100644 index ab01708a33..0000000000 --- a/module/os/linux/Makefile.in +++ /dev/null @@ -1 +0,0 @@ -subdirs-m = spl zfs diff --git a/module/os/linux/zfs/Makefile.in b/module/os/linux/zfs/Makefile.in index cb4edbbc1a..9f493ef16d 100644 --- a/module/os/linux/zfs/Makefile.in +++ b/module/os/linux/zfs/Makefile.in @@ -5,8 +5,6 @@ # Suppress unused-value warnings in sparc64 architecture headers ccflags-$(CONFIG_SPARC64) += -Wno-unused-value -ccflags-y += -I@abs_top_srcdir@/module/os/linux/zfs - $(MODULE)-objs += ../os/linux/zfs/abd_os.o $(MODULE)-objs += ../os/linux/zfs/arc_os.o $(MODULE)-objs += ../os/linux/zfs/mmp_os.o diff --git a/module/spl/Makefile.in b/module/spl/Makefile.in index 8602f4edd1..cedbfe92b5 100644 --- a/module/spl/Makefile.in +++ b/module/spl/Makefile.in @@ -1,11 +1,13 @@ -src = @abs_top_srcdir@/module/spl +ifneq ($(KBUILD_EXTMOD),) +src = @abs_srcdir@ obj = @abs_builddir@ +mfdir = $(obj) +else +mfdir = $(srctree)/$(src) +endif MODULE := spl obj-$(CONFIG_ZFS) := $(MODULE).o -ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) - - --include @abs_top_builddir@/module/os/linux/spl/Makefile +include $(mfdir)/../os/linux/spl/Makefile diff --git a/module/unicode/Makefile.in b/module/unicode/Makefile.in index 82c90373a2..59c07c4555 100644 --- a/module/unicode/Makefile.in +++ b/module/unicode/Makefile.in @@ -1,11 +1,11 @@ -src = @abs_top_srcdir@/module/unicode +ifneq ($(KBUILD_EXTMOD),) +src = @abs_srcdir@ obj = @abs_builddir@ +endif MODULE := zunicode obj-$(CONFIG_ZFS) := $(MODULE).o -ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) - $(MODULE)-objs += u8_textprep.o $(MODULE)-objs += uconv.o diff --git a/module/zcommon/Makefile.in b/module/zcommon/Makefile.in index 01e0692ebd..b5cdf4c0c9 100644 --- a/module/zcommon/Makefile.in +++ b/module/zcommon/Makefile.in @@ -1,13 +1,12 @@ -src = @abs_top_srcdir@/module/zcommon +ifneq ($(KBUILD_EXTMOD),) +src = @abs_srcdir@ obj = @abs_builddir@ -target_cpu = @target_cpu@ +endif MODULE := zcommon obj-$(CONFIG_ZFS) := $(MODULE).o -ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) - # Suppress unused-value warnings in sparc64 architecture headers ccflags-$(CONFIG_SPARC64) += -Wno-unused-value diff --git a/module/zfs/Makefile.in b/module/zfs/Makefile.in index 3a96639970..7ea976d129 100644 --- a/module/zfs/Makefile.in +++ b/module/zfs/Makefile.in @@ -1,16 +1,15 @@ -src = @abs_top_srcdir@/module/zfs +ifneq ($(KBUILD_EXTMOD),) +src = @abs_srcdir@ obj = @abs_builddir@ -target_cpu = @target_cpu@ +mfdir = $(obj) +else +mfdir = $(srctree)/$(src) +endif MODULE := zfs 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) - # Suppress unused-value warnings in sparc64 architecture headers ccflags-$(CONFIG_SPARC64) += -Wno-unused-value @@ -150,4 +149,4 @@ ifeq ($(CONFIG_ALTIVEC),y) $(obj)/vdev_raidz_math_powerpc_altivec.o: c_flags += -maltivec endif --include @abs_top_builddir@/module/os/linux/zfs/Makefile +include $(mfdir)/../os/linux/zfs/Makefile