[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH] build: Support for static libraries
Introduce support for linking (externally built) static libraries. A static library can be registered at three different places: * [LIBNAME]_ALIBS and [LIBNAME]_ALIBS-y static libraries used when (pre-)linking a library object * [PLATNAME]_ALIBS and [PLATNAME]_ALIBS-y static libraries that are linked at the final linking step but only for a specific platform * UK_ALIBS and UK_ALIBS-y static libraries that are linked at the final linking step While the link order of object files is irrelevant to the linker, static libraries are handled differently. During linking, static libraries are only visited once. Only objects from these libraries are taken that solve at least one yet unresolved symbol. Because of this, we populate the list of static libraries right after populating all relevant object files. Any order or circular dependency within a group the static libraries is resolved by instructing the linker to scan the archives multiple times. This is done by the --start-group and --end-group linker flags. With this change, we also remove the UK_LINK and UK_LINK-y variables that were used to simplify the platform's linker scripts. Because of the link order and additional linker flags, we directly assemble the linker command by taken the items from the corresponding OLIBS and ALIBS lists. Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> --- Makefile | 2 -- plat/kvm/Linker.uk | 13 ++++++++++--- plat/linuxu/Linker.uk | 14 ++++++++++++-- plat/xen/Linker.uk | 13 ++++++++++--- support/build/Makefile.build | 3 --- support/build/Makefile.rules | 15 ++++++++++++--- 6 files changed, 44 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 96be2db..1e2d035 100644 --- a/Makefile +++ b/Makefile @@ -188,8 +188,6 @@ UK_ALIBS:= UK_ALIBS-y:= UK_OLIBS:= UK_OLIBS-y:= -UK_LINK:= -UK_LINK-y:= UK_SRCS:= UK_SRCS-y:= UK_DEPS:= diff --git a/plat/kvm/Linker.uk b/plat/kvm/Linker.uk index daf2efe..e0a5677 100644 --- a/plat/kvm/Linker.uk +++ b/plat/kvm/Linker.uk @@ -13,12 +13,19 @@ endif ## KVM_IMAGE := $(BUILD_DIR)/$(CONFIG_UK_NAME)_kvm-$(CONFIG_UK_ARCH) -$(KVM_IMAGE): $(KVM_LINK) $(KVM_LINK-y) $(UK_LINK) $(UK_LINK-y) $(KVM_LDSCRIPT) +$(KVM_IMAGE): $(KVM_ALIBS) $(KVM_ALIBS-y) $(KVM_OLIBS) $(KVM_OLIBS-y) \ + $(UK_ALIBS) $(UK_ALIBS-y) $(UK_OLIBS) $(UK_OLIBS-y) \ + $(KVM_LDSCRIPT) $(call build_cmd,LD,,$@.ld.o,\ $(LD) -r $(LIBLDFLAGS) $(LIBLDFLAGS-y) \ $(KVM_LDFLAGS) $(KVM_LDFLAGS-y) \ - $(KVM_LINK) $(KVM_LINK-y) \ - $(UK_LINK) $(UK_LINK-y) -o $@.ld.o) + $(KVM_OLIBS) $(KVM_OLIBS-y) \ + $(UK_OLIBS) $(UK_OLIBS-y) \ + -Wl$(comma)--start-group \ + $(KVM_ALIBS) $(KVM_ALIBS-y) \ + $(UK_ALIBS) $(UK_ALIBS-y) \ + -Wl$(comma)--end-group \ + -o $@.ld.o) $(call build_cmd,OBJCOPY,,$@.o,\ $(OBJCOPY) -w -G kvmos_* -G _libkvmplat_entry $@.ld.o $@.o) ifneq ($(filter x86_64 arm64,$(CONFIG_UK_ARCH)),) diff --git a/plat/linuxu/Linker.uk b/plat/linuxu/Linker.uk index abef585..9e4b2a9 100644 --- a/plat/linuxu/Linker.uk +++ b/plat/linuxu/Linker.uk @@ -5,9 +5,19 @@ LINUXU_LDFLAGS-y += -Wl,-e,_liblinuxuplat_start ## LINUXU_IMAGE := $(BUILD_DIR)/$(CONFIG_UK_NAME)_linuxu-$(CONFIG_UK_ARCH) -$(LINUXU_IMAGE): $(LINUXU_LINK) $(LINUXU_LINK-y) $(UK_LINK) $(UK_LINK-y) +$(LINUXU_IMAGE): $(LINUXU_ALIBS) $(LINUXU_ALIBS-y) \ + $(LINUXU_OLIBS) $(LINUXU_OLIBS-y) \ + $(UK_ALIBS) $(UK_ALIBS-y) $(UK_OLIBS) $(UK_OLIBS-y) $(call build_cmd,LD,,$@,\ - $(LD) $(LDFLAGS) $(LDFLAGS-y) $(LINUXU_LDFLAGS) $(LINUXU_LDFLAGS-y) $^ -o $@) + $(LD) $(LDFLAGS) $(LDFLAGS-y) \ + $(LINUXU_LDFLAGS) $(LINUXU_LDFLAGS-y) \ + $(LINUXU_OLIBS) $(LINUXU_OLIBS-y) \ + $(UK_OLIBS) $(UK_OLIBS-y) \ + -Wl$(comma)--start-group \ + $(LINUXU_ALIBS) $(LINUXU_ALIBS-y) \ + $(UK_ALIBS) $(UK_ALIBS-y) \ + -Wl$(comma)--end-group \ + -o $@) ifeq ($(CONFIG_OPTIMIZE_DBGFILE),y) $(call build_cmd,OBJCOPY,,$@.dbg,\ $(OBJCOPY) --only-keep-debug $@ $@.dbg) diff --git a/plat/xen/Linker.uk b/plat/xen/Linker.uk index 55c27fd..df84c20 100644 --- a/plat/xen/Linker.uk +++ b/plat/xen/Linker.uk @@ -18,12 +18,19 @@ endif ## XEN_IMAGE := $(BUILD_DIR)/$(CONFIG_UK_NAME)_xen-$(CONFIG_UK_ARCH) -$(XEN_IMAGE): $(XEN_LINK) $(XEN_LINK-y) $(UK_LINK) $(UK_LINK-y) $(XEN_LDSCRIPT) +$(XEN_IMAGE): $(XEN_ALIBS) $(XEN_ALIBS-y) $(XEN_OLIBS) $(XEN_OLIBS-y) \ + $(UK_ALIBS) $(UK_ALIBS-y) $(UK_OLIBS) $(UK_OLIBS-y) \ + $(XEN_LDSCRIPT) $(call build_cmd,LD,,$@.ld.o,\ $(LD) -r $(LIBLDFLAGS) $(LIBLDFLAGS-y) \ $(XEN_LDFLAGS) $(XEN_LDFLAGS-y) \ - $(XEN_LINK) $(XEN_LINK-y) \ - $(UK_LINK) $(UK_LINK-y) -o $@.ld.o) + $(XEN_OLIBS) $(XEN_OLIBS-y) \ + $(UK_OLIBS) $(UK_OLIBS-y) \ + -Wl$(comma)--start-group \ + $(XEN_ALIBS) $(XEN_ALIBS-y) \ + $(UK_ALIBS) $(UK_ALIBS-y) \ + -Wl$(comma)--end-group \ + -o $@.ld.o) $(call build_cmd,OBJCOPY,,$@.o,\ $(OBJCOPY) -w -G xenos_* -G _libxenplat_start $@.ld.o $@.o) ifeq (arm,$(CONFIG_UK_ARCH)) diff --git a/support/build/Makefile.build b/support/build/Makefile.build index e65861e..5679741 100644 --- a/support/build/Makefile.build +++ b/support/build/Makefile.build @@ -35,8 +35,6 @@ $(eval UK_OLIBS-y += $(call libname2olib,$(L))); \ ) endif -UK_LINK-y += $(UK_OLIBS-y) - ################################################# # @@ -57,6 +55,5 @@ $(eval $(call uc,$(P))_OLIBS-y += $(call libname2olib,$(L))); \ ) \ ) \ ); \ -$(eval $(call uc,$(P))_LINK-y += $($(call uc,$(P))_OLIBS-y)) \ ) endif diff --git a/support/build/Makefile.rules b/support/build/Makefile.rules index 687ef98..36fb8db 100644 --- a/support/build/Makefile.rules +++ b/support/build/Makefile.rules @@ -489,11 +489,20 @@ $(if $(wildcard $($(call vprefix_lib,$(1),EXPORTS))),,\ $(warning Warning: Definition of exported symbols for $(1) missing: $($(call vprefix_lib,$(1),EXPORTS))) \ ) -$(call libname2preolib,$(1)): $($(call vprefix_lib,$(1),OBJS)) $($(call vprefix_lib,$(1),OBJS-y)) +$(call libname2preolib,$(1)): $($(call vprefix_lib,$(1),OBJS)) \ + $($(call vprefix_lib,$(1),OBJS-y)) \ + $($(call vprefix_lib,$(1),ALIBS)) \ + $($(call vprefix_lib,$(1),ALIBS-y)) $(call build_cmd,LD,,$(call libname2preolib,$(1)),\ $(LD) $(LIBLDFLAGS) $(LIBLDFLAGS-y) \ - $($(call vprefix_lib,$(1),LDFLAGS)) $($(call vprefix_lib,$(1),LDFLAGS-y)) \ - $($(call vprefix_lib,$(1),OBJS)) $($(call vprefix_lib,$(1),OBJS-y)) \ + $($(call vprefix_lib,$(1),LDFLAGS)) \ + $($(call vprefix_lib,$(1),LDFLAGS-y)) \ + $($(call vprefix_lib,$(1),OBJS)) \ + $($(call vprefix_lib,$(1),OBJS-y)) \ + -Wl$(comma)--start-group \ + $($(call vprefix_lib,$(1),ALIBS)) \ + $($(call vprefix_lib,$(1),ALIBS-y)) \ + -Wl$(comma)--end-group \ -o $(call libname2preolib,$(1))) $(call libname2olib,$(1)): $(call libname2preolib,$(1)) $(if $(wildcard $($(call vprefix_lib,$(1),EXPORTS))),$($(call vprefix_lib,$(1),EXPORTS)),) -- 2.7.4 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |