blob: 938caa56d72209d3bcaf8414771992651c61d3d0 [file] [log] [blame]
#!/usr/bin/env bash
# This script helps you build LLVM. It can update the repositories first,
# run the check-all after and even install it in your system. Since the
# LLVM tree changes constantly, it's recommended that you run this script
# with update+check at least once a week, and most importantly, before you
# begin a big change, to make sure the repos are current and stable.
. llvm-common
## CMD line options and defaults
CPUs=`grep -c proc /proc/cpuinfo`
build_dir=$LLVM_BLD
install_dir=$LLVM_BLD/../../install
build_type=Release
shared=
targets=
prog=`basename $0`
syntax="Syntax: $prog [-u(pdate)] [-c(check-all)] [-i(nstall)] [-d(debug)]"
update=false
check=false
master=false
debug=false
inst=false
while getopts "ucimd" opt; do
case $opt in
u)
update=true
;;
c)
check=true
;;
i)
inst=true
;;
m)
master=true
;;
d)
debug=true
build_dir=$LLVM_BLD/../debug
;;
*)
echo $syntax
exit 1
;;
esac
done
## Run llvm-sync before
if $update; then
echo " + Updating Repositories"
safe_run llvm-sync -a
fi
## Make sure all branches are on master
if $master; then
echo " + Checking out master"
safe_run llvm-branch master
fi
## Choose between make and ninja
make=make
generator="Unix Makefiles"
if which ninja 2>&1 > /dev/null; then
make=ninja
generator="Ninja"
fi
## Debug mode, make it lighter
if $debug; then
build_type=Debug
shared=-DBUILD_SHARED_LIBS=True
targets=-DLLVM_TARGETS_TO_BUILD="ARM;X86;AArch64"
fi
## Make sure sure build dir is there
if [ ! -d $build_dir ]; then
safe_run mkdir -p $build_dir
fi
cd $build_dir
## Re-run CMake file files are damaged / not there
if [ ! -f build.ninja ] && [ ! -f Makefile ]; then
echo " + Configuring Build"
safe_run cmake -G "$generator" $LLVM_SRC \
-DCMAKE_BUILD_TYPE=$build_type \
-DLLVM_BUILD_TESTS=True \
-DLLVM_ENABLE_ASSERTIONS=True \
-DPYTHON_EXECUTABLE=/usr/bin/python2 \
-DCMAKE_INSTALL_PREFIX=$install_dir \
$targets $shared
fi
## Build
echo " + Building LLVM"
safe_run $make -j$CPUs
## Check
if $check; then
echo " + Running Tests"
safe_run $make check-all
fi
## Install
if $inst; then
echo " + Installing on the System"
safe_run $make install
fi