Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(220)

Side by Side Diff: tools/llvm/unsupported/llvm-cs-toolchain-creator.sh

Issue 8391032: Part 2 of 3: Moving tools/llvm to pnacl/ (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: '' Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 #!/bin/bash
2 # Copyright 2010 The Native Client Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can
4 # be found in the LICENSE file.
5 #
6 #@ This script builds and llvm/cs based cross toolchain for
7 #@ benchmarking puposes
8 #@ NOTE: It must be run from the native_client/ directory.
9
10 ######################################################################
11 # Config
12 ######################################################################
13
14 set -o nounset
15 set -o errexit
16
17 # NOTE: gcc and llvm have to be synchronized
18 # we have chosen toolchains which both are based on gcc-4.2.1
19
20 readonly INSTALL_ROOT=$(pwd)/toolchain/llvm-cs
21
22 readonly CROSS_TARGET=arm-none-linux-gnueabi
23 readonly LLVM_INSTALL_DIR="${INSTALL_ROOT}/${CROSS_TARGET}/llvm"
24 readonly LLVMGCC_INSTALL_DIR="${INSTALL_ROOT}/${CROSS_TARGET}/llvm-gcc-4.2"
25
26 readonly LLVMGCC_TARBALL=$(pwd)/../third_party/llvm/llvm-gcc-4.2-88663.tar.bz2
27 readonly LLVM_TARBALL=$(pwd)/../third_party/llvm/llvm-88663.tar.bz2
28
29 readonly MAKE_OPTS="-j8 VERBOSE=1"
30
31 readonly TMP=/tmp/llvm-cs
32
33 # These are simple compiler wrappers to force 32bit builds
34 readonly CC32=$(readlink -f tools/llvm/mygcc32)
35 readonly CXX32=$(readlink -f tools/llvm/myg++32)
36
37
38 readonly CODE_SOURCERY_ROOT=${INSTALL_ROOT}/codesourcery
39 readonly CROSS_TARGET_AS="${CODE_SOURCERY_ROOT}/arm-2007q3/bin/${CROSS_TARGET}-a s"
40 readonly CROSS_TARGET_LD="${CODE_SOURCERY_ROOT}/arm-2007q3/bin/${CROSS_TARGET}-l d"
41
42 readonly SYSROOT="${CODE_SOURCERY_ROOT}/arm-2007q3/${CROSS_TARGET}/libc"
43
44 readonly CS_URL=http://www.codesourcery.com/sgpp/lite/arm/portal/package1787/pub lic/arm-none-linux-gnueabi/arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gn u.tar.bz2
45
46 ######################################################################
47 # Helper
48 ######################################################################
49
50 Banner() {
51 echo "######################################################################"
52 echo "$@"
53 echo "######################################################################"
54 }
55
56
57 SubBanner() {
58 echo "......................................................................"
59 echo "$@"
60 echo "......................................................................"
61 }
62
63
64 Usage() {
65 egrep "^#@" $0 | cut --bytes=3-
66 }
67
68
69 DownloadOrCopy() {
70 if [[ -f "$2" ]] ; then
71 echo "$2 already in place"
72 elif [[ $1 =~ 'http://' ]] ; then
73 SubBanner "downloading from $1"
74 wget $1 -O $2
75 else
76 SubBanner "copying from $1"
77 cp $1 $2
78 fi
79 }
80
81
82 # Use this when not a lot of output is expected
83 Run() {
84 local message=$1
85 shift
86 SubBanner "${message}"
87 echo "COMMMAND: $@"
88 "$@" || {
89 echo
90 Banner "ERROR: $@"
91 exit -1
92 }
93 }
94
95
96 RunWithLog() {
97 local message=$1
98 local log=$2
99 shift 2
100 SubBanner "${message}"
101 echo "LOGFILE: ${log}"
102 echo "PWD: $(pwd)"
103 echo "COMMMAND: $@"
104 "$@" > ${log} 2>&1 || {
105 tail -1000 ${log}
106 echo
107 Banner "ERROR"
108 echo "LOGFILE: ${log}"
109 echo "PWD: $(pwd)"
110 echo "COMMMAND: $@"
111 exit -1
112 }
113 }
114
115 ######################################################################
116 #
117 ######################################################################
118
119 # some sanity checks to make sure this script is run from the right place
120 PathSanityCheck() {
121 if [[ $(basename $(pwd)) != "native_client" ]] ; then
122 echo "ERROR: run this script from the native_client/ dir"
123 exit -1
124 fi
125
126 if ! mkdir -p "${INSTALL_ROOT}" ; then
127 echo "ERROR: ${INSTALL_ROOT} can't be created."
128 exit -1
129 fi
130 }
131
132
133 # TODO(robertm): consider wiping all of ${BASE_DIR}
134 ClearInstallDir() {
135 Banner "clearing dirs in ${INSTALL_ROOT}"
136 rm -rf ${INSTALL_ROOT}/*
137 }
138
139
140 DownloadOrCopyAndInstallSourcery() {
141 local tarball="${TMP}/${CS_URL##*/}"
142 DownloadOrCopy ${CS_URL} ${tarball}
143 rm -rf ${CODE_SOURCERY_ROOT}
144 mkdir -p ${CODE_SOURCERY_ROOT}
145 tar jxf ${tarball} -C ${CODE_SOURCERY_ROOT}
146
147 # Verify our CodeSourcery toolchain installation.
148 if [[ ! -d "${SYSROOT}" ]]; then
149 echo -n "Error: CodeSourcery does not contain libc for ${CROSS_TARGET}: "
150 echo "${SYSROOT} not found."
151 exit -1
152 fi
153
154 for tool in ${CROSS_TARGET_AS} ${CROSS_TARGET_LD}; do
155 if [[ ! -e $tool ]]; then
156 echo "${tool} not found; exiting."
157 exit -1
158 fi
159 done
160 }
161
162
163
164 # Build basic llvm tools
165 ConfigureAndBuildLlvm() {
166 local saved_dir=$(pwd)
167 local tmpdir=${TMP}/llvm
168 Banner "Building llvm in ${tmpdir}"
169 rm -rf ${tmpdir}
170 mkdir -p ${tmpdir}
171 cd ${tmpdir}
172
173 Run "Untaring" tar jxf ${LLVM_TARBALL}
174 cd llvm
175
176 RunWithLog "Configure" ${TMP}/llvm.configure.log\
177 env -i PATH=/usr/bin/:/bin \
178 CC=${CC32} \
179 CXX=${CXX32} \
180 ./configure \
181 --disable-jit \
182 --enable-optimized \
183 --enable-targets=arm \
184 --target=arm-none-linux-gnueabi \
185 --prefix=${LLVM_INSTALL_DIR} \
186 --with-llvmgccdir=${LLVMGCC_INSTALL_DIR}
187
188 RunWithLog "Make" ${TMP}/llvm.make.log \
189 env -i PATH=/usr/bin/:/bin \
190 CC=${CC32} \
191 CXX=${CXX32} \
192 make ${MAKE_OPTS}
193
194 RunWithLog "Installing LLVM" ${TMP}/llvm-install.log \
195 make ${MAKE_OPTS} install
196
197 cd ${saved_dir}
198 }
199
200
201 ConfigureAndBuildGcc() {
202 local tmpdir=${TMP}/llvm-gcc
203 local saved_dir=$(pwd)
204
205 Banner "Building llvmgcc in ${tmpdir}"
206
207 rm -rf ${tmpdir}
208 mkdir -p ${tmpdir}
209 cd ${tmpdir}
210
211 Run "Untaring llvm-gcc" \
212 tar jxf ${LLVMGCC_TARBALL}
213
214 # NOTE: you cannot build llvm-gcc inside the source directory
215 mkdir -p build
216 cd build
217 # TODO(robertm): do we really need CROSS_TARGET_*
218 RunWithLog "Configure" ${TMP}/llvm-gcc.configure.log \
219 env -i PATH=/usr/bin/:/bin \
220 CC=${CC32} \
221 CXX=${CXX32} \
222 CFLAGS="-Dinhibit_libc" \
223 CXXFLAGS="-Dinhibit_libc" \
224 ../llvm-gcc-4.2/configure \
225 --prefix=${LLVMGCC_INSTALL_DIR} \
226 --enable-llvm=${LLVM_INSTALL_DIR} \
227 --program-prefix=llvm- \
228 --disable-libmudflap \
229 --disable-decimal-float \
230 --disable-libssp \
231 --disable-libgomp \
232 --enable-languages=c,c++ \
233 --disable-threads \
234 --disable-libstdcxx-pch \
235 --disable-shared \
236 --target=${CROSS_TARGET} \
237 --with-arch=armv6 \
238 --with-fpu=vfp \
239 --with-as=${CROSS_TARGET_AS} \
240 --with-ld=${CROSS_TARGET_LD} \
241 --with-sysroot=${SYSROOT}
242
243 RunWithLog "Make" ${TMP}/llvm-gcc.make.log \
244 env -i PATH=/usr/bin/:/bin:${CODE_SOURCERY_ROOT}/arm-2007q3/bin \
245 CC=${CC32} \
246 CXX=${CXX32} \
247 make \
248 ${MAKE_OPTS}
249
250 RunWithLog "Install" ${TMP}/llvm-gcc.install.log \
251 env -i PATH=/usr/bin/:/bin:${CODE_SOURCERY_ROOT}/arm-2007q3/bin \
252 make install
253
254 cd ${saved_dir}
255 }
256
257
258
259 ######################################################################
260 # Main
261 ######################################################################
262 if [ $# -eq 0 ] ; then
263 echo
264 echo "ERROR: you must specify a mode on the commandline:"
265 echo
266 Usage
267 exit -1
268 fi
269
270 MODE=$1
271 shift
272
273 #@
274 #@ help
275 #@
276 #@ print help for all modes
277 if [ $MODE} = 'help' ] ; then
278 Usage
279 exit 0
280 fi
281
282 #@
283 #@ toolchain
284 #@
285 #@ create an llvm/cs based toolchain
286 if [ ${MODE} = 'toolchain' ] ; then
287 mkdir -p ${TMP}
288 PathSanityCheck
289 ClearInstallDir
290 DownloadOrCopyAndInstallSourcery
291 ConfigureAndBuildLlvm
292 ConfigureAndBuildGcc
293 fi
294
295 echo "ERROR: unknown mode ${MODE}"
296 exit -1
OLDNEW
« no previous file with comments | « tools/llvm/unsupported/driver/pnacl-pexecheck.py ('k') | tools/llvm/unsupported/non_bitcode_symbols.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698