DPDK patches and discussions
 help / color / mirror / Atom feed
From: Anders Roxell <anders.roxell@linaro.org>
To: thomas.monjalon@6wind.com
Cc: dev@dpdk.org, ricardo.salveti@linaro.org,
	Anders Roxell <anders.roxell@linaro.org>
Subject: [dpdk-dev] [PATCHv2] pkg/dpdk.spec: add dkms to build kernel module
Date: Tue, 28 Mar 2017 22:46:00 +0200	[thread overview]
Message-ID: <1490733960-29458-1-git-send-email-anders.roxell@linaro.org> (raw)
In-Reply-To: <20170118214505.30663-1-anders.roxell@linaro.org>

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(+)

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

  parent reply	other threads:[~2017-03-28 21:01 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-18 21:45 [dpdk-dev] [PATCH] pkg: " Anders Roxell
2017-02-07 17:04 ` Thomas Monjalon
2017-03-28 20:36   ` Anders Roxell
2017-03-28 20:46 ` Anders Roxell [this message]
2018-12-21 15:18   ` [dpdk-dev] [PATCHv2] pkg/dpdk.spec: " Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1490733960-29458-1-git-send-email-anders.roxell@linaro.org \
    --to=anders.roxell@linaro.org \
    --cc=dev@dpdk.org \
    --cc=ricardo.salveti@linaro.org \
    --cc=thomas.monjalon@6wind.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).