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:
15
Makefile
15
Makefile
@@ -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) \
|
||||
|
||||
Reference in New Issue
Block a user