[PATCH v2 9/9] ci: run reference binaries against current ABI
David Marchand
david.marchand at redhat.com
Thu Jul 23 14:55:58 CEST 2026
Let's check if a testpmd and unit tests from a reference build can run
with the current release libraries/drivers.
This gives another level of ABI checking, like catching regressions on
experimental or internal ABI symbols that get promoted to stable.
We may need to skip unit tests that were added since the reference.
So add a ABI_SKIP_TESTS environment variable in preparation.
Signed-off-by: David Marchand <david.marchand at redhat.com>
---
Changes since v1:
- dropped hack, testing this patch can't be done in the CI now,
- emptied the excluded tests list,
- added test-null.sh,
---
.ci/linux-build.sh | 33 ++++++++++++++++++++++++++++++---
.github/workflows/build.yml | 1 +
2 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
index a5e602ed83..032f3726e8 100755
--- a/.ci/linux-build.sh
+++ b/.ci/linux-build.sh
@@ -206,23 +206,33 @@ if [ "$ABI_CHECKS" = "true" ]; then
# don't try to link apps.
REF_OPTS="$REF_OPTS -Dcheck_includes=false"
REF_OPTS="$REF_OPTS -Ddeveloper_mode=disabled"
- REF_OPTS="$REF_OPTS -Ddisable_apps=*"
+ REF_OPTS="$REF_OPTS -Denable_apps=test,test-pmd"
REF_OPTS="$REF_OPTS -Denable_docs=false"
REF_OPTS="$REF_OPTS -Dexamples="
- REF_OPTS="$REF_OPTS -Dtests=false"
refsrcdir=$(readlink -f $(pwd)/../dpdk-$REF_GIT_TAG)
git clone --single-branch -b "$REF_GIT_TAG" $REF_GIT_REPO $refsrcdir
meson setup $REF_OPTS $refsrcdir $refsrcdir/build
ninja -C $refsrcdir/build
DESTDIR=$(pwd)/reference meson install -C $refsrcdir/build
find reference/usr/local -name '*.a' -delete
- rm -rf reference/usr/local/bin
+ rm -rf reference/usr/local/bin/*
+ cp $refsrcdir/build/app/dpdk-test reference/usr/local/bin/dpdk-test
+ cp $refsrcdir/build/app/dpdk-testpmd reference/usr/local/bin/dpdk-testpmd
rm -rf reference/usr/local/share
echo $REF_GIT_TAG > reference/VERSION
fi
DESTDIR=$(pwd)/install meson install -C build
devtools/check-abi.sh reference install ${ABI_CHECKS_WARN_ONLY:-}
+
+ failed=
+ configure_coredump
+ mv -f build/app/dpdk-testpmd build/app/dpdk-testpmd.ori
+ cp reference/usr/local/bin/dpdk-testpmd build/app/dpdk-testpmd
+ devtools/test-null.sh || failed="true"
+ mv -f build/app/dpdk-testpmd.ori build/app/dpdk-testpmd
+ catch_coredump
+ [ "$failed" != "true" ]
fi
if [ "$RUN_TESTS" = "true" ]; then
@@ -233,6 +243,23 @@ if [ "$RUN_TESTS" = "true" ]; then
catch_ubsan DPDK:fast-tests build/meson-logs/testlog.txt
check_traces
[ "$failed" != "true" ]
+
+ if [ "$ABI_CHECKS" = "true" ]; then
+ failed=
+ configure_coredump
+ mv -f build/app/dpdk-test build/app/dpdk-test.ori
+ cp reference/usr/local/bin/dpdk-test build/app/dpdk-test
+ for t in ${ABI_SKIP_TESTS}; do
+ DPDK_TEST_SKIP=${DPDK_TEST_SKIP+$DPDK_TEST_SKIP,}$t
+ done
+ sudo env DPDK_TEST_SKIP="$DPDK_TEST_SKIP" \
+ meson test -C build --suite fast-tests -t 3 --no-stdsplit --print-errorlogs || failed="true"
+ catch_coredump
+ catch_ubsan DPDK:fast-tests build/meson-logs/testlog.txt
+ check_traces
+ mv -f build/app/dpdk-test.ori build/app/dpdk-test
+ [ "$failed" != "true" ]
+ fi
fi
# Test examples compilation with an installed dpdk
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index c63a9a3982..5ee55f4d27 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -39,6 +39,7 @@ jobs:
env:
AARCH64: ${{ matrix.config.cross == 'aarch64' }}
ABI_CHECKS: ${{ contains(matrix.config.checks, 'abi') }}
+ ABI_SKIP_TESTS: none
ASAN: ${{ contains(matrix.config.checks, 'asan') }}
BUILD_32BIT: ${{ matrix.config.cross == 'i386' }}
BUILD_DEBUG: ${{ contains(matrix.config.checks, 'debug') }}
--
2.54.0
More information about the dev
mailing list