Skip to contentSkip to conversation

mk: fix external shared library dependencies of libraries

PATCH In review Panu Matilainen 4 participants 10 messages Dec 8, 2015 – Mar 15, 2016

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 mk: fix external shared library dependencies of libraries

Similar to commit 5f9115e58cc6f304ff4ade694cf5823d32887d1a etc, but for libraries. Clean up librte_vhost CFLAGS/LDFLAGS/LDLIBS confusion while at it.

Requiring applications to know about library internal details like dependencies to external helper libraries is a limitation of static linkage, shared libraries should always know their own dependencies for sane operation.

Linking with the combined library (whether shared or not) still requires knowing the internal dependencies, and intra-dpdk dependencies are also not currently recorded.

---

v2:
- clean up librte_vhost CFLAGS/LDFLAGS/LDLIBS confusion while at it

 lib/librte_eal/bsdapp/eal/Makefile   |  4 ++++
 lib/librte_eal/linuxapp/eal/Makefile |  6 ++++++
 lib/librte_sched/Makefile            |  3 +++
 lib/librte_vhost/Makefile            |  6 +++---
 mk/rte.app.mk                        | 20 ++++++++------------
 5 files changed, 24 insertions(+), 15 deletions(-)
lib/librte_eal/bsdapp/eal/Makefile +4 -0
index 65b293f..d7e06fd 100644
@@ -42,6 +42,10 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_ring
 CFLAGS += -I$(RTE_SDK)/lib/librte_mempool
 CFLAGS += $(WERROR_FLAGS) -O3
 
+LDLIBS += -lpthread
+LDLIBS += -lexecinfo
+LDLIBS += -lgcc_s
+
 EXPORT_MAP := rte_eal_version.map
 
 LIBABIVER := 2
lib/librte_eal/linuxapp/eal/Makefile +6 -0
index 26eced5..2a0fa2b 100644
@@ -47,6 +47,12 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_mempool
 CFLAGS += -I$(RTE_SDK)/lib/librte_ivshmem
 CFLAGS += $(WERROR_FLAGS) -O3
 
+LDLIBS += -lpthread
+LDLIBS += -ldl
+LDLIBS += -lrt
+LDLIBS += -lm
+LDLIBS += -lgcc_s
+
 # specific to linuxapp exec-env
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_LINUXAPP) := eal.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_LINUXAPP) += eal_hugepage_info.c
lib/librte_sched/Makefile +3 -0
index b1cb285..4d631f6 100644
@@ -41,6 +41,9 @@ CFLAGS += $(WERROR_FLAGS)
 
 CFLAGS_rte_red.o := -D_GNU_SOURCE
 
+LDLIBS += -lm
+LDLIBS += -lrt
+
 EXPORT_MAP := rte_sched_version.map
 
 LIBABIVER := 1
lib/librte_vhost/Makefile +3 -3
index 6681f22..4aecc69 100644
@@ -42,12 +42,12 @@ CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -D_FILE_OFFSET_BITS=64
 ifeq ($(CONFIG_RTE_LIBRTE_VHOST_USER),y)
 CFLAGS += -I vhost_user
 else
-CFLAGS += -I vhost_cuse -lfuse
-LDFLAGS += -lfuse
+CFLAGS += -I vhost_cuse
+LDLIBS += -lfuse
 endif
 
 ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y)
-LDFLAGS += -lnuma
+LDLIBS += -lnuma
 endif
 
 # all source are stored in SRCS-y
mk/rte.app.mk +8 -12
index 8ecab41..4ecaa6c 100644
@@ -81,23 +81,11 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_LPM)            += -lrte_lpm
 _LDLIBS-$(CONFIG_RTE_LIBRTE_POWER)          += -lrte_power
 _LDLIBS-$(CONFIG_RTE_LIBRTE_ACL)            += -lrte_acl
 _LDLIBS-$(CONFIG_RTE_LIBRTE_METER)          += -lrte_meter
-
 _LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrte_sched
-_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lm
-_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrt
-
 _LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lrte_vhost
 
 endif # ! CONFIG_RTE_BUILD_COMBINE_LIBS
 
-ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y)
-_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lnuma
-endif
-
-ifeq ($(CONFIG_RTE_LIBRTE_VHOST_USER),n)
-_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lfuse
-endif
-
 # The static libraries do not know their dependencies.
 # The combined library fails also to store this information.
 # So linking with static or combined library requires explicit dependencies.
@@ -111,6 +99,14 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT)    += -lxenstore
 _LDLIBS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD)      += -lgxio
 # QAT PMD has a dependency on libcrypto (from openssl) for calculating HMAC precomputes
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_QAT)        += -lcrypto
+_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lm
+_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrt
+ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y)
+_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lnuma
+endif
+ifeq ($(CONFIG_RTE_LIBRTE_VHOST_USER),n)
+_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lfuse
+endif
 endif # CONFIG_RTE_BUILD_COMBINE_LIBS or not CONFIG_RTE_BUILD_SHARED_LIBS
 
 _LDLIBS-y += --start-group
Signature · 1 line
2.5.0
#1 lore raw
Quoted 13 lines · Panu Matilainen

Similar to commit 5f9115e58cc6f304ff4ade694cf5823d32887d1a etc, but for libraries. Clean up librte_vhost CFLAGS/LDFLAGS/LDLIBS confusion while at it.

Requiring applications to know about library internal details like dependencies to external helper libraries is a limitation of static linkage, shared libraries should always know their own dependencies for sane operation.

Linking with the combined library (whether shared or not) still requires knowing the internal dependencies, and intra-dpdk dependencies are also not currently recorded.

Quoted 7 lines

---

v2:
- clean up librte_vhost CFLAGS/LDFLAGS/LDLIBS confusion while at it

Hi Panu,

Patch itself looks good but there is a small side effect on BSD that results in app/test not linking because of missing -lm.
Linuxapp links with -lm by default (EXECENV_LDLIBS), but BSD does not.

Should we just add -lm to EXECENV_LDLIBS for BSD too instead of adding it on each app/example that uses librte_sched ?

Sergio

#2 lore raw
Quoted 21 lines · Sergio Gonzalez Monroy
Quoted 13 lines · Panu Matilainen

Similar to commit 5f9115e58cc6f304ff4ade694cf5823d32887d1a etc, but for libraries. Clean up librte_vhost CFLAGS/LDFLAGS/LDLIBS confusion while at it.

Requiring applications to know about library internal details like dependencies to external helper libraries is a limitation of static linkage, shared libraries should always know their own dependencies for sane operation.

Linking with the combined library (whether shared or not) still requires knowing the internal dependencies, and intra-dpdk dependencies are also not currently recorded.

Quoted 7 lines

---

v2:
- clean up librte_vhost CFLAGS/LDFLAGS/LDLIBS confusion while at it

Quoted 6 lines

Hi Panu,

Patch itself looks good but there is a small side effect on BSD that results
in app/test not linking because of missing -lm.
Linuxapp links with -lm by default (EXECENV_LDLIBS), but BSD does not.

Oh, those LIBRTE_SCHED entries were in a different if-block from the others...

Hmm, interesting. Without this patch, on Linux -lm gets added twice which actually causes a build failure on Fedora rawhide (related to some libmvec related changes it seems).

Quoted 2 lines

Should we just add -lm to EXECENV_LDLIBS for BSD too instead of adding it on each app/example that uses librte_sched ?

Linking should be based on usage, not convenience or such... but there's no explanation why -lm is added everywhere in Linux:

commit 6da94b7a92d9706c1a4fb23a9cf54f49e6019af2

Author: Intel <intel.com>
Date:   Wed Sep 18 12:00:00 2013 +0200

mk: link with libm

Signed-off-by Intel

Certainly librte_sched should link to -lm and in static builds, all its users, but beyond that I suppose it needs closer investigation of what (if anything else) actually needs it.

I think we better leave it alone for 2.2, but the librte_vhost part should be safe. I can send another version with just that if it has a chance to make it to 2.2, otherwise lets postpone it to 2.3.

- Panu -

- Panu -

- Panu -

#3 lore raw

