2016-12-21 21:45:01 +01:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
export RIOT_CI_BUILD=1
|
|
|
|
export STATIC_TESTS=${STATIC_TESTS:-1}
|
|
|
|
export CFLAGS_DBG=""
|
2017-06-17 18:19:05 +02:00
|
|
|
export DLCACHE_DIR=${DLCACHE_DIR:-~/.dlcache}
|
2016-12-21 21:45:01 +01:00
|
|
|
|
2017-01-30 16:59:18 +01:00
|
|
|
error() {
|
|
|
|
echo "$@"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
2016-12-21 21:45:01 +01:00
|
|
|
_greplist() {
|
|
|
|
if [ $# -eq 0 ]; then
|
|
|
|
echo cat
|
|
|
|
else
|
|
|
|
echo -n "grep -E ($1"
|
|
|
|
shift
|
|
|
|
for i in $*; do
|
|
|
|
echo -n "|$i"
|
|
|
|
done
|
|
|
|
echo ")"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# get list of all app directories
|
|
|
|
get_apps() {
|
|
|
|
find tests/ examples/ \
|
|
|
|
-mindepth 2 -maxdepth 2 -name Makefile -type f \
|
|
|
|
| xargs dirname | $(_greplist $APPS) | sort
|
|
|
|
}
|
|
|
|
|
|
|
|
# take app dir as parameter, print all boards that are supported
|
|
|
|
# Only print for boards in $BOARDS.
|
|
|
|
get_supported_boards() {
|
|
|
|
local appdir=$1
|
|
|
|
for board in $(make --no-print-directory -C$appdir info-boards-supported 2>/dev/null )
|
|
|
|
do
|
|
|
|
echo $board
|
|
|
|
done | $(_greplist $BOARDS)
|
|
|
|
}
|
|
|
|
|
|
|
|
# given an app dir as parameter, print "$appdir board" for each supported
|
|
|
|
# board. Only print for boards in $BOARDS.
|
|
|
|
get_app_board_pairs() {
|
|
|
|
local appdir=$1
|
|
|
|
for board in $(get_supported_boards $appdir)
|
|
|
|
do
|
|
|
|
echo $appdir $board
|
|
|
|
done | $(_greplist $BOARDS)
|
|
|
|
}
|
|
|
|
|
|
|
|
# use dwqc to create full "appdir board" compile job list
|
|
|
|
get_compile_jobs() {
|
|
|
|
get_apps | \
|
|
|
|
dwqc -E BOARDS -E APPS -s \
|
|
|
|
"$0 get_app_board_pairs \${1}" \
|
|
|
|
| xargs '-d\n' -n 1 echo $0 compile
|
|
|
|
}
|
|
|
|
|
|
|
|
# compile one app for one board. delete intermediates.
|
|
|
|
compile() {
|
|
|
|
local appdir=$1
|
|
|
|
local board=$2
|
|
|
|
|
2017-02-23 18:45:41 +01:00
|
|
|
# set build directory. CI ensures only one build at a time in $(pwd).
|
|
|
|
rm -rf build
|
|
|
|
export BINDIR="$(pwd)/build"
|
|
|
|
export PKGDIRBASE="${BINDIR}/pkg"
|
|
|
|
|
2017-01-30 16:59:18 +01:00
|
|
|
[ -n "$DWQ_WORKER" ] && \
|
2017-02-05 23:14:31 +01:00
|
|
|
echo "-- running on worker ${DWQ_WORKER} thread ${DWQ_WORKER_THREAD}, build number $DWQ_WORKER_BUILDNUM."
|
2017-01-30 16:59:18 +01:00
|
|
|
|
|
|
|
# sanity checks
|
|
|
|
[ $# -ne 2 ] && error "$0: compile: invalid parameters (expected \$appdir \$board)"
|
|
|
|
[ ! -d "$appdir" ] && error "$0: compile: error: application directory \"$appdir\" doesn't exist"
|
|
|
|
[ ! -d "boards/$board" ] && error "$0: compile: error: board directory \"boards/$board\" doesn't exist"
|
|
|
|
|
2016-12-21 21:45:01 +01:00
|
|
|
CCACHE_BASEDIR="$(pwd)" BOARD=$board RIOT_CI_BUILD=1 \
|
|
|
|
make -C${appdir} clean all -j${JOBS:-4}
|
|
|
|
RES=$?
|
|
|
|
|
|
|
|
if [ $RES -eq 0 ]; then
|
|
|
|
if [ "$board" = "native" -a "$appdir" = "tests/unittests" ]; then
|
|
|
|
make -C${appdir} test
|
|
|
|
RES=$?
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2017-02-23 18:45:41 +01:00
|
|
|
echo "-- build directory size: $(du -sh ${BINDIR} | cut -f1)"
|
|
|
|
|
2017-01-30 16:59:18 +01:00
|
|
|
# cleanup
|
2017-02-23 18:45:41 +01:00
|
|
|
rm -Rf build
|
2016-12-21 21:45:01 +01:00
|
|
|
|
|
|
|
return $RES
|
|
|
|
}
|
|
|
|
|
|
|
|
# execute static tests
|
|
|
|
static_tests() {
|
|
|
|
local repo=${CI_BASE_REPO:-https://github.com/RIOT-OS/RIOT}
|
|
|
|
local branch=${CI_BASE_BRANCH:-master}
|
|
|
|
|
|
|
|
OUT="$(git remote add upstream $repo 2>&1 && git fetch upstream ${branch}:${branch} 2>&1)"
|
|
|
|
RES=$?
|
|
|
|
if [ $RES -ne 0 ]; then
|
|
|
|
echo "$OUT"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
BUILDTEST_MCU_GROUP=static-tests ./dist/tools/ci/build_and_test.sh
|
|
|
|
}
|
|
|
|
|
|
|
|
get_jobs() {
|
|
|
|
[ "$STATIC_TESTS" = "1" ] && \
|
|
|
|
echo "$0 static_tests###{ \"jobdir\" : \"exclusive\" }"
|
|
|
|
get_compile_jobs
|
|
|
|
}
|
|
|
|
|
|
|
|
$*
|