Skip to content

Commit 18c67d2

Browse files
authored
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 <[email protected]> Signed-off-by: Phil Sutter <[email protected]> Closes #16924
1 parent 3a445f2 commit 18c67d2

File tree

5 files changed

+15
-2
lines changed

5 files changed

+15
-2
lines changed

config/kernel.m4

+5
Original file line numberDiff line numberDiff line change
@@ -681,11 +681,16 @@ AC_DEFUN([ZFS_LINUX_COMPILE], [
681681
building kernel modules])
682682
AC_ARG_VAR([KERNEL_LLVM], [Binary option to
683683
build kernel modules with LLVM/CLANG toolchain])
684+
AC_ARG_VAR([KERNEL_CROSS_COMPILE], [Cross compile prefix
685+
for kernel module builds])
686+
AC_ARG_VAR([KERNEL_ARCH], [Architecture to build kernel modules for])
684687
AC_TRY_COMMAND([
685688
KBUILD_MODPOST_NOFINAL="$5" KBUILD_MODPOST_WARN="$6"
686689
make modules -k -j$TEST_JOBS ${KERNEL_CC:+CC=$KERNEL_CC}
687690
${KERNEL_LD:+LD=$KERNEL_LD} ${KERNEL_LLVM:+LLVM=$KERNEL_LLVM}
688691
CONFIG_MODULES=y CFLAGS_MODULE=-DCONFIG_MODULES
692+
${KERNEL_CROSS_COMPILE:+CROSS_COMPILE=$KERNEL_CROSS_COMPILE}
693+
${KERNEL_ARCH:+ARCH=$KERNEL_ARCH}
689694
-C $LINUX_OBJ $ARCH_UM M=$PWD/$1 >$1/build.log 2>&1])
690695
AS_IF([AC_TRY_COMMAND([$2])], [$3], [$4])
691696
])

config/zfs-build.m4

+2
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,8 @@ AC_DEFUN([ZFS_AC_RPM], [
393393
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_cc KERNEL_CC=$(KERNEL_CC)"'
394394
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_ld KERNEL_LD=$(KERNEL_LD)"'
395395
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_llvm KERNEL_LLVM=$(KERNEL_LLVM)"'
396+
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_cross_compile KERNEL_CROSS_COMPILE=$(KERNEL_CROSS_COMPILE)"'
397+
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_arch KERNEL_ARCH=$(KERNEL_ARCH)"'
396398
])
397399
398400
RPM_DEFINE_DKMS=''

module/Makefile.in

+2
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ modules-Linux:
5555
mkdir -p $(sort $(dir $(zfs-objs) $(zfs-)))
5656
$(MAKE) -C @LINUX_OBJ@ $(if @KERNEL_CC@,CC=@KERNEL_CC@) \
5757
$(if @KERNEL_LD@,LD=@KERNEL_LD@) $(if @KERNEL_LLVM@,LLVM=@KERNEL_LLVM@) \
58+
$(if @KERNEL_CROSS_COMPILE@,CROSS_COMPILE=@KERNEL_CROSS_COMPILE@) \
59+
$(if @KERNEL_ARCH@,ARCH=@KERNEL_ARCH@) \
5860
M="$$PWD" @KERNEL_MAKE@ CONFIG_ZFS=m modules
5961

6062
modules-FreeBSD:

rpm/generic/zfs-kmod.spec.in

+3-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,9 @@ for kernel_version in %{?kernel_versions}; do
144144
%{debuginfo} \
145145
%{?kernel_cc} \
146146
%{?kernel_ld} \
147-
%{?kernel_llvm}
147+
%{?kernel_llvm} \
148+
%{?kernel_cross_compile} \
149+
%{?kernel_arch}
148150

149151
# Pre-6.10 kernel builds didn't need to copy over the source files to the
150152
# build directory. However we do need to do it though post-6.10 due to

rpm/redhat/zfs-kmod.spec.in

+3-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,9 @@ fi
6969
%{debuginfo} \
7070
%{?kernel_cc} \
7171
%{?kernel_ld} \
72-
%{?kernel_llvm}
72+
%{?kernel_llvm} \
73+
%{?kernel_cross_compile} \
74+
%{?kernel_arch}
7375
make %{?_smp_mflags}
7476

7577
# Module signing (modsign)

0 commit comments

Comments
 (0)