When EDK2 OVMF is built with debug, messages are printed to IO port 0x402. Those messages are not shown in the normal Qemu emulated serial port. Enabling this option will print debug messages on the emulated serial port, potentially mixing messages with UEFI serial console output. See OVMF README: https://github.com/tianocore/edk2/blob/master/OvmfPkg/README This option has been useful to debug problems such as [1], in which the emulator was hanging at startup without any log. Enabling this option show the debug message on the console, before hanging: ... PlatformCpuCountBugCheck: Present=0 Possible=1 PlatformCpuCountBugCheck: Broken CPU hotplug register block found. Update QEMU to version 8+, or PlatformCpuCountBugCheck: to a stable release with commit dab30fbef389 backported. Refer to PlatformCpuCountBugCheck: <https://bugzilla.tianocore.org/show_bug.cgi?id=4250>. ... [1] http://lists.busybox.net/pipermail/buildroot/2023-July/670807.html Signed-off-by: Julien Olivain <ju.o@free.fr> Tested-by: Romain Naour <romain.naour@gmail.com> Reviewed-by: Romain Naour <romain.naour@gmail.com> Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
176 lines
6.0 KiB
Makefile
176 lines
6.0 KiB
Makefile
################################################################################
|
|
#
|
|
# edk2
|
|
#
|
|
################################################################################
|
|
|
|
EDK2_VERSION = edk2-stable202305
|
|
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=TRUE
|
|
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 relase 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
|
|
|
|
endif
|
|
|
|
EDK2_BASETOOLS_OPTS = \
|
|
EXTRA_LDFLAGS="$(HOST_LDFLAGS)" \
|
|
EXTRA_OPTFLAGS="$(HOST_CPPFLAGS)"
|
|
|
|
EDK2_PACKAGES_PATH = $(subst $(space),:,$(strip $(EDK2_PACKAGES_PATHS)))
|
|
|
|
EDK2_BUILD_ENV += \
|
|
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))
|