[PATCH v2 9/9] ci: run reference binaries against current ABI
Bruce Richardson
bruce.richardson at intel.com
Fri Sep 18 17:41:53 CEST 2026
On Thu, Jul 23, 2026 at 02:55:58PM +0200, David Marchand wrote:
> 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,
>
> ---
This is a good test to run. It's something I believe our internal
validation team does at times too. Some comments inline below, nothing
major though.
Acked-by: Bruce Richardson <bruce.richardson at intel.com>
> .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"
These changes should go in the previous patch, I think - certainly you can
drop the tests=false one, since it should be a no-op.
> 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
At this point I'd suggest running "meson test --list --suite=fast-tests" to
get the list of available tests in the reference implementation.
> 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
As well as the ABI_SKIP_TESTS, you could automate the list by again running
"meson test --list --suite..." and then only running the tests in both
lists. [using "sort" and "uniq -d" perhaps?]
> + 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