a9bca26633
When cross compiling, the kernel scripts would be in the native arch again. That was already fixed in !1234, however the mime type of the binaries has changed, so we couldn't detect them properly anymore (#1659). This commit fixes it again, and also adds a checks so this won't silently fail in the future. [skip ci] because this would not run through anyway (building these packages takes too long). Fixes #1659.
185 lines
5.3 KiB
Text
185 lines
5.3 KiB
Text
_flavor=postmarketos-qcom
|
|
_config="config-${_flavor}.${CARCH}"
|
|
|
|
pkgname=linux-${_flavor}
|
|
|
|
pkgver=4.17_rc3
|
|
pkgrel=5
|
|
|
|
arch="armhf"
|
|
pkgdesc="Kernel close to mainline with extra patches for Qualcomm devices"
|
|
url="https://kernel.org/"
|
|
depends=""
|
|
makedepends="dtbtool perl sed installkernel bash gmp-dev bc linux-headers elfutils-dev libressl-dev file bison flex"
|
|
options="!strip !check !tracedeps"
|
|
install=
|
|
_commit="09efb4857f1a4119eced855912043817bd96e064"
|
|
source="
|
|
linux-${_commit}.tar.gz::https://gitlab.com/postmarketOS/linux-postmarketos/-/archive/${_commit}/linux-postmarketos-${_commit}.tar.gz
|
|
config-${_flavor}.armhf
|
|
"
|
|
|
|
subpackages="$pkgname-dev"
|
|
|
|
license="GPL2"
|
|
_abi_release=$_pkgver
|
|
_carch=${CARCH}
|
|
case "$_carch" in
|
|
aarch64*) _carch="arm64" ;;
|
|
arm*) _carch="arm" ;;
|
|
ppc*) _carch="powerpc" ;;
|
|
s390*) _carch="s390" ;;
|
|
esac
|
|
|
|
HOSTCC="${CC:-gcc}"
|
|
HOSTCC="${HOSTCC#${CROSS_COMPILE}}"
|
|
|
|
builddir="$srcdir/linux-postmarketos-${_commit}"
|
|
|
|
prepare() {
|
|
local _patch_failed=
|
|
ls "$srcdir"
|
|
cd "$builddir"
|
|
# first apply patches in specified order
|
|
for i in $source; do
|
|
case $i in
|
|
*.patch|*.patch::*)
|
|
_patch=${i%::*}
|
|
msg "Applying $_patch..."
|
|
if ! patch -s -p1 -N -i "$srcdir"/$_patch; then
|
|
echo $_patch >>failed
|
|
_patch_failed=1
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if ! [ -z "$_patch_failed" ]; then
|
|
error "The following patches failed:"
|
|
cat failed
|
|
return 1
|
|
fi
|
|
|
|
mkdir -p "$srcdir"/build
|
|
cp -v "$srcdir"/$_config "$srcdir"/build/.config
|
|
make -C "$builddir" O="$srcdir"/build ARCH="$_carch" HOSTCC="$HOSTCC" \
|
|
olddefconfig
|
|
}
|
|
|
|
build() {
|
|
cd "$srcdir"/build
|
|
unset LDFLAGS
|
|
make ARCH="$_carch" CC="${CC:-gcc}" \
|
|
KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-${_flavor}" \
|
|
CFLAGS_MODULE=-fno-pic
|
|
|
|
dtbTool -s 2048 -p scripts/dtc/ -o arch/arm/boot/dt.img arch/arm/boot/dts --version=2
|
|
}
|
|
|
|
package() {
|
|
cd "$srcdir/build/arch/${_carch}/boot"
|
|
|
|
if [ "$CARCH" == "aarch64" ]; then
|
|
install -Dm644 "$srcdir/build/arch/${_carch}/boot/Image" \
|
|
"$pkgdir/boot/vmlinuz-$_flavor"
|
|
else
|
|
install -Dm644 "$srcdir/build/arch/${_carch}/boot/"*zImage \
|
|
"$pkgdir/boot/vmlinuz-$_flavor"
|
|
fi
|
|
|
|
install -D "$srcdir/build/include/config/kernel.release" \
|
|
"$pkgdir/usr/share/kernel/$_flavor/kernel.release"
|
|
|
|
install -Dm644 "$srcdir/build/arch/arm/boot/dt.img" \
|
|
"$pkgdir/boot/dt.img"
|
|
|
|
cd "$srcdir"/build
|
|
|
|
local _install
|
|
case "$CARCH" in
|
|
aarch64*|arm*) _install="modules_install dtbs_install" ;;
|
|
*) _install="modules_install" ;;
|
|
esac
|
|
|
|
make -j1 $_install \
|
|
ARCH="$_carch" \
|
|
INSTALL_MOD_PATH="$pkgdir" \
|
|
INSTALL_DTBS_PATH="$pkgdir/usr/share/dtb"
|
|
}
|
|
|
|
|
|
dev() {
|
|
# copy the only the parts that we really need for build 3rd party
|
|
# kernel modules and install those as /usr/src/linux-headers,
|
|
# simlar to what ubuntu does
|
|
#
|
|
# this way you dont need to install the 300-400 kernel sources to
|
|
# build a tiny kernel module
|
|
#
|
|
pkgdesc="Headers and script for third party modules for postmarketos kernel"
|
|
depends="gmp-dev bash perl"
|
|
local dir="$subpkgdir"/usr/src/linux-headers-${_abi_release}
|
|
|
|
# first we import config, run prepare to set up for building
|
|
# external modules, and create the scripts
|
|
mkdir -p "$dir"
|
|
cp "$srcdir"/$_config "$dir"/.config
|
|
make -j1 -C "$builddir" O="$dir" ARCH="$_carch" HOSTCC="$HOSTCC" \
|
|
olddefconfig prepare modules_prepare scripts
|
|
|
|
# needed for 3rd party modules
|
|
# https://bugzilla.kernel.org/show_bug.cgi?id=11143
|
|
case "$CARCH" in
|
|
ppc*) (cd "$dir" && make arch/powerpc/lib/crtsavres.o);;
|
|
esac
|
|
|
|
# remove the stuff that points to real sources. we want 3rd party
|
|
# modules to believe this is the soruces
|
|
rm "$dir"/Makefile "$dir"/source
|
|
|
|
# copy the needed stuff from real sources
|
|
#
|
|
# this is taken from ubuntu kernel build script
|
|
# http://kernel.ubuntu.com/git/ubuntu/ubuntu-zesty.git/tree/debian/rules.d/3-binary-indep.mk
|
|
|
|
cd "$builddir"
|
|
find . -path './include/*' -prune \
|
|
-o -path './scripts/*' -prune -o -type f \
|
|
\( -name 'Makefile*' -o -name 'Kconfig*' -o -name 'Kbuild*' -o \
|
|
-name '*.sh' -o -name '*.pl' -o -name '*.lds' \) \
|
|
-print | cpio -pdm "$dir"
|
|
cp -a scripts include "$dir"
|
|
find $(find arch -name include -type d -print) -type f \
|
|
| cpio -pdm "$dir"
|
|
|
|
install -Dm644 "$srcdir"/build/Module.symvers \
|
|
"$dir"/Module.symvers
|
|
|
|
mkdir -p "$subpkgdir"/lib/modules/${_abi_release}
|
|
ln -sf /usr/src/linux-headers-${_abi_release} \
|
|
"$subpkgdir"/lib/modules/${_abi_release}/build
|
|
|
|
# cross-compiling: delete binaries with host arch and replace them with
|
|
# symlinks to binaries with the target arch (packaged in kernel-scripts)
|
|
if [ -n "$CROSS_COMPILE" ]; then
|
|
msg "Symlinking binary scripts..."
|
|
depends="$depends kernel-scripts"
|
|
local found="false"
|
|
cd "$dir/scripts"
|
|
local i
|
|
for i in $(find . -type f); do
|
|
local type="$(file -b --mime-type "$i")"
|
|
[ "$type" != "application/x-pie-executable" ] && continue
|
|
local native="/usr/bin/kernel-scripts/$(echo "$i" | cut -d '/' -f 2-)"
|
|
ln -svf "$native" "$i"
|
|
found="true"
|
|
done
|
|
if [ "$found" = "false" ]; then
|
|
error "Failed to symlink binary scripts!"
|
|
error "Did the mime-type change (see #1659)?"
|
|
return 1
|
|
fi
|
|
fi
|
|
}
|
|
sha512sums="02fd136d24914e30decd207c3b2e0168cc9d6e4a0fc981abf8d537cd95c70583f5239d0dc7f2ae94a2ddd2ba82d822933159167801a035731a24aa1300c5ceec linux-09efb4857f1a4119eced855912043817bd96e064.tar.gz
|
|
1961f051e2f4c3fad3fde69b08b277e3784a256115a8f30604e6b1973fd323e17ed9e5e55a3daf1a2d72770168d164ed060ff2a330d45d6cd6e3c59d4530d092 config-postmarketos-qcom.armhf"
|