SHA256
1
0
forked from pool/dpdk
dpdk/dpdk.spec
Markos Chandras 97a5b5dfba Accepting request 505232 from home:ndas:branches:network
- Updated to 16.11.2 which provide bug fixes as below(fate#321541):
   * mbuf: fix missing includes in exported header
   * eal: fix debug macro redefinition
   * net/nfp: fix packet/data length conversion
   * net/i40e: fix setup when bulk is disabled
   * pci: fix device registration on FreeBSD
   * net/i40e: ensure vector mode is not used with QinQ
   * nic_uio: fix device binding at boot
   * net/bnx2x: fix transmit queue free threshold
   * net/vmxnet3: fix queue size changes
   * kni: fix build with kernel 4.11
   * kni: fix possible memory leak
   * kni: fix crash caused by freeing mempool
   * net/i40e: fix allocation check
   * net/virtio: fix crash when closing twice
   * net/ixgbevf: set xstats id values
   * net/i40e: fix hash input set on X722
   * eal/linux: fix build with glibc 2.25
   * net/i40e: fix incorrect packet index reference
   * net/thunderx: fix 32-bit build
   * net/thunderx: fix build on FreeBSD
   * net/thunderx: fix deadlock in Rx path
   * net/ixgbe: fix setting MTU on stopped device
   * vfio: fix secondary process start
   * net/virtio-user: fix address on 32-bit system
   * net/virtio: fix MSI-X for modern devices
   * net/virtio: fix link status always down
   * net/ixgbe: fix multi-queue mode check in SRIOV mode
   * net/i40e/base: fix potential out of bound array access
   * vhost: fix false sharing

OBS-URL: https://build.opensuse.org/request/show/505232
OBS-URL: https://build.opensuse.org/package/show/network/dpdk?expand=0&rev=51
2017-06-21 10:46:55 +00:00

370 lines
11 KiB
RPMSpec

#
# spec file for package dpdk
#
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
# needssslcertforbuild
%define machine native
%define machine2 default
%ifarch x86_64
%define machine native
%define target x86_64-%{machine}-linuxapp-gcc
%endif
%ifarch %{ix86}
%define machine native
%define target i686-%{machine}-linuxapp-gcc
%endif
%ifarch aarch64
%define machine2 armv8a
%define target arm64-%{machine2}-linuxapp-gcc
%endif
%ifarch ppc64le
%define machine2 power8
%define target ppc_64-%{machine2}-linuxapp-gcc
%endif
%bcond_without shared
# Add option to build without examples
%bcond_without examples
# Add option to build without tools
%bcond_without tools
Name: dpdk
Version: 16.11.2
Release: 0
Summary: Set of libraries and drivers for fast packet processing
License: BSD-3-Clause and GPL-2.0 and LGPL-2.1
Group: System/Libraries
Url: http://dpdk.org
Source: http://fast.dpdk.org/rel/dpdk-%{version}.tar.xz
Source1: preamble
# PATCH-FIX-OPENSUSE 0001-enic-fix-Type-punning-and-strict-aliasing-warning.patch
# This patch was originally taken from the fedora package but they have
# removed it since then because of
# http://osdir.com/ml/scm-fedora-commits/2016-03/msg00849.html
# However, the problem still exists and the fix has to find its way to the
# upstream code.
Patch1: 0001-enic-fix-Type-punning-and-strict-aliasing-warning.patch
Patch2: 0002-kni-define-HAVE_VF_VLAN_PROTO-for-SLES12SP3.patch
Patch3: 0003-kni-define-HAVE_TRANS_START_HELPER-for-SLES12SP3.patch
Patch4: 0004-net-thunderx-sync-mailbox-definitions-with-Linux-PF-.patch
#PATCH-FIX-UPSTREAM 0005-kni-fix-build-with-gcc-7.1.patch bsc#1042372
Patch5: 0005-kni-fix-build-with-gcc-7.1.patch
BuildRequires: doxygen
BuildRequires: fdupes
BuildRequires: libnuma-devel
BuildRequires: libpcap-devel
BuildRequires: pesign-obs-integration
BuildRequires: zlib-devel
ExclusiveArch: aarch64 x86_64 %ix86 ppc64le
Provides: dpdk-any = %{version}
Conflicts: otherproviders(dpdk-any)
%description
The Data Plane Development Kit is a set of libraries and drivers for
fast packet processing in the user space.
%package devel
Summary: Data Plane Development Kit development files
Group: Development/Libraries/C and C++
Requires: %{name} = %{version}
Provides: dpdk-any-devel = %{version}
Conflicts: otherproviders(dpdk-any-devel)
%description devel
This package contains the headers and other files needed for developing
applications with the Data Plane Development Kit.
%package doc
Summary: Data Plane Development Kit API documentation
Group: System/Libraries
BuildArch: noarch
Provides: dpdk-any-doc = %{version}
Conflicts: otherproviders(dpdk-any-doc)
%description doc
API programming documentation for the Data Plane Development Kit.
%if %{with tools}
%package tools
Summary: Tools for setting up Data Plane Development Kit environment
Group: System/Libraries
Requires: %{name} = %{version}
Requires: findutils
Requires: iproute
Requires: kmod
Requires: pciutils
Provides: dpdk-any-tools = %{version}
Conflicts: otherproviders(dpdk-any-tools)
%description tools
This package contains tools for setting up Data Plane Development Kit environment
%endif
%if %{with examples}
%package examples
Summary: Data Plane Development Kit example applications
Group: System/Libraries
BuildRequires: libvirt-devel
Provides: dpdk-any-examples = %{version}
Conflicts: otherproviders(dpdk-any-examples)
%description examples
Example applications utilizing the Data Plane Development Kit, such
as L2 and L3 forwarding.
%endif
%ifnarch %{ix86}
%package kmp
Summary: DPDK KNI kernel module
Group: System/Kernel
BuildRequires: %{kernel_module_package_buildreqs}
Conflicts: otherproviders(dpdk-any-kmp)
%suse_kernel_module_package -p %{_sourcedir}/preamble pae 64kb
%description kmp
The DPDK Kernel NIC Interface (KNI) allows userspace applications access to the Linux* control plane.
%endif
%define sdkdir %{_datadir}/dpdk
%define docdir %{_docdir}/dpdk
%define incdir %{_includedir}/dpdk
%define pmddir %{_libdir}/dpdk-pmds
%prep
# can't use %{name} because of dpdk-thunderx
%setup -q -n dpdk-stable-%{version}
%patch1 -p1 -z .enic
%patch2 -p1 -z .kni1
%patch3 -p1 -z .kni2
%patch4 -p1 -z .thunderx
%patch5 -p1 -z .kni3
# This fixes CROSS compilation (broken) in the mk file for ThunderX
sed -i '/^CROSS /s/^/#/' mk/machine/thunderx/rte.vars.mk
%build
# set up a method for modifying the resulting .config file
function setconf() {
if grep -q ^$1= $3/.config; then
sed -i "s:^$1=.*$:$1=$2:g" $3/.config
else
echo $1=$2 >> $3/.config
fi
}
function setdefaultconf()
{
setconf CONFIG_RTE_MACHINE '"%{machine2}"' $1
# Disable experimental features
setconf CONFIG_RTE_NEXT_ABI n $1
# Enable automatic driver loading from this path
setconf CONFIG_RTE_EAL_PMD_PATH '"%{pmddir}"' $1
setconf CONFIG_RTE_LIBRTE_BNX2X_PMD y $1
setconf CONFIG_RTE_LIBRTE_PMD_PCAP y $1
setconf CONFIG_RTE_LIBRTE_VHOST_NUMA y $1
setconf CONFIG_RTE_EAL_IGB_UIO n $1
setconf CONFIG_RTE_KNI_KMOD n $1
%if %{with shared}
setconf CONFIG_RTE_BUILD_SHARED_LIB y $1
%endif
%ifarch aarch64 ppc64le
setconf CONFIG_RTE_LIBRTE_DISTRIBUTOR n $1
%endif
%ifarch ppc64le
setconf CONFIG_RTE_LIBRTE_PMD_RING n $1
%endif
}
# In case dpdk-devel is installed, we should ignore its hints about the SDK directories
unset RTE_SDK RTE_INCLUDE RTE_TARGET
# For the release, '-Wno-error=array-bounds' is done to prevent a spurious error
# generated by gcc 5.X against the 2.1 branch
export EXTRA_CFLAGS="%{optflags} -Wformat -fPIC -Wno-error=array-bounds"
# DPDK defaults to using builder-specific compiler flags. However,
# the config has been changed by specifying CONFIG_RTE_MACHINE=default
# in order to build for a more generic host. NOTE: It is possible that
# the compiler flags used still won't work for all Fedora-supported
# machines, but runtime checks in DPDK will catch those situations.
make V=1 O=%{target} T=%{target} %{?_smp_mflags} config
setdefaultconf %{target}
%ifnarch %{ix86}
export EXTRA_CFLAGS='-DVERSION=\"%{version}\"'
for flavor in %{flavors_to_build}; do
export RTE_KERNELDIR=%{_prefix}/src/linux-obj/%{_target_cpu}/$flavor
make V=1 O=%{target}-$flavor T=%{target} %{?_smp_mflags} config
setdefaultconf %{target}-$flavor
%ifnarch %{ix86}
setconf CONFIG_RTE_EAL_IGB_UIO y %{target}-$flavor
setconf CONFIG_RTE_KNI_KMOD y %{target}-$flavor
%endif
cd %{target}-$flavor
make V=1 %{?_smp_mflags}
cd -
done
%endif
make V=1 O=%{target} %{?_smp_mflags}
make V=1 O=%{target} %{?_smp_mflags} doc-api-html
%if %{with examples}
make V=1 O=%{target}/examples T=%{target} %{?_smp_mflags} examples
%endif
%install
%ifnarch %{ix86}
# export needed for kmp package
export EXTRA_CFLAGS='-DVERSION=\"%{version}\"'
export INSTALL_MOD_PATH=%{buildroot}
export INSTALL_MOD_DIR=updates
export BRP_PESIGN_FILES="*.ko"
for flavor in %{flavors_to_build}; do
cd %{target}-$flavor
export RTE_KERNELDIR=%{_prefix}/src/linux-obj/%{_target_cpu}/$flavor
dir=/usr/src/linux-obj/%{_target_cpu}/$flavor
krel=$(make -s -C "$dir" kernelrelease)
mkdir -p %{buildroot}/lib/modules/$krel/extra/dpdk/
#make install expects same kernel for build and target, lets copy it manually
install -m644 ../%{target}-$flavor/kmod/*.ko %{buildroot}/lib/modules/$krel/extra/dpdk/
cd -
done
%endif
# In case dpdk-devel is installed
unset RTE_SDK RTE_INCLUDE RTE_TARGET
%make_install O=%{target} prefix=%{_usr} libdir=%{_libdir}
%if ! %{with tools}
rm -rf %{buildroot}%{sdkdir}/tools
rm -rf %{buildroot}%{_sbindir}/dpdk_nic_bind
%endif
rm -f %{buildroot}%{sdkdir}/tools/setup.sh
#TODO pip elftools has issues to fix
rm -rf %{buildroot}%{_bindir}/dpdk-pmdinfo
%if %{with examples}
find %{target}/examples/ -name "*.map" | xargs rm -f
for f in %{target}/examples/*/%{target}/app/*; do
bn=`basename ${f}`
cp -p ${f} %{buildroot}%{_bindir}/dpdk_example_${bn}
done
%endif
# Create a driver directory with symlinks to all pmds
mkdir -p %{buildroot}/%{pmddir}
for f in %{buildroot}/%{_libdir}/*_pmd_*.so.*; do
bn=$(basename ${f})
ln -s ../${bn} %{buildroot}%{pmddir}/${bn}
done
# Setup RTE_SDK environment as expected by apps etc
mkdir -p %{buildroot}/%{_sysconfdir}/profile.d
cat << EOF > %{buildroot}/%{_sysconfdir}/profile.d/dpdk-sdk-%{_arch}.sh
if [ -z "\${RTE_SDK}" ]; then
export RTE_SDK="%{sdkdir}"
export RTE_TARGET="%{target}"
export RTE_INCLUDE="%{incdir}"
fi
EOF
cat << EOF > %{buildroot}/%{_sysconfdir}/profile.d/dpdk-sdk-%{_arch}.csh
if ( ! \$RTE_SDK ) then
setenv RTE_SDK "%{sdkdir}"
setenv RTE_TARGET "%{target}"
setenv RTE_INCLUDE "%{incdir}"
endif
EOF
# Fixup target machine mismatch
sed -i -e 's:-%{machine}-:-%{machine2}-:g' %{buildroot}/%{_sysconfdir}/profile.d/dpdk-sdk*
#doc
mkdir %{buildroot}%{_docdir}/
mv %{buildroot}%{_datadir}/doc/dpdk %{buildroot}%{_docdir}/
ln -s %{_bindir}/dpdk-procinfo %{buildroot}%{_bindir}/dpdk_proc_info
ln -s %{_sbindir}/dpdk-devbind %{buildroot}%{_sbindir}/dpdk_nic_bind
# Remove duplicates
%fdupes %{buildroot}/%{_prefix}
%post devel -p /sbin/ldconfig
%postun devel -p /sbin/ldconfig
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files
%defattr(-,root,root)
# BSD
%{_bindir}/testpmd
%{_bindir}/dpdk-procinfo
%{_bindir}/dpdk_proc_info
%{_bindir}/dpdk-pdump
%if %{with shared}
%dir %{_libdir}/dpdk-pmds
%{_libdir}/*.so.*
%{pmddir}/
%endif
%files doc
%defattr(-,root,root)
#BSD
%docdir
%doc LICENSE.GPL LICENSE.LGPL
%files devel
%defattr(-,root,root)
#BSD
%{incdir}/
%{sdkdir}
%if %{with tools}
%exclude %{sdkdir}/tools/
%endif
%if %{with examples}
%exclude %{sdkdir}/examples/
%endif
%{_sysconfdir}/profile.d/dpdk-sdk-*.*
%if ! %{with shared}
%{_libdir}/*.a
%else
%{_libdir}/*.so
%endif
%if %{with tools}
%files tools
%defattr(-,root,root)
%{sdkdir}/tools/
%{_sbindir}/dpdk-devbind
%{_sbindir}/dpdk_nic_bind
%endif
%if %{with examples}
%files examples
%defattr(-,root,root)
%{_bindir}/dpdk_example_*
%doc %{sdkdir}/examples
%endif
%changelog