# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

EAPI=5

SRC_URI="https://github.com/rhboot/shim/releases/download/${PV}/shim-${PV}.tar.bz2"
KEYWORDS="*"

inherit eutils multilib toolchain-funcs

DESCRIPTION="Red Hat UEFI shim loader"
HOMEPAGE="https://github.com/rhboot/shim"
LICENSE="BSD-2"
SLOT="0"
IUSE=""

RDEPEND=""
DEPEND="dev-libs/openssl
	platform-key? ( sys-boot/platform-key )
	"
IUSE="platform-key"

shim_arch() {
	case ${ARCH} in
	amd64) echo "x86_64";;
	arm64) echo "aarch64";;
	*)     eerror "unsupported architecture: ${ARCH}";;
	esac
}

shim_binary() {
	case ${ARCH} in
	amd64) echo "shimx64.efi";;
	arm64) echo "shimaa64.efi";;
	*)     eerror "unsupported architecture: ${ARCH}";;
	esac
}

src_prepare() {
	cros_allow_gnu_build_tools
	epatch "${FILESDIR}"/shim-15.4-fix-gcc-host-leak.patch
	epatch "${FILESDIR}"/shim-15.4-force-ld.bfd.patch
	epatch "${FILESDIR}"/shim-15.5-fix-clang-format-error.patch
	default
}

src_compile() {
	local extra_opts=()

	if use platform-key; then
		extra_opts+=( VENDOR_CERT_FILE="${ROOT}/build/share/platform-key/signing_key.cer" )
	fi

	tc-export BUILD_CC
	emake ARCH="$(shim_arch)" \
		CROSS_COMPILE="${CHOST}-" \
		HOSTCC="${BUILD_CC}" \
		DEFAULT_LOADER="\\\\\\\\grub-lakitu.efi" \
		"${extra_opts[@]}" \
		"$(shim_binary)"
}

src_install() {
	insinto /boot/efi/boot
	doins "$(shim_binary)"
}
