File PKGBUILD of Package linux-sdm845
# Maintainer: Maximilian Luz <luzmaximilian@gmail.com>
#
# Based on Arch Linux and Arch Linux for ARM PKGBUILDs
pkgbase="linux-sdm845"
pkgver="6.16.0"
pkgrel="1"
_pkgdesc="Kernel for sdm845 (development version)"
arch=('aarch64')
options=("!strip")
makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc' 'git' 'dtc')
options=('!strip')
_tag="sdm845-6.16-rc2-4"
_srcname="linux-${_tag}"
source=("linux-${_tag}.tar.gz::https://gitlab.com/sdm845-mainline/linux/-/archive/${_tag}/linux-${_tag}.tar.gz"
'config-postmarketos-qcom-sdm845.aarch64'
'linux.preset'
'60-linux.hook'
'90-linux.hook')
b2sums=('6aba6d4893a8383d914043ff8480d80daffc444f6b51f91f56471db7242c8688bdcc1071245ee1a4cd2e1bec7bbe20c33919a4d77cc643416dd9120ea66c0b8a'
'cdc76b6350695999ee26e423a77acc7ecc8b2202beff9237937be861092b589874ee107fa5f89cc788da2dc803133a359c4451be565d0f8047e41b284903b693'
'6ba61eb6e7a2ff64bb194f5d00c6fecfceff56d1e70fefba2781fcb12eb6043ab928202f36a4ad0a3ac3673009940901a990e0d6d339c78862cf560762f23d54'
'40e2e0ac9eec9f9c08593875ca5bb8a26f835e33ae42e3718b98e83d76bbbc51a68395215c707fe58269954127261f7f8d12ec47341d28c672de973f3c4e71e8'
'f39994fda3d76407b0af192534ca9931782b3e9de4e438a3adbc7640fc794c261102e5c7bfa1523c291ef8c7256c1106e6dbd40814006329c48d90f51c569e82')
prepare() {
cd "${srcdir}/linux-${_tag}"
msg2 "Setting version..."
echo "" > ".scmversion" # ignore uncommitted changes
# ./scripts/setlocalversion --save-scmversion # alternative: include git tag / dirty flag
echo "-${pkgrel}" > "localversion.10-pkgrel"
echo "" > "localversion.20-pkgname"
msg2 "Configuring..."
cp ${srcdir}/config-postmarketos-qcom-sdm845.aarch64 ./.config
# make ARCH=arm64 defconfig sdm845.config
}
build() {
cd "${srcdir}/linux-${_tag}"
# get kernel version
msg2 "Preparing kernel build..."
make prepare
make -s kernelrelease > version
# build kernel
msg2 "Building ${pkgbase} version $(<version)..."
unset LDFLAGS
unset CFLAGS
make all modules dtbs
}
_package() {
pkgdesc="${_pkgdesc} kernel and modules"
depends=("coreutils" "linux-firmware" "kmod" "mkinitcpio>=0.7")
optdepends=("crda: to set the correct wireless channels of your country")
install="${pkgbase}.install"
cd "${srcdir}/linux-${_tag}"
local kernver="$(<version)"
local modulesdir="${pkgdir}/usr/lib/modules/${kernver}"
local image_name="$(make -s image_name)"
msg2 "Installing boot image..."
# systemd expects to find the kernel here to allow hibernation
# https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344
# install -Dm644 "$(make -s image_name)" "${modulesdir}/vmlinuz"
install -Dm644 arch/arm64/boot/vmlinuz "${modulesdir}/vmlinuz"
# Used by mkinitcpio to name the kernel
echo "${pkgbase}" | install -Dm644 /dev/stdin "${modulesdir}/pkgbase"
msg2 "Installing modules..."
make INSTALL_MOD_PATH="${pkgdir}/usr" INSTALL_MOD_STRIP=1 modules_install
# remove build links
rm "${modulesdir}"/build
msg2 "Installing dtbs..."
make INSTALL_DTBS_PATH="${modulesdir}/dtb" dtbs_install
# mkdir -p "${pkgdir}/boot/dtb" && cp -r "${modulesdir}/dtb" "${pkgdir}/boot/dtb/${pkgbase}"
mkdir -p "${pkgdir}/boot/dtbs" && cp -r ${modulesdir}/dtb/* "${pkgdir}/boot/dtbs/"
msg2 "Installing mkinitcpio preset..."
# 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"
}
_package-headers() {
pkgdesc="${_pkgdesc} kernel header files and scripts for building external modules"
provide="linux-headers"
cd "${srcdir}/linux-${_tag}"
local builddir="${pkgdir}/usr/lib/modules/$(<version)/build"
msg2 "Installing build files..."
install -Dt "${builddir}" -m644 ".config" "Makefile" "Module.symvers" "System.map" \
"localversion.10-pkgrel" "localversion.20-pkgname" "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}
msg2 "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
msg2 "Installing KConfig files..."
find . -name 'Kconfig*' -exec install -Dm644 {} "${builddir}/{}" \;
msg2 "Removing unneeded architectures..."
local arch
for arch in "${builddir}"/arch/*/; do
[[ ${arch} = */arm64/ ]] && continue
echo "Removing $(basename "${arch}")"
rm -r "${arch}"
done
msg2 "Removing documentation..."
rm -r "${builddir}/Documentation"
msg2 "Removing broken symlinks..."
find -L "${builddir}" -type l -printf 'Removing %P\n' -delete
msg2 "Removing loose objects..."
find "${builddir}" -type f -name '*.o' -printf 'Removing %P\n' -delete
msg2 "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}"
}
# dynamically define package functions
pkgname=("${pkgbase}" "${pkgbase}-headers")
for _p in "${pkgname[@]}"; do
eval "package_${_p}() {
$(declare -f "_package${_p#${pkgbase}}")
_package${_p#${pkgbase}}
}"
done