xref: /freebsd/sys/contrib/openzfs/config/kernel-config-defined.m4 (revision 7a7741af18d6c8a804cc643cb7ecda9d730c6aa6)
1eda14cbcSMatt Macydnl #
2eda14cbcSMatt Macydnl # Certain kernel build options are not supported.  These must be
3eda14cbcSMatt Macydnl # detected at configure time and cause a build failure.  Otherwise
4eda14cbcSMatt Macydnl # modules may be successfully built that behave incorrectly.
5eda14cbcSMatt Macydnl #
6eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_CONFIG_DEFINED], [
7*716fd348SMartin Matuska	ZFS_AC_KERNEL_SRC_CONFIG_MODULES
8*716fd348SMartin Matuska	ZFS_AC_KERNEL_SRC_CONFIG_BLOCK
9eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_CONFIG_DEBUG_LOCK_ALLOC
10eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_CONFIG_TRIM_UNUSED_KSYMS
11eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_CONFIG_ZLIB_DEFLATE
12*716fd348SMartin Matuska	ZFS_AC_KERNEL_SRC_CONFIG_ZLIB_INFLATE
13eda14cbcSMatt Macy
14eda14cbcSMatt Macy	AC_MSG_CHECKING([for kernel config option compatibility])
15eda14cbcSMatt Macy	ZFS_LINUX_TEST_COMPILE_ALL([config])
16eda14cbcSMatt Macy	AC_MSG_RESULT([done])
17eda14cbcSMatt Macy
18*716fd348SMartin Matuska	ZFS_AC_KERNEL_CONFIG_MODULES
19*716fd348SMartin Matuska	ZFS_AC_KERNEL_CONFIG_BLOCK
20eda14cbcSMatt Macy	ZFS_AC_KERNEL_CONFIG_DEBUG_LOCK_ALLOC
21eda14cbcSMatt Macy	ZFS_AC_KERNEL_CONFIG_TRIM_UNUSED_KSYMS
22eda14cbcSMatt Macy	ZFS_AC_KERNEL_CONFIG_ZLIB_DEFLATE
23*716fd348SMartin Matuska	ZFS_AC_KERNEL_CONFIG_ZLIB_INFLATE
24*716fd348SMartin Matuska])
25*716fd348SMartin Matuska
26*716fd348SMartin Matuskadnl #
27*716fd348SMartin Matuskadnl # Check CONFIG_BLOCK
28*716fd348SMartin Matuskadnl #
29*716fd348SMartin Matuskadnl # Verify the kernel has CONFIG_BLOCK support enabled.
30*716fd348SMartin Matuskadnl #
31*716fd348SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_BLOCK], [
32*716fd348SMartin Matuska	ZFS_LINUX_TEST_SRC([config_block], [
33*716fd348SMartin Matuska		#if !defined(CONFIG_BLOCK)
34*716fd348SMartin Matuska		#error CONFIG_BLOCK not defined
35*716fd348SMartin Matuska		#endif
36*716fd348SMartin Matuska	],[])
37*716fd348SMartin Matuska])
38*716fd348SMartin Matuska
39*716fd348SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_CONFIG_BLOCK], [
40*716fd348SMartin Matuska	AC_MSG_CHECKING([whether CONFIG_BLOCK is defined])
41*716fd348SMartin Matuska	ZFS_LINUX_TEST_RESULT([config_block], [
42*716fd348SMartin Matuska		AC_MSG_RESULT([yes])
43*716fd348SMartin Matuska	],[
44*716fd348SMartin Matuska		AC_MSG_RESULT([no])
45*716fd348SMartin Matuska		AC_MSG_ERROR([
46*716fd348SMartin Matuska	*** This kernel does not include the required block device support.
47*716fd348SMartin Matuska	*** Rebuild the kernel with CONFIG_BLOCK=y set.])
48*716fd348SMartin Matuska	])
49eda14cbcSMatt Macy])
50eda14cbcSMatt Macy
51eda14cbcSMatt Macydnl #
52eda14cbcSMatt Macydnl # Check CONFIG_DEBUG_LOCK_ALLOC
53eda14cbcSMatt Macydnl #
54eda14cbcSMatt Macydnl # This is typically only set for debug kernels because it comes with
55eda14cbcSMatt Macydnl # a performance penalty.  However, when it is set it maps the non-GPL
56eda14cbcSMatt Macydnl # symbol mutex_lock() to the GPL-only mutex_lock_nested() symbol.
57eda14cbcSMatt Macydnl # This will cause a failure at link time which we'd rather know about
58eda14cbcSMatt Macydnl # at compile time.
59eda14cbcSMatt Macydnl #
60eda14cbcSMatt Macydnl # Since we plan to pursue making mutex_lock_nested() a non-GPL symbol
61eda14cbcSMatt Macydnl # with the upstream community we add a check to detect this case.
62eda14cbcSMatt Macydnl #
63eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_DEBUG_LOCK_ALLOC], [
64eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([config_debug_lock_alloc], [
65eda14cbcSMatt Macy		#include <linux/mutex.h>
66eda14cbcSMatt Macy	],[
67eda14cbcSMatt Macy		struct mutex lock;
68eda14cbcSMatt Macy
69eda14cbcSMatt Macy		mutex_init(&lock);
70eda14cbcSMatt Macy		mutex_lock(&lock);
71eda14cbcSMatt Macy		mutex_unlock(&lock);
727877fdebSMatt Macy	], [], [ZFS_META_LICENSE])
73eda14cbcSMatt Macy])
74eda14cbcSMatt Macy
75eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_CONFIG_DEBUG_LOCK_ALLOC], [
76eda14cbcSMatt Macy	AC_MSG_CHECKING([whether mutex_lock() is GPL-only])
77c40487d4SMatt Macy	ZFS_LINUX_TEST_RESULT([config_debug_lock_alloc_license], [
78eda14cbcSMatt Macy		AC_MSG_RESULT(no)
79eda14cbcSMatt Macy	],[
80eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
81eda14cbcSMatt Macy		AC_MSG_ERROR([
82eda14cbcSMatt Macy	*** Kernel built with CONFIG_DEBUG_LOCK_ALLOC which is incompatible
83eda14cbcSMatt Macy	*** with the CDDL license and will prevent the module linking stage
84eda14cbcSMatt Macy	*** from succeeding.  You must rebuild your kernel without this
85eda14cbcSMatt Macy	*** option enabled.])
86eda14cbcSMatt Macy	])
87eda14cbcSMatt Macy])
88eda14cbcSMatt Macy
89eda14cbcSMatt Macydnl #
90*716fd348SMartin Matuskadnl # Check CONFIG_MODULES
91*716fd348SMartin Matuskadnl #
92*716fd348SMartin Matuskadnl # Verify the kernel has CONFIG_MODULES support enabled.
93*716fd348SMartin Matuskadnl #
94*716fd348SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_MODULES], [
95*716fd348SMartin Matuska	ZFS_LINUX_TEST_SRC([config_modules], [
96*716fd348SMartin Matuska		#if !defined(CONFIG_MODULES)
97*716fd348SMartin Matuska		#error CONFIG_MODULES not defined
98*716fd348SMartin Matuska		#endif
99*716fd348SMartin Matuska	],[])
100*716fd348SMartin Matuska])
101*716fd348SMartin Matuska
102*716fd348SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_CONFIG_MODULES], [
103*716fd348SMartin Matuska	AC_MSG_CHECKING([whether CONFIG_MODULES is defined])
104*716fd348SMartin Matuska	AS_IF([test "x$enable_linux_builtin" != xyes], [
105*716fd348SMartin Matuska		ZFS_LINUX_TEST_RESULT([config_modules], [
106*716fd348SMartin Matuska			AC_MSG_RESULT([yes])
107*716fd348SMartin Matuska		],[
108*716fd348SMartin Matuska			AC_MSG_RESULT([no])
109*716fd348SMartin Matuska			AC_MSG_ERROR([
110*716fd348SMartin Matuska		*** This kernel does not include the required loadable module
111*716fd348SMartin Matuska		*** support!
112*716fd348SMartin Matuska		***
113*716fd348SMartin Matuska		*** To build OpenZFS as a loadable Linux kernel module
114*716fd348SMartin Matuska		*** enable loadable module support by setting
115*716fd348SMartin Matuska		*** `CONFIG_MODULES=y` in the kernel configuration and run
116*716fd348SMartin Matuska		*** `make modules_prepare` in the Linux source tree.
117*716fd348SMartin Matuska		***
118*716fd348SMartin Matuska		*** If you don't intend to enable loadable kernel module
119*716fd348SMartin Matuska		*** support, please compile OpenZFS as a Linux kernel built-in.
120*716fd348SMartin Matuska		***
121*716fd348SMartin Matuska		*** Prepare the Linux source tree by running `make prepare`,
122*716fd348SMartin Matuska		*** use the OpenZFS `--enable-linux-builtin` configure option,
123*716fd348SMartin Matuska		*** copy the OpenZFS sources into the Linux source tree using
124*716fd348SMartin Matuska		*** `./copy-builtin <linux source directory>`,
125*716fd348SMartin Matuska		*** set `CONFIG_ZFS=y` in the kernel configuration and compile
126*716fd348SMartin Matuska		*** kernel as usual.
127*716fd348SMartin Matuska			])
128*716fd348SMartin Matuska		])
129*716fd348SMartin Matuska	], [
130*716fd348SMartin Matuska		ZFS_LINUX_TRY_COMPILE([], [], [
131*716fd348SMartin Matuska			AC_MSG_RESULT([not needed])
132*716fd348SMartin Matuska		],[
133*716fd348SMartin Matuska			AC_MSG_RESULT([error])
134*716fd348SMartin Matuska			AC_MSG_ERROR([
135*716fd348SMartin Matuska		*** This kernel is unable to compile object files.
136*716fd348SMartin Matuska		***
137*716fd348SMartin Matuska		*** Please make sure you prepared the Linux source tree
138*716fd348SMartin Matuska		*** by running `make prepare` there.
139*716fd348SMartin Matuska			])
140*716fd348SMartin Matuska		])
141*716fd348SMartin Matuska	])
142*716fd348SMartin Matuska])
143*716fd348SMartin Matuska
144*716fd348SMartin Matuskadnl #
145eda14cbcSMatt Macydnl # Check CONFIG_TRIM_UNUSED_KSYMS
146eda14cbcSMatt Macydnl #
147eda14cbcSMatt Macydnl # Verify the kernel has CONFIG_TRIM_UNUSED_KSYMS disabled.
148eda14cbcSMatt Macydnl #
149eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_TRIM_UNUSED_KSYMS], [
150eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([config_trim_unusued_ksyms], [
151eda14cbcSMatt Macy		#if defined(CONFIG_TRIM_UNUSED_KSYMS)
152eda14cbcSMatt Macy		#error CONFIG_TRIM_UNUSED_KSYMS not defined
153eda14cbcSMatt Macy		#endif
154eda14cbcSMatt Macy	],[])
155eda14cbcSMatt Macy])
156eda14cbcSMatt Macy
157eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_CONFIG_TRIM_UNUSED_KSYMS], [
158eda14cbcSMatt Macy	AC_MSG_CHECKING([whether CONFIG_TRIM_UNUSED_KSYM is disabled])
159eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([config_trim_unusued_ksyms], [
160eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
161eda14cbcSMatt Macy	],[
162eda14cbcSMatt Macy		AC_MSG_RESULT([no])
163eda14cbcSMatt Macy		AS_IF([test "x$enable_linux_builtin" != xyes], [
164eda14cbcSMatt Macy			AC_MSG_ERROR([
165eda14cbcSMatt Macy	*** This kernel has unused symbols trimming enabled, please disable.
166eda14cbcSMatt Macy	*** Rebuild the kernel with CONFIG_TRIM_UNUSED_KSYMS=n set.])
167eda14cbcSMatt Macy		])
168eda14cbcSMatt Macy	])
169eda14cbcSMatt Macy])
170eda14cbcSMatt Macy
171eda14cbcSMatt Macydnl #
172eda14cbcSMatt Macydnl # Check CONFIG_ZLIB_INFLATE
173eda14cbcSMatt Macydnl #
174eda14cbcSMatt Macydnl # Verify the kernel has CONFIG_ZLIB_INFLATE support enabled.
175eda14cbcSMatt Macydnl #
176eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_ZLIB_INFLATE], [
177eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([config_zlib_inflate], [
178eda14cbcSMatt Macy		#if !defined(CONFIG_ZLIB_INFLATE) && \
179eda14cbcSMatt Macy		    !defined(CONFIG_ZLIB_INFLATE_MODULE)
180eda14cbcSMatt Macy		#error CONFIG_ZLIB_INFLATE not defined
181eda14cbcSMatt Macy		#endif
182eda14cbcSMatt Macy	],[])
183eda14cbcSMatt Macy])
184eda14cbcSMatt Macy
185eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_CONFIG_ZLIB_INFLATE], [
186eda14cbcSMatt Macy	AC_MSG_CHECKING([whether CONFIG_ZLIB_INFLATE is defined])
187eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([config_zlib_inflate], [
188eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
189eda14cbcSMatt Macy	],[
190eda14cbcSMatt Macy		AC_MSG_RESULT([no])
191eda14cbcSMatt Macy		AC_MSG_ERROR([
192eda14cbcSMatt Macy	*** This kernel does not include the required zlib inflate support.
193eda14cbcSMatt Macy	*** Rebuild the kernel with CONFIG_ZLIB_INFLATE=y|m set.])
194eda14cbcSMatt Macy	])
195eda14cbcSMatt Macy])
196eda14cbcSMatt Macy
197eda14cbcSMatt Macydnl #
198eda14cbcSMatt Macydnl # Check CONFIG_ZLIB_DEFLATE
199eda14cbcSMatt Macydnl #
200eda14cbcSMatt Macydnl # Verify the kernel has CONFIG_ZLIB_DEFLATE support enabled.
201eda14cbcSMatt Macydnl #
202eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_ZLIB_DEFLATE], [
203eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([config_zlib_deflate], [
204eda14cbcSMatt Macy		#if !defined(CONFIG_ZLIB_DEFLATE) && \
205eda14cbcSMatt Macy		    !defined(CONFIG_ZLIB_DEFLATE_MODULE)
206eda14cbcSMatt Macy		#error CONFIG_ZLIB_DEFLATE not defined
207eda14cbcSMatt Macy		#endif
208eda14cbcSMatt Macy	],[])
209eda14cbcSMatt Macy])
210eda14cbcSMatt Macy
211eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_CONFIG_ZLIB_DEFLATE], [
212eda14cbcSMatt Macy	AC_MSG_CHECKING([whether CONFIG_ZLIB_DEFLATE is defined])
213eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([config_zlib_deflate], [
214eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
215eda14cbcSMatt Macy	],[
216eda14cbcSMatt Macy		AC_MSG_RESULT([no])
217eda14cbcSMatt Macy		AC_MSG_ERROR([
218eda14cbcSMatt Macy	*** This kernel does not include the required zlib deflate support.
219eda14cbcSMatt Macy	*** Rebuild the kernel with CONFIG_ZLIB_DEFLATE=y|m set.])
220eda14cbcSMatt Macy	])
221eda14cbcSMatt Macy])
222