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