# Maintainer : Mark Weiman # Contributor: David Hummel # Contributor: Keshav Amburay <(the ddoott ridikulus ddoott rat) (aatt) (gemmaeiil) (ddoott) (ccoomm)> # Contributor: Andre Osku Schmidt (oskude) <(andre.osku.schmidt) (aatt) (gemmaeiil) (ddoott) (ccoomm)> ################ _TIANOCORE_GIT_URL="https://github.com/tianocore/edk2" _TIANO_DIR_="edk2" ################ ################ _UDK_OVMF_X64_PKG="OvmfX64" _UDK_OVMF_X64_DSC="OvmfPkg/OvmfPkgX64.dsc" _UDK_TARGET="RELEASE" _COMPILER="GCC49" ################ ################ _OPENSSL_VERSION="1.1.0e" ################ _pkgname="ovmf" pkgname="${_pkgname}-git" pkgver=21726.vUDK2017 pkgrel=1 pkgdesc="UEFI Firmware (OVMF) with Secure Boot Support - for Virtual Machines (QEMU) - from Tianocore EDK2 - GIT Version" url="https://tianocore.github.io/ovmf/" arch=('x86_64' 'i686') license=('BSD') makedepends=('git' 'python2' 'iasl' 'nasm') options=('!strip' 'docs' '!makeflags') conflicts=('ovmf' 'ovmf-bin' 'ovmf-svn') provides=('ovmf' 'ovmf-bin' 'ovmf-svn') install="${_pkgname}.install" source=("${_TIANO_DIR_}::git+https://github.com/tianocore/edk2.git#tag=vUDK2017" "https://www.openssl.org/source/openssl-${_OPENSSL_VERSION}.tar.gz" ) sha1sums=('SKIP' '8bbbaf36feffadd3cb9110912a8192e665ebca4b') noextract=("openssl-${_OPENSSL_VERSION}.tar.gz") pkgver() { cd "${srcdir}/${_TIANO_DIR_}/" echo "$(git rev-list --count HEAD).$(git describe --always)" | sed -e 's|-|\.|g' } _bail_out() { if [[ "${CARCH}" != "x86_64" ]]; then echo "${pkgname} package can be built only in a x86_64 system. Exiting." exit 1 fi } _setup_env_vars() { msg "Setup UDK PATH ENV variables" export _UDK_DIR="${srcdir}/${_TIANO_DIR_}" export EDK_TOOLS_PATH="${_UDK_DIR}/BaseTools" } _prepare_tianocore_sources() { cd "${_UDK_DIR}/" msg "Cleanup UDK config files" rm -rf "${_UDK_DIR}/Build/" || true rm -rf "${_UDK_DIR}/Conf/" || true mkdir -p "${_UDK_DIR}/Conf/" mkdir -p "${_UDK_DIR}/Build/" msg "Use python2 for UDK BaseTools" sed 's|python |python2 |g' -i "${EDK_TOOLS_PATH}/BinWrappers/PosixLike"/* || true sed 's|python |python2 |g' -i "${EDK_TOOLS_PATH}/Tests/GNUmakefile" msg "Fix GCC Warning as error" sed 's|-Werror |-Wno-error -Wno-unused-but-set-variable |g' -i "${EDK_TOOLS_PATH}/Source/C/Makefiles/header.makefile" || true sed 's|-Werror |-Wno-error -Wno-unused-but-set-variable |g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true msg "Remove GCC -g debug option and add -O0 -mabi=ms -maccumulate-outgoing-args" sed 's|DEFINE GCC_ALL_CC_FLAGS = -g |DEFINE GCC_ALL_CC_FLAGS = -O0 -mabi=ms -maccumulate-outgoing-args |g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true sed 's|DEFINE GCC44_ALL_CC_FLAGS = -g |DEFINE GCC44_ALL_CC_FLAGS = -O0 -mabi=ms -maccumulate-outgoing-args |g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true msg "Fix UDK Target Platform" sed "s|ACTIVE_PLATFORM = Nt32Pkg/Nt32Pkg.dsc|ACTIVE_PLATFORM = ${_UDK_OVMF_X64_DSC}|g" -i "${EDK_TOOLS_PATH}/Conf/target.template" || true sed "s|TARGET = DEBUG|TARGET = ${_UDK_TARGET}|g" -i "${EDK_TOOLS_PATH}/Conf/target.template" || true sed "s|TOOL_CHAIN_TAG = MYTOOLS|TOOL_CHAIN_TAG = ${_COMPILER}|g" -i "${EDK_TOOLS_PATH}/Conf/target.template" || true sed "s|IA32|X64|g" -i "${EDK_TOOLS_PATH}/Conf/target.template" || true chmod 0755 "${_UDK_DIR}/BaseTools/BuildEnv" } _prepare_openssl_udk_dir() { cd "${_UDK_DIR}/" msg "Download OpenSSL ${_OPENSSL_VERSION} Sources" bsdtar -C "${_UDK_DIR}/CryptoPkg/Library/OpensslLib/" -xf "${srcdir}/openssl-${_OPENSSL_VERSION}.tar.gz" mv "${_UDK_DIR}/CryptoPkg/Library/OpensslLib/openssl-${_OPENSSL_VERSION}" "${_UDK_DIR}/CryptoPkg/Library/OpensslLib/openssl" echo } prepare() { _bail_out _setup_env_vars msg "Prepare Tianocore Sources" _prepare_tianocore_sources echo msg "Prepare OpenSSL ${_OPENSSL_VERSION} Sources" _prepare_openssl_udk_dir echo } build() { _bail_out _setup_env_vars cd "${_UDK_DIR}/" msg "Unset all compiler FLAGS" unset CFLAGS unset CPPFLAGS unset CXXFLAGS unset LDFLAGS unset MAKEFLAGS msg "Setup UDK Environment" source "${_UDK_DIR}/BaseTools/BuildEnv" BaseTools echo msg "Compile UDK BaseTools" make -C "${EDK_TOOLS_PATH}" echo if [[ "${CARCH}" == "x86_64" ]]; then msg "Unset all compiler FLAGS" unset CFLAGS unset CPPFLAGS unset CXXFLAGS unset LDFLAGS unset MAKEFLAGS msg "Compile OVMF X64 binary" "${_UDK_DIR}/OvmfPkg/build.sh" -a "X64" -b "${_UDK_TARGET}" -t "${_COMPILER}" -D "SECURE_BOOT_ENABLE=TRUE" -D "FD_SIZE_2MB" --enable-flash echo fi msg "Unset all compiler FLAGS" unset CFLAGS unset CPPFLAGS unset CXXFLAGS unset LDFLAGS unset MAKEFLAGS } package() { _setup_env_vars if [[ "${CARCH}" == "x86_64" ]]; then msg "Install the OVMF X64 image" install -d "${pkgdir}/usr/share/ovmf/x64/" install -D -m0644 "${_UDK_DIR}/Build/${_UDK_OVMF_X64_PKG}/${_UDK_TARGET}_${_COMPILER}/FV/OVMF.fd" "${pkgdir}/usr/share/ovmf/x64/ovmf_x64.bin" install -D -m0644 "${_UDK_DIR}/Build/${_UDK_OVMF_X64_PKG}/${_UDK_TARGET}_${_COMPILER}/FV/OVMF_CODE.fd" "${pkgdir}/usr/share/ovmf/x64/ovmf_code_x64.bin" install -D -m0644 "${_UDK_DIR}/Build/${_UDK_OVMF_X64_PKG}/${_UDK_TARGET}_${_COMPILER}/FV/OVMF_VARS.fd" "${pkgdir}/usr/share/ovmf/x64/ovmf_vars_x64.bin" fi }