# Contributor: Clayton Craft <clayton@craftyguy.net>
# Maintainer: Clayton Craft <clayton@craftyguy.net>
#
# Notes:
# - Builds / packages *only* the EFI boot manager and stub loader, and any
#   useful apps for managing those things.
# - The goal with the systemd patch and this package is *NOT* to create the
#   fastest build possible (e.g. by hacking up meson a bunch).
# - The goal is to create the smallest diff from upstream so that rebasing
#   this is as easy as possible.
# - If you can figure out how to have both, great!!! Otherwise, installing
#   some extra build-time junk and waiting for a long meson configure step
#   is an acceptable price to pay for not having to rebase a bunch of stuff.
#
pkgname=systemd-boot
pkgver=257.1
pkgrel=0
pkgdesc="systemd's EFI boot manager and stub"
url="https://systemd.io/"
# TODO:
# armv7: untested
# riscv64: untested
# x86: untested (and unnecessary?)
arch="aarch64 armv7 riscv64 x86_64"
license="GPL-2.0-only"
# Some of these are just to satisfy systemd's meson config, and aren't actually
# used for building the boot manager or stub...
makedepends="
	bash
	coreutils
	gperf
	meson
	py3-elftools
	py3-jinja2
"
source="
	systemd-$pkgver.tar.gz::https://github.com/systemd/systemd/archive/refs/tags/v$pkgver.tar.gz
	0001-meson-minimal-configure-for-building-systemd-boot.patch
	0002-fix-wchar-for-compiling-on-musl.patch
	cross-x86.meson
	"
options="!check"  # no tests
subpackages="ukify"
# TODO: cross-native fails on, e.g. aarch64, elf2efi gets an "unknown section
# with name '' " ...
# Maybe because meson thinks(?) the linker doesn't support norelro? It does
# when building the default way!
# Using meson cross files is a lot faster! But the whole thing is pretty small,
# so, meh.
# options="!check pmb:cross-native"  # no tests
builddir="$srcdir/systemd-$pkgver"

case "$CARCH" in
	# TODO: This doesn't work locally, pmboostrap's depends parser doesn't
	# evaluate/consider shell stuff...
	x86_64)
		makedepends="$makedepends gcc-x86 musl-dev-x86"
		;;
esac

build() {
	abuild-meson  \
		-Dsbat-distro="postmarketOS" \
		-Dsbat-distro-pkgname="$pkgname" \
		-Dsbat-distro-summary="postmarketOS" \
		-Dsbat-distro-url="postmarketos.org" \
		-Dsbat-distro-version="$pkgver" \
		. output
	meson compile -C output systemd-boot

	# Some x86_64 systems have 32-bit EFI, so cross compile the bootloader for
	# 32-bit when building for this CARCH
	# TODO: this should use systemd/meson.build's ability to cross-compile
	# (setting meson "efi_arch_alt"). The check for that currently fails
	# because the linker can't find the i586/32-bit stuff. Setting
	# LIBRARY_PATH=/usr/lib/gcc/i586-alpine-linux-musl didn't work.
	if [ "$CARCH" == "x86_64" ]; then
		abuild-meson \
			-Dsbat-distro="postmarketOS" \
			-Dsbat-distro-pkgname="$pkgname" \
			-Dsbat-distro-summary="postmarketOS" \
			-Dsbat-distro-url="postmarketos.org" \
			-Dsbat-distro-version="$pkgver" \
			--cross-file "$srcdir"/cross-x86.meson \
			. output.32
		meson compile -C output.32 systemd-boot
	fi
}

package() {
	mkdir -p "$pkgdir"/usr/lib/systemd/boot/efi

	mv output/src/boot/linux*.efi.stub \
		"$pkgdir"/usr/lib/systemd/boot/efi/
	mv output/src/boot/systemd*.efi \
		"$pkgdir"/usr/lib/systemd/boot/efi/

	if [ "$CARCH" == "x86_64" ]; then
		mv output.32/src/boot/linux*.efi.stub \
			"$pkgdir"/usr/lib/systemd/boot/efi/
		mv output.32/src/boot/systemd*.efi \
			"$pkgdir"/usr/lib/systemd/boot/efi/
	fi
}

ukify() {
	depends="binutils py3-pefile"

	install -Dm755 "$builddir"/src/ukify/ukify.py \
		"$subpkgdir"/usr/bin/ukify
}

sha512sums="
dded7555077f85d0f8106b72cc46604fbe4249452be6b2d55800770b6deb2a3a122697c5a5f23b22dab416e8c050e53fc30d59dfd3bfd7c9fbbdab3162e8ebe5  systemd-257.1.tar.gz
67ec8d16d678eb1358ccaa75a173b2fc9f91254b1a0b72912bdacc11da54ea6967dfc90ac852c776ce769b9d6b3fb0dbbf1aaab410a6ffca3d07b70c29419fef  0001-meson-minimal-configure-for-building-systemd-boot.patch
b8ff5a93bb3e394605e81f40f4054e9e3be73e7b26f6aad4e2019da7254217dcf12a63082115041bb20fc528b52989db29f444d502d8f6962b2227d352641b47  0002-fix-wchar-for-compiling-on-musl.patch
ad54e2c7e7a21bfa9b5f9e8db1b6af6a6d78a3e5dfe2dafcec77488f6224865ab4d4c8a8c8ee1c54c99d1741361e9fb3a51e5d36bcbc7a1c3fdcc4d0c1672132  cross-x86.meson
"
