@@ -14,112 +14,35 @@ function show_usage() {
14
14
cat << EOF
15
15
Usage: build_install_llvm.sh [options] -- [cmake-args]
16
16
17
- Checkout svn sources and run cmake with the specified arguments. Used
18
- inside docker container.
17
+ Run cmake with the specified arguments. Used inside docker container.
19
18
Passes additional -DCMAKE_INSTALL_PREFIX and puts the build results into
20
- /tmp/clang-install/ directory.
19
+ the directory specified by --to option .
21
20
22
21
Available options:
23
22
-h|--help show this help message
24
- -b|--branch svn branch to checkout, i.e. 'trunk',
25
- 'branches/release_40'
26
- (default: 'trunk')
27
- -r|--revision svn revision to checkout
28
- -c|--cherrypick revision to cherry-pick. Can be specified multiple times.
29
- Cherry-picks are performed in the sorted order using the
30
- following command:
31
- 'svn patch <(svn diff -c \$ rev)'.
32
- -p|--llvm-project name of an svn project to checkout. Will also add the
33
- project to a list LLVM_ENABLE_PROJECTS, passed to CMake.
34
- For clang, please use 'clang', not 'cfe'.
35
- Project 'llvm' is always included and ignored, if
36
- specified.
37
- Can be specified multiple times.
38
23
-i|--install-target name of a cmake install target to build and include in
39
24
the resulting archive. Can be specified multiple times.
40
- Required options: At least one --install-target.
25
+ --to destination directory where to install the targets.
26
+ Required options: --to, at least one --install-target.
41
27
42
28
All options after '--' are passed to CMake invocation.
43
29
EOF
44
30
}
45
31
46
- LLVM_SVN_REV=" "
47
- CHERRYPICKS=" "
48
- LLVM_BRANCH=" "
49
32
CMAKE_ARGS=" "
50
33
CMAKE_INSTALL_TARGETS=" "
51
- # We always checkout llvm
52
- LLVM_PROJECTS=" llvm"
53
- CMAKE_LLVM_ENABLE_PROJECTS=" "
54
- CLANG_TOOLS_EXTRA_ENABLED=0
55
-
56
- function contains_project() {
57
- local TARGET_PROJ=" $1 "
58
- local PROJ
59
- for PROJ in $LLVM_PROJECTS ; do
60
- if [ " $PROJ " == " $TARGET_PROJ " ]; then
61
- return 0
62
- fi
63
- done
64
- return 1
65
- }
66
-
67
- function append_project() {
68
- local PROJ=" $1 "
69
-
70
- LLVM_PROJECTS=" $LLVM_PROJECTS $PROJ "
71
- if [ " $CMAKE_LLVM_ENABLE_PROJECTS " != " " ]; then
72
- CMAKE_LLVM_ENABLE_PROJECTS=" $CMAKE_LLVM_ENABLE_PROJECTS ;$PROJ "
73
- else
74
- CMAKE_LLVM_ENABLE_PROJECTS=" $PROJ "
75
- fi
76
- }
34
+ CLANG_INSTALL_DIR=" "
77
35
78
36
while [[ $# -gt 0 ]]; do
79
37
case " $1 " in
80
- -r|--revision)
81
- shift
82
- LLVM_SVN_REV=" $1 "
83
- shift
84
- ;;
85
- -c|--cherrypick)
86
- shift
87
- CHERRYPICKS=" $CHERRYPICKS $1 "
88
- shift
89
- ;;
90
- -b|--branch)
38
+ -i|--install-target)
91
39
shift
92
- LLVM_BRANCH= " $1 "
40
+ CMAKE_INSTALL_TARGETS= " $CMAKE_INSTALL_TARGETS $1 "
93
41
shift
94
42
;;
95
- -p|--llvm-project )
43
+ --to )
96
44
shift
97
- PROJ=" $1 "
98
- shift
99
-
100
- if [ " $PROJ " == " cfe" ]; then
101
- PROJ=" clang"
102
- fi
103
-
104
- if [ " $PROJ " == " clang-tools-extra" ]; then
105
- if [ $CLANG_TOOLS_EXTRA_ENABLED -ne 0 ]; then
106
- echo " Project 'clang-tools-extra' is already enabled, ignoring extra occurrences."
107
- else
108
- CLANG_TOOLS_EXTRA_ENABLED=1
109
- fi
110
-
111
- continue
112
- fi
113
-
114
- if ! contains_project " $PROJ " ; then
115
- append_project " $PROJ "
116
- else
117
- echo " Project '$PROJ ' is already enabled, ignoring extra occurrences."
118
- fi
119
- ;;
120
- -i|--install-target)
121
- shift
122
- CMAKE_INSTALL_TARGETS=" $CMAKE_INSTALL_TARGETS $1 "
45
+ CLANG_INSTALL_DIR=" $1 "
123
46
shift
124
47
;;
125
48
--)
@@ -142,109 +65,29 @@ if [ "$CMAKE_INSTALL_TARGETS" == "" ]; then
142
65
exit 1
143
66
fi
144
67
145
- if [ $CLANG_TOOLS_EXTRA_ENABLED -ne 0 ]; then
146
- if ! contains_project " clang" ; then
147
- echo " Project 'clang-tools-extra' was enabled without 'clang'."
148
- echo " Adding 'clang' to a list of projects."
149
-
150
- append_project " clang"
151
- fi
152
- fi
153
-
154
- if [ " $LLVM_BRANCH " == " " ]; then
155
- LLVM_BRANCH=" trunk"
156
- fi
157
-
158
- if [ " $LLVM_SVN_REV " != " " ]; then
159
- SVN_REV_ARG=" -r$LLVM_SVN_REV "
160
- echo " Checking out svn revision r$LLVM_SVN_REV ."
161
- else
162
- SVN_REV_ARG=" "
163
- echo " Checking out latest svn revision."
68
+ if [ " $CLANG_INSTALL_DIR " == " " ]; then
69
+ echo " No install directory. Please specify the --to argument."
70
+ exit 1
164
71
fi
165
72
166
- # Sort cherrypicks and remove duplicates.
167
- CHERRYPICKS=" $( echo " $CHERRYPICKS " | xargs -n1 | sort | uniq | xargs) "
168
-
169
- function apply_cherrypicks() {
170
- local CHECKOUT_DIR=" $1 "
171
-
172
- [ " $CHERRYPICKS " == " " ] || echo " Applying cherrypicks"
173
- pushd " $CHECKOUT_DIR "
174
-
175
- # This function is always called on a sorted list of cherrypicks.
176
- for CHERRY_REV in $CHERRYPICKS ; do
177
- echo " Cherry-picking r$CHERRY_REV into $CHECKOUT_DIR "
178
-
179
- local PATCH_FILE=" $( mktemp) "
180
- svn diff -c $CHERRY_REV > " $PATCH_FILE "
181
- svn patch " $PATCH_FILE "
182
- rm " $PATCH_FILE "
183
- done
184
-
185
- popd
186
- }
187
-
188
73
CLANG_BUILD_DIR=/tmp/clang-build
189
- CLANG_INSTALL_DIR=/tmp/clang-install
190
-
191
- mkdir " $CLANG_BUILD_DIR "
192
-
193
- # Get the sources from svn.
194
- echo " Checking out sources from svn"
195
- mkdir " $CLANG_BUILD_DIR /src"
196
- for LLVM_PROJECT in $LLVM_PROJECTS ; do
197
- if [ " $LLVM_PROJECT " == " clang" ]; then
198
- SVN_PROJECT=" cfe"
199
- else
200
- SVN_PROJECT=" $LLVM_PROJECT "
201
- fi
202
-
203
- echo " Checking out https://llvm.org/svn/llvm-project/$SVN_PROJECT to $CLANG_BUILD_DIR /src/$LLVM_PROJECT "
204
- svn co -q $SVN_REV_ARG \
205
- " https://llvm.org/svn/llvm-project/$SVN_PROJECT /$LLVM_BRANCH " \
206
- " $CLANG_BUILD_DIR /src/$LLVM_PROJECT "
207
-
208
- # We apply cherrypicks to all repositories regardless of whether the revision
209
- # changes this repository or not. For repositories not affected by the
210
- # cherrypick, applying the cherrypick is a no-op.
211
- apply_cherrypicks " $CLANG_BUILD_DIR /src/$LLVM_PROJECT "
212
- done
213
-
214
- if [ $CLANG_TOOLS_EXTRA_ENABLED -ne 0 ]; then
215
- echo " Checking out https://llvm.org/svn/llvm-project/clang-tools-extra to $CLANG_BUILD_DIR /src/clang/tools/extra"
216
- svn co -q $SVN_REV_ARG \
217
- " https://llvm.org/svn/llvm-project/clang-tools-extra/$LLVM_BRANCH " \
218
- " $CLANG_BUILD_DIR /src/clang/tools/extra"
219
74
220
- apply_cherrypicks " $CLANG_BUILD_DIR /src/clang/tools/extra"
221
- fi
222
-
223
- CHECKSUMS_FILE=" /tmp/checksums/checksums.txt"
224
-
225
- if [ -f " $CHECKSUMS_FILE " ]; then
226
- echo " Validating checksums for LLVM checkout..."
227
- python " $( dirname $0 ) /llvm_checksum/llvm_checksum.py" -c " $CHECKSUMS_FILE " \
228
- --partial --multi_dir " $CLANG_BUILD_DIR /src"
229
- else
230
- echo " Skipping checksumming checks..."
231
- fi
75
+ mkdir -p " $CLANG_INSTALL_DIR "
232
76
233
- mkdir " $CLANG_BUILD_DIR /build"
77
+ mkdir -p " $CLANG_BUILD_DIR /build"
234
78
pushd " $CLANG_BUILD_DIR /build"
235
79
236
80
# Run the build as specified in the build arguments.
237
81
echo " Running build"
238
82
cmake -GNinja \
239
83
-DCMAKE_INSTALL_PREFIX=" $CLANG_INSTALL_DIR " \
240
- -DLLVM_ENABLE_PROJECTS=" $CMAKE_LLVM_ENABLE_PROJECTS " \
241
84
$CMAKE_ARGS \
242
85
" $CLANG_BUILD_DIR /src/llvm"
243
86
ninja $CMAKE_INSTALL_TARGETS
244
87
245
88
popd
246
89
247
90
# Cleanup.
248
- rm -rf " $CLANG_BUILD_DIR "
91
+ rm -rf " $CLANG_BUILD_DIR /build "
249
92
250
93
echo " Done"
0 commit comments