v3 cover mk: add DT_NEEDED entries for external library deps

In reply to Panu Matilainen

Add hopefully all the remaining missing DT_NEEDED entries for external library dependencies on the libraries side: librte_vhost, librte_sched and librte_eal.

Panu Matilainen (3):
mk: clear up libm and librt linkage confusion
mk: add DT_NEEDED entries for librte_vhost external dependencies
mk: add DT_NEEDED entries for librte_eal external dependencies

 app/test/Makefile                    |  2 ++
 lib/librte_eal/bsdapp/eal/Makefile   |  4 ++++
 lib/librte_eal/linuxapp/eal/Makefile |  4 ++++
 lib/librte_sched/Makefile            |  3 +++
 lib/librte_vhost/Makefile            |  7 ++++---
 mk/exec-env/linuxapp/rte.vars.mk     |  2 +-
 mk/rte.app.mk                        | 20 ++++++++------------
 7 files changed, 26 insertions(+), 16 deletions(-)
Signature · 9 lines
v3:
- split up to separate patches
- clear up up libm and librt linkage confusion and unnecessary
  Linux vs BSD differences

v2: 
- clean up librte_vhost CFLAGS/LDFLAGS/LDLIBS confusion while at it

2.5.0
#4 lore raw

PATCH v3 1/3 mk: clear up libm and librt linkage confusion

There are two places that need -lm (test app and librte_sched) and exactly one that needs -lrt (librte_sched). Add the relevant DT_NEEDED entries to both, and eliminate the bogus discrepancy between Linux and BSD EXECENV_LDLIBS wrt these libs.

---
 app/test/Makefile                | 2 ++
 lib/librte_sched/Makefile        | 3 +++
 mk/exec-env/linuxapp/rte.vars.mk | 2 +-
 mk/rte.app.mk                    | 6 ++----
 4 files changed, 8 insertions(+), 5 deletions(-)
app/test/Makefile +2 -0
index ec33e1a..00e4df2 100644
@@ -160,6 +160,8 @@ CFLAGS += $(WERROR_FLAGS)
 
 CFLAGS += -D_GNU_SOURCE
 
+LDLIBS += -lm
+
 # Disable VTA for memcpy test
 ifeq ($(CC), gcc)
 ifeq ($(shell test $(GCC_VERSION) -ge 44 && echo 1), 1)
lib/librte_sched/Makefile +3 -0
index b1cb285..4d631f6 100644
@@ -41,6 +41,9 @@ CFLAGS += $(WERROR_FLAGS)
 
 CFLAGS_rte_red.o := -D_GNU_SOURCE
 
+LDLIBS += -lm
+LDLIBS += -lrt
+
 EXPORT_MAP := rte_sched_version.map
 
 LIBABIVER := 1
mk/exec-env/linuxapp/rte.vars.mk +1 -1
index 5fd7d85..d51bd17 100644
@@ -48,7 +48,7 @@ endif
 # Workaround lack of DT_NEEDED entry
 EXECENV_LDFLAGS = --no-as-needed
 
-EXECENV_LDLIBS  = -lrt -lm
+EXECENV_LDLIBS  =
 EXECENV_ASFLAGS =
 
 ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y)
mk/rte.app.mk +2 -4
index daac09f..cadc7ab 100644
@@ -77,11 +77,7 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_LPM)            += -lrte_lpm
 _LDLIBS-$(CONFIG_RTE_LIBRTE_POWER)          += -lrte_power
 _LDLIBS-$(CONFIG_RTE_LIBRTE_ACL)            += -lrte_acl
 _LDLIBS-$(CONFIG_RTE_LIBRTE_METER)          += -lrte_meter
-
 _LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrte_sched
-_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lm
-_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrt
-
 _LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lrte_vhost
 
 ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y)
@@ -104,6 +100,8 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT)    += -lxenstore
 _LDLIBS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD)      += -lgxio
 # QAT PMD has a dependency on libcrypto (from openssl) for calculating HMAC precomputes
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_QAT)        += -lcrypto
+_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lm
+_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrt
 endif # !CONFIG_RTE_BUILD_SHARED_LIBS
 
 _LDLIBS-y += --start-group
