summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtcwg-llvm-build.sh30
-rwxr-xr-xtcwg-llvm-common.sh14
2 files changed, 41 insertions, 3 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' "
diff --git a/tcwg-llvm-common.sh b/tcwg-llvm-common.sh
index 180faa88..c7139b73 100755
--- a/tcwg-llvm-common.sh
+++ b/tcwg-llvm-common.sh
@@ -100,7 +100,7 @@ find_svn_rev() {
# Find the largest revision of a list
find_last_rev() {
local LAST=0
- for rev in "$@"; do
+ for rev in $@; do
[ "$rev" -gt "$LAST" ] && LAST=$rev
done
echo "$LAST"
@@ -118,6 +118,18 @@ has_remote_branch() {
fi
}
+# Find element in array
+is_in_list() {
+ local ITEM="$1"
+ shift
+ for item in $@; do
+ if [ "$ITEM" = "$item" ]; then
+ return 0
+ fi
+ done
+ return 1
+}
+
# Environment Variables and default values
CPUS=$(nproc --all)
# We may use between 500MB and 1GB per link job