78c770f
# https://fedoraproject.org/wiki/Changes/SetBuildFlagsBuildCheck
78c770f
# breaks cross-building
78c770f
%undefine _auto_set_build_flags
78c770f
0c0d315
# actual firmware builds support cross-compiling.  edk2-tools
0c0d315
# in theory should build everywhere without much trouble, but
0c0d315
# in practice the edk2 build system barfs on archs it doesn't know
0c0d315
# (such as ppc), so lets limit things to the known-good ones.
ff60520
ExclusiveArch: x86_64 aarch64 riscv64
0c0d315
4bec430
# edk2-stable202308
78febee
%define GITDATE        20231122
78febee
%define GITCOMMIT      8736b8fdca85
4bec430
%define TOOLCHAIN      GCC
4bec430
78febee
%define PLATFORMS_COMMIT 10e2eb030de3
78febee
4bec430
%define OPENSSL_VER    3.0.7
4bec430
%define OPENSSL_COMMIT 3adb22b68e9fe61fc4863c2d2dc6cc6fc094b005
4bec430
70f4e44
%define DBXDATE        20230509
5c1f07c
3e96cc2
# Undefine this to get *HUGE* (50MB+) verbose build logs
3e96cc2
%define silent --silent
3e96cc2
b20b83c
%if %{defined rhel}
0c0d315
%define build_ovmf 0
0c0d315
%define build_aarch64 0
568a37b
%ifarch x86_64
0c0d315
  %define build_ovmf 1
568a37b
%endif
568a37b
%ifarch aarch64
0c0d315
  %define build_aarch64 1
