# Add option to build as static libraries (--without shared) %bcond_without shared # Add option to build without examples %bcond_without examples # Add option to build without tools %bcond_without tools # Add option to build the PDF documentation separately (--with pdfdoc) %bcond_with pdfdoc Name: dpdk Version: 19.11 Release: 0%{?dist} %if 0%{?fedora} Epoch: 2 %endif URL: http://dpdk.org Source: https://fast.dpdk.org/rel/dpdk-%{version}.tar.xz Patch0: app-pie.patch Patch1: fcf-protection.patch Patch2: dpdk-rte-ether-align.patch # fixed multilib issue with doxygen Patch3: dpdk-stable-18.11.2-doxygen-multilib.patch # fix building with GCC 10 Patch10: 0001-crypto-octeontx2-fix-building-with-GCC-10.patch Patch11: 0002-app-test-fix-building-with-GCC-10.patch Patch12: 0003-app-test-pipeline-fix-building-with-GCC-10.patch Patch13: 0004-examples-vhost_blk-fix-building-with-GCC-10.patch Patch14: 0005-examples-eventdev_pipeline-fix-building-with-GCC-10.patch Patch15: 0006-examples-qos_sched-fix-building-with-GCC-10.patch Summary: Set of libraries and drivers for fast packet processing # # Note that, while this is dual licensed, all code that is included with this # Pakcage are BSD licensed. The only files that aren't licensed via BSD is the # kni kernel module which is dual LGPLv2/BSD, and thats not built for fedora. # 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 # machine_arch maps between rpm and dpdk arch name, often same as _target_cpu # machine_tmpl is the config template machine name, often "native" # machine is the actual machine name used in the dpdk make system %ifarch x86_64 %define machine_arch x86_64 %define machine_tmpl native %define machine default %endif %ifarch i686 %define machine_arch i686 %define machine_tmpl native %define machine default %endif %ifarch aarch64 %define machine_arch arm64 %define machine_tmpl armv8a %define machine armv8a %endif %ifarch ppc64le %define machine_arch ppc_64 %define machine_tmpl power8 %define machine power8 %endif %define target %{machine_arch}-%{machine_tmpl}-linuxapp-gcc %if 0%{?rhel} > 7 || 0%{?fedora} %define _py python3 %define _py_exec %{?__python3} %else %define _py python %define _py_exec %{?__python2} %endif BuildRequires: gcc BuildRequires: kernel-headers, libpcap-devel, doxygen, %{_py}-sphinx, zlib-devel BuildRequires: numactl-devel %if %{with pdfdoc} BuildRequires: texlive-dejavu inkscape texlive-latex-bin-bin BuildRequires: texlive-kpathsea-bin texlive-metafont-bin texlive-cm BuildRequires: texlive-cmap texlive-ec texlive-babel-english BuildRequires: texlive-fancyhdr texlive-fancybox texlive-titlesec BuildRequires: texlive-framed texlive-threeparttable texlive-mdwtools BuildRequires: texlive-wrapfig texlive-parskip texlive-upquote texlive-multirow BuildRequires: texlive-helvetic texlive-times texlive-dvips %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 Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} %{_py} %if ! %{with shared} Provides: %{name}-static = %{?epoch:%{epoch}:}%{version}-%{release} %endif %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 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 Requires: %{name} = %{?epoch:%{epoch}:}%{version}-%{release} Requires: kmod pciutils findutils iproute %{_py}-pyelftools %description tools %{summary} %endif %if %{with examples} %package examples Summary: Data Plane Development Kit example applications BuildRequires: libvirt-devel %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 %prep %setup -q -n dpdk-%{version} %patch0 -p1 %if 0%{?fedora} > 27 || 0%{?rhel} > 7 %ifarch x86_64 i686 %patch1 -p1 %endif %patch2 -p1 %patch3 -p1 %endif %patch10 -p1 %patch11 -p1 %patch12 -p1 %patch13 -p1 %patch14 -p1 %patch15 -p1 %build %set_build_flags # set up a method for modifying the resulting .config file function setconf() { if grep -q ^$1= %{target}/.config; then sed -i "s:^$1=.*$:$1=$2:g" %{target}/.config else echo $1=$2 >> %{target}/.config fi } # In case dpdk-devel is installed, we should ignore its hints about the SDK directories unset RTE_SDK RTE_INCLUDE RTE_TARGET # Avoid appending second -Wall to everything, it breaks upstream warning # disablers in makefiles. Strip expclit -march= from optflags since they # will only guarantee build failures, DPDK is picky with that. # Note: _hardening_ldflags has to go on the extra cflags line because dpdk is # astoundingly convoluted in how it processes its linker flags. Fixing it in # dpdk is the preferred solution, but adjusting to allow a gcc option in the # ldflags, even when gcc is used as the linker, requires large tree-wide changes touch obj.o gcc -### obj.o 2>&1 | awk '/.*collect2.*/ { print $0}' | sed -e 's/\S*\.res\S*//g' -e 's/-z \S*//g' -e 's/[^ ]*\.o//g' -e 's/ /\n/g' | sort -u > ./noopts.txt gcc -### $RPM_LD_FLAGS obj.o 2>&1 | awk '/.*collect2.*/ {print $0}' | sed -e 's/\S*\.res\S*//g' -e 's/-z \S*//g' -e 's/[^ ]*\.o//g' -e 's/ /\n/g' | sort -u > ./opts.txt EXTRA_RPM_LDFLAGS=$(comm -13 ./noopts.txt ./opts.txt) rm -f obj.o export EXTRA_CFLAGS="$(echo %{optflags} | sed -e 's:-Wall::g' -e 's:-march=[[:alnum:]]* ::g') -Wformat -fPIC %{_hardening_ldflags}" %if 0%{?fedora} > 27 || 0%{?rhel} > 7 %ifarch x86_64 i686 export EXTRA_CFLAGS="$EXTRA_CFLAGS -fcf-protection=full" %endif %endif export EXTRA_LDFLAGS=$(echo %{__global_ldflags} | sed -e's/-Wl,//g' -e's/-spec.*//') export HOST_EXTRA_CFLAGS="$EXTRA_CFLAGS $EXTRA_RPM_LDFLAGS" export EXTRA_HOST_LDFLAGS=$(echo %{__global_ldflags} | sed -e's/-spec.*//') # 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 setconf CONFIG_RTE_MACHINE '"%{machine}"' # Disable experimental features setconf CONFIG_RTE_NEXT_ABI n setconf CONFIG_RTE_LIBRTE_MBUF_OFFLOAD n # Disable unmaintained features setconf CONFIG_RTE_LIBRTE_POWER n # Enable automatic driver loading from this path setconf CONFIG_RTE_EAL_PMD_PATH '"%{pmddir}"' setconf CONFIG_RTE_LIBRTE_BNX2X_PMD y setconf CONFIG_RTE_LIBRTE_PMD_PCAP y setconf CONFIG_RTE_LIBRTE_VHOST_NUMA y setconf CONFIG_RTE_EAL_IGB_UIO n setconf CONFIG_RTE_LIBRTE_KNI n setconf CONFIG_RTE_KNI_KMOD n setconf CONFIG_RTE_KNI_PREEMPT_DEFAULT n setconf CONFIG_RTE_APP_EVENTDEV n setconf CONFIG_RTE_LIBRTE_NFP_PMD y %ifarch aarch64 setconf CONFIG_RTE_LIBRTE_DPAA_BUS n setconf CONFIG_RTE_LIBRTE_DPAA_MEMPOOL n setconf CONFIG_RTE_LIBRTE_DPAA_PMD n %endif %if %{with shared} setconf CONFIG_RTE_BUILD_SHARED_LIB y %endif make V=1 O=%{target} %{?_smp_mflags} -Wimplicit-fallthrough=0 make V=1 O=%{target} %{?_smp_mflags} doc-api-html doc-guides-html %{?with_pdfdoc: guides-pdf} %if %{with examples} make V=1 O=%{target}/examples T=%{target} %{?_smp_mflags} examples %endif %install # 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}/usertools rm -rf %{buildroot}%{_sbindir}/dpdk_nic_bind rm -rf %{buildroot}%{_bindir}/dpdk-test-crypto-perf rm -rf %{buildroot}%{_bindir}/testbbdev %else mv %{buildroot}%{_bindir}/testbbdev %{buildroot}%{_bindir}/dpdk-test-bbdev %endif rm -f %{buildroot}%{sdkdir}/usertools/dpdk-setup.sh rm -f %{buildroot}%{sdkdir}/usertools/meson.build %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 # Replace /usr/bin/env python with the correct python binary find %{buildroot}%{sdkdir}/ -name "*.py" -exec \ sed -i -e 's|#!\s*/usr/bin/env python|#!%{_py_exec}|' {} + # 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 (! -d \$?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_tmpl}-:-%{machine}-:g' %{buildroot}/%{_sysconfdir}/profile.d/dpdk-sdk* %files # BSD %{_bindir}/testpmd %{_bindir}/dpdk-procinfo %if %{with shared} %{_libdir}/*.so.* %{pmddir}/ %endif %files doc #BSD %{docdir} %files devel #BSD %{incdir}/ %{sdkdir} %if %{with tools} %exclude %{sdkdir}/usertools/ %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 %{sdkdir}/usertools/ %{_sbindir}/dpdk-devbind %{_bindir}/dpdk-pdump %{_bindir}/dpdk-pmdinfo %{_bindir}/dpdk-test-bbdev %{_bindir}/dpdk-test-compress-perf %{_bindir}/dpdk-test-crypto-perf %{_bindir}/testsad %endif %if %{with examples} %files examples %{_bindir}/dpdk_example_* %doc %{sdkdir}/examples %endif %changelog * Thu Jan 23 2020 Timothy Redaelli - 19.11-0 - Update to 19.11 * Fri Oct 25 2019 Timothy Redaelli - 18.11.2-0 - Rebase to Fedora 2:18.11.2-4 - Don't use wdiff since it's not available on RHEL8 * Thu Nov 29 2018 Timothy Redaelli - 18.11-0 - Update to 18.11 * Wed Nov 28 2018 Neil Horman - 2:17.11.2-4 - Add wdiff to BuildRequires * Thu Sep 27 2018 Neil Horman - 2:17.11.2-3 - quiet annocheck complaints (bz1548404) * Thu Jul 12 2018 Fedora Release Engineering - 2:17.11.2-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild * Tue Apr 24 2018 Neil Horman 2:17.11.2-1 - Update to latest 17.11 LTS (fixes bz 1571361) * Tue Apr 10 2018 Timothy Redaelli - 2:17.11.1-3 - Fix Requires dpdk by adding epoch * Fri Apr 06 2018 Neil Horman 2:17.11.1-2 - Fix aarch64 build issue * Fri Apr 06 2018 Neil Horman 2:17.11.1-1 - Update to latest LTS release for OVS * Fri Apr 06 2018 Timothy Redaelli - 18.02 -6 - Replace "/usr/bin/env python" with "/usr/bin/python3" (bz 1564215) * Thu Apr 05 2018 Neil Horman - 18.02-5 - Fix compiler flag error (bz 1548404) - Update spec file to switch to python3 * Wed Mar 14 2018 Neil Horman < -18.02-4 - Fixing date in changelog below * Thu Mar 08 2018 Neil Horman - 18.02-3 - Fixing missing c/ldflags for pmdinfogen (bz 1548404) * Tue Feb 27 2018 Neil Horman - 18.02-2 - Fix rpm ldflags usage (bz 1548404) * Mon Feb 19 2018 Neil Horman - 18.02-1 - update to latest upstream * Wed Feb 07 2018 Fedora Release Engineering - 17.11-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild * Wed Jan 03 2018 Iryna Shcherbina - 17.11-3 - Update Python 2 dependency declarations to new packaging standards (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) * Thu Nov 30 2017 Neil Horman - 17.11-2 - Fix dangling symlinks (bz 1519322) - Fix devtools->usertools conversion (bz 1519332) - Fix python-pyelftools requirement (bz 1519336) * Thu Nov 16 2017 Neil Horman - 17.11-1 - Update to latest upstream * Wed Aug 09 2017 Neil Horman - 17.08-1 - Update to latest upstream * Mon Jul 31 2017 Neil Horman - 17.05-2 - backport rte_eth_tx_done_cleanup map fix (#1476341) * Wed Jul 26 2017 Fedora Release Engineering - 17.05-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild * Mon May 15 2017 Neil Horman - 17.05-1 - Update to latest upstream * Fri Feb 24 2017 Neil Horman - 17-02-2 - Add python dependency (#1426561) * Wed Feb 15 2017 Fedora Release Monitoring - 17.02-1 - Update to 17.02 (#1422285) * Mon Feb 06 2017 Yaakov Selkowitz - 16.11-2 - Enable aarch64, ppc64le (#1419731) * Tue Nov 15 2016 Neil Horman - 16.11-1 - Update to 16.11 * Tue Aug 02 2016 Neil Horman - 16.07-1 * Update to 16.07 * Thu Apr 14 2016 Panu Matilainen - 16.04-1 - Update to 16.04 - Drop all patches, they're not needed anymore - Drop linker script generation, its upstream now - Enable vhost numa support again * Wed Mar 16 2016 Panu Matilainen - 2.2.0-7 - vhost numa code causes crashes, disable until upstream fixes - Generalize target/machine/etc macros to enable i686 builds * Tue Mar 01 2016 Panu Matilainen - 2.2.0-6 - Drop no longer needed bnx2x patch, the gcc false positive has been fixed - Drop no longer needed -Wno-error=array-bounds from CFLAGS - Eliminate the need for the enic patch by eliminating second -Wall from CFLAGS - Disable unmaintained librte_power as per upstream recommendation * Mon Feb 15 2016 Neil Horman 2.2.0-5 - Fix ftbfs isssue (1307431) * Wed Feb 03 2016 Fedora Release Engineering - 2.2.0-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild * Tue Jan 26 2016 Panu Matilainen - 2.2.0-3 - Use a different quoting method to avoid messing up vim syntax highlighting - A string is expected as CONFIG_RTE_MACHINE value, quote it too * Mon Jan 25 2016 Panu Matilainen - 2.2.0-2 - Enable librte_vhost NUMA-awareness * Wed Jan 20 2016 Panu Matilainen - 2.2.0-1 - Update to 2.2.0 - Establish a driver directory for automatic driver loading - Move the unversioned pmd symlinks from libdir -devel - Make option matching stricter in spec setconf - Spec cleanups - Adopt upstream standard installation layout * Thu Oct 22 2015 Aaron Conole - 2.1.0-3 - Include examples binaries - Enable the Broadcom NetXtreme II 10Gb PMD - Fix up linkages for the dpdk-devel package * Wed Sep 30 2015 Aaron Conole - 2.1.0-2 - Re-enable the IGB, IXGBE, I40E PMDs - Bring the Fedora and RHEL packages more in-line. * Wed Aug 26 2015 Neil Horman - 2.1.0-1 - Update to latest version * Wed Jun 17 2015 Fedora Release Engineering - 2.0.0-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild * Mon Apr 06 2015 Neil Horman - 2.0.0-1 - Update to dpdk 2.0 - converted --with shared option to --without shared option * Wed Jan 28 2015 Panu Matilainen - 1.7.0-8 - Always build with -fPIC * Wed Jan 28 2015 Panu Matilainen - 1.7.0-7 - Policy compliance: move static libraries to -devel, provide dpdk-static - Add a spec option to build as shared libraries * Wed Jan 28 2015 Panu Matilainen - 1.7.0-6 - Avoid variable expansion in the spec here-documents during build - Drop now unnecessary debug flags patch - Add a spec option to build a combined library * Tue Jan 27 2015 Panu Matilainen - 1.7.0-5 - Avoid unnecessary use of %%global, lazy expansion is normally better - Drop unused destdir macro while at it - Arrange for RTE_SDK environment + directory layout expected by DPDK apps - Drop config from main package, it shouldn't be needed at runtime * Tue Jan 27 2015 Panu Matilainen - 1.7.0-4 - Copy the headers instead of broken symlinks into -devel package - Force sane mode on the headers - Avoid unnecessary %%exclude by not copying unpackaged content to buildroot - Clean up summaries and descriptions - Drop unnecessary kernel-devel BR, we are not building kernel modules * Sat Aug 16 2014 Fedora Release Engineering - 1.7.0-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild * Thu Jul 17 2014 - John W. Linville - 1.7.0-2 - Use EXTRA_CFLAGS to include standard Fedora compiler flags in build - Set CONFIG_RTE_MACHINE=default to build for least-common-denominator machines - Turn-off build of librte_acl, since it does not build on default machines - Turn-off build of physical device PMDs that require kernel support - Clean-up the install rules to match current packaging - Correct changelog versions 1.0.7 -> 1.7.0 - Remove ix86 from ExclusiveArch -- it does not build with above changes * Thu Jul 10 2014 - Neil Horman - 1.7.0-1.0 - Update source to official 1.7.0 release * Thu Jul 03 2014 - Neil Horman - Fixing up release numbering * Tue Jul 01 2014 - Neil Horman - 1.7.0-0.9.1.20140603git5ebbb1728 - Fixed some build errors (empty debuginfo, bad 32 bit build) * Wed Jun 11 2014 - Neil Horman - 1.7.0-0.9.20140603git5ebbb1728 - Fix another build dependency * Mon Jun 09 2014 - Neil Horman - 1.7.0-0.8.20140603git5ebbb1728 - Fixed doc arch versioning issue * Mon Jun 09 2014 - Neil Horman - 1.7.0-0.7.20140603git5ebbb1728 - Added verbose output to build * Tue May 13 2014 - Neil Horman - 1.7.0-0.6.20140603git5ebbb1728 - Initial Build