# Maintainer: Thomas Bächler <thomas@archlinux.org>

_edk_ver=202002
pkgname=ovmf
pkgver=$_edk_ver
epoch=1
pkgrel=1
arch=('any')
pkgdesc="Tianocore UEFI firmware for qemu."
url="http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=EDK2"
license=('custom')
makedepends=('python' 'iasl' 'nasm' 'subversion' 'perl-libwww' 'bc')
_openssl_ver=1.1.1b # it should be 1.1.1d here but it has a compilation issue https://github.com/openssl/openssl/issues/9858
_edk2_tag=edk2-stable${_edk_ver}
source=(https://github.com/tianocore/edk2/archive/${_edk2_tag}.zip
        https://www.openssl.org/source/openssl-$_openssl_ver.tar.gz{,.asc}
        60-edk2-ovmf-i386.json
        60-edk2-ovmf-x86_64.json) # FS#64175 ; the file content should match https://git.qemu.org/?p=qemu.git;a=tree;f=pc-bios/descriptors
sha256sums=('280865c85cadf1d1d7029984b734d3245872a4aa631c6150025285e361e3df77'
            '5c557b023230413dfb0756f3137a13e6d726838ccd1430888ad15bfb2b43ea4b'
            'SKIP'
            '088830129f80643dfdee15af5ffddf2b309b062e3b2ee28faf2f01a43e656ba3'
            'b8f189f09593298c53e8b2afceadb17610b047fde51f4658e7373caeb3d0b856')
validpgpkeys=(8657ABB260F056B1E5190839D9C4D26D0E604491)
options=(!makeflags)
_toolchain_opt=GCC5

prepare() {
  # edk2 uses python everywhere, but expects python2
  #mkdir -p bin
  #ln -sf /usr/bin/python2 bin/python
  rm -rf "$srcdir"/edk2-${_edk2_tag}/CryptoPkg/Library/OpensslLib/openssl
  ln -sf "$srcdir"/openssl-$_openssl_ver $srcdir/edk2-${_edk2_tag}/CryptoPkg/Library/OpensslLib/openssl
}

build() {
  export PATH="${srcdir}/bin:$PATH"
  cd edk2-${_edk2_tag}
  make -C BaseTools
  export EDK_TOOLS_PATH="${srcdir}"/edk2-${_edk2_tag}/BaseTools
  . edksetup.sh BaseTools

  # 32bit build
  ./BaseTools/BinWrappers/PosixLike/build -t $_toolchain_opt -a IA32 -p OvmfPkg/OvmfPkgIa32.dsc -n $(nproc) -b RELEASE -D FD_SIZE_2MB -D NETWORK_IP6_ENABLE -D TPM2_ENABLE -D SECURE_BOOT_ENABLE -D HTTP_BOOT_ENABLE -D TLS_ENABLE

  # 64bit build
  ./BaseTools/BinWrappers/PosixLike/build -t $_toolchain_opt -a X64 -p OvmfPkg/OvmfPkgX64.dsc -n $(nproc) -b RELEASE -D FD_SIZE_2MB -D NETWORK_IP6_ENABLE -D TPM2_ENABLE -D SECURE_BOOT_ENABLE -D HTTP_BOOT_ENABLE -D TLS_ENABLE
}

package() {
  install -D -m644 "${srcdir}"/60-edk2-ovmf-i386.json "${pkgdir}"/usr/share/qemu/firmware/60-edk2-ovmf-i386.json
  install -D -m644 "${srcdir}"/edk2-${_edk2_tag}/Build/OvmfIa32/RELEASE_${_toolchain_opt}/FV/OVMF.fd "${pkgdir}"/usr/share/ovmf/ia32/OVMF.fd
  install -D -m644 "${srcdir}"/edk2-${_edk2_tag}/Build/OvmfIa32/RELEASE_${_toolchain_opt}/FV/OVMF_CODE.fd "${pkgdir}"/usr/share/ovmf/ia32/OVMF_CODE.fd
  install -D -m644 "${srcdir}"/edk2-${_edk2_tag}/Build/OvmfIa32/RELEASE_${_toolchain_opt}/FV/OVMF_VARS.fd "${pkgdir}"/usr/share/ovmf/ia32/OVMF_VARS.fd

  install -D -m644 "${srcdir}"/60-edk2-ovmf-x86_64.json "${pkgdir}"/usr/share/qemu/firmware/60-edk2-ovmf-x86_64.json
  install -D -m644 "${srcdir}"/edk2-${_edk2_tag}/Build/OvmfX64/RELEASE_${_toolchain_opt}/FV/OVMF.fd "${pkgdir}"/usr/share/ovmf/x64/OVMF.fd
  install -D -m644 "${srcdir}"/edk2-${_edk2_tag}/Build/OvmfX64/RELEASE_${_toolchain_opt}/FV/OVMF_CODE.fd "${pkgdir}"/usr/share/ovmf/x64/OVMF_CODE.fd
  install -D -m644 "${srcdir}"/edk2-${_edk2_tag}/Build/OvmfX64/RELEASE_${_toolchain_opt}/FV/OVMF_VARS.fd "${pkgdir}"/usr/share/ovmf/x64/OVMF_VARS.fd

  install -D -m644 "${srcdir}"/edk2-${_edk2_tag}/OvmfPkg/License.txt "${pkgdir}"/usr/share/licenses/ovmf/License.txt
}