numam-dpdk/devtools/test-meson-builds.sh
Bruce Richardson 7f80a2102b devtools: test pkg-config file
The pkg-config file generated as part of the build of DPDK should allow
applications to be built with an installed DPDK. We can test this as
part of the build by doing an install of DPDK to a temporary directory
within the build folder, and by then compiling up a few sample apps
using make working off that directory.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Luca Boccassi <bluca@debian.org>
2019-07-02 18:10:02 +02:00

114 lines
3.3 KiB
Bash
Executable File

#! /bin/sh -e
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2018 Intel Corporation
# Run meson to auto-configure the various builds.
# * all builds get put in a directory whose name starts with "build-"
# * if a build-directory already exists we assume it was properly configured
# Run ninja after configuration is done.
# set pipefail option if possible
PIPEFAIL=""
set -o | grep -q pipefail && set -o pipefail && PIPEFAIL=1
srcdir=$(dirname $(readlink -f $0))/..
MESON=${MESON:-meson}
use_shared="--default-library=shared"
if command -v gmake >/dev/null 2>&1 ; then
MAKE=gmake
else
MAKE=make
fi
if command -v ninja >/dev/null 2>&1 ; then
ninja_cmd=ninja
elif command -v ninja-build >/dev/null 2>&1 ; then
ninja_cmd=ninja-build
else
echo "ERROR: ninja is not found" >&2
exit 1
fi
build () # <directory> <meson options>
{
builddir=$1
shift
if command -v $CC >/dev/null 2>&1 ; then
if [ ! -f "$builddir/build.ninja" ] ; then
options="--werror -Dexamples=all $*"
echo "$MESON $options $srcdir $builddir"
$MESON $options $srcdir $builddir
unset CC
fi
if [ -n "$TEST_MESON_BUILD_VERY_VERBOSE" ] ; then
# for full output from ninja use "-v"
echo "$ninja_cmd -v -C $builddir"
$ninja_cmd -v -C $builddir
elif [ -n "$TEST_MESON_BUILD_VERBOSE" ] ; then
# for keeping the history of short cmds, pipe through cat
echo "$ninja_cmd -C $builddir | cat"
$ninja_cmd -C $builddir | cat
else
echo "$ninja_cmd -C $builddir"
$ninja_cmd -C $builddir
fi
fi
}
if [ "$1" = "-vv" ] ; then
TEST_MESON_BUILD_VERY_VERBOSE=1
elif [ "$1" = "-v" ] ; then
TEST_MESON_BUILD_VERBOSE=1
fi
# we can't use plain verbose when we don't have pipefail option so up-level
if [ -z "$PIPEFAIL" -a -n "$TEST_MESON_BUILD_VERBOSE" ] ; then
echo "# Missing pipefail shell option, changing VERBOSE to VERY_VERBOSE"
TEST_MESON_BUILD_VERY_VERBOSE=1
fi
# shared and static linked builds with gcc and clang
for c in gcc clang ; do
command -v $c >/dev/null 2>&1 || continue
for s in static shared ; do
export CC="ccache $c"
build build-$c-$s --default-library=$s
done
done
# test compilation with minimal x86 instruction set
default_machine='nehalem'
ok=$(cc -march=$default_machine -E - < /dev/null > /dev/null 2>&1 || echo false)
if [ "$ok" = "false" ] ; then
default_machine='corei7'
fi
build build-x86-default -Dmachine=$default_machine $use_shared
# enable cross compilation if gcc cross-compiler is found
c=aarch64-linux-gnu-gcc
if command -v $c >/dev/null 2>&1 ; then
# compile the general v8a also for clang to increase coverage
export CC="clang"
build build-arm64-host-clang $use_shared \
--cross-file $srcdir/config/arm/arm64_armv8_linux_gcc
for f in $srcdir/config/arm/arm*gcc ; do
export CC="ccache gcc"
build build-$(basename $f | tr '_' '-' | cut -d'-' -f-2) \
$use_shared --cross-file $f
done
fi
# 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=build-x86-default
export DESTDIR=$(pwd)/$build_path/install-root
$ninja_cmd -C $build_path install
pc_file=$(find $DESTDIR -name libdpdk.pc)
export PKG_CONFIG_PATH=$(dirname $pc_file):$PKG_CONFIG_PATH
for example in cmdline helloworld l2fwd l3fwd skeleton timer; do
echo "## Building $example"
$MAKE -C $DESTDIR/usr/local/share/dpdk/examples/$example clean all
done