# Maintainer: Thomas Bächler <thomas@archlinux.org>

pkgbase=linux-firmware
pkgname=(linux-firmware amd-ucode)
_commit=211de1679a68b8ab0f841a8058df35e13e3963f0 # master
pkgver=20181216.211de16
pkgrel=1
pkgdesc="Firmware files for Linux"
makedepends=('git')
arch=('any')
url="http://git.kernel.org/?p=linux/kernel/git/firmware/linux-firmware.git;a=summary"
license=('GPL2' 'GPL3' 'custom')
options=(!strip)
source=("git+https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git#commit=${_commit}")
md5sums=('SKIP')

prepare() {
  cd "${srcdir}/${pkgname}"
  git revert -n a7ea5a87ee1d372289b72d646046fae1f5f0fb9e
  git revert -n ec4b0cd394472ee1491df6ef5f215d1f0953f836
  git revert -n 1abe3c3caf69add758c336e96eb189af485989b9
  git revert -n 6e38fef08d1bd1318414a8d8367f7afecfdf4b2e
  git revert -n df8986481ffdc2f7122d9442ac21180c5624743b
#  git revert -n a91e850a71634270deef8dffe09ec7798f2ad824
#  git revert -n 6cca1381f328e7df55ae8bb8ac515b945d35f9f5
#  git revert -n e8404a6055ae2b632f5036cf60bce8a4fa88e69b
}

pkgver() {
  cd "${srcdir}/${pkgname}"

  # Commit date + short rev
  echo $(TZ=UTC git show -s --pretty=%cd --date=format-local:%Y%m%d HEAD).$(git rev-parse --short HEAD)
}

build() {
  mkdir -p kernel/x86/microcode
  cat ${pkgbase}/amd-ucode/microcode_amd*.bin > kernel/x86/microcode/AuthenticAMD.bin
  # Make the .bin reproducible 
  [ ! -z $SOURCE_DATE_EPOCH ] && touch -d @$SOURCE_DATE_EPOCH kernel/x86/microcode/AuthenticAMD.bin
  echo kernel/x86/microcode/AuthenticAMD.bin | bsdcpio -o -H newc -R 0:0 > amd-ucode.img
}

package_linux-firmware() {
  groups=('base')
  conflicts=('linux-firmware-git'
             'kernel26-firmware'
             'ar9170-fw'
             'iwlwifi-1000-ucode'
             'iwlwifi-3945-ucode'
             'iwlwifi-4965-ucode'
             'iwlwifi-5000-ucode'
             'iwlwifi-5150-ucode'
             'iwlwifi-6000-ucode'
             'rt2870usb-fw'
             'rt2x00-rt61-fw'
             'rt2x00-rt71w-fw')
  replaces=('kernel26-firmware'
            'ar9170-fw'
            'iwlwifi-1000-ucode'
            'iwlwifi-3945-ucode'
            'iwlwifi-4965-ucode'
            'iwlwifi-5000-ucode'
            'iwlwifi-5150-ucode'
            'iwlwifi-6000-ucode'
            'rt2870usb-fw'
            'rt2x00-rt61-fw'
            'rt2x00-rt71w-fw')

  cd "${srcdir}/${pkgname}"

  make DESTDIR="${pkgdir}" FIRMWAREDIR=/usr/lib/firmware install
  rm "${pkgdir}/usr/lib/firmware/"{Makefile,README,configure,GPL-3}

  install -d "${pkgdir}/usr/share/licenses/${pkgname}"
  install -Dm644 LICEN* WHENCE "${pkgdir}/usr/share/licenses/linux-firmware/"

  # Trigger a microcode reload for configurations not using early updates
  install -d "${pkgdir}/usr/lib/tmpfiles.d"
  echo 'w /sys/devices/system/cpu/microcode/reload - - - - 1' \
    >"${pkgdir}/usr/lib/tmpfiles.d/${pkgname}.conf"
}

package_amd-ucode() {
  pkgdesc='Microcode update files for AMD CPUs'

  install -D -m0644 amd-ucode.img "${pkgdir}"/boot/amd-ucode.img  
  install -D -m0644 "${srcdir}/${pkgbase}/LICENSE.amd-ucode" "${pkgdir}/usr/share/licenses/amd-ucode/LICENSE"
}

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