From e5db0ea009a152f53c452b6978632441e390684c Mon Sep 17 00:00:00 2001 From: Timothy Redaelli Date: Thu, 18 Apr 2024 15:17:23 +0200 Subject: [PATCH] Rebase to c9s Resolves: RHEL-33405 --- .gitignore | 22 +--- dpdk-snapshot.sh | 13 +++ dpdk.spec | 277 ++++++++++++++++++++++++++++++++--------------- gating.yaml | 8 ++ sources | 3 +- tests/tests.yml | 9 ++ 6 files changed, 225 insertions(+), 107 deletions(-) create mode 100644 dpdk-snapshot.sh create mode 100644 gating.yaml create mode 100644 tests/tests.yml diff --git a/.gitignore b/.gitignore index de57ea8..477a509 100644 --- a/.gitignore +++ b/.gitignore @@ -1,26 +1,16 @@ -/dpdk-1.7.0-20140603git5ebbb1728.tgz -/dpdk-1.7.0.tar.gz -/dpdk-2.0.0.tar.gz -/dpdk-2.1.0.tar.gz -/dpdk-2.2.0.tar.gz -/dpdk-16.04.tar.gz -/dpdk-16.07.tar.xz -/dpdk-16.11.tar.xz -/dpdk-17.02.tar.xz -/dpdk-17.05.tar.xz -/dpdk-17.08.tar.xz +/dpdk-stable-16.11.2.tar.xz /dpdk-17.11.tar.xz -/dpdk-18.02.tar.xz -/dpdk-17.11.1.tar.xz -/dpdk-17.11.2.tar.xz /dpdk-18.11.tar.xz /dpdk-18.11.2.tar.xz -/dpdk-18.11.6.tar.xz /dpdk-19.11.tar.xz /dpdk-19.11.1.tar.xz +/dpdk-19.11.2.tar.xz /dpdk-19.11.3.tar.xz /dpdk-20.11.tar.xz +/dpdk-20.11.1.tar.xz /dpdk-21.11.tar.xz +/pyelftools-0.27.tar.gz /dpdk-21.11.1.tar.xz /dpdk-21.11.2.tar.xz -/dpdk-22.11.1.tar.xz +/dpdk-22.11.tar.xz +/dpdk-23.11.tar.xz diff --git a/dpdk-snapshot.sh b/dpdk-snapshot.sh new file mode 100644 index 0000000..0bae0d1 --- /dev/null +++ b/dpdk-snapshot.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +snapgit=`git log --pretty=oneline -n1|cut -c1-8` +snapser=`git log --pretty=oneline | wc -l` + +makever=`make showversion` +basever=`echo ${makever} | cut -d- -f1` + +prefix=dpdk-${basever}-${snapser}.git${snapgit} +archive=${prefix}.tar.gz + +echo "Creating ${archive}" +git archive --prefix=${prefix}/ HEAD | gzip -9 > ${archive} diff --git a/dpdk.spec b/dpdk.spec index 5abf7e9..279f82e 100644 --- a/dpdk.spec +++ b/dpdk.spec @@ -1,22 +1,35 @@ -# Add option to build as static libraries (--without shared) -%bcond_without shared -# Add option to build without examples +# Add option to build with examples %bcond_with examples # Add option to build without tools %bcond_without tools -# Avoid architecture-specific name of build-dir to fix per-arch reproducibility with doxygen -%global _vpath_builddir %{_vendor}-%{_target_os}-build +# Dont edit Version: and Release: directly, only these: +#% define commit0 7001c8fdb27357c67147c0a13cb3826e48c0f2bf +#% define date 20191128 +#% define shortcommit0 %(c=%{commit0}; echo ${c:0:7}) + +%define ver 23.11 +%define rel 1 + +%define srcname dpdk%(awk -F. '{ if (NF > 2) print "-stable" }' <<<%{version}) + +%define pyelftoolsver 0.27 Name: dpdk -Version: 22.11.1 -Release: 4%{?dist} +Version: %{ver} +Release: %{rel}%{?commit0:.%{date}git%{shortcommit0}}%{?dist} +%if 0%{?fedora} || 0%{?rhel} > 8 Epoch: 2 +%endif URL: http://dpdk.org -Source: https://fast.dpdk.org/rel/dpdk-%{version}.tar.xz +%if 0%{?commit0:1} +Source: https://dpdk.org/browse/dpdk/snapshot/dpdk-%{commit0}.tar.xz +%else +Source: https://fast.dpdk.org/rel/dpdk-%{ver}.tar.xz +%endif -BuildRequires: meson -BuildRequires: python3-pyelftools +# Only needed for creating snapshot tarballs, not used in build itself +Source100: dpdk-snapshot.sh Summary: Set of libraries and drivers for fast packet processing @@ -31,18 +44,29 @@ License: BSD and LGPLv2 and GPLv2 # The DPDK is designed to optimize througput of network traffic using, among # other techniques, carefully crafted assembly instructions. As such it # needs extensive work to port it to other architectures. -# -ExclusiveArch: x86_64 i686 aarch64 ppc64le +ExclusiveArch: x86_64 aarch64 ppc64le -BuildRequires: gcc -BuildRequires: kernel-headers, libpcap-devel, doxygen, /usr/bin/sphinx-build, zlib-devel -BuildRequires: numactl-devel -BuildRequires: rdma-core-devel -BuildRequires: openssl-devel -BuildRequires: libbpf-devel -BuildRequires: libfdt-devel -BuildRequires: libatomic -BuildRequires: libarchive-devel +%define sdkdir %{_datadir}/%{name} +%define docdir %{_docdir}/%{name} +%define incdir %{_includedir}/%{name} +%define pmddir %{_libdir}/%{name}-pmds + +%if 0%{?rhel} && 0%{?rhel} < 9 +# Fix conflicts with README and MAINTAINERS (included in dpdk-doc < 18.11-2), +# this affects only RHEL8. +Conflicts: dpdk-doc < 18.11-2 +%endif + +BuildRequires: meson +Source1: https://github.com/eliben/pyelftools/archive/refs/tags/v%{pyelftoolsver}.tar.gz#/pyelftools-%{pyelftoolsver}.tar.gz +%if 0%{?rhel} > 8 || 0%{?fedora} +BuildRequires: python3-pyelftools +%endif +BuildRequires: gcc, zlib-devel, numactl-devel, libarchive-devel +BuildRequires: doxygen, python3-sphinx +%ifarch x86_64 +BuildRequires: rdma-core-devel >= 15 +%endif %description The Data Plane Development Kit is a set of libraries and drivers for @@ -50,11 +74,10 @@ fast packet processing in the user space. %package devel Summary: Data Plane Development Kit development files -Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} python3 -%if ! %{with shared} -Provides: %{name}-static = %{?epoch:%{epoch}:}%{version}-%{release} -%endif +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +%ifarch x86_64 Requires: rdma-core-devel +%endif %description devel This package contains the headers and other files needed for developing @@ -71,7 +94,7 @@ API programming documentation for the Data Plane Development Kit. %package tools Summary: Tools for setting up Data Plane Development Kit environment Requires: %{name} = %{?epoch:%{epoch}:}%{version}-%{release} -Requires: kmod pciutils findutils iproute python3-pyelftools +Requires: kmod pciutils findutils iproute python3 %description tools %{summary} @@ -81,116 +104,190 @@ Requires: kmod pciutils findutils iproute python3-pyelftools %package examples Summary: Data Plane Development Kit example applications BuildRequires: libvirt-devel -BuildRequires: make %description examples Example applications utilizing the Data Plane Development Kit, such as L2 and L3 forwarding. %endif -%define sdkdir %{_datadir}/%{name} -%define docdir %{_docdir}/%{name} -%define incdir %{_includedir}/%{name} -%define pmddir %{_libdir}/%{name}-pmds - -%pretrans -p --- This is to clean up directories before links created --- See https://fedoraproject.org/wiki/Packaging:Directory_Replacement - -directories = { - "/usr/share/dpdk/mk/exec-env/bsdapp", - "/usr/share/dpdk/mk/exec-env/linuxapp" -} -for i,path in ipairs(directories) do - st = posix.stat(path) - if st and st.type == "directory" then - status = os.rename(path, path .. ".rpmmoved") - if not status then - suffix = 0 - while not status do - suffix = suffix + 1 - status = os.rename(path .. ".rpmmoved", path .. ".rpmmoved." .. suffix) - end - os.rename(path, path .. ".rpmmoved") - end - end -end %prep -%setup -q -n dpdk%(awk -F. '{ if (NF > 2) print "-stable" }' <<<%{version})-%{version} +%if 0%{?rhel} && 0%{?rhel} < 9 +%setup -q -a 1 -n %{srcname}-%{?commit0:%{commit0}}%{!?commit0:%{ver}} +%else +%setup -q -n %{srcname}-%{?commit0:%{commit0}}%{!?commit0:%{ver}} +%endif +%autopatch -p1 %build -CFLAGS="$(echo %{optflags} -fcommon)" \ -%meson --includedir=include/dpdk \ - -Ddrivers_install_subdir=dpdk-pmds \ - -Denable_docs=true \ - -Dmachine=generic \ -%if %{with examples} - -Dexamples=all \ -%endif -%if %{with shared} - --default-library=shared -%else - --default-library=static +%if 0%{?rhel} && 0%{?rhel} < 9 +export PYTHONPATH=$(pwd)/pyelftools-%{pyelftoolsver} %endif +ENABLED_APPS=( + test-pmd + test-bbdev +) + +for app in "${ENABLED_APPS[@]}"; do + enable_apps="${enable_apps:+$enable_apps,}"$app +done + +ENABLED_DRIVERS=( + bus/pci + bus/vdev + mempool/ring + net/failsafe + net/i40e + net/ring + net/vhost + net/virtio + net/tap +) + +%ifarch x86_64 +ENABLED_DRIVERS+=( + baseband/acc + bus/auxiliary + bus/vmbus + common/iavf + common/mlx5 + common/nfp + net/bnxt + net/enic + net/iavf + net/ice + net/mlx5 + net/netvsc + net/nfp + net/qede + net/vdev_netvsc +) +%endif + +%ifarch aarch64 x86_64 +ENABLED_DRIVERS+=( + net/e1000 + net/ixgbe +) +%endif + +for driver in "${ENABLED_DRIVERS[@]}"; do + enable_drivers="${enable_drivers:+$enable_drivers,}"$driver +done + +# If doing any updates, this must be aligned with: +# https://access.redhat.com/articles/3538141 +ENABLED_LIBS=( + bbdev + bitratestats + bpf + cmdline + cryptodev + dmadev + gro + gso + hash + ip_frag + latencystats + member + meter + metrics + pcapng + pdump + security + stack + vhost +) + +for lib in "${ENABLED_LIBS[@]}"; do + enable_libs="${enable_libs:+$enable_libs,}"$lib +done + +ln -s /usr/bin/true mandb +export PATH=$(pwd):$PATH +%meson --includedir=include/dpdk \ + --default-library=shared \ + -Ddeveloper_mode=disabled \ + -Denable_libs="$enable_libs" \ + -Ddrivers_install_subdir=dpdk-pmds \ + -Denable_apps="$enable_apps" \ + -Denable_docs=true \ + -Denable_drivers="$enable_drivers" \ + -Dplatform=generic \ + -Dmax_ethports=32 \ + -Dmax_numa_nodes=8 \ + -Dtests=false + +# Check drivers and libraries +for driver in "${ENABLED_DRIVERS[@]}"; do + config_token="RTE_$(echo "$driver" | tr [a-z/] [A-Z_])" + ! grep -Fqw "$config_token" */rte_build_config.h || continue + echo "!!! Could not find $driver in rte_build_config.h, please check dependencies. !!!" + false +done +for lib in "${ENABLED_LIBS[@]}"; do + config_token="RTE_LIB_$(echo "$lib" | tr [a-z/] [A-Z_])" + ! grep -Fqw "$config_token" */rte_build_config.h || continue + echo "!!! Could not find $lib in rte_build_config.h, please check dependencies. !!!" + false +done %meson_build %install %meson_install +rm -f %{buildroot}%{_libdir}/*.a +# Taken from debian/rules +rm -f %{buildroot}%{docdir}/html/.buildinfo +rm -f %{buildroot}%{docdir}/html/objects.inv +rm -rf %{buildroot}%{docdir}/html/.doctrees +find %{buildroot}%{_datadir}/man/ -type f -a ! -iname "*rte_*" -exec rm {} \; + %files # BSD +%doc README MAINTAINERS %{_bindir}/dpdk-testpmd -%{_bindir}/dpdk-proc-info -%if %{with shared} +%{_bindir}/dpdk-test-bbdev +%dir %{pmddir} %{_libdir}/*.so.* %{pmddir}/*.so.* -%endif %files doc #BSD +%exclude %{docdir}/README +%exclude %{docdir}/MAINTAINERS %{docdir} %files devel #BSD %{incdir}/ -%{sdkdir} -%ghost %{sdkdir}/mk/exec-env/bsdapp -%ghost %{sdkdir}/mk/exec-env/linuxapp +%{sdkdir}/ %if %{with tools} %exclude %{_bindir}/dpdk-*.py %endif %if %{with examples} %exclude %{sdkdir}/examples/ %endif -%if ! %{with shared} -%{_libdir}/*.a -%exclude %{_libdir}/*.so -%exclude %{pmddir}/*.so -%else %{_libdir}/*.so %{pmddir}/*.so -%exclude %{_libdir}/*.a -%endif %{_libdir}/pkgconfig/libdpdk.pc %{_libdir}/pkgconfig/libdpdk-libs.pc +%{_datadir}/man +%if %{with examples} +%files examples +%{_bindir}/dpdk-* +%doc %{sdkdir}/examples/ +%endif %if %{with tools} %files tools -%{_bindir}/dpdk-dumpcap -%{_bindir}/dpdk-pdump -%{_bindir}/dpdk-test -%{_bindir}/dpdk-test-* %{_bindir}/dpdk-*.py %endif -%if %{with examples} -%files examples -%{_bindir}/dpdk_example_* -%doc %{sdkdir}/examples -%endif - %changelog +* Wed May 15 2024 Timothy Redaelli - 23.11-1 +- Aligned to cs9 (RHEL-33405) + * Wed Jan 24 2024 Fedora Release Engineering - 2:22.11.1-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild diff --git a/gating.yaml b/gating.yaml new file mode 100644 index 0000000..9a997a9 --- /dev/null +++ b/gating.yaml @@ -0,0 +1,8 @@ +--- !Policy +product_versions: + - rhel-8 +decision_context: osci_compose_gate +rules: + - !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional} + - !PassingTestCaseRule {test_case_name: manual.sst_networking.dpdk.tier1} + diff --git a/sources b/sources index 719dc2c..00d73e2 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ -SHA512 (dpdk-22.11.1.tar.xz) = 3a7378148a884c1f4a7acef4ae81dbf75eb215e0d6c894f95c273b79dcc533f5edfb6b7872b0c1488be53223014056aa08a9729c7339cb5c91f8426767627421 +SHA512 (dpdk-23.11.tar.xz) = e5177d658fca8df55090a92ea1a8932aac5847314fed7c686b8a36e709f34b14c05e68d6c4c433ff5371b67a39c4324b4eefab8c138f417468f57092bf269b4c +SHA512 (pyelftools-0.27.tar.gz) = bb0a00e5500016e3d4f64be0a728e190f84b11a805f78d668b5a74716a30400e6794946f198ef4a3f3b8f64a63deb1b5a96180b09e56b7357b988b28e25fad0a diff --git a/tests/tests.yml b/tests/tests.yml new file mode 100644 index 0000000..2c5de61 --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,9 @@ +- hosts: localhost + roles: + - role: standard-test-basic + tags: + - classic + tests: + - simple: + dir: . + run: dpdk-testpmd --help