ci: combine static and shared linking build tests

Message ID 20221017140731.3467481-1-david.marchand@redhat.com (mailing list archive)
State Accepted, archived
Delegated to: David Marchand
Headers
Series ci: combine static and shared linking build tests |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/github-robot: build success github build: passed
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS

Commit Message

David Marchand Oct. 17, 2022, 2:07 p.m. UTC
  Save some cpu time and disk by testing linking against static and shared
library in single environments.

The .ci/linux-build.sh is modified so it reconfigures an existing build
directory: an empty DEF_LIB= means that static and shared builds are
to be tested.

ABI checks, documentation generation and unit tests are disabled for
static builds as they would be redundant with the check against
dynamically linked binaries, if any.

Note:
- --cross-file is an option that can be passed to meson only when
  creating a build environment,
- for some other reason, --buildtype and other non -D options are only
  accepted when setting up a build directory with meson. When
  reconfiguring, only their -D$option forms are accepted,

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 .ci/linux-build.sh          | 25 ++++++++++++++++++-------
 .github/workflows/build.yml | 28 ----------------------------
 2 files changed, 18 insertions(+), 35 deletions(-)
  

Comments

David Marchand Oct. 20, 2022, 11:44 a.m. UTC | #1
On Mon, Oct 17, 2022 at 4:08 PM David Marchand
<david.marchand@redhat.com> wrote:
>
> Save some cpu time and disk by testing linking against static and shared
> library in single environments.

Some additional info.

Before, 2h27 of cpu:
https://github.com/ovsrobot/dpdk/actions/runs/3265097067/usage

After, 2h07 of cpu:
https://github.com/ovsrobot/dpdk/actions/runs/3265960025/usage

The gain in cpu time (and global duration of the tests) is smaller
than what I saw.
Quite likely, it is dependent on what is being done on the runners.


>
> The .ci/linux-build.sh is modified so it reconfigures an existing build
> directory: an empty DEF_LIB= means that static and shared builds are
> to be tested.
>
> ABI checks, documentation generation and unit tests are disabled for
> static builds as they would be redundant with the check against
> dynamically linked binaries, if any.
>
> Note:
> - --cross-file is an option that can be passed to meson only when
>   creating a build environment,
> - for some other reason, --buildtype and other non -D options are only
>   accepted when setting up a build directory with meson. When
>   reconfiguring, only their -D$option forms are accepted,
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
  
Bruce Richardson Oct. 20, 2022, 11:51 a.m. UTC | #2
On Thu, Oct 20, 2022 at 01:44:33PM +0200, David Marchand wrote:
> On Mon, Oct 17, 2022 at 4:08 PM David Marchand
> <david.marchand@redhat.com> wrote:
> >
> > Save some cpu time and disk by testing linking against static and shared
> > library in single environments.
> 
> Some additional info.
> 
> Before, 2h27 of cpu:
> https://github.com/ovsrobot/dpdk/actions/runs/3265097067/usage
> 
> After, 2h07 of cpu:
> https://github.com/ovsrobot/dpdk/actions/runs/3265960025/usage
> 
> The gain in cpu time (and global duration of the tests) is smaller
> than what I saw.
> Quite likely, it is dependent on what is being done on the runners.
> 
Still probably a change worth making.
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
  
Aaron Conole Oct. 20, 2022, 3:34 p.m. UTC | #3
David Marchand <david.marchand@redhat.com> writes:

> Save some cpu time and disk by testing linking against static and shared
> library in single environments.
>
> The .ci/linux-build.sh is modified so it reconfigures an existing build
> directory: an empty DEF_LIB= means that static and shared builds are
> to be tested.
>
> ABI checks, documentation generation and unit tests are disabled for
> static builds as they would be redundant with the check against
> dynamically linked binaries, if any.
>
> Note:
> - --cross-file is an option that can be passed to meson only when
>   creating a build environment,
> - for some other reason, --buildtype and other non -D options are only
>   accepted when setting up a build directory with meson. When
>   reconfiguring, only their -D$option forms are accepted,
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> ---

Probably also saves overall time because we would need fewer runners.  I
think this is a good change.

Acked-by: Aaron Conole <aconole@redhat.com>
  