Signature · 1 line
2.5.0
#5 lore raw

Re: [PATCH v3 1/3] mk: clear up libm and librt linkage confusion

Quoted 71 lines · Panu Matilainen

There are two places that need -lm (test app and librte_sched) and exactly one that needs -lrt (librte_sched). Add the relevant DT_NEEDED entries to both, and eliminate the bogus discrepancy between Linux and BSD EXECENV_LDLIBS wrt these libs.

---
 app/test/Makefile                | 2 ++
 lib/librte_sched/Makefile        | 3 +++
 mk/exec-env/linuxapp/rte.vars.mk | 2 +-
 mk/rte.app.mk                    | 6 ++----
 4 files changed, 8 insertions(+), 5 deletions(-)
app/test/Makefile +2 -0
index ec33e1a..00e4df2 100644
@@ -160,6 +160,8 @@ CFLAGS += $(WERROR_FLAGS)
 
 CFLAGS += -D_GNU_SOURCE
 
+LDLIBS += -lm
+
 # Disable VTA for memcpy test
 ifeq ($(CC), gcc)
 ifeq ($(shell test $(GCC_VERSION) -ge 44 && echo 1), 1)
lib/librte_sched/Makefile +3 -0
index b1cb285..4d631f6 100644
@@ -41,6 +41,9 @@ CFLAGS += $(WERROR_FLAGS)
 
 CFLAGS_rte_red.o := -D_GNU_SOURCE
 
+LDLIBS += -lm
+LDLIBS += -lrt
+
 EXPORT_MAP := rte_sched_version.map
 
 LIBABIVER := 1
mk/exec-env/linuxapp/rte.vars.mk +1 -1
index 5fd7d85..d51bd17 100644
@@ -48,7 +48,7 @@ endif
 # Workaround lack of DT_NEEDED entry
 EXECENV_LDFLAGS = --no-as-needed
 
-EXECENV_LDLIBS  = -lrt -lm
+EXECENV_LDLIBS  =
 EXECENV_ASFLAGS =
 
 ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y)
mk/rte.app.mk +0 -4
index daac09f..cadc7ab 100644
@@ -77,11 +77,7 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_LPM)            += -lrte_lpm
 _LDLIBS-$(CONFIG_RTE_LIBRTE_POWER)          += -lrte_power
 _LDLIBS-$(CONFIG_RTE_LIBRTE_ACL)            += -lrte_acl
 _LDLIBS-$(CONFIG_RTE_LIBRTE_METER)          += -lrte_meter
-
 _LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrte_sched
-_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lm
-_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrt
-
 _LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lrte_vhost
 
 ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y)

mk/rte.app.mk _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT) += -lxenstore · line 107

Quoted 8 lines
mk/rte.app.mk +2 -0
@@ -104,6 +100,8 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT)    += -lxenstore
 _LDLIBS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD)      += -lgxio
 # QAT PMD has a dependency on libcrypto (from openssl) for calculating HMAC precomputes
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_QAT)        += -lcrypto
+_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lm
+_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrt
 endif # !CONFIG_RTE_BUILD_SHARED_LIBS
 
 _LDLIBS-y += --start-group

This is causing a shared library compilation error with gcc:

"
== Build app/test-acl
LD testacl
/root/dpdk/build/lib/librte_meter.so: error: undefined reference to 'ceil'
collect2: error: ld returned 1 exit status
"

There is an indirect libm dependency from test-acl. Adding -lm fixes the issue.

But this issue not seen by everybody, not sure why I am getting this but not others.

Also clang compiles fine, only fails with gcc.
I am using Fedora 23, gcc version:
gcc (GCC) 5.3.1 20151207 (Red Hat 5.3.1-2)

I will dig some more.

Regards,
ferruh

#6 lore raw

Re: [PATCH v3 1/3] mk: clear up libm and librt linkage confusion

Quoted 92 lines · Ferruh Yigit
Quoted 71 lines · Panu Matilainen

