[PATCH] Makefile: Make sure all linker input objects exist

Quentin Schulz quentin.schulz at cherry.de
Wed Jan 15 11:38:47 CET 2025


Hi Marek,

On 1/12/25 11:32 PM, Marek Vasut wrote:
> 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 <marek.vasut+renesas at mailbox.org>

I tested this with the following diff:

"""
diff --git a/board/theobroma-systems/common/Makefile 
b/board/theobroma-systems/common/Makefile
new file mode 100644
index 00000000000..6125c1a0b79
--- /dev/null
+++ b/board/theobroma-systems/common/Makefile
@@ -0,0 +1,9 @@
+#
+# Copyright (c) 2025 Cherry Embedded Solutions GmbH
+#
+# SPDX-License-Identifier:	GPL-2.0-or-later
+#
+
+ifneq ($(CONFIG_XPL_BUILD),y)
+obj-y        += common.o
+endif
diff --git a/board/theobroma-systems/jaguar_rk3588/Makefile 
b/board/theobroma-systems/jaguar_rk3588/Makefile
index d43bf194b68..38b73d2846c 100644
--- a/board/theobroma-systems/jaguar_rk3588/Makefile
+++ b/board/theobroma-systems/jaguar_rk3588/Makefile
@@ -5,6 +5,3 @@
  #

  obj-y += jaguar_rk3588.o
-ifneq ($(CONFIG_XPL_BUILD),y)
-obj-y	+= ../common/common.o
-endif
diff --git a/board/theobroma-systems/puma_rk3399/Makefile 
b/board/theobroma-systems/puma_rk3399/Makefile
index 2256e72cda1..d962b56f111 100644
--- a/board/theobroma-systems/puma_rk3399/Makefile
+++ b/board/theobroma-systems/puma_rk3399/Makefile
@@ -5,6 +5,3 @@
  #

  obj-y	+= puma-rk3399.o
-ifneq ($(CONFIG_XPL_BUILD),y)
-obj-y	+= ../common/common.o
-endif
diff --git a/board/theobroma-systems/ringneck_px30/Makefile 
b/board/theobroma-systems/ringneck_px30/Makefile
index 4d108f2d011..31ada1a6942 100644
--- a/board/theobroma-systems/ringneck_px30/Makefile
+++ b/board/theobroma-systems/ringneck_px30/Makefile
@@ -5,6 +5,3 @@
  #

  obj-y	+= ringneck-px30.o
-ifneq ($(CONFIG_XPL_BUILD),y)
-obj-y	+= ../common/common.o
-endif
diff --git a/board/theobroma-systems/tiger_rk3588/Makefile 
b/board/theobroma-systems/tiger_rk3588/Makefile
index 94b0859eb35..900647735fb 100644
--- a/board/theobroma-systems/tiger_rk3588/Makefile
+++ b/board/theobroma-systems/tiger_rk3588/Makefile
@@ -5,6 +5,3 @@
  #

  obj-y += tiger_rk3588.o
-ifneq ($(CONFIG_XPL_BUILD),y)
-obj-y	+= ../common/common.o
-endif
"""

which allows me to use HAVE_VENDOR_COMMON_LIB mechanism with an empty 
Makefile for TPL/SPL build stage, so:

Tested-by: Quentin Schulz <quentin.schulz at cherry.de>

Looking forward to being able to use HAVE_VENDOR_COMMON_LIB!

Though I could actually always include the file and just ifdef 
CONFIG_XPL_BUILD in common.o, but let's see where this patch goes first :)

Thanks!
Quentin


More information about the U-Boot mailing list