#!/bin/sh set -e llvm_rev=929d9ef111cc0053e245d04464c5ba9fba7727b2 clang_rev=56312023bf62cb40d2e33ea5e14d55c1e42303a7 lldb_lldb=f05a54ef760f7c71161e262197db38a2ee4e491e missing= pyinc="-I/usr/local/include/python2.7" stdlib= if [ -f /usr/lib/libc++.so ]; then CC=clang CXX=clang++ stdlib="-stdlib=libc++" else if [ -f /usr/local/bin/g++ ]; then CC=/usr/local/bin/gcc CC=/usr/local/bin/g++ else CC=gcc CXX=g++ fi case $($CC --version | egrep -o '[0-9]*\.[0-9]*\.[0-9]*') in 4.6.[23456789]) ;; 4.[789]*) ;; [56789]*) ;; *) missing="gcc(4.6.2 or later)" ;; esac fi for tool in cmake git ninja python swig $compiler; do if ! which $tool >/dev/null 2>&1; then missing="$missing $tool" fi done if [ -n "$missing" ]; then echo "error: the following ports or packages must be installed:" >&2 echo $missing >&2 exit 1 fi do_fetch() { if [ ! -d llvm ]; then echo "llvm directory does not exist -- cloning from github" git clone https://github.com/llvm-mirror/llvm.git cd llvm/tools git clone https://github.com/llvm-mirror/clang git clone https://github.com/fbsd/lldb.git cd ../.. else echo "updating existing git clones" for dir in llvm llvm/tools/clang llvm/tools/lldb; do cd $dir git fetch --all cd - done fi } do_checkout() { echo "checking out required versions" git checkout $llvm_rev cd tools/clang git checkout $clang_rev cd ../lldb git checkout $lldb_rev cd ../.. } do_cmake() { echo "Configuring build" # assume we have clang CC=$CC CXX=$CXX cmake ../ -G Ninja -DCMAKE_CXX_FLAGS="$stdlib $pyinc -g" } do_build() { echo "Building lldb" cd build ninja lldb cd .. } do_fetch cd llvm do_checkout if [ ! -d build ]; then mkdir build cd build do_cmake cd .. fi do_build cd .. echo "lldb should now be built as: ./llvm/build/bin/lldb"