PKGBUILDs/core/linux-aarch64/PKGBUILD
Bjorn Andersson c00b186f61 core/linux-aarch64: Enable Qualcomm 8cx Gen3 options
This brings in necessary config options from the upstream defconfig to
enable devices such as Lenovo Thinkpad X13s to work out of the box.

Specifically CAMCC, DISPCC, GPUCC, and LPASSCC are brought in to provide
clocks to camera, display, gpu, and audio functions.

The pmic_glink and GPIO SBU mux provides the necessary dependencies for
display to show up.

Together with the Qualcomm battery manager, pmic_glink, provides battery
status.

The LPASS pinctrl and WSA883x drivers provides the missing pieces for
audio.

The QSEECOM and UEFI secapp, provides EFI variable access.

Lastly the SPMI SDAM driver provides persistent storage of RTC offset
from the read-only RTC found in the PMIC.

EDIT BY GRAYSKY: fixup config

Signed-off-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
2024-10-24 15:15:39 -04:00

233 lines
7.6 KiB
Bash

# / AArch64 multi-platform
# Maintainer: Kevin Mihelich <kevin@archlinuxarm.org>
# Maintainer: graysky <therealgraysky AT proton DOT me>
buildarch=8
pkgbase=linux-aarch64
_srcname=linux-6.11
_kernelname=${pkgbase#linux}
_desc="AArch64 multi-platform"
pkgver=6.11.5
pkgrel=1
arch=('aarch64')
url="http://www.kernel.org/"
license=('GPL2')
makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc' 'git' 'uboot-tools' 'vboot-utils' 'dtc')
options=('!strip')
source=("http://www.kernel.org/pub/linux/kernel/v6.x/${_srcname}.tar.xz"
"http://www.kernel.org/pub/linux/kernel/v6.x/patch-${pkgver}.xz"
'0001-net-smsc95xx-Allow-mac-address-to-be-set-as-a-parame.patch'
'0002-arm64-dts-rockchip-disable-pwm0-on-rk3399-firefly.patch'
'0003-pps-Compatibility-hack-should-be-X86-specific.patch'
'config'
'generate_chromebook_its.sh'
'kernel.keyblock'
'kernel_data_key.vbprivk'
'linux.preset')
md5sums=('612a9feef07be8663098a0a58cddf7a6'
'4fc8e83d507486c28ca1a27f1856dd21'
'7862339da94da0b7958e61e2210760a7'
'c064a0a49f4ed7d487d482ca73c75178'
'416b7c6ef37cc0edb6cb67cf618360f5'
'e89a0ef41d1c22b725f20ab0713fefd2'
'7c97cf141750ad810235b1ad06eb9f75'
'61c5ff73c136ed07a7aadbf58db3d96a'
'584777ae88bce2c5659960151b64c7d8'
'33ba82001fca579d43172a6db25d6aca')
prepare() {
cd $_srcname
echo "Setting version..."
echo "-$pkgrel" > localversion.10-pkgrel
echo "${pkgbase#linux}" > localversion.20-pkgname
# add upstream patch
git apply --whitespace=nowarn ../patch-${pkgver}
# ALARM patches
git apply ../0001-net-smsc95xx-Allow-mac-address-to-be-set-as-a-parame.patch
git apply ../0002-arm64-dts-rockchip-disable-pwm0-on-rk3399-firefly.patch
git apply ../0003-pps-Compatibility-hack-should-be-X86-specific.patch
cat "${srcdir}/config" > ./.config
}
build() {
cd ${_srcname}
# get kernel version
make prepare
make -s kernelrelease > version
# build!
unset LDFLAGS
make ${MAKEFLAGS} Image Image.gz modules
# Generate device tree blobs with symbols to support applying device tree overlays in U-Boot
make ${MAKEFLAGS} DTC_FLAGS="-@" dtbs
}
_package() {
pkgdesc="The Linux Kernel and modules - ${_desc}"
depends=('coreutils' 'linux-firmware' 'kmod' 'mkinitcpio>=0.7')
optdepends=('wireless-regdb: to set the correct wireless channels of your country')
provides=("linux=${pkgver}" "KSMBD-MODULE" "WIREGUARD-MODULE")
conflicts=('linux')
install=${pkgname}.install
cd $_srcname
local kernver="$(<version)"
local modulesdir="$pkgdir/usr/lib/modules/$kernver"
echo "Installing boot image and dtbs..."
install -Dm644 arch/arm64/boot/Image{,.gz} -t "${pkgdir}/boot"
make INSTALL_DTBS_PATH="${pkgdir}/boot/dtbs" dtbs_install
echo "Installing modules..."
make INSTALL_MOD_PATH="$pkgdir/usr" INSTALL_MOD_STRIP=1 DEPMOD=/doesnt/exist modules_install
# remove build link
rm "$modulesdir"/build
# sed expression for following substitutions
local _subst="
s|%PKGBASE%|${pkgbase}|g
s|%KERNVER%|${kernver}|g
"
# install mkinitcpio preset file
sed "${_subst}" ../linux.preset |
install -Dm644 /dev/stdin "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset"
# rather than use another hook (90-linux.hook) rely on mkinitcpio's 90-mkinitcpio-install.hook
# which avoids a double run of mkinitcpio that can occur
install -d "${pkgdir}/usr/lib/initcpio/"
echo "dummy file to trigger mkinitcpio to run" > "${pkgdir}/usr/lib/initcpio/$(<version)"
}
_package-headers() {
pkgdesc="Header files and scripts for building modules for linux kernel - ${_desc}"
provides=("linux-headers=${pkgver}")
conflicts=('linux-headers')
cd $_srcname
local builddir="$pkgdir/usr/lib/modules/$(<version)/build"
echo "Installing build files..."
install -Dt "$builddir" -m644 .config Makefile Module.symvers System.map \
localversion.* version vmlinux
install -Dt "$builddir/kernel" -m644 kernel/Makefile
install -Dt "$builddir/arch/arm64" -m644 arch/arm64/Makefile
cp -t "$builddir" -a scripts
# add xfs and shmem for aufs building
mkdir -p "$builddir"/{fs/xfs,mm}
echo "Installing headers..."
cp -t "$builddir" -a include
cp -t "$builddir/arch/arm64" -a arch/arm64/include
install -Dt "$builddir/arch/arm64/kernel" -m644 arch/arm64/kernel/asm-offsets.s
mkdir -p "$builddir/arch/arm"
cp -t "$builddir/arch/arm" -a arch/arm/include
install -Dt "$builddir/drivers/md" -m644 drivers/md/*.h
install -Dt "$builddir/net/mac80211" -m644 net/mac80211/*.h
# https://bugs.archlinux.org/task/13146
install -Dt "$builddir/drivers/media/i2c" -m644 drivers/media/i2c/msp3400-driver.h
# https://bugs.archlinux.org/task/20402
install -Dt "$builddir/drivers/media/usb/dvb-usb" -m644 drivers/media/usb/dvb-usb/*.h
install -Dt "$builddir/drivers/media/dvb-frontends" -m644 drivers/media/dvb-frontends/*.h
install -Dt "$builddir/drivers/media/tuners" -m644 drivers/media/tuners/*.h
# https://bugs.archlinux.org/task/71392
install -Dt "$builddir/drivers/iio/common/hid-sensors" -m644 drivers/iio/common/hid-sensors/*.h
echo "Installing KConfig files..."
find . -name 'Kconfig*' -exec install -Dm644 {} "$builddir/{}" \;
echo "Removing unneeded architectures..."
local arch
for arch in "$builddir"/arch/*/; do
[[ $arch = */arm64/ || $arch == */arm/ ]] && continue
echo "Removing $(basename "$arch")"
rm -r "$arch"
done
echo "Removing documentation..."
rm -r "$builddir/Documentation"
echo "Removing broken symlinks..."
find -L "$builddir" -type l -printf 'Removing %P\n' -delete
echo "Removing loose objects..."
find "$builddir" -type f -name '*.o' -printf 'Removing %P\n' -delete
echo "Stripping build tools..."
local file
while read -rd '' file; do
case "$(file -bi "$file")" in
application/x-sharedlib\;*) # Libraries (.so)
strip -v $STRIP_SHARED "$file" ;;
application/x-archive\;*) # Libraries (.a)
strip -v $STRIP_STATIC "$file" ;;
application/x-executable\;*) # Binaries
strip -v $STRIP_BINARIES "$file" ;;
application/x-pie-executable\;*) # Relocatable binaries
strip -v $STRIP_SHARED "$file" ;;
esac
done < <(find "$builddir" -type f -perm -u+x ! -name vmlinux -print0)
echo "Adding symlink..."
mkdir -p "$pkgdir/usr/src"
ln -sr "$builddir" "$pkgdir/usr/src/$pkgbase"
}
_package-chromebook() {
pkgdesc="The Linux Kernel - ${_desc} - Chromebooks"
depends=('linux-aarch64')
conflicts=('linux-aarch64-rc-chromebook')
install=${pkgname}.install
cd ${_srcname}
mkdir -p "${pkgdir}/boot"
image=arch/arm64/boot/Image
chromeos_boards=(
'elm'
'gru'
'kukui'
'trogdor'
'asurada'
)
chromebook_dtbs=($(for b in ${chromeos_boards[@]}; do find arch/arm64/boot -name "*${b}*.dtb" | LC_COLLATE=C sort; done))
lz4 -20 -z -f -m ${image}
echo ${chromebook_dtbs[@]} | ../generate_chromebook_its.sh ${image}.lz4 arm64 lz4 > kernel.its
mkimage -D "-I dts -O dtb -p 2048" -f kernel.its vmlinux.uimg
dd if=/dev/zero of=bootloader.bin bs=512 count=1
echo "console=tty0 console=ttyS2,115200n8 earlyprintk=ttyS2,115200n8 console=ttyMSM0,115200n8 init=/sbin/init root=PARTUUID=%U/PARTNROFF=1 rootwait rw noinitrd" > cmdline
vbutil_kernel \
--pack vmlinux.kpart \
--version 1 \
--vmlinuz vmlinux.uimg \
--arch aarch64 \
--keyblock ../kernel.keyblock \
--signprivate ../kernel_data_key.vbprivk \
--config cmdline \
--bootloader bootloader.bin
cp vmlinux.kpart "${pkgdir}/boot"
}
pkgname=("${pkgbase}" "${pkgbase}-headers" "${pkgbase}-chromebook")
for _p in ${pkgname[@]}; do
eval "package_${_p}() {
_package${_p#${pkgbase}}
}"
done