blob: 20a1fe62ab3a5abd1f2ec8f9624112b1a20269f6 [file] [log] [blame]
#!/usr/bin/env bash
# Shorthand script for adding/removing llvm subprojects. It has a simpler
# interface than llvm.py, but it calls it to do the actual work.
prog=$(basename $0)
progdir=$(dirname $0)
syntax() {
echo "Syntax: $prog [clang|lldb|lld|rt|libs|all|none] {+/-}[c|r|k|d|l|a|u|t]"
echo " no args: List linked projects"
echo " clang: Clang"
echo " lldb: Clang + lldb"
echo " lld: Clang + lld"
echo " rt: Clang + compiler-rt"
echo " libs: Clang + libcxx + libcxxabi + libunwind"
echo " all: Link all projects"
echo " none: Unlink all projects"
echo " {+/-}: enable / disable projects"
echo " c Clang"
echo " r Compiler-rt"
echo " k lld"
echo " d lldb"
echo " l libcxx"
echo " a libcxxabi"
echo " u libunwind"
echo " t test-suite"
echo " Long options unlink everything before proceeding. Use the short options for fine-tuning"
}
need_all() {
need=$1
clang=$need
rt=$need
libcxx=$need
libcxxabi=$need
libunwind=$need
lld=$need
lldb=$need
tests=$need
}
llvmtool=$progdir/../scripts/llvm.py
# Grab the environment name from $LLVM_SRC
. llvm-common
verify_env
repos=$LLVM_ROOT/repos
source_dir=$LLVM_SRC
env=$(dirname $source_dir)
# No args, list
if [ "$1" = "" ]; then
echo "Use $prog -h for options"
echo
safe_run python3 $llvmtool projects --source-dir $source_dir
exit
fi
need_all UNDEF
# See if the first option is one of the long options
opt=$1
case $opt in
clang)
need_all OFF
clang=ON
shift
;;
lldb)
need_all OFF
clang=ON
lldb=ON
shift
;;
lld)
need_all OFF
clang=ON
lld=ON
shift
;;
rt)
need_all OFF
clang=ON
rt=ON
shift
;;
libs)
need_all OFF
clang=ON
libcxx=ON
libcxxabi=ON
libunwind=ON
shift
;;
all)
need_all ON
shift
;;
none)
need_all OFF
shift
;;
list)
safe_run python3 $llvmtool projects --source-dir $source_dir
exit
;;
-h)
syntax
exit
;;
esac
# Parse short options, if any
while ! test -z $1; do
opt=$1
sign=${opt:0:1}
flag=ON
if [ "$sign" = "-" ]; then
flag=OFF
opt=${opt:1}
elif [ "$sign" = "+" ]; then
opt=${opt:1}
else
# Doesn't look like one of our short options
syntax
exit
fi
case $opt in
c)
clang=$flag
;;
r)
rt=$flag
;;
k)
lld=$flag
;;
d)
lldb=$flag
;;
l)
libcxx=$flag
;;
a)
libcxxabi=$flag
;;
u)
libunwind=$flag
;;
t)
tests=$flag
;;
*)
syntax
exit
esac
shift
done
add=""
remove=""
update() {
project="$1"
flag="$2"
case $flag in
ON)
add="$add $project"
;;
OFF)
remove="$remove $project"
;;
UNDEF)
# Don't care
;;
esac
}
# Update links
update "test-suite" $tests
update "lldb" $lldb
update "lld" $lld
update "libunwind" $libunwind
update "libcxxabi" $libcxxabi
update "libcxx" $libcxx
update "compiler-rt" $rt
update "clang" $clang
if [ "$add" != "" ]; then
add="-a $add"
fi
if [ "$remove" != "" ]; then
remove="-r $remove"
fi
safe_run python3 $llvmtool projects --source-dir $source_dir --repos $repos $add $remove
if [ -d $env/build ]; then
echo "Updating $env/build"
safe_run python3 $llvmtool configure --source-dir $source_dir --build-dir $env/build
fi
if [ -d $env/debug ]; then
echo "Updating $env/debug"
safe_run python3 $llvmtool configure --source-dir $source_dir --build-dir $env/debug
fi