From patchwork Tue Dec 8 08:30:04 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Panu Matilainen X-Patchwork-Id: 9409 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id E23803005; Tue, 8 Dec 2015 09:30:15 +0100 (CET) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id 9BD903005 for ; Tue, 8 Dec 2015 09:30:14 +0100 (CET) Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id E1382C0B020C; Tue, 8 Dec 2015 08:30:13 +0000 (UTC) Received: from sopuli.koti.laiskiainen.org.com (vpn1-5-22.ams2.redhat.com [10.36.5.22]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id tB88UBSD006443; Tue, 8 Dec 2015 03:30:12 -0500 From: Panu Matilainen To: dev@dpdk.org Date: Tue, 8 Dec 2015 10:30:04 +0200 Message-Id: <87f15b40e6a0cad89a9eb94dd173cd20878b591a.1449563079.git.pmatilai@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 Subject: [dpdk-dev] [PATCH] mk: fix external shared library dependencies of libraries X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Similar to commit 5f9115e58cc6f304ff4ade694cf5823d32887d1a etc, but for libraries. 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. Signed-off-by: Panu Matilainen --- Note: I haven't tested on FreeBSD, it should be straightforward but it wouldn't hurt if Bruce / Sergio can sanity-check that side... lib/librte_eal/bsdapp/eal/Makefile | 4 ++++ lib/librte_eal/linuxapp/eal/Makefile | 6 ++++++ lib/librte_sched/Makefile | 3 +++ lib/librte_vhost/Makefile | 2 ++ mk/rte.app.mk | 20 ++++++++------------ 5 files changed, 23 insertions(+), 12 deletions(-) diff --git a/lib/librte_eal/bsdapp/eal/Makefile b/lib/librte_eal/bsdapp/eal/Makefile index 65b293f..d7e06fd 100644 --- a/lib/librte_eal/bsdapp/eal/Makefile +++ b/lib/librte_eal/bsdapp/eal/Makefile @@ -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 diff --git a/lib/librte_eal/linuxapp/eal/Makefile b/lib/librte_eal/linuxapp/eal/Makefile index 26eced5..2a0fa2b 100644 --- a/lib/librte_eal/linuxapp/eal/Makefile +++ b/lib/librte_eal/linuxapp/eal/Makefile @@ -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 diff --git a/lib/librte_sched/Makefile b/lib/librte_sched/Makefile index b1cb285..4d631f6 100644 --- a/lib/librte_sched/Makefile +++ b/lib/librte_sched/Makefile @@ -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 diff --git a/lib/librte_vhost/Makefile b/lib/librte_vhost/Makefile index 6681f22..a3bdca4 100644 --- a/lib/librte_vhost/Makefile +++ b/lib/librte_vhost/Makefile @@ -44,10 +44,12 @@ CFLAGS += -I vhost_user else CFLAGS += -I vhost_cuse -lfuse LDFLAGS += -lfuse +LDLIBS += -lfuse endif ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y) LDFLAGS += -lnuma +LDLIBS += -lnuma endif # all source are stored in SRCS-y diff --git a/mk/rte.app.mk b/mk/rte.app.mk index 8ecab41..4ecaa6c 100644 --- a/mk/rte.app.mk +++ b/mk/rte.app.mk @@ -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