[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH v5 1/4] build: Introduce symbols exporting for each library
In order to avoid symbol conflicts and relaxing on namespacing of library-internal symbols, each library should provide an `exportsyms.uk` file in its base directory. This file lists the name of all symbols that should be exported by the library, the rest is treated as internal symbol which cannot be linked by another library. A warning is thrown by `make` whenever this symbols file is absent. The scope of each symbol for such a library stays unchanged. This way, this patch won't break existing Unikraft projects and libraries. The location of this file can be overwritten by defining the path with the [LIBNAME]_EXPORTS variable within the appropriate `Makefile.uk`. Signed-off-by: Yuri Volchkov <yuri.volchkov@xxxxxxxxx> Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> Reviewed-by: Florian Schmidt <florian.schmidt@xxxxxxxxx> --- support/build/Makefile.rules | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/support/build/Makefile.rules b/support/build/Makefile.rules index e317e3d..35e2921 100644 --- a/support/build/Makefile.rules +++ b/support/build/Makefile.rules @@ -121,8 +121,9 @@ endef define addlib = $(call mk_sub_build_dir,$(1)) UK_LIBS += $(1) -$(eval $(call uc,$(1))_BASE := $(_IMPORT_BASE)) -$(eval $(call uc,$(1))_BUILD := $(BUILD_DIR)/$(1)) +$(eval $(call uc,$(1))_BASE := $(_IMPORT_BASE)) +$(eval $(call uc,$(1))_BUILD := $(BUILD_DIR)/$(1)) +$(eval $(call uc,$(1))_EXPORTS := $(_IMPORT_BASE)/exportsyms.uk) endef # addlib_s $libname,$switch @@ -136,9 +137,10 @@ endef # addplatlib $platname,$libname define addplatlib = $(call mk_sub_build_dir,$(2)) -$(eval $(call uc,$(1))_LIBS += $(2)) -$(eval $(call uc,$(2))_BASE := $(_IMPORT_BASE)) -$(eval $(call uc,$(2))_BUILD := $(BUILD_DIR)/$(2)) +$(eval $(call uc,$(1))_LIBS += $(2)) +$(eval $(call uc,$(2))_BASE := $(_IMPORT_BASE)) +$(eval $(call uc,$(2))_BUILD := $(BUILD_DIR)/$(2)) +$(eval $(call uc,$(2))_EXPORTS := $(_IMPORT_BASE)/exportsyms.uk) endef # addplatlib_s $platname,$libname,$switch @@ -412,6 +414,10 @@ endef # buildrule_olib $libname define buildrule_olib = +$(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 build_cmd,LD,,$(call libname2preolib,$(1)),\ $(LD) $(LIBLDFLAGS) $(LIBLDFLAGS-y) \ @@ -419,9 +425,10 @@ $(call libname2preolib,$(1)): $($(call vprefix_lib,$(1),OBJS)) $($(call vprefix_ $($(call vprefix_lib,$(1),OBJS)) $($(call vprefix_lib,$(1),OBJS-y)) \ -o $(call libname2preolib,$(1))) -$(call libname2olib,$(1)): $(call libname2preolib,$(1)) +$(call libname2olib,$(1)): $(call libname2preolib,$(1)) $(if $(wildcard $($(call vprefix_lib,$(1),EXPORTS))),$($(call vprefix_lib,$(1),EXPORTS)),) $(call build_cmd,OBJCOPY,,$(call libname2olib,$(1)),\ - $(OBJCOPY) $(OBJCFLAGS) $(OBJCFLAGS-y) \ + $(OBJCOPY) $(if $(wildcard $($(call vprefix_lib,$(1),EXPORTS))),--keep-global-symbols=$($(call vprefix_lib,$(1),EXPORTS)),) \ + $(OBJCFLAGS) $(OBJCFLAGS-y) \ $($(call vprefix_lib,$(1),OBJCFLAGS)) $($(call vprefix_lib,$(1),OBJCFLAGS-y)) \ $(call libname2preolib,$(1)) $(call libname2olib,$(1))) -- 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 |