| #!/usr/bin/env bash |
| |
| # This script helps you build LLVM. |
| |
| . llvm-common |
| |
| progdir=$(dirname $0) |
| llvmtool=$progdir/../scripts/llvm.py |
| |
| safe_run verify_env |
| source_dir=$LLVM_SRC |
| |
| ## CMD line options and defaults |
| CPUS=$(grep -c proc /proc/cpuinfo) |
| PARALLEL=-j$CPUS |
| build_dir=$LLVM_BLD |
| install_dir=$LLVM_INSTALL |
| build_type=Release |
| shared= |
| targets= |
| prog=`basename $0` |
| syntax="Syntax: $prog [-jN] [targets]" |
| minimal_targets="--cmake-def LLVM_TARGETS_TO_BUILD='ARM;X86;AArch64'" |
| link_jobs= |
| |
| if [ "$1" = "-h" ]; then |
| echo $syntax |
| exit 0 |
| fi |
| |
| ## Choose between make and ninja |
| generator="Unix Makefiles" |
| if which ninja > /dev/null 2>&1; then |
| generator="Ninja" |
| fi |
| |
| ## Debug mode, make it lighter |
| if [ "$LLVM_DEBUG" = true ]; then |
| build_type=Debug |
| shared="--cmake-def BUILD_SHARED_LIBS=True" |
| targets=$minimal_targets |
| fi |
| |
| # Building on ARM? |
| if grep -q "ARM.* Processor" /proc/cpuinfo; then |
| targets=$minimal_targets |
| if [ "$generator" = "Ninja" ]; then |
| link=$(free -g | awk '/Mem/ {print $2}') |
| if [ "$link" -gt "$CPUS" ]; then |
| link=$CPUS |
| else |
| link=$((link+1)) |
| fi |
| link_jobs="--cmake-def LLVM_PARALLEL_LINK_JOBS=$link" |
| fi |
| fi |
| |
| ## Make sure sure build dir is there |
| if [ ! -d $build_dir ]; then |
| safe_run mkdir -p $build_dir |
| fi |
| cd $build_dir |
| |
| ## Allow the user to override the number of CPUs used with -jN |
| if [[ $1 =~ -j[0-9]+ ]]; then |
| PARALLEL=$1 |
| shift |
| fi |
| |
| ## Re-run CMake if files are damaged / not there |
| if [ ! -f build.ninja ] && [ ! -f Makefile ]; then |
| echo " + Configuring Build" |
| safe_run python3 $llvmtool configure \ |
| --source-dir $source_dir --build-dir $build_dir \ |
| --cmake-generator "$generator" \ |
| --cmake-def CMAKE_BUILD_TYPE=$build_type \ |
| --cmake-def LLVM_BUILD_TESTS=True \ |
| --cmake-def LLVM_ENABLE_ASSERTIONS=True \ |
| --cmake-def PYTHON_EXECUTABLE=/usr/bin/python2 \ |
| --cmake-def CMAKE_INSTALL_PREFIX=$install_dir \ |
| --cmake-def LLVM_LIT_ARGS="-sv $PARALLEL" \ |
| $LLVM_CMAKE_FLAGS $targets $shared $link_jobs |
| fi |
| |
| ## Build |
| if [ "$1" == "" ]; then |
| echo " + Building LLVM" |
| safe_run python3 $llvmtool build --build-dir $build_dir --build-flag=$PARALLEL |
| else |
| for target in "$@"; do |
| echo " + Running $target" |
| safe_run python3 $llvmtool build --build-dir $build_dir \ |
| --build-flag=$PARALLEL --build-flag $target |
| done |
| fi |
| |