@@ -40,6 +40,8 @@ Summary: Data Plane Development Kit core
Group: System Environment/Libraries
License: BSD and LGPLv2 and GPLv2
+%define with_dkms %{?_without_dkms: 0} %{?!_without_dkms: 1}
+
ExclusiveArch: i686 x86_64 aarch64
%ifarch aarch64
%global machine armv8a
@@ -72,6 +74,28 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
DPDK devel is a set of makefiles, headers and examples
for fast packet processing on x86 platforms.
+%if %{with_dkms}
+%package igb-uio
+Summary: Data Plane Development Kit, igb_uio kernel module
+Group: System/Kernel
+Requires: %{name}%{?_isa} = %{version}-%{release}
+Requires: gcc, make
+Requires(post): dkms
+Requires(preun): dkms
+%description igb-uio
+Data Plane Development Kit, igb_uio kernel module
+
+%package rte-kni
+Summary: Data Plane Development Kit, rte_kni kernel module
+Group: System/Kernel
+Requires: %{name}%{?_isa} = %{version}-%{release}
+Requires: gcc, make
+Requires(post): dkms
+Requires(preun): dkms
+%description rte-kni
+Data Plane Development Kit, rte_kni kernel module
+%endif
+
%package doc
Summary: Data Plane Development Kit API documentation
BuildArch: noarch
@@ -86,6 +110,10 @@ and guides in sphinx HTML/PDF formats.
make O=%{target} T=%{config} config
sed -ri 's,(RTE_MACHINE=).*,\1%{machine},' %{target}/.config
sed -ri 's,(RTE_APP_TEST=).*,\1n,' %{target}/.config
+%if %{with_dkms}
+sed -ri 's,(CONFIG_RTE_EAL_IGB_UIO=).*,\1n,' %{target}/.config
+sed -ri 's,(CONFIG_RTE_KNI_KMOD=).*,\1n,' %{target}/.config
+%endif
sed -ri 's,(RTE_BUILD_SHARED_LIB=).*,\1y,' %{target}/.config
sed -ri 's,(RTE_NEXT_ABI=).*,\1n,' %{target}/.config
sed -ri 's,(LIBRTE_VHOST=).*,\1y,' %{target}/.config
@@ -103,10 +131,50 @@ make install O=%{target} DESTDIR=%{buildroot} \
includedir=%{_includedir}/dpdk libdir=%{_libdir} \
datadir=%{_datadir}/dpdk docdir=%{_docdir}/dpdk
+%if %{with_dkms}
+# Kernel module sources install for dkms
+%{__mkdir_p} %{buildroot}%{_usrsrc}/dpdk-igb-uio-%{version}/
+%{__cp} -r lib/librte_eal/linuxapp/igb_uio/* %{buildroot}%{_usrsrc}/dpdk-igb-uio-%{version}/
+
+%{__mkdir_p} %{buildroot}%{_usrsrc}/dpdk-rte-kni-%{version}/
+%{__cp} -r lib/librte_eal/linuxapp/kni/* %{buildroot}%{_usrsrc}/dpdk-rte-kni-%{version}/
+
+cat > %{buildroot}%{_datadir}/dpdk/buildtools/dpdk-sdk-env.sh << EOF
+export RTE_TARGET=%{target}
+export RTE_SDK="/usr/share/dpdk/"
+export RTE_INCLUDE="/usr/include/dpdk"
+EOF
+
+# Prepare dkms.conf
+cat > %{buildroot}%{_usrsrc}/dpdk-igb-uio-%{version}/dkms.conf << EOF
+
+PACKAGE_NAME="dpdk-igb-uio"
+PACKAGE_VERSION="%{version}-%{release}"
+MAKE="source /usr/share/dpdk/buildtools/dpdk-sdk-env.sh; make MODULE_CFLAGS='-I/usr/include/dpdk -include /usr/include/dpdk/rte_config.h'"
+CLEAN="source /usr/share/dpdk/buildtools/dpdk-sdk-env.sh; make clean"
+BUILT_MODULE_NAME[0]=igb_uio
+DEST_MODULE_LOCATION[0]=/updates/dkms
+AUTOINSTALL=yes
+EOF
+
+# Prepare dkms.conf
+cat > %{buildroot}%{_usrsrc}/dpdk-rte-kni-%{version}/dkms.conf << EOF
+PACKAGE_NAME="dpdk-rte-kni"
+PACKAGE_VERSION="%{version}-%{release}"
+MAKE="source /usr/share/dpdk/buildtools/dpdk-sdk-env.sh; make MODULE_CFLAGS='-I/usr/include/dpdk -include /usr/include/dpdk/rte_config.h -I%{_usrsrc}/dpdk-rte-kni-%{version}/ethtool/ixgbe -I%{_usrsrc}/dpdk-rte-kni-%{version}/ethtool/igb'"
+CLEAN="source /usr/share/dpdk/buildtools/dpdk-sdk-env.sh; make clean"
+BUILT_MODULE_NAME[0]=rte_kni
+DEST_MODULE_LOCATION[0]=/updates/dkms
+AUTOINSTALL="YES"
+EOF
+%endif
+
%files
%dir %{_datadir}/dpdk
%{_datadir}/dpdk/usertools
+%if ! %{with_dkms}
/lib/modules/%(uname -r)/extra/*
+%endif
%{_sbindir}/*
%{_bindir}/*
%{_libdir}/*
@@ -118,6 +186,16 @@ make install O=%{target} DESTDIR=%{buildroot} \
%{_datadir}/dpdk/%{target}
%{_datadir}/dpdk/examples
+%if %{with_dkms}
+%files igb-uio
+%defattr(-,root,root)
+%{_usrsrc}/dpdk-igb-uio-%{version}/
+
+%files rte-kni
+%defattr(-,root,root)
+%{_usrsrc}/dpdk-rte-kni-%{version}/
+%endif
+
%files doc
%doc %{_docdir}/dpdk
@@ -125,6 +203,32 @@ make install O=%{target} DESTDIR=%{buildroot} \
/sbin/ldconfig
/sbin/depmod
+%if %{with_dkms}
+%post igb-uio
+# Add to DKMS registry
+isadded=`dkms status -m "dpdk-igb-uio" -v "%{version}"`
+if [ "x${isadded}" = "x" ] ; then
+ dkms add -m "dpdk-igb-uio" -v "%{version}" || :
+fi
+dkms build -m "dpdk-igb-uio" -v "%{version}" || :
+dkms install -m "dpdk-igb-uio" -v "%{version}" --force || :
+
+%post rte-kni
+# Add to DKMS registry
+isadded=`dkms status -m "dpdk-rte-kni" -v "%{version}"`
+if [ "x${isadded}" = "x" ] ; then
+ dkms add -m "dpdk-rte-kni" -v "%{version}" || :
+fi
+dkms build -m "dpdk-rte-kni" -v "%{version}" || :
+dkms install -m "dpdk-rte-kni" -v "%{version}" --force || :
+
+%preun igb-uio
+dkms remove -m "dpdk-igb-uio" -v "%{version}" --all || :
+
+%preun rte-kni
+dkms remove -m "dpdk-rte-kni" -v "%{version}" --all || :
+%endif
+
%postun
/sbin/ldconfig
/sbin/depmod
Build igb-uio and rte-kni kernel module using dkms. Signed-off-by: Anders Roxell <anders.roxell@linaro.org> --- pkg/dpdk.spec | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) -- 2.1.4