Release notes: https://github.com/tianocore/edk2/releases/tag/edk2-stable202405 We can't bump to edk2-stable202408 yet due to a runtime issue while testing qemu_aarch64_sbsa_defconfig following the switch generic ArmPsciResetSystemLib [1] ERROR: sbsa_sip_smc_handler: unhandled SMC (0xc20000ca) (function id: 202) Qemu 9.0/9.1 is using a slightly older edk2 firmware based on edk2-stable202405 release [2] that contains a commit [3] fixing a bootloader crash produced with qemu_aarch64_sbsa_defconfig [4] since Qemu 9.0. From [5]: "The version of the sbsa-ref EDK2 firmware we used to use in this test had a bug where it might make an unaligned access to the framebuffer, which causes a guest crash on newer versions of QEMU where we enforce the architectural requirement that unaligned accesses to Device memory should take an exception." This commit [5] is backported to edk2-stable202405. For the same reason, we have to update edk2-platforms to a specific version [6]: "QemuSbsa: enable WriteCombine for the FrameBuffer QEMU no longer permits misaligned access to device memory, which breaks QemuVideoDxe on SbsaQemu. c1d1910be6e04a8b1a73090cf2881fb698947a6e commit in EDK2 fixed it by enabling WriteCombine for Framebuffer memory. This change enables that fix." As a side note, the edk2-non-osi package does not need to be updated, so it is left untouched. Finally, this EDK2 version requires a recent Qemu version. The version included in the reference Docker image (5.2.0) is too old and will not allow to start this EDK2 version. Therefore, this bump is known to be incompatible with runtime tests which are using EDK2 on Aarch64 architecture. At the authoring time of this commit, broken tests are: - tests.boot.test_edk2 - tests.boot.test_grub.TestGrubAArch64EFI - tests.package.test_fwts Note that the EDK2/Qemu incompatibility is only affecting Aarch64 tests. Other tests using EDK2 on i386 or x86_64 are not affected. To prevent this commit introducing broken runtime tests, those have been disabled in a previous commit. [1]2d0668d399[2]24a7cd6a7c[3]c1d1910be6[4] https://gitlab.com/buildroot.org/buildroot/-/jobs/7764483764 [5]6c84daac58[6]3f08401365Fixes: https://gitlab.com/buildroot.org/buildroot/-/jobs/7764483764 Signed-off-by: Romain Naour <romain.naour@smile.fr> Cc: Waldemar Brodkorb <wbx@openadk.org> [Julien: add comments in commit log] Signed-off-by: Julien Olivain <ju.o@free.fr>
187 lines
6.5 KiB
Makefile
187 lines
6.5 KiB
Makefile
################################################################################
|
|
#
|
|
# edk2
|
|
#
|
|
################################################################################
|
|
|
|
EDK2_VERSION = edk2-stable202405
|
|
EDK2_SITE = https://github.com/tianocore/edk2
|
|
EDK2_SITE_METHOD = git
|
|
EDK2_LICENSE = BSD-2-Clause-Patent
|
|
EDK2_LICENSE_FILES = License.txt
|
|
EDK2_CPE_ID_VENDOR = tianocore
|
|
EDK2_DEPENDENCIES = edk2-platforms host-python3 host-acpica host-util-linux
|
|
EDK2_INSTALL_TARGET = NO
|
|
EDK2_INSTALL_IMAGES = YES
|
|
|
|
ifeq ($(BR2_ENABLE_DEBUG),y)
|
|
EDK2_BUILD_TYPE = DEBUG
|
|
ifeq ($(BR2_TARGET_EDK2_OVMF_DEBUG_ON_SERIAL),y)
|
|
# DEBUG_ON_SERIAL_PORT is only tested to be set, so don't disable it, as
|
|
# it would still be set.
|
|
EDK2_BUILD_OPTS += -DDEBUG_ON_SERIAL_PORT
|
|
endif
|
|
else
|
|
EDK2_BUILD_TYPE = RELEASE
|
|
# DEBUG_ON_SERIAL_PORT is only valid in debug builds, so useless to set
|
|
# it (enabled or disabled) on a release build.
|
|
endif
|
|
|
|
# Build system notes.
|
|
#
|
|
# The EDK2 build system is rather unique, so here are a few useful notes.
|
|
#
|
|
# First, builds rely heavily on Git submodules to fetch various dependencies
|
|
# into specific directory structures. It might be possible to work around this
|
|
# and rely on Buildroot's infrastructure, but using Git submodules greatly
|
|
# simplifies this already complicated build system.
|
|
#
|
|
# Second, the build system is spread across various commands and stages.
|
|
# Therefore, all build variables needs to be exported to be available
|
|
# accordingly. The first stage will build $(@D)/BaseTools which contains
|
|
# various tools and scripts for the host.
|
|
#
|
|
# Third, where applicable, the dependency direction between EDK2 and
|
|
# ARM Trusted Firmware (ATF) will go in different direction for different
|
|
# platforms. Most commonly, ATF will depend on EDK2 via the BL33 payload.
|
|
# But for some platforms (e.g. QEMU SBSA or DeveloperBox) EDK2 will package
|
|
# the ATF images within its own build system. In such cases, intermediary
|
|
# "EDK2 packages" will be built in $(EDK2_BUILD_PACKAGES) in order for EDK2
|
|
# to be able to use them in subsequent build stages.
|
|
#
|
|
# For more information about the build setup:
|
|
# https://edk2-docs.gitbook.io/edk-ii-build-specification/4_edk_ii_build_process_overview
|
|
|
|
EDK2_GIT_SUBMODULES = YES
|
|
EDK2_BUILD_PACKAGES = $(@D)/Build/Buildroot
|
|
EDK2_PACKAGES_PATHS = $(@D) $(EDK2_BUILD_PACKAGES) $(STAGING_DIR)/usr/share/edk2-platforms
|
|
|
|
ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_I386),y)
|
|
EDK2_ARCH = IA32
|
|
EDK2_DEPENDENCIES += host-nasm
|
|
EDK2_PACKAGE_NAME = OvmfPkg
|
|
EDK2_PLATFORM_NAME = OvmfPkgIa32
|
|
EDK2_BUILD_DIR = OvmfIa32
|
|
|
|
else ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_X64),y)
|
|
EDK2_ARCH = X64
|
|
EDK2_DEPENDENCIES += host-nasm
|
|
EDK2_PACKAGE_NAME = OvmfPkg
|
|
EDK2_PLATFORM_NAME = OvmfPkgX64
|
|
EDK2_BUILD_DIR = OvmfX64
|
|
|
|
else ifeq ($(BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU),y)
|
|
EDK2_ARCH = AARCH64
|
|
EDK2_PACKAGE_NAME = ArmVirtPkg
|
|
EDK2_PLATFORM_NAME = ArmVirtQemu
|
|
EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)-$(EDK2_ARCH)
|
|
|
|
else ifeq ($(BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU_KERNEL),y)
|
|
EDK2_ARCH = AARCH64
|
|
EDK2_PACKAGE_NAME = ArmVirtPkg
|
|
EDK2_PLATFORM_NAME = ArmVirtQemuKernel
|
|
EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)-$(EDK2_ARCH)
|
|
|
|
else ifeq ($(BR2_TARGET_EDK2_PLATFORM_ARM_SGI575),y)
|
|
EDK2_ARCH = AARCH64
|
|
EDK2_PACKAGE_NAME = Platform/ARM/SgiPkg/Sgi575
|
|
EDK2_PLATFORM_NAME = Sgi575
|
|
EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)
|
|
|
|
else ifeq ($(BR2_TARGET_EDK2_PLATFORM_ARM_VEXPRESS_FVP_AARCH64),y)
|
|
EDK2_ARCH = AARCH64
|
|
EDK2_PACKAGE_NAME = Platform/ARM/VExpressPkg
|
|
EDK2_PLATFORM_NAME = ArmVExpress-FVP-AArch64
|
|
EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)
|
|
|
|
else ifeq ($(BR2_TARGET_EDK2_PLATFORM_SOCIONEXT_DEVELOPERBOX),y)
|
|
EDK2_ARCH = AARCH64
|
|
EDK2_DEPENDENCIES += host-dtc arm-trusted-firmware
|
|
EDK2_PACKAGE_NAME = Platform/Socionext/DeveloperBox
|
|
EDK2_PLATFORM_NAME = DeveloperBox
|
|
EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)
|
|
EDK2_BUILD_ENV += DTC_PREFIX=$(HOST_DIR)/bin/
|
|
EDK2_BUILD_OPTS += -D DO_X86EMU=TRUE
|
|
EDK2_PRE_BUILD_HOOKS += EDK2_PRE_BUILD_SOCIONEXT_DEVELOPERBOX
|
|
|
|
define EDK2_PRE_BUILD_SOCIONEXT_DEVELOPERBOX
|
|
mkdir -p $(EDK2_BUILD_PACKAGES)/Platform/Socionext/DeveloperBox
|
|
$(ARM_TRUSTED_FIRMWARE_DIR)/tools/fiptool/fiptool create \
|
|
--tb-fw $(BINARIES_DIR)/bl31.bin \
|
|
--soc-fw $(BINARIES_DIR)/bl31.bin \
|
|
--scp-fw $(BINARIES_DIR)/bl31.bin \
|
|
$(EDK2_BUILD_PACKAGES)/Platform/Socionext/DeveloperBox/fip_all_arm_tf.bin
|
|
endef
|
|
|
|
else ifeq ($(BR2_TARGET_EDK2_PLATFORM_SOLIDRUN_ARMADA80X0MCBIN),y)
|
|
EDK2_ARCH = AARCH64
|
|
EDK2_DEPENDENCIES += host-dtc arm-trusted-firmware edk2-non-osi
|
|
EDK2_PACKAGE_NAME = Platform/SolidRun/Armada80x0McBin
|
|
EDK2_PLATFORM_NAME = Armada80x0McBin
|
|
EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)-$(EDK2_ARCH)
|
|
EDK2_BUILD_ENV += DTC_PREFIX=$(HOST_DIR)/bin/
|
|
EDK2_BUILD_OPTS += -D INCLUDE_TFTP_COMMAND
|
|
EDK2_PACKAGES_PATHS += $(STAGING_DIR)/usr/share/edk2-non-osi
|
|
|
|
else ifeq ($(BR2_TARGET_EDK2_PLATFORM_QEMU_SBSA),y)
|
|
EDK2_ARCH = AARCH64
|
|
EDK2_DEPENDENCIES += arm-trusted-firmware
|
|
EDK2_PACKAGE_NAME = Platform/Qemu/SbsaQemu
|
|
EDK2_PLATFORM_NAME = SbsaQemu
|
|
EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)
|
|
EDK2_PRE_BUILD_HOOKS += EDK2_PRE_BUILD_QEMU_SBSA
|
|
|
|
define EDK2_PRE_BUILD_QEMU_SBSA
|
|
mkdir -p $(EDK2_BUILD_PACKAGES)/Platform/Qemu/Sbsa
|
|
ln -srf $(BINARIES_DIR)/{bl1.bin,fip.bin} $(EDK2_BUILD_PACKAGES)/Platform/Qemu/Sbsa/
|
|
endef
|
|
|
|
else ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_RISCV),y)
|
|
EDK2_ARCH = RISCV64
|
|
EDK2_PACKAGE_NAME = OvmfPkg/RiscVVirt
|
|
EDK2_PLATFORM_NAME = RiscVVirtQemu
|
|
EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)
|
|
|
|
endif
|
|
|
|
EDK2_BASETOOLS_OPTS = \
|
|
EXTRA_LDFLAGS="$(HOST_LDFLAGS)" \
|
|
EXTRA_OPTFLAGS="$(HOST_CPPFLAGS)"
|
|
|
|
EDK2_PACKAGES_PATH = $(subst $(space),:,$(strip $(EDK2_PACKAGES_PATHS)))
|
|
|
|
# EDK2 "build" script internally uses and calls "make", which controls
|
|
# its own flags. It is mainly tested while not being a sub-make. In
|
|
# order to stay in that configuration, we avoid leaking top-level
|
|
# Buildroot make flags into EDK2 build by clearing the MAKEFLAGS
|
|
# environment variable.
|
|
EDK2_BUILD_ENV += \
|
|
MAKEFLAGS= \
|
|
WORKSPACE=$(@D) \
|
|
PACKAGES_PATH=$(EDK2_PACKAGES_PATH) \
|
|
PYTHON_COMMAND=$(HOST_DIR)/bin/python3 \
|
|
IASL_PREFIX=$(HOST_DIR)/bin/ \
|
|
NASM_PREFIX=$(HOST_DIR)/bin/ \
|
|
GCC5_$(EDK2_ARCH)_PREFIX=$(TARGET_CROSS)
|
|
|
|
EDK2_BUILD_OPTS += \
|
|
-t GCC5 \
|
|
-n $(BR2_JLEVEL) \
|
|
-a $(EDK2_ARCH) \
|
|
-b $(EDK2_BUILD_TYPE) \
|
|
-p $(EDK2_PACKAGE_NAME)/$(EDK2_PLATFORM_NAME).dsc
|
|
|
|
define EDK2_BUILD_CMDS
|
|
mkdir -p $(EDK2_BUILD_PACKAGES)
|
|
export $(EDK2_BUILD_ENV) && \
|
|
unset ARCH && \
|
|
source $(@D)/edksetup.sh && \
|
|
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/BaseTools $(EDK2_BASETOOLS_OPTS) && \
|
|
build $(EDK2_BUILD_OPTS) all
|
|
endef
|
|
|
|
define EDK2_INSTALL_IMAGES_CMDS
|
|
cp -f $(@D)/Build/$(EDK2_BUILD_DIR)/$(EDK2_BUILD_TYPE)_GCC5/FV/*.fd $(BINARIES_DIR)
|
|
endef
|
|
|
|
$(eval $(generic-package))
|