pmaports/main/kernel-scripts/APKBUILD
Oliver Smith 6aba5f73d4 Package kernel-scripts separately (#1234)
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.

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.

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.
2018-02-16 22:00:37 +01:00

62 lines
1.5 KiB
Text

pkgname=kernel-scripts
pkgver=4.15.0
pkgrel=0
pkgdesc="Binary scripts needed to build kernel packages"
url="http://kernel.org"
depends=""
makedepends="perl gmp-dev elfutils-dev bash sed bc linux-headers file openssl-dev"
options="!check"
arch="all"
license="GPL-2.0"
# Sources
case $pkgver in
*.*.*) _kernver=${pkgver%.*};;
*.*) _kernver=$pkgver;;
esac
source="https://cdn.kernel.org/pub/linux/kernel/v${pkgver%%.*}.x/linux-$_kernver.tar.xz"
if [ "${pkgver%.0}" = "$pkgver" ]; then
source="$source
https://cdn.kernel.org/pub/linux/kernel/v${pkgver%%.*}.x/patch-$pkgver.xz"
fi
# Arch
_carch=${CARCH}
case "$_carch" in
aarch64*) _carch="arm64" ;;
arm*) _carch="arm" ;;
mips*) _carch="mips" ;;
ppc*) _carch="powerpc" ;;
s390*) _carch="s390" ;;
esac
builddir="$srcdir/linux-$_kernver"
prepare() {
cd "$builddir"
# Apply patch
if [ "$_kernver" != "$pkgver" ]; then
msg "Applying patch-$pkgver.xz"
unxz -c < "$srcdir"/patch-$pkgver.xz | patch -p1 -N
fi
}
build() {
unset LDFLAGS
mkdir -p "$srcdir/build"
make -j1 -C "$builddir" O="$srcdir/build" ARCH="$_carch" \
HOSTCC="${CC:-gcc}" defconfig scripts
}
package() {
cd "$srcdir/build/scripts"
msg "Finding and installing binaries..."
local i
for i in $(find . -type f); do
local type="$(file -b --mime-type "$i")"
[ "$type" != "application/x-sharedlib" ] && continue
echo "$i"
install -Dm755 "$i" "$pkgdir/usr/bin/kernel-scripts/$i"
done
}
sha512sums="c00d92659df815a53dcac7dde145b742b1f20867d380c07cb09ddb3295d6ff10f8931b21ef0b09d7156923a3957b39d74d87c883300173b2e20690d2b4ec35ea linux-4.15.tar.xz"