void-packages/srcpkgs/edk2-ovmf/template

236 lines
10 KiB
Bash

# Template file for 'edk2-ovmf'
pkgname=edk2-ovmf
version=202405
revision=1
_mipi_ver=370b5944c046bab043dd8b133727b2135af7747a
_openssl_ver=3.0.9
_mbedtls_ver=8c89224991adff88d53cd380f42a2baa36f91454
_softfloat_ver=b64af41c3276f97f0e181920400ee056b9c88037
_spdm_ver=3.3.0
archs="x86_64* i686* aarch64*"
hostmakedepends="acpica-utils nasm python3 libuuid-devel"
short_desc="EFI Development Kit II - Open Virtual Machine Firmware"
maintainer="classabbyamp <void@placeviolette.net>"
license="BSD-2-Clause-Patent, MIT"
homepage="https://github.com/tianocore/tianocore.github.io/wiki/EDK-II"
changelog="https://github.com/tianocore/edk2/releases"
distfiles="https://github.com/tianocore/edk2/archive/refs/tags/edk2-stable${version}.tar.gz
https://github.com/MIPI-Alliance/public-mipi-sys-t/archive/${_mipi_ver}.tar.gz>mipi-${_mipi_ver}.tar.gz
https://www.openssl.org/source/openssl-${_openssl_ver}.tar.gz
https://github.com/Mbed-TLS/mbedtls/archive/${_mbedtls_ver}.tar.gz>mbedtls-${_mbedtls_ver}.tar.gz
https://github.com/ucb-bar/berkeley-softfloat-3/archive/${_softfloat_ver}.tar.gz>softfloat-${_softfloat_ver}.tar.gz
https://github.com/DMTF/libspdm/archive/refs/tags/${_spdm_ver}.tar.gz>libspdm-${_spdm_ver}.tar.gz"
checksum="53cbf51f2ca7aea9ef67ca9aeb6276dc5643c87b5ccdb7fe9f9936361623d7be
9fda3b9a78343ab2be6f06ce6396536e7e065abac29b47c8eb2e42cbb4c4f00b
eb1ab04781474360f77c318ab89d8c5a03abc38e63d65a603cabbf1b00a1dc90
b5c7e7c54e013c168f4aae036e59912785f11b4aeebd57f6165a14e879b9a82c
faae889814ea6a292f7ca03d9b36e6c7e95bab2a64777804883cc822b8d48757
178c7bd785b3ac71b886b8360dab926d42e4d5edc55009bcd341295f25f56c91"
skip_extraction="mipi-${_mipi_ver}.tar.gz
openssl-${_openssl_ver}.tar.gz
mbedtls-${_mbedtls_ver}.tar.gz
softfloat-${_softfloat_ver}.tar.gz
libspdm-${_spdm_ver}.tar.gz"
case "$XBPS_TARGET_LIBC" in
glibc) _pfx="gnu" ;;
musl) _pfx="musl" ;;
esac
case "$XBPS_MACHINE" in
x86_64*|i686*) hostmakedepends+=" cross-aarch64-linux-${_pfx} cross-arm-linux-${_pfx}eabihf" ;;
esac
case "$XBPS_TARGET_MACHINE" in
x86_64*) _archs=(X64 IA32 AARCH64 ARM) ;;
i686*) _archs=(IA32 AARCH64 ARM) ;;
aarch64*) _archs=(AARCH64) ;;
esac
post_extract() {
vsrcextract -C MdePkg/Library/MipiSysTLib/mipisyst "mipi-${_mipi_ver}.tar.gz"
vsrcextract -C CryptoPkg/Library/OpensslLib/openssl "openssl-${_openssl_ver}.tar.gz"
vsrcextract -C CryptoPkg/Library/MbedTlsLib/mbedtls "mbedtls-${_mbedtls_ver}.tar.gz"
vsrcextract -C ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3 "softfloat-${_softfloat_ver}.tar.gz"
vsrcextract -C SecurityPkg/DeviceSecurity/SpdmLib/libspdm "libspdm-${_spdm_ver}.tar.gz"
}
do_build() {
local PATH="BaseTools/BinWrappers/PosixLike:$PATH"
local _common_args=(-b RELEASE -n "$XBPS_MAKEJOBS" -t GCC5)
local _efi_args=(-D NETWORK_IP6_ENABLE -D TPM_CONFIG_ENABLE -D TPM1_ENABLE -D TPM2_ENABLE)
local _x86_args=(-D FD_SIZE_2MB -D HTTP_BOOT_ENABLE -D TLS_ENABLE)
local _4mb_args=(-D FD_SIZE_4MB -D FD_SIZE_IN_KB=4096 -D HTTP_BOOT_ENABLE -D TLS_ENABLE)
case "$XBPS_MACHINE" in
x86_64*|i686*)
export GCC5_AARCH64_PREFIX="aarch64-linux-${_pfx}-"
export GCC5_ARM_PREFIX="arm-linux-${_pfx}eabihf-"
;;
esac
for _arch in "${_archs[@]}"; do
CC=gcc CXX=g++ ARCH="${_arch}" make "${makejobs}" -C BaseTools
done
. edksetup.sh
for _arch in "${_archs[@]}"; do
msg_normal "$pkgver: building shell ($_arch)\n"
build -p ShellPkg/ShellPkg.dsc -a "$_arch" "${_common_args[@]}"
case "${_arch}" in
X64)
msg_normal "$pkgver: building ovmf ($_arch) with secure boot support (4MB FD)\n"
build -p "OvmfPkg/OvmfPkgIa32X64.dsc" -a IA32 -a "$_arch" \
"${_common_args[@]}" "${_efi_args[@]}" "${_4mb_args[@]}" \
-D SECURE_BOOT_ENABLE -D SMM_REQUIRE -D EXCLUDE_SHELL_FROM_FD
mv -v Build/Ovmf3264{,-secure-4mb}
msg_normal "$pkgver: building ovmf ($_arch) with secure boot support\n"
build -p "OvmfPkg/OvmfPkgIa32X64.dsc" -a IA32 -a "$_arch" \
"${_common_args[@]}" "${_efi_args[@]}" "${_x86_args[@]}" \
-D SECURE_BOOT_ENABLE -D SMM_REQUIRE -D EXCLUDE_SHELL_FROM_FD
mv -v Build/Ovmf3264{,-secure}
msg_normal "$pkgver: building ovmf ($_arch) default (4MB FD)\n"
build -p "OvmfPkg/OvmfPkg${_arch}.dsc" -a "$_arch" \
"${_common_args[@]}" "${_efi_args[@]}" "${_4mb_args[@]}"
mv -v Build/OvmfX64{,-4mb}
msg_normal "$pkgver: building ovmf ($_arch) default\n"
build -p "OvmfPkg/OvmfPkg${_arch}.dsc" -a "$_arch" \
"${_common_args[@]}" "${_efi_args[@]}" "${_x86_args[@]}"
msg_normal "$pkgver: building ovmf ($_arch) with microvm support (4MB FD)\n"
build -p "OvmfPkg/Microvm/Microvm${_arch}.dsc" -a "$_arch" \
"${_common_args[@]}" "${_efi_args[@]}" "${_4mb_args[@]}"
mv -v Build/MicrovmX64{,-4mb}
msg_normal "$pkgver: building ovmf ($_arch) with microvm support\n"
build -p "OvmfPkg/Microvm/Microvm${_arch}.dsc" -a "$_arch" \
"${_common_args[@]}" "${_efi_args[@]}" "${_x86_args[@]}"
;;
IA32)
msg_normal "$pkgver: building ovmf ($_arch) with secure boot support (4MB FD)\n"
build -p "OvmfPkg/OvmfPkgIa32.dsc" -a "$_arch" \
"${_common_args[@]}" "${_efi_args[@]}" "${_4mb_args[@]}" \
-D SECURE_BOOT_ENABLE -D SMM_REQUIRE -D EXCLUDE_SHELL_FROM_FD -D LOAD_X64_ON_IA32_ENABLE
mv -v Build/Ovmf{Ia32,IA32-secure-4mb}
msg_normal "$pkgver: building ovmf ($_arch) with secure boot support\n"
build -p "OvmfPkg/OvmfPkgIa32.dsc" -a "$_arch" \
"${_common_args[@]}" "${_efi_args[@]}" "${_x86_args[@]}" \
-D SECURE_BOOT_ENABLE -D SMM_REQUIRE -D EXCLUDE_SHELL_FROM_FD -D LOAD_X64_ON_IA32_ENABLE
mv -v Build/Ovmf{Ia32,IA32-secure}
msg_normal "$pkgver: building ovmf ($_arch) default (4MB FD)\n"
build -p "OvmfPkg/OvmfPkgIa32.dsc" -a "$_arch" \
"${_common_args[@]}" "${_efi_args[@]}" "${_4mb_args[@]}" \
-D LOAD_X64_ON_IA32_ENABLE
mv -v Build/Ovmf{Ia32,IA32-4mb}
msg_normal "$pkgver: building ovmf ($_arch) default\n"
build -p "OvmfPkg/OvmfPkgIa32.dsc" -a "$_arch" \
"${_common_args[@]}" "${_efi_args[@]}" "${_x86_args[@]}" \
-D LOAD_X64_ON_IA32_ENABLE
mv -v Build/Ovmf{Ia32,IA32}
;;
A*)
msg_normal "Building ArmVirtPkg ($_arch) with secure boot\n"
build -p "ArmVirtPkg/ArmVirtQemu.dsc" -a "${_arch}" \
"${_common_args[@]}" "${_efi_args[@]}" \
-D NETWORK_HTTP_BOOT_ENABLE -D NETWORK_TLS_ENABLE -D SECURE_BOOT_ENABLE
dd if=/dev/zero of="Build/ArmVirtQemu-$_arch/RELEASE_GCC5/FV/QEMU_CODE.fd" bs=1M count=64
dd if="Build/ArmVirtQemu-$_arch/RELEASE_GCC5/FV/QEMU_EFI.fd" \
of="Build/ArmVirtQemu-$_arch/RELEASE_GCC5/FV/QEMU_CODE.fd" conv=notrunc
dd if=/dev/zero of="Build/ArmVirtQemu-$_arch/RELEASE_GCC5/FV/QEMU_VARS.fd" bs=1M count=64
;;
esac
done
}
do_install() {
vmkdir usr/share/qemu/firmware
vmkdir usr/share/AAVMF
for _arch in "${_archs[@]}"; do
vmkdir "usr/share/edk2/${_arch,,}"
vinstall "Build/Shell/RELEASE_GCC5/${_arch}/Shell_7C04A583-9E3E-4f1c-AD65-E05268D0B4D1.efi" 644 \
"usr/share/edk2/${_arch,,}" Shell.efi
vinstall "Build/Shell/RELEASE_GCC5/${_arch}/Shell_EA4BB293-2D7F-4456-A681-1F22F42CD0BC.efi" 644 \
"usr/share/edk2/${_arch,,}" Shell_Full.efi
case "$_arch" in
X64)
vinstall "Build/Ovmf${_arch}/RELEASE_GCC5/FV/OVMF.fd" 644 "usr/share/edk2/${_arch,,}"
vinstall "Build/Ovmf${_arch}/RELEASE_GCC5/FV/OVMF_CODE.fd" 644 "usr/share/edk2/${_arch,,}"
vinstall "Build/Ovmf${_arch}/RELEASE_GCC5/FV/OVMF_VARS.fd" 644 "usr/share/edk2/${_arch,,}"
vinstall "Build/Ovmf${_arch}-4mb/RELEASE_GCC5/FV/OVMF.fd" 644 "usr/share/edk2/${_arch,,}" OVMF.4m.fd
vinstall "Build/Ovmf${_arch}-4mb/RELEASE_GCC5/FV/OVMF_CODE.fd" 644 "usr/share/edk2/${_arch,,}" OVMF_CODE.4m.fd
vinstall "Build/Ovmf${_arch}-4mb/RELEASE_GCC5/FV/OVMF_VARS.fd" 644 "usr/share/edk2/${_arch,,}" OVMF_VARS.4m.fd
vinstall "Build/Ovmf3264-secure/RELEASE_GCC5/FV/OVMF_CODE.fd" 644 "usr/share/edk2/${_arch,,}" OVMF_CODE.secure.fd
vinstall "Build/Ovmf3264-secure-4mb/RELEASE_GCC5/FV/OVMF_CODE.fd" 644 "usr/share/edk2/${_arch,,}" OVMF_CODE.secure.4m.fd
vinstall "Build/MicrovmX64/RELEASE_GCC5/FV/MICROVM.fd" 644 "usr/share/edk2/${_arch,,}" MICROVM.fd
vinstall "Build/MicrovmX64-4mb/RELEASE_GCC5/FV/MICROVM.fd" 644 "usr/share/edk2/${_arch,,}" MICROVM.4m.fd
vcopy "${FILESDIR}/*x86_64*.json" usr/share/qemu/firmware
vcopy "${FILESDIR}/*microvm*.json" usr/share/qemu/firmware
;;
IA32)
vinstall "Build/Ovmf${_arch}/RELEASE_GCC5/FV/OVMF.fd" 644 "usr/share/edk2/${_arch,,}"
vinstall "Build/Ovmf${_arch}/RELEASE_GCC5/FV/OVMF_CODE.fd" 644 "usr/share/edk2/${_arch,,}"
vinstall "Build/Ovmf${_arch}/RELEASE_GCC5/FV/OVMF_VARS.fd" 644 "usr/share/edk2/${_arch,,}"
vinstall "Build/Ovmf${_arch}-4mb/RELEASE_GCC5/FV/OVMF.fd" 644 "usr/share/edk2/${_arch,,}" OVMF.4m.fd
vinstall "Build/Ovmf${_arch}-4mb/RELEASE_GCC5/FV/OVMF_CODE.fd" 644 "usr/share/edk2/${_arch,,}" OVMF_CODE.4m.fd
vinstall "Build/Ovmf${_arch}-4mb/RELEASE_GCC5/FV/OVMF_VARS.fd" 644 "usr/share/edk2/${_arch,,}" OVMF_VARS.4m.fd
vinstall "Build/Ovmf${_arch}-secure/RELEASE_GCC5/FV/OVMF_CODE.fd" 644 "usr/share/edk2/${_arch,,}" OVMF_CODE.secure.fd
vinstall "Build/Ovmf${_arch}-secure-4mb/RELEASE_GCC5/FV/OVMF_CODE.fd" 644 "usr/share/edk2/${_arch,,}" OVMF_CODE.secure.4m.fd
vcopy "${FILESDIR}/*i386*.json" usr/share/qemu/firmware
;;
AARCH64)
vcopy "Build/ArmVirtQemu-${_arch}/RELEASE_GCC5/FV/*.fd" "usr/share/edk2/${_arch,,}"
# libvirt hardcodes this
ln -s ../edk2/aarch64/QEMU_CODE.fd "${DESTDIR}/usr/share/AAVMF/AAVMF_CODE.fd"
ln -s ../edk2/aarch64/QEMU_VARS.fd "${DESTDIR}/usr/share/AAVMF/AAVMF_VARS.fd"
vcopy "${FILESDIR}/*aarch64*.json" usr/share/qemu/firmware
;;
ARM)
vcopy "Build/ArmVirtQemu-${_arch}/RELEASE_GCC5/FV/*.fd" "usr/share/edk2/${_arch,,}"
# libvirt hardcodes this
ln -s ../edk2/arm/QEMU_CODE.fd "${DESTDIR}/usr/share/AAVMF/AAVMF32_CODE.fd"
ln -s ../edk2/arm/QEMU_VARS.fd "${DESTDIR}/usr/share/AAVMF/AAVMF32_VARS.fd"
vcopy "${FILESDIR}/*arm*.json" usr/share/qemu/firmware
;;
esac
done
# lxd hardcodes this
ln -s ./edk2 "${DESTDIR}/usr/share/OVMF"
vlicense License.txt
vlicense OvmfPkg/License.txt OvmfPkg.License.txt
}
edk2-shell_package() {
short_desc="EFI Development Kit II - Shell"
pkg_install() {
for _arch in "${_archs[@]}"; do
vmove "usr/share/edk2/${_arch,,}/Shell*.efi"
done
vlicense License.txt
}
}