Message ID | 20241022181703.1710116-1-masahiroy@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [1/3] kbuild: rpm-pkg: disable kernel-devel package when cross-compiling | expand |
On Wed, Oct 23, 2024 at 03:16:57AM +0900, Masahiro Yamada wrote: > Since commit f1d87664b82a ("kbuild: cross-compile linux-headers package > when possible"), 'make binrpm-pkg' may attempt to cross-compile the > kernel-devel package, but it fails under certain circumstances. > > For example, when CONFIG_MODULE_SIG_FORMAT is enabled on openSUSE > Tumbleweed, the following command fails: > > $ make ARCH=arm64 CROSS_COMPILE=aarch64-suse-linux- binrpm-pkg > [ snip ] > Rebuilding host programs with aarch64-suse-linux-gcc... > HOSTCC /home/masahiro/ref/linux/rpmbuild/BUILDROOT/kernel-6.12.0_rc4-1.aarch64/usr/src/kernels/6.12.0-rc4/scripts/kallsyms > HOSTCC /home/masahiro/ref/linux/rpmbuild/BUILDROOT/kernel-6.12.0_rc4-1.aarch64/usr/src/kernels/6.12.0-rc4/scripts/sorttable > HOSTCC /home/masahiro/ref/linux/rpmbuild/BUILDROOT/kernel-6.12.0_rc4-1.aarch64/usr/src/kernels/6.12.0-rc4/scripts/asn1_compiler > HOSTCC /home/masahiro/ref/linux/rpmbuild/BUILDROOT/kernel-6.12.0_rc4-1.aarch64/usr/src/kernels/6.12.0-rc4/scripts/sign-file > /home/masahiro/ref/linux/rpmbuild/BUILDROOT/kernel-6.12.0_rc4-1.aarch64/usr/src/kernels/6.12.0-rc4/scripts/sign-file.c:25:10: fatal error: openssl/opensslv.h: No such file or directory > 25 | #include <openssl/opensslv.h> > | ^~~~~~~~~~~~~~~~~~~~ > compilation terminated. > > I believe this issue is less common on Fedora because cross-compiling > user-space programs is not possible, even if the gcc-aarch64-linux-gnu > package is installed. In other words, CONFIG_CC_CAN_LINK is unset. > > On Fedora 40, the package information explains this limitation clearly: > > $ dnf info gcc-aarch64-linux-gnu > [ snip ] > Description : Cross-build GNU C compiler. > : > : Only building kernels is currently supported. Support for cross-building > : user space programs is not currently provided as that would massively multiply > : the number of packages. > > This commit disables the kernel-devel package when cross-compiling > because cross-compiling RPM packages is somewhat challenging, and I > did not come up with a better solution. > > Fixes: f1d87664b82a ("kbuild: cross-compile linux-headers package when possible") > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Reviewed-by: Nathan Chancellor <nathan@kernel.org> > --- > > scripts/Makefile.package | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/scripts/Makefile.package b/scripts/Makefile.package > index 11d53f240a2b..b9a4b0c8b8a0 100644 > --- a/scripts/Makefile.package > +++ b/scripts/Makefile.package > @@ -72,7 +72,8 @@ rpm-pkg srcrpm-pkg binrpm-pkg: rpmbuild/SPECS/kernel.spec > --define='_topdir $(abspath rpmbuild)' \ > $(if $(filter a b, $(build-type)), \ > --target $(UTS_MACHINE)-linux --build-in-place --noprep --define='_smp_mflags %{nil}' \ > - $$(rpm -q rpm >/dev/null 2>&1 || echo --nodeps)) \ > + $$(rpm -q rpm >/dev/null 2>&1 || echo --nodeps) \ > + $(if $(cross_compiling), --without=devel)) \ > $(RPMOPTS)) > > # deb-pkg srcdeb-pkg bindeb-pkg > -- > 2.43.0 >
diff --git a/scripts/Makefile.package b/scripts/Makefile.package index 11d53f240a2b..b9a4b0c8b8a0 100644 --- a/scripts/Makefile.package +++ b/scripts/Makefile.package @@ -72,7 +72,8 @@ rpm-pkg srcrpm-pkg binrpm-pkg: rpmbuild/SPECS/kernel.spec --define='_topdir $(abspath rpmbuild)' \ $(if $(filter a b, $(build-type)), \ --target $(UTS_MACHINE)-linux --build-in-place --noprep --define='_smp_mflags %{nil}' \ - $$(rpm -q rpm >/dev/null 2>&1 || echo --nodeps)) \ + $$(rpm -q rpm >/dev/null 2>&1 || echo --nodeps) \ + $(if $(cross_compiling), --without=devel)) \ $(RPMOPTS)) # deb-pkg srcdeb-pkg bindeb-pkg
Since commit f1d87664b82a ("kbuild: cross-compile linux-headers package when possible"), 'make binrpm-pkg' may attempt to cross-compile the kernel-devel package, but it fails under certain circumstances. For example, when CONFIG_MODULE_SIG_FORMAT is enabled on openSUSE Tumbleweed, the following command fails: $ make ARCH=arm64 CROSS_COMPILE=aarch64-suse-linux- binrpm-pkg [ snip ] Rebuilding host programs with aarch64-suse-linux-gcc... HOSTCC /home/masahiro/ref/linux/rpmbuild/BUILDROOT/kernel-6.12.0_rc4-1.aarch64/usr/src/kernels/6.12.0-rc4/scripts/kallsyms HOSTCC /home/masahiro/ref/linux/rpmbuild/BUILDROOT/kernel-6.12.0_rc4-1.aarch64/usr/src/kernels/6.12.0-rc4/scripts/sorttable HOSTCC /home/masahiro/ref/linux/rpmbuild/BUILDROOT/kernel-6.12.0_rc4-1.aarch64/usr/src/kernels/6.12.0-rc4/scripts/asn1_compiler HOSTCC /home/masahiro/ref/linux/rpmbuild/BUILDROOT/kernel-6.12.0_rc4-1.aarch64/usr/src/kernels/6.12.0-rc4/scripts/sign-file /home/masahiro/ref/linux/rpmbuild/BUILDROOT/kernel-6.12.0_rc4-1.aarch64/usr/src/kernels/6.12.0-rc4/scripts/sign-file.c:25:10: fatal error: openssl/opensslv.h: No such file or directory 25 | #include <openssl/opensslv.h> | ^~~~~~~~~~~~~~~~~~~~ compilation terminated. I believe this issue is less common on Fedora because cross-compiling user-space programs is not possible, even if the gcc-aarch64-linux-gnu package is installed. In other words, CONFIG_CC_CAN_LINK is unset. On Fedora 40, the package information explains this limitation clearly: $ dnf info gcc-aarch64-linux-gnu [ snip ] Description : Cross-build GNU C compiler. : : Only building kernels is currently supported. Support for cross-building : user space programs is not currently provided as that would massively multiply : the number of packages. This commit disables the kernel-devel package when cross-compiling because cross-compiling RPM packages is somewhat challenging, and I did not come up with a better solution. Fixes: f1d87664b82a ("kbuild: cross-compile linux-headers package when possible") Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- scripts/Makefile.package | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)