- add kni-fix-build-with-Linux-6.8.patch to fix build against kernel 6.8. OBS-URL: https://build.opensuse.org/request/show/1157121 OBS-URL: https://build.opensuse.org/package/show/network/dpdk?expand=0&rev=150
321 lines
9.4 KiB
RPMSpec
321 lines
9.4 KiB
RPMSpec
#
|
|
# spec file for package dpdk
|
|
#
|
|
# Copyright (c) 2024 SUSE LLC
|
|
#
|
|
# 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 https://bugs.opensuse.org/
|
|
#
|
|
# needssslcertforbuild
|
|
|
|
|
|
%define flavor @BUILD_FLAVOR@%{nil}
|
|
%define aarch64_machine armv8a
|
|
%define exclusive_arch aarch64 x86_64 ppc64le
|
|
%define name_tag %{nil}
|
|
%define summary_tag %{nil}
|
|
%if "%{flavor}" == "thunderx"
|
|
%define name_tag -thunderx
|
|
%define summary_tag (thunderx)
|
|
%define aarch64_machine thunderx
|
|
%define exclusive_arch aarch64
|
|
%endif
|
|
# http://doc.dpdk.org/guides-22.11/linux_gsg/build_dpdk.html#adjusting-build-options
|
|
%define platform generic
|
|
%define machine auto
|
|
%ifarch aarch64
|
|
%define machine %{aarch64_machine2}
|
|
%endif
|
|
# This is in sync with <src>/ABI_VERSION
|
|
# TODO: automate this sync
|
|
%define maj 23
|
|
%define min 0
|
|
#%%define lname libdpdk-%%{maj}_%%{min}
|
|
%define lname libdpdk-%{maj}
|
|
# Add option to build without examples
|
|
%bcond_without examples
|
|
# Add option to build without tools
|
|
%bcond_without tools
|
|
#
|
|
Name: dpdk%{name_tag}
|
|
Version: 22.11.1
|
|
Release: 0
|
|
Summary: Set of libraries and drivers for fast packet processing
|
|
License: BSD-3-Clause AND GPL-2.0-only AND LGPL-2.1-only
|
|
Group: System/Libraries
|
|
URL: https://www.dpdk.org/
|
|
Source: https://fast.dpdk.org/rel/dpdk-%{version}.tar.xz
|
|
Source1: preamble
|
|
# PATCH-FIX-OPENSUSE PATCH-FEATURE-UPSTREAM
|
|
Patch0: 0001-fix-cpu-compatibility.patch
|
|
Patch1: 0002-SLE15-SP3-compatibility-patch-for-kni.patch
|
|
Patch2: 0001-kni-fix-build-with-Linux-6.3.patch
|
|
Patch3: 0001-kni-fix-build-with-Linux-6.5.patch
|
|
Patch4: kni-fix-build-with-Linux-6.8.patch
|
|
BuildRequires: binutils
|
|
BuildRequires: doxygen
|
|
BuildRequires: fdupes
|
|
BuildRequires: kernel-syms
|
|
BuildRequires: libfdt-devel
|
|
BuildRequires: meson >= 0.53.2
|
|
BuildRequires: modutils
|
|
BuildRequires: patchelf
|
|
BuildRequires: pesign-obs-integration
|
|
BuildRequires: pkgconfig
|
|
BuildRequires: python3
|
|
BuildRequires: python3-Sphinx
|
|
BuildRequires: python3-pyelftools >= 0.22
|
|
BuildRequires: rdma-core-devel
|
|
BuildRequires: pkgconfig(jansson)
|
|
BuildRequires: pkgconfig(libcrypto)
|
|
BuildRequires: pkgconfig(libelf)
|
|
BuildRequires: pkgconfig(libmnl)
|
|
BuildRequires: pkgconfig(libpcap)
|
|
BuildRequires: pkgconfig(numa)
|
|
BuildRequires: pkgconfig(zlib)
|
|
Conflicts: dpdk-any
|
|
Provides: dpdk-any = %{version}
|
|
Obsoletes: dpdk-kmp-trace < %{version}
|
|
ExclusiveArch: %{exclusive_arch}
|
|
%if 0%{?suse_version} > 1500 || 0%{?sle_version} >= 150400
|
|
# https://bugzilla.opensuse.org/show_bug.cgi?id=1196511
|
|
BuildRequires: pkgconfig(libbpf)
|
|
%endif
|
|
|
|
%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 %{summary_tag}
|
|
Group: Development/Libraries/C and C++
|
|
Requires: %{lname} = %{version}
|
|
Conflicts: dpdk-any-devel
|
|
Provides: dpdk-any-devel = %{version}
|
|
|
|
%description devel
|
|
This package contains the headers and other files needed for developing
|
|
applications with the Data Plane Development Kit.
|
|
|
|
%package devel-static
|
|
Summary: Data Plane Development Kit static development files %{summary_tag}
|
|
Group: Development/Libraries/C and C++
|
|
Requires: %{name}-devel = %{version}
|
|
|
|
%description devel-static
|
|
This package contains the static library files needed for developing
|
|
applications with the Data Plane Development Kit.
|
|
|
|
%package -n %{lname}
|
|
Summary: Data Plane Development Kit runtime libraries %{summary_tag}
|
|
Group: Development/Libraries/C and C++
|
|
Provides: %{lname}-any = %{version}
|
|
|
|
%description -n %{lname}
|
|
This package contains the runtime libraries needed for 3rd party application
|
|
to use the Data Plane Development Kit.
|
|
|
|
%package doc
|
|
Summary: Data Plane Development Kit API documentation %{summary_tag}
|
|
Group: System/Libraries
|
|
Conflicts: dpdk-any-doc
|
|
Provides: dpdk-any-doc = %{version}
|
|
BuildArch: noarch
|
|
|
|
%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 %{summary_tag}
|
|
Group: System/Libraries
|
|
Requires: %{name} = %{version}
|
|
Requires: findutils
|
|
Requires: iproute
|
|
Requires: kmod
|
|
Requires: pciutils
|
|
Conflicts: dpdk-any-tools
|
|
Provides: dpdk-any-tools = %{version}
|
|
|
|
%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 %{summary_tag}
|
|
Group: System/Libraries
|
|
BuildRequires: libvirt-devel
|
|
Conflicts: dpdk-any-examples
|
|
Provides: dpdk-any-examples = %{version}
|
|
|
|
%description examples
|
|
Example applications utilizing the Data Plane Development Kit, such
|
|
as L2 and L3 forwarding.
|
|
%endif
|
|
|
|
%package kmp
|
|
Summary: DPDK KNI kernel module %{summary_tag}
|
|
Group: System/Kernel
|
|
BuildRequires: %{kernel_module_package_buildreqs}
|
|
%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.
|
|
|
|
%define sdkdir %{_datadir}/dpdk
|
|
%define docdir %{_docdir}/dpdk
|
|
%define incdir %{_includedir}/dpdk
|
|
%define pmddir %{_libdir}/dpdk-pmds-%{maj}.%{min}
|
|
|
|
%prep
|
|
# can't use %%{name} because of dpdk-thunderx
|
|
%autosetup -p1 -n dpdk-stable-%{version}
|
|
|
|
# Skip not supported examples
|
|
sed -i "/performance-thread/d" examples/meson.build
|
|
|
|
# Verify ABI
|
|
[ "$(cat ABI_VERSION)" = "%{maj}.%{min}" ] || exit 1
|
|
|
|
%build
|
|
%define _vpath_builddir "build-%{_target_cpu}-$flavor"
|
|
|
|
%ifarch x86_64
|
|
export CFLAGS="%{optflags} -U_FORTIFY_SOURCE -msse4"
|
|
%endif
|
|
examples="all"
|
|
for flavor in %{flavors_to_build}; do
|
|
%meson --includedir=%{incdir} \
|
|
-Ddefault_library=shared \
|
|
-Denable_docs=true \
|
|
-Db_lto=true \
|
|
%if %{with examples}
|
|
-Dexamples="$examples" \
|
|
%endif
|
|
-Dplatform="%{platform}" \
|
|
-Dcpu_instruction_set=%{machine} \
|
|
-Denable_kmods=true \
|
|
-Ddrivers_install_subdir=%{pmddir} \
|
|
-Dkernel_dir="%{_prefix}/src/linux-obj/%{_target_cpu}/$flavor"
|
|
%meson_build
|
|
# Make sure examples are only built once
|
|
examples=""
|
|
done
|
|
|
|
%install
|
|
examples="%{?with_examples:all}"
|
|
for flavor in %{flavors_to_build}; do
|
|
%meson_install
|
|
# Also install the example binaries
|
|
if [ ! -z "$examples" ]; then
|
|
for f in %{_vpath_builddir}/examples/dpdk-*; do
|
|
bn=$(basename "$f")
|
|
if [ -f "$f" ] ; then
|
|
install -Dm 0755 ${f} "%{buildroot}%{_bindir}/${bn/dpdk-/dpdk_example_}"
|
|
patchelf --remove-rpath "%{buildroot}%{_bindir}/${bn/dpdk-/dpdk_example_}"
|
|
fi
|
|
done
|
|
fi
|
|
examples=""
|
|
done
|
|
|
|
# Fix Kernel modules on Factory (/usr merge)
|
|
%if 0%{?suse_version} > 1550
|
|
mkdir -p %{buildroot}%{_prefix}/lib
|
|
mv %{buildroot}/lib/modules %{buildroot}%{_prefix}/lib
|
|
%endif
|
|
|
|
# Fix documentation
|
|
mkdir -p %{buildroot}%docdir
|
|
mv %{buildroot}%{_datadir}/doc/dpdk %{buildroot}%docdir
|
|
|
|
# driver .so files often depend upon the bus drivers for their connect bus,
|
|
# e.g. ixgbe depends on librte_bus_pci. This means that the bus drivers need
|
|
# to be in the library path, so symlink the drivers from the main lib directory
|
|
# Fix broken symlink created by buildtools/symlink-drivers-solibs.sh
|
|
for f in %{buildroot}/%{pmddir}/*.so.*; do
|
|
bn=$(basename ${f})
|
|
ln -s %{pmddir}/${bn} %{buildroot}%{_libdir}/${bn}
|
|
done
|
|
|
|
%if ! %{with tools}
|
|
# Remove tools if not needed
|
|
for tool in dpdk-devbind.py dpdk-pmdinfo.py dpdk-telemetry.py dpdk-hugepages.py; do
|
|
rm -rf "%{buildroot}%{_bindir}/$tool"
|
|
done
|
|
%else
|
|
# Add compatibility symlink
|
|
mkdir -p %{buildroot}%{_sbindir}
|
|
ln -s %{_bindir}/dpdk-devbind.py %{buildroot}%{_sbindir}/dpdk_nic_bind
|
|
%endif
|
|
|
|
# Fix interpreter
|
|
find %{buildroot} -name "*.py" -exec sed -i 's|python$|python3|' \{\} +
|
|
find %{buildroot} -name "*.py" -exec sed -i 's|env python|python|' \{\} +
|
|
|
|
# Remove duplicates
|
|
%fdupes %{buildroot}/%docdir
|
|
%fdupes %{buildroot}/%{sdkdir}/examples
|
|
|
|
# Fix broken symlink (yes with * in its name)
|
|
rm -v "%{buildroot}%{_libdir}/librte_*.so*"
|
|
|
|
%post devel -p /sbin/ldconfig
|
|
%postun devel -p /sbin/ldconfig
|
|
%post -n %{lname} -p /sbin/ldconfig
|
|
%postun -n %{lname} -p /sbin/ldconfig
|
|
|
|
%files
|
|
%{_bindir}/dpdk-dumpcap
|
|
%{_bindir}/dpdk-pdump
|
|
%{_bindir}/dpdk-proc-info
|
|
%{_bindir}/dpdk-test*
|
|
|
|
%files -n %{lname}
|
|
%license license/gpl-2.0.txt license/lgpl-2.1.txt license/bsd-3-clause.txt
|
|
%{_libdir}/*.so.*
|
|
%dir %{pmddir}
|
|
%{pmddir}/*.so.*
|
|
|
|
%files devel
|
|
#BSD
|
|
%{incdir}/
|
|
%{sdkdir}/
|
|
%{pmddir}/*.so
|
|
%{_libdir}/*.so
|
|
%{_libdir}/pkgconfig/libdpdk*.pc
|
|
%if %{with examples}
|
|
%exclude %{sdkdir}/examples/
|
|
%endif
|
|
|
|
%files devel-static
|
|
#BSD
|
|
%{_libdir}/*.a
|
|
|
|
%files doc
|
|
#BSD
|
|
%doc %docdir
|
|
|
|
%if %{with tools}
|
|
%files tools
|
|
%{_sbindir}/dpdk_nic_bind
|
|
%{_bindir}/dpdk-*.py
|
|
%endif
|
|
|
|
%if %{with examples}
|
|
%files examples
|
|
%{_bindir}/dpdk_example_*
|
|
%doc %{sdkdir}/examples
|
|
%endif
|
|
|
|
%changelog
|