# Maintainer: Markus Fritsche <mfritsche@reauktion.de>
#
# linux-ampere-fourier — CoolPi GenBook (RK3588) kernel from the
# marfrit-iterated linux-rk3588-marfrit branch (pinned commit).
#
# Baseline carries the marfrit RK3588 delta on top of mainline v7.0-rc3:
# 10 Markus commits (board DTS + Kconfig + suspend/wakeup + bluetooth)
# plus 8 upstream cherry-picks (Shawn Lin's pcie3 phy series, Collabora
# clk/dts/dw-dp fixes, Sebastian Reichel's Rock 5 ITX hdmirx). The 6
# board-relevant patches are scope-tagged in marfrit/kernel-agent under
# patches/{soc,module,board}/ — see fleet/ampere.yaml manifest.
#
# Coexists with the user's other extlinux labels in
# /boot/firmware/extlinux/extlinux.conf; never edits them. Adds a
# managed `linux-ampere-fourier` label (the user sets `default` manually
# after verifying boot).
#
# Bootloader path: /boot/firmware/ (vfat on mmcblk0p1). Kernel +
# initramfs + DTB land there directly. Reverting = boot a different
# extlinux label (e.g. arch_mainline, ubuntu_mainline).

pkgbase=linux-ampere-fourier
pkgname=("$pkgbase" "$pkgbase-headers")
pkgver=7.0rc3.kafr1
pkgrel=1
pkgdesc='CoolPi GenBook kernel (linux-rk3588-marfrit @ f8f3ad9 + RK3588 cherry-picks + GenBook DTS)'
arch=(aarch64)
url='https://git.reauktion.de/marfrit/kernel-agent'
license=(GPL-2.0-only)
makedepends=(
  bc cpio gettext kmod libelf pahole perl python tar xz
  ccache
  uboot-tools dtc
)
options=('!strip')

# Pinned tip of marfrit/linux-rk3588-marfrit. 18 commits ahead of v7.0-rc3:
#   10 by Markus Fritsche  (board/SoC/module/Bluetooth/Kconfig)
#    4 by Shawn Lin        (phy: rockchip-snps-pcie3 stability series)
#    2 by Cristian Ciocaltea (clk + dw-dp bridge — Collabora track)
#    1 by Sebastian Reichel (Rock 5 ITX hdmirx — not used by ampere)
#    1 by Pedro Alves      (CLK_SET_RATE_PARENT VOP2 fix)
_commit=f8f3ad934433bd7e1207d9b0b37e817a692b7ee9

source=(
  # Local tarball produced by ./prebuild.sh from a local clone of the
  # linux-rk3588-marfrit branch. Not fetched from a URL because the
  # boltzmann working clone is shallow (gitea push rejects) and the
  # 260MB tarball isn't committed to marfrit-packages. Run prebuild.sh
  # before makepkg; see README in this dir.
  "linux-rk3588-marfrit-${_commit:0:7}.tar.gz"
  'config'  # snapshot of running ampere kernel's /proc/config.gz (7.0.0-rc3-ARCH+)
  'linux-ampere-fourier.preset'
  'extlinux-add.hook'
  'extlinux-add.sh'
)
sha256sums=('SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP')

# kernelrelease becomes <Makefile-VERSION>.<PATCH>.<SUBLEVEL><EXTRAVERSION><LOCALVERSION>
# i.e. 7.0.0-rc3-ampere-fourier. Module dir + EXTRAVERSION suffix keep
# this disjoint from the hand-managed /boot/firmware/Image-7.0.0-rc3-ARCH+
# that's currently on the host.
_kernver=7.0.0-rc3-ampere-fourier
_srcdir=linux-rk3588-marfrit

prepare() {
  cd "${_srcdir}"

  echo ":: writing config"
  cp "${srcdir}/config" .config

  # LOCALVERSION suffix to differentiate from upstream-stock builds.
  scripts/config --set-str LOCALVERSION "-ampere-fourier"
  scripts/config -d LOCALVERSION_AUTO

  echo ":: olddefconfig (accept new symbols sensibly)"
  make olddefconfig

  make -s kernelrelease > version
  echo ":: kernel release: $(<version)"
}

build() {
  cd "${_srcdir}"
  unset LDFLAGS
  # Native build only — no distcc per kernel-agent policy
  # (feedback_kernel_agent_no_distcc.md). ccache stays.
  export CC="ccache gcc"
  export HOSTCC="ccache gcc"
  make ${MAKEFLAGS:--j$(nproc)} Image modules dtbs
}

_package() {
  pkgdesc='CoolPi GenBook overclocked kernel (ampere-fourier baseline)'
  depends=(coreutils kmod mkinitcpio uboot-tools)
  optdepends=('linux-firmware: firmware images needed for some devices')
  backup=("etc/mkinitcpio.d/${pkgbase}.preset")

  cd "${_srcdir}"
  local _kver
  _kver=$(<version)

  # Kernel image into the vfat firmware partition (where extlinux looks).
  install -Dm644 arch/arm64/boot/Image \
    "${pkgdir}/boot/firmware/Image-ampere-fourier"

  # Single DTB for the GenBook target — install directly under
  # /boot/firmware/ (no subdir, matches existing host convention).
  install -Dm644 arch/arm64/boot/dts/rockchip/rk3588-coolpi-cm5-genbook.dtb \
    "${pkgdir}/boot/firmware/rk3588-coolpi-cm5-genbook.dtb-ampere-fourier"

  ZSTD_CLEVEL=19 make INSTALL_MOD_PATH="${pkgdir}/usr" \
    INSTALL_MOD_STRIP=1 modules_install
  rm -f "${pkgdir}/usr/lib/modules/${_kver}/"{source,build}

  install -Dm644 "${srcdir}/${pkgbase}.preset" \
    "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset"

  install -Dm755 "${srcdir}/extlinux-add.hook" \
    "${pkgdir}/usr/share/libalpm/hooks/95-${pkgbase}-extlinux.hook"
  install -Dm755 "${srcdir}/extlinux-add.sh" \
    "${pkgdir}/usr/share/libalpm/scripts/${pkgbase}-extlinux"
}

_package-headers() {
  pkgdesc='Headers and scripts for the linux-ampere-fourier kernel'
  depends=(pahole)

  cd "${_srcdir}"
  local _kver _builddir
  _kver=$(<version)
  _builddir="${pkgdir}/usr/lib/modules/${_kver}/build"

  install -Dt "${_builddir}" -m644 .config Makefile Module.symvers System.map vmlinux version
  install -Dt "${_builddir}/kernel" -m644 kernel/Makefile

  cp -a scripts "${_builddir}"
  install -Dt "${_builddir}/arch/arm64" -m644 arch/arm64/Makefile
  cp -a arch/arm64/include "${_builddir}/arch/arm64/"
  cp -a include "${_builddir}/"

  find . -name 'Kbuild' -exec install -Dm644 {} "${_builddir}/{}" \;
  find . -name 'Kconfig*' -exec install -Dm644 {} "${_builddir}/{}" \;

  install -d "${pkgdir}/usr/src"
  ln -sr "${_builddir}" "${pkgdir}/usr/src/${pkgbase}"
}

eval "package_${pkgbase}() { _package; }"
eval "package_${pkgbase}-headers() { _package-headers; }"
