Build igb-uio and rte-kni kernel module using dkms. Signed-off-by: Anders Roxell <anders.rox...@linaro.org> --- pkg/dpdk.spec | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+)
diff --git a/pkg/dpdk.spec b/pkg/dpdk.spec index 7bc5780..550fb76 100644 --- a/pkg/dpdk.spec +++ b/pkg/dpdk.spec @@ -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 -- 2.1.4