[PATCH] lib: logo: support a single pre-rendered logo file as an alternative to SVG
Johannes Schneider
johannes.schneider at leica-geosystems.com
Mon Jun 1 23:08:18 PDT 2026
Add a "Logo source" choice that switches between the upstream behaviour
(BAREBOX_LOGO_STOCK -- render Documentation/barebox.svg at build time
with ImageMagick) and a new pre-rendered single-file mode
(BAREBOX_LOGO_FILE -- include one PNG verbatim, no conversion).
The single-file mode addresses two issues for vendor-branded splashes
on fixed-resolution panels:
- The multi-size stock options can be combined; e.g. enabling 640
and a hypothetical 800 variant in parallel embedded both blobs,
even though only one is ever displayed on a given panel. The new
BAREBOX_LOGO_FILE selector replaces all of the BAREBOX_LOGO_<size>
flags with a single configurable PNG path -- exactly one logo
blob in the resulting binary.
- It removes the build-time ImageMagick dependency in the
custom-logo path. CI environments where Inkscape and ImageMagick
versions drift (see the SELF_CALL=xxx Inkscape workaround at
the top of cmd_png) can produce a pre-rendered PNG once and check
it in. Stock mode keeps its existing convert(1) chain.
The new symbol is barebox-logo-custom; the resulting bblogo blob is
embedded under __bblogo_barebox_logo_custom_{start,end} and exposed at
/logo/barebox-logo-custom.<ext> in the running barebox.
CONFIG_BAREBOX_LOGO_FILE_PATH selects the source PNG, relative to the
barebox srctree (default lib/logo/barebox-logo-custom.png). The
existing BAREBOX_LOGO_64..640 size options remain available, gated on
BAREBOX_LOGO_STOCK.
Upstream-Status: Pending
Assisted-by: Claude Opus 4.7 (1M context)
Signed-off-by: Johannes Schneider <johannes.schneider at leica-geosystems.com>
---
lib/logo/Kconfig | 35 +++++++++++++++++++++++++++++++++++
lib/logo/Makefile | 19 +++++++++++++++++++
2 files changed, 54 insertions(+)
diff --git a/lib/logo/Kconfig b/lib/logo/Kconfig
index 7e5a6fcb63..ab64ce242d 100644
--- a/lib/logo/Kconfig
+++ b/lib/logo/Kconfig
@@ -35,6 +35,30 @@ config BAREBOX_LOGO_QOI
endchoice
+choice
+ prompt "Logo source"
+ default BAREBOX_LOGO_STOCK
+ help
+ Choose how the boot logo is produced.
+
+config BAREBOX_LOGO_STOCK
+ bool "Stock barebox logo (rendered from SVG)"
+ help
+ Render Documentation/barebox.svg at build time into the sizes
+ selected below. Requires ImageMagick's convert tool in the
+ build environment.
+
+config BAREBOX_LOGO_FILE
+ bool "Pre-rendered logo from file"
+ help
+ Use a pre-rendered PNG as the boot logo, taken verbatim with
+ no build-time conversion. Suitable for vendor-branded boot
+ splashes; no ImageMagick dependency.
+
+endchoice
+
+if BAREBOX_LOGO_STOCK
+
config BAREBOX_LOGO_64
bool "include 64x32 pixel logo"
@@ -50,4 +74,15 @@ config BAREBOX_LOGO_400
config BAREBOX_LOGO_640
bool "include 640x320 pixel logo"
+endif # BAREBOX_LOGO_STOCK
+
+config BAREBOX_LOGO_FILE_PATH
+ string "Pre-rendered logo path (relative to srctree)"
+ depends on BAREBOX_LOGO_FILE
+ default "lib/logo/barebox-logo-custom.png"
+ help
+ Path to the pre-rendered PNG, relative to the barebox source
+ tree. The file is included as-is; drop it at this location
+ before invoking the build.
+
endif # BAREBOX_LOGO
diff --git a/lib/logo/Makefile b/lib/logo/Makefile
index 9792a4699f..7bd7fbb352 100644
--- a/lib/logo/Makefile
+++ b/lib/logo/Makefile
@@ -1,5 +1,6 @@
# SPDX-License-Identifier: GPL-2.0-only
+ifdef CONFIG_BAREBOX_LOGO_STOCK
OPTS_barebox-logo-w64 = -resize 64
bblogo-$(CONFIG_BAREBOX_LOGO_64) += barebox-logo-w64
@@ -14,6 +15,14 @@ bblogo-$(CONFIG_BAREBOX_LOGO_400) += barebox-logo-w400
OPTS_barebox-logo-w640 = -resize 640
bblogo-$(CONFIG_BAREBOX_LOGO_640) += barebox-logo-w640
+endif
+
+ifdef CONFIG_BAREBOX_LOGO_FILE
+# Strip the Kconfig string's surrounding quotes.
+barebox-logo-file-path := $(patsubst "%",%,$(CONFIG_BAREBOX_LOGO_FILE_PATH))
+
+bblogo-y += barebox-logo-custom
+endif
obj-y += $(patsubst %,%.bblogo.o,$(bblogo-y))
extra-y += $(patsubst %,%.bblogo,$(bblogo-y))
@@ -62,6 +71,7 @@ endif
CONVERTOPTS += -background none
+ifdef CONFIG_BAREBOX_LOGO_STOCK
quiet_cmd_bmp = BMP $@
cmd_bmp = convert $(OPTS_$(@F:.bmp=)) $(CONVERTOPTS) $< bmp:$@
@@ -76,6 +86,15 @@ quiet_cmd_png = PNG $@
%.png: $(srctree)/Documentation/barebox.svg FORCE
$(call if_changed,png)
+endif
+
+ifdef CONFIG_BAREBOX_LOGO_FILE
+quiet_cmd_logo_copy = COPY $@
+ cmd_logo_copy = cp $< $@
+
+barebox-logo-custom.png: $(srctree)/$(barebox-logo-file-path) FORCE
+ $(call if_changed,logo_copy)
+endif
quiet_cmd_qoi = QOI $@
cmd_qoi = $(objtree)/scripts/qoiconv $< $@
base-commit: 81fbe2e8d0d445032498a0bfecf9fd270f00985a
--
2.43.0
More information about the barebox
mailing list