diff options
| author | Marek Vasut <[email protected]> | 2025-01-12 23:32:38 +0100 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2025-01-18 08:28:16 -0600 |
| commit | 37a777e1286e5c43a8d5b9babeec9436733224d7 (patch) | |
| tree | 8b473987e6baa213ec0b2457f7fa092ca3f856e0 | |
| parent | 24c76a1f437b75157cca8072b4ec124e5827565a (diff) | |
Makefile: Make sure all linker input objects exist
In case the build system builds a directory with empty Makefile,
one which does not contain any obj-y entries, the build fails to
link due to missing built-in.o .
This happens because of this part of scripts/Makefile.build
81 ifneq ($(strip $(obj-y) $(obj-m) $(obj-) $(subdir-m) $(lib-target)),)
82 builtin-target := $(obj)/built-in.o
83 endif
which does not assign builtin-target in case obj-y is empty. The
built-in target is then not built at all, and built-in.o is not
generated by this part of scripts/Makefile.build
325 ifdef builtin-target
326 quiet_cmd_link_o_target = AR $@
327 # If the list of objects to link is empty, just create an empty built-in.o
...
335 targets += $(builtin-target)
336 endif # builtin-target
This is the correct behavior.
The final link however expects the built-in.o to exist in every directory
included in the build, even in those where the aforementioned code skipped
generation of built-in.o . Make sure the built-in.o does exist for every
directory used in final link simply by doing touch on every built-in.o used
for the link, which will create empty built-in.o in case any built-in.o is
missing.
A possible alternative fix is the always define the builtin-target
and always generate built-in.o .
Signed-off-by: Marek Vasut <[email protected]>
Tested-by: Quentin Schulz <[email protected]>
| -rw-r--r-- | Makefile | 5 | ||||
| -rw-r--r-- | arch/sandbox/config.mk | 8 | ||||
| -rw-r--r-- | scripts/Makefile.xpl | 2 |
3 files changed, 12 insertions, 3 deletions
@@ -1788,6 +1788,7 @@ endif ifeq ($(LTO_ENABLE),y) quiet_cmd_u-boot__ ?= LTO $@ cmd_u-boot__ ?= \ + touch $(u-boot-main) ; \ $(CC) -nostdlib -nostartfiles \ $(LTO_FINAL_LDFLAGS) $(c_flags) \ $(KBUILD_LDFLAGS:%=-Wl,%) $(LDFLAGS_u-boot:%=-Wl,%) -o $@ \ @@ -1801,7 +1802,9 @@ quiet_cmd_u-boot__ ?= LTO $@ $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) else quiet_cmd_u-boot__ ?= LD $@ - cmd_u-boot__ ?= $(LD) $(KBUILD_LDFLAGS) $(LDFLAGS_u-boot) -o $@ \ + cmd_u-boot__ ?= \ + touch $(u-boot-main) ; \ + $(LD) $(KBUILD_LDFLAGS) $(LDFLAGS_u-boot) -o $@ \ -T u-boot.lds $(u-boot-init) \ --whole-archive \ $(u-boot-main) \ diff --git a/arch/sandbox/config.mk b/arch/sandbox/config.mk index 405843800e9..dd9b7473fa9 100644 --- a/arch/sandbox/config.mk +++ b/arch/sandbox/config.mk @@ -22,7 +22,9 @@ SANITIZERS += -fsanitize=fuzzer endif KBUILD_CFLAGS += $(SANITIZERS) -cmd_u-boot__ = $(CC) -o $@ -Wl,-T u-boot.lds $(u-boot-init) \ +cmd_u-boot__ = \ + touch $(u-boot-main) ; \ + $(CC) -o $@ -Wl,-T u-boot.lds $(u-boot-init) \ $(KBUILD_LDFLAGS:%=-Wl,%) \ $(SANITIZERS) \ $(LTO_FINAL_LDFLAGS) \ @@ -32,7 +34,9 @@ cmd_u-boot__ = $(CC) -o $@ -Wl,-T u-boot.lds $(u-boot-init) \ -Wl,--no-whole-archive \ $(PLATFORM_LIBS) -Wl,-Map -Wl,u-boot.map -Wl,--gc-sections -cmd_u-boot-spl = (cd $(obj) && $(CC) -o $(SPL_BIN) -Wl,-T u-boot-spl.lds \ +cmd_u-boot-spl = (cd $(obj) && \ + touch $(patsubst $(obj)/%,%,$(u-boot-spl-main)) && \ + $(CC) -o $(SPL_BIN) -Wl,-T u-boot-spl.lds \ $(KBUILD_LDFLAGS:%=-Wl,%) \ $(SANITIZERS) \ $(LTO_FINAL_LDFLAGS) \ diff --git a/scripts/Makefile.xpl b/scripts/Makefile.xpl index dca5f4539d0..abc49fbe6c9 100644 --- a/scripts/Makefile.xpl +++ b/scripts/Makefile.xpl @@ -510,6 +510,7 @@ quiet_cmd_u-boot-spl ?= LTO $@ cmd_u-boot-spl ?= \ ( \ cd $(obj) && \ + touch $(patsubst $(obj)/%,%,$(u-boot-spl-main)) && \ $(CC) -nostdlib -nostartfiles $(LTO_FINAL_LDFLAGS) $(c_flags) \ $(KBUILD_LDFLAGS:%=-Wl,%) $(LDFLAGS_$(@F):%=-Wl,%) \ $(patsubst $(obj)/%,%,$(u-boot-spl-init)) \ @@ -526,6 +527,7 @@ quiet_cmd_u-boot-spl ?= LD $@ cmd_u-boot-spl ?= \ ( \ cd $(obj) && \ + touch $(patsubst $(obj)/%,%,$(u-boot-spl-main)) && \ $(LD) $(KBUILD_LDFLAGS) $(LDFLAGS_$(@F)) \ $(patsubst $(obj)/%,%,$(u-boot-spl-init)) \ --whole-archive \ |
