From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9F1F5A04F1; Mon, 6 Jan 2020 14:17:54 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id DB7811D65F; Mon, 6 Jan 2020 14:17:53 +0100 (CET) Received: from us-smtp-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) by dpdk.org (Postfix) with ESMTP id EF0561D65D for ; Mon, 6 Jan 2020 14:17:52 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1578316672; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=MHnXfmsiiGJw9lEVs1Xr/6a/hZ83E83eJJwtzPLd84k=; b=d+Z0gapRRaaAyhUtPW9eE0nWYrupJxo96/OpMjaLXKeQ/KPUHXHKJJ2IrjsOZOmqXIyrfg zJ4Xgf0kB+xoqrOEhnRzloXzwYhDJ4+VYL94om4pwQonoOmF25w90yqTU3EVieh9Dm8+xI rKOB3LBSY+dSGoZhtcFoclMeEoIO3Yw= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-17-RQymMwYFN2uJGoD_C4nYug-1; Mon, 06 Jan 2020 08:17:49 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id CCEDF1005502; Mon, 6 Jan 2020 13:17:47 +0000 (UTC) Received: from dhcp-25.97.bos.redhat.com (unknown [10.18.25.108]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C311360F82; Mon, 6 Jan 2020 13:17:43 +0000 (UTC) From: Aaron Conole To: Thomas Monjalon Cc: "Kinsella\, Ray" , "Richardson\, Bruce" , David Marchand , "dev\@dpdk.org" , "Laatz\, Kevin" , "nhorman\@tuxdriver.com" , Michael Santana , "Mcnamara\, John" , "Kovacevic\, Marko" References: <20191220152058.10739-1-david.marchand@redhat.com> <59AF69C657FD0841A61C55336867B5B07EEAB0AE@IRSMSX103.ger.corp.intel.com> <3489488.buKiBKRxXp@xps> Date: Mon, 06 Jan 2020 08:17:42 -0500 In-Reply-To: <3489488.buKiBKRxXp@xps> (Thomas Monjalon's message of "Fri, 20 Dec 2019 22:00:51 +0100") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-MC-Unique: RQymMwYFN2uJGoD_C4nYug-1 X-Mimecast-Spam-Score: 0 Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Subject: Re: [dpdk-dev] [PATCH] add ABI checks X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Thomas Monjalon writes: > 20/12/2019 17:20, Kinsella, Ray: >> > -----Original Message----- >> > From: Richardson, Bruce >> > Sent: Friday 20 December 2019 15:32 >> > To: David Marchand ; dev@dpdk.org >> > Cc: thomas@monjalon.net; Laatz, Kevin ; >> > aconole@redhat.com; nhorman@tuxdriver.com; Michael Santana >> > ; Mcnamara, John ; >> > Kovacevic, Marko ; Kinsella, Ray >> > >> > Subject: RE: [PATCH] add ABI checks >> >=20 >> >=20 >> >=20 >> > > -----Original Message----- >> > > From: David Marchand >> > > Sent: Friday, December 20, 2019 3:21 PM >> > > To: dev@dpdk.org >> > > Cc: thomas@monjalon.net; Richardson, Bruce >> > > ; Laatz, Kevin ; >> > > aconole@redhat.com; nhorman@tuxdriver.com; Michael Santana >> > > ; Mcnamara, John >> > ; >> > > Kovacevic, Marko >> > > Subject: [PATCH] add ABI checks >> > > >> > > Starting from Kevin and Bruce idea of using libabigail, here is an >> > > alternate approach to implement ABI checks. >> > > >> > > By default, those checks are disabled and enabling them requires a >> > > manual step that generates the ABI dumps on a reference version for = a >> > > set of configurations. >> > > >> > > Those checks are enabled in the CI by default for the default meson >> > > options on x86 and aarch64 so that proposed patches are validated. >> > > A cache of the ABI is stored in travis jobs. >> > > Checks can be only informational by setting ABI_CHECKS_WARN_ONLY whe= n >> > > breaking the ABI in a future release. >> > > >> > > For advanced developers and maintainers, the contributing guide >> > > details the higher level scripts that are quite close to the existin= g >> > > devtools scripts. >> > > >> > > Signed-off-by: David Marchand >> > > --- >> > > .ci/linux-build.sh | 43 ++++++++++++++++++++++++++= + >> > > .travis.yml | 20 +++++++++++-- >> > > devtools/check-abi-dump.sh | 46 >> > +++++++++++++++++++++++++++++ >> > > devtools/check-abi-reference.sh | 27 +++++++++++++++++ >> > > devtools/dpdk.abignore | 2 ++ >> > > devtools/gen-abi-dump.sh | 29 ++++++++++++++++++ >> > > devtools/gen-abi-reference.sh | 24 +++++++++++++++ >> > > devtools/test-build.sh | 13 ++++++-- >> > > devtools/test-meson-builds.sh | 6 ++++ >> > > doc/guides/contributing/patches.rst | 25 ++++++++++++++++ >> > > 10 files changed, 230 insertions(+), 5 deletions(-) create mode >> > > 100755 devtools/check-abi-dump.sh create mode 100755 >> > > devtools/check-abi- reference.sh create mode 100644 >> > > devtools/dpdk.abignore create mode >> > > 100755 devtools/gen-abi-dump.sh create mode 100755 devtools/gen-abi= - >> > > reference.sh >> > > >> > > diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh index >> > > ccc3a7ccd..345dba264 100755 >> > > --- a/.ci/linux-build.sh >> > > +++ b/.ci/linux-build.sh >> > > @@ -30,8 +30,51 @@ fi >> > > >> > > OPTS=3D"$OPTS --default-library=3D$DEF_LIB" >> > > meson build --werror -Dexamples=3Dall $OPTS >> > > + >> > > +if [ "$ABI_CHECKS" =3D "1" ]; then >> > > + git remote add ref ${REF_GIT_REPO:-https://dpdk.org/git/dpdk} >> > > + git fetch --tags ref ${REF_GIT_BRANCH:-master} >> > > + >> > > + head=3D$(git describe --all) >> > > + tag=3D$(git describe --abbrev=3D0) >> > > + >> > > + if [ "$(cat reference/VERSION 2>/dev/null)" !=3D "$tag" ]; then >> > > + rm -rf reference >> > > + fi >> > > + >> > > + if [ ! -d reference ]; then >> > > + gen_abi_dump=3D$(mktemp -t gen-abi-dump-XXX.sh) >> > > + cp -a devtools/gen-abi-dump.sh $gen_abi_dump >> > > + >> > > + git checkout -qf $tag >> > > + ninja -C build >> > > + $gen_abi_dump build reference >> > > + >> > > + if [ "$AARCH64" !=3D "1" ]; then >> > > + mkdir -p reference/app >> > > + cp -a build/app/dpdk-testpmd reference/app/ >> > > + >> > > + export >> > LD_LIBRARY_PATH=3D$(pwd)/build/lib:$(pwd)/build/drivers >> > > + devtools/test-null.sh reference/app/dpdk-testpmd >> > > + unset LD_LIBRARY_PATH >> > > + fi >> > > + echo $tag > reference/VERSION >> > > + >> > > + git checkout -qf $head >> > > + fi >> > > +fi >> > > + >> > > ninja -C build >> > > >> > > +if [ "$ABI_CHECKS" =3D "1" ]; then >> > > + devtools/check-abi-dump.sh build reference >> > ${ABI_CHECKS_WARN_ONLY:-} >> > > + if [ "$AARCH64" !=3D "1" ]; then >> > > + export LD_LIBRARY_PATH=3D$(pwd)/build/lib:$(pwd)/build/driv= ers >> > > + devtools/test-null.sh reference/app/dpdk-testpmd >> > > + unset LD_LIBRARY_PATH >> > > + fi >> > > +fi >> > > + >> > > if [ "$AARCH64" !=3D "1" ]; then >> > > devtools/test-null.sh >> > > fi >> > > diff --git a/.travis.yml b/.travis.yml index 8f90d06f2..bbb060fa2 >> > > 100644 >> > > --- a/.travis.yml >> > > +++ b/.travis.yml >> > > @@ -1,5 +1,8 @@ >> > > language: c >> > > -cache: ccache >> > > +cache: >> > > + ccache: true >> > > + directories: >> > > + - reference >> > > compiler: >> > > - gcc >> > > - clang >> > > @@ -21,7 +24,7 @@ aarch64_packages: &aarch64_packages >> > > >> > > extra_packages: &extra_packages >> > > - *required_packages >> > > - - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4] >> > > + - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4, >> > > + abigail-tools] >> > > >> > > build_32b_packages: &build_32b_packages >> > > - *required_packages >> > > @@ -59,6 +62,13 @@ matrix: >> > > apt: >> > > packages: >> > > - *aarch64_packages >> > > + - env: DEF_LIB=3D"shared" EXTRA_PACKAGES=3D1 ABI_CHECKS=3D1 AARCH= 64=3D1 >> > > + compiler: gcc >> > > + addons: >> > > + apt: >> > > + packages: >> > > + - *aarch64_packages >> > > + - *extra_packages >> > > - env: DEF_LIB=3D"static" EXTRA_PACKAGES=3D1 >> > > compiler: gcc >> > > addons: >> > > @@ -72,6 +82,12 @@ matrix: >> > > packages: >> > > - *extra_packages >> > > - *doc_packages >> > > + - env: DEF_LIB=3D"shared" EXTRA_PACKAGES=3D1 ABI_CHECKS=3D1 >> > > + compiler: gcc >> > > + addons: >> > > + apt: >> > > + packages: >> > > + - *extra_packages >> > > - env: DEF_LIB=3D"static" OPTS=3D"-Denable_kmods=3Dfalse" >> > EXTRA_PACKAGES=3D1 >> > > compiler: gcc >> > > addons: >> > > diff --git a/devtools/check-abi-dump.sh b/devtools/check-abi-dump.sh >> > > new file mode 100755 index 000000000..f48a2ae7e >> > > --- /dev/null >> > > +++ b/devtools/check-abi-dump.sh >> > > @@ -0,0 +1,46 @@ >> > > +#!/bin/sh -e >> > > +# SPDX-License-Identifier: BSD-3-Clause # Copyright (c) 2019 Red >> > Hat, >> > > +Inc. >> > > + >> > > +if [ $# !=3D 2 ] && [ $# !=3D 3 ]; then >> > > +=09echo "Usage: $0 builddir dumpdir [warnonly]" >> > > +=09exit 1 >> > > +fi >> > > + >> > > +builddir=3D$1 >> > > +dumpdir=3D$2 >> > > +warnonly=3D${3:-} >> > > +if [ ! -d $builddir ]; then >> > > +=09echo "Error: build directory '$builddir' does not exist." >> > > +=09exit 1 >> > > +fi >> > > +if [ ! -d $dumpdir ]; then >> > > +=09echo "Error: dump directory '$dumpdir' does not exist." >> > > +=09exit 1 >> > > +fi >> > > + >> > > +ABIDIFF_OPTIONS=3D"--suppr $(dirname $0)/dpdk.abignore" >> > > +for dump in $(find $dumpdir -name "*.dump"); do >> > > +=09libname=3D$(basename $dump) >> > > +=09libname=3D${libname%.dump} >> > > +=09result=3D >> > > +=09for f in $(find $builddir -name "$libname.so.*"); do >> > > +=09=09if test -L $f || [ "$f" !=3D "${f%%.symbols}" ]; then >> > > +=09=09=09continue >> > > +=09=09fi >> > > +=09=09result=3Dfound >> > > + >> > > +=09=09if ! abidiff $ABIDIFF_OPTIONS $dump $f; then >> > > +=09=09=09if [ -z "$warnonly" ]; then >> > > +=09=09=09=09echo "Error: ABI issue reported for $dump, $f" >> > > +=09=09=09=09exit 1 >> > > +=09=09=09fi >> > > +=09=09=09echo "Warning: ABI issue reported for $dump, $f" >> > > +=09=09fi >> > > +=09=09break >> > > +=09done >> > > +=09if [ "$result" !=3D "found" ]; then >> > > +=09=09echo "Error: can't find a library for dump file $dump" >> > > +=09=09exit 1 >> > > +=09fi >> > > +done >> > > diff --git a/devtools/check-abi-reference.sh b/devtools/check-abi- >> > > reference.sh new file mode 100755 index 000000000..7addb094e >> > > --- /dev/null >> > > +++ b/devtools/check-abi-reference.sh >> > > @@ -0,0 +1,27 @@ >> > > +#!/bin/sh -e >> > > +# SPDX-License-Identifier: BSD-3-Clause # Copyright (c) 2019 Red >> > Hat, >> > > +Inc. >> > > + >> > > +devtools_dir=3D$(dirname $(readlink -f $0)) . >> > > +$devtools_dir/load-devel-config >> > > + >> > > +abi_ref_build_dir=3D${DPDK_ABI_REF_BUILD_DIR:-reference} >> > > +builds_dir=3D${DPDK_BUILD_TEST_DIR:-.} >> > > + >> > > +for dir in $abi_ref_build_dir/*; do >> > > +=09if [ "$dir" =3D "$abi_ref_build_dir" ]; then >> > > +=09=09exit 1 >> > > +=09fi >> > > +=09if [ ! -d $dir/dump ]; then >> > > +=09=09echo "Skipping $dir" >> > > +=09=09continue >> > > +=09fi >> > > +=09target=3D$(basename $dir) >> > > +=09if [ -d $builds_dir/$target/install ]; then >> > > +=09=09libdir=3D$builds_dir/$target/install >> > > +=09else >> > > +=09=09libdir=3D$builds_dir/$target >> > > +=09fi >> > > +=09echo "Checking ABI between $libdir and $dir/dump" >> > > +=09$devtools_dir/check-abi-dump.sh $libdir $dir/dump done >> > > diff --git a/devtools/dpdk.abignore b/devtools/dpdk.abignore new fil= e >> > > mode >> > > 100644 index 000000000..b866b7f26 >> > > --- /dev/null >> > > +++ b/devtools/dpdk.abignore >> > > @@ -0,0 +1,2 @@ >> > > +[suppress_function] >> > > + symbol_version =3D EXPERIMENTAL >> > > diff --git a/devtools/gen-abi-dump.sh b/devtools/gen-abi-dump.sh new >> > > file mode 100755 index 000000000..4e38d751f >> > > --- /dev/null >> > > +++ b/devtools/gen-abi-dump.sh >> > > @@ -0,0 +1,29 @@ >> > > +#!/bin/sh -e >> > > +# SPDX-License-Identifier: BSD-3-Clause # Copyright (c) 2019 Red >> > Hat, >> > > +Inc. >> > > + >> > > +if [ $# !=3D 2 ]; then >> > > +=09echo "Usage: $0 builddir dumpdir" >> > > +=09exit 1 >> > > +fi >> > > + >> > > +builddir=3D$1 >> > > +dumpdir=3D$2 >> > > +if [ ! -d $builddir ]; then >> > > +=09echo "Error: build directory '$builddir' does not exist." >> > > +=09exit 1 >> > > +fi >> > > +if [ -d $dumpdir ]; then >> > > +=09echo "Error: dump directory '$dumpdir' already exists." >> > > +=09exit 1 >> > > +fi >> > > + >> > > +mkdir -p $dumpdir >> > > +for f in $(find $builddir -name "*.so.*"); do >> > > +=09if test -L $f || [ "$f" !=3D "${f%%.symbols}" ]; then >> > > +=09=09continue >> > > +=09fi >> > > + >> > > +=09libname=3D$(basename $f) >> > > +=09abidw --out-file $dumpdir/${libname%.so.*}.dump $f done >> > > diff --git a/devtools/gen-abi-reference.sh >> > > b/devtools/gen-abi-reference.sh new file mode 100755 index >> > > 000000000..f41d7fadc >> > > --- /dev/null >> > > +++ b/devtools/gen-abi-reference.sh >> > > @@ -0,0 +1,24 @@ >> > > +#!/bin/sh -e >> > > +# SPDX-License-Identifier: BSD-3-Clause # Copyright (c) 2019 Red >> > Hat, >> > > +Inc. >> > > + >> > > +devtools_dir=3D$(dirname $(readlink -f $0)) . >> > > +$devtools_dir/load-devel-config >> > > + >> > > +abi_ref_build_dir=3D${DPDK_ABI_REF_BUILD_DIR:-reference} >> > > +for dir in $abi_ref_build_dir/*; do >> > > +=09if [ "$dir" =3D "$abi_ref_build_dir" ]; then >> > > +=09=09exit 1 >> > > +=09fi >> > > +=09if [ -d $dir/dump ]; then >> > > +=09=09echo "Skipping $dir" >> > > +=09=09continue >> > > +=09fi >> > > +=09if [ -d $dir/install ]; then >> > > +=09=09libdir=3D$dir/install >> > > +=09else >> > > +=09=09libdir=3D$dir >> > > +=09fi >> > > +=09echo "Dumping libraries from $libdir in $dir/dump" >> > > +=09$devtools_dir/gen-abi-dump.sh $libdir $dir/dump done >> > > diff --git a/devtools/test-build.sh b/devtools/test-build.sh index >> > > 52305fbb8..8cb5b56fb 100755 >> > > --- a/devtools/test-build.sh >> > > +++ b/devtools/test-build.sh >> > > @@ -30,7 +30,8 @@ default_path=3D$PATH >> > > # - LIBSSO_SNOW3G_PATH >> > > # - LIBSSO_KASUMI_PATH >> > > # - LIBSSO_ZUC_PATH >> > > -. $(dirname $(readlink -f $0))/load-devel-config >> > > +devtools_dir=3D$(dirname $(readlink -f $0)) . >> > > +$devtools_dir/load-devel-config >> > > >> > > print_usage () { >> > > =09echo "usage: $(basename $0) [-h] [-jX] [-s] [config1 [config2] >> > > ...]]" >> > > @@ -64,6 +65,7 @@ print_help () { >> > > [ -z $MAKE ] && echo "Cannot find make or gmake" && exit 1 >> > > >> > > J=3D$DPDK_MAKE_JOBS >> > > +abi_ref_build_dir=3D${DPDK_ABI_REF_BUILD_DIR:-reference} >> > > builds_dir=3D${DPDK_BUILD_TEST_DIR:-.} >> > > short=3Dfalse >> > > unset verbose >> > > @@ -97,7 +99,7 @@ trap "signal=3DINT ; trap - INT ; kill -INT $$" IN= T >> > # >> > > notify result on exit trap on_exit EXIT >> > > >> > > -cd $(dirname $(readlink -f $0))/.. >> > > +cd $devtools_dir/.. >> > > >> > > reset_env () >> > > { >> > > @@ -233,7 +235,7 @@ for conf in $configs ; do >> > > =09# reload config with DPDK_TARGET set >> > > =09DPDK_TARGET=3D$target >> > > =09reset_env >> > > -=09. $(dirname $(readlink -f $0))/load-devel-config >> > > +=09. $devtools_dir/load-devel-config >> > > >> > > =09options=3D$(echo $conf | sed 's,[^~+]*,,') >> > > =09dir=3D$builds_dir/$conf >> > > @@ -246,6 +248,11 @@ for conf in $configs ; do >> > > =09export RTE_TARGET=3D$target >> > > =09rm -rf $dir/install >> > > =09${MAKE} install O=3D$dir DESTDIR=3D$dir/install prefix=3D >> > > +=09if [ -d $abi_ref_build_dir/$conf/dump ]; then >> > > +=09=09echo "=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D = Check ABI $conf" >> > > +=09=09$devtools_dir/check-abi-dump.sh $dir/install \ >> > > +=09=09=09$abi_ref_build_dir/$conf/dump >> > > +=09fi >> > > =09echo "=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Bui= ld examples for $conf" >> > > =09export RTE_SDK=3D$(readlink -f $dir)/install/share/dpdk >> > > =09ln -sTf $(pwd)/lib $RTE_SDK/lib # workaround for vm_power_manage= r >> > > diff --git a/devtools/test-meson-builds.sh >> > > b/devtools/test-meson-builds.sh index 688567714..aaefa38a2 100755 >> > > --- a/devtools/test-meson-builds.sh >> > > +++ b/devtools/test-meson-builds.sh >> > > @@ -16,6 +16,7 @@ srcdir=3D$(dirname $(readlink -f $0))/.. >> > > >> > > MESON=3D${MESON:-meson} >> > > use_shared=3D"--default-library=3Dshared" >> > > +abi_ref_build_dir=3D${DPDK_ABI_REF_BUILD_DIR:-reference} >> > > builds_dir=3D${DPDK_BUILD_TEST_DIR:-.} >> > > >> > > if command -v gmake >/dev/null 2>&1 ; then @@ -88,6 +89,11 @@ build >> > > () # >> > > =09=09echo "$ninja_cmd -C $builddir" >> > > =09=09$ninja_cmd -C $builddir >> > > =09fi >> > > + >> > > +=09if [ -d $abi_ref_build_dir/$1/dump ]; then >> > > +=09=09$srcdir/devtools/check-abi-dump.sh $builddir >> > > +=09=09=09$abi_ref_build_dir/$1/dump >> > > +=09fi >> > > } >> > > >> > > if [ "$1" =3D "-vv" ] ; then >> > > diff --git a/doc/guides/contributing/patches.rst >> > > b/doc/guides/contributing/patches.rst >> > > index 0686450e4..de3dff145 100644 >> > > --- a/doc/guides/contributing/patches.rst >> > > +++ b/doc/guides/contributing/patches.rst >> > > @@ -513,6 +513,31 @@ in a single subfolder called "__builds" created >> > > in the current directory. >> > > Setting ``DPDK_BUILD_TEST_DIR`` to an absolute directory path e.g. >> > > ``/tmp`` is also supported. >> > > >> > > >> > > +Checking ABI compatibility >> > > +-------------------------- >> > > + >> > > +The first thing is to build reference binaries for the latest >> > release >> > > +your patches are built on top of. >> > > + >> > > +Either you are in a git tree and an easy way to identify this is to >> > run:: >> > > + >> > > + git checkout $(git describe --abbrev=3D0) >> > > + >> > > +Or you use a tarball and you extract the sources in a director of >> > > +your >> > > choice. >> > > + >> > > +Next is building those sources, refer to the previous paragraph. >> > > +You can set ``DPDK_BUILD_TEST_DIR=3Dreference``, so that the builds >> > > +occur in this directory. >> > > + >> > > +Finally, the ABI dump files are generated with the >> > > +``devtools/gen-abi-reference.sh`` script. This script will look for >> > > +builds in the current sub directory ``reference``. But you can set >> > > +the environment variable ``DPDK_ABI_REF_BUILD_DIR`` to a different >> > location. >> > > + >> > > +Once done, you can check your current binaries ABI with this >> > > +reference with the ``devtools/check-abi-reference.sh`` script. >> > > + >> > > + >> > > Sending Patches >> > > --------------- >> > > >> > > -- >> > > 2.23.0 >> >=20 >> > I still very much dislike forcing the user to generate his own >> > reference version to compare the ABI against. These should be archived >> > and the user should just be able to pull them down via git or http or >> > otherwise. Two reasons for this: >> >=20 >> > 1. Less error prone, since there is no chance of the user having an >> > incorrect build for whatever reason. It's more error prone I think. There are issues with archived versions of ABI dumps, or bad content delivery networks. Working from the git repository is *guaranteed* to generate a correct ABI dump. Anything else allows your CDN / other to break. >> > 2. Less effort for the user than asking them to do extra builds. The >> > more steps the user has to follow, the less likely they are to attempt >> > the process. It's important to remember that (as far as I'm aware) the vast majority of DPDK users don't make many code changes or even compile it. And those who do typically don't even run the unit tests. I think it's good to document a process for people to follow, but such process shouldn't assume that developers can't run basic git commands or execute scripts. >> > Regards, >> > /Bruce >> >=20 >>=20 >> +1 ... 100% agree with this. >>=20 >> Many people won't know or understand what the reference is,=20 >> or why they to generate it.=20 > > Many people won't run the test at all and will rely on the automatic CI t= ests. +1 to this. It's good for the robot's travis build to validate the ABI for patches, since it will alert us anyway.