kbuild: Use if_changed for font and splash .incbin rules

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>
This commit is contained in:
Simon Glass
2026-04-13 07:15:38 -06:00
committed by Tom Rini
parent 24b99d2933
commit 09297182ad
4 changed files with 14 additions and 10 deletions

View File

@@ -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
# ---------------------------------------------------------------------------

View File

@@ -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.