summaryrefslogtreecommitdiffstats
path: root/meta/classes-recipe/barebox.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes-recipe/barebox.bbclass')
-rw-r--r--meta/classes-recipe/barebox.bbclass160
1 files changed, 160 insertions, 0 deletions
diff --git a/meta/classes-recipe/barebox.bbclass b/meta/classes-recipe/barebox.bbclass
new file mode 100644
index 0000000000..ece8fb6485
--- /dev/null
+++ b/meta/classes-recipe/barebox.bbclass
@@ -0,0 +1,160 @@
1#
2# Copyright OpenEmbedded Contributors
3#
4# SPDX-License-Identifier: MIT
5#
6
7inherit kernel-arch deploy cml1 pkgconfig
8
9LICENSE ?= "GPL-2.0-only"
10
11PROVIDES += "virtual/bootloader"
12
13PACKAGE_ARCH = "${MACHINE_ARCH}"
14
15DEPENDS += "bison-native flex-native lz4-native"
16
17S = "${UNPACKDIR}/barebox-${PV}"
18B = "${WORKDIR}/build"
19
20require conf/image-uefi.conf
21
22# For some platforms and configuration, the barebox build process will require
23# additional host tools that can be activated/deactivated here.
24PACKAGECONFIG ??= "openssl libusb fit"
25
26PACKAGECONFIG[openssl] = ",,openssl-native"
27PACKAGECONFIG[libusb] = ",,libusb1-native"
28PACKAGECONFIG[fit] = ",,u-boot-tools-native dtc-native"
29
30export KBUILD_BUILD_USER ?= "oe-user"
31export KBUILD_BUILD_HOST ?= "oe-host"
32
33# unlike the kernel, barebox may build against host tools like openssl
34export HOST_EXTRACFLAGS
35
36def get_layer_rev(path):
37 try:
38 rev, _ = bb.process.run("git describe --match='' --always --dirty --broken", cwd=path)
39 except bb.process.ExecutionError:
40 rev = ""
41 return rev.strip()
42
43BAREBOX_BUILDSYSTEM_VERSION[doc] = "Build system version to add to the barebox image. By default this is the git description of the containing layer."
44BAREBOX_BUILDSYSTEM_VERSION ??= "${@get_layer_rev(os.path.dirname(d.getVar('FILE')))}"
45
46BAREBOX_FIRMWARE_DIR[doc] = "Overwrite barebox' firmware blobs search directory (CONFIG_EXTRA_FIRMWARE_DIR) with this path, default ${B}/firmware"
47BAREBOX_FIRMWARE_DIR ??= "${B}/firmware"
48
49EXTRA_OEMAKE = " \
50 CROSS_COMPILE=${TARGET_PREFIX} -C ${S} O=${B} \
51 BUILDSYSTEM_VERSION=${BAREBOX_BUILDSYSTEM_VERSION} \
52 CONFIG_EXTRA_FIRMWARE_DIR=${BAREBOX_FIRMWARE_DIR} \
53 PKG_CONFIG=pkg-config-native \
54 CROSS_PKG_CONFIG=pkg-config \
55"
56
57BAREBOX_CONFIG[doc] = "The barebox kconfig defconfig file. Not used if a file called defconfig is added to the SRC_URI."
58BAREBOX_CONFIG ?= ""
59
60# set sensible default configs for some of oe-core's QEMU MACHINEs
61BAREBOX_CONFIG:qemuarm = "multi_v7_defconfig"
62BAREBOX_CONFIG:qemuarm64 = "multi_v8_defconfig"
63BAREBOX_CONFIG:qemux86-64 = "efi_defconfig"
64
65# prevent from acting as non-buildable provider
66python () {
67 bareboxconfig = d.getVar('BAREBOX_CONFIG')
68 bareboxdefconfig = 'file://defconfig' in d.getVar('SRC_URI')
69
70 if not bareboxconfig and not bareboxdefconfig:
71 raise bb.parse.SkipRecipe("BAREBOX_CONFIG must be set in the %s machine configuration or file://defconfig must be given in SRC_URI." % d.getVar("MACHINE"))
72}
73
74barebox_do_configure() {
75 if [ -e ${UNPACKDIR}/defconfig ]; then
76 cp ${UNPACKDIR}/defconfig ${B}/.config
77 else
78 if [ -n "${BAREBOX_CONFIG}" ]; then
79 oe_runmake ${BAREBOX_CONFIG}
80 else
81 bbfatal "No defconfig given. Either add file 'file://defconfig' to SRC_URI or set BAREBOX_CONFIG"
82 fi
83 fi
84
85 ${S}/scripts/kconfig/merge_config.sh -m .config ${@" ".join(find_cfgs(d))}
86 cml1_do_configure
87}
88
89BAREBOX_ENV_DIR[doc] = "Overlay the barebox built-in environment with the environment provided by the BSP if specified."
90BAREBOX_ENV_DIR ??= "${UNPACKDIR}/env/"
91
92barebox_do_compile () {
93 export userccflags="${TARGET_LDFLAGS}${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
94 unset LDFLAGS
95 unset CFLAGS
96 unset CPPFLAGS
97 unset CXXFLAGS
98 unset MACHINE
99 # Allow to use ${UNPACKDIR} in kconfig options to include additionally fetched files
100 export UNPACKDIR=${UNPACKDIR}
101
102 if [ -d ${BAREBOX_ENV_DIR} ]; then
103 BAREBOX_DEFAULT_ENV="$(grep ^CONFIG_DEFAULT_ENVIRONMENT_PATH .config | cut -d '=' -f 2 | tr -d '"')"
104 oe_runmake CONFIG_DEFAULT_ENVIRONMENT_PATH="\"${BAREBOX_DEFAULT_ENV} ${BAREBOX_ENV_DIR}\""
105 else
106 oe_runmake
107 fi
108}
109
110BAREBOX_BINARY[doc] = "Specify the barebox binary to install. If not specified all barebox artifacts are installed."
111BAREBOX_BINARY ??= "${@'barebox.efi' if d.getVar('EFI_PROVIDER') == 'barebox' else ''}"
112BAREBOX_SUFFIX[doc] = "Specify the suffix for ${BAREBOX_IMAGE}."
113BAREBOX_SUFFIX ??= "img"
114BAREBOX_IMAGE[doc] = "A unique barebox image name. Unused if ${BAREBOX_BINARY} is not set."
115BAREBOX_IMAGE_DEFAULT ?= "${PN}-${MACHINE}-${PV}-${PR}.${BAREBOX_SUFFIX}"
116BAREBOX_IMAGE ?= "${@'${EFI_BOOT_IMAGE}' if d.getVar('EFI_PROVIDER') == 'barebox' else '${BAREBOX_IMAGE_DEFAULT}'}"
117
118BAREBOX_INSTALL_PATH ?= "${@'${EFI_FILES_PATH}' if d.getVar('EFI_PROVIDER') == 'barebox' else '/boot'}"
119
120barebox_do_install () {
121 if [ -n "${BAREBOX_BINARY}" ]; then
122
123 BAREBOX_BIN=${B}/${BAREBOX_BINARY}
124 if [ ! -f "${BAREBOX_BIN}" ]; then
125 BAREBOX_BIN=${B}/images/${BAREBOX_BINARY}
126 fi
127 if [ ! -f "${BAREBOX_BIN}" ]; then
128 bbfatal "Failed to locate ${BAREBOX_BINARY}"
129 fi
130
131 install -D -m 644 ${BAREBOX_BIN} ${D}${BAREBOX_INSTALL_PATH}/${BAREBOX_IMAGE}
132 ln -sf ${BAREBOX_IMAGE} ${D}${BAREBOX_INSTALL_PATH}/${BAREBOX_BINARY}
133 else
134 install -d ${D}${BAREBOX_INSTALL_PATH}/
135 for image in $(cat ${B}/barebox-flash-images); do
136 install -m 644 ${B}/${image} ${D}${BAREBOX_INSTALL_PATH}/
137 done
138 fi
139}
140FILES:${PN} = "${BAREBOX_INSTALL_PATH}"
141
142barebox_do_deploy () {
143 if [ -n "${BAREBOX_BINARY}" ]; then
144
145 BAREBOX_BIN=${B}/${BAREBOX_BINARY}
146 if [ ! -f "${BAREBOX_BIN}" ]; then
147 BAREBOX_BIN=${B}/images/${BAREBOX_BINARY}
148 fi
149
150 install -D -m 644 ${BAREBOX_BIN} ${DEPLOYDIR}/${BAREBOX_IMAGE}
151 ln -sf ${BAREBOX_IMAGE} ${DEPLOYDIR}/${BAREBOX_BINARY}
152 else
153 for image in $(cat ${B}/barebox-flash-images); do
154 cp ${B}/${image} ${DEPLOYDIR}
155 done
156 fi
157}
158addtask deploy after do_compile
159
160EXPORT_FUNCTIONS do_configure do_compile do_install do_deploy