!74 optimize the efficiency of compiling dpdk

From: @renmingshuai
Reviewed-by: @nlgwcy
Signed-off-by: @nlgwcy
This commit is contained in:
openeuler-ci-bot 2021-05-24 16:55:55 +08:00 committed by Gitee
commit 22806f1829
2 changed files with 210 additions and 21 deletions

View File

@ -0,0 +1,195 @@
From 5e554c15982617a89b85aeb71592c20bfa7bdecd Mon Sep 17 00:00:00 2001
From: Renmingshuai <renmingshuai@huawei.com>
Date: Tue, 13 Apr 2021 16:25:43 +0800
Subject: [PATCH] optimize the efficiency of compiling dpdk
---
config/common_base | 5 +++
mk/rte.combinedlib.mk | 10 +++++
mk/rte.lib.mk | 102 +++++++++++++++++++++++++++++++++++++++---
3 files changed, 110 insertions(+), 7 deletions(-)
diff --git a/config/common_base b/config/common_base
index 57b1349..392e6c3 100644
--- a/config/common_base
+++ b/config/common_base
@@ -59,6 +59,11 @@ CONFIG_RTE_ENABLE_LTO=n
#
CONFIG_RTE_BUILD_SHARED_LIB=n
+#
+# Compile to both static library and share library
+#
+CONFIG_RTE_BUILD_BOTH_STATIC_AND_SHARED_LIBS=n
+
#
# Use newest code breaking previous ABI
#
diff --git a/mk/rte.combinedlib.mk b/mk/rte.combinedlib.mk
index 9d0f935..1088543 100644
--- a/mk/rte.combinedlib.mk
+++ b/mk/rte.combinedlib.mk
@@ -15,9 +15,16 @@ RTE_LIBNAME := dpdk
COMBINEDLIB := lib$(RTE_LIBNAME)$(EXT)
LIBS := $(filter-out $(COMBINEDLIB), $(sort $(notdir $(wildcard $(RTE_OUTPUT)/lib/*$(EXT)))))
+ifeq ($(CONFIG_RTE_BUILD_BOTH_STATIC_AND_SHARED_LIBS),y)
+COMBINEDLIB_SO := lib$(RTE_LIBNAME).so
+LIBS_SO := $(filter-out $(COMBINEDLIB_SO), $(sort $(notdir $(wildcard $(RTE_OUTPUT)/lib/*.so))))
+endif
all: FORCE
$(Q)echo "GROUP ( $(LIBS) )" > $(RTE_OUTPUT)/lib/$(COMBINEDLIB)
+ifeq ($(CONFIG_RTE_BUILD_BOTH_STATIC_AND_SHARED_LIBS),y)
+ $(Q)echo "GROUP ( $(LIBS_SO) )" > $(RTE_OUTPUT)/lib/$(COMBINEDLIB_SO)
+endif
#
# Clean all generated files
@@ -25,6 +32,9 @@ all: FORCE
.PHONY: clean
clean:
$(Q)rm -f $(RTE_OUTPUT)/lib/$(COMBINEDLIB)
+ifeq ($(CONFIG_RTE_BUILD_BOTH_STATIC_AND_SHARED_LIBS),y)
+ $(Q)rm -f $(RTE_OUTPUT)/lib/$(COMBINEDLIB_SO)
+endif
.PHONY: FORCE
FORCE:
diff --git a/mk/rte.lib.mk b/mk/rte.lib.mk
index 4516d1c..78f3c27 100644
--- a/mk/rte.lib.mk
+++ b/mk/rte.lib.mk
@@ -19,13 +19,6 @@ else ifeq ($(LIBABIVER),)
LIBABIVER := 0.$(shell cat $(RTE_SRCDIR)/ABI_VERSION | tr -d '.')
endif
-ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y)
-LIB := $(patsubst %.a,%.so.$(LIBABIVER),$(LIB))
-ifeq ($(EXTLIB_BUILD),n)
-CPU_LDFLAGS += --version-script=$(SRCDIR)/$(EXPORT_MAP)
-endif
-endif
-
_BUILD = $(LIB)
PREINSTALL = $(SYMLINK-FILES-y)
@@ -34,6 +27,16 @@ _CLEAN = doclean
LDLIBS += $(EXECENV_LDLIBS-y)
+ifeq ($(CONFIG_RTE_BUILD_BOTH_STATIC_AND_SHARED_LIBS),y)
+LIB_SO = $(LIB)
+LIB_SO := $(patsubst %.a,%.so.$(LIBABIVER),$(LIB_SO))
+ifeq ($(EXTLIB_BUILD),n)
+CPU_LDFLAGS += --version-script=$(SRCDIR)/$(EXPORT_MAP)
+endif
+_BUILD += $(LIB_SO)
+_INSTALL += $(INSTALL-FILES-y) $(RTE_OUTPUT)/lib/$(LIB_SO)
+endif
+
.PHONY: all
all: install
@@ -74,6 +77,89 @@ ifneq ($(CC_SUPPORTS_Z),false)
NO_UNDEFINED := -z defs
endif
+ifeq ($(CONFIG_RTE_BUILD_BOTH_STATIC_AND_SHARED_LIBS),y)
+O_TO_S = $(LD) -L$(RTE_SDK_BIN)/lib $(_CPU_LDFLAGS) $(EXTRA_LDFLAGS) \
+ -shared $(OBJS-y) $(NO_UNDEFINED) $(LDLIBS) -Wl,-soname,$(LIB_SO) -o $(LIB_SO)
+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_DO = @set -e; \
+ echo $(O_TO_S_DISP); \
+ $(O_TO_S) && \
+ echo $(O_TO_S_CMD) > $(call exe2cmd,$(@))
+
+-include .$(LIB_SO).cmd
+
+#
+# Archive objects in .a file if needed
+#
+$(LIB): $(OBJS-y) $(DEP_$(LIB)) FORCE
+ @[ -d $(dir $@) ] || mkdir -p $(dir $@)
+ $(if $(D),\
+ @echo -n "$< -> $@ " ; \
+ echo -n "file_missing=$(call boolean,$(file_missing)) " ; \
+ echo -n "cmdline_changed=$(call boolean,$(call cmdline_changed,$(O_TO_A_STR))) " ; \
+ echo -n "depfile_missing=$(call boolean,$(depfile_missing)) " ; \
+ echo "depfile_newer=$(call boolean,$(depfile_newer)) ")
+ $(if $(or \
+ $(file_missing),\
+ $(call cmdline_changed,$(O_TO_A_STR)),\
+ $(depfile_missing),\
+ $(depfile_newer)),\
+ $(O_TO_A_DO))
+
+$(LIB_SO): $(OBJS-y) $(DEP_$(LIB_SO)) FORCE
+ifeq ($(LIBABIVER),)
+ @echo "Must Specify a $(LIB_SO) ABI version"
+ @false
+endif
+ @[ -d $(dir $@) ] || mkdir -p $(dir $@)
+ $(if $(D),\
+ @echo -n "$< -> $@ " ; \
+ echo -n "file_missing=$(call boolean,$(file_missing)) " ; \
+ echo -n "cmdline_changed=$(call boolean,$(call cmdline_changed,$(O_TO_S_STR))) " ; \
+ echo -n "depfile_missing=$(call boolean,$(depfile_missing)) " ; \
+ echo "depfile_newer=$(call boolean,$(depfile_newer)) ")
+ $(if $(or \
+ $(file_missing),\
+ $(call cmdline_changed,$(O_TO_S_STR)),\
+ $(depfile_missing),\
+ $(depfile_newer)),\
+ $(O_TO_S_DO))
+
+#
+# install lib in $(RTE_OUTPUT)/lib
+#
+$(RTE_OUTPUT)/lib/$(LIB): $(LIB)
+ @echo " INSTALL-LIB $(LIB)"
+ @[ -d $(RTE_OUTPUT)/lib ] || mkdir -p $(RTE_OUTPUT)/lib
+ cp -f $(LIB) $(RTE_OUTPUT)/lib
+
+$(RTE_OUTPUT)/lib/$(LIB_SO): $(LIB_SO)
+ @echo " INSTALL-LIB $(LIB_SO)"
+ @[ -d $(RTE_OUTPUT)/lib ] || mkdir -p $(RTE_OUTPUT)/lib
+ cp -f $(LIB_SO) $(RTE_OUTPUT)/lib
+ ln -s -f $< $(shell echo $@ | sed 's/\.so.*/.so/')
+
+#
+# Clean all generated files
+#
+.PHONY: clean
+clean: _postclean
+
+.PHONY: doclean
+doclean:
+ $(Q)rm -rf $(LIB) $(LIB_SO) $(OBJS-all) $(DEPS-all) $(DEPSTMP-all) \
+ $(CMDS-all) .$(LIB).cmd $(INSTALL-FILES-all) *.pmd.c *.pmd.o
+ $(Q)rm -f $(_BUILD_TARGETS) $(_INSTALL_TARGETS) $(_CLEAN_TARGETS)
+
+else
+ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y)
+LIB := $(patsubst %.a,%.so.$(LIBABIVER),$(LIB))
+ifeq ($(EXTLIB_BUILD),n)
+CPU_LDFLAGS += --version-script=$(SRCDIR)/$(EXPORT_MAP)
+endif
+endif
+
O_TO_S = $(LD) -L$(RTE_SDK_BIN)/lib $(_CPU_LDFLAGS) $(EXTRA_LDFLAGS) \
-shared $(OBJS-y) $(NO_UNDEFINED) $(LDLIBS) -Wl,-soname,$(LIB) -o $(LIB)
O_TO_S_STR = $(subst ','\'',$(O_TO_S)) #'# fix syntax highlight
@@ -148,6 +234,8 @@ doclean:
$(CMDS-all) .$(LIB).cmd $(INSTALL-FILES-all) *.pmd.c *.pmd.o
$(Q)rm -f $(_BUILD_TARGETS) $(_INSTALL_TARGETS) $(_CLEAN_TARGETS)
+endif
+
include $(RTE_SDK)/mk/internal/rte.compile-post.mk
include $(RTE_SDK)/mk/internal/rte.install-post.mk
include $(RTE_SDK)/mk/internal/rte.clean-post.mk
--
2.19.1

View File

@ -1,6 +1,6 @@
Name: dpdk
Version: 19.11
Release: 12
Release: 13
Packager: packaging@6wind.com
URL: http://dpdk.org
%global source_version 19.11
@ -42,6 +42,7 @@ Patch32: 0009-dpdk-support-gazelle-11-eal-memory-add-sec.patch
Patch33: 0010-dpdk-fix-error-in-clearing-secondary-process-memseg-lists.patch
Patch34: 0011-dpdk-fix-coredump-when-primary-process-attach-without-shared-file.patch
Patch35: 0012-dpdk-fix-fbarray-memseg-destory-error-during-detach.patch
Patch36: 0013-dpdk-optimize-the-efficiency-of-compiling-dpdk.patch
Summary: Data Plane Development Kit core
Group: System Environment/Libraries
@ -58,12 +59,10 @@ ExclusiveArch: i686 x86_64 aarch64
%global config x86_64-%{machine}-linux-gcc
%endif
BuildRequires: kernel-devel, kernel, libpcap-devel
BuildRequires: kernel-source
BuildRequires: kernel-devel, libpcap-devel
BuildRequires: numactl-devel libconfig-devel
BuildRequires: module-init-tools uname-build-checks libnl3 libmnl
BuildRequires: glibc glibc-devel libibverbs libibverbs-devel libmnl-devel
BuildRequires: texlive
Requires: python3-pyelftools
@ -134,16 +133,22 @@ This package contains the pdump tool for capture the dpdk network packets.
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch36 -p1
%build
namer=%{kern_devel_ver}
export RTE_KERNELDIR=/lib/modules/${namer}/build
export EXTRA_CFLAGS="-fstack-protector-strong"
make O=%{target} T=%{config} config
#make .so libraries for spdk
sed -ri 's,(CONFIG_RTE_BUILD_SHARED_LIB=).*,\1y,' %{target}/.config
#make .so and .a libraries for spdk
sed -ri 's,(RTE_BUILD_BOTH_STATIC_AND_SHARED_LIBS=).*,\1y,' %{target}/.config
sed -ri 's,(CONFIG_RTE_LIB_LIBOS=).*,\1n,' %{target}/.config
make O=%{target} %{?_smp_mflags}
sed -ri 's,(RTE_MACHINE=).*,\1%{machine},' %{target}/.config
sed -ri 's,(RTE_APP_TEST=).*,\1n,' %{target}/.config
sed -ri 's,(RTE_NEXT_ABI=).*,\1n,' %{target}/.config
sed -ri 's,(LIBRTE_VHOST=).*,\1y,' %{target}/.config
#sed -ri 's,(LIBRTE_PMD_PCAP=).*,\1y,' %{target}/.config
make O=%{target} -j16
%install
namer=%{kern_devel_ver}
@ -169,22 +174,8 @@ cp -ar ./%{target}/lib/librte_cmdline.so* $RPM_BUILD_ROOT/lib64/
cp -ar ./%{target}/lib/librte_net.so* $RPM_BUILD_ROOT/lib64/
cp -ar ./%{target}/lib/librte_meter.so* $RPM_BUILD_ROOT/lib64/
sed -ri 's,(RTE_MACHINE=).*,\1%{machine},' %{target}/.config
sed -ri 's,(RTE_APP_TEST=).*,\1n,' %{target}/.config
sed -ri 's,(RTE_BUILD_SHARED_LIB=).*,\1n,' %{target}/.config
sed -ri 's,(RTE_NEXT_ABI=).*,\1n,' %{target}/.config
sed -ri 's,(LIBRTE_VHOST=).*,\1y,' %{target}/.config
#sed -ri 's,(LIBRTE_PMD_PCAP=).*,\1y,' %{target}/.config
sed -ri 's,(CONFIG_RTE_BUILD_SHARED_LIB=).*,\1n,' %{target}/.config
make O=%{target} %{?_smp_mflags}
#make O=%{target} doc
make install O=%{target} RTE_KERNELDIR=/lib/modules/${namer}/build \
kerneldir=/lib/modules/${namer}/extra/dpdk DESTDIR=%{buildroot} \
prefix=%{_prefix} bindir=%{_bindir} sbindir=%{_sbindir} \
includedir=%{_includedir}/dpdk libdir=%{_libdir} \
datadir=%{_datadir}/dpdk docdir=%{_docdir}/dpdk
mkdir -p $RPM_BUILD_ROOT/usr/include/%{name}-%{version}/
ln -s /usr/share/dpdk/mk $RPM_BUILD_ROOT/usr/include/%{name}-%{version}/
ln -s /usr/share/dpdk/%{target} $RPM_BUILD_ROOT/usr/include/%{name}-%{version}/
@ -237,6 +228,9 @@ strip -g $RPM_BUILD_ROOT/lib/modules/${namer}/extra/dpdk/rte_kni.ko
/usr/sbin/depmod
%changelog
* Mon May 24 2021 renmingshuai <renmingshuai@huawei.com> - 19.11-13
- optimize the efficiency of compiling dpdk
* Mon May 24 2021 wutao <wutao612huawei.com> - 19.11-12
- add fstack-protector-strong gcc flags