mirror of
https://git.proxmox.com/git/mirror_zfs
synced 2025-04-28 05:56:26 +00:00
Support for cross-compiling kernel modules
In order to correctly cross-compile, one has to pass ARCH and CROSS_COMPILE make flags to kernel module build calls. Facilitate this in the same way as for custom CC flag by recognizing KERNEL_-prefixed configure environment variables of same name. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Phil Sutter <phil@nwl.cc> Closes #16924
This commit is contained in:
parent
3a445f2ef5
commit
18c67d2418
@ -681,11 +681,16 @@ AC_DEFUN([ZFS_LINUX_COMPILE], [
|
|||||||
building kernel modules])
|
building kernel modules])
|
||||||
AC_ARG_VAR([KERNEL_LLVM], [Binary option to
|
AC_ARG_VAR([KERNEL_LLVM], [Binary option to
|
||||||
build kernel modules with LLVM/CLANG toolchain])
|
build kernel modules with LLVM/CLANG toolchain])
|
||||||
|
AC_ARG_VAR([KERNEL_CROSS_COMPILE], [Cross compile prefix
|
||||||
|
for kernel module builds])
|
||||||
|
AC_ARG_VAR([KERNEL_ARCH], [Architecture to build kernel modules for])
|
||||||
AC_TRY_COMMAND([
|
AC_TRY_COMMAND([
|
||||||
KBUILD_MODPOST_NOFINAL="$5" KBUILD_MODPOST_WARN="$6"
|
KBUILD_MODPOST_NOFINAL="$5" KBUILD_MODPOST_WARN="$6"
|
||||||
make modules -k -j$TEST_JOBS ${KERNEL_CC:+CC=$KERNEL_CC}
|
make modules -k -j$TEST_JOBS ${KERNEL_CC:+CC=$KERNEL_CC}
|
||||||
${KERNEL_LD:+LD=$KERNEL_LD} ${KERNEL_LLVM:+LLVM=$KERNEL_LLVM}
|
${KERNEL_LD:+LD=$KERNEL_LD} ${KERNEL_LLVM:+LLVM=$KERNEL_LLVM}
|
||||||
CONFIG_MODULES=y CFLAGS_MODULE=-DCONFIG_MODULES
|
CONFIG_MODULES=y CFLAGS_MODULE=-DCONFIG_MODULES
|
||||||
|
${KERNEL_CROSS_COMPILE:+CROSS_COMPILE=$KERNEL_CROSS_COMPILE}
|
||||||
|
${KERNEL_ARCH:+ARCH=$KERNEL_ARCH}
|
||||||
-C $LINUX_OBJ $ARCH_UM M=$PWD/$1 >$1/build.log 2>&1])
|
-C $LINUX_OBJ $ARCH_UM M=$PWD/$1 >$1/build.log 2>&1])
|
||||||
AS_IF([AC_TRY_COMMAND([$2])], [$3], [$4])
|
AS_IF([AC_TRY_COMMAND([$2])], [$3], [$4])
|
||||||
])
|
])
|
||||||
|
@ -393,6 +393,8 @@ AC_DEFUN([ZFS_AC_RPM], [
|
|||||||
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_cc KERNEL_CC=$(KERNEL_CC)"'
|
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_cc KERNEL_CC=$(KERNEL_CC)"'
|
||||||
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_ld KERNEL_LD=$(KERNEL_LD)"'
|
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_ld KERNEL_LD=$(KERNEL_LD)"'
|
||||||
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_llvm KERNEL_LLVM=$(KERNEL_LLVM)"'
|
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_llvm KERNEL_LLVM=$(KERNEL_LLVM)"'
|
||||||
|
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_cross_compile KERNEL_CROSS_COMPILE=$(KERNEL_CROSS_COMPILE)"'
|
||||||
|
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_arch KERNEL_ARCH=$(KERNEL_ARCH)"'
|
||||||
])
|
])
|
||||||
|
|
||||||
RPM_DEFINE_DKMS=''
|
RPM_DEFINE_DKMS=''
|
||||||
|
@ -55,6 +55,8 @@ modules-Linux:
|
|||||||
mkdir -p $(sort $(dir $(zfs-objs) $(zfs-)))
|
mkdir -p $(sort $(dir $(zfs-objs) $(zfs-)))
|
||||||
$(MAKE) -C @LINUX_OBJ@ $(if @KERNEL_CC@,CC=@KERNEL_CC@) \
|
$(MAKE) -C @LINUX_OBJ@ $(if @KERNEL_CC@,CC=@KERNEL_CC@) \
|
||||||
$(if @KERNEL_LD@,LD=@KERNEL_LD@) $(if @KERNEL_LLVM@,LLVM=@KERNEL_LLVM@) \
|
$(if @KERNEL_LD@,LD=@KERNEL_LD@) $(if @KERNEL_LLVM@,LLVM=@KERNEL_LLVM@) \
|
||||||
|
$(if @KERNEL_CROSS_COMPILE@,CROSS_COMPILE=@KERNEL_CROSS_COMPILE@) \
|
||||||
|
$(if @KERNEL_ARCH@,ARCH=@KERNEL_ARCH@) \
|
||||||
M="$$PWD" @KERNEL_MAKE@ CONFIG_ZFS=m modules
|
M="$$PWD" @KERNEL_MAKE@ CONFIG_ZFS=m modules
|
||||||
|
|
||||||
modules-FreeBSD:
|
modules-FreeBSD:
|
||||||
|
@ -144,7 +144,9 @@ for kernel_version in %{?kernel_versions}; do
|
|||||||
%{debuginfo} \
|
%{debuginfo} \
|
||||||
%{?kernel_cc} \
|
%{?kernel_cc} \
|
||||||
%{?kernel_ld} \
|
%{?kernel_ld} \
|
||||||
%{?kernel_llvm}
|
%{?kernel_llvm} \
|
||||||
|
%{?kernel_cross_compile} \
|
||||||
|
%{?kernel_arch}
|
||||||
|
|
||||||
# Pre-6.10 kernel builds didn't need to copy over the source files to the
|
# Pre-6.10 kernel builds didn't need to copy over the source files to the
|
||||||
# build directory. However we do need to do it though post-6.10 due to
|
# build directory. However we do need to do it though post-6.10 due to
|
||||||
|
@ -69,7 +69,9 @@ fi
|
|||||||
%{debuginfo} \
|
%{debuginfo} \
|
||||||
%{?kernel_cc} \
|
%{?kernel_cc} \
|
||||||
%{?kernel_ld} \
|
%{?kernel_ld} \
|
||||||
%{?kernel_llvm}
|
%{?kernel_llvm} \
|
||||||
|
%{?kernel_cross_compile} \
|
||||||
|
%{?kernel_arch}
|
||||||
make %{?_smp_mflags}
|
make %{?_smp_mflags}
|
||||||
|
|
||||||
# Module signing (modsign)
|
# Module signing (modsign)
|
||||||
|
Loading…
Reference in New Issue
Block a user