dnl # dnl # Certain kernel build options are not supported. These must be dnl # detected at configure time and cause a build failure. Otherwise dnl # modules may be successfully built that behave incorrectly. dnl # 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 ZFS_AC_KERNEL_SRC_CONFIG_ZLIB_DEFLATE ZFS_AC_KERNEL_SRC_CONFIG_ZLIB_INFLATE AC_MSG_CHECKING([for kernel config option compatibility]) 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 ZFS_AC_KERNEL_CONFIG_ZLIB_DEFLATE ZFS_AC_KERNEL_CONFIG_ZLIB_INFLATE ]) dnl # dnl # Check CONFIG_BLOCK dnl # dnl # Verify the kernel has CONFIG_BLOCK support enabled. dnl # AC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_BLOCK], [ ZFS_LINUX_TEST_SRC([config_block], [ #if !defined(CONFIG_BLOCK) #error CONFIG_BLOCK not defined #endif ],[]) ]) AC_DEFUN([ZFS_AC_KERNEL_CONFIG_BLOCK], [ AC_MSG_CHECKING([whether CONFIG_BLOCK is defined]) ZFS_LINUX_TEST_RESULT([config_block], [ AC_MSG_RESULT([yes]) ],[ AC_MSG_RESULT([no]) AC_MSG_ERROR([ *** This kernel does not include the required block device support. *** Rebuild the kernel with CONFIG_BLOCK=y set.]) ]) ]) dnl # dnl # Check CONFIG_DEBUG_LOCK_ALLOC dnl # dnl # This is typically only set for debug kernels because it comes with dnl # a performance penalty. However, when it is set it maps the non-GPL dnl # symbol mutex_lock() to the GPL-only mutex_lock_nested() symbol. dnl # This will cause a failure at link time which we'd rather know about dnl # at compile time. dnl # dnl # Since we plan to pursue making mutex_lock_nested() a non-GPL symbol dnl # with the upstream community we add a check to detect this case. dnl # AC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_DEBUG_LOCK_ALLOC], [ ZFS_LINUX_TEST_SRC([config_debug_lock_alloc], [ #include ],[ struct mutex lock; mutex_init(&lock); mutex_lock(&lock); mutex_unlock(&lock); ], [], [ZFS_META_LICENSE]) ]) AC_DEFUN([ZFS_AC_KERNEL_CONFIG_DEBUG_LOCK_ALLOC], [ AC_MSG_CHECKING([whether mutex_lock() is GPL-only]) ZFS_LINUX_TEST_RESULT([config_debug_lock_alloc_license], [ AC_MSG_RESULT(no) ],[ AC_MSG_RESULT(yes) AC_MSG_ERROR([ *** Kernel built with CONFIG_DEBUG_LOCK_ALLOC which is incompatible *** with the CDDL license and will prevent the module linking stage *** from succeeding. You must rebuild your kernel without this *** option enabled.]) ]) ]) 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 `, *** 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. dnl # AC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_TRIM_UNUSED_KSYMS], [ ZFS_LINUX_TEST_SRC([config_trim_unusued_ksyms], [ #if defined(CONFIG_TRIM_UNUSED_KSYMS) #error CONFIG_TRIM_UNUSED_KSYMS not defined #endif ],[]) ]) AC_DEFUN([ZFS_AC_KERNEL_CONFIG_TRIM_UNUSED_KSYMS], [ AC_MSG_CHECKING([whether CONFIG_TRIM_UNUSED_KSYM is disabled]) ZFS_LINUX_TEST_RESULT([config_trim_unusued_ksyms], [ AC_MSG_RESULT([yes]) ],[ AC_MSG_RESULT([no]) AS_IF([test "x$enable_linux_builtin" != xyes], [ AC_MSG_ERROR([ *** This kernel has unused symbols trimming enabled, please disable. *** Rebuild the kernel with CONFIG_TRIM_UNUSED_KSYMS=n set.]) ]) ]) ]) dnl # dnl # Check CONFIG_ZLIB_INFLATE dnl # dnl # Verify the kernel has CONFIG_ZLIB_INFLATE support enabled. dnl # AC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_ZLIB_INFLATE], [ ZFS_LINUX_TEST_SRC([config_zlib_inflate], [ #if !defined(CONFIG_ZLIB_INFLATE) && \ !defined(CONFIG_ZLIB_INFLATE_MODULE) #error CONFIG_ZLIB_INFLATE not defined #endif ],[]) ]) AC_DEFUN([ZFS_AC_KERNEL_CONFIG_ZLIB_INFLATE], [ AC_MSG_CHECKING([whether CONFIG_ZLIB_INFLATE is defined]) ZFS_LINUX_TEST_RESULT([config_zlib_inflate], [ AC_MSG_RESULT([yes]) ],[ AC_MSG_RESULT([no]) AC_MSG_ERROR([ *** This kernel does not include the required zlib inflate support. *** Rebuild the kernel with CONFIG_ZLIB_INFLATE=y|m set.]) ]) ]) dnl # dnl # Check CONFIG_ZLIB_DEFLATE dnl # dnl # Verify the kernel has CONFIG_ZLIB_DEFLATE support enabled. dnl # AC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_ZLIB_DEFLATE], [ ZFS_LINUX_TEST_SRC([config_zlib_deflate], [ #if !defined(CONFIG_ZLIB_DEFLATE) && \ !defined(CONFIG_ZLIB_DEFLATE_MODULE) #error CONFIG_ZLIB_DEFLATE not defined #endif ],[]) ]) AC_DEFUN([ZFS_AC_KERNEL_CONFIG_ZLIB_DEFLATE], [ AC_MSG_CHECKING([whether CONFIG_ZLIB_DEFLATE is defined]) ZFS_LINUX_TEST_RESULT([config_zlib_deflate], [ AC_MSG_RESULT([yes]) ],[ AC_MSG_RESULT([no]) AC_MSG_ERROR([ *** This kernel does not include the required zlib deflate support. *** Rebuild the kernel with CONFIG_ZLIB_DEFLATE=y|m set.]) ]) ])