1################################################################################ 2# 3# edk2 4# 5################################################################################ 6 7EDK2_VERSION = edk2-stable202102 8EDK2_SITE = https://github.com/tianocore/edk2 9EDK2_SITE_METHOD = git 10EDK2_LICENSE = BSD-2-Clause 11EDK2_LICENSE_FILE = License.txt 12EDK2_CPE_ID_VENDOR = tianocore 13EDK2_DEPENDENCIES = edk2-platforms host-python3 host-acpica host-util-linux 14EDK2_INSTALL_TARGET = NO 15EDK2_INSTALL_IMAGES = YES 16 17ifeq ($(BR2_ENABLE_DEBUG),y) 18EDK2_BUILD_TYPE = DEBUG 19else 20EDK2_BUILD_TYPE = RELEASE 21endif 22 23# Build system notes. 24# 25# The EDK2 build system is rather unique, so here are a few useful notes. 26# 27# First, builds rely heavily on Git submodules to fetch various dependencies 28# into specific directory structures. It might be possible to work around this 29# and rely on Buildroot's infrastructure, but using Git submodules greatly 30# simplifies this already complicated build system. 31# 32# Second, the build system is spread across various commands and stages. 33# Therefore, all build variables needs to be exported to be available 34# accordingly. The first stage will build $(@D)/BaseTools which contains 35# various tools and scripts for the host. 36# 37# Third, where applicable, the dependency direction between EDK2 and 38# ARM Trusted Firmware (ATF) will go in different direction for different 39# platforms. Most commonly, ATF will depend on EDK2 via the BL33 payload. 40# But for some platforms (e.g. QEMU SBSA or DeveloperBox) EDK2 will package 41# the ATF images within its own build system. In such cases, intermediary 42# "EDK2 packages" will be built in $(EDK2_BUILD_PACKAGES) in order for EDK2 43# to be able to use them in subsequent build stages. 44# 45# For more information about the build setup: 46# https://edk2-docs.gitbook.io/edk-ii-build-specification/4_edk_ii_build_process_overview 47 48EDK2_GIT_SUBMODULES = YES 49EDK2_BUILD_PACKAGES = $(@D)/Build/Buildroot 50EDK2_PACKAGES_PATH = $(@D):$(EDK2_BUILD_PACKAGES):$(STAGING_DIR)/usr/share/edk2-platforms 51 52ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_I386),y) 53EDK2_ARCH = IA32 54EDK2_DEPENDENCIES += host-nasm 55EDK2_PACKAGE_NAME = OvmfPkg 56EDK2_PLATFORM_NAME = OvmfPkgIa32 57EDK2_BUILD_DIR = OvmfIa32 58 59else ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_X64),y) 60EDK2_ARCH = X64 61EDK2_DEPENDENCIES += host-nasm 62EDK2_PACKAGE_NAME = OvmfPkg 63EDK2_PLATFORM_NAME = OvmfPkgX64 64EDK2_BUILD_DIR = OvmfX64 65 66else ifeq ($(BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU),y) 67EDK2_ARCH = AARCH64 68EDK2_PACKAGE_NAME = ArmVirtPkg 69EDK2_PLATFORM_NAME = ArmVirtQemu 70EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)-$(EDK2_ARCH) 71 72else ifeq ($(BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU_KERNEL),y) 73EDK2_ARCH = AARCH64 74EDK2_PACKAGE_NAME = ArmVirtPkg 75EDK2_PLATFORM_NAME = ArmVirtQemuKernel 76EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)-$(EDK2_ARCH) 77 78else ifeq ($(BR2_TARGET_EDK2_PLATFORM_ARM_VEXPRESS_FVP_AARCH64),y) 79EDK2_ARCH = AARCH64 80EDK2_PACKAGE_NAME = Platform/ARM/VExpressPkg 81EDK2_PLATFORM_NAME = ArmVExpress-FVP-AArch64 82EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME) 83 84else ifeq ($(BR2_TARGET_EDK2_PLATFORM_SOCIONEXT_DEVELOPERBOX),y) 85EDK2_ARCH = AARCH64 86EDK2_DEPENDENCIES += host-dtc arm-trusted-firmware 87EDK2_PACKAGE_NAME = Platform/Socionext/DeveloperBox 88EDK2_PLATFORM_NAME = DeveloperBox 89EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME) 90EDK2_BUILD_ENV += DTC_PREFIX=$(HOST_DIR)/bin/ 91EDK2_BUILD_OPTS += -D DO_X86EMU=TRUE 92EDK2_PRE_BUILD_HOOKS += EDK2_PRE_BUILD_SOCIONEXT_DEVELOPERBOX 93 94define EDK2_PRE_BUILD_SOCIONEXT_DEVELOPERBOX 95 mkdir -p $(EDK2_BUILD_PACKAGES)/Platform/Socionext/DeveloperBox 96 $(ARM_TRUSTED_FIRMWARE_DIR)/tools/fiptool/fiptool create \ 97 --tb-fw $(BINARIES_DIR)/bl31.bin \ 98 --soc-fw $(BINARIES_DIR)/bl31.bin \ 99 --scp-fw $(BINARIES_DIR)/bl31.bin \ 100 $(EDK2_BUILD_PACKAGES)/Platform/Socionext/DeveloperBox/fip_all_arm_tf.bin 101endef 102 103else ifeq ($(BR2_TARGET_EDK2_PLATFORM_SOLIDRUN_ARMADA80X0MCBIN),y) 104EDK2_ARCH = AARCH64 105EDK2_DEPENDENCIES += host-dtc arm-trusted-firmware 106EDK2_PACKAGE_NAME = Platform/SolidRun/Armada80x0McBin 107EDK2_PLATFORM_NAME = Armada80x0McBin 108EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)-$(EDK2_ARCH) 109EDK2_BUILD_ENV += DTC_PREFIX=$(HOST_DIR)/bin/ 110EDK2_BUILD_OPTS += -D INCLUDE_TFTP_COMMAND 111 112else ifeq ($(BR2_TARGET_EDK2_PLATFORM_QEMU_SBSA),y) 113EDK2_ARCH = AARCH64 114EDK2_DEPENDENCIES += arm-trusted-firmware 115EDK2_PACKAGE_NAME = Platform/Qemu/SbsaQemu 116EDK2_PLATFORM_NAME = SbsaQemu 117EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME) 118EDK2_PRE_BUILD_HOOKS += EDK2_PRE_BUILD_QEMU_SBSA 119 120define EDK2_PRE_BUILD_QEMU_SBSA 121 mkdir -p $(EDK2_BUILD_PACKAGES)/Platform/Qemu/Sbsa 122 ln -srf $(BINARIES_DIR)/{bl1.bin,fip.bin} $(EDK2_BUILD_PACKAGES)/Platform/Qemu/Sbsa/ 123endef 124 125endif 126 127EDK2_BASETOOLS_OPTS = \ 128 EXTRA_LDFLAGS="$(HOST_LDFLAGS)" \ 129 EXTRA_OPTFLAGS="$(HOST_CPPFLAGS)" 130 131EDK2_BUILD_ENV += \ 132 WORKSPACE=$(@D) \ 133 PACKAGES_PATH=$(EDK2_PACKAGES_PATH) \ 134 PYTHON_COMMAND=$(HOST_DIR)/bin/python3 \ 135 IASL_PREFIX=$(HOST_DIR)/bin/ \ 136 NASM_PREFIX=$(HOST_DIR)/bin/ \ 137 GCC5_$(EDK2_ARCH)_PREFIX=$(TARGET_CROSS) 138 139EDK2_BUILD_OPTS += \ 140 -t GCC5 \ 141 -n $(BR2_JLEVEL) \ 142 -a $(EDK2_ARCH) \ 143 -b $(EDK2_BUILD_TYPE) \ 144 -p $(EDK2_PACKAGE_NAME)/$(EDK2_PLATFORM_NAME).dsc 145 146define EDK2_BUILD_CMDS 147 mkdir -p $(EDK2_BUILD_PACKAGES) 148 export $(EDK2_BUILD_ENV) && \ 149 unset ARCH && \ 150 source $(@D)/edksetup.sh && \ 151 $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/BaseTools $(EDK2_BASETOOLS_OPTS) && \ 152 build $(EDK2_BUILD_OPTS) all 153endef 154 155define EDK2_INSTALL_IMAGES_CMDS 156 cp -f $(@D)/Build/$(EDK2_BUILD_DIR)/$(EDK2_BUILD_TYPE)_GCC5/FV/*.fd $(BINARIES_DIR) 157endef 158 159$(eval $(generic-package)) 160