public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [PATCH v3 1/2] kbuild: Move U-Boot .incbin rules to Makefile.lib-u-boot
@ 2026-04-05 10:42 Simon Glass
  2026-04-05 10:42 ` [PATCH v3 2/2] kbuild: Use if_changed for font and splash .incbin rules Simon Glass
  0 siblings, 1 reply; 3+ messages in thread
From: Simon Glass @ 2026-04-05 10:42 UTC (permalink / raw)
  To: u-boot
  Cc: Rasmus Villemoes, Simon Glass, Tom Rini, Ilias Apalodimas,
	Adriano Cordova, Andre Przywara, Greg Malysa, James Hilliard,
	Marek Vasut, Philip Molloy, Quentin Schulz, 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
-- 
2.43.0

base-commit: 1c1bfb1cf34bbb2a5717eb6995c55093279f9341
branch: font-us3

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH v3 2/2] kbuild: Use if_changed for font and splash .incbin rules
  2026-04-05 10:42 [PATCH v3 1/2] kbuild: Move U-Boot .incbin rules to Makefile.lib-u-boot Simon Glass
@ 2026-04-05 10:42 ` Simon Glass
  2026-04-09  7:01   ` Rasmus Villemoes
  0 siblings, 1 reply; 3+ messages in thread
From: Simon Glass @ 2026-04-05 10:42 UTC (permalink / raw)
  To: u-boot
  Cc: Rasmus Villemoes, Simon Glass, Anatolij Gustschin, Dario Binacchi,
	Heinrich Schuchardt, Ilias Apalodimas, Ion Agorria, Miquel Raynal,
	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.

Suggested-by: Rasmus Villemoes <ravi@prevas.dk>
Signed-off-by: Simon Glass <sjg@chromium.org>
---

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, 13 insertions(+), 11 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..067c38c4cdd 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -438,7 +438,9 @@ intermediate_targets = $(foreach sfx, $(2), \
 targets += $(call intermediate_targets, .asn1.o, .asn1.c .asn1.h) \
 	   $(call intermediate_targets, .dtb.o, .dtb.S .dtb) \
 	   $(call intermediate_targets, .lex.o, .lex.c) \
-	   $(call intermediate_targets, .tab.o, .tab.c .tab.h)
+	   $(call intermediate_targets, .tab.o, .tab.c .tab.h) \
+	   $(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.
-- 
2.43.0

base-commit: 1c1bfb1cf34bbb2a5717eb6995c55093279f9341
branch: font-us3

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v3 2/2] kbuild: Use if_changed for font and splash .incbin rules
  2026-04-05 10:42 ` [PATCH v3 2/2] kbuild: Use if_changed for font and splash .incbin rules Simon Glass
@ 2026-04-09  7:01   ` Rasmus Villemoes
  0 siblings, 0 replies; 3+ messages in thread
From: Rasmus Villemoes @ 2026-04-09  7:01 UTC (permalink / raw)
  To: Simon Glass
  Cc: u-boot, Anatolij Gustschin, Dario Binacchi, Heinrich Schuchardt,
	Ilias Apalodimas, Ion Agorria, Miquel Raynal, Patrice Chotard,
	Sughosh Ganu, Svyatoslav Ryhel, Tom Rini

On Sun, Apr 05 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.
>
> Suggested-by: Rasmus Villemoes <ravi@prevas.dk>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
> 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
>

> diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> index e625f99986e..067c38c4cdd 100644
> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -438,7 +438,9 @@ intermediate_targets = $(foreach sfx, $(2), \
>  targets += $(call intermediate_targets, .asn1.o, .asn1.c .asn1.h) \
>  	   $(call intermediate_targets, .dtb.o, .dtb.S .dtb) \
>  	   $(call intermediate_targets, .lex.o, .lex.c) \
> -	   $(call intermediate_targets, .tab.o, .tab.c .tab.h)
> +	   $(call intermediate_targets, .tab.o, .tab.c .tab.h) \
> +	   $(call intermediate_targets, .ttf.o, .ttf.S) \
> +	   $(call intermediate_targets, .bmp.o, .bmp.S)

Do these extra lines need to go here, causing a conflict with the next
kbuild sync, or could one instead add

  targets += $(call intermediate_targets, .ttf.o, .ttf.S) \
             $(call intermediate_targets, .bmp.o, .bmp.S)

in the new Makefile.lib-u-boot? I think that would make more sense. But
there may be some ordering of makefile includes that makes that not
posssible.

At the very least, I think the additions to targets should go in a new
'targets +=', just to separate them a little better from upstream and
making it pure code addition instead of having to modify that last line
to add a continuation marker.

Rasmus

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-04-09  7:01 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-05 10:42 [PATCH v3 1/2] kbuild: Move U-Boot .incbin rules to Makefile.lib-u-boot Simon Glass
2026-04-05 10:42 ` [PATCH v3 2/2] kbuild: Use if_changed for font and splash .incbin rules Simon Glass
2026-04-09  7:01   ` Rasmus Villemoes

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox