You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
2.8 KiB
111 lines
2.8 KiB
#!/bin/sh |
|
|
|
export RIOT_CI_BUILD=1 |
|
export STATIC_TESTS=${STATIC_TESTS:-1} |
|
export CFLAGS_DBG="" |
|
|
|
error() { |
|
echo "$@" |
|
exit 1 |
|
} |
|
|
|
_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 |
|
|
|
[ -n "$DWQ_WORKER" ] && \ |
|
echo "-- running on worker ${DWQ_WORKER} thread ${DWQ_WORKER_THREAD}, build number $DWQ_WORKER_BUILDNUM." |
|
|
|
# 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" |
|
|
|
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 |
|
|
|
# cleanup |
|
rm -Rf "${appdir}/bin/${board}" "${appdir}/bin/pkg/${board}" |
|
|
|
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 |
|
} |
|
|
|
$*
|
|
|