There are two places that need -lm (test app and librte_sched) and exactly one that needs -lrt (librte_sched). Add the relevant DT_NEEDED entries to both, and eliminate the bogus discrepancy between Linux and BSD EXECENV_LDLIBS wrt these libs.

---
  app/test/Makefile                | 2 ++
  lib/librte_sched/Makefile        | 3 +++
  mk/exec-env/linuxapp/rte.vars.mk | 2 +-
  mk/rte.app.mk                    | 6 ++----
  4 files changed, 8 insertions(+), 5 deletions(-)
app/test/Makefile +2 -0
index ec33e1a..00e4df2 100644
@@ -160,6 +160,8 @@ CFLAGS += $(WERROR_FLAGS)
 
  CFLAGS += -D_GNU_SOURCE
 
+LDLIBS += -lm
+
  # Disable VTA for memcpy test
  ifeq ($(CC), gcc)
  ifeq ($(shell test $(GCC_VERSION) -ge 44 && echo 1), 1)
lib/librte_sched/Makefile +3 -0
index b1cb285..4d631f6 100644
@@ -41,6 +41,9 @@ CFLAGS += $(WERROR_FLAGS)
 
  CFLAGS_rte_red.o := -D_GNU_SOURCE
 
+LDLIBS += -lm
+LDLIBS += -lrt
+
  EXPORT_MAP := rte_sched_version.map
 
  LIBABIVER := 1
mk/exec-env/linuxapp/rte.vars.mk +1 -1
index 5fd7d85..d51bd17 100644
@@ -48,7 +48,7 @@ endif
  # Workaround lack of DT_NEEDED entry
  EXECENV_LDFLAGS = --no-as-needed
 
-EXECENV_LDLIBS  = -lrt -lm
+EXECENV_LDLIBS  =
  EXECENV_ASFLAGS =
 
  ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y)
mk/rte.app.mk +0 -4
index daac09f..cadc7ab 100644
@@ -77,11 +77,7 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_LPM)            += -lrte_lpm
  _LDLIBS-$(CONFIG_RTE_LIBRTE_POWER)          += -lrte_power
  _LDLIBS-$(CONFIG_RTE_LIBRTE_ACL)            += -lrte_acl
  _LDLIBS-$(CONFIG_RTE_LIBRTE_METER)          += -lrte_meter
-
  _LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrte_sched
-_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lm
-_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrt
-
  _LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lrte_vhost
 
  ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y)

mk/rte.app.mk _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT) += -lxenstore · line 107

Quoted 8 lines
mk/rte.app.mk +2 -0
@@ -104,6 +100,8 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT)    += -lxenstore
  _LDLIBS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD)      += -lgxio
  # QAT PMD has a dependency on libcrypto (from openssl) for calculating HMAC precomputes
  _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_QAT)        += -lcrypto
+_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lm
+_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrt
  endif # !CONFIG_RTE_BUILD_SHARED_LIBS
 
  _LDLIBS-y += --start-group

This is causing a shared library compilation error with gcc:

"
== Build app/test-acl
LD testacl
/root/dpdk/build/lib/librte_meter.so: error: undefined reference to 'ceil'
collect2: error: ld returned 1 exit status
"

There is an indirect libm dependency from test-acl. Adding -lm fixes the issue.

Quoted 8 lines

But this issue not seen by everybody, not sure why I am getting this but not others.

Also clang compiles fine, only fails with gcc.
I am using Fedora 23, gcc version:
gcc (GCC) 5.3.1 20151207 (Red Hat 5.3.1-2)

I will dig some more.

Right, librte_meter indeed has a dependency on libm that I've missed.
The curious thing is why is it not failing everywhere - I cannot reproduce that at all on Fedora 23. Poking around in math.h leads to bits/mathlinline.h where the answer probably lies: ceil() is typically provided by inline code, but for one reason or another that is not available in your setup.

Anyway, I'll send a patch to add the missing dependency, thanks for spotting and reporting!

- Panu -

Quoted 6 lines

Regards,
ferruh

#7 lore raw

PATCH v3 2/3 mk: add DT_NEEDED entries for librte_vhost external dependencies

In reply to Panu Matilainen

