* [PATCH 1/3] kbuild: rpm-pkg: disable kernel-devel package when cross-compiling
@ 2024-10-22 18:16 Masahiro Yamada
2024-10-22 18:16 ` [PATCH 2/3] kbuild: deb-pkg: add pkg.linux-upstream.nokernelheaders build profile Masahiro Yamada
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Masahiro Yamada @ 2024-10-22 18:16 UTC (permalink / raw)
To: linux-kbuild
Cc: Ben Hutchings, Ron Economos, Masahiro Yamada, Nathan Chancellor,
Nicolas Schier, linux-kernel
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(-)
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
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH 2/3] kbuild: deb-pkg: add pkg.linux-upstream.nokernelheaders build profile 2024-10-22 18:16 [PATCH 1/3] kbuild: rpm-pkg: disable kernel-devel package when cross-compiling Masahiro Yamada @ 2024-10-22 18:16 ` Masahiro Yamada 2024-10-23 13:06 ` Ron Economos 2024-10-23 15:38 ` Nicolas Schier 2024-10-22 18:16 ` [PATCH 3/3] kbuild: deb-pkg: add pkg.linux-upstream.nokerneldbg " Masahiro Yamada 2024-10-27 18:35 ` [PATCH 1/3] kbuild: rpm-pkg: disable kernel-devel package when cross-compiling Nathan Chancellor 2 siblings, 2 replies; 10+ messages in thread From: Masahiro Yamada @ 2024-10-22 18:16 UTC (permalink / raw) To: linux-kbuild Cc: Ben Hutchings, Ron Economos, Masahiro Yamada, Bill Wendling, Justin Stitt, Nathan Chancellor, Nick Desaulniers, Nicolas Schier, linux-kernel, llvm Since commit f1d87664b82a ("kbuild: cross-compile linux-headers package when possible"), 'make bindeb-pkg' may attempt to cross-compile the linux-headers package, but it fails under certain circumstances. For example, when CONFIG_MODULE_SIG_FORMAT is enabled on Debian, the following command fails: $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bindeb-pkg [ snip ] Rebuilding host programs with aarch64-linux-gnu-gcc... HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/kallsyms HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/sorttable HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/asn1_compiler HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/sign-file In file included from /usr/include/openssl/opensslv.h:109, from debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/sign-file.c:25: /usr/include/openssl/macros.h:14:10: fatal error: openssl/opensslconf.h: No such file or directory 14 | #include <openssl/opensslconf.h> | ^~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. This commit adds a new profile, pkg.linux-upstream.nokernelheaders, to guard the linux-headers package. There are two options to fix the above issue. [option 1] Set the pkg.linux-upstream.nokernelheaders build profile $ DEB_BUILD_PROFILES=pkg.linux-upstream.nokernelheaders \ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bindeb-pkg This skips the building of the linux-headers package. [option 2] Install the necessary build dependencies If you want to cross-compile the linux-headers package, you need to install additional packages. This is a one-time installation step. For example, on Debian, the packages necessary for cross-compiling it to arm64 can be installed with the following commands: # dpkg --add-architecture arm64 # apt update # apt install gcc-aarch64-linux-gnu libssl-dev:arm64 Fixes: f1d87664b82a ("kbuild: cross-compile linux-headers package when possible") Reported-by: Ron Economos <re@w6rz.net> Closes: https://lore.kernel.org/all/b3d4f49e-7ddb-29ba-0967-689232329b53@w6rz.net/ Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- scripts/package/builddeb | 2 +- scripts/package/install-extmod-build | 6 ++---- scripts/package/mkdebian | 9 ++++++++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/scripts/package/builddeb b/scripts/package/builddeb index 404587fc71fe..441b0bb66e0d 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -123,7 +123,7 @@ install_kernel_headers () { pdir=debian/$1 version=${1#linux-headers-} - "${srctree}/scripts/package/install-extmod-build" "${pdir}/usr/src/linux-headers-${version}" + CC="${DEB_HOST_GNU_TYPE}-gcc" "${srctree}/scripts/package/install-extmod-build" "${pdir}/usr/src/linux-headers-${version}" mkdir -p $pdir/lib/modules/$version/ ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build diff --git a/scripts/package/install-extmod-build b/scripts/package/install-extmod-build index d2c9cacecc0c..7ec1f061a519 100755 --- a/scripts/package/install-extmod-build +++ b/scripts/package/install-extmod-build @@ -44,13 +44,11 @@ mkdir -p "${destdir}" fi } | tar -c -f - -T - | tar -xf - -C "${destdir}" -# When ${CC} and ${HOSTCC} differ, we are likely cross-compiling. Rebuild host -# programs using ${CC}. This assumes CC=${CROSS_COMPILE}gcc, which is usually -# the case for package building. It does not cross-compile when CC=clang. +# When ${CC} and ${HOSTCC} differ, rebuild host programs using ${CC}. # # This caters to host programs that participate in Kbuild. objtool and # resolve_btfids are out of scope. -if [ "${CC}" != "${HOSTCC}" ] && is_enabled CONFIG_CC_CAN_LINK; then +if [ "${CC}" != "${HOSTCC}" ]; then echo "Rebuilding host programs with ${CC}..." cat <<-'EOF' > "${destdir}/Kbuild" diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian index 10637d403777..93eb50356ddb 100755 --- a/scripts/package/mkdebian +++ b/scripts/package/mkdebian @@ -179,6 +179,8 @@ fi echo $debarch > debian/arch +host_gnu=$(dpkg-architecture -a "${debarch}" -q DEB_HOST_GNU_TYPE | sed 's/_/-/g') + # Generate a simple changelog template cat <<EOF > debian/changelog $sourcename ($packageversion) $distribution; urgency=low @@ -196,7 +198,11 @@ Priority: optional Maintainer: $maintainer Rules-Requires-Root: no Build-Depends: debhelper-compat (= 12) -Build-Depends-Arch: bc, bison, cpio, flex, kmod, libelf-dev:native, libssl-dev:native, rsync +Build-Depends-Arch: bc, bison, cpio, flex, + gcc-${host_gnu} <!pkg.${sourcename}.nokernelheaders>, + kmod, libelf-dev:native, + libssl-dev:native, libssl-dev <!pkg.${sourcename}.nokernelheaders>, + rsync Homepage: https://www.kernel.org/ Package: $packagename-$version @@ -224,6 +230,7 @@ cat <<EOF >> debian/control Package: linux-headers-$version Architecture: $debarch +Build-Profiles: <!pkg.${sourcename}.nokernelheaders> Description: Linux kernel headers for $version on $debarch This package provides kernel header files for $version on $debarch . -- 2.43.0 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/3] kbuild: deb-pkg: add pkg.linux-upstream.nokernelheaders build profile 2024-10-22 18:16 ` [PATCH 2/3] kbuild: deb-pkg: add pkg.linux-upstream.nokernelheaders build profile Masahiro Yamada @ 2024-10-23 13:06 ` Ron Economos 2024-10-23 14:28 ` Masahiro Yamada 2024-10-23 15:38 ` Nicolas Schier 1 sibling, 1 reply; 10+ messages in thread From: Ron Economos @ 2024-10-23 13:06 UTC (permalink / raw) To: Masahiro Yamada, linux-kbuild Cc: Ben Hutchings, Bill Wendling, Justin Stitt, Nathan Chancellor, Nick Desaulniers, Nicolas Schier, linux-kernel, llvm On 10/22/24 11:16 AM, Masahiro Yamada wrote: > Since commit f1d87664b82a ("kbuild: cross-compile linux-headers package > when possible"), 'make bindeb-pkg' may attempt to cross-compile the > linux-headers package, but it fails under certain circumstances. > > For example, when CONFIG_MODULE_SIG_FORMAT is enabled on Debian, the > following command fails: > > $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bindeb-pkg > [ snip ] > Rebuilding host programs with aarch64-linux-gnu-gcc... > HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/kallsyms > HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/sorttable > HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/asn1_compiler > HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/sign-file > In file included from /usr/include/openssl/opensslv.h:109, > from debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/sign-file.c:25: > /usr/include/openssl/macros.h:14:10: fatal error: openssl/opensslconf.h: No such file or directory > 14 | #include <openssl/opensslconf.h> > | ^~~~~~~~~~~~~~~~~~~~~~~ > compilation terminated. > > This commit adds a new profile, pkg.linux-upstream.nokernelheaders, to > guard the linux-headers package. > > There are two options to fix the above issue. > > [option 1] Set the pkg.linux-upstream.nokernelheaders build profile > > $ DEB_BUILD_PROFILES=pkg.linux-upstream.nokernelheaders \ > make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bindeb-pkg > > This skips the building of the linux-headers package. > > [option 2] Install the necessary build dependencies > > If you want to cross-compile the linux-headers package, you need to > install additional packages. This is a one-time installation step. > > For example, on Debian, the packages necessary for cross-compiling it > to arm64 can be installed with the following commands: > > # dpkg --add-architecture arm64 > # apt update > # apt install gcc-aarch64-linux-gnu libssl-dev:arm64 > > Fixes: f1d87664b82a ("kbuild: cross-compile linux-headers package when possible") > Reported-by: Ron Economos <re@w6rz.net> > Closes: https://lore.kernel.org/all/b3d4f49e-7ddb-29ba-0967-689232329b53@w6rz.net/ > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > --- > > scripts/package/builddeb | 2 +- > scripts/package/install-extmod-build | 6 ++---- > scripts/package/mkdebian | 9 ++++++++- > 3 files changed, 11 insertions(+), 6 deletions(-) > > diff --git a/scripts/package/builddeb b/scripts/package/builddeb > index 404587fc71fe..441b0bb66e0d 100755 > --- a/scripts/package/builddeb > +++ b/scripts/package/builddeb > @@ -123,7 +123,7 @@ install_kernel_headers () { > pdir=debian/$1 > version=${1#linux-headers-} > > - "${srctree}/scripts/package/install-extmod-build" "${pdir}/usr/src/linux-headers-${version}" > + CC="${DEB_HOST_GNU_TYPE}-gcc" "${srctree}/scripts/package/install-extmod-build" "${pdir}/usr/src/linux-headers-${version}" > > mkdir -p $pdir/lib/modules/$version/ > ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build > diff --git a/scripts/package/install-extmod-build b/scripts/package/install-extmod-build > index d2c9cacecc0c..7ec1f061a519 100755 > --- a/scripts/package/install-extmod-build > +++ b/scripts/package/install-extmod-build > @@ -44,13 +44,11 @@ mkdir -p "${destdir}" > fi > } | tar -c -f - -T - | tar -xf - -C "${destdir}" > > -# When ${CC} and ${HOSTCC} differ, we are likely cross-compiling. Rebuild host > -# programs using ${CC}. This assumes CC=${CROSS_COMPILE}gcc, which is usually > -# the case for package building. It does not cross-compile when CC=clang. > +# When ${CC} and ${HOSTCC} differ, rebuild host programs using ${CC}. > # > # This caters to host programs that participate in Kbuild. objtool and > # resolve_btfids are out of scope. > -if [ "${CC}" != "${HOSTCC}" ] && is_enabled CONFIG_CC_CAN_LINK; then > +if [ "${CC}" != "${HOSTCC}" ]; then > echo "Rebuilding host programs with ${CC}..." > > cat <<-'EOF' > "${destdir}/Kbuild" > diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian > index 10637d403777..93eb50356ddb 100755 > --- a/scripts/package/mkdebian > +++ b/scripts/package/mkdebian > @@ -179,6 +179,8 @@ fi > > echo $debarch > debian/arch > > +host_gnu=$(dpkg-architecture -a "${debarch}" -q DEB_HOST_GNU_TYPE | sed 's/_/-/g') > + > # Generate a simple changelog template > cat <<EOF > debian/changelog > $sourcename ($packageversion) $distribution; urgency=low > @@ -196,7 +198,11 @@ Priority: optional > Maintainer: $maintainer > Rules-Requires-Root: no > Build-Depends: debhelper-compat (= 12) > -Build-Depends-Arch: bc, bison, cpio, flex, kmod, libelf-dev:native, libssl-dev:native, rsync > +Build-Depends-Arch: bc, bison, cpio, flex, > + gcc-${host_gnu} <!pkg.${sourcename}.nokernelheaders>, > + kmod, libelf-dev:native, > + libssl-dev:native, libssl-dev <!pkg.${sourcename}.nokernelheaders>, > + rsync > Homepage: https://www.kernel.org/ > > Package: $packagename-$version > @@ -224,6 +230,7 @@ cat <<EOF >> debian/control > > Package: linux-headers-$version > Architecture: $debarch > +Build-Profiles: <!pkg.${sourcename}.nokernelheaders> > Description: Linux kernel headers for $version on $debarch > This package provides kernel header files for $version on $debarch > . Tested with option 2 for RISC-V. On Ubuntu 24.04, the following must be added to the file /etc/apt/sources.list.d/ubuntu.sources for apt update to fetch the correct repositories: Types: deb URIs: http://ports.ubuntu.com/ubuntu-ports Suites: noble noble-updates noble-backports Components: main universe restricted multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Architectures: riscv64 Then: sudo dpkg --add-architecture riscv64 sudo apt-get update sudo apt-get install libssl-dev:riscv64 The tool chain at https://github.com/riscv-collab/riscv-gnu-toolchain can also be made to work. See: https://github.com/riscv-collab/riscv-gnu-toolchain/issues/1590 Tested-by: Ron Economos <re@w6rz.net> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/3] kbuild: deb-pkg: add pkg.linux-upstream.nokernelheaders build profile 2024-10-23 13:06 ` Ron Economos @ 2024-10-23 14:28 ` Masahiro Yamada 0 siblings, 0 replies; 10+ messages in thread From: Masahiro Yamada @ 2024-10-23 14:28 UTC (permalink / raw) To: Ron Economos Cc: linux-kbuild, Ben Hutchings, Bill Wendling, Justin Stitt, Nathan Chancellor, Nick Desaulniers, Nicolas Schier, linux-kernel, llvm On Wed, Oct 23, 2024 at 10:06 PM Ron Economos <re@w6rz.net> wrote: > > On 10/22/24 11:16 AM, Masahiro Yamada wrote: > > Since commit f1d87664b82a ("kbuild: cross-compile linux-headers package > > when possible"), 'make bindeb-pkg' may attempt to cross-compile the > > linux-headers package, but it fails under certain circumstances. > > > > For example, when CONFIG_MODULE_SIG_FORMAT is enabled on Debian, the > > following command fails: > > > > $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bindeb-pkg > > [ snip ] > > Rebuilding host programs with aarch64-linux-gnu-gcc... > > HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/kallsyms > > HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/sorttable > > HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/asn1_compiler > > HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/sign-file > > In file included from /usr/include/openssl/opensslv.h:109, > > from debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/sign-file.c:25: > > /usr/include/openssl/macros.h:14:10: fatal error: openssl/opensslconf.h: No such file or directory > > 14 | #include <openssl/opensslconf.h> > > | ^~~~~~~~~~~~~~~~~~~~~~~ > > compilation terminated. > > > > This commit adds a new profile, pkg.linux-upstream.nokernelheaders, to > > guard the linux-headers package. > > > > There are two options to fix the above issue. > > > > [option 1] Set the pkg.linux-upstream.nokernelheaders build profile > > > > $ DEB_BUILD_PROFILES=pkg.linux-upstream.nokernelheaders \ > > make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bindeb-pkg > > > > This skips the building of the linux-headers package. > > > > [option 2] Install the necessary build dependencies > > > > If you want to cross-compile the linux-headers package, you need to > > install additional packages. This is a one-time installation step. > > > > For example, on Debian, the packages necessary for cross-compiling it > > to arm64 can be installed with the following commands: > > > > # dpkg --add-architecture arm64 > > # apt update > > # apt install gcc-aarch64-linux-gnu libssl-dev:arm64 > > > > Fixes: f1d87664b82a ("kbuild: cross-compile linux-headers package when possible") > > Reported-by: Ron Economos <re@w6rz.net> > > Closes: https://lore.kernel.org/all/b3d4f49e-7ddb-29ba-0967-689232329b53@w6rz.net/ > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > > --- > > > > scripts/package/builddeb | 2 +- > > scripts/package/install-extmod-build | 6 ++---- > > scripts/package/mkdebian | 9 ++++++++- > > 3 files changed, 11 insertions(+), 6 deletions(-) > > > > diff --git a/scripts/package/builddeb b/scripts/package/builddeb > > index 404587fc71fe..441b0bb66e0d 100755 > > --- a/scripts/package/builddeb > > +++ b/scripts/package/builddeb > > @@ -123,7 +123,7 @@ install_kernel_headers () { > > pdir=debian/$1 > > version=${1#linux-headers-} > > > > - "${srctree}/scripts/package/install-extmod-build" "${pdir}/usr/src/linux-headers-${version}" > > + CC="${DEB_HOST_GNU_TYPE}-gcc" "${srctree}/scripts/package/install-extmod-build" "${pdir}/usr/src/linux-headers-${version}" > > > > mkdir -p $pdir/lib/modules/$version/ > > ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build > > diff --git a/scripts/package/install-extmod-build b/scripts/package/install-extmod-build > > index d2c9cacecc0c..7ec1f061a519 100755 > > --- a/scripts/package/install-extmod-build > > +++ b/scripts/package/install-extmod-build > > @@ -44,13 +44,11 @@ mkdir -p "${destdir}" > > fi > > } | tar -c -f - -T - | tar -xf - -C "${destdir}" > > > > -# When ${CC} and ${HOSTCC} differ, we are likely cross-compiling. Rebuild host > > -# programs using ${CC}. This assumes CC=${CROSS_COMPILE}gcc, which is usually > > -# the case for package building. It does not cross-compile when CC=clang. > > +# When ${CC} and ${HOSTCC} differ, rebuild host programs using ${CC}. > > # > > # This caters to host programs that participate in Kbuild. objtool and > > # resolve_btfids are out of scope. > > -if [ "${CC}" != "${HOSTCC}" ] && is_enabled CONFIG_CC_CAN_LINK; then > > +if [ "${CC}" != "${HOSTCC}" ]; then > > echo "Rebuilding host programs with ${CC}..." > > > > cat <<-'EOF' > "${destdir}/Kbuild" > > diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian > > index 10637d403777..93eb50356ddb 100755 > > --- a/scripts/package/mkdebian > > +++ b/scripts/package/mkdebian > > @@ -179,6 +179,8 @@ fi > > > > echo $debarch > debian/arch > > > > +host_gnu=$(dpkg-architecture -a "${debarch}" -q DEB_HOST_GNU_TYPE | sed 's/_/-/g') > > + > > # Generate a simple changelog template > > cat <<EOF > debian/changelog > > $sourcename ($packageversion) $distribution; urgency=low > > @@ -196,7 +198,11 @@ Priority: optional > > Maintainer: $maintainer > > Rules-Requires-Root: no > > Build-Depends: debhelper-compat (= 12) > > -Build-Depends-Arch: bc, bison, cpio, flex, kmod, libelf-dev:native, libssl-dev:native, rsync > > +Build-Depends-Arch: bc, bison, cpio, flex, > > + gcc-${host_gnu} <!pkg.${sourcename}.nokernelheaders>, > > + kmod, libelf-dev:native, > > + libssl-dev:native, libssl-dev <!pkg.${sourcename}.nokernelheaders>, > > + rsync > > Homepage: https://www.kernel.org/ > > > > Package: $packagename-$version > > @@ -224,6 +230,7 @@ cat <<EOF >> debian/control > > > > Package: linux-headers-$version > > Architecture: $debarch > > +Build-Profiles: <!pkg.${sourcename}.nokernelheaders> > > Description: Linux kernel headers for $version on $debarch > > This package provides kernel header files for $version on $debarch > > . > > Tested with option 2 for RISC-V. On Ubuntu 24.04, the following must be > added to the file /etc/apt/sources.list.d/ubuntu.sources for apt update > to fetch the correct repositories: > > Types: deb > URIs: http://ports.ubuntu.com/ubuntu-ports > Suites: noble noble-updates noble-backports > Components: main universe restricted multiverse > Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg > Architectures: riscv64 Right, this is an annoyance of Ubuntu. x86 and non-x86 architectures use different repositories. > > Then: > > sudo dpkg --add-architecture riscv64 > sudo apt-get update > sudo apt-get install libssl-dev:riscv64 > > The tool chain at https://github.com/riscv-collab/riscv-gnu-toolchain > can also be made to work. See: > > https://github.com/riscv-collab/riscv-gnu-toolchain/issues/1590 You can use any toolchain. The linux-headers package is rebuilt with riscv64-linux-gnu-gcc, not your own toolchain. > Tested-by: Ron Economos <re@w6rz.net> > > -- Best Regards Masahiro Yamada ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/3] kbuild: deb-pkg: add pkg.linux-upstream.nokernelheaders build profile 2024-10-22 18:16 ` [PATCH 2/3] kbuild: deb-pkg: add pkg.linux-upstream.nokernelheaders build profile Masahiro Yamada 2024-10-23 13:06 ` Ron Economos @ 2024-10-23 15:38 ` Nicolas Schier 2024-11-06 19:18 ` Matt Fleming 1 sibling, 1 reply; 10+ messages in thread From: Nicolas Schier @ 2024-10-23 15:38 UTC (permalink / raw) To: Masahiro Yamada Cc: linux-kbuild, Ben Hutchings, Ron Economos, Bill Wendling, Justin Stitt, Nathan Chancellor, Nick Desaulniers, linux-kernel, llvm On Wed, Oct 23, 2024 at 03:16:58AM +0900 Masahiro Yamada wrote: > Since commit f1d87664b82a ("kbuild: cross-compile linux-headers package > when possible"), 'make bindeb-pkg' may attempt to cross-compile the > linux-headers package, but it fails under certain circumstances. > > For example, when CONFIG_MODULE_SIG_FORMAT is enabled on Debian, the > following command fails: > > $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bindeb-pkg > [ snip ] > Rebuilding host programs with aarch64-linux-gnu-gcc... > HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/kallsyms > HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/sorttable > HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/asn1_compiler > HOSTCC debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/sign-file > In file included from /usr/include/openssl/opensslv.h:109, > from debian/linux-headers-6.12.0-rc4/usr/src/linux-headers-6.12.0-rc4/scripts/sign-file.c:25: > /usr/include/openssl/macros.h:14:10: fatal error: openssl/opensslconf.h: No such file or directory > 14 | #include <openssl/opensslconf.h> > | ^~~~~~~~~~~~~~~~~~~~~~~ > compilation terminated. > > This commit adds a new profile, pkg.linux-upstream.nokernelheaders, to > guard the linux-headers package. > > There are two options to fix the above issue. > > [option 1] Set the pkg.linux-upstream.nokernelheaders build profile > > $ DEB_BUILD_PROFILES=pkg.linux-upstream.nokernelheaders \ > make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bindeb-pkg > > This skips the building of the linux-headers package. > > [option 2] Install the necessary build dependencies > > If you want to cross-compile the linux-headers package, you need to > install additional packages. This is a one-time installation step. > > For example, on Debian, the packages necessary for cross-compiling it > to arm64 can be installed with the following commands: > > # dpkg --add-architecture arm64 > # apt update > # apt install gcc-aarch64-linux-gnu libssl-dev:arm64 > > Fixes: f1d87664b82a ("kbuild: cross-compile linux-headers package when possible") > Reported-by: Ron Economos <re@w6rz.net> > Closes: https://lore.kernel.org/all/b3d4f49e-7ddb-29ba-0967-689232329b53@w6rz.net/ > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > --- > > scripts/package/builddeb | 2 +- > scripts/package/install-extmod-build | 6 ++---- > scripts/package/mkdebian | 9 ++++++++- > 3 files changed, 11 insertions(+), 6 deletions(-) Nice solution and thanks for also documenting option 2. Reviewed-by: Nicolas Schier <nicolas@fjasle.eu> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/3] kbuild: deb-pkg: add pkg.linux-upstream.nokernelheaders build profile 2024-10-23 15:38 ` Nicolas Schier @ 2024-11-06 19:18 ` Matt Fleming 2024-11-09 21:53 ` Masahiro Yamada 0 siblings, 1 reply; 10+ messages in thread From: Matt Fleming @ 2024-11-06 19:18 UTC (permalink / raw) To: nicolas Cc: benh, justinstitt, linux-kbuild, linux-kernel, llvm, masahiroy, morbo, nathan, ndesaulniers, re, kernel-team Hey there, Can you explain how this change works a bit more? This reads like it's now impossible to build the debian linux-headers package with clang? At Cloudflare, we're using a custom build of gcc, not the gcc-x86-64-linux-gnu package, and with this change we can no longer build linux-headers. What's the solution for those of us that want to build the linux-headers deb package but can't install gcc-*-linux-gnu? ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/3] kbuild: deb-pkg: add pkg.linux-upstream.nokernelheaders build profile 2024-11-06 19:18 ` Matt Fleming @ 2024-11-09 21:53 ` Masahiro Yamada 0 siblings, 0 replies; 10+ messages in thread From: Masahiro Yamada @ 2024-11-09 21:53 UTC (permalink / raw) To: Matt Fleming Cc: nicolas, benh, justinstitt, linux-kbuild, linux-kernel, llvm, morbo, nathan, ndesaulniers, re, kernel-team On Thu, Nov 7, 2024 at 4:18 AM Matt Fleming <matt@readmodwrite.com> wrote: > > > Hey there, > > Can you explain how this change works a bit more? This reads like it's now > impossible to build the debian linux-headers package with clang? At Cloudflare, > we're using a custom build of gcc, not the gcc-x86-64-linux-gnu package, and > with this change we can no longer build linux-headers. You need to install the gcc-x86-64-linux-gnu package. This is available on both Debian and Ubuntu. Adding the prefix is required to reliably produce the correct linux-headers package. For example, when building a linux-headers package for i386 on amd64, userspace tools must be recompiled with 'i686-linux-gnu-gcc'. > What's the solution for those of us that want to build the linux-headers deb > package but can't install gcc-*-linux-gnu? DPKG_FLAGS=-d will skip the build dependency check, but 'x86_64-linux-gnu-gcc' is still required. If only clang is available on your system, you need a workaround, e.g. ln -s clang ~/bin/x86_64-linux-gnu-gcc Anyway, you need to find a solution. -- Best Regards Masahiro Yamada ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 3/3] kbuild: deb-pkg: add pkg.linux-upstream.nokerneldbg build profile 2024-10-22 18:16 [PATCH 1/3] kbuild: rpm-pkg: disable kernel-devel package when cross-compiling Masahiro Yamada 2024-10-22 18:16 ` [PATCH 2/3] kbuild: deb-pkg: add pkg.linux-upstream.nokernelheaders build profile Masahiro Yamada @ 2024-10-22 18:16 ` Masahiro Yamada 2024-10-23 15:39 ` Nicolas Schier 2024-10-27 18:35 ` [PATCH 1/3] kbuild: rpm-pkg: disable kernel-devel package when cross-compiling Nathan Chancellor 2 siblings, 1 reply; 10+ messages in thread From: Masahiro Yamada @ 2024-10-22 18:16 UTC (permalink / raw) To: linux-kbuild Cc: Ben Hutchings, Ron Economos, Masahiro Yamada, Nathan Chancellor, Nicolas Schier, linux-kernel The Debian kernel supports the pkg.linux.nokerneldbg build profile. The debug package tends to be huge, and you may not want to build it even when CONFIG_DEBUG_INFO is enabled. This commit introduces a similar profile for the upstream kernel. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- scripts/package/mkdebian | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian index 93eb50356ddb..fc3b7fa709fc 100755 --- a/scripts/package/mkdebian +++ b/scripts/package/mkdebian @@ -245,6 +245,7 @@ cat <<EOF >> debian/control Package: linux-image-$version-dbg Section: debug Architecture: $debarch +Build-Profiles: <!pkg.${sourcename}.nokerneldbg> Description: Linux kernel debugging symbols for $version This package will come in handy if you need to debug the kernel. It provides all the necessary debug symbols for the kernel and its modules. -- 2.43.0 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 3/3] kbuild: deb-pkg: add pkg.linux-upstream.nokerneldbg build profile 2024-10-22 18:16 ` [PATCH 3/3] kbuild: deb-pkg: add pkg.linux-upstream.nokerneldbg " Masahiro Yamada @ 2024-10-23 15:39 ` Nicolas Schier 0 siblings, 0 replies; 10+ messages in thread From: Nicolas Schier @ 2024-10-23 15:39 UTC (permalink / raw) To: Masahiro Yamada Cc: linux-kbuild, Ben Hutchings, Ron Economos, Nathan Chancellor, linux-kernel On Wed, Oct 23, 2024 at 03:16:59AM +0900 Masahiro Yamada wrote: > The Debian kernel supports the pkg.linux.nokerneldbg build profile. > > The debug package tends to be huge, and you may not want to build it > even when CONFIG_DEBUG_INFO is enabled. This commit introduces a > similar profile for the upstream kernel. > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > --- > > scripts/package/mkdebian | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian > index 93eb50356ddb..fc3b7fa709fc 100755 > --- a/scripts/package/mkdebian > +++ b/scripts/package/mkdebian > @@ -245,6 +245,7 @@ cat <<EOF >> debian/control > Package: linux-image-$version-dbg > Section: debug > Architecture: $debarch > +Build-Profiles: <!pkg.${sourcename}.nokerneldbg> > Description: Linux kernel debugging symbols for $version > This package will come in handy if you need to debug the kernel. It provides > all the necessary debug symbols for the kernel and its modules. > -- > 2.43.0 > > Reviewed-by: Nicolas Schier <nicolas@fjasle.eu> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/3] kbuild: rpm-pkg: disable kernel-devel package when cross-compiling 2024-10-22 18:16 [PATCH 1/3] kbuild: rpm-pkg: disable kernel-devel package when cross-compiling Masahiro Yamada 2024-10-22 18:16 ` [PATCH 2/3] kbuild: deb-pkg: add pkg.linux-upstream.nokernelheaders build profile Masahiro Yamada 2024-10-22 18:16 ` [PATCH 3/3] kbuild: deb-pkg: add pkg.linux-upstream.nokerneldbg " Masahiro Yamada @ 2024-10-27 18:35 ` Nathan Chancellor 2 siblings, 0 replies; 10+ messages in thread From: Nathan Chancellor @ 2024-10-27 18:35 UTC (permalink / raw) To: Masahiro Yamada Cc: linux-kbuild, Ben Hutchings, Ron Economos, Nicolas Schier, linux-kernel 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 > ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2024-11-09 21:54 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-10-22 18:16 [PATCH 1/3] kbuild: rpm-pkg: disable kernel-devel package when cross-compiling Masahiro Yamada 2024-10-22 18:16 ` [PATCH 2/3] kbuild: deb-pkg: add pkg.linux-upstream.nokernelheaders build profile Masahiro Yamada 2024-10-23 13:06 ` Ron Economos 2024-10-23 14:28 ` Masahiro Yamada 2024-10-23 15:38 ` Nicolas Schier 2024-11-06 19:18 ` Matt Fleming 2024-11-09 21:53 ` Masahiro Yamada 2024-10-22 18:16 ` [PATCH 3/3] kbuild: deb-pkg: add pkg.linux-upstream.nokerneldbg " Masahiro Yamada 2024-10-23 15:39 ` Nicolas Schier 2024-10-27 18:35 ` [PATCH 1/3] kbuild: rpm-pkg: disable kernel-devel package when cross-compiling Nathan Chancellor
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox