[dpdk-dev,v4] devtools: add test script for meson builds
Checks
Commit Message
From: Bruce Richardson <bruce.richardson@intel.com>
To simplify testing with the meson and ninja builds, we can add a script
to set up and do multiple builds. Currently this script sets up:
* clang and gcc builds
* builds using static and shared linkage for binaries (libs are always
built as both)
* a build using the lowest instruction-set level for x86 (-march=nehalem)
* cross-builds for each cross-file listed in config/arm
Each build is configured in a directory ending in *-build, and then for
the build stage, we just call ninja in each directory in turn. [i.e. we
assume every directory starting with "build-" is a meson build, which is
probably an ok assumption].
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
v2: it is a rework with 3 major changes
- automatically stop on error thanks to -e
- directory name starts with "build-"
- optionally load a config file to get some environment variables
v3:
- remove forcing "cd": use current directory
- remove CROSS: use hard-written aarch64-linux-gnu-gcc
- remove config load in script start
v4:
- remove config file loading (will be improved and sent later)
- the v4 is closer to what Bruce sent as v1
---
MAINTAINERS | 1 +
devtools/test-meson-builds.sh | 43 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 44 insertions(+)
create mode 100755 devtools/test-meson-builds.sh
Comments
On Sat, May 26, 2018 at 01:21:42PM +0200, Thomas Monjalon wrote:
> From: Bruce Richardson <bruce.richardson@intel.com>
>
> To simplify testing with the meson and ninja builds, we can add a script
> to set up and do multiple builds. Currently this script sets up:
>
> * clang and gcc builds
> * builds using static and shared linkage for binaries (libs are always
> built as both)
> * a build using the lowest instruction-set level for x86 (-march=nehalem)
> * cross-builds for each cross-file listed in config/arm
>
> Each build is configured in a directory ending in *-build, and then for
> the build stage, we just call ninja in each directory in turn. [i.e. we
> assume every directory starting with "build-" is a meson build, which is
> probably an ok assumption].
>
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---
> v2: it is a rework with 3 major changes
> - automatically stop on error thanks to -e
> - directory name starts with "build-"
> - optionally load a config file to get some environment variables
> v3:
> - remove forcing "cd": use current directory
> - remove CROSS: use hard-written aarch64-linux-gnu-gcc
> - remove config load in script start
> v4:
> - remove config file loading (will be improved and sent later)
> - the v4 is closer to what Bruce sent as v1
> ---
Yes, it's closer, but there is also some good material in your v2 that we
probably want to rework into this later on. I suggest in the name of
progress we merge this version and iterate on improving it later.
/Bruce
@@ -86,6 +86,7 @@ F: devtools/get-maintainer.sh
F: devtools/git-log-fixes.sh
F: devtools/load-devel-config
F: devtools/test-build.sh
+F: devtools/test-meson-builds.sh
F: license/
new file mode 100755
@@ -0,0 +1,43 @@
+#! /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.
+
+MESON=${MESON:-meson}
+
+build () # <directory> <meson options>
+{
+ dir=$1
+ shift
+ if [ ! -d "$dir" ] ; then
+ options="--werror -Dexamples=all $*"
+ echo "$MESON $options $dir"
+ $MESON $options $dir
+ unset CC
+ fi
+ echo "ninja -C $dir"
+ ninja -C $dir
+}
+
+# shared and static linked builds with gcc and clang
+for c in gcc clang ; do
+ 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
+build build-x86-default -Dmachine=nehalem
+
+# enable cross compilation if gcc cross-compiler is found
+for f in config/arm/arm*gcc ; do
+ if ! command -v aarch64-linux-gnu-gcc >/dev/null 2>&1 ; then
+ continue
+ fi
+ build build-$(basename $f | tr '_' '-' | cut -d'-' -f-2) --cross-file $f
+done