diff options
Diffstat (limited to 'helpers/llvm-projs')
-rwxr-xr-x | helpers/llvm-projs | 150 |
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 |