Whamcloud - gitweb
LU-15652 build: On Debian detect -common kernel headers
[fs/lustre-release.git] / config / lustre-build-linux.m4
index 3528eda..7a4c98d 100644 (file)
@@ -11,14 +11,9 @@ makerule="$PWD/build"
 AC_CACHE_CHECK([for external module build target], lb_cv_module_target,
 [
        lb_cv_module_target=""
-       MODULE_TARGET="SUBDIRS"
        rm -f build/conftest.i
-       LB_LINUX_TRY_MAKE([], [],
-               [$makerule LUSTRE_KERNEL_TEST=conftest.i],
-               [test -s build/conftest.i],
-               [lb_cv_module_target="SUBDIRS"],[
        MODULE_TARGET="M"
-       makerule="$PWD/build/"
+       makerule="$PWD/build"
        LB_LINUX_TRY_MAKE([], [],
                [$makerule LUSTRE_KERNEL_TEST=conftest.i],
                [test -s build/conftest.i],
@@ -29,6 +24,12 @@ AC_CACHE_CHECK([for external module build target], lb_cv_module_target,
                [$makerule LUSTRE_KERNEL_TEST=conftest.i],
                [test -s build/conftest.i],
                [lb_cv_module_target="M"], [
+       MODULE_TARGET="M"
+       makerule=""
+       LB_LINUX_TRY_MAKE([], [],
+               [$makerule LUSTRE_KERNEL_TEST=conftest.i],
+               [test -s build/conftest.i],
+               [lb_cv_module_target="M58"], [
                        AC_MSG_ERROR([kernel module make failed; check config.log for details])
        ])])])
 ])
@@ -37,6 +38,9 @@ AS_IF([test -z "$lb_cv_module_target"],
 [test "x$lb_cv_module_target" = "xM54"],
        [makerule="$PWD/build"
        lb_cv_module_target="M"],
+[test "x$lb_cv_module_target" = "xM58"],
+       [makerule=""
+       lb_cv_module_target="M"],
 [test "x$lb_cv_module_target" = "xM"],
        [makerule="_module_$PWD/build"])
 MODULE_TARGET=$lb_cv_module_target
@@ -88,7 +92,6 @@ AC_DEFUN([LB_LINUX_RELEASE], [
        RHEL_KERNEL="no"
        SUSE_KERNEL="no"
        UBUNTU_KERNEL="no"
-       DEBIAN_KERNEL="no"
        # And if any of the above kernels has been detected yet
        KERNEL_FOUND="no"
 
@@ -130,20 +133,6 @@ AC_DEFUN([LB_LINUX_RELEASE], [
                ])
        ])
 
-       # Check for Debian
-       AS_IF([test "x$KERNEL_FOUND" = "xno"], [
-               AC_CACHE_CHECK([for Debian kernel signature], lb_cv_debian_kernel_sig, [
-                       lb_cv_debian_kernel_sig="no"
-                       AS_IF([grep -q "LINUX_PACKAGE_ID\s*\"\s*Debian" $LINUX_OBJ/include/generated/package.h], [
-                               lb_cv_debian_kernel_sig="yes"
-                       ])
-               ])
-               AS_IF([test "x$lb_cv_debian_kernel_sig" = "xyes"], [
-                       DEBIAN_KERNEL="yes"
-                       KERNEL_FOUND="yes"
-               ])
-       ])
-
        # Check for a ELRepo -ml kernel on RHEL 7/8
        AS_IF([test "x$KERNEL_FOUND" = "xno"], [
                AC_CACHE_CHECK([for ELRepo -ml kernel signature on CentOS],
@@ -164,20 +153,19 @@ AC_DEFUN([LB_LINUX_RELEASE], [
 
        # If still no kernel was found, a warning is issued
        AS_IF([test "x$KERNEL_FOUND" = "xno"], [
-               AC_MSG_WARN([Kernel Distro seems to be neither RedHat, SuSE, Ubuntu nor Debian])
+               AC_MSG_WARN([Kernel Distro seems to be neither RedHat, SuSE nor Ubuntu])
        ])
 
        AC_MSG_CHECKING([for Linux kernel module package directory])
        AC_ARG_WITH([kmp-moddir],
-               AC_HELP_STRING([--with-kmp-moddir=string],
+               AS_HELP_STRING([--with-kmp-moddir=string],
                        [set the kmod updates or extra directory]),
                [KMP_MODDIR=$withval
                 IN_KERNEL=''],[
                AS_IF([test x$RHEL_KERNEL = xyes], [KMP_MODDIR="extra/kernel"],
                      [test x$SUSE_KERNEL = xyes], [KMP_MODDIR="updates/kernel"],
                      [test x$UBUNTU_KERNEL = xyes], [KMP_MODDIR="updates/kernel"],
-                     [test x$DEBIAN_KERNEL = xyes], [KMP_MODDIR="updates/kernel"],
-                     [AC_MSG_WARN([Kernel Distro seems to be neither RedHat, SuSE, Ubuntu nor Debian])]
+                     [AC_MSG_WARN([Kernel Distro seems to be neither RedHat, SuSE nor Ubuntu])]
                )
                IN_KERNEL="${PACKAGE}"])
        AC_MSG_RESULT($KMP_MODDIR)
@@ -268,13 +256,12 @@ done
 
 AC_MSG_CHECKING([for Linux sources])
 AC_ARG_WITH([linux],
-       AC_HELP_STRING([--with-linux=path],
+       AS_HELP_STRING([--with-linux=path],
                       [set path to Linux source (default=/lib/modules/$(uname -r)/{source,build},/usr/src/linux)]),
        [LB_ARG_CANON_PATH([linux], [LINUX])
        DEFAULT_LINUX_OBJ=$LINUX],
        [LINUX=$DEFAULT_LINUX])
 AC_MSG_RESULT([$LINUX])
-AC_SUBST(LINUX)
 
 # -------- check for linux --------
 LB_CHECK_FILE([$LINUX], [],
@@ -283,16 +270,29 @@ LB_CHECK_FILE([$LINUX], [],
 # -------- linux objects (for 2.6) --
 AC_MSG_CHECKING([for Linux objects])
 AC_ARG_WITH([linux-obj],
-       AC_HELP_STRING([--with-linux-obj=path],
+       AS_HELP_STRING([--with-linux-obj=path],
                        [set path to Linux objects (default=/lib/modules/$(uname -r)/build,/usr/src/linux)]),
        [LB_ARG_CANON_PATH([linux-obj], [LINUX_OBJ])],
        [LINUX_OBJ=$DEFAULT_LINUX_OBJ])
 AC_MSG_RESULT([$LINUX_OBJ])
-AC_SUBST(LINUX_OBJ)
 
+## -------- with linux should point to <kernel>-common on Debian
+AS_IF([test ${LINUX} == ${LINUX_OBJ} -a ${LINUX} == $(realpath ${LINUX})],[
+       this_arch=$(realpath ${LINUX} | sed 's/-/\n/g' | tail -1)
+       linux_headers_common=$(realpath ${LINUX}|sed "s/-${this_arch}\$/-common/g")
+       AS_IF([test "${this_arch}" != common],[
+               _cah="${linux_headers_common}/include/linux/compiler_attributes.h"
+               _cgh="${linux_headers_common}/include/linux/compiler-gcc.h"
+               AS_IF([test -f "${_cah}" -o -f "${_cgh}"],[
+                       AC_MSG_WARN([Setting LINUX to ${linux_headers_common} was ${LINUX}])
+                       LINUX=${linux_headers_common}])
+               ])
+       ])
+AC_SUBST(LINUX)
+AC_SUBST(LINUX_OBJ)
 # -------- check for .config --------
 AC_ARG_WITH([linux-config],
-       [AC_HELP_STRING([--with-linux-config=path],
+       [AS_HELP_STRING([--with-linux-config=path],
                        [set path to Linux .conf (default=$LINUX_OBJ/.config)])],
        [LB_ARG_CANON_PATH([linux-config], [LINUX_CONFIG])],
        [LINUX_CONFIG=$LINUX_OBJ/.config])
@@ -312,7 +312,7 @@ LB_CHECK_FILE([/boot/kernel.h],
                [KERNEL_SOURCE_HEADER='/var/adm/running-kernel.h'])])
 
 AC_ARG_WITH([kernel-source-header],
-       AC_HELP_STRING([--with-kernel-source-header=path],
+       AS_HELP_STRING([--with-kernel-source-header=path],
                        [Use a different kernel version header.]),
        [LB_ARG_CANON_PATH([kernel-source-header], [KERNEL_SOURCE_HEADER])])
 
@@ -441,13 +441,6 @@ module support is required to build Lustre kernel modules.
 
 LB_CHECK_CONFIG([MODVERSIONS])
 
-LB_CHECK_CONFIG([KALLSYMS], [], [
-       AC_MSG_ERROR([
-
-Lustre requires that CONFIG_KALLSYMS is enabled in your kernel.
-])
-       ])
-
 # 2.6.28
 LC_MODULE_LOADING
 ])
@@ -580,7 +573,7 @@ AC_DEFUN([LB_LINUX_COMPILE_IFELSE],
 [m4_ifvaln([$1], [AC_LANG_CONFTEST([AC_LANG_SOURCE([$1])])])dnl
 rm -f build/conftest.o build/conftest.mod.c build/conftest.ko
 SUBARCH=$(echo $target_cpu | sed -e 's/powerpc.*/powerpc/' -e 's/ppc.*/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/' -e 's/k1om/x86/' -e 's/aarch64.*/arm64/' -e 's/armv7.*/arm/')
-AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] LDFLAGS= ${LD:+LD="$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_CHECK_INCLUDE -I$LINUX/arch/$SUBARCH/include -Iinclude -Iarch/$SUBARCH/include/generated -I$LINUX/include -Iinclude2 -I$LINUX/include/uapi -Iinclude/generated -I$LINUX/arch/$SUBARCH/include/uapi -Iarch/$SUBARCH/include/generated/uapi -I$LINUX/include/uapi -Iinclude/generated/uapi ${SPL_OBJ:+-include $SPL_OBJ/spl_config.h} ${ZFS_OBJ:+-include $ZFS_OBJ/zfs_config.h} ${SPL:+-I$SPL/include } ${ZFS:+-I$ZFS -I$ZFS/include -I${SPL:-$ZFS/include/spl}} -include $CONFIG_INCLUDE" KBUILD_EXTRA_SYMBOLS="${ZFS_OBJ:+$ZFS_OBJ/Module.symvers} $KBUILD_EXTRA_SYMBOLS" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
+AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] LDFLAGS= ${LD:+LD="$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_CHECK_INCLUDE -I$LINUX/arch/$SUBARCH/include -Iinclude -Iarch/$SUBARCH/include/generated -I$LINUX/include -Iinclude2 -I$LINUX/include/uapi -Iinclude/generated -I$LINUX/arch/$SUBARCH/include/uapi -Iarch/$SUBARCH/include/generated/uapi -I$LINUX/include/uapi -Iinclude/generated/uapi ${SPL_OBJ:+-include $SPL_OBJ/spl_config.h} ${ZFS_OBJ:+-include $ZFS_OBJ/zfs_config.h} ${SPL:+-I$SPL/include } ${ZFS:+-I$ZFS -I$ZFS/include -I$ZFS/include/os/linux/kernel -I$ZFS/include/os/linux/spl -I$ZFS/include/os/linux/zfs -I${SPL:-$ZFS/include/spl}} -include $CONFIG_INCLUDE" KBUILD_EXTRA_SYMBOLS="${ZFS_OBJ:+$ZFS_OBJ/Module.symvers} $KBUILD_EXTRA_SYMBOLS" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
        [$4],
        [_AC_MSG_LOG_CONFTEST
 m4_ifvaln([$5],[$5])dnl])