Skip to content

Package kernel-scripts separately to fix cross-compiled linux-*-dev packages

postmarketOS Bot requested to merge fix/1230-linux-dev-cross into master

Created by: ollieparanoid

Background

We have two methods of cross-compiling:

  • native: everything runs with the host architecture, QEMU is not involved. This is the fastest, but requires the build system to be working with it. We use this for all linux-* packages currently.
  • distcc: everything runs through QEMU emulating the target arch, except for the compiler. This is the most compatible approach working with all packages.

When compiling linux-* packages natively, kernel scripts needed during the build process get generated. Some of these are C files that get compiled as executables. In native mode, these get compied to the native architecture, in distcc mode to the target architecture.

Problem

The problem is, that we need these scripts compiled for the target architecture in the kernel's dev package in order to compile kernel modules outside of the kernel's package (e.g. wireguard).

It is not possible to just rewrite this logic to generate target-arch binaries when running in native mode, because these binaries require musl-dev, linux-headers and some other packages to be installed for the target architecture inside the native chroot.

Proposed solution

We solve this by introducing a new kernel-scripts package. which contains just the binary scripts. In case the dev package was cross-compiled, it depends on kernel-scripts and symlinks these binaries. The kernel-scripts package always gets compiled in distcc mode since it does not have a linux- prefix.

Fixes #1230 (closed).

@MartijnBraam: Please review and test if you can compile the wireguard kernel module with this PR's generated dev and kernel-scripts packages. (Make sure the dev package really comes from this PR, e.g. by checking the version number, and making sure that it depends on kernel-scripts).

Merge request reports