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.
152 lines
5.4 KiB
152 lines
5.4 KiB
5 years ago
|
%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
|