2 # Written by Uwe Hermann <uwe@hermann-uwe.de>, released as public domain.
3 # Modified by Piotr Esden-Tempski <piotr@esden.net>, released as public domain.
5 TARGET=arm-elf # Or: TARGET=arm-none-eabi
6 PREFIX=${HOME}/arm-elf # Install location of your final toolchain
7 PARALLEL="" # Or: PARALLEL="-j 5" for 4 CPU's
8 DARWIN_OPT_PATH=/opt/local # Path in which MacPorts or Fink is installed
10 BINUTILS=binutils-2.19.1
21 export PATH="${PREFIX}/bin:${PATH}"
25 echo "Found Linux OS."
30 echo "Found Darwin OS."
31 GCCFLAGS="--with-gmp=${DARWIN_OPT_PATH} \
32 --with-mpfr=${DARWIN_OPT_PATH} \
33 -with-libiconv-prefix=${DARWIN_OPT_PATH}"
34 GDBFLAGS="--disable-werror"
37 echo "Found unknown OS. Aborting!"
42 if [ ! -e sources ]; then
48 echo "Downloading binutils sources..."
49 wget -c http://ftp.gnu.org/gnu/binutils/${BINUTILS}.tar.bz2
51 echo "Downloading gcc sources..."
52 wget -c ftp://ftp.gnu.org/gnu/gcc/${GCC}/${GCC}.tar.bz2
54 echo "Downloading newlib sources..."
55 wget -c ftp://sources.redhat.com/pub/newlib/${NEWLIB}.tar.gz
57 echo "Downloading gdb sources..."
58 wget -c ftp://ftp.gnu.org/gnu/gdb/${GDB}.tar.bz2
60 if [ ${LIBSTM32_EN} != 0 ]; then
61 if [ ! -e libcmsis-${LIBCMSIS}.tar.bz2 ]; then
62 echo "Cloning libcmsis sources..."
63 git clone git://git.open-bldc.org/libcmsis.git
65 git archive --format=tar --prefix=libcmsis-${LIBCMSIS}/ ${LIBCMSIS} | \
66 bzip2 --stdout > ../libcmsis-${LIBCMSIS}.tar.bz2
71 if [ ! -e libstm32-${LIBSTM32}.tar.bz2 ]; then
72 echo "Cloning libstm32 sources..."
73 git clone git://git.open-bldc.org/libstm32.git
75 git archive --format=tar --prefix=libstm32-${LIBSTM32}/ ${LIBSTM32} | \
76 bzip2 --stdout > ../libstm32-${LIBSTM32}.tar.bz2
81 if [ ! -e libstm32usb-${LIBSTM32USB}.tar.bz2 ]; then
82 echo "Cloning libstm32usb sources..."
83 git clone git://git.open-bldc.org/libstm32usb.git
85 git archive --format=tar --prefix=libstm32usb-${LIBSTM32USB}/ ${LIBSTM32USB} | \
86 bzip2 --stdout > ../libstm32usb-${LIBSTM32USB}.tar.bz2
92 if [ ${LIBOPENSTM32_EN} != 0 ]; then
93 if [ ! -e libopenstm32-${LIBOPENSTM32}.tar.bz2 ]; then
94 echo "Cloning libopenstm32 sources..."
95 git clone git://libopenstm32.git.sourceforge.net/gitroot/libopenstm32/libopenstm32
97 git archive --format=tar --prefix=libopenstm32-${LIBOPENSTM32}/ ${LIBOPENSTM32} | \
98 bzip2 --stdout > ../libopenstm32-${LIBOPENSTM32}.tar.bz2
106 if [ ! -e build ]; then
110 if [ ! -e .${BINUTILS}.build ]; then
111 echo "******************************************************************"
112 echo "* Unpacking ${BINUTILS}"
113 echo "******************************************************************"
114 tar xfvj sources/${BINUTILS}.tar.bz2
116 echo "******************************************************************"
117 echo "* Configuring ${BINUTILS}"
118 echo "******************************************************************"
119 ../${BINUTILS}/configure --target=${TARGET} \
125 --disable-nls || exit
126 echo "******************************************************************"
127 echo "* Building ${BINUTILS}"
128 echo "******************************************************************"
129 make ${PARALLEL} || exit
130 echo "******************************************************************"
131 echo "* Installing ${BINUTILS}"
132 echo "******************************************************************"
135 echo "******************************************************************"
136 echo "* Cleaning up ${BINUTILS}"
137 echo "******************************************************************"
138 touch .${BINUTILS}.build
139 rm -rf build/* ${BINUTILS}
142 if [ ! -e .${GCC}-boot.build ]; then
143 echo "******************************************************************"
144 echo "* Unpacking ${GCC}-boot"
145 echo "******************************************************************"
146 tar xfvj sources/${GCC}.tar.bz2
148 echo "******************************************************************"
149 echo "* Configuring ${GCC}-boot"
150 echo "******************************************************************"
151 ../${GCC}/configure --target=${TARGET} \
155 --enable-languages="c" \
163 echo "******************************************************************"
164 echo "* Building ${GCC}-boot"
165 echo "******************************************************************"
166 make ${PARALLEL} all-gcc || exit
167 echo "******************************************************************"
168 echo "* Installing ${GCC}-boot"
169 echo "******************************************************************"
170 make install-gcc || exit
172 echo "******************************************************************"
173 echo "* Cleaning up ${GCC}-boot"
174 echo "******************************************************************"
175 touch .${GCC}-boot.build
176 rm -rf build/* ${GCC}
179 if [ ! -e .${NEWLIB}.build ]; then
180 echo "******************************************************************"
181 echo "* Unpacking ${NEWLIB}"
182 echo "******************************************************************"
183 tar xfvz sources/${NEWLIB}.tar.gz
185 echo "******************************************************************"
186 echo "* Configuring ${NEWLIB}"
187 echo "******************************************************************"
188 ../${NEWLIB}/configure --target=${TARGET} \
195 --disable-newlib-supplied-syscalls || exit
196 echo "******************************************************************"
197 echo "* Building ${NEWLIB}"
198 echo "******************************************************************"
199 make ${PARALLEL} || exit
200 echo "******************************************************************"
201 echo "* Installing ${NEWLIB}"
202 echo "******************************************************************"
205 echo "******************************************************************"
206 echo "* Cleaning up ${NEWLIB}"
207 echo "******************************************************************"
208 touch .${NEWLIB}.build
209 rm -rf build/* ${NEWLIB}
212 # Yes, you need to build gcc again!
213 if [ ! -e .${GCC}.build ]; then
214 echo "******************************************************************"
215 echo "* Unpacking ${GCC}"
216 echo "******************************************************************"
217 tar xfvj sources/${GCC}.tar.bz2
219 echo "******************************************************************"
220 echo "* Configuring ${GCC}"
221 echo "******************************************************************"
222 ../${GCC}/configure --target=${TARGET} \
226 --enable-languages="c,c++" \
233 echo "******************************************************************"
234 echo "* Building ${GCC}"
235 echo "******************************************************************"
236 make ${PARALLEL} || exit
237 echo "******************************************************************"
238 echo "* Installing ${GCC}"
239 echo "******************************************************************"
242 echo "******************************************************************"
243 echo "* Cleaning up ${GCC}"
244 echo "******************************************************************"
246 rm -rf build/* ${GCC}
249 if [ ! -e .${GDB}.build ]; then
250 echo "******************************************************************"
251 echo "* Unpacking ${GDB}"
252 echo "******************************************************************"
253 tar xfvj sources/${GDB}.tar.bz2
255 echo "******************************************************************"
256 echo "* Configuring ${GDB}"
257 echo "******************************************************************"
258 ../${GDB}/configure --target=${TARGET} \
263 echo "******************************************************************"
264 echo "* Building ${GDB}"
265 echo "******************************************************************"
266 make ${PARALLEL} || exit
267 echo "******************************************************************"
268 echo "* Installing ${GDB}"
269 echo "******************************************************************"
272 echo "******************************************************************"
273 echo "* Cleaning up ${GDB}"
274 echo "******************************************************************"
276 rm -rf build/* ${GDB}
279 if [ ${LIBSTM32_EN} != 0 ]; then
280 if [ ! -e .libcmsis-${LIBCMSIS}.build ]; then
281 echo "******************************************************************"
282 echo "* Unpacking libcmsis-${LIBCMSIS}"
283 echo "******************************************************************"
284 tar xfvj sources/libcmsis-${LIBCMSIS}.tar.bz2
285 cd libcmsis-${LIBCMSIS}
286 echo "******************************************************************"
287 echo "* Building libcmsis-${LIBCMSIS}"
288 echo "******************************************************************"
289 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
290 echo "******************************************************************"
291 echo "* Installing libcmsis-${LIBCMSIS}"
292 echo "******************************************************************"
293 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
295 echo "******************************************************************"
296 echo "* Cleaning up libcmsis-${LIBCMSIS}"
297 echo "******************************************************************"
298 touch .libcmsis-${LIBCMSIS}.build
299 rm -rf libcmsis-${LIBCMSIS}
302 if [ ! -e .libstm32-${LIBSTM32}.build ]; then
303 echo "******************************************************************"
304 echo "* Unpacking libstm32-${LIBSTM32}"
305 echo "******************************************************************"
306 tar xfvj sources/libstm32-${LIBSTM32}.tar.bz2
307 cd libstm32-${LIBSTM32}
308 echo "******************************************************************"
309 echo "* Building libstm32-${LIBSTM32}"
310 echo "******************************************************************"
311 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
312 echo "******************************************************************"
313 echo "* Installing libstm32-${LIBSTM32}"
314 echo "******************************************************************"
315 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
317 echo "******************************************************************"
318 echo "* Cleaning up libstm32-${LIBSTM32}"
319 echo "******************************************************************"
320 touch .libstm32-${LIBSTM32}.build
321 rm -rf libstm32-${LIBSTM32}
324 if [ ! -e .libstm32usb-${LIBSTM32USB}.build ]; then
325 echo "******************************************************************"
326 echo "* Unpacking libstm32usb-${LIBSTM32USB}"
327 echo "******************************************************************"
328 tar xfvj sources/libstm32usb-${LIBSTM32USB}.tar.bz2
329 cd libstm32usb-${LIBSTM32USB}
330 echo "******************************************************************"
331 echo "* Building libstm32usb-${LIBSTM32USB}"
332 echo "******************************************************************"
333 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
334 echo "******************************************************************"
335 echo "* Installing libstm32usb-${LIBSTM32USB}"
336 echo "******************************************************************"
337 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
339 echo "******************************************************************"
340 echo "* Cleaning up libstm32usb-${LIBSTM32USB}"
341 echo "******************************************************************"
342 touch .libstm32usb-${LIBSTM32USB}.build
343 rm -rf libstm32usb-${LIBSTM32USB}
347 if [ $LIBOPENSTM32_EN != 0 ]; then
348 echo "******************************************************************"
349 echo "* Unpacking libopenstm32-${LIBOPENSTM32}"
350 echo "******************************************************************"
351 tar xfvj sources/libopenstm32-${LIBOPENSTM32}.tar.bz2
352 cd libopenstm32-${LIBOPENSTM32}
353 echo "******************************************************************"
354 echo "* Building libopenstm32-${LIBOPENSTM32}"
355 echo "******************************************************************"
356 make PREFIX=${TARGET} DESTDIR=${PREFIX} || exit
357 echo "******************************************************************"
358 echo "* Installing libopenstm32-${LIBOPENSTM32}"
359 echo "******************************************************************"
360 make PREFIX=${TARGET} DESTDIR=${PREFIX} install || exit
362 echo "******************************************************************"
363 echo "* Cleaning up libopenstm32-${LIBOPENSTM32}"
364 echo "******************************************************************"
365 touch .libopenstm32-${LIBOPENSTM32}.build
366 rm -rf libopenstm32-${LIBOPENSTM32}