568a37b
%endif
11b1de7
%define build_riscv64 0
0c0d315
%else
0c0d315
%define build_ovmf 1
0c0d315
%define build_aarch64 1
11b1de7
%define build_riscv64 1
568a37b
%endif
568a37b
0c0d315
%global softfloat_version 20180726-gitb64af41
0c0d315
%define cross %{defined fedora}
00a2012
%define disable_werror %{defined fedora}
0c0d315
0c0d315
59c3cdc
Name:       edk2
ec5ec96
Version:    %{GITDATE}
e3a409f
Release:    %autorelease
59c3cdc
Summary:    UEFI firmware for 64-bit virtual machines
37554de
License:    Apache-2.0 AND (BSD-2-Clause OR GPL-2.0-or-later) AND BSD-2-Clause-Patent AND BSD-3-Clause AND BSD-4-Clause AND ISC AND MIT AND LicenseRef-Fedora-Public-Domain
59c3cdc
URL:        http://www.tianocore.org
59c3cdc
59c3cdc
# The source tarball is created using following commands:
5eb552e
# COMMIT=bb1bba3d7767
59c3cdc
# git archive --format=tar --prefix=edk2-$COMMIT/ $COMMIT \
59c3cdc
# | xz -9ev >/tmp/edk2-$COMMIT.tar.xz
59c3cdc
Source0: edk2-%{GITCOMMIT}.tar.xz
59c3cdc
Source1: ovmf-whitepaper-c770f8c.txt
4bec430
Source2: openssl-rhel-%{OPENSSL_COMMIT}.tar.xz
8e960a7
Source3: softfloat-%{softfloat_version}.tar.xz
4bec430
Source4: edk2-platforms-%{PLATFORMS_COMMIT}.tar.xz
4e212b2
Source5: jansson-2.13.1.tar.bz2
b50b012
Source6: README.experimental
7bc8400
8e960a7
# json description files
06a1ed3
Source10: 50-edk2-aarch64-qcow2.json
06a1ed3
Source11: 51-edk2-aarch64-raw.json
06a1ed3
Source12: 52-edk2-aarch64-verbose-qcow2.json
06a1ed3
Source13: 53-edk2-aarch64-verbose-raw.json
8e960a7
1cf00df
Source20: 50-edk2-arm-verbose.json
8e960a7
1cf00df
Source30: 30-edk2-ovmf-ia32-sb-enrolled.json
1cf00df
Source31: 40-edk2-ovmf-ia32-sb.json
4405543
Source32: 50-edk2-ovmf-ia32-nosb.json
8e960a7
29f4777
Source40: 30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json
29f4777
Source41: 31-edk2-ovmf-2m-raw-x64-sb-enrolled.json
29f4777
Source42: 40-edk2-ovmf-4m-qcow2-x64-sb.json
29f4777
Source43: 41-edk2-ovmf-2m-raw-x64-sb.json
29f4777
Source44: 50-edk2-ovmf-x64-microvm.json
29f4777
Source45: 50-edk2-ovmf-4m-qcow2-x64-nosb.json
29f4777
Source46: 51-edk2-ovmf-2m-raw-x64-nosb.json
29f4777
Source47: 60-edk2-ovmf-x64-amdsev.json
29f4777
Source48: 60-edk2-ovmf-x64-inteltdx.json
674b3c8
580b0e9
Source50: 50-edk2-riscv-qcow2.json
580b0e9
e1a8a9c
# https://gitlab.com/kraxel/edk2-build-config
e1a8a9c
Source80: edk2-build.py
e1a8a9c
Source81: edk2-build.fedora
4e212b2
Source82: edk2-build.fedora.platforms
4e212b2
Source83: edk2-build.rhel-9
e1a8a9c
5c1f07c
Source90: DBXUpdate-%{DBXDATE}.x64.bin
5c1f07c
Source91: DBXUpdate-%{DBXDATE}.ia32.bin
75ee74a
ced5d89
Patch0001: 0001-BaseTools-do-not-build-BrotliCompress-RH-only.patch
ced5d89
Patch0002: 0002-MdeModulePkg-remove-package-private-Brotli-include-p.patch
0e05742
Patch0003: 0003-MdeModulePkg-TerminalDxe-set-xterm-resolution-on-mod.patch
0e05742
Patch0004: 0004-OvmfPkg-take-PcdResizeXterm-from-the-QEMU-command-li.patch
0e05742
Patch0005: 0005-ArmVirtPkg-take-PcdResizeXterm-from-the-QEMU-command.patch
0e05742
Patch0006: 0006-OvmfPkg-enable-DEBUG_VERBOSE-RHEL-only.patch
0e05742
Patch0007: 0007-OvmfPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuVide.patch
0e05742
Patch0008: 0008-ArmVirtPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuR.patch
0e05742
Patch0009: 0009-OvmfPkg-QemuRamfbDxe-Do-not-report-DXE-failure-on-Aa.patch
0e05742
Patch0010: 0010-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch
4bec430
Patch0011: 0011-OvmfPkg-QemuKernelLoaderFsDxe-suppress-error-on-no-k.patch
4bec430
Patch0012: 0012-SecurityPkg-Tcg2Dxe-suppress-error-on-no-swtpm-in-si.patch
4bec430
Patch0013: 0013-UefiCpuPkg-MpInitLib-fix-apic-mode-for-cpu-hotplug.patch
4bec430
Patch0015: 0015-CryptoPkg-CrtLib-add-stat.h.patch
4bec430
Patch0016: 0016-CryptoPkg-CrtLib-add-access-open-read-write-close-sy.patch
78febee
Patch0017: 0017-OvmfPkg-set-PcdVariableStoreSize-PcdMaxVolatileVaria.patch
994feb5
%if 0%{?fedora} >= 38 || 0%{?rhel} >= 10
994feb5
Patch0018: 0018-silence-.-has-a-LOAD-segment-with-RWX-permissions-wa.patch
994feb5
%endif
fc6960f
Patch0019: 0019-ArmVirtPkg-add-runtime-option-to-enable-disable-Memo.patch
0ccbe47
e3d786a
0c0d315
# python3-devel and libuuid-devel are required for building tools.
0c0d315
# python3-devel is also needed for varstore template generation and
0c0d315
# verification with "ovmf-vars-generator".
0c0d315
BuildRequires:  python3-devel
49ef316
BuildRequires:  libuuid-devel
0c0d315
BuildRequires:  /usr/bin/iasl
0c0d315
BuildRequires:  binutils gcc git gcc-c++ make
3cf8c78
BuildRequires:  qemu-img
0c0d315
59db9c4
# openssl configure
59db9c4
BuildRequires:  perl(FindBin)
59db9c4
BuildRequires:  perl(IPC::Cmd)
59db9c4
BuildRequires:  perl(File::Compare)
59db9c4
BuildRequires:  perl(File::Copy)
59db9c4
BuildRequires:  perl(JSON)
59db9c4
0c0d315
%if %{build_ovmf}
0c0d315
# Only OVMF includes 80x86 assembly files (*.nasm*).
b0c3aff
BuildRequires:  nasm
0c0d315
0c0d315
# Only OVMF includes the Secure Boot feature, for which we need to separate out
0c0d315
# the UEFI shell.
6afa0e0
BuildRequires:  dosfstools
6afa0e0
BuildRequires:  mtools
0c0d315
BuildRequires:  xorriso
9f191dd
0c0d315
# For generating the variable store template with the default certificates
bd85039
# enrolled.
2c19b91
BuildRequires:  python3-virt-firmware >= 23.5
1db20ef
0c0d315
# endif build_ovmf
0c0d315
%endif
0c0d315
0c0d315
%if %{cross}
0c0d315
BuildRequires:  gcc-aarch64-linux-gnu
0c0d315
BuildRequires:  gcc-arm-linux-gnu
0c0d315
BuildRequires:  gcc-x86_64-linux-gnu
11b1de7
BuildRequires:  gcc-riscv64-linux-gnu
0c0d315
%endif
0c0d315
0c0d315
0c0d315
0c0d315
%package ovmf
0c0d315
Summary:    UEFI firmware for x86_64 virtual machines
0c0d315
BuildArch:  noarch
0c0d315
Provides:   OVMF = %{version}-%{release}
0c0d315
Obsoletes:  OVMF < 20180508-100.gitee3198e672e2.el7
0c0d315
04a4f00
# need libvirt version with qcow2 support
04a4f00
Conflicts:  libvirt-daemon-driver-qemu < 9.7.0
04a4f00
0c0d315
# OVMF includes the Secure Boot and IPv6 features; it has a builtin OpenSSL
0c0d315
# library.
0c0d315
Provides:   bundled(openssl) = %{OPENSSL_VER}
fbd6ccd
License:    Apache-2.0 AND (BSD-2-Clause OR GPL-2.0-or-later) AND BSD-2-Clause-Patent AND BSD-4-Clause AND ISC AND LicenseRef-Fedora-Public-Domain
0c0d315
0c0d315
# URL taken from the Maintainers.txt file.
0c0d315
URL:        http://www.tianocore.org/ovmf/
0c0d315
0c0d315
%description ovmf
0c0d315
OVMF (Open Virtual Machine Firmware) is a project to enable UEFI support for
0c0d315
Virtual Machines. This package contains a sample 64-bit UEFI firmware for QEMU
0c0d315
and KVM.
0c0d315
0c0d315
0c0d315
%package aarch64
0c0d315
Summary:    UEFI firmware for aarch64 virtual machines
0c0d315
BuildArch:  noarch
0c0d315
Provides:   AAVMF = %{version}-%{release}
0c0d315
Obsoletes:  AAVMF < 20180508-100.gitee3198e672e2.el7
0c0d315
06a1ed3
# need libvirt version with qcow2 support
04a4f00
Conflicts:  libvirt-daemon-driver-qemu < 9.7.0
06a1ed3
0c0d315
# No Secure Boot for AAVMF yet, but we include OpenSSL for the IPv6 stack.
0c0d315
Provides:   bundled(openssl) = %{OPENSSL_VER}
fbd6ccd
License:    Apache-2.0 AND (BSD-2-Clause OR GPL-2.0-or-later) AND BSD-2-Clause-Patent AND BSD-4-Clause AND ISC AND LicenseRef-Fedora-Public-Domain
0c0d315
0c0d315
# URL taken from the Maintainers.txt file.
0c0d315
URL:        https://github.com/tianocore/tianocore.github.io/wiki/ArmVirtPkg
0c0d315
0c0d315
%description aarch64
0c0d315
AAVMF (ARM Architecture Virtual Machine Firmware) is an EFI Development Kit II
0c0d315
platform that enables UEFI support for QEMU/KVM ARM Virtual Machines. This
0c0d315
package contains a 64-bit build.
7bc8400
9f191dd
9f191dd
%package tools
49ef316
Summary:        EFI Development Kit II Tools
cf1130a
License:        BSD-2-Clause-Patent AND LicenseRef-Fedora-Public-Domain
0c0d315
URL:            https://github.com/tianocore/tianocore.github.io/wiki/BaseTools
9f191dd
%description tools
9f191dd
This package provides tools that are needed to
9f191dd
build EFI executables and ROMs using the GNU tools.
9f191dd
9f191dd
%package tools-doc
49ef316
Summary:        Documentation for EFI Development Kit II Tools
b0c3aff
BuildArch:      noarch
0c0d315
License:        BSD-2-Clause-Patent
0c0d315
URL:            https://github.com/tianocore/tianocore.github.io/wiki/BaseTools
9f191dd
%description tools-doc
9f191dd
This package documents the tools that are needed to
9f191dd
build EFI executables and ROMs using the GNU tools.
9f191dd
0c0d315
%description
0c0d315
EDK II is a modern, feature-rich, cross-platform firmware development
0c0d315
environment for the UEFI and PI specifications. This package contains sample
0c0d315
64-bit UEFI firmware builds for QEMU and KVM.
0792202
b0c3aff
0c0d315
%if %{defined fedora}
ad70d15
%package ovmf-ia32
ad70d15
Summary:        Open Virtual Machine Firmware
c722a2a
License:        Apache-2.0 AND BSD-2-Clause-Patent AND BSD-4-Clause AND ISC AND LicenseRef-Fedora-Public-Domain
83f3ca8
Provides:       bundled(openssl)
ad70d15
BuildArch:      noarch
ad70d15
%description ovmf-ia32
ad70d15
EFI Development Kit II
ad70d15
Open Virtual Machine Firmware (ia32)
ad70d15
2568b6a
%package ovmf-xen
2568b6a
Summary:        Open Virtual Machine Firmware, Xen build
c722a2a
License:        Apache-2.0 AND BSD-2-Clause-Patent AND BSD-4-Clause AND ISC AND LicenseRef-Fedora-Public-Domain
2568b6a
Provides:       bundled(openssl)
2568b6a
BuildArch:      noarch
2568b6a
%description ovmf-xen
2568b6a
EFI Development Kit II
2568b6a
Open Virtual Machine Firmware (Xen build)
2568b6a
6180cbc
%package experimental
92cf2a3
Summary:        Open Virtual Machine Firmware, experimental builds
c722a2a
License:        Apache-2.0 AND BSD-2-Clause-Patent AND BSD-4-Clause AND ISC AND LicenseRef-Fedora-Public-Domain
92cf2a3
Provides:       bundled(openssl)
6180cbc
Obsoletes:      edk2-ovmf-experimental < 20230825
92cf2a3
BuildArch:      noarch
6180cbc
%description experimental
92cf2a3
EFI Development Kit II
92cf2a3
Open Virtual Machine Firmware (experimental builds)
92cf2a3
d31a567
%package arm
d31a567
Summary:        ARM Virtual Machine Firmware
d31a567
BuildArch:      noarch
37554de
License:        Apache-2.0 AND (BSD-2-Clause OR GPL-2.0-or-later) AND BSD-2-Clause-Patent AND BSD-3-Clause AND BSD-4-Clause AND ISC AND LicenseRef-Fedora-Public-Domain
d31a567
%description arm
d31a567
EFI Development Kit II
5237d70
ARMv7 UEFI Firmware
0c0d315
11b1de7
%package riscv64
11b1de7
Summary:        RISC-V Virtual Machine Firmware
11b1de7
BuildArch:      noarch
fbd6ccd
License:        Apache-2.0 AND (BSD-2-Clause OR GPL-2.0-or-later) AND BSD-2-Clause-Patent AND LicenseRef-Fedora-Public-Domain
04a4f00
04a4f00
# need libvirt version with qcow2 support
04a4f00
Conflicts:  libvirt-daemon-driver-qemu < 9.7.0
04a4f00
11b1de7
%description riscv64
11b1de7
EFI Development Kit II
11b1de7
RISC-V UEFI Firmware
11b1de7
4e212b2
%package ext4
4e212b2
Summary:        Ext4 filesystem driver
cb1564b
License:        Apache-2.0 AND BSD-2-Clause-Patent
4e212b2
BuildArch:      noarch
4e212b2
%description ext4
4e212b2
EFI Development Kit II
4e212b2
Ext4 filesystem driver
4e212b2
0c0d315
%package tools-python
0c0d315
Summary:        EFI Development Kit II Tools
0c0d315
Requires:       python3
0c0d315
BuildArch:      noarch
0c0d315
0c0d315
%description tools-python
0c0d315
This package provides tools that are needed to build EFI executables
0c0d315
and ROMs using the GNU tools.  You do not need to install this package;
0c0d315
you probably want to install edk2-tools only.
0c0d315
# endif fedora
568a37b
%endif
d31a567
b0c3aff
0c0d315
9f191dd
%prep
59c3cdc
# We needs some special git config options that %%autosetup won't give us.
59c3cdc
# We init the git dir ourselves, then tell %%autosetup not to blow it away.
59c3cdc
%setup -q -n edk2-%{GITCOMMIT}
59c3cdc
git init -q
59c3cdc
git config core.whitespace cr-at-eol
59c3cdc
git config am.keepcr true
59c3cdc
# -T is passed to %%setup to not re-extract the archive
59c3cdc
# -D is passed to %%setup to not delete the existing archive dir
59c3cdc
%autosetup -T -D -n edk2-%{GITCOMMIT} -S git_am
3485002
3549884
cp -a -- %{SOURCE1} .
59c3cdc
tar -C CryptoPkg/Library/OpensslLib -a -f %{SOURCE2} -x
8e960a7
# extract softfloat into place
8e960a7
tar -xf %{SOURCE3} --strip-components=1 --directory ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3/
4e212b2
tar -xf %{SOURCE4} --strip-components=1 "*/Drivers" "*/Features" "*/Platform" "*/Silicon"
4e212b2
tar -xf %{SOURCE5} --strip-components=1 --directory RedfishPkg/Library/JsonLib/jansson
0b33579
# include paths pointing to unused submodules
0b33579
mkdir -p MdePkg/Library/MipiSysTLib/mipisyst/library/include
78febee
mkdir -p CryptoPkg/Library/MbedTlsLib/mbedtls/include
78febee
mkdir -p CryptoPkg/Library/MbedTlsLib/mbedtls/include/mbedtls
78febee
mkdir -p CryptoPkg/Library/MbedTlsLib/mbedtls/library
7bc8400
0c0d315
# Done by %setup, but we do not use it for the auxiliary tarballs
0c0d315
chmod -Rf a+rX,u+w,g-w,o-w .
0c0d315
8e960a7
cp -a -- \
b50b012
   %{SOURCE6} \
