summaryrefslogtreecommitdiff
path: root/tcwg-llvm-build.sh
diff options
context:
space:
mode:
authorRenato Golin <renato.golin@linaro.org>2017-05-25 15:06:44 +0100
committerRenato Golin <renato.golin@linaro.org>2017-05-26 12:55:01 +0000
commit7365a8ab05c211ee916a364db1e035fbcfffffae (patch)
tree5cf4b211f2bf55e39a2443a875df98bad566ccab /tcwg-llvm-build.sh
parentce08cedbcb70ef3f51bd5a0dd548680312e146c6 (diff)
tcwg-llvm-build.sh: Add list of projects to consider
As discussed in TCWG-1134, we need a list of projects to checkout if the branch is master and there is a revision (buildbot and pre-commit base cases) as well as a branch and no list (for pre-commit patch cases. The relationship between lists and branches is that having a branch and not being in the list is ok, but being in the list and not having a branch is not. This patch addresses that, so that we can create any number of trigger jobs without worrying about the parameters we pass. It should either be safe, user error, or the job will bail. Needs https://review.linaro.org/19777 to work. Change-Id: I83fa889f3d3ebf80f08ffed218d4e72e40a88ecc
Diffstat (limited to 'tcwg-llvm-build.sh')
-rwxr-xr-xtcwg-llvm-build.sh30
1 files changed, 28 insertions, 2 deletions
diff --git a/tcwg-llvm-build.sh b/tcwg-llvm-build.sh
index 3c2f4fb3..e52791bd 100755
--- a/tcwg-llvm-build.sh
+++ b/tcwg-llvm-build.sh
@@ -24,7 +24,8 @@ SYN_TOOLCHAIN_FILE="--toolchain-file=<file-name> (file name to copy the produced
SYN_COMPILER="--compiler=clang|gcc"
SYN_REPOSITORY="--repository=http://url/for/git/repo/"
SYN_BRANCH="--branch=branchname"
-SYNTAX="$0 $SYN_WORKSPACE $SYN_REVISION $SYN_ASSERTS $SYN_LINKJOBS $SYN_BUILDJOBS $SYN_TOOLCHAIN $SYN_BUILDID $SYN_TOOLCHAIN_FILE $SYN_CMAKEFLAGS $SYN_COMPILER $SYN_REPOSITORY $SYN_BRANCH"
+SYN_PROJECTS="--projects='llvm clang etc'"
+SYNTAX="$0 $SYN_WORKSPACE $SYN_REVISION $SYN_ASSERTS $SYN_LINKJOBS $SYN_BUILDJOBS $SYN_TOOLCHAIN $SYN_BUILDID $SYN_TOOLCHAIN_FILE $SYN_CMAKEFLAGS $SYN_COMPILER $SYN_REPOSITORY $SYN_BRANCH $SYN_PROJECTS"
# Environment Variables and default values
WORKSPACE=$(pwd)
@@ -41,6 +42,7 @@ CMAKEFLAGS=""
BUILDID=""
REPOSITORY="https://git-us.linaro.org/toolchain/llvm"
BRANCH="master"
+PROJECTS=""
# Command line parsing
while [ "$#" -gt 0 ]; do
@@ -148,6 +150,9 @@ while [ "$#" -gt 0 ]; do
--cmakeflags)
CMAKEFLAGS="$VAL"
shift ;;
+ --projects)
+ PROJECTS="$VAL"
+ shift ;;
*)
echo "ERROR: Invalid argument '$1'"
echo "Syntax: $SYNTAX"
@@ -198,6 +203,8 @@ echo "TOOLCHAIN = $TOOLCHAIN"
echo "CC = $CC"
echo "CXX = $CXX"
echo "CMAKEFLAGS = $CMAKEFLAGS"
+echo "BRANCH = $BRANCH"
+echo "PROJECTS = $PROJECTS"
# Logs
LOGBASE="$WORKSPACE/tcwg-llvm"
@@ -208,11 +215,19 @@ LLVM_PROJECTS="llvm: clang:tools/clang lld:tools/lld
compiler-rt:projects/compiler-rt libunwind:projects/libunwind
libcxx:projects/libcxx libcxxabi:projects/libcxxabi"
LLVM_REVS=""
+CLONE_STATUS=0
{
flock -s 9
for proj_ref in $LLVM_PROJECTS; do
proj="$(echo "$proj_ref" | cut -d ":" -f 1)"
dir="$(echo "$proj_ref" | cut -d ":" -f 2)"
+
+ # If project list exists and it's not in there, ignore
+ if [ ! -z "$PROJECTS" ] && ! is_in_list "$proj" "$PROJECTS"; then
+ continue
+ fi
+
+ # Only clone if the branch exists
if has_remote_branch "$REPOSITORY/$proj.git" "$BRANCH"; then
git clone -b "$BRANCH" "$REPOSITORY/$proj.git" \
--reference "$REFDIR/$proj" \
@@ -225,14 +240,25 @@ LLVM_REVS=""
# Get the latest revision
LLVM_REVS="$LLVM_REVS $(find_svn_rev "$SRCDIR/$dir")"
fi
+
+ # Error if we did specify projects list and branches, but not there
+ else
+ echo "ERROR: Project ($proj) specified in the list, but branch ($BRANCH) not found"
+ CLONE_STATUS=1
+ break
fi
done
# Get the latest revision from all repos
if [ -z "$REVISION" ]; then
- REVISION="r$(find_last_rev $LLVM_REVS)"
+ REVISION="r$(find_last_rev "$LLVM_REVS")"
fi
} 9>"$REFDIR.lock"
+# Make sure we unlock the flock before returning
+if [ "$CLONE_STATUS" -ne 0 ]; then
+ exit $CLONE_STATUS
+fi
+
# CMake
OPTIONS="-DLLVM_BUILD_TESTS=True "
OPTIONS+="-DCMAKE_BUILD_TYPE='$BUILDTYPE' "