From 8edc9ffd34d3373a92e4698ab432d936ebf21333 Mon Sep 17 00:00:00 2001
From: Kaspar Schleiser <kaspar@schleiser.de>
Date: Wed, 21 Dec 2016 21:45:01 +0100
Subject: [PATCH] murdock: add build script for distributed backend

---
 .murdock | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 97 insertions(+)
 create mode 100755 .murdock

diff --git a/.murdock b/.murdock
new file mode 100755
index 0000000000..3aa07938d3
--- /dev/null
+++ b/.murdock
@@ -0,0 +1,97 @@
+#!/bin/sh
+
+export RIOT_CI_BUILD=1
+export STATIC_TESTS=${STATIC_TESTS:-1}
+export CFLAGS_DBG=""
+
+_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
+
+    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
+
+    BOARD=$board make --no-print-directory -C${appdir} clean clean-intermediates
+
+    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
+}
+
+$*
-- 
GitLab