devtools: add ABI checks
[dpdk.git] / devtools / test-meson-builds.sh
index fb6c404..c2d33b3 100755 (executable)
@@ -64,9 +64,18 @@ config () # <dir> <builddir> <meson options>
        builddir=$1
        shift
        if [ -f "$builddir/build.ninja" ] ; then
+               # for existing environments, switch to debugoptimized if unset
+               # so that ABI checks can run
+               if ! $MESON configure $builddir |
+                               awk '$1=="buildtype" {print $2}' |
+                               grep -qw debugoptimized; then
+                       $MESON configure --buildtype=debugoptimized $builddir
+               fi
                return
        fi
-       options="--werror -Dexamples=all"
+       options=
+       options="$options --werror -Dexamples=all"
+       options="$options --buildtype=debugoptimized"
        for option in $DPDK_MESON_OPTIONS ; do
                options="$options -D$option"
        done
@@ -92,6 +101,13 @@ compile () # <builddir>
        fi
 }
 
+install_target () # <builddir> <installdir>
+{
+       rm -rf $2
+       echo "DESTDIR=$2 $ninja_cmd -C $1 install"
+       DESTDIR=$2 $ninja_cmd -C $1 install
+}
+
 build () # <directory> <target compiler> <meson options>
 {
        targetdir=$1
@@ -103,6 +119,31 @@ build () # <directory> <target compiler> <meson options>
        load_env $targetcc || return 0
        config $srcdir $builds_dir/$targetdir $*
        compile $builds_dir/$targetdir
+       if [ -n "$DPDK_ABI_REF_VERSION" ]; then
+               abirefdir=${DPDK_ABI_REF_DIR:-reference}/$DPDK_ABI_REF_VERSION
+               if [ ! -d $abirefdir/$targetdir ]; then
+                       # clone current sources
+                       if [ ! -d $abirefdir/src ]; then
+                               git clone --local --no-hardlinks \
+                                       --single-branch \
+                                       -b $DPDK_ABI_REF_VERSION \
+                                       $srcdir $abirefdir/src
+                       fi
+
+                       rm -rf $abirefdir/build
+                       config $abirefdir/src $abirefdir/build $*
+                       compile $abirefdir/build
+                       install_target $abirefdir/build $abirefdir/$targetdir
+                       $srcdir/devtools/gen-abi.sh $abirefdir/$targetdir
+               fi
+
+               install_target $builds_dir/$targetdir \
+                       $(readlink -f $builds_dir/$targetdir/install)
+               $srcdir/devtools/gen-abi.sh \
+                       $(readlink -f $builds_dir/$targetdir/install)
+               $srcdir/devtools/check-abi.sh $abirefdir/$targetdir \
+                       $(readlink -f $builds_dir/$targetdir/install)
+       fi
 }
 
 if [ "$1" = "-vv" ] ; then
@@ -153,8 +194,11 @@ done
 # Test installation of the x86-default target, to be used for checking
 # the sample apps build using the pkg-config file for cflags and libs
 build_path=$(readlink -f $builds_dir/build-x86-default)
-export DESTDIR=$build_path/install-root
-$ninja_cmd -C $build_path install
+export DESTDIR=$build_path/install
+# No need to reinstall if ABI checks are enabled
+if [ -z "$DPDK_ABI_REF_VERSION" ]; then
+       install_target $build_path $DESTDIR
+fi
 
 load_env cc
 pc_file=$(find $DESTDIR -name libdpdk.pc)