ulib: Add static-library build support

Sometimes it is more convenient to link an application directly with a
static library.

Add build rules to create libu-boot.a as a static library alongside the
existing shared library (libu-boot.so).

The static library is a fat archive containing all U-Boot object files
except for arch/sandbox/cpu/main.o since it contains main().

A temporary thin archive is used to collect all the objects.

Co-developed-by: Claude <noreply@anthropic.com>
Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2025-09-03 17:01:02 -06:00
parent 318f3aee3d
commit 2786961c63

View File

@@ -1046,6 +1046,7 @@ INPUTS-$(CONFIG_X86) += u-boot-x86-start16.bin u-boot-x86-reset16.bin \
ifdef CONFIG_CMDLINE
ifneq ($(cc-name),clang)
INPUTS-$(CONFIG_ULIB) += libu-boot.so test/ulib/ulib_test
INPUTS-$(CONFIG_ULIB) += libu-boot.a
endif
endif
@@ -1869,6 +1870,20 @@ libu-boot.so: $(u-boot-init) $(u-boot-main) $(u-boot-keep-syms-lto) \
$(LIB_LDS) FORCE
$(call if_changed,libu-boot.so)
# Build U-Boot as a static library
# Create a fat archive with all object files (except arch/sandbox/cpu/main.o)
# Avoid partial linking so as to preserve the linker-list sections
quiet_cmd_libu-boot.a = AR $@
cmd_libu-boot.a = rm -f $@ $@.tmp $@.objlist; \
$(AR) rcT $@.tmp $(u-boot-init) $(u-boot-main) \
$(u-boot-keep-syms-lto); \
$(AR) t $@.tmp | grep -v "arch/sandbox/cpu/main\.o$$" > $@.objlist; \
cat $@.objlist | xargs $(AR) rcs $@; \
rm -f $@.tmp $@.objlist
libu-boot.a: $(u-boot-init) $(u-boot-main) $(u-boot-keep-syms-lto) FORCE
$(call if_changed,libu-boot.a)
# Build ulib_test that links with shared library
quiet_cmd_ulib_test = HOSTCC $@
cmd_ulib_test = $(HOSTCC) $(HOSTCFLAGS) \