mk: combined library
Allow to merge all libraries (shared or static) into one. Signed-off-by: Intel
This commit is contained in:
parent
e25e4d7ef1
commit
4d3d79e7a5
@ -76,8 +76,14 @@ CONFIG_RTE_FORCE_INTRINSICS=n
|
||||
#
|
||||
# Compile to share library
|
||||
#
|
||||
CONFIG_RTE_LIBNAME=intel_dpdk
|
||||
CONFIG_RTE_BUILD_SHARED_LIB=n
|
||||
|
||||
#
|
||||
# Combine to one single library
|
||||
#
|
||||
CONFIG_RTE_BUILD_COMBINE_LIBS=n
|
||||
|
||||
#
|
||||
#
|
||||
# Compile libc directory
|
||||
|
@ -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))
|
||||
|
@ -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
|
||||
|
||||
#
|
||||
|
@ -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 $*"
|
||||
|
90
mk/rte.sharelib.mk
Normal file
90
mk/rte.sharelib.mk
Normal file
@ -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:
|
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user