aboutsummaryrefslogtreecommitdiff
path: root/helpers/llvm-build
blob: 8d2fab4ffe261c0ef2783b5686c60a10e89aee62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/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
ninja=
if which ninja 2>&1 > /dev/null; then
  make=ninja
  ninja="-G 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
  mkdir -p $builddir
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 $ninja $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