06a1ed3
   %{SOURCE10} %{SOURCE11} %{SOURCE12} %{SOURCE13} \
8e960a7
   %{SOURCE20} \
8e960a7
   %{SOURCE30} %{SOURCE31} %{SOURCE32} \
29f4777
   %{SOURCE40} %{SOURCE41} %{SOURCE42} %{SOURCE43} %{SOURCE44} \
29f4777
   %{SOURCE45} %{SOURCE46} %{SOURCE47} %{SOURCE48} \
580b0e9
   %{SOURCE50} \
4e212b2
   %{SOURCE80} %{SOURCE81} %{SOURCE82} %{SOURCE83} \
79e9a4d
   %{SOURCE90} %{SOURCE91} \
8e960a7
   .
7407978
b0c3aff
%build
568a37b
6afa0e0
build_iso() {
6afa0e0
  dir="$1"
6afa0e0
  UEFI_SHELL_BINARY=${dir}/Shell.efi
6afa0e0
  ENROLLER_BINARY=${dir}/EnrollDefaultKeys.efi
6afa0e0
  UEFI_SHELL_IMAGE=uefi_shell.img
2fb8072
  ISO_IMAGE=${dir}/UefiShell.iso
6afa0e0
6afa0e0
  UEFI_SHELL_BINARY_BNAME=$(basename -- "$UEFI_SHELL_BINARY")
6afa0e0
  UEFI_SHELL_SIZE=$(stat --format=%s -- "$UEFI_SHELL_BINARY")
6afa0e0
  ENROLLER_SIZE=$(stat --format=%s -- "$ENROLLER_BINARY")
6afa0e0
6afa0e0
  # add 1MB then 10% for metadata
6afa0e0
  UEFI_SHELL_IMAGE_KB=$((
6afa0e0
    (UEFI_SHELL_SIZE + ENROLLER_SIZE + 1 * 1024 * 1024) * 11 / 10 / 1024
6afa0e0
  ))
6afa0e0
6afa0e0
  # create non-partitioned FAT image
6afa0e0
  rm -f -- "$UEFI_SHELL_IMAGE"
6afa0e0
  mkdosfs -C "$UEFI_SHELL_IMAGE" -n UEFI_SHELL -- "$UEFI_SHELL_IMAGE_KB"
6afa0e0
6afa0e0
  # copy the shell binary into the FAT image
6afa0e0
  export MTOOLS_SKIP_CHECK=1
6afa0e0
  mmd   -i "$UEFI_SHELL_IMAGE"                       ::efi
6afa0e0
  mmd   -i "$UEFI_SHELL_IMAGE"                       ::efi/boot
6afa0e0
  mcopy -i "$UEFI_SHELL_IMAGE"  "$UEFI_SHELL_BINARY" ::efi/boot/bootx64.efi
6afa0e0
  mcopy -i "$UEFI_SHELL_IMAGE"  "$ENROLLER_BINARY"   ::
6afa0e0
  mdir  -i "$UEFI_SHELL_IMAGE"  -/                   ::
6afa0e0
6afa0e0
  # build ISO with FAT image file as El Torito EFI boot image
6afa0e0
  mkisofs -input-charset ASCII -J -rational-rock \
6afa0e0
    -e "$UEFI_SHELL_IMAGE" -no-emul-boot \
6afa0e0
    -o "$ISO_IMAGE" "$UEFI_SHELL_IMAGE"
6afa0e0
}
6afa0e0
de5cbe7
export EXTRA_OPTFLAGS="%{optflags}"
de5cbe7
export EXTRA_LDFLAGS="%{__global_ldflags}"
abc3986
export RELEASE_DATE="$(echo %{GITDATE} | sed -e 's|\(....\)\(..\)\(..\)|\2/\3/\1|')"
de5cbe7
19b27c9
touch OvmfPkg/AmdSev/Grub/grub.efi   # dummy
4bec430
python3 CryptoPkg/Library/OpensslLib/configure.py
19b27c9
e1a8a9c
%if %{build_ovmf}
e1a8a9c
%if %{defined rhel}
2fb8072
3e96cc2
./edk2-build.py --config edk2-build.rhel-9 %{?silent} --release-date "$RELEASE_DATE" -m ovmf
75ee74a
virt-fw-vars --input   RHEL-9/ovmf/OVMF_VARS.fd \
75ee74a
             --output  RHEL-9/ovmf/OVMF_VARS.secboot.fd \
