summaryrefslogtreecommitdiff
path: root/mk
diff options
context:
space:
mode:
authorIntel <intel.com>2013-09-18 12:00:00 +0200
committerThomas Monjalon <thomas.monjalon@6wind.com>2013-10-09 15:46:49 +0200
commit4d3d79e7a5c66239df2e2d2304e8e351074b8c7d (patch)
tree439893e8fd2322961e553c40def6a30f6c9db76d /mk
parente25e4d7ef16b8aa84de7b0c93c48260b68c86fbe (diff)
downloaddpdk-4d3d79e7a5c66239df2e2d2304e8e351074b8c7d.zip
dpdk-4d3d79e7a5c66239df2e2d2304e8e351074b8c7d.tar.gz
dpdk-4d3d79e7a5c66239df2e2d2304e8e351074b8c7d.tar.xz
mk: combined library
Allow to merge all libraries (shared or static) into one. Signed-off-by: Intel
Diffstat (limited to 'mk')
-rw-r--r--mk/rte.app.mk4
-rw-r--r--mk/rte.lib.mk34
-rw-r--r--mk/rte.sdkbuild.mk3
-rw-r--r--mk/rte.sharelib.mk90
-rw-r--r--mk/rte.vars.mk8
5 files changed, 139 insertions, 0 deletions
diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index 449f325..a282ea5 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -162,6 +162,10 @@ build: _postbuild
exe2cmd = $(strip $(call dotfile,$(patsubst %,%.cmd,$(1))))
+ifeq ($(RTE_BUILD_COMBINE_LIBS),y)
+LDLIBS += -l$(RTE_LIBNAME)
+endif
+
ifeq ($(LINK_USING_CC),1)
comma := ,
LDLIBS := $(addprefix -Wl$(comma),$(LDLIBS))
diff --git a/mk/rte.lib.mk b/mk/rte.lib.mk
index f56df5c..30136b4 100644
--- a/mk/rte.lib.mk
+++ b/mk/rte.lib.mk
@@ -76,6 +76,24 @@ O_TO_S_DO = @set -e; \
$(O_TO_S) && \
echo $(O_TO_S_CMD) > $(call exe2cmd,$(@))
+ifeq ($(RTE_BUILD_SHARED_LIB),n)
+O_TO_C = $(AR) crus $(LIB_ONE) $(OBJS-y)
+O_TO_C_STR = $(subst ','\'',$(O_TO_C)) #'# fix syntax highlight
+O_TO_C_DISP = $(if $(V),"$(O_TO_C_STR)"," AR_C $(@)")
+O_TO_C_DO = @set -e; \
+ $(lib_dir) \
+ $(copy_obj)
+else
+O_TO_C = $(LD) -z muldefs -share $(OBJS-y) -o $(LIB_ONE)
+O_TO_C_STR = $(subst ','\'',$(O_TO_C)) #'# fix syntax highlight
+O_TO_C_DISP = $(if $(V),"$(O_TO_C_STR)"," LD_C $(@)")
+O_TO_C_DO = @set -e; \
+ $(lib_dir) \
+ $(copy_obj)
+endif
+
+copy_obj = cp -f $(OBJS-y) $(RTE_OUTPUT)/build/lib;
+lib_dir = [ -d $(RTE_OUTPUT)/lib ] || mkdir -p $(RTE_OUTPUT)/lib;
-include .$(LIB).cmd
#
@@ -96,6 +114,14 @@ $(LIB): $(OBJS-y) $(DEP_$(LIB)) FORCE
$(depfile_missing),\
$(depfile_newer)),\
$(O_TO_S_DO))
+ifeq ($(RTE_BUILD_COMBINE_LIBS),y)
+ $(if $(or \
+ $(file_missing),\
+ $(call cmdline_changed,$(O_TO_C_STR)),\
+ $(depfile_missing),\
+ $(depfile_newer)),\
+ $(O_TO_C_DO))
+endif
else
$(LIB): $(OBJS-y) $(DEP_$(LIB)) FORCE
@[ -d $(dir $@) ] || mkdir -p $(dir $@)
@@ -111,6 +137,14 @@ $(LIB): $(OBJS-y) $(DEP_$(LIB)) FORCE
$(depfile_missing),\
$(depfile_newer)),\
$(O_TO_A_DO))
+ifeq ($(RTE_BUILD_COMBINE_LIBS),y)
+ $(if $(or \
+ $(file_missing),\
+ $(call cmdline_changed,$(O_TO_C_STR)),\
+ $(depfile_missing),\
+ $(depfile_newer)),\
+ $(O_TO_C_DO))
+endif
endif
#
diff --git a/mk/rte.sdkbuild.mk b/mk/rte.sdkbuild.mk
index f58b15f..f4dc405 100644
--- a/mk/rte.sdkbuild.mk
+++ b/mk/rte.sdkbuild.mk
@@ -77,6 +77,9 @@ $(ROOTDIRS-y):
@[ -d $(BUILDDIR)/$@ ] || mkdir -p $(BUILDDIR)/$@
@echo "== Build $@"
$(Q)$(MAKE) S=$@ -f $(RTE_SRCDIR)/$@/Makefile -C $(BUILDDIR)/$@ all
+ @if [ $@ = lib -a $(RTE_BUILD_COMBINE_LIBS) = y ]; then \
+ $(MAKE) -f $(RTE_SDK)/lib/Makefile sharelib; \
+ fi
%_clean:
@echo "== Clean $*"
diff --git a/mk/rte.sharelib.mk b/mk/rte.sharelib.mk
new file mode 100644
index 0000000..503f7b8
--- /dev/null
+++ b/mk/rte.sharelib.mk
@@ -0,0 +1,90 @@
+# BSD LICENSE
+#
+# Copyright(c) 2010-2013 Intel Corporation. All rights reserved.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Intel Corporation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# VPATH contains at least SRCDIR
+VPATH += $(SRCDIR)
+
+ifeq ($(RTE_BUILD_COMBINE_LIBS),y)
+ifeq ($(RTE_BUILD_SHARED_LIB),y)
+LIB_ONE := lib$(RTE_LIBNAME).so
+else
+LIB_ONE := lib$(RTE_LIBNAME).a
+endif
+endif
+
+.PHONY:sharelib
+sharelib: $(LIB_ONE) FORCE
+
+OBJS = $(wildcard $(RTE_OUTPUT)/build/lib/*.o)
+
+O_TO_S = $(LD) $(CPU_LDFLAGS) -share $(OBJS) -o $(RTE_OUTPUT)/lib/$(LIB_ONE)
+O_TO_S_STR = $(subst ','\'',$(O_TO_S)) #'# fix syntax highlight
+O_TO_S_DISP = $(if $(V),"$(O_TO_S_STR)"," LD $(@)")
+O_TO_S_CMD = "cmd_$@ = $(O_TO_S_STR)"
+O_TO_S_DO = @set -e; \
+ echo $(O_TO_S_DISP); \
+ $(O_TO_S)
+
+O_TO_A = $(AR) crus $(RTE_OUTPUT)/lib/$(LIB_ONE) $(OBJS)
+O_TO_A_STR = $(subst ','\'',$(O_TO_A)) #'# fix syntax highlight
+O_TO_A_DISP = $(if $(V),"$(O_TO_A_STR)"," LD $(@)")
+O_TO_A_CMD = "cmd_$@ = $(O_TO_A_STR)"
+O_TO_A_DO = @set -e; \
+ echo $(O_TO_A_DISP); \
+ $(O_TO_A)
+#
+# Archive objects to share library
+#
+
+ifeq ($(RTE_BUILD_COMBINE_LIBS),y)
+ifeq ($(RTE_BUILD_SHARED_LIB),y)
+$(LIB_ONE): FORCE
+ @[ -d $(dir $@) ] || mkdir -p $(dir $@)
+ $(O_TO_S_DO)
+else
+$(LIB_ONE): FORCE
+ @[ -d $(dir $@) ] || mkdir -p $(dir $@)
+ $(O_TO_A_DO)
+endif
+endif
+
+#
+# Clean all generated files
+#
+.PHONY: clean
+clean: _postclean
+
+.PHONY: doclean
+doclean:
+ $(Q)rm -rf $(LIB_ONE)
+
+.PHONY: FORCE
+FORCE:
diff --git a/mk/rte.vars.mk b/mk/rte.vars.mk
index 801b585..c517dd0 100644
--- a/mk/rte.vars.mk
+++ b/mk/rte.vars.mk
@@ -64,9 +64,17 @@ ifneq ($(BUILDING_RTE_SDK),)
RTE_TARGET := $(RTE_ARCH)-$(RTE_MACHINE)-$(RTE_EXEC_ENV)-$(RTE_TOOLCHAIN)
RTE_SDK_BIN := $(RTE_OUTPUT)
RTE_BUILD_SHARED_LIB := $(CONFIG_RTE_BUILD_SHARED_LIB:"%"=%)
+ RTE_LIBNAME := $(CONFIG_RTE_LIBNAME:"%s"=%)
+ ifeq ($(RTE_LIBNAME),)
+ RTE_LIBNAME := intel_dpdk
+ endif
ifeq ($(RTE_BUILD_SHARED_LIB),)
RTE_BUILD_SHARED_LIB := n
endif
+ RTE_BUILD_COMBINE_LIBS := $(CONFIG_RTE_BUILD_COMBINE_LIBS:"%"=%)
+ ifeq ($(RTE_BUILD_COMBINE_LIBS),)
+ RTE_BUILD_COMBINE_LIBS := n
+ endif
endif
# RTE_TARGET is deducted from config when we are building the SDK.