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