xref: /OK3568_Linux_fs/buildroot/boot/edk2/edk2.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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