Add DT_NEEDED entries for external library dependencies which are the most critical ones for sane operation. Clean up vhost_cuse CFLAGS/LDFLAGS confusion while at it.

---
 lib/librte_vhost/Makefile |  7 ++++---
 mk/rte.app.mk             | 14 ++++++--------
 2 files changed, 10 insertions(+), 11 deletions(-)
lib/librte_vhost/Makefile +4 -3
index ef9bbae..e33ff53 100644
@@ -41,13 +41,14 @@ LIBABIVER := 2
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -D_FILE_OFFSET_BITS=64
 ifeq ($(CONFIG_RTE_LIBRTE_VHOST_USER),y)
 CFLAGS += -I vhost_user
+LDLIBS += -lpthread
 else
-CFLAGS += -I vhost_cuse -lfuse
-LDFLAGS += -lfuse
+CFLAGS += -I vhost_cuse
+LDLIBS += -lfuse
 endif
 
 ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y)
-LDFLAGS += -lnuma
+LDLIBS += -lnuma
 endif
 
 # all source are stored in SRCS-y
mk/rte.app.mk +6 -8
index cadc7ab..e1cdddf 100644
@@ -80,14 +80,6 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_METER)          += -lrte_meter
 _LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrte_sched
 _LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lrte_vhost
 
-ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y)
-_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lnuma
-endif
-
-ifeq ($(CONFIG_RTE_LIBRTE_VHOST_USER),n)
-_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lfuse
-endif
-
 # The static libraries do not know their dependencies.
 # So linking with static library requires explicit dependencies.
 ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),n)
@@ -102,6 +94,12 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD)      += -lgxio
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_QAT)        += -lcrypto
 _LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lm
 _LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrt
+ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y)
+_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lnuma
+endif
+ifeq ($(CONFIG_RTE_LIBRTE_VHOST_USER),n)
+_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lfuse
+endif
 endif # !CONFIG_RTE_BUILD_SHARED_LIBS
 
 _LDLIBS-y += --start-group
Signature · 1 line
2.5.0
#8 lore raw

PATCH v3 3/3 mk: add DT_NEEDED entries for librte_eal external dependencies

In reply to Panu Matilainen

Details between the platforms differ somewhat, and for static builds they need to be handled from mk/exec-env still.

---
 lib/librte_eal/bsdapp/eal/Makefile   | 4 ++++
 lib/librte_eal/linuxapp/eal/Makefile | 4 ++++
 2 files changed, 8 insertions(+)
lib/librte_eal/bsdapp/eal/Makefile +4 -0
index 9ecf429..349b0d0 100644
@@ -44,6 +44,10 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_ring
 CFLAGS += -I$(RTE_SDK)/lib/librte_mempool
 CFLAGS += $(WERROR_FLAGS) -O3
 
+LDLIBS += -lexecinfo
+LDLIBS += -lpthread
+LDLIBS += -lgcc_s
+
 EXPORT_MAP := rte_eal_version.map
 
 LIBABIVER := 2
lib/librte_eal/linuxapp/eal/Makefile +4 -0
index d72f035..25b3a8e 100644
@@ -49,6 +49,10 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_mempool
 CFLAGS += -I$(RTE_SDK)/lib/librte_ivshmem
 CFLAGS += $(WERROR_FLAGS) -O3
 
+LDLIBS += -ldl
+LDLIBS += -lpthread
+LDLIBS += -lgcc_s
+
 # specific to linuxapp exec-env
 SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) := eal.c
 SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_hugepage_info.c
Signature · 1 line
2.5.0
#9 lore raw

Re: [PATCH v3 0/3] mk: add DT_NEEDED entries for external library deps

In reply to Panu Matilainen

2016-03-10 15:15, Panu Matilainen:

Quoted 8 lines

Add hopefully all the remaining missing DT_NEEDED entries for external library dependencies on the libraries side: librte_vhost, librte_sched and librte_eal.

Panu Matilainen (3):
mk: clear up libm and librt linkage confusion
mk: add DT_NEEDED entries for librte_vhost external dependencies
mk: add DT_NEEDED entries for librte_eal external dependencies

Applied, thanks