blob: bc4774791fc8f2a707e8522df8ac8cb0320307b5 [file] [log] [blame]
Brad Bishopbec4ebc2022-08-03 09:55:16 -04001SUMMARY = "UEFI EDK2 Firmware"
2DESCRIPTION = "UEFI EDK2 Firmware for Arm reference platforms"
3HOMEPAGE = "https://github.com/tianocore/edk2"
4LICENSE = "BSD-2-Clause-Patent"
5
6PROVIDES = "virtual/bootloader"
7
8# EDK2
9LIC_FILES_CHKSUM = "file://License.txt;md5=2b415520383f7964e96700ae12b4570a"
10# EDK2 Platforms
11LIC_FILES_CHKSUM += "file://edk2-platforms/License.txt;md5=2b415520383f7964e96700ae12b4570a"
12
13# These can be overridden as needed
Andrew Geisslerea144b032023-01-27 16:03:57 -060014SRC_URI_EDK2 ?= "gitsm://github.com/tianocore/edk2.git;protocol=https"
15SRC_URI_EDK2_PLATFORMS ?= "git://github.com/tianocore/edk2-platforms.git;protocol=https"
16SRCBRANCH_edk2 = "master"
17SRCBRANCH_edk2_platforms = "master"
Brad Bishopbec4ebc2022-08-03 09:55:16 -040018SRC_URI = "\
Andrew Geisslerea144b032023-01-27 16:03:57 -060019 ${SRC_URI_EDK2};branch=${SRCBRANCH_edk2_platforms};name=edk2;destsuffix=edk2 \
20 ${SRC_URI_EDK2_PLATFORMS};branch=${SRCBRANCH_edk2};name=edk2-platforms;destsuffix=edk2/edk2-platforms \
Brad Bishopbec4ebc2022-08-03 09:55:16 -040021 file://unaligned.patch \
22 file://default.patch;patchdir=edk2-platforms \
23"
24
25SRCREV_FORMAT = "edk2_edk2-platforms"
26UPSTREAM_CHECK_GITTAGREGEX = "^edk2-stable(?P<pver>\d+)$"
27
28COMPATIBLE_MACHINE ?= "invalid"
29PACKAGE_ARCH = "${MACHINE_ARCH}"
30
31EDK2_BUILD_RELEASE = "1"
32
33EDK2_PLATFORM = "unset"
34# build --platform
35EDK2_PLATFORM_DSC = "unset"
36EDK2_BIN_NAME = ""
37# build --arch
38EDK2_ARCH ?= "unset"
39EDK2_ARCH:arm = "ARM"
40EDK2_ARCH:aarch64 = "AARCH64"
41EDK2_ARCH:x86 = "IA32"
42EDK2_ARCH:x86-64 = "X64"
43EDK2_ARCH:riscv64 = "RISCV64"
44
45# Extra arguments passed to build
46EDK2_EXTRA_BUILD = ""
47
48# build --buildtarget
49EDK2_BUILD_MODE ?= "${@bb.utils.contains('EDK2_BUILD_RELEASE', '1', 'RELEASE', 'DEBUG', d)}"
50
51# Baremetal, no need for a C library
52DEPENDS:remove = "virtual/${TARGET_PREFIX}compilerlibs virtual/libc"
53DEPENDS += "util-linux-native iasl-native"
54
55inherit deploy
56
57S = "${WORKDIR}/edk2"
58B = "${WORKDIR}/build"
59
60LDFLAGS[unexport] = "1"
61
62do_configure[cleandirs] += "${B}"
63
64# Set variables as per envsetup
65export PACKAGES_PATH = "${S}:${S}/edk2-platforms"
66export WORKSPACE = "${B}"
67export EDK_TOOLS_PATH = "${S}/BaseTools"
68export PYTHON_COMMAND = "python3"
69export CONF_PATH = "${S}/Conf"
70
71export BTOOLS_PATH = "${EDK_TOOLS_PATH}/BinWrappers/PosixLike"
72
73EDK_COMPILER ?= "GCC5"
74export GCC5_AARCH64_PREFIX = "${TARGET_PREFIX}"
75export GCC5_ARM_PREFIX = "${TARGET_PREFIX}"
76
77EDK_COMPILER:toolchain-clang = "CLANG38"
78export CLANG38_AARCH64_PREFIX = "${TARGET_PREFIX}"
79export CLANG38_ARM_PREFIX = "${TARGET_PREFIX}"
80
81#FIXME - arm32 doesn't work with clang due to a linker issue
82TOOLCHAIN:arm = "gcc"
83
84do_configure:prepend() {
Patrick Williams8dd68482022-10-04 07:57:18 -050085 sed -i -e "s#-target ${HOST_ARCH}-linux-gnu.*#-target ${HOST_SYS}#" ${S}/BaseTools/Conf/tools_def.template
Brad Bishopbec4ebc2022-08-03 09:55:16 -040086}
87
88do_compile() {
89 sed -i -e 's:-I \.\.:-I \.\. ${BUILD_CFLAGS} :' ${EDK_TOOLS_PATH}/Source/C/Makefiles/header.makefile
90 sed -i -e 's: -luuid: -luuid ${BUILD_LDFLAGS}:g' ${EDK_TOOLS_PATH}/Source/C/*/GNUmakefile
91
92 # Copy the templates as we don't run envsetup
93 cp ${EDK_TOOLS_PATH}/Conf/build_rule.template ${S}/Conf/build_rule.txt
94 cp ${EDK_TOOLS_PATH}/Conf/tools_def.template ${S}/Conf/tools_def.txt
95 cp ${EDK_TOOLS_PATH}/Conf/target.template ${S}/Conf/target.txt
96
97 # Build basetools
98 oe_runmake -C ${S}/BaseTools
99
100 PATH="${WORKSPACE}:${BTOOLS_PATH}:$PATH" \
101 build \
102 --arch "${EDK2_ARCH}" \
103 --buildtarget ${EDK2_BUILD_MODE} \
104 --tagname ${EDK_COMPILER} \
105 --platform ${EDK2_PLATFORM_DSC} \
106 ${@oe.utils.parallel_make_argument(d, "-n %d")} \
107 ${EDK2_EXTRA_BUILD}
108}
109
110do_install() {
111 install -d ${D}/firmware
112 install ${B}/Build/${EDK2_PLATFORM}/${EDK2_BUILD_MODE}_${EDK_COMPILER}/FV/${EDK2_BIN_NAME} ${D}/firmware/uefi.bin
113}
114
115FILES:${PN} = "/firmware"
116SYSROOT_DIRS += "/firmware"
117# Skip QA check for relocations in .text of elf binaries
118INSANE_SKIP:${PN} += "textrel"
119# Build paths are currently embedded
120INSANE_SKIP:${PN} += "buildpaths"
121
122do_deploy() {
123 # Copy the images to deploy directory
124 cp -rf ${D}/firmware/* ${DEPLOYDIR}/
125}
126addtask deploy after do_install