David Marchand Oct. 27, 2022, 11:21 a.m. UTC | #4
On Thu, Oct 20, 2022 at 5:34 PM Aaron Conole <aconole@redhat.com> wrote:
> > Save some cpu time and disk by testing linking against static and shared
> > library in single environments.
> >
> > The .ci/linux-build.sh is modified so it reconfigures an existing build
> > directory: an empty DEF_LIB= means that static and shared builds are
> > to be tested.
> >
> > ABI checks, documentation generation and unit tests are disabled for
> > static builds as they would be redundant with the check against
> > dynamically linked binaries, if any.
> >
> > Note:
> > - --cross-file is an option that can be passed to meson only when
> >   creating a build environment,
> > - for some other reason, --buildtype and other non -D options are only
> >   accepted when setting up a build directory with meson. When
> >   reconfiguring, only their -D$option forms are accepted,
> >
> > Signed-off-by: David Marchand <david.marchand@redhat.com>
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
> Acked-by: Aaron Conole <aconole@redhat.com>

Applied, thanks.
  

Patch

diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
index 14148fef4a..baec65a914 100755
--- a/.ci/linux-build.sh
+++ b/.ci/linux-build.sh
@@ -1,5 +1,11 @@ 
 #!/bin/sh -xe
 
+if [ -z "${DEF_LIB:-}" ]; then
+    DEF_LIB=static ABI_CHECKS= BUILD_DOCS= RUN_TESTS= $0
+    DEF_LIB=shared $0
+    exit
+fi
+
 # Builds are run as root in containers, no need for sudo
 [ "$(id -u)" != '0' ] || alias sudo=
 
@@ -78,10 +84,6 @@  if [ "$RISCV64" = "true" ]; then
     cross_file=config/riscv/riscv64_linux_gcc
 fi
 
-if [ -n "$cross_file" ]; then
-    OPTS="$OPTS --cross-file $cross_file"
-fi
-
 if [ "$BUILD_DOCS" = "true" ]; then
     OPTS="$OPTS -Denable_docs=true"
 fi
@@ -101,8 +103,8 @@  else
 fi
 
 OPTS="$OPTS -Dplatform=generic"
-OPTS="$OPTS --default-library=$DEF_LIB"
-OPTS="$OPTS --buildtype=debugoptimized"
+OPTS="$OPTS -Ddefault_library=$DEF_LIB"
+OPTS="$OPTS -Dbuildtype=debugoptimized"
 OPTS="$OPTS -Dcheck_includes=true"
 if [ "$MINI" = "true" ]; then
     OPTS="$OPTS -Denable_drivers=net/null"
@@ -118,7 +120,16 @@  if [ "$ASAN" = "true" ]; then
     fi
 fi
 
-meson build --werror $OPTS
+OPTS="$OPTS -Dwerror=true"
+
+if [ -d build ]; then
+    meson configure build $OPTS
+else
+    if [ -n "$cross_file" ]; then
+        OPTS="$OPTS --cross-file $cross_file"
+    fi
+    meson setup build $OPTS
+fi
 ninja -C build
 
 if [ -z "$cross_file" ]; then
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index b32758ff6f..82d83f4030 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -35,21 +35,12 @@  jobs:
         config:
           - os: ubuntu-20.04
             compiler: gcc
-            library: static
-          - os: ubuntu-20.04
-            compiler: gcc
-            library: shared
             mini: mini
           - os: ubuntu-20.04
             compiler: gcc
-            library: shared
             checks: doc+tests
           - os: ubuntu-20.04
             compiler: clang
-            library: static
-          - os: ubuntu-20.04
-            compiler: clang
-            library: shared
             checks: asan+doc+tests
           - os: ubuntu-20.04
             compiler: gcc
@@ -61,23 +52,12 @@  jobs:
             cross: mingw
           - os: ubuntu-20.04
             compiler: gcc
-            library: static
-            cross: aarch64
-          - os: ubuntu-20.04
-            compiler: gcc
-            library: shared
             cross: aarch64
           - os: ubuntu-20.04
             compiler: gcc
-            library: static
             cross: ppc64le
           - os: ubuntu-20.04
             compiler: gcc
-            library: shared
-            cross: ppc64le
-          - os: ubuntu-20.04
-            compiler: gcc
-            library: shared
             cross: riscv64
 
     steps:
@@ -218,16 +198,8 @@  jobs:
         config:
           - image: fedora:35
             compiler: gcc
-            library: static
-          - image: fedora:35
-            compiler: gcc
-            library: shared
-          - image: fedora:35
-            compiler: clang
-            library: static
           - image: fedora:35
             compiler: clang
-            library: shared
 
     steps:
     - name: Checkout sources