On Wed, Mar 1, 2017 at 10:34 AM, Christian Ehrhardt <christian.ehrha...@canonical.com> wrote: > Downstreams might want to provide different DPDK releases at the same > time to support multiple consumers of DPDK linked against older and newer > sonames. > > Also due to the interdependencies that DPDK libraries can have applications > might end up with an executable space in which multiple versions of a > library are mapped by ld.so. > > Think of LibA that got an ABI bump and LibB that did not get an ABI bump > but is depending on LibA. > > Application > \-> LibA.old > \-> LibB.new -> LibA.new > > That is a conflict which can be avoided by setting CONFIG_RTE_MAJOR_ABI. > If set CONFIG_RTE_MAJOR_ABI overwrites any LIBABIVER value. > An example might be ``CONFIG_RTE_MAJOR_ABI=16.11`` which will make all > libraries librte<?>.so.16.11 instead of librte<?>.so.<LIBABIVER>. > > We need to cut arbitrary long stings after the .so now and this would work > for any ABI version in LIBABIVER: > $(Q)ln -s -f $< $(patsubst %.$(LIBABIVER),%,$@) > But using the following instead additionally allows to simplify the Make > File for the CONFIG_RTE_NEXT_ABI case. > $(Q)ln -s -f $< $(shell echo $@ | sed 's/\.so.*/.so/') > > Signed-off-by: Christian Ehrhardt <christian.ehrha...@canonical.com> > --- > config/common_base | 5 +++++ > doc/guides/contributing/versioning.rst | 25 +++++++++++++++++++++++++ > mk/rte.lib.mk | 14 +++++++++----- > 3 files changed, 39 insertions(+), 5 deletions(-) > > diff --git a/config/common_base b/config/common_base > index aeee13e..37aa1e1 100644 > --- a/config/common_base > +++ b/config/common_base > @@ -75,6 +75,11 @@ CONFIG_RTE_BUILD_SHARED_LIB=n > CONFIG_RTE_NEXT_ABI=y > > # > +# Major ABI to overwrite library specific LIBABIVER > +# > +CONFIG_RTE_MAJOR_ABI= > + > +# > # Machine's cache line size > # > CONFIG_RTE_CACHE_LINE_SIZE=64 > diff --git a/doc/guides/contributing/versioning.rst > b/doc/guides/contributing/versioning.rst > index fbc44a7..8aaf370 100644 > --- a/doc/guides/contributing/versioning.rst > +++ b/doc/guides/contributing/versioning.rst > @@ -133,6 +133,31 @@ The macros exported are: > fully qualified function ``p``, so that if a symbol becomes versioned, it > can still be mapped back to the public symbol name. > > +Setting a Major ABI version > +--------------------------- > + > +Downstreams might want to provide different DPDK releases at the same time to > +support multiple consumers of DPDK linked against older and newer sonames. > + > +Also due to the interdependencies that DPDK libraries can have applications > +might end up with an executable space in which multiple versions of a library > +are mapped by ld.so. > + > +Think of LibA that got an ABI bump and LibB that did not get an ABI bump but > is > +depending on LibA. > + > +.. note:: > + > + Application > + \-> LibA.old > + \-> LibB.new -> LibA.new > + > +That is a conflict which can be avoided by setting ``CONFIG_RTE_MAJOR_ABI``. > +If set, the value of ``CONFIG_RTE_MAJOR_ABI`` overwrites all - otherwise per > +library - versions defined in the libraries ``LIBABIVER``. > +An example might be ``CONFIG_RTE_MAJOR_ABI=16.11`` which will make all > libraries > +``librte<?>.so.16.11`` instead of ``librte<?>.so.<LIBABIVER>``. > + > Examples of ABI Macro use > ------------------------- > > diff --git a/mk/rte.lib.mk b/mk/rte.lib.mk > index 33a5f5a..1ffbf42 100644 > --- a/mk/rte.lib.mk > +++ b/mk/rte.lib.mk > @@ -40,12 +40,20 @@ EXTLIB_BUILD ?= n > # VPATH contains at least SRCDIR > VPATH += $(SRCDIR) > > +ifneq ($(CONFIG_RTE_MAJOR_ABI),) > +ifneq ($(LIBABIVER),) > +LIBABIVER := $(CONFIG_RTE_MAJOR_ABI) > +endif > +endif > + > ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y) > LIB := $(patsubst %.a,%.so.$(LIBABIVER),$(LIB)) > ifeq ($(EXTLIB_BUILD),n) > +ifeq ($(CONFIG_RTE_MAJOR_ABI),) > ifeq ($(CONFIG_RTE_NEXT_ABI),y) > LIB := $(LIB).1 > endif > +endif > CPU_LDFLAGS += --version-script=$(SRCDIR)/$(EXPORT_MAP) > endif > endif > @@ -156,11 +164,7 @@ $(RTE_OUTPUT)/lib/$(LIB): $(LIB) > @[ -d $(RTE_OUTPUT)/lib ] || mkdir -p $(RTE_OUTPUT)/lib > $(Q)cp -f $(LIB) $(RTE_OUTPUT)/lib > ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y) > -ifeq ($(CONFIG_RTE_NEXT_ABI)$(EXTLIB_BUILD),yn) > - $(Q)ln -s -f $< $(basename $(basename $@)) > -else > - $(Q)ln -s -f $< $(basename $@) > -endif > + $(Q)ln -s -f $< $(shell echo $@ | sed 's/\.so.*/.so/') > endif > > # > -- > 2.7.4 >
Reviewed-by: Jan Blunck <jblu...@infradead.org> Tested-by: Jan Blunck <jblu...@infradead.org>