# U-Boot: BeagleBoard, BeagleBone, BeagleBone Black
# Maintainer: André Silva <emulatorman@hyperbola.info>
# Contributor: Jookia <166291@gmail.com>
# Contributor: Márcio Silva <coadde@hyperbola.info>

pkgbase=uboot4extlinux-ti-soc
pkgname=('uboot4extlinux-am335x_bone'
         'uboot4extlinux-chiliboard'
         'uboot4extlinux-omap3_beagle'
         'uboot4extlinux-omap4_panda')
pkgver=2020.07
pkgrel=1
arch=('armv7h')
url="http://git.denx.de/u-boot.git/"
license=('GPL')
makedepends=('bc' 'bison' 'dtc' 'flex' 'python' 'python2' 'swig')
backup=(boot/extlinux/extlinux.conf)
source=("ftp://ftp.denx.de/pub/u-boot/u-boot-${pkgver}.tar.bz2"
        '0001-omap34xx-SPL-enable-MMC-raw-boot-with-u-boot.img.patch'
        'extlinux-am335x.conf'
        'extlinux-omap.conf')
sha256sums=('c1f5bf9ee6bb6e648edbf19ce2ca9452f614b08a9f886f1a566aa42e8cf05f6a'
            'SKIP'
            'SKIP'
            'SKIP')

boards=('am335x_evm'
        'chiliboard'
        'omap3_beagle'
        'omap4_panda')

prepare() {
  cd u-boot-${pkgver}

  # The default is 0x300 512b blocks which forces u-boot.img to be locarted at
  # 384k on the microSD. As u-boot.img is big, it often goes over the 1MB empty
  # space that is created by default when partitioning block devices. That
  # corrupts the first partition. Using 0x200 leaves more space to u-boot.img
  # and is well aligned to 128k.
  for i in ${boards[@]}; do
    echo 'CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x200' >> \
         configs/${i}_defconfig
  done

  # See the 0001-omap34xx-SPL-enable-MMC-raw-boot-with-u-boot.img.patch for
  # rationale for this configuration
  echo '# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set' >> \
       configs/omap3_beagle_defconfig

  # We want to enable users to use both RAW mode and filesystems to install
  # u-boot, but as filesystems are more complicated due to constraints that
  # need to be respected for it to work we default to raw block. This patch
  # restores the ability of using RAW block mode on OMAP >= 2. RAW partitions
  # have not been tested yet and may or may not work but they have constraints
  # as well.
  patch -Np1 -i ../0001-omap34xx-SPL-enable-MMC-raw-boot-with-u-boot.img.patch
}

build() {
  cd u-boot-${pkgver}

  unset CFLAGS CXXFLAGS LDFLAGS

  for i in ${boards[@]}; do
    mkdir -p ../bin_${i}
    make distclean
    make ${i}_defconfig
    echo 'CONFIG_IDENT_STRING=" Parabola GNU/Linux-libre"' >> .config
    make EXTRAVERSION=-${pkgrel}
    mv -f MLO u-boot.img ../bin_${i}
  done
}

package_uboot4extlinux-am335x_bone() {
  pkgdesc="U-Boot with Extlinux support for various BeagleBones, the AM335x GP EVM and the EVM SK"

  install=${pkgbase}.install
  provides=('uboot4extlinux-am335x')
  conflicts=('uboot-am335x_bone' 'uboot4grub-am335x_bone')

  install -d "${pkgdir}"/boot/extlinux
  install -d "${pkgdir}"/boot/u-boot/images/

  install -Dm644 \
          bin_am335x_evm/MLO \
          bin_am335x_evm/u-boot.img \
          "${pkgdir}"/boot/u-boot/images/

  install -Dm644 extlinux-am335x.conf "${pkgdir}"/boot/extlinux/extlinux.conf

  # Package documentation as well
  install -d "${pkgdir}"/usr/share/doc/u-boot
  # The README might move in doc/board/ at some point
  install -Dm644 u-boot-${pkgver}/board/ti/am335x/README \
          "${pkgdir}"/usr/share/doc/u-boot/am335x_bone.txt
}

package_uboot4extlinux-chiliboard() {
  pkgdesc="U-Boot with Extlinux support for the ChiliBoard"

  install=${pkgbase}.install
  provides=('uboot4extlinux-am335x')
  conflicts=('uboot-chiliboard')

  install -d "${pkgdir}"/boot/extlinux
  install -d "${pkgdir}"/boot/u-boot/images/

  install -Dm644 \
          bin_chiliboard/MLO \
          bin_chiliboard/u-boot.img \
          "${pkgdir}"/boot/u-boot/images/

  install -Dm644 extlinux-am335x.conf "${pkgdir}"/boot/extlinux/extlinux.conf

  # Package documentation as well
  install -d "${pkgdir}"/usr/share/doc/u-boot
  # The README might move in doc/board/ at some point
  install -Dm644 u-boot-${pkgver}/board/grinn/chiliboard/README \
          "${pkgdir}"/usr/share/doc/u-boot/chiliboard.txt
}

package_uboot4extlinux-omap3_beagle() {
  pkgdesc="U-Boot with Extlinux support for various BeagleBoards"

  install=${pkgbase}.install
  provides=('uboot4extlinux-omap3')
  conflicts=('grub-omap3_beagle'
             'grub-omap3_beagle_xm'
             'grub-omap3_beagle_xm_ab'
             'uboot-omap3_beagle')

  install -d "${pkgdir}"/boot/extlinux
  install -d "${pkgdir}"/boot/u-boot/images/

  install -Dm644 \
        bin_omap3_beagle/MLO \
        bin_omap3_beagle/u-boot.img \
        "${pkgdir}"/boot/u-boot/images/

  install -Dm644 extlinux-omap.conf "${pkgdir}"/boot/extlinux/extlinux.conf

  # Package documentation as well
  install -d "${pkgdir}"/usr/share/doc/u-boot
  # The README might be converted to ReStructuredText at some point and be moved because of that
  install -Dm644 u-boot-${pkgver}/doc/README.omap3 "${pkgdir}"/usr/share/doc/u-boot/
}

package_uboot4extlinux-omap4_panda() {
  pkgdesc="U-Boot with Extlinux support for the  PandaBoard and PandaBoard ES"

  install=${pkgbase}.install
  provides=('uboot4extlinux-omap4_panda')

  conflicts=('uboot4grub-omap4_panda'
             'uboot-omap4_panda'
             'uboot-pandaboard-linux-libre'
             'uboot-pandaboard')

  install -d "${pkgdir}"/boot/extlinux
  install -d "${pkgdir}"/boot/u-boot/images/

  install -Dm644 \
          bin_omap4_panda/MLO \
          bin_omap4_panda/u-boot.img \
          "${pkgdir}"/boot/u-boot/images/

  install -Dm644 extlinux-omap.conf "${pkgdir}"/boot/extlinux/extlinux.conf
}
