From patchwork Thu Dec 3 02:15:09 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ferruh Yigit X-Patchwork-Id: 9261 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 6547B594B; Thu, 3 Dec 2015 03:15:22 +0100 (CET) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 3E87458DB for ; Thu, 3 Dec 2015 03:15:20 +0100 (CET) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga101.jf.intel.com with ESMTP; 02 Dec 2015 18:15:18 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.20,375,1444719600"; d="scan'208";a="865479122" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by fmsmga002.fm.intel.com with ESMTP; 02 Dec 2015 18:15:17 -0800 Received: from sivswdev02.ir.intel.com (sivswdev02.ir.intel.com [10.237.217.46]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id tB32FHcE031180; Thu, 3 Dec 2015 02:15:17 GMT Received: from sivswdev02.ir.intel.com (localhost [127.0.0.1]) by sivswdev02.ir.intel.com with ESMTP id tB32FHLl029531; Thu, 3 Dec 2015 02:15:17 GMT Received: (from fyigit@localhost) by sivswdev02.ir.intel.com with id tB32FHVr029527; Thu, 3 Dec 2015 02:15:17 GMT From: Ferruh Yigit To: dev@dpdk.org Date: Thu, 3 Dec 2015 02:15:09 +0000 Message-Id: <1449108909-29421-1-git-send-email-ferruh.yigit@intel.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <20151203015919.GA23772@sivlogin002.ir.intel.com> References: <20151203015919.GA23772@sivlogin002.ir.intel.com> Subject: [dpdk-dev] [PATCH v3] mk: fix compile error and ABI versioning for combined shared library 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" Fixes following error (observed when versioning macros used): LD libdpdk.so /usr/bin/ld: /root/dpdk/build/lib/libdpdk.so: version node not found for symbol @DPDK_x.y Also resulting combined library contains symbol version information: $ readelf -a build/lib/libdpdk.so | grep rte_eal_ | grep @ | head <...> GLOBAL DEFAULT 12 rte_eal_alarm_set@@DPDK_2.0 <...> GLOBAL DEFAULT 12 rte_eal_pci_write_config@@DPDK_2.1 <...> GLOBAL DEFAULT 12 rte_eal_remote_launch@@DPDK_2.0 ... Versioning fixed by merging all version scripts into one automatically and feeding it to final library. Signed-off-by: Ferruh Yigit --- drivers/net/Makefile | 3 +++ lib/Makefile | 3 +++ mk/rte.sdkbuild.mk | 2 +- mk/rte.sharelib.mk | 3 +++ scripts/merge_maps.sh | 29 +++++++++++++++++++++++++++++ 5 files changed, 39 insertions(+), 1 deletion(-) create mode 100755 scripts/merge_maps.sh diff --git a/drivers/net/Makefile b/drivers/net/Makefile index cddcd57..d3c865b 100644 --- a/drivers/net/Makefile +++ b/drivers/net/Makefile @@ -51,5 +51,8 @@ DIRS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio DIRS-$(CONFIG_RTE_LIBRTE_VMXNET3_PMD) += vmxnet3 DIRS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT) += xenvirt +ifeq ($(COMBINED_BUILD),1) include $(RTE_SDK)/mk/rte.sharelib.mk +endif + include $(RTE_SDK)/mk/rte.subdir.mk diff --git a/lib/Makefile b/lib/Makefile index ef172ea..d0f7fb8 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -64,5 +64,8 @@ DIRS-$(CONFIG_RTE_LIBRTE_KNI) += librte_kni DIRS-$(CONFIG_RTE_LIBRTE_IVSHMEM) += librte_ivshmem endif +ifeq ($(COMBINED_BUILD),1) include $(RTE_SDK)/mk/rte.sharelib.mk +endif + include $(RTE_SDK)/mk/rte.subdir.mk diff --git a/mk/rte.sdkbuild.mk b/mk/rte.sdkbuild.mk index 38ec7bd..d4e3abf 100644 --- a/mk/rte.sdkbuild.mk +++ b/mk/rte.sdkbuild.mk @@ -94,7 +94,7 @@ $(ROOTDIRS-y): @echo "== Build $@" $(Q)$(MAKE) S=$@ -f $(RTE_SRCDIR)/$@/Makefile -C $(BUILDDIR)/$@ all @if [ $@ = drivers -a $(CONFIG_RTE_BUILD_COMBINE_LIBS) = y ]; then \ - $(MAKE) -f $(RTE_SDK)/lib/Makefile sharelib; \ + COMBINED_BUILD=1 $(MAKE) -f $(RTE_SDK)/lib/Makefile sharelib; \ fi %_clean: diff --git a/mk/rte.sharelib.mk b/mk/rte.sharelib.mk index 7bb7219..76ead09 100644 --- a/mk/rte.sharelib.mk +++ b/mk/rte.sharelib.mk @@ -40,6 +40,8 @@ LIB_ONE := lib$(RTE_LIBNAME).so else LIB_ONE := lib$(RTE_LIBNAME).a endif +COMBINED_MAP=$(BUILDDIR)/lib/libdpdk.map +CPU_LDFLAGS += --version-script=$(COMBINED_MAP) endif .PHONY:sharelib @@ -79,6 +81,7 @@ ifeq ($(CONFIG_RTE_BUILD_COMBINE_LIBS),y) ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y) $(LIB_ONE): FORCE @[ -d $(dir $@) ] || mkdir -p $(dir $@) + @$(SRCDIR)/scripts/merge_maps.sh > $(COMBINED_MAP) $(O_TO_S_DO) else $(LIB_ONE): FORCE diff --git a/scripts/merge_maps.sh b/scripts/merge_maps.sh new file mode 100755 index 0000000..4ace975 --- /dev/null +++ b/scripts/merge_maps.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +FILES=$(find $RTE_SDK -name "*_version.map") +SYMBOLS=$(grep -h "{" $FILES | sort -u | sed 's/{//') + +first=0 +prev_sym="none" + +for s in $SYMBOLS; do + echo "$s {" + echo " global:" + echo "" + for f in $FILES; do + sed -n "/$s {/,/}/p" $f | sed '/^$/d' | grep -v global | grep -v local | sed '1d' | sed '$d' + done | sort -u + echo "" + if [ $first -eq 0 ]; then + first=1; + echo " local: *;"; + fi + if [ "$prev_sym" == "none" ]; then + echo "};"; + prev_sym=$s; + else + echo "} $prev_sym;"; + prev_sym=$s; + fi + echo "" +done