summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamian Szuberski <[email protected]>2022-04-27 03:47:09 +1000
committerGitHub <[email protected]>2022-04-26 10:47:09 -0700
commita0dfd98a25b57411b5b31e69356a92b194b690a9 (patch)
treec8c8f7374bc8b0dd259f2b8d9e0a5837cdfe5a33
parent600a02b8844edb16b88b9bb179d1fbd7a169037d (diff)
autoconf: Pretend `CONFIG_MODULES` is always on
- Unconditionally inject `CONFIG_MODULES` make variable and `#define CONFIG_MODULES` to Kbuild in `ZFS_LINUX_COMPILE` autoconf function to emulate loadable kernel modules support. This allows OpenZFS to perform Linux checks despite `CONFIG_MODULES=n` in the actual Linux config. - Add `ZFS_AC_KERNEL_CONFIG_MODULES` check which encompasses the logic from `ZFS_AC_KERNEL_TEST_MODULE` with additional diagnostic messages to the user - Removed `ZFS_AC_KERNEL_TEST_MODULE` as it merely duplicates every check in `ZFS_AC_KERNEL_CONFIG_DEFINED` - Moved `ZFS_AC_MODULE_SYMVERS` after `ZFS_AC_KERNEL_CONFIG_DEFINED` so the user has a chance to see the proper diagnostic from the steps before. A workaround for Linux's ``` commit 3e3005df73b535cb849cf4ec8075d6aa3c460f68 Author: Masahiro Yamada <[email protected]> Date: Wed Mar 31 22:38:03 2021 +0900 kbuild: unify modules(_install) for in-tree and external modules If you attempt to build or install modules ('make modules(_install)' with CONFIG_MODULES disabled, you will get a clear error message, but nothing for external module builds. Factor out the modules and modules_install rules into the common part, so you will get the same error message when you try to build external modules with CONFIG_MODULES=n. Signed-off-by: Masahiro Yamada <[email protected]> ``` Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: szubersk <[email protected]> Closes #10832 Closes #13361
-rw-r--r--config/kernel-config-defined.m457
-rw-r--r--config/kernel.m431
2 files changed, 62 insertions, 26 deletions
diff --git a/config/kernel-config-defined.m4 b/config/kernel-config-defined.m4
index d9f053400..54837d728 100644
--- a/config/kernel-config-defined.m4
+++ b/config/kernel-config-defined.m4
@@ -19,6 +19,7 @@ AC_DEFUN([ZFS_AC_KERNEL_CONFIG_DEFINED], [
])
])
+ ZFS_AC_KERNEL_SRC_CONFIG_MODULES
ZFS_AC_KERNEL_SRC_CONFIG_BLOCK
ZFS_AC_KERNEL_SRC_CONFIG_DEBUG_LOCK_ALLOC
ZFS_AC_KERNEL_SRC_CONFIG_TRIM_UNUSED_KSYMS
@@ -29,6 +30,7 @@ AC_DEFUN([ZFS_AC_KERNEL_CONFIG_DEFINED], [
ZFS_LINUX_TEST_COMPILE_ALL([config])
AC_MSG_RESULT([done])
+ ZFS_AC_KERNEL_CONFIG_MODULES
ZFS_AC_KERNEL_CONFIG_BLOCK
ZFS_AC_KERNEL_CONFIG_DEBUG_LOCK_ALLOC
ZFS_AC_KERNEL_CONFIG_TRIM_UNUSED_KSYMS
@@ -100,6 +102,61 @@ AC_DEFUN([ZFS_AC_KERNEL_CONFIG_DEBUG_LOCK_ALLOC], [
])
dnl #
+dnl # Check CONFIG_MODULES
+dnl #
+dnl # Verify the kernel has CONFIG_MODULES support enabled.
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_MODULES], [
+ ZFS_LINUX_TEST_SRC([config_modules], [
+ #if !defined(CONFIG_MODULES)
+ #error CONFIG_MODULES not defined
+ #endif
+ ],[])
+])
+
+AC_DEFUN([ZFS_AC_KERNEL_CONFIG_MODULES], [
+ AC_MSG_CHECKING([whether CONFIG_MODULES is defined])
+ AS_IF([test "x$enable_linux_builtin" != xyes], [
+ ZFS_LINUX_TEST_RESULT([config_modules], [
+ AC_MSG_RESULT([yes])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([
+ *** This kernel does not include the required loadable module
+ *** support!
+ ***
+ *** To build OpenZFS as a loadable Linux kernel module
+ *** enable loadable module support by setting
+ *** `CONFIG_MODULES=y` in the kernel configuration and run
+ *** `make modules_prepare` in the Linux source tree.
+ ***
+ *** If you don't intend to enable loadable kernel module
+ *** support, please compile OpenZFS as a Linux kernel built-in.
+ ***
+ *** Prepare the Linux source tree by running `make prepare`,
+ *** use the OpenZFS `--enable-linux-builtin` configure option,
+ *** copy the OpenZFS sources into the Linux source tree using
+ *** `./copy-builtin <linux source directory>`,
+ *** set `CONFIG_ZFS=y` in the kernel configuration and compile
+ *** kernel as usual.
+ ])
+ ])
+ ], [
+ ZFS_LINUX_TRY_COMPILE([], [], [
+ AC_MSG_RESULT([not needed])
+ ],[
+ AC_MSG_RESULT([error])
+ AC_MSG_ERROR([
+ *** This kernel is unable to compile object files.
+ ***
+ *** Please make sure you prepared the Linux source tree
+ *** by running `make prepare` there.
+ ])
+ ])
+ ])
+])
+
+dnl #
dnl # Check CONFIG_TRIM_UNUSED_KSYMS
dnl #
dnl # Verify the kernel has CONFIG_TRIM_UNUSED_KSYMS disabled.
diff --git a/config/kernel.m4 b/config/kernel.m4
index 7cf181beb..2a552431a 100644
--- a/config/kernel.m4
+++ b/config/kernel.m4
@@ -8,8 +8,8 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
ZFS_AC_QAT
dnl # Sanity checks for module building and CONFIG_* defines
- ZFS_AC_KERNEL_TEST_MODULE
ZFS_AC_KERNEL_CONFIG_DEFINED
+ ZFS_AC_MODULE_SYMVERS
dnl # Sequential ZFS_LINUX_TRY_COMPILE tests
ZFS_AC_KERNEL_FPU_HEADER
@@ -445,8 +445,6 @@ AC_DEFUN([ZFS_AC_KERNEL], [
AC_SUBST(LINUX)
AC_SUBST(LINUX_OBJ)
AC_SUBST(LINUX_VERSION)
-
- ZFS_AC_MODULE_SYMVERS
])
dnl #
@@ -542,27 +540,6 @@ AC_DEFUN([ZFS_AC_QAT], [
])
dnl #
-dnl # Basic toolchain sanity check.
-dnl #
-AC_DEFUN([ZFS_AC_KERNEL_TEST_MODULE], [
- AC_MSG_CHECKING([whether modules can be built])
- ZFS_LINUX_TRY_COMPILE([], [], [
- AC_MSG_RESULT([yes])
- ],[
- AC_MSG_RESULT([no])
- if test "x$enable_linux_builtin" != xyes; then
- AC_MSG_ERROR([
- *** Unable to build an empty module.
- ])
- else
- AC_MSG_ERROR([
- *** Unable to build an empty module.
- *** Please run 'make scripts' inside the kernel source tree.])
- fi
- ])
-])
-
-dnl #
dnl # ZFS_LINUX_CONFTEST_H
dnl #
AC_DEFUN([ZFS_LINUX_CONFTEST_H], [
@@ -664,8 +641,10 @@ AC_DEFUN([ZFS_LINUX_COMPILE], [
build kernel modules with LLVM/CLANG toolchain])
AC_TRY_COMMAND([
KBUILD_MODPOST_NOFINAL="$5" KBUILD_MODPOST_WARN="$6"
- make modules -k -j$TEST_JOBS ${KERNEL_CC:+CC=$KERNEL_CC} ${KERNEL_LD:+LD=$KERNEL_LD} ${KERNEL_LLVM:+LLVM=$KERNEL_LLVM} -C $LINUX_OBJ $ARCH_UM
- M=$PWD/$1 >$1/build.log 2>&1])
+ make modules -k -j$TEST_JOBS ${KERNEL_CC:+CC=$KERNEL_CC}
+ ${KERNEL_LD:+LD=$KERNEL_LD} ${KERNEL_LLVM:+LLVM=$KERNEL_LLVM}
+ CONFIG_MODULES=y CFLAGS_MODULE=-DCONFIG_MODULES
+ -C $LINUX_OBJ $ARCH_UM M=$PWD/$1 >$1/build.log 2>&1])
AS_IF([AC_TRY_COMMAND([$2])], [$3], [$4])
])