[dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM

Chris Wright chrisw at redhat.com
Mon Feb 24 17:29:14 CET 2014

* Thomas Monjalon (thomas.monjalon at 6wind.com) wrote:
> Packages can be built with:
> 	RPM_BUILD_NCPUS=8 rpmbuild -ta dpdk-1.5.2r2.tar.gz
> There are packages for runtime, static libraries and development.
> Once devel package installed, it can be used like this:
> 	make -C /usr/share/dpdk/examples/helloworld RTE_SDK=/usr/share/dpdk
> Signed-off-by: Thomas Monjalon <thomas.monjalon at 6wind.com>
> ---
>  pkg/rpm.spec |  143 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

This should be dpdk.spec

>  1 file changed, 143 insertions(+)
>  create mode 100644 pkg/rpm.spec
> diff --git a/pkg/rpm.spec b/pkg/rpm.spec
> new file mode 100644
> index 0000000..d806d55
> --- /dev/null
> +++ b/pkg/rpm.spec
> @@ -0,0 +1,143 @@
> +Name: dpdk
> +Version: 1.5.2r1

need to check of NVR properly increases.  looks ok, I used the tool
'rpmdev-vercmp' to verify 

> +Release: 1
> +Packager: packaging at 6wind.com
> +URL: http://dpdk.org
> +Source: http://dpdk.org/browse/dpdk/snapshot/dpdk-%{version}.tar.gz
> +
> +Summary: Intel(r) Data Plane Development Kit
> +Group: System Environment/Libraries
> +License: BSD and LGPLv2 and GPLv2
> +
> +ExclusiveArch: i686, x86_64
> +%define target %{_arch}-default-linuxapp-gcc

Why this?

> +%define machine default
> +
> +BuildRequires: kernel-devel, kernel-headers, doxygen
> +
> +%description
> +Dummy main package. Make only subpackages.

Why not make the core package include .so?
The -devel package would then include headers, and I don't htink you
need a static (.a) package because it's not encouraged to ship static


If you had to update a .a file, e.g. due to security issue, any
applications using static library would not receive the update w/out

> +%package core-runtime
> +Summary: Intel(r) Data Plane Development Kit core for runtime
> +%description core-runtime
> +Intel(r) DPDK runtime includes kernel modules, core libraries and tools.
> +testpmd application allows to test fast packet processing environments
> +on x86 platforms. For instance, it can be used to check that environment
> +can support fast path applications such as 6WINDGate, pktgen, rumptcpip, etc.
> +More libraries are available as extensions in other packages.

This is an unusual name.  I don't have a better suggestion right now,
will think about it for the moment.

> +%package core-static
> +Requires: %{name}-core-runtime
> +Summary: Intel(r) Data Plane Development Kit core as static libraries
> +%description core-static
> +Intel(r) DPDK static provides static version of the core libraries
> +for fast packet processing on x86 platforms.
> +More libraries are available as extensions in other packages.

Think we can eliminate this one.

> +%package core-devel
> +Requires: %{name}-core-static
> +Summary: Intel(r) Data Plane Development Kit core for development
> +%description core-devel
> +Intel(r) DPDK devel is a set of makefiles, headers, examples and documentation
> +for fast packet processing on x86 platforms.
> +More libraries are available as extensions in other packages.

This looks fine to keep (often it's just headers, but in this case the
makefiles and examples are part of 'how to develop' a dpdk app).

> +# debuginfo packaging is broken
> +%define debug_package %{nil}
> +
> +%define destdir %{buildroot}%{_prefix}
> +%define moddir  /lib/modules/%(uname -r)/extra
> +%define datadir %{_datadir}/%{name}
> +%define docdir  %{_docdir}/%{name}
> +
> +%prep
> +%setup -q
> +
> +%build
> +make O=%{target} T=%{target} config

Have you considering fixing the build system to allow writing directly
to the RPM_BUILD_ROOT?  (this would eliminate all the cp/rmdir below at
%install stage).

> +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=).*,\1y,' %{target}/.config
> +make O=%{target} %{?_smp_mflags}
> +cp %{target}/lib/*.so %{target}
> +sed -ri 's,(RTE_BUILD_SHARED_LIB=).*,\1n,' %{target}/.config
> +make O=%{target} %{?_smp_mflags}
> +make O=%{target} doc
> +
> +%install
> +rm -rf %{buildroot}
> +make           O=%{target}     DESTDIR=%{destdir}
> +mkdir -p                               %{buildroot}%{moddir}
> +mv    %{destdir}/%{target}/kmod/*.ko   %{buildroot}%{moddir}

usually the install command is used (install -d will create directories)

I'm pulling depedencies to do a test build, will comment if anything
further comes up.


More information about the dev mailing list