Build the upstream Open vSwitch deb package with AF_XDP datapath
enabled when required dependencies are available.

Signed-off-by: Frode Nordahl <[email protected]>
---
 Documentation/intro/install/debian.rst | 13 ++++++++
 debian/automake.mk                     | 45 ++++++++++++++++++--------
 debian/control.in                      |  2 ++
 debian/rules                           |  8 +++--
 4 files changed, 52 insertions(+), 16 deletions(-)

diff --git a/Documentation/intro/install/debian.rst 
b/Documentation/intro/install/debian.rst
index 6d2687830..428a45307 100644
--- a/Documentation/intro/install/debian.rst
+++ b/Documentation/intro/install/debian.rst
@@ -63,6 +63,14 @@ You do not need to be the superuser to build the Debian 
packages.
 
 4. Prepare the package source.
 
+   In order to support building the package across a diverse set of
+   Debian/Ubuntu versions, parts of the package source needs to be generated
+   before a package can be built.
+
+   This process is influenced by the OVS build
+   system, guided by the available dependencies on the system and arguments
+   to the configure script.
+
    If you want to build the package with DPDK support execute the following
    command::
 
@@ -72,6 +80,11 @@ You do not need to be the superuser to build the Debian 
packages.
 
        $ ./boot.sh && ./configure && make debian
 
+   If you want to build the package without AF_XDP support execute the
+   following command::
+
+       $ ./boot.sh && ./configure --disable-afxdp && make debian
+
 Check your work by running ``dpkg-checkbuilddeps`` in the top level of your OVS
 directory. If you've installed all the dependencies properly,
 ``dpkg-checkbuilddeps`` will exit without printing anything. If you forgot to
diff --git a/debian/automake.mk b/debian/automake.mk
index 7b2afafae..414b092a1 100644
--- a/debian/automake.mk
+++ b/debian/automake.mk
@@ -94,18 +94,36 @@ debian/copyright: AUTHORS.rst debian/copyright.in
 CLEANFILES += debian/copyright
 
 
+DEB_BUILD_OPTIONS = nocheck parallel=`nproc`
+
 if DPDK_NETDEV
-update_deb_control = \
-       $(AM_V_GEN) sed -e 's/^\# DPDK_NETDEV //' \
-               < $(srcdir)/debian/control.in > debian/control
+update_deb_control_dpdk = \
+       $(AM_V_GEN) sed -i 's/^\# DPDK_NETDEV //' \
+               $(srcdir)/debian/control
+else
+update_deb_control_dpdk = \
+       $(AM_V_GEN) sed -i '/^\# DPDK_NETDEV /d' \
+               $(srcdir)/debian/control
+DEB_BUILD_OPTIONS += nodpdk
+endif
+
+if HAVE_AF_XDP
+update_deb_control_afxdp = \
+       $(AM_V_GEN) sed -i 's/^\# HAVE_AF_XDP //' \
+               $(srcdir)/debian/control
 else
-update_deb_control = \
-       $(AM_V_GEN) grep -v '^\# DPDK_NETDEV' \
-               < $(srcdir)/debian/control.in > debian/control
+update_deb_control_afxdp = \
+       $(AM_V_GEN) sed -i '/^\# HAVE_AF_XDP /d' \
+               $(srcdir)/debian/control
+DEB_BUILD_OPTIONS += noafxdp
 endif
 
 debian/control: $(srcdir)/debian/control.in Makefile
-       $(update_deb_control)
+       cp $(srcdir)/debian/control.in $(srcdir)/debian/control
+       ## Order is significant here as we are modifying the file in-place and
+       ## a DPDK enabled binary may support both DPDK and AFXDP.
+       $(update_deb_control_dpdk)
+       $(update_deb_control_afxdp)
 
 CLEANFILES += debian/control
 
@@ -120,13 +138,12 @@ debian-deb: debian
                exit 1;                                                         
\
        fi
        $(MAKE) distclean
+       cp $(srcdir)/debian/control.in $(srcdir)/debian/control
        $(update_deb_copyright)
-       $(update_deb_control)
+       ## Order is significant here as we are modifying the file in-place and
+       ## a DPDK enabled binary may support both DPDK and AFXDP.
+       $(update_deb_control_dpdk)
+       $(update_deb_control_afxdp)
        $(AM_V_GEN) fakeroot debian/rules clean
-if DPDK_NETDEV
-       $(AM_V_GEN) DEB_BUILD_OPTIONS="nocheck parallel=`nproc`" \
-               fakeroot debian/rules binary
-else
-       $(AM_V_GEN) DEB_BUILD_OPTIONS="nocheck parallel=`nproc` nodpdk" \
+       $(AM_V_GEN) DEB_BUILD_OPTIONS="$(DEB_BUILD_OPTIONS)" \
                fakeroot debian/rules binary
-endif
diff --git a/debian/control.in b/debian/control.in
index 19f590d06..d2711deaa 100644
--- a/debian/control.in
+++ b/debian/control.in
@@ -19,6 +19,7 @@ Build-Depends:
  dh-sequence-sphinxdoc,
  graphviz,
  iproute2,
+# HAVE_AF_XDP  libbpf-dev,
  libcap-ng-dev,
  libdbus-1-dev [amd64 i386 ppc64el arm64],
 # DPDK_NETDEV  libdpdk-dev (>= 22.11) [amd64 i386 ppc64el arm64],
@@ -27,6 +28,7 @@ Build-Depends:
  libssl-dev,
  libtool,
  libunbound-dev,
+# HAVE_AF_XDP  libxdp-dev (>= 1.2.9~) [!alpha !arc !hppa !ia64 !m68k !sh4],
  openssl,
  pkg-config,
  procps,
diff --git a/debian/rules b/debian/rules
index 28c249d07..4e09e52b6 100755
--- a/debian/rules
+++ b/debian/rules
@@ -19,13 +19,17 @@ endif
 PYTHON3S:=$(shell py3versions -vr)
 DEB_HOST_ARCH?=$(shell dpkg-architecture -qDEB_HOST_ARCH)
 
+ifneq (,$(filter noafxdp, $(DEB_BUILD_OPTIONS)))
+AFXDP:=--disable-afxdp
+endif
+
 override_dh_auto_configure:
        test -d _debian || mkdir _debian
        cd _debian && ( \
                test -e Makefile || \
                ../configure --prefix=/usr --localstatedir=/var \
                                        --enable-ssl \
-                                       --disable-afxdp \
+                                       $(AFXDP) \
                                        --sysconfdir=/etc \
                                        $(DATAPATH_CONFIGURE_OPTS) \
                                        $(EXTRA_CONFIGURE_OPTS) \
@@ -37,7 +41,7 @@ ifeq (,$(filter nodpdk, $(DEB_BUILD_OPTIONS)))
                test -e Makefile || \
                ../configure --prefix=/usr --localstatedir=/var \
                                        --enable-ssl \
-                                       --disable-afxdp \
+                                       $(AFXDP) \
                                        --with-dpdk=shared \
                                        --sysconfdir=/etc \
                                        $(DATAPATH_CONFIGURE_OPTS) \
-- 
2.40.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to