diff mbox series

[2/3] u-boot: Add support for UBOOT_CONFIG_FRAGMENTS and UBOOT_FRAGMENTS

Message ID 20260108202239.2423335-2-reatmon@ti.com
State Accepted, archived
Commit 9e96d3dedee47657657686310508e0aaee7f4e02
Headers show
Series [1/3] u-boot: Overhaul UBOOT_CONFIG flow | expand

Commit Message

Ryan Eatmon Jan. 8, 2026, 8:22 p.m. UTC
There are config fragments that live in the u-boot source tree.
UBOOT_FRAGMENTS will globally add a set of fragments to the configure.
UBOOT_CONFIG_FRAGMENTS makes use of the overhauled config flow to add
support for specifying alternative fragments for each variation build.

Signed-off-by: Ryan Eatmon <reatmon@ti.com>
---
 meta/classes-recipe/uboot-config.bbclass     | 19 +++++++++++++++++++
 meta/recipes-bsp/u-boot/u-boot-configure.inc |  5 +++--
 2 files changed, 22 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/meta/classes-recipe/uboot-config.bbclass b/meta/classes-recipe/uboot-config.bbclass
index 715fb5c1d2..823a66157a 100644
--- a/meta/classes-recipe/uboot-config.bbclass
+++ b/meta/classes-recipe/uboot-config.bbclass
@@ -18,6 +18,8 @@ 
 # UBOOT_CONFIG_MAKE_OPTS[foo] = "FOO=1"
 # UBOOT_CONFIG_MAKE_OPTS[bar] = "BAR=1"
 #
+# UBOOT_CONFIG_FRAGMENTS[foo] = "foo.fragment"
+#
 # For more information about this, please see the official documentation.
 #
 # There is a legacy method that is still supported where some of the above
@@ -57,6 +59,7 @@  UBOOT_IMAGE ?= "${UBOOT_BINARYNAME}-${MACHINE}-${UBOOT_VERSION}.${UBOOT_SUFFIX}"
 UBOOT_SYMLINK ?= "${UBOOT_BINARYNAME}-${MACHINE}.${UBOOT_SUFFIX}"
 UBOOT_MAKE_TARGET ?= "all"
 UBOOT_MAKE_OPTS ?= ""
+UBOOT_FRAGMENTS ?= ""
 
 # Output the ELF generated. Some platforms can use the ELF file and directly
 # load it (JTAG booting, QEMU) additionally the ELF can be used for debugging
@@ -141,6 +144,8 @@  python () {
     ubootconfigbinaryflags = d.getVarFlags('UBOOT_CONFIG_BINARY')
     ubootconfigmakeopts = d.getVar('UBOOT_CONFIG_MAKE_OPTS')
     ubootconfigmakeoptsflags = d.getVarFlags('UBOOT_CONFIG_MAKE_OPTS')
+    ubootconfigfragments = d.getVar('UBOOT_CONFIG_FRAGMENTS')
+    ubootconfigfragmentsflags = d.getVarFlags('UBOOT_CONFIG_FRAGMENTS')
     # The "doc" varflag is special, we don't want to see it here
     ubootconfigflags.pop('doc', None)
     ubootconfig = (d.getVar('UBOOT_CONFIG') or "").split()
@@ -164,6 +169,9 @@  python () {
     if ubootconfigmakeopts:
         raise bb.parse.SkipRecipe("You cannot use UBOOT_CONFIG_MAKE_OPTS as a variable, you can only set flags.")
 
+    if ubootconfigfragments:
+        raise bb.parse.SkipRecipe("You cannot use UBOOT_CONFIG_FRAGMENTS as a variable, you can only set flags.")
+
     if len(ubootconfig) > 0:
         for config in ubootconfig:
             found = False
@@ -220,6 +228,17 @@  python () {
             bb.debug(1, "Appending '%s' to UBOOT_CONFIG_MAKE_OPTS." % make_opts)
             d.appendVar('UBOOT_CONFIG_MAKE_OPTS', make_opts + " ? ")
 
+            # Extract out any settings from UBOOT_CONFIG_FRAGMENTS[config]
+            fragments = ""
+            if ubootconfigfragmentsflags:
+                for f, v in ubootconfigfragmentsflags.items():
+                    if config == f:
+                        bb.debug(1, "Staging '%s' for UBOOT_CONFIG_FRAGMENTS." % v)
+                        fragments = v
+
+            bb.debug(1, "Appending '%s' to UBOOT_CONFIG_FRAGMENTS." % fragments)
+            d.appendVar('UBOOT_CONFIG_FRAGMENTS', fragments + " ? ")
+
             # This recipe might be inherited e.g. by the kernel recipe via kernel-fitimage.bbclass
             # Ensure the uboot specific menuconfig settings do not leak into other recipes
             if 'u-boot' in recipename:
diff --git a/meta/recipes-bsp/u-boot/u-boot-configure.inc b/meta/recipes-bsp/u-boot/u-boot-configure.inc
index 337b8ed6c3..379637e73e 100644
--- a/meta/recipes-bsp/u-boot/u-boot-configure.inc
+++ b/meta/recipes-bsp/u-boot/u-boot-configure.inc
@@ -36,8 +36,9 @@  uboot_configure_config () {
     builddir="${config}-${type}"
 
     config_make_opts=$(uboot_config_get_indexed_value "${UBOOT_CONFIG_MAKE_OPTS}" $i)
+    config_fragments=$(uboot_config_get_indexed_value "${UBOOT_CONFIG_FRAGMENTS}" $i)
 
-    oe_runmake -C ${S} O=${B}/${builddir} ${config_make_opts} ${UBOOT_MAKE_OPTS} ${config}
+    oe_runmake -C ${S} O=${B}/${builddir} ${config_make_opts} ${UBOOT_MAKE_OPTS} ${config} ${config_fragments} ${UBOOT_FRAGMENTS}
     if [ -n "${@' '.join(find_cfgs(d))}" ]; then
         merge_config.sh -m -O ${B}/${builddir} ${B}/${builddir}/.config ${@" ".join(find_cfgs(d))}
         oe_runmake -C ${S} O=${B}/${builddir} oldconfig
@@ -46,7 +47,7 @@  uboot_configure_config () {
 
 uboot_configure () {
     if [ -n "${UBOOT_MACHINE}" ]; then
-        oe_runmake -C ${S} O=${B} ${UBOOT_MAKE_OPTS} ${UBOOT_MACHINE}
+        oe_runmake -C ${S} O=${B} ${UBOOT_MAKE_OPTS} ${UBOOT_MACHINE} ${UBOOT_FRAGMENTS}
     else
         oe_runmake -C ${S} O=${B} ${UBOOT_MAKE_OPTS} oldconfig
     fi