aboutsummaryrefslogtreecommitdiff
path: root/helpers/llvm-projs
diff options
context:
space:
mode:
authorRenato Golin <rengolin@gmail.com>2016-04-26 11:02:23 +0100
committerRenato Golin <rengolin@gmail.com>2016-04-26 11:02:23 +0100
commit94cc104f044261f74fbff3ff587855df1a05f64d (patch)
tree7c6664fdf7e7fab54fea926b1fc6196a09b6540f /helpers/llvm-projs
Initial Commit, moving from dev-private and removing private stuff
Diffstat (limited to 'helpers/llvm-projs')
-rwxr-xr-xhelpers/llvm-projs150
1 files changed, 150 insertions, 0 deletions
diff --git a/helpers/llvm-projs b/helpers/llvm-projs
new file mode 100755
index 0000000..e0ff2da
--- /dev/null
+++ b/helpers/llvm-projs
@@ -0,0 +1,150 @@
+#!/usr/bin/env bash
+
+# This script keeps track of all projects that are linked to the llvm src
+# directory. It can detect, enable, disable and map to specific projects,
+# so different builds get to see the source dir as they saw originally.
+
+. llvm-common
+
+prog=`basename $0`
+syntax() {
+ echo "Syntax: $prog {+/-}[clang|rt|libs|tools|test]"
+ echo " noarg: list linked projects"
+ echo " {+/-}: link / unlik projects (default: link)"
+}
+
+# Dirs and links into LLVM
+clang_dir=clang
+clang_link=tools/clang
+rt_dir=compiler-rt
+rt_link=projects/compiler-rt
+libcxx_dir=libcxx
+libcxx_link=projects/libcxx
+libcxxabi_dir=libcxxabi
+libcxxabi_link=projects/libcxxabi
+libunwind_dir=libunwind
+libunwind_link=projects/libunwind
+lld_dir=lld
+lld_link=tools/lld
+lldb_dir=lldb
+lldb_link=tools/lldb
+tests_dir=test-suite
+tests_link=projects/test-suite
+
+# Check if link exists
+has() {
+ link=$1
+ [ -s "$LLVM_SRC/$link" ]
+}
+
+# Initialise status
+init() {
+ link=$1
+ if has $link; then
+ echo "true";
+ else
+ echo "false"
+ fi
+}
+
+# Link/Unlink upon need
+update() {
+ dir=$1
+ link=$2
+ need=$3
+ if $need; then
+ ln -sf $LLVM_SRC/../$dir $LLVM_SRC/$link
+ else
+ rm -f $LLVM_SRC/$link
+ fi
+}
+
+# Lists linked projects and quit
+list_all() {
+ echo "Projects linked:"
+ has $clang_link && echo " + Clang"
+ has $rt_link && echo " + Compiler-RT"
+ has $libcxx_link && echo " + LibC++"
+ has $libcxxabi_link && echo " + LibC++abi"
+ has $libunwind_link && echo " + LibUnwind"
+ has $lld_link && echo " + LLD"
+ has $lldb_link && echo " + LLDB"
+ has $tests_link && echo " + Test-Suite"
+ echo
+}
+
+# No args, list
+if [ "$1" = "" ]; then
+ echo "Use $prog -h for options"
+ echo
+ list_all
+ exit
+fi
+
+# Need/not need
+clang=`init $clang_link`
+rt=`init $rt_link`
+libcxx=`init $libcxx_link`
+libcxxabi=`init $libcxxabi_link`
+libunwind=`init $libunwind_link`
+lld=`init $lld_link`
+lldb=`init $lldb_link`
+tests=`init $tests_link`
+
+# Check all needed projects
+while ! test -z $1; do
+ opt=$1
+ sign=${opt:0:1}
+ flag=true
+ if [ "$sign" = "-" ]; then
+ flag=false
+ opt=${opt:1}
+ fi
+ if [ "$sign" = "+" ]; then
+ opt=${opt:1}
+ fi
+
+ case $opt in
+ clang)
+ clang=$flag
+ ;;
+ rt)
+ rt=$flag
+ ;;
+ libs)
+ libcxx=$flag
+ libcxxabi=$flag
+ libunwind=$flag
+ ;;
+ tools)
+ lld=$flag
+ lldb=$flag
+ ;;
+ test)
+ tests=$flag
+ ;;
+ list)
+ list_all
+ exit
+ ;;
+ -h)
+ syntax
+ exit
+ ;;
+ *)
+ syntax
+ exit 1
+ esac
+ shift
+done
+
+# Update links
+update $tests_dir $tests_link $tests
+update $lldb_dir $lldb_link $lldb
+update $lld_dir $lld_link $lld
+update $libunwind_dir $libunwind_link $libunwind
+update $libcxxabi_dir $libcxxabi_link $libcxxabi
+update $libcxx_dir $libcxx_link $libcxx
+update $rt_dir $rt_link $rt
+update $clang_dir $clang_link $clang
+list_all