You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
5.4 KiB
151 lines
5.4 KiB
%global debug_package %{nil} |
|
%global __python %{__python} |
|
%define GITDATE 201905 |
|
%define OPENSSLVER 1_1_1b |
|
|
|
Name: ovmf |
|
Version: %{GITDATE} |
|
Release: 1%{?dist} |
|
Summary: UEFI firmware for 64-bit virtual machines |
|
Group: Applications/Emulators |
|
License: BSD and OpenSSL and MIT |
|
URL: http://www.tianocore.org |
|
Source0: https://github.com/tianocore/edk2/archive/edk2-stable%{GITDATE}.tar.gz |
|
Source1: https://github.com/openssl/openssl/archive/OpenSSL_%{OPENSSLVER}.tar.gz |
|
Source2: ovmf-vars-generator |
|
Source3: edk2-ovmf-logo.bmp |
|
ExclusiveArch: x86_64 |
|
BuildRequires: python2-devel |
|
BuildRequires: libuuid-devel |
|
BuildRequires: /usr/bin/iasl |
|
BuildRequires: binutils gcc git |
|
BuildRequires: nasm |
|
BuildRequires: dosfstools |
|
BuildRequires: mtools |
|
BuildRequires: genisoimage |
|
BuildRequires: qemu-kvm >= 1.5.3-44 |
|
BuildRequires: kernel >= 3.10.0-52 |
|
BuildRequires: rpmdevtools |
|
|
|
|
|
%description |
|
EDK II is a modern, feature-rich, cross-platform firmware development |
|
environment for the UEFI and PI specifications. This package contains sample |
|
64-bit UEFI firmware builds for QEMU and KVM. |
|
|
|
|
|
%prep |
|
%setup -q -n edk2-edk2-stable%{GITDATE} |
|
tar xvf %{SOURCE1} -C CryptoPkg/Library/OpensslLib/ |
|
mv CryptoPkg/Library/OpensslLib/openssl-OpenSSL_%{OPENSSLVER}/* CryptoPkg/Library/OpensslLib/openssl/ |
|
cp %{SOURCE2} . |
|
cp %{SOURCE3} MdeModulePkg/Logo/Logo.bmp |
|
|
|
|
|
%build |
|
make -j32 -C BaseTools/ |
|
source ./edksetup.sh |
|
make -C "$EDK_TOOLS_PATH" |
|
|
|
SMP_MFLAGS="%{?_smp_mflags}" |
|
if [[ x"$SMP_MFLAGS" = x-j* ]]; then |
|
CC_FLAGS="$CC_FLAGS -n ${SMP_MFLAGS#-j}" |
|
elif [ -n "%{?jobs}" ]; then |
|
CC_FLAGS="$CC_FLAGS -n %{?jobs}" |
|
fi |
|
|
|
CC_FLAGS="$CC_FLAGS --cmd-len=65536 -t GCC48 -b DEBUG --hash" |
|
|
|
# Build with SB but without SMM; include UEFI shell. |
|
build ${CC_FLAGS} -D FD_SIZE_4MB -a X64 -p OvmfPkg/OvmfPkgX64.dsc -D SECURE_BOOT_ENABLE |
|
# Build with SB and SMM; exclude UEFI shell. |
|
build -D SECURE_BOOT_ENABLE -D EXCLUDE_SHELL_FROM_FD ${CC_FLAGS} -a IA32 -a X64 -p OvmfPkg/OvmfPkgIa32X64.dsc -D SMM_REQUIRE -D FD_SIZE_4MB |
|
# Sanity check: the varstore templates must be identical. |
|
cmp Build/OvmfX64/DEBUG_GCC4?/FV/OVMF_VARS.fd Build/Ovmf3264/DEBUG_GCC4?/FV/OVMF_VARS.fd |
|
|
|
# Prepare an ISO image that boots the UEFI shell. |
|
( |
|
UEFI_SHELL_BINARY=Build/Ovmf3264/DEBUG_GCC48/X64/Shell.efi |
|
ENROLLER_BINARY=Build/Ovmf3264/DEBUG_GCC48/X64/EnrollDefaultKeys.efi |
|
UEFI_SHELL_IMAGE=uefi_shell.img |
|
ISO_IMAGE=UefiShell.iso |
|
|
|
UEFI_SHELL_BINARY_BNAME=$(basename -- "$UEFI_SHELL_BINARY") |
|
UEFI_SHELL_SIZE=$(stat --format=%s -- "$UEFI_SHELL_BINARY") |
|
ENROLLER_SIZE=$(stat --format=%s -- "$ENROLLER_BINARY") |
|
|
|
# add 1MB then 10% for metadata |
|
UEFI_SHELL_IMAGE_KB=$(( |
|
(UEFI_SHELL_SIZE + ENROLLER_SIZE + 1 * 1024 * 1024) * 11 / 10 / 1024 |
|
)) |
|
|
|
# create non-partitioned FAT image |
|
rm -f -- "$UEFI_SHELL_IMAGE" |
|
mkdosfs -C "$UEFI_SHELL_IMAGE" -n UEFI_SHELL -- "$UEFI_SHELL_IMAGE_KB" |
|
|
|
# copy the shell binary into the FAT image |
|
export MTOOLS_SKIP_CHECK=1 |
|
mmd -i "$UEFI_SHELL_IMAGE" ::efi |
|
mmd -i "$UEFI_SHELL_IMAGE" ::efi/boot |
|
mcopy -i "$UEFI_SHELL_IMAGE" "$UEFI_SHELL_BINARY" ::efi/boot/bootx64.efi |
|
mcopy -i "$UEFI_SHELL_IMAGE" "$ENROLLER_BINARY" :: |
|
mdir -i "$UEFI_SHELL_IMAGE" -/ :: |
|
|
|
# build ISO with FAT image file as El Torito EFI boot image |
|
genisoimage -input-charset ASCII -J -rational-rock \ |
|
-efi-boot "$UEFI_SHELL_IMAGE" -no-emul-boot \ |
|
-o "$ISO_IMAGE" -- "$UEFI_SHELL_IMAGE" |
|
) |
|
|
|
# Enroll the default certificates in a separate variable store template. Base |
|
# RHEL7 qemu-kvm does not emulate SMM, but we don't need SMM for the enrollment |
|
# here. |
|
chmod +x ./ovmf-vars-generator |
|
./ovmf-vars-generator --verbose --verbose \ |
|
--qemu-binary /usr/bin/qemu-system-x86_64 \ |
|
--ovmf-binary Build/OvmfX64/DEBUG_GCC4?/FV/OVMF_CODE.fd \ |
|
--ovmf-template-vars Build/OvmfX64/DEBUG_GCC4?/FV/OVMF_VARS.fd \ |
|
--uefi-shell-iso UefiShell.iso \ |
|
--skip-testing \ |
|
--disable-smm \ |
|
OVMF_VARS.secboot.fd |
|
|
|
|
|
%install |
|
|
|
copy_license() { |
|
install -m 0644 $1 $RPM_BUILD_ROOT%{_docdir}/%{name}/Licenses/$2-License.txt |
|
} |
|
|
|
mkdir -p $RPM_BUILD_ROOT%{_docdir}/%{name}/Licenses |
|
copy_license License.txt edk2 |
|
copy_license OvmfPkg/License.txt OvmfPkg |
|
|
|
mkdir -p $RPM_BUILD_ROOT%{_datadir}/OVMF |
|
|
|
install -m 0644 Build/OvmfX64/DEBUG_GCC4?/FV/OVMF_CODE.fd $RPM_BUILD_ROOT%{_datadir}/OVMF/OVMF_CODE.fd |
|
install -m 0644 Build/Ovmf3264/DEBUG_GCC4?/FV/OVMF_CODE.fd $RPM_BUILD_ROOT%{_datadir}/OVMF/OVMF_CODE.secboot.fd |
|
install -m 0644 Build/OvmfX64/DEBUG_GCC4?/FV/OVMF_VARS.fd $RPM_BUILD_ROOT%{_datadir}/OVMF/OVMF_VARS.fd |
|
install -m 0644 OVMF_VARS.secboot.fd $RPM_BUILD_ROOT%{_datadir}/OVMF/OVMF_VARS.secboot.fd |
|
install -m 0644 UefiShell.iso $RPM_BUILD_ROOT%{_datadir}/OVMF/UefiShell.iso |
|
install -m 0644 OvmfPkg/README $RPM_BUILD_ROOT%{_docdir}/%{name}/README |
|
|
|
copy_license CryptoPkg/Library/OpensslLib/openssl/LICENSE OpensslLib |
|
|
|
|
|
%files |
|
%defattr(-,root,root,-) |
|
%dir %{_docdir}/%{name}/Licenses |
|
%doc %{_docdir}/%{name}/Licenses/edk2-License.txt |
|
%doc %{_docdir}/%{name}/Licenses/OvmfPkg-License.txt |
|
%doc %{_docdir}/%{name}/Licenses/OpensslLib-License.txt |
|
%doc %{_docdir}/%{name}/README |
|
%dir %{_datadir}/OVMF/ |
|
%{_datadir}/OVMF/OVMF_CODE.fd |
|
%{_datadir}/OVMF/OVMF_CODE.secboot.fd |
|
%{_datadir}/OVMF/OVMF_VARS.fd |
|
%{_datadir}/OVMF/OVMF_VARS.secboot.fd |
|
%{_datadir}/OVMF/UefiShell.iso |
|
|
|
|
|
%changelog
|
|
|