|
[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 |