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
openSUSE Build Service is sponsored by