# Fairydust kernel for Apple Silicon, packaged for Asahi ALARM.
# Based on asahi-alarm/PKGBUILDs linux-asahi at commit
# 0a0d9059ab71e77e4fb55d2d8854bee2c29c6b73 (2026-08-19).

_rcver=7.1.6
_asahirel=1
_fairydust_commits=13
pkgrel=1

_m1n1_version=1.4.21
pkgbase=linux-asahi-fairydust
_commit_id=asahi-${_rcver}-${_asahirel}
_srcname=linux-${_commit_id}
pkgver="${_rcver}.asahi${_asahirel}.fairydust${_fairydust_commits}"
pkgname=("$pkgbase")
pkgdesc="Asahi Linux kernel with experimental Fairydust USB-C DisplayPort support"
arch=('aarch64')
url="https://github.com/AsahiLinux/linux/tree/fairydust"
license=('GPL2')

makedepends=(
  base-devel bc dtc kmod libelf pahole cpio perl rustup rust-bindgen
  tar xz xmlto python
)
depends=(coreutils kmod initramfs "m1n1>=${_m1n1_version}")
optdepends=(
  'crda: set the wireless regulatory domain'
  'linux-firmware: firmware for additional devices'
)
provides=(WIREGUARD-MODULE "linux=${_rcver}")
options=('!strip' '!debug')

source=(
  "https://github.com/AsahiLinux/linux/archive/${_commit_id}.tar.gz"
  config
  fairydust.patch
)
sha256sums=(
  '0d198546350d303eab5405446f394ab69a7af3984322035127b8887bfe5ca6d5'
  '098dd3e1073e57c0bd70abe0f21dbdba41ff4d2d8161daf485c6c84d805cb76c'
  '6bc5b89660b0ccf9c479bc72d8160952039f7fc51fa1592409d44e434de73e8f'
)

export KBUILD_BUILD_HOST=archlinux
export KBUILD_BUILD_USER=$pkgbase
export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})"

prepare() {
  cd "$_srcname"
  patch -Np1 < ../fairydust.patch

  # Keep this kernel alongside stock linux-asahi with a distinct release name.
  echo "-${_asahirel}-${pkgrel}-fairydust" > localversion.10-pkgrel

  mkdir -p build/base
  cp ../config build/base/.config

  # Preserve the extra Alt Mode helpers used by the working Fedora build.
  scripts/config --file build/base/.config --module TYPEC_NVIDIA_ALTMODE
  scripts/config --file build/base/.config --module TYPEC_TBT_ALTMODE

  make olddefconfig prepare O="$PWD/build/base"
  make -s kernelrelease O="$PWD/build/base" > build/base/version
  printf 'Prepared %s version %s\n' "$pkgbase" "$(<build/base/version)"
}

build() {
  cd "$_srcname"
  make all O="$PWD/build/base" -j "$(nproc)"
}

package() {
  cd "$_srcname"
  local output="$PWD/build/base"
  local kernver
  kernver="$(<"$output/version")"
  local modulesdir="$pkgdir/usr/lib/modules/$kernver"

  install -Dm644 "$output/arch/arm64/boot/Image" "$modulesdir/vmlinuz"
  printf '%s\n' "$pkgbase" | install -Dm644 /dev/stdin "$modulesdir/pkgbase"

  make O="$output" INSTALL_MOD_PATH="$pkgdir/usr" \
    INSTALL_MOD_STRIP=1 modules_install

  install -Dt "$modulesdir/dtbs" "$output"/arch/arm64/boot/dts/apple/*.dtb
  rm -f "$modulesdir/source" "$modulesdir/build"
}

# vim:set ts=8 sts=2 sw=2 et:
