Hi Panu, thanks for refreshing that - I'm much more happy with ldd output of most libraries now after build with that. And it comes much slimmer than my initial approach that touched all lib makefiles.
Acked-by: Christian Ehrhardt <christian.ehrhardt at canonical.com> FYI - for anyone else also trying this in a backported way to 16.04 it needs c6417ce6 and aace9d0b as prereq. This being done is a nice step taken towards saner linking. But I still struggle to see how to fix the circular dependency between librte_eal and librte_mempool. Maybe now is a time to look at this part of the original threads again to eventually get apps less overlinked? => http://www.dpdk.org/ml/archives/dev/2016-May/039441.html My naive suggestions in generalized form can be found there (no answer yet): => http://stackoverflow.com/questions/37351699/how-to-create-both-so-files-for-two-circular-depending-libraries Kind Regards, Christian Christian Ehrhardt Software Engineer, Ubuntu Server Canonical Ltd On Tue, Jun 7, 2016 at 12:01 PM, Panu Matilainen <pmatilai at redhat.com> wrote: > Up to now dependencies between DPDK internal libraries have been > untracked at shared library level, requiring applications to know > about library internal dependencies and often consequently overlinking. > > Since the dependencies are already recorded for build ordering in the > makefiles, we can use that information to generate LDLIBS entries for > internal libraries automatically. > > Also revert commit 8180554d82b3 ("vhost: fix linkage of driver with > library") which is made redundant by this change. > > Signed-off-by: Panu Matilainen <pmatilai at redhat.com> > --- > drivers/net/vhost/Makefile | 1 - > mk/rte.lib.mk | 7 +++++++ > 2 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/vhost/Makefile b/drivers/net/vhost/Makefile > index 30b91a0..f49a69b 100644 > --- a/drivers/net/vhost/Makefile > +++ b/drivers/net/vhost/Makefile > @@ -38,7 +38,6 @@ LIB = librte_pmd_vhost.a > > CFLAGS += -O3 > CFLAGS += $(WERROR_FLAGS) > -LDLIBS += -lrte_vhost > > EXPORT_MAP := rte_pmd_vhost_version.map > > diff --git a/mk/rte.lib.mk b/mk/rte.lib.mk > index b420280..1ff403f 100644 > --- a/mk/rte.lib.mk > +++ b/mk/rte.lib.mk > @@ -77,6 +77,13 @@ else > _CPU_LDFLAGS := $(CPU_LDFLAGS) > endif > > +# Translate DEPDIRS-y into LDLIBS > +# Ignore (sub)directory dependencies which do not provide an actual > library > +_IGNORE_DIRS = lib/librte_eal/% lib/librte_net lib/librte_compat > +_DEPDIRS = $(filter-out $(_IGNORE_DIRS),$(DEPDIRS-y)) > +_LDDIRS = $(subst librte_ether,libethdev,$(_DEPDIRS)) > +LDLIBS += $(subst lib/lib,-l,$(_LDDIRS)) > + > O_TO_A = $(AR) crDs $(LIB) $(OBJS-y) > O_TO_A_STR = $(subst ','\'',$(O_TO_A)) #'# fix syntax highlight > O_TO_A_DISP = $(if $(V),"$(O_TO_A_STR)"," AR $(@)") > -- > 2.5.5 > >