* [PATCH v4 1/2] kbuild: Move U-Boot .incbin rules to Makefile.lib-u-boot
@ 2026-04-13 13:15 Simon Glass
2026-04-13 13:15 ` [PATCH v4 2/2] kbuild: Use if_changed for font and splash .incbin rules Simon Glass
2026-04-13 21:16 ` [PATCH v4 1/2] kbuild: Move U-Boot .incbin rules to Makefile.lib-u-boot Rasmus Villemoes
0 siblings, 2 replies; 4+ messages in thread
From: Simon Glass @ 2026-04-13 13:15 UTC (permalink / raw)
To: u-boot
Cc: Rasmus Villemoes, Simon Glass, Tom Rini, Ilias Apalodimas,
Adriano Cordova, Greg Malysa, James Hilliard, Marek Vasut,
Philip Molloy, Richard Genoud, Sughosh Ganu, Tien Fong Chee
The font, splash-screen and EFI .incbin wrapper rules are U-Boot
additions that do not exist in the upstream Linux kbuild. Keeping them
in scripts/Makefile.lib makes re-syncing with Linux harder than it needs
to be, as every sync must manually preserve the U-Boot additions.
Move these rules into a new scripts/Makefile.lib-u-boot and include it
from Makefile.build and Makefile.xpl, right after the existing
Makefile.lib include.
This is a pure code-move with no functional change.
Suggested-by: Tom Rini <trini@konsulko.com>
Signed-off-by: Simon Glass <sjg@chromium.org>
Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
---
(no changes since v2)
Changes in v2:
- Split out of the relative-path patch as requested by Tom Rini
scripts/Makefile.build | 1 +
scripts/Makefile.lib | 94 ------------------------------------
scripts/Makefile.lib-u-boot | 96 +++++++++++++++++++++++++++++++++++++
scripts/Makefile.xpl | 1 +
4 files changed, 98 insertions(+), 94 deletions(-)
create mode 100644 scripts/Makefile.lib-u-boot
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 8da9851d430..e625f99986e 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -65,6 +65,7 @@ ccflags-y += $(PLATFORM_CPPFLAGS)
cppflags-y += $(PLATFORM_CPPFLAGS)
include $(srctree)/scripts/Makefile.lib
+include $(srctree)/scripts/Makefile.lib-u-boot
# Do not include hostprogs rules unless needed.
# $(sort ...) is used here to remove duplicated words and excessive spaces.
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 7386353e0cc..b8969b7de54 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -508,100 +508,6 @@ $(multi-dtb-y): FORCE
$(call if_changed,fdtoverlay)
$(call multi_depend, $(multi-dtb-y), .dtb, -dtbs)
-# Fonts
-# ---------------------------------------------------------------------------
-
-# Generate an assembly file to wrap the font data
-quiet_cmd_S_ttf= TTF $@
-# Modified for U-Boot
-cmd_S_ttf= \
-( \
- echo '.section .rodata.ttf.init,"a"'; \
- echo '.balign 16'; \
- echo '.global __ttf_$(*F)_begin'; \
- echo '__ttf_$(*F)_begin:'; \
- echo '.incbin "$<" '; \
- echo '__ttf_$(*F)_end:'; \
- echo '.global __ttf_$(*F)_end'; \
- echo '.balign 16'; \
-) > $@
-
-$(obj)/%.S: $(src)/%.ttf
- $(call cmd,S_ttf)
-
-# Splash logos
-# ---------------------------------------------------------------------------
-
-# Generate an assembly file to wrap the splash data
-quiet_cmd_S_splash= TTF $@
-# Modified for U-Boot
-cmd_S_splash= \
-( \
- echo '.section .rodata.splash.init,"a"'; \
- echo '.balign 16'; \
- echo '.global __splash_$(*F)_begin'; \
- echo '__splash_$(*F)_begin:'; \
- echo '.incbin "$<" '; \
- echo '__splash_$(*F)_end:'; \
- echo '.global __splash_$(*F)_end'; \
- echo '.balign 16'; \
-) > $@
-
-$(obj)/%.S: $(src)/%.bmp
- $(call cmd,S_splash)
-
-# EFI applications
-# A Makefile target *.efi is built as EFI application.
-# A Makefile target *_efi.S wraps *.efi as built-in EFI application.
-# ---------------------------------------------------------------------------
-
-# Generate an assembly file to wrap the EFI app
-cmd_S_efi= \
-( \
- echo '.section .rodata.$*.init,"a"'; \
- echo '.balign 16'; \
- echo '.global __efi_$*_begin'; \
- echo '__efi_$*_begin:'; \
- echo '.incbin "$<" '; \
- echo '__efi_$*_end:'; \
- echo '.global __efi_$*_end'; \
- echo '.balign 16'; \
-) > $@
-
-$(obj)/%_efi.S: $(obj)/%.efi
- $(call cmd,S_efi)
-
-quiet_cmd_efi_objcopy = OBJCOPY $@
-cmd_efi_objcopy = $(OBJCOPY) -j .header -j .text -j .sdata -j .data \
- -j .dynamic -j .dynstr -j .dynsym -j .rel* -j .reloc \
- $(if $(EFI_TARGET),$(EFI_TARGET),-O binary) $^ $@
-
-$(obj)/%.efi: $(obj)/%_efi.so
- $(call cmd,efi_objcopy)
-
-KBUILD_EFILDFLAGS = -nostdlib -zexecstack -znocombreloc -znorelro
-KBUILD_EFILDFLAGS += $(call ld-option,--no-warn-rwx-segments)
-quiet_cmd_efi_ld = LD $@
-cmd_efi_ld = $(LD) $(KBUILD_EFILDFLAGS) -L $(srctree) -T $(EFI_LDS_PATH) \
- -shared -Bsymbolic -s $^ $(PLATFORM_LIBGCC) -o $@
-
-EFI_LDS_PATH = arch/$(ARCH)/lib/$(EFI_LDS)
-
-$(obj)/efi_crt0.o: $(srctree)/arch/$(ARCH)/lib/$(EFI_CRT0:.o=.S) FORCE
- $(call if_changed_dep,as_o_S)
-
-$(obj)/efi_reloc.o: $(srctree)/arch/$(ARCH)/lib/$(EFI_RELOC:.o=.c) $(recordmcount_source) FORCE
- $(call cmd,force_checksrc)
- $(call if_changed_rule,cc_o_c)
-
-$(obj)/%_efi.so: $(obj)/%.o $(obj)/efi_crt0.o $(obj)/efi_reloc.o $(obj)/efi_freestanding.o
- $(call cmd,efi_ld)
-
-targets += $(obj)/efi_crt0.o $(obj)/efi_reloc.o $(obj)/efi_freestanding.o
-
-CFLAGS_REMOVE_efi_reloc.o := $(LTO_CFLAGS)
-CFLAGS_REMOVE_efi_freestanding.o := $(LTO_CFLAGS)
-
# ACPI
# ---------------------------------------------------------------------------
#
diff --git a/scripts/Makefile.lib-u-boot b/scripts/Makefile.lib-u-boot
new file mode 100644
index 00000000000..c55f8d8e0c3
--- /dev/null
+++ b/scripts/Makefile.lib-u-boot
@@ -0,0 +1,96 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# U-Boot-specific rules for embedding binary data via .incbin
+# These are split out of Makefile.lib to simplify kbuild re-syncs.
+
+# Fonts
+# ---------------------------------------------------------------------------
+
+# Generate an assembly file to wrap the font data
+quiet_cmd_S_ttf= TTF $@
+cmd_S_ttf= \
+( \
+ echo '.section .rodata.ttf.init,"a"'; \
+ echo '.balign 16'; \
+ echo '.global __ttf_$(*F)_begin'; \
+ echo '__ttf_$(*F)_begin:'; \
+ echo '.incbin "$<" '; \
+ echo '__ttf_$(*F)_end:'; \
+ echo '.global __ttf_$(*F)_end'; \
+ echo '.balign 16'; \
+) > $@
+
+$(obj)/%.S: $(src)/%.ttf
+ $(call cmd,S_ttf)
+
+# Splash logos
+# ---------------------------------------------------------------------------
+
+# Generate an assembly file to wrap the splash data
+quiet_cmd_S_splash= TTF $@
+cmd_S_splash= \
+( \
+ echo '.section .rodata.splash.init,"a"'; \
+ echo '.balign 16'; \
+ echo '.global __splash_$(*F)_begin'; \
+ echo '__splash_$(*F)_begin:'; \
+ echo '.incbin "$<" '; \
+ echo '__splash_$(*F)_end:'; \
+ echo '.global __splash_$(*F)_end'; \
+ echo '.balign 16'; \
+) > $@
+
+$(obj)/%.S: $(src)/%.bmp
+ $(call cmd,S_splash)
+
+# EFI applications
+# A Makefile target *.efi is built as EFI application.
+# A Makefile target *_efi.S wraps *.efi as built-in EFI application.
+# ---------------------------------------------------------------------------
+
+# Generate an assembly file to wrap the EFI app
+cmd_S_efi= \
+( \
+ echo '.section .rodata.$*.init,"a"'; \
+ echo '.balign 16'; \
+ echo '.global __efi_$*_begin'; \
+ echo '__efi_$*_begin:'; \
+ echo '.incbin "$<" '; \
+ echo '__efi_$*_end:'; \
+ echo '.global __efi_$*_end'; \
+ echo '.balign 16'; \
+) > $@
+
+$(obj)/%_efi.S: $(obj)/%.efi
+ $(call cmd,S_efi)
+
+quiet_cmd_efi_objcopy = OBJCOPY $@
+cmd_efi_objcopy = $(OBJCOPY) -j .header -j .text -j .sdata -j .data \
+ -j .dynamic -j .dynstr -j .dynsym -j .rel* -j .reloc \
+ $(if $(EFI_TARGET),$(EFI_TARGET),-O binary) $^ $@
+
+$(obj)/%.efi: $(obj)/%_efi.so
+ $(call cmd,efi_objcopy)
+
+KBUILD_EFILDFLAGS = -nostdlib -zexecstack -znocombreloc -znorelro
+KBUILD_EFILDFLAGS += $(call ld-option,--no-warn-rwx-segments)
+quiet_cmd_efi_ld = LD $@
+cmd_efi_ld = $(LD) $(KBUILD_EFILDFLAGS) -L $(srctree) -T $(EFI_LDS_PATH) \
+ -shared -Bsymbolic -s $^ $(PLATFORM_LIBGCC) -o $@
+
+EFI_LDS_PATH = arch/$(ARCH)/lib/$(EFI_LDS)
+
+$(obj)/efi_crt0.o: $(srctree)/arch/$(ARCH)/lib/$(EFI_CRT0:.o=.S) FORCE
+ $(call if_changed_dep,as_o_S)
+
+$(obj)/efi_reloc.o: $(srctree)/arch/$(ARCH)/lib/$(EFI_RELOC:.o=.c) $(recordmcount_source) FORCE
+ $(call cmd,force_checksrc)
+ $(call if_changed_rule,cc_o_c)
+
+$(obj)/%_efi.so: $(obj)/%.o $(obj)/efi_crt0.o $(obj)/efi_reloc.o $(obj)/efi_freestanding.o
+ $(call cmd,efi_ld)
+
+targets += $(obj)/efi_crt0.o $(obj)/efi_reloc.o $(obj)/efi_freestanding.o
+
+CFLAGS_REMOVE_efi_reloc.o := $(LTO_CFLAGS)
+CFLAGS_REMOVE_efi_freestanding.o := $(LTO_CFLAGS)
diff --git a/scripts/Makefile.xpl b/scripts/Makefile.xpl
index c5ddf64c73f..862a8e6f231 100644
--- a/scripts/Makefile.xpl
+++ b/scripts/Makefile.xpl
@@ -88,6 +88,7 @@ include $(srctree)/config.mk
include $(srctree)/arch/$(ARCH)/Makefile
include $(srctree)/scripts/Makefile.lib
+include $(srctree)/scripts/Makefile.lib-u-boot
# Enable garbage collection of un-used sections for SPL
KBUILD_CFLAGS += -ffunction-sections -fdata-sections
---
base-commit: e2fa3e570f83ab0f9ce667ddaec9dc738bcf05b9
branch: font-us4
--
2.43.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v4 2/2] kbuild: Use if_changed for font and splash .incbin rules
2026-04-13 13:15 [PATCH v4 1/2] kbuild: Move U-Boot .incbin rules to Makefile.lib-u-boot Simon Glass
@ 2026-04-13 13:15 ` Simon Glass
2026-04-13 21:16 ` Rasmus Villemoes
2026-04-13 21:16 ` [PATCH v4 1/2] kbuild: Move U-Boot .incbin rules to Makefile.lib-u-boot Rasmus Villemoes
1 sibling, 1 reply; 4+ messages in thread
From: Simon Glass @ 2026-04-13 13:15 UTC (permalink / raw)
To: u-boot
Cc: Rasmus Villemoes, Simon Glass, Anatolij Gustschin, Dario Binacchi,
Heinrich Schuchardt, Ilias Apalodimas, Ion Agorria,
Patrice Chotard, Sughosh Ganu, Svyatoslav Ryhel, Tom Rini
The generated .S files for fonts and splash screens use .incbin with the
full prerequisite path. When building with O= this bakes an absolute
path into the .S file. If the build directory is later used on a
different machine (e.g. in a container), the assembler cannot find the
source file.
Follow the existing DTB convention: rename the object targets to use
compound suffixes (.ttf.o, .bmp.o), switch the pattern rules from
direct $(call cmd,...) to FORCE + $(call if_changed,...), and register
the new suffixes with intermediate_targets so that kbuild loads their
.cmd files. This lets if_changed detect when the recorded command
(including source paths) has changed and regenerate the .S file
automatically.
The EFI rule is left unchanged since its prerequisite is a generated
file in the build directory, like the DTB and DTBO rules.
The intermediate_targets entries stay in scripts/Makefile.build rather
than moving to scripts/Makefile.lib-u-boot, because that file is
included before intermediate_targets is defined and 'targets' is ':=',
so a '$(call intermediate_targets, ...)' inside it would expand to
empty and silently drop the entries. To keep the upstream block
untouched, the U-Boot additions go in a separate 'targets +=' block
immediately below.
Suggested-by: Rasmus Villemoes <ravi@prevas.dk>
Signed-off-by: Simon Glass <sjg@chromium.org>
---
Changes in v4:
- Add a separate 'targets +=' block for .ttf.o/.bmp.o per Rasmus
Changes in v3:
- Use if_changed with compound suffixes (.ttf.o, .bmp.o)
Changes in v2:
- Move U-Boot .incbin rules to Makefile.lib-u-boot first (previous patch)
- Drop the EFI .incbin change since .efi files are generated, not source
- Use per-file AFLAGS instead of modifying a_flags in Makefile.lib
drivers/video/Makefile | 2 +-
drivers/video/fonts/Makefile | 10 +++++-----
scripts/Makefile.build | 4 ++++
scripts/Makefile.lib-u-boot | 8 ++++----
4 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/drivers/video/Makefile b/drivers/video/Makefile
index 984768ea156..dbc3018d716 100644
--- a/drivers/video/Makefile
+++ b/drivers/video/Makefile
@@ -24,7 +24,7 @@ obj-$(CONFIG_$(PHASE_)PANEL) += panel-uclass.o
obj-$(CONFIG_PANEL_HX8238D) += hx8238d.o
obj-$(CONFIG_$(PHASE_)SIMPLE_PANEL) += simple_panel.o
-obj-$(CONFIG_VIDEO_LOGO) += u_boot_logo.o
+obj-$(CONFIG_VIDEO_LOGO) += u_boot_logo.bmp.o
obj-$(CONFIG_$(PHASE_)BMP) += bmp.o
endif
diff --git a/drivers/video/fonts/Makefile b/drivers/video/fonts/Makefile
index 1111f92a2c6..4d32fa43994 100644
--- a/drivers/video/fonts/Makefile
+++ b/drivers/video/fonts/Makefile
@@ -3,8 +3,8 @@
# (C) Copyright 2000-2007
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
-obj-$(CONFIG_CONSOLE_TRUETYPE_NIMBUS) += nimbus_sans_l_regular.o
-obj-$(CONFIG_CONSOLE_TRUETYPE_ANKACODER) += ankacoder_c75_r.o
-obj-$(CONFIG_CONSOLE_TRUETYPE_RUFSCRIPT) += rufscript010.o
-obj-$(CONFIG_CONSOLE_TRUETYPE_CANTORAONE) += cantoraone_regular.o
-obj-$(CONFIG_CONSOLE_TRUETYPE_DEJAVU) += dejavu_mono.o
+obj-$(CONFIG_CONSOLE_TRUETYPE_NIMBUS) += nimbus_sans_l_regular.ttf.o
+obj-$(CONFIG_CONSOLE_TRUETYPE_ANKACODER) += ankacoder_c75_r.ttf.o
+obj-$(CONFIG_CONSOLE_TRUETYPE_RUFSCRIPT) += rufscript010.ttf.o
+obj-$(CONFIG_CONSOLE_TRUETYPE_CANTORAONE) += cantoraone_regular.ttf.o
+obj-$(CONFIG_CONSOLE_TRUETYPE_DEJAVU) += dejavu_mono.ttf.o
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index e625f99986e..73b6769ab90 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -440,6 +440,10 @@ targets += $(call intermediate_targets, .asn1.o, .asn1.c .asn1.h) \
$(call intermediate_targets, .lex.o, .lex.c) \
$(call intermediate_targets, .tab.o, .tab.c .tab.h)
+# Added for U-Boot
+targets += $(call intermediate_targets, .ttf.o, .ttf.S) \
+ $(call intermediate_targets, .bmp.o, .bmp.S)
+
# Build
# ---------------------------------------------------------------------------
diff --git a/scripts/Makefile.lib-u-boot b/scripts/Makefile.lib-u-boot
index c55f8d8e0c3..4d60a8eee49 100644
--- a/scripts/Makefile.lib-u-boot
+++ b/scripts/Makefile.lib-u-boot
@@ -20,8 +20,8 @@ cmd_S_ttf= \
echo '.balign 16'; \
) > $@
-$(obj)/%.S: $(src)/%.ttf
- $(call cmd,S_ttf)
+$(obj)/%.ttf.S: $(src)/%.ttf FORCE
+ $(call if_changed,S_ttf)
# Splash logos
# ---------------------------------------------------------------------------
@@ -40,8 +40,8 @@ cmd_S_splash= \
echo '.balign 16'; \
) > $@
-$(obj)/%.S: $(src)/%.bmp
- $(call cmd,S_splash)
+$(obj)/%.bmp.S: $(src)/%.bmp FORCE
+ $(call if_changed,S_splash)
# EFI applications
# A Makefile target *.efi is built as EFI application.
---
base-commit: e2fa3e570f83ab0f9ce667ddaec9dc738bcf05b9
branch: font-us4
--
2.43.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v4 1/2] kbuild: Move U-Boot .incbin rules to Makefile.lib-u-boot
2026-04-13 13:15 [PATCH v4 1/2] kbuild: Move U-Boot .incbin rules to Makefile.lib-u-boot Simon Glass
2026-04-13 13:15 ` [PATCH v4 2/2] kbuild: Use if_changed for font and splash .incbin rules Simon Glass
@ 2026-04-13 21:16 ` Rasmus Villemoes
1 sibling, 0 replies; 4+ messages in thread
From: Rasmus Villemoes @ 2026-04-13 21:16 UTC (permalink / raw)
To: Simon Glass
Cc: u-boot, Tom Rini, Ilias Apalodimas, Adriano Cordova, Greg Malysa,
James Hilliard, Marek Vasut, Philip Molloy, Richard Genoud,
Sughosh Ganu, Tien Fong Chee
On Mon, Apr 13 2026, Simon Glass <sjg@chromium.org> wrote:
> The font, splash-screen and EFI .incbin wrapper rules are U-Boot
> additions that do not exist in the upstream Linux kbuild. Keeping them
> in scripts/Makefile.lib makes re-syncing with Linux harder than it needs
> to be, as every sync must manually preserve the U-Boot additions.
>
> Move these rules into a new scripts/Makefile.lib-u-boot and include it
> from Makefile.build and Makefile.xpl, right after the existing
> Makefile.lib include.
>
> This is a pure code-move with no functional change.
>
> Suggested-by: Tom Rini <trini@konsulko.com>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Reviewed-by: Rasmus Villemoes <ravi@prevas.dk>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v4 2/2] kbuild: Use if_changed for font and splash .incbin rules
2026-04-13 13:15 ` [PATCH v4 2/2] kbuild: Use if_changed for font and splash .incbin rules Simon Glass
@ 2026-04-13 21:16 ` Rasmus Villemoes
0 siblings, 0 replies; 4+ messages in thread
From: Rasmus Villemoes @ 2026-04-13 21:16 UTC (permalink / raw)
To: Simon Glass
Cc: u-boot, Anatolij Gustschin, Dario Binacchi, Heinrich Schuchardt,
Ilias Apalodimas, Ion Agorria, Patrice Chotard, Sughosh Ganu,
Svyatoslav Ryhel, Tom Rini
On Mon, Apr 13 2026, Simon Glass <sjg@chromium.org> wrote:
> The generated .S files for fonts and splash screens use .incbin with the
> full prerequisite path. When building with O= this bakes an absolute
> path into the .S file. If the build directory is later used on a
> different machine (e.g. in a container), the assembler cannot find the
> source file.
>
> Follow the existing DTB convention: rename the object targets to use
> compound suffixes (.ttf.o, .bmp.o), switch the pattern rules from
> direct $(call cmd,...) to FORCE + $(call if_changed,...), and register
> the new suffixes with intermediate_targets so that kbuild loads their
> .cmd files. This lets if_changed detect when the recorded command
> (including source paths) has changed and regenerate the .S file
> automatically.
>
> The EFI rule is left unchanged since its prerequisite is a generated
> file in the build directory, like the DTB and DTBO rules.
>
> The intermediate_targets entries stay in scripts/Makefile.build rather
> than moving to scripts/Makefile.lib-u-boot, because that file is
> included before intermediate_targets is defined and 'targets' is ':=',
> so a '$(call intermediate_targets, ...)' inside it would expand to
> empty and silently drop the entries. To keep the upstream block
> untouched, the U-Boot additions go in a separate 'targets +=' block
> immediately below.
>
> Suggested-by: Rasmus Villemoes <ravi@prevas.dk>
> Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Rasmus Villemoes <ravi@prevas.dk>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-04-13 21:16 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-13 13:15 [PATCH v4 1/2] kbuild: Move U-Boot .incbin rules to Makefile.lib-u-boot Simon Glass
2026-04-13 13:15 ` [PATCH v4 2/2] kbuild: Use if_changed for font and splash .incbin rules Simon Glass
2026-04-13 21:16 ` Rasmus Villemoes
2026-04-13 21:16 ` [PATCH v4 1/2] kbuild: Move U-Boot .incbin rules to Makefile.lib-u-boot Rasmus Villemoes
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox