From: Ilya Maximets <[email protected]>

Signed-off-by: Ilya Maximets <[email protected]>
Co-authored-by: Frode Nordahl <[email protected]>
Signed-off-by: Frode Nordahl <[email protected]>
---
 .ci/linux-build.sh                     |  6 ++-
 .github/workflows/build-and-test.yml   | 12 +++++-
 .gitignore                             |  1 +
 Documentation/intro/install/debian.rst | 27 ++++++------
 debian/.gitignore                      | 21 +++++++++
 debian/automake.mk                     | 22 +++++++++-
 debian/clean                           |  4 +-
 debian/{control => control.in}         | 60 +++++++++++++-------------
 debian/rules                           |  6 +++
 9 files changed, 110 insertions(+), 49 deletions(-)
 create mode 100644 debian/.gitignore
 rename debian/{control => control.in} (85%)

diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
index a8c437aaf..8dcfbdcea 100755
--- a/.ci/linux-build.sh
+++ b/.ci/linux-build.sh
@@ -204,9 +204,13 @@ function build_ovs()
 }
 
 if [ "$DEB_PACKAGE" ]; then
+    if [ -n "$DPDK" ]; then
+        DPDK=no
+    fi
+    ./boot.sh && ./configure --with-dpdk=$DPDK && make debian
     mk-build-deps --install --root-cmd sudo --remove debian/control
     dpkg-checkbuilddeps
-    DEB_BUILD_OPTIONS='parallel=4 nocheck' fakeroot debian/rules binary
+    make debian-deb
     packages=$(ls $(pwd)/../*.deb)
     deps=""
     for pkg in $packages; do
diff --git a/.github/workflows/build-and-test.yml 
b/.github/workflows/build-and-test.yml
index 90fe17377..419ef0def 100644
--- a/.github/workflows/build-and-test.yml
+++ b/.github/workflows/build-and-test.yml
@@ -216,11 +216,19 @@ jobs:
       deb_dependencies: |
         linux-headers-$(uname -r) build-essential fakeroot devscripts equivs
       DEB_PACKAGE: yes
+      DPDK:        ${{ matrix.dpdk }}
 
-    name: linux deb
+    name: linux deb ${{ matrix.dpdk }} dpdk
     runs-on: ubuntu-22.04
     timeout-minutes: 30
 
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+          - dpdk: no
+          - dpdk: shared
+
     steps:
     - name: checkout
       uses: actions/checkout@v2
@@ -244,5 +252,5 @@ jobs:
     - name: upload deb packages
       uses: actions/upload-artifact@v2
       with:
-        name: deb-packages
+        name: deb-packages-${{ matrix.dpdk }}-dpdk
         path: '/home/runner/work/ovs/*.deb'
diff --git a/.gitignore b/.gitignore
index f1cdcf124..b0098f46a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -68,6 +68,7 @@ TAGS
 cscope.*
 tags
 _debian
+_dpdk
 odp-netlink.h
 odp-netlink-macros.h
 OvsDpInterface.h
diff --git a/Documentation/intro/install/debian.rst 
b/Documentation/intro/install/debian.rst
index 4024dc07a..888b17723 100644
--- a/Documentation/intro/install/debian.rst
+++ b/Documentation/intro/install/debian.rst
@@ -58,27 +58,28 @@ You do not need to be the superuser to build the Debian 
packages.
    top level directory.
 
 3. Install the build dependencies listed under "Build-Depends:" near the top of
-   ``debian/control``. You can install these any way you like, e.g.  with
+   ``debian/control.in``. You can install these any way you like, e.g.  with
    ``apt-get install``.
 
-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
-install some dependencies, it will tell you which ones.
+4. Prepare the package source.
+
+   If you want to build the package with DPDK support execute the following
+   command::
 
-4. Build the package::
+       $ ./boot.sh && ./configure --with-dpdk=shared && make debian
 
-       $ fakeroot debian/rules binary
+   If not::
 
-   This will do a serial build that runs the unit tests. This will take
-   approximately 8 to 10 minutes. If you prefer, you can run a faster parallel
-   build::
+       $ ./boot.sh && ./configure && make debian
 
-       $ DEB_BUILD_OPTIONS='parallel=8' fakeroot debian/rules binary
+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
+install some dependencies, it will tell you which ones.
 
-   If you are in a big hurry, you can even skip the unit tests::
+5. Build the package::
 
-       $ DEB_BUILD_OPTIONS='parallel=8 nocheck' fakeroot debian/rules binary
+       $ make debian-deb
 
 .. note::
 
diff --git a/debian/.gitignore b/debian/.gitignore
new file mode 100644
index 000000000..0523941c6
--- /dev/null
+++ b/debian/.gitignore
@@ -0,0 +1,21 @@
+*.debhelper
+*.debhelper.log
+*.substvars
+/autoreconf.after
+/autoreconf.before
+/control
+/copyright
+/debhelper-build-stamp
+/files
+/openvswitch-common
+/openvswitch-doc
+/openvswitch-ipsec
+/openvswitch-pki
+/openvswitch-source
+/openvswitch-switch
+/openvswitch-switch-dpdk
+/openvswitch-test
+/openvswitch-testcontroller
+/openvswitch-vtep
+/python3-openvswitch
+/tmp
diff --git a/debian/automake.mk b/debian/automake.mk
index a3c2d7289..2f94c2999 100644
--- a/debian/automake.mk
+++ b/debian/automake.mk
@@ -3,6 +3,7 @@ EXTRA_DIST += \
        debian/changelog \
        debian/clean \
        debian/control \
+       debian/control.in \
        debian/copyright \
        debian/copyright.in \
        debian/dirs \
@@ -88,4 +89,23 @@ $(srcdir)/debian/copyright: AUTHORS.rst debian/copyright.in
          sed -e '1,/%AUTHORS%/d' $(srcdir)/debian/copyright.in;           \
        } > $@
 
-DISTCLEANFILES += debian/copyright
+$(srcdir)/debian/control: debian/control.in config.h
+if DPDK_NETDEV
+       sed -e 's/^# DPDK_NETDEV //' \
+               < $(srcdir)/debian/control.in > $(srcdir)/debian/control
+else
+       grep -v "^# DPDK_NETDEV" \
+               < $(srcdir)/debian/control.in > $(srcdir)/debian/control
+endif
+
+debian: $(srcdir)/debian/copyright $(srcdir)/debian/control
+.PHONY: debian
+
+
+debian-deb: debian
+       make distclean
+if DPDK_NETDEV
+       DEB_BUILD_OPTIONS="nocheck parallel=`nproc`" fakeroot debian/rules 
binary
+else
+       DEB_BUILD_OPTIONS="nocheck parallel=`nproc` nodpdk" fakeroot 
debian/rules binary
+endif
diff --git a/debian/clean b/debian/clean
index 3b2e48901..43da304ce 100644
--- a/debian/clean
+++ b/debian/clean
@@ -1,2 +1,2 @@
-_debian
-_dpdk
+_debian/
+_dpdk/
diff --git a/debian/control b/debian/control.in
similarity index 85%
rename from debian/control
rename to debian/control.in
index 0ff894461..fa7ee7932 100644
--- a/debian/control
+++ b/debian/control.in
@@ -12,7 +12,7 @@ Build-Depends:
  autoconf (>= 2.64),
  automake (>= 1.10),
  bzip2,
- debhelper-compat (= 13),
+ debhelper-compat (= 10),
  dh-exec,
  dh-python,
  dh-sequence-python3,
@@ -21,7 +21,7 @@ Build-Depends:
  iproute2,
  libcap-ng-dev,
  libdbus-1-dev [amd64 i386 ppc64el arm64],
- libdpdk-dev (>= 21.11) [amd64 i386 ppc64el arm64],
+# DPDK_NETDEV  libdpdk-dev (>= 21.11) [amd64 i386 ppc64el arm64],
  libnuma-dev [amd64 i386 ppc64el arm64],
  libpcap-dev [amd64 i386 ppc64el arm64],
  libssl-dev,
@@ -176,34 +176,34 @@ Description: Open vSwitch switch implementations
  openvswitch-switch provides the userspace components and utilities for
  the Open vSwitch kernel-based switch.
 
-Package: openvswitch-switch-dpdk
-Architecture: amd64 arm64 i386 ppc64el
-Pre-Depends: ${misc:Pre-Depends},
-Depends:
- dpdk,
- openvswitch-switch (= ${binary:Version}),
- ${misc:Depends},
- ${python3:Depends},
- ${shlibs:Depends},
-Enhances:
- openvswitch-switch,
-Description: DPDK enabled Open vSwitch switch implementation
- Open vSwitch is a production quality, multilayer, software-based,
- Ethernet virtual switch. It is designed to enable massive network
- automation through programmatic extension, while still supporting
- standard management interfaces and protocols (e.g. NetFlow, IPFIX,
- sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag). In addition, it is designed
- to support distribution across multiple physical servers similar to
- VMware's vNetwork distributed vswitch or Cisco's Nexus 1000V.
- .
- openvswitch-switch provides the userspace components and utilities for
- the Open vSwitch kernel-based switch.
- .
- DPDK is a set of libraries for fast packet processing. Applications run
- in user-space and communicate directly with dedicated network interfaces.
- .
- This package provides a DPDK enabled implementation of the ovs-vswitchd
- binary.
+# DPDK_NETDEV Package: openvswitch-switch-dpdk
+# DPDK_NETDEV Architecture: amd64 arm64 i386 ppc64el
+# DPDK_NETDEV Pre-Depends: ${misc:Pre-Depends},
+# DPDK_NETDEV Depends:
+# DPDK_NETDEV  dpdk,
+# DPDK_NETDEV  openvswitch-switch (= ${binary:Version}),
+# DPDK_NETDEV  ${misc:Depends},
+# DPDK_NETDEV  ${python3:Depends},
+# DPDK_NETDEV  ${shlibs:Depends},
+# DPDK_NETDEV Enhances:
+# DPDK_NETDEV  openvswitch-switch,
+# DPDK_NETDEV Description: DPDK enabled Open vSwitch switch implementation
+# DPDK_NETDEV  Open vSwitch is a production quality, multilayer, 
software-based,
+# DPDK_NETDEV  Ethernet virtual switch. It is designed to enable massive 
network
+# DPDK_NETDEV  automation through programmatic extension, while still 
supporting
+# DPDK_NETDEV  standard management interfaces and protocols (e.g. NetFlow, 
IPFIX,
+# DPDK_NETDEV  sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag). In addition, it is 
designed
+# DPDK_NETDEV  to support distribution across multiple physical servers 
similar to
+# DPDK_NETDEV  VMware's vNetwork distributed vswitch or Cisco's Nexus 1000V.
+# DPDK_NETDEV  .
+# DPDK_NETDEV  openvswitch-switch provides the userspace components and 
utilities for
+# DPDK_NETDEV  the Open vSwitch kernel-based switch.
+# DPDK_NETDEV  .
+# DPDK_NETDEV  DPDK is a set of libraries for fast packet processing. 
Applications run
+# DPDK_NETDEV  in user-space and communicate directly with dedicated network 
interfaces.
+# DPDK_NETDEV  .
+# DPDK_NETDEV  This package provides a DPDK enabled implementation of the 
ovs-vswitchd
+# DPDK_NETDEV  binary.
 
 Package: openvswitch-test
 Architecture: all
diff --git a/debian/rules b/debian/rules
index 9a2f8ac1c..f3202ac30 100755
--- a/debian/rules
+++ b/debian/rules
@@ -28,6 +28,7 @@ override_dh_auto_configure:
                                         $(EXTRA_CONFIGURE_OPTS) \
                                         )
 ifneq (,$(filter i386 amd64 ppc64el arm64, $(DEB_HOST_ARCH)))
+ifeq (,$(filter nodpdk, $(DEB_BUILD_OPTIONS)))
        test -d _dpdk || mkdir _dpdk
        cd _dpdk && ( \
                test -e Makefile || \
@@ -37,6 +38,7 @@ ifneq (,$(filter i386 amd64 ppc64el arm64, $(DEB_HOST_ARCH)))
                                         $(EXTRA_CONFIGURE_OPTS) \
                                         )
 endif
+endif
 
 
 # NOTE(jamespage): by default, just run all tests
@@ -61,12 +63,14 @@ ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
 # Skip DPDK testing on arm64 as builders don't have crc32 support
 # which is used in aarch64 based crc optimization in ovs >= 2.12.0~
 ifneq (,$(filter i386 amd64 ppc64el, $(DEB_HOST_ARCH)))
+ifeq (,$(filter nodpdk, $(DEB_BUILD_OPTIONS)))
        if $(MAKE) -C _dpdk check TESTSUITEFLAGS='$(PARALLEL) 
$(TEST_LIST_DPDK)' || \
                                $(MAKE) -C _dpdk check 
TESTSUITEFLAGS='--recheck'; then :; \
        else \
                cat _dpdk/tests/testsuite.log; \
                exit 1; \
        fi
+endif # nodpdk
 endif # i386/amd64/ppc64el
 endif # nocheck
 
@@ -74,8 +78,10 @@ override_dh_auto_build:
        dh_auto_build --sourcedirectory=_debian -- dist distdir=openvswitch
        dh_auto_build --sourcedirectory=_debian
 ifneq (,$(filter i386 amd64 ppc64el arm64, $(DEB_HOST_ARCH)))
+ifeq (,$(filter nodpdk, $(DEB_BUILD_OPTIONS)))
        dh_auto_build --sourcedirectory=_dpdk
 endif
+endif
 
 execute_before_dh_auto_clean:
        find . -name "*.pyc" -delete
-- 
2.36.1

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

Reply via email to