5c1f07c
             --set-dbx DBXUpdate-%{DBXDATE}.x64.bin \
e1a8a9c
             --enroll-redhat --secure-boot
3cc1097
virt-fw-vars --input   RHEL-9/ovmf/OVMF.inteltdx.fd \
3cc1097
             --output  RHEL-9/ovmf/OVMF.inteltdx.secboot.fd \
3cc1097
             --set-dbx DBXUpdate-%{DBXDATE}.x64.bin \
3cc1097
             --enroll-redhat --secure-boot
c270bea
build_iso RHEL-9/ovmf
0e2f6f6
cp DBXUpdate-%{DBXDATE}.x64.bin RHEL-9/ovmf
0792202
e1a8a9c
%else
e1a8a9c
3e96cc2
./edk2-build.py --config edk2-build.fedora %{?silent} --release-date "$RELEASE_DATE" -m ovmf
3e96cc2
./edk2-build.py --config edk2-build.fedora.platforms %{?silent} -m x64
75ee74a
virt-fw-vars --input   Fedora/ovmf/OVMF_VARS.fd \
75ee74a
             --output  Fedora/ovmf/OVMF_VARS.secboot.fd \
5c1f07c
             --set-dbx DBXUpdate-%{DBXDATE}.x64.bin \
e1a8a9c
             --enroll-redhat --secure-boot
79081dd
virt-fw-vars --input   Fedora/ovmf/OVMF_VARS_4M.fd \
79081dd
             --output  Fedora/ovmf/OVMF_VARS_4M.secboot.fd \
5c1f07c
             --set-dbx DBXUpdate-%{DBXDATE}.x64.bin \
bd85039
             --enroll-redhat --secure-boot
3cc1097
virt-fw-vars --input   Fedora/ovmf/OVMF.inteltdx.fd \
3cc1097
             --output  Fedora/ovmf/OVMF.inteltdx.secboot.fd \
3cc1097
             --set-dbx DBXUpdate-%{DBXDATE}.x64.bin \
3cc1097
             --enroll-redhat --secure-boot
75ee74a
virt-fw-vars --input   Fedora/ovmf-ia32/OVMF_VARS.fd \
75ee74a
             --output  Fedora/ovmf-ia32/OVMF_VARS.secboot.fd \
5c1f07c
             --set-dbx DBXUpdate-%{DBXDATE}.ia32.bin \
e1a8a9c
             --enroll-redhat --secure-boot
c270bea
build_iso Fedora/ovmf
c270bea
build_iso Fedora/ovmf-ia32
0e2f6f6
cp DBXUpdate-%{DBXDATE}.x64.bin Fedora/ovmf
0e2f6f6
cp DBXUpdate-%{DBXDATE}.ia32.bin Fedora/ovmf-ia32
2fb8072
79081dd
for raw in */ovmf/*_4M*.fd; do
0d83cd3
    qcow2="${raw%.fd}.qcow2"
0d83cd3
    qemu-img convert -f raw -O qcow2 -o cluster_size=4096 -S 4096 "$raw" "$qcow2"
f9b85f6
    rm -f "$raw"
0d83cd3
done
0d83cd3
92cf2a3
# experimental stateless builds
75ee74a
virt-fw-vars --input   Fedora/experimental/OVMF.stateless.fd \
75ee74a
             --output  Fedora/experimental/OVMF.stateless.secboot.fd \
5c1f07c
             --set-dbx DBXUpdate-%{DBXDATE}.x64.bin \
1f7c76c
             --enroll-redhat --secure-boot \
1f7c76c
             --set-fallback-no-reboot
92cf2a3
fe934e0
for image in \
fe934e0
	Fedora/ovmf/OVMF_CODE.secboot.fd \
79081dd
	Fedora/ovmf/OVMF_CODE_4M.secboot.qcow2 \
fe934e0
	Fedora/experimental/OVMF.stateless.secboot.fd \
fe934e0
; do
79081dd
	pcr="${image}"
79081dd
	pcr="${pcr%.fd}"
79081dd
	pcr="${pcr%.qcow2}"
79081dd
	pcr="${pcr}.pcr"
fe934e0
	python3 /usr/share/doc/python3-virt-firmware/experimental/measure.py \
fe934e0
		--image "$image" \
fe934e0
		--version "%{name}-%{version}-%{release}" \
fe934e0
                --no-shim \
fe934e0
		> "$pcr"
fe934e0
done
fe934e0
568a37b
%endif
0c0d315
%endif
ad70d15
e1a8a9c
%if %{build_aarch64}
e1a8a9c
%if %{defined rhel}
3e96cc2
./edk2-build.py --config edk2-build.rhel-9 %{?silent} --release-date "$RELEASE_DATE" -m armvirt
e1a8a9c
%else
3e96cc2
./edk2-build.py --config edk2-build.fedora %{?silent} --release-date "$RELEASE_DATE" -m armvirt
3e96cc2
./edk2-build.py --config edk2-build.fedora.platforms %{?silent} -m aa64
08c69a7
virt-fw-vars --input   Fedora/aarch64/vars-template-pflash.raw \
08c69a7
             --output  Fedora/experimental/vars-template-secboot-testonly-pflash.raw \
08c69a7
             --enroll-redhat --secure-boot --distro-keys rhel
Thierry Vignaud 6e680c0
%endif
3cf8c78
for raw in */aarch64/*.raw; do
3cf8c78
    qcow2="${raw%.raw}.qcow2"
3cf8c78
    qemu-img convert -f raw -O qcow2 -o cluster_size=4096 -S 4096 "$raw" "$qcow2"
3cf8c78
done
7bc8400
%endif
7407978
11b1de7
%if %{build_riscv64}
3e96cc2
./edk2-build.py --config edk2-build.fedora %{?silent} --release-date "$RELEASE_DATE" -m riscv
3e96cc2
./edk2-build.py --config edk2-build.fedora.platforms %{?silent} -m riscv
05b8652
for raw in */riscv/*.raw; do
05b8652
    qcow2="${raw%.raw}.qcow2"
05b8652
    qemu-img convert -f raw -O qcow2 -o cluster_size=4096 -S 4096 "$raw" "$qcow2"
05b8652
    rm -f "$raw"
05b8652
done
11b1de7
%endif
0792202
9f191dd
%install
2fb8072
0c0d315
cp -a OvmfPkg/License.txt License.OvmfPkg.txt
5072963
cp -a CryptoPkg/Library/OpensslLib/openssl/LICENSE.txt LICENSE.openssl
2fb8072
mkdir -p %{buildroot}%{_datadir}/qemu/firmware
0c0d315
2fb8072
# install the tools
b0c3aff
mkdir -p %{buildroot}%{_bindir} \
b0c3aff
         %{buildroot}%{_datadir}/%{name}/Conf \
b0c3aff
         %{buildroot}%{_datadir}/%{name}/Scripts
b0c3aff
install BaseTools/Source/C/bin/* \
49ef316
        %{buildroot}%{_bindir}
b0c3aff
install BaseTools/BinWrappers/PosixLike/LzmaF86Compress \
b0c3aff
        %{buildroot}%{_bindir}
b0c3aff
install BaseTools/BuildEnv \
0655ef8
        %{buildroot}%{_datadir}/%{name}
b0c3aff
install BaseTools/Conf/*.template \
d282ae2
        %{buildroot}%{_datadir}/%{name}/Conf
b0c3aff
install BaseTools/Scripts/GccBase.lds \
d282ae2
        %{buildroot}%{_datadir}/%{name}/Scripts
d282ae2
e1a8a9c
# install firmware images
e1a8a9c
mkdir -p %{buildroot}%{_datadir}/%{name}
e1a8a9c
%if %{defined rhel}
e1a8a9c
cp -av RHEL-9/* %{buildroot}%{_datadir}/%{name}
e1a8a9c
%else
e1a8a9c
cp -av Fedora/* %{buildroot}%{_datadir}/%{name}
e1a8a9c
%endif
9f191dd
2fb8072
e1a8a9c
%if %{build_ovmf}
ea0f0cb
e1a8a9c
# compat symlinks
e1a8a9c
mkdir -p %{buildroot}%{_datadir}/OVMF
e1a8a9c
ln -s ../%{name}/ovmf/OVMF_CODE.fd         %{buildroot}%{_datadir}/OVMF/
2fb8072
ln -s ../%{name}/ovmf/OVMF_CODE.secboot.fd %{buildroot}%{_datadir}/OVMF/
2fb8072
ln -s ../%{name}/ovmf/OVMF_VARS.fd         %{buildroot}%{_datadir}/OVMF/
2fb8072
ln -s ../%{name}/ovmf/OVMF_VARS.secboot.fd %{buildroot}%{_datadir}/OVMF/
2fb8072
ln -s ../%{name}/ovmf/UefiShell.iso        %{buildroot}%{_datadir}/OVMF/
e1a8a9c
ln -s OVMF_CODE.fd %{buildroot}%{_datadir}/%{name}/ovmf/OVMF_CODE.cc.fd
2fb8072
e1a8a9c
# json description files
e1a8a9c
mkdir -p %{buildroot}%{_datadir}/qemu/firmware
8e960a7
install -m 0644 \
29f4777
        30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json \
29f4777
        31-edk2-ovmf-2m-raw-x64-sb-enrolled.json \
29f4777
        40-edk2-ovmf-4m-qcow2-x64-sb.json \
29f4777
        41-edk2-ovmf-2m-raw-x64-sb.json \
29f4777
        50-edk2-ovmf-4m-qcow2-x64-nosb.json \
29f4777
        51-edk2-ovmf-2m-raw-x64-nosb.json \
8e960a7
        60-edk2-ovmf-x64-amdsev.json \
8e960a7
        60-edk2-ovmf-x64-inteltdx.json \
8e960a7
        %{buildroot}%{_datadir}/qemu/firmware
e1a8a9c
%if %{defined fedora}
8e960a7
install -m 0644 \
8e960a7
        50-edk2-ovmf-x64-microvm.json \
8e960a7
        30-edk2-ovmf-ia32-sb-enrolled.json \
8e960a7
        40-edk2-ovmf-ia32-sb.json \
4405543
        50-edk2-ovmf-ia32-nosb.json \
8e960a7
        %{buildroot}%{_datadir}/qemu/firmware
e1a8a9c
%endif
e1a8a9c
0c0d315
# endif build_ovmf
568a37b
%endif
167eadb
0c0d315
%if %{build_aarch64}
2fb8072
e1a8a9c
# compat symlinks
e1a8a9c
mkdir -p %{buildroot}%{_datadir}/AAVMF
2fb8072
ln -s ../%{name}/aarch64/QEMU_EFI-pflash.raw \
2fb8072
  %{buildroot}%{_datadir}/AAVMF/AAVMF_CODE.verbose.fd
2fb8072
ln -s ../%{name}/aarch64/QEMU_EFI-silent-pflash.raw \
2fb8072
  %{buildroot}%{_datadir}/AAVMF/AAVMF_CODE.fd
2fb8072
ln -s ../%{name}/aarch64/vars-template-pflash.raw \
2fb8072
  %{buildroot}%{_datadir}/AAVMF/AAVMF_VARS.fd
e1a8a9c
%if %{defined fedora}
e1a8a9c
ln -s ../%{name}/arm/QEMU_EFI-pflash.raw \
e1a8a9c
   %{buildroot}%{_datadir}/AAVMF/AAVMF32_CODE.fd
e1a8a9c
%endif
2fb8072
e1a8a9c
# json description files
8e960a7
install -m 0644 \
06a1ed3
        50-edk2-aarch64-qcow2.json \
06a1ed3
        51-edk2-aarch64-raw.json \
06a1ed3
        52-edk2-aarch64-verbose-qcow2.json \
06a1ed3
        53-edk2-aarch64-verbose-raw.json \
8e960a7
        %{buildroot}%{_datadir}/qemu/firmware
0c0d315
%if %{defined fedora}
8e960a7
install -m 0644 \
8e960a7
        50-edk2-arm-verbose.json \
8e960a7
        %{buildroot}%{_datadir}/qemu/firmware
Thierry Vignaud 6e680c0
%endif
167eadb
e1a8a9c
# endif build_aarch64
e1a8a9c
%endif
0c0d315
580b0e9
%if %{build_riscv64}
580b0e9
580b0e9
install -m 0644 \
580b0e9
        50-edk2-riscv-qcow2.json \
580b0e9
        %{buildroot}%{_datadir}/qemu/firmware
580b0e9
580b0e9
# endif build_riscv64
580b0e9
%endif
580b0e9
e1a8a9c
%if %{defined fedora}
0c0d315
0c0d315
# edk2-tools-python install
0c0d315
cp -R BaseTools/Source/Python %{buildroot}%{_datadir}/%{name}/Python
0c0d315
for i in build BPDG Ecc GenDepex GenFds GenPatchPcdTable PatchPcdValue TargetTool Trim UPT; do
0c0d315
echo '#!/bin/sh
0c0d315
export PYTHONPATH=%{_datadir}/%{name}/Python
0c0d315
exec python3 '%{_datadir}/%{name}/Python/$i/$i.py' "$@"' > %{buildroot}%{_bindir}/$i
0c0d315
  chmod +x %{buildroot}%{_bindir}/$i
0c0d315
done
1db20ef
a6540d4
%if 0%{?py_byte_compile:1}
a6540d4
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python_Appendix/#manual-bytecompilation
a6540d4
%py_byte_compile %{python3} %{buildroot}%{_datadir}/edk2/Python
a6540d4
%endif
a6540d4
0c0d315
%endif
0c0d315
0c0d315
%check
fe934e0
for file in %{buildroot}%{_datadir}/%{name}/*/*VARS.secboot.fd; do
e1a8a9c
    test -f "$file" || continue
e1a8a9c
    virt-fw-vars --input $file --print | grep "SecureBootEnable.*ON" || exit 1
e1a8a9c
done
0c0d315
0c0d315
%global common_files \
0c0d315
  %%license License.txt License.OvmfPkg.txt License-History.txt LICENSE.openssl \
0c0d315
  %%dir %%{_datadir}/%%{name}/ \
0c0d315
  %%dir %%{_datadir}/qemu \
0c0d315
  %%dir %%{_datadir}/qemu/firmware
0c0d315
0c0d315
%if %{build_ovmf}
0c0d315
%files ovmf
0c0d315
%common_files
0c0d315
%doc OvmfPkg/README
0c0d315
%doc ovmf-whitepaper-c770f8c.txt
0c0d315
%dir %{_datadir}/OVMF/
e1a8a9c
%{_datadir}/OVMF/OVMF_CODE.fd
e1a8a9c
%{_datadir}/OVMF/OVMF_CODE.secboot.fd
e1a8a9c
%{_datadir}/OVMF/OVMF_VARS.fd
e1a8a9c
%{_datadir}/OVMF/OVMF_VARS.secboot.fd
e1a8a9c
%{_datadir}/OVMF/UefiShell.iso
0c0d315
%dir %{_datadir}/%{name}/ovmf/
0c0d315
%{_datadir}/%{name}/ovmf/OVMF_CODE.fd
2fb8072
%{_datadir}/%{name}/ovmf/OVMF_CODE.cc.fd
0c0d315
%{_datadir}/%{name}/ovmf/OVMF_CODE.secboot.fd
0c0d315
%{_datadir}/%{name}/ovmf/OVMF_VARS.fd
0c0d315
%{_datadir}/%{name}/ovmf/OVMF_VARS.secboot.fd
19b27c9
%{_datadir}/%{name}/ovmf/OVMF.amdsev.fd
19b27c9
%{_datadir}/%{name}/ovmf/OVMF.inteltdx.fd
3cc1097
%{_datadir}/%{name}/ovmf/OVMF.inteltdx.secboot.fd
0c0d315
%{_datadir}/%{name}/ovmf/UefiShell.iso
0c0d315
%{_datadir}/%{name}/ovmf/Shell.efi
0c0d315
%{_datadir}/%{name}/ovmf/EnrollDefaultKeys.efi
0e2f6f6
%{_datadir}/%{name}/ovmf/DBXUpdate*.bin
29f4777
%{_datadir}/qemu/firmware/30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json
29f4777
%{_datadir}/qemu/firmware/31-edk2-ovmf-2m-raw-x64-sb-enrolled.json
29f4777
%{_datadir}/qemu/firmware/40-edk2-ovmf-4m-qcow2-x64-sb.json
29f4777
%{_datadir}/qemu/firmware/41-edk2-ovmf-2m-raw-x64-sb.json
29f4777
%{_datadir}/qemu/firmware/50-edk2-ovmf-4m-qcow2-x64-nosb.json
29f4777
%{_datadir}/qemu/firmware/51-edk2-ovmf-2m-raw-x64-nosb.json
8e960a7
%{_datadir}/qemu/firmware/60-edk2-ovmf-x64-amdsev.json
8e960a7
%{_datadir}/qemu/firmware/60-edk2-ovmf-x64-inteltdx.json
e12f5e0
%if %{defined fedora}
ee5593d
%{_datadir}/%{name}/ovmf/MICROVM.fd
8e960a7
%{_datadir}/qemu/firmware/50-edk2-ovmf-x64-microvm.json
79081dd
%{_datadir}/%{name}/ovmf/OVMF_CODE_4M.qcow2
79081dd
%{_datadir}/%{name}/ovmf/OVMF_CODE_4M.secboot.qcow2
79081dd
%{_datadir}/%{name}/ovmf/OVMF_VARS_4M.qcow2
79081dd
%{_datadir}/%{name}/ovmf/OVMF_VARS_4M.secboot.qcow2
fe934e0
%{_datadir}/%{name}/ovmf/*.pcr
ea0f0cb
%endif
0c0d315
# endif build_ovmf
0c0d315
%endif
0c0d315
0c0d315
%if %{build_aarch64}
0c0d315
%files aarch64
0c0d315
%common_files
0c0d315
%dir %{_datadir}/AAVMF/
e1a8a9c
%{_datadir}/AAVMF/AAVMF_CODE.verbose.fd
e1a8a9c
%{_datadir}/AAVMF/AAVMF_CODE.fd
e1a8a9c
%{_datadir}/AAVMF/AAVMF_VARS.fd
0c0d315
%dir %{_datadir}/%{name}/aarch64/
3cf8c78
%{_datadir}/%{name}/aarch64/QEMU_EFI-pflash.*
3cf8c78
%{_datadir}/%{name}/aarch64/QEMU_EFI-silent-pflash.*
3cf8c78
%{_datadir}/%{name}/aarch64/vars-template-pflash.*
0c0d315
%{_datadir}/%{name}/aarch64/QEMU_EFI.fd
2fb8072
%{_datadir}/%{name}/aarch64/QEMU_EFI.silent.fd
0c0d315
%{_datadir}/%{name}/aarch64/QEMU_VARS.fd
50cf82d
%if %{defined fedora}
50cf82d
%{_datadir}/%{name}/aarch64/BL32_AP_MM.fd
c09f3cd
%{_datadir}/%{name}/aarch64/QEMU_EFI.kernel.fd
50cf82d
%endif
06a1ed3
%{_datadir}/qemu/firmware/50-edk2-aarch64-qcow2.json
06a1ed3
%{_datadir}/qemu/firmware/51-edk2-aarch64-raw.json
06a1ed3
%{_datadir}/qemu/firmware/52-edk2-aarch64-verbose-qcow2.json
06a1ed3
%{_datadir}/qemu/firmware/53-edk2-aarch64-verbose-raw.json
0c0d315
# endif build_aarch64
0c0d315
%endif
b0c3aff
9f191dd
%files tools
3485002
%license License.txt
0c0d315
%license License-History.txt
7ae6f15
%{_bindir}/DevicePath
9f191dd
%{_bindir}/EfiRom
9f191dd
%{_bindir}/GenCrc32
9f191dd
%{_bindir}/GenFfs
9f191dd
%{_bindir}/GenFv
9f191dd
%{_bindir}/GenFw
9f191dd
%{_bindir}/GenSec
9f191dd
%{_bindir}/LzmaCompress
d282ae2
%{_bindir}/LzmaF86Compress
d282ae2
%{_bindir}/TianoCompress
9f191dd
%{_bindir}/VfrCompile
9f191dd
%{_bindir}/VolInfo
b0c3aff
%dir %{_datadir}/%{name}
0655ef8
%{_datadir}/%{name}/BuildEnv
b0c3aff
%{_datadir}/%{name}/Conf
b0c3aff
%{_datadir}/%{name}/Scripts
9f191dd
0c0d315
%files tools-doc
0c0d315
%doc BaseTools/UserManuals/*.rtf
0c0d315
0c0d315
0c0d315
%if %{defined fedora}
Thierry Vignaud 6e680c0
%if %{build_ovmf}
0c0d315
%files ovmf-ia32
0c0d315
%common_files
0c0d315
%dir %{_datadir}/%{name}/ovmf-ia32
0c0d315
%{_datadir}/%{name}/ovmf-ia32/EnrollDefaultKeys.efi
0c0d315
%{_datadir}/%{name}/ovmf-ia32/OVMF_CODE.fd
0c0d315
%{_datadir}/%{name}/ovmf-ia32/OVMF_CODE.secboot.fd
0c0d315
%{_datadir}/%{name}/ovmf-ia32/OVMF_VARS.fd
0c0d315
%{_datadir}/%{name}/ovmf-ia32/OVMF_VARS.secboot.fd
0c0d315
%{_datadir}/%{name}/ovmf-ia32/Shell.efi
0c0d315
%{_datadir}/%{name}/ovmf-ia32/UefiShell.iso
0e2f6f6
%{_datadir}/%{name}/ovmf-ia32/DBXUpdate*.bin
8e960a7
%{_datadir}/qemu/firmware/30-edk2-ovmf-ia32-sb-enrolled.json
8e960a7
%{_datadir}/qemu/firmware/40-edk2-ovmf-ia32-sb.json
4405543
%{_datadir}/qemu/firmware/50-edk2-ovmf-ia32-nosb.json
92cf2a3
6180cbc
%files experimental
92cf2a3
%common_files
b50b012
%doc README.experimental
92cf2a3
%dir %{_datadir}/%{name}/experimental
92cf2a3
%{_datadir}/%{name}/experimental/*.fd
8e89486
%{_datadir}/%{name}/experimental/*.raw
fe934e0
%{_datadir}/%{name}/experimental/*.pcr
2568b6a
2568b6a
%files ovmf-xen
2568b6a
%common_files
2568b6a
%dir %{_datadir}/%{name}/xen
2568b6a
%{_datadir}/%{name}/xen/*.fd
Thierry Vignaud 6e680c0
%endif
0c0d315
0c0d315
%files arm
0c0d315
%common_files
e1a8a9c
%dir %{_datadir}/AAVMF/
0c0d315
%{_datadir}/AAVMF/AAVMF32_CODE.fd
e1a8a9c
%dir %{_datadir}/%{name}/arm
0c0d315
%{_datadir}/%{name}/arm/QEMU_EFI-pflash.raw
0c0d315
%{_datadir}/%{name}/arm/QEMU_EFI.fd
0c0d315
%{_datadir}/%{name}/arm/QEMU_VARS.fd
0c0d315
%{_datadir}/%{name}/arm/vars-template-pflash.raw
8e960a7
%{_datadir}/qemu/firmware/50-edk2-arm-verbose.json
0c0d315
11b1de7
%files riscv64
11b1de7
%common_files
11b1de7
%{_datadir}/%{name}/riscv/*.fd
05b8652
%{_datadir}/%{name}/riscv/*.qcow2
580b0e9
%{_datadir}/qemu/firmware/50-edk2-riscv-qcow2.json
11b1de7
4e212b2
%files ext4
4e212b2
%common_files
4e212b2
%dir %{_datadir}/%{name}/drivers
4e212b2
%{_datadir}/%{name}/drivers/ext4*.efi
4e212b2
0c0d315
9f191dd
%files tools-python
d282ae2
%{_bindir}/build
9f191dd
%{_bindir}/BPDG
d282ae2
%{_bindir}/Ecc
9f191dd
%{_bindir}/GenDepex
9f191dd
%{_bindir}/GenFds
9f191dd
%{_bindir}/GenPatchPcdTable
9f191dd
%{_bindir}/PatchPcdValue
9f191dd
%{_bindir}/TargetTool
9f191dd
%{_bindir}/Trim
9f191dd
%{_bindir}/UPT
b0c3aff
%dir %{_datadir}/%{name}
b0c3aff
%{_datadir}/%{name}/Python
9f191dd
0c0d315
# endif fedora
568a37b
%endif
d31a567
9f191dd
9f191dd
%changelog
e3a409f
%autochangelog