# Contributor: Isaac David # Contributor: André Silva # Contributor: Timothy Redaelli # Contributor: Denis 'GNUtoo' Carikli # Maintainer: Parabola Hackers # To add a new board (that uses an Allwinner System On a Chip) you need: # - The package name. Example: uboot4extlinux-a20-olinuxino_micro # - The u-boot configuration. Example: A20-OLinuXino_MICRO_defconfig # - The name of the board(s). Example: A20 OLinuXino Micro # A single package / u-boot configuration sometimes support multiple # boards and the configuration name doesn't always have the boards names # in it. Example: uboot4extlinux-am335x_bone supports various BeagleBones, # the AM335x GP EVM and the EVM SK all in one u-boot binary and package. # - If relevant, the packages it replaces, if there are older u-boot packages # also supporting that board. Example:uboot-a20-olinuxino-micro # # Ideally we'd like to enable people to only add these 4 variables in this # package to add a new board. These 4 variables could go in something like # a CVS file that is parsed, but that would require to be able to dynamically # define packages, but even if eval package_{$_pkgname}() { [...] } works, # it doesn't make that package function visible to makepkg. # # Because of that, contributors wanting to add new boards will have to search # for example of the information mentioned above and add it in the PKGBUILD # for their boards. # # After adding a new board in this PKGBUILD, to get the board officially # supported by Parabola.you also need to create a page for it in the # Parabola wiki for that board and update the ARM installation guide to # point to it when relevant. Examples of that are available for other # boards in the ARM installation guide. _pkgbase=u-boot-libre pkgbase=uboot4extlinux-sunxi pkgname=("${pkgbase}" 'uboot4extlinux-a10-olinuxino-lime' 'uboot4extlinux-a10s-olinuxino-m' 'uboot4extlinux-a13-olinuxino' 'uboot4extlinux-a13-olinuxinom' 'uboot4extlinux-a20-olinuxino-lime' 'uboot4extlinux-a20-olinuxino-lime2' 'uboot4extlinux-a20-olinuxino-lime2-emmc' 'uboot4extlinux-a20-olinuxino_micro' 'uboot4extlinux-bananapi' 'uboot4extlinux-bananapro' 'uboot4extlinux-chip' 'uboot4extlinux-cubieboard' 'uboot4extlinux-cubieboard2' 'uboot4extlinux-cubietruck' 'uboot4extlinux-linksprite_pcduino' 'uboot4extlinux-linksprite_pcduino3' 'uboot4extlinux-linksprite_pcduino3_nano' 'uboot4extlinux-orangepi_2' 'uboot4extlinux-orangepi_one' 'uboot4extlinux-orangepi_pc' 'uboot4extlinux-orangepi_plus') # We have a ${pkgver}-${pkgrel} that looks like that: # '2021.07-r1.parabola3' and all the individual components are needed: # - '2021.07' corresponds to the upstream u-boot version. It is needed # to know which u-boot version source code is used. # - 'r1' corresponds to the u-boot-libre revision. Without it it would # be impossible to fix bugs inside the u-boot-libre deblob script. # - .parabola3 is the Parabola package revision. Without it it would be # impossible to fix bugs inside this PKGBUILD. # As for the '-r1', it cannot go inside pkgver, else we end up with an # error like that when running makepkg: # ==> ERROR: pkgver is not allowed to contain colons, forward slashes, # hyphens or whitespace. # so it was moved in pkgrel. _pkgver=2021.07 _pkgrel=r1 pkgver="${_pkgver}" pkgrel="${_pkgrel}.parabola3" arch=('armv7h' 'i686' 'x86_64') url="https://libreboot.org/docs/maintain/#resourcesscriptsbuildreleaseu-boot-libre" license=('GPL') makedepends=('bc' 'dtc' 'python' 'python-setuptools' 'python2' 'swig') makedepends_i686+=('arm-none-eabi-gcc') makedepends_ppc64le+=('arm-none-eabi-gcc') makedepends_x86_64+=('arm-none-eabi-gcc') # According to the Libreboot maintainer, we are supposed to use # any of the mirrors in https://libreboot.org/download.html#https # and not use the rsync server. The rsync server is only supposed # to be used by mirrors as it has limited bandwith. _mirror="https://mirrors.mit.edu/libreboot/" source=("${_mirror}/${_pkgbase}/${_pkgver}-${_pkgrel}/${_pkgbase}-${_pkgver}-${_pkgrel}.tar") # TODO: this checksum doesn't correspond to the one in # tests/u-boot-libre.sha512. This means that the tarball is not # reproducible yet. According to diffoscope, the only changes so # far seems to be some permissions changes: # │ -drwxr-xr-x [...] 0 1969-12-31 23:00:00.000000 u-boot-libre-2021.07-r1/ # │ +drwxrwxr-x [...] 0 1969-12-31 23:00:00.000000 u-boot-libre-2021.07-r1/ # │ --rw-r--r-- [...] 16576 1969-12-31 23:00:00.000000 u-boot-libre-2021.07-r1/.azure-pipelines.yml # │ +-rw-rw-r-- [...] 16576 1969-12-31 23:00:00.000000 u-boot-libre-2021.07-r1/.azure-pipelines.yml # I've not checked if some files were added or not but at least it # shows only diffs like the one above, and it doesn't show any file # content diff. # TODO: Check the signatures of the released files, not just the content # TODO: We also need to look into drivers/dma/MCD_tasks.c. The debian # version of u-boot removes it. It's some data that looks like # code, so while there is a valid license, we might lack # corresponding source code if it's really some code. The debian # commits might have more information about it. sha512sums=('4fd4cb762efd6b3e1eede883ee44cbf16f787de7f9bd8d6f9a98d69a22fd75519cce4b9ff713b205d34854597d2f9d6053dabc6097e55cb5be7c7ce71dae2ef6') source+=('extlinux.conf' "${pkgbase}.hook.in" 'install-uboot4extlinux.sh.in' "generate-${pkgbase}-install-text.sh") sha512sums+=('SKIP' 'SKIP' 'SKIP' 'SKIP') _defconfigs=('A10-OLinuXino-Lime_defconfig' 'A10s-OLinuXino-M_defconfig' 'A13-OLinuXino_defconfig' 'A13-OLinuXinoM_defconfig' 'A20-OLinuXino-Lime_defconfig' 'A20-OLinuXino-Lime2_defconfig' 'A20-OLinuXino-Lime2-eMMC_defconfig' 'A20-OLinuXino_MICRO_defconfig' 'Bananapi_defconfig' 'Bananapro_defconfig' 'CHIP_defconfig' 'Cubieboard_defconfig' 'Cubieboard2_defconfig' 'Cubietruck_defconfig' 'Linksprite_pcDuino_defconfig' 'Linksprite_pcDuino3_defconfig' 'Linksprite_pcDuino3_Nano_defconfig' 'orangepi_2_defconfig' 'orangepi_one_defconfig' 'orangepi_pc_defconfig' 'orangepi_plus_defconfig') # Offset at which to install u-boot u_boot_with_spl_offset=8192 case "$CARCH" in armv7h) ARCH=arm;; i686|ppc64le|x86_64) ARCH=arm;CROSS_COMPILE=arm-none-eabi-;; esac _nr_targets=0 for _defconfig in ${_defconfigs[@]}; do _nr_targets=$(expr ${_nr_targets} + 1) done _get_target_name() { _defconfig="$1" echo ${_defconfig} | \ sed 's/_defconfig$//' | \ awk '{print tolower($0)}' } _get_target_destdir() { _defconfig="$1" _target_name="$(_get_target_name ${_defconfig})" echo "build/uboot4extlinux-${_target_name}" } _build_uboot_target() { _defconfig="$1" _destdir="$(_get_target_destdir ${_defconfig})" _target_name="$(_get_target_name ${_defconfig})" unset CFLAGS CXXFLAGS LDFLAGS make "ARCH=${ARCH}" distclean make "ARCH=${ARCH}" ${_defconfig} echo 'CONFIG_IDENT_STRING=" Parabola GNU/Linux-libre"' >> .config if [ "$CARCH" = "armv7h" ]; then make "ARCH=${ARCH}" EXTRAVERSION=-${pkgrel} else make "ARCH=${ARCH}" "CROSS_COMPILE=${CROSS_COMPILE}" \ EXTRAVERSION=-${pkgrel} fi echo "==> Installing ${_target_name} to ${_destdir}" install -d ${_destdir} mv -f u-boot-sunxi-with-spl.bin "${_destdir}" } # TODO: We need to fix the timestamps upstream to a valid date # (like the first January 1970at 01:00:00 CET) or something derived # from the release version somehow. Else we have the build log spammed # with errors like that: # make: scripts/Makefile.extrawarn: Timestamp out of range; # substituting 1970-01-01 00:59:59.999999999 # TODO: While we're at it we could export SOURCE_DATE_SPOCH to try to # make the u-boot package reporducible. prepare() { cd "${_pkgbase}-${_pkgver}-${_pkgrel}" find -print0 | xargs -0r touch --no-dereference --date="@${SOURCE_DATE_EPOCH}" } build() { cd "${_pkgbase}-${_pkgver}-${_pkgrel}" _target_nr=0 for _defconfig in ${_defconfigs[@]}; do _target_nr=$(expr ${_target_nr} + 1) _target_name="$(_get_target_name ${_defconfig})" echo "==> Building ${_target_name} " \ "[${_target_nr} of ${_nr_targets} targets]" _build_uboot_target "${_defconfig}" done } _check_uboot_target() { _defconfig="$1" _image="$(_get_target_destdir ${_defconfig})/u-boot-sunxi-with-spl.bin" _image_size="$(du --bytes --apparent-size ${_image} | awk '{print $1}')" _offset="${u_boot_with_spl_offset}" _image_end=$(expr ${_image_size} + ${_offset}) # This test comes from install-uboot4extlinux.sh.in if [ ${_image_end} -gt $(expr 1024 \* 1024) ] ; then echo "Error: ${_image} is too big:" echo " offset: ${_offset}" echo " size: ${_image_size}" echo " By default, "\ "partitioing tools makes the first partition start at 1MiB" echo " Instaling ${_image} "\ "would overwrite that first partition (if it's present)." false # Fail the test fi } check() { cd "${_pkgbase}-${_pkgver}-${_pkgrel}" _target_nr=0 for _defconfig in ${_defconfigs[@]}; do _target_nr=$(expr ${_target_nr} + 1) _target_name="$(_get_target_name ${_defconfig})" echo "==> Testing target ${_target_name} " \ "[${_target_nr} of ${_nr_targets} targets]" _check_uboot_target "${_defconfig}" done } _make_uboot_package() { _pkgname="$1" if [ -n "${pkgdir}" ] ; then cd "${_pkgbase}-${_pkgver}-${_pkgrel}" # Install the u-boot binary install -d "${pkgdir}/usr/lib/u-boot/${_pkgname}/" install -Dm644 "build/${_pkgname}/u-boot-sunxi-with-spl.bin" \ "${pkgdir}/usr/lib/u-boot/${_pkgname}" # Install the u-boot installation script sed < "${srcdir}/install-uboot4extlinux.sh.in" > \ "${pkgdir}/usr/lib/u-boot/${_pkgname}/install-uboot4extlinux.sh" \ -e "s|@u_boot_with_spl[@]|/usr/lib/u-boot/${_pkgname}/u-boot-sunxi-with-spl.bin|g" \ -e "s|@u_boot_with_spl_offset[@]|${u_boot_with_spl_offset}|g" chmod +x \ "${pkgdir}/usr/lib/u-boot/${_pkgname}/install-uboot4extlinux.sh" # Install what is required for the pacman hook install -d "${pkgdir}/usr/share/libalpm/hooks/" sed < "${srcdir}/${pkgbase}.hook.in" > \ "${pkgdir}/usr/share/libalpm/hooks/${_pkgname}.hook" \ -e "s|@pkgname[@]|${_pkgname}|g" install -d "${pkgdir}/usr/share/doc/u-boot/${_pkgname}/" # If we install several uboot4extlinux, we need a way to clearly # separate each postinstall message. To do that we wrapped the # text in an ASCII art square, but doing that is complicated when # using sed as the package name as well as the installation script # path both have variable length. sh "${srcdir}/generate-${pkgbase}-install-text.sh" \ "${_pkgname}" \ "${pkgbase}" \ "/usr/lib/u-boot/${_pkgname}/install-uboot4extlinux.sh" > \ "${pkgdir}/usr/share/doc/u-boot/${_pkgname}/install-uboot4extlinux.txt" fi } _make_pkgdesc() { board_name="$1" echo "U-Boot with Extlinux support for ${board_name}" } package_uboot4extlinux-sunxi() { pkgdesc="Scripts for managing U-Boot installations for computers with Allwinner System On a Chip" depends=('uboot-tools') # Users are expected to use this as a base for /boot/extlinux/extlinux.conf install -d "${pkgdir}/usr/lib/u-boot/${pkgname}/" install -Dm644 \ "${srcdir}/extlinux.conf" \ "${pkgdir}/usr/lib/u-boot/${pkgname}/" } package_uboot4extlinux-a10-olinuxino-lime() { pkgdesc=$(_make_pkgdesc "A10 OLinuXino Lime") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-a10s-olinuxino-m() { pkgdesc=$(_make_pkgdesc "A10s OLinuXino Micro") replaces=('uboot4extlinux-a10s-olinuxino-micro') # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-a13-olinuxino() { pkgdesc=$(_make_pkgdesc "A13 OLinuXino") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-a13-olinuxinom() { pkgdesc=$(_make_pkgdesc "uboot4extlinux-a13-olinuxino-micro") replaces=('uboot4extlinux-a13-olinuxino-micro') # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-a20-olinuxino-lime() { pkgdesc=$(_make_pkgdesc "A20 OLinuXino Lime") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-a20-olinuxino-lime2() { pkgdesc=$(_make_pkgdesc "A20 OLinuXino Lime2") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-a20-olinuxino-lime2-emmc() { pkgdesc=$(_make_pkgdesc "A20 OLinuXino Lime2 with eMMC") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-a20-olinuxino_micro() { pkgdesc=$(_make_pkgdesc "uboot-a20-olinuxino-micro") replaces=('uboot-a20-olinuxino-micro') # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-bananapi() { pkgdesc=$(_make_pkgdesc "Banana Pi") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-bananapro() { pkgdesc=$(_make_pkgdesc "Banana Pro") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-chip() { pkgdesc=$(_make_pkgdesc "C.H.I.P") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-cubieboard() { pkgdesc=$(_make_pkgdesc "Cubieboard") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-cubieboard2() { pkgdesc=$(_make_pkgdesc "Cubieboard 2") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-cubietruck() { pkgdesc=$(_make_pkgdesc "Cubietruck") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-linksprite_pcduino() { pkgdesc=$(_make_pkgdesc "uboot4extlinux-pcduino") replaces=('uboot4extlinux-pcduino') # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-linksprite_pcduino3() { pkgdesc=$(_make_pkgdesc "uboot4extlinux-pcduino3") replaces=('uboot4extlinux-pcduino3') # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-linksprite_pcduino3_nano() { pkgdesc=$(_make_pkgdesc "uboot4extlinux-pcduino3-nano") replaces=('uboot4extlinux-pcduino3-nano') # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-orangepi_2() { pkgdesc=$(_make_pkgdesc "Orange Pi 2") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-orangepi_one() { pkgdesc=$(_make_pkgdesc "Orange Pi One") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-orangepi_pc() { pkgdesc=$(_make_pkgdesc "Orange Pi PC") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-orangepi_plus() { pkgdesc=$(_make_pkgdesc "Orange Pi Plus") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" }