2 # Written by Uwe Hermann <uwe@hermann-uwe.de>, released as public domain.
3 # Modified by Piot 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
47 if [ ! -e ${BINUTILS}.tar.bz2 ]; then
48 echo "Downloading binutils sources..."
49 wget -c http://ftp.gnu.org/gnu/binutils/${BINUTILS}.tar.bz2
52 if [ ! -e ${GCC}.tar.bz2 ]; then
53 echo "Downloading gcc sources..."
54 wget -c ftp://ftp.gnu.org/gnu/gcc/${GCC}/${GCC}.tar.bz2
57 if [ ! -e ${NEWLIB}.tar.gz ]; then
58 echo "Downloading newlib sources..."
59 wget -c ftp://sources.redhat.com/pub/newlib/${NEWLIB}.tar.gz
62 if [ ! -e ${GDB}.tar.bz2 ]; then
63 echo "Downloading gdb sources..."
64 wget -c ftp://ftp.gnu.org/gnu/gdb/${GDB}.tar.bz2
67 if [ ${LIBSTM32_EN} != 0 ]; then
68 if [ ! -e libcmsis-${LIBCMSIS}.tar.bz2 ]; then
69 echo "Cloning libcmsis sources..."
70 git clone git://git.open-bldc.org/libcmsis.git
72 git archive --format=tar --prefix=libcmsis-${LIBCMSIS}/ ${LIBCMSIS} | \
73 bzip2 --stdout > ../libcmsis-${LIBCMSIS}.tar.bz2
78 if [ ! -e libstm32-${LIBSTM32}.tar.bz2 ]; then
79 echo "Cloning libstm32 sources..."
80 git clone git://git.open-bldc.org/libstm32.git
82 git archive --format=tar --prefix=libstm32-${LIBSTM32}/ ${LIBSTM32} | \
83 bzip2 --stdout > ../libstm32-${LIBSTM32}.tar.bz2
88 if [ ! -e libstm32usb-${LIBSTM32USB}.tar.bz2 ]; then
89 echo "Cloning libstm32usb sources..."
90 git clone git://git.open-bldc.org/libstm32usb.git
92 git archive --format=tar --prefix=libstm32usb-${LIBSTM32USB}/ ${LIBSTM32USB} | \
93 bzip2 --stdout > ../libstm32usb-${LIBSTM32USB}.tar.bz2
99 if [ ${LIBOPENSTM32_EN} != 0 ]; then
100 if [ ! -e libopenstm32-${LIBOPENSTM32}.tar.bz2 ]; then
101 echo "Cloning libopenstm32 sources..."
102 git clone git://libopenstm32.git.sourceforge.net/gitroot/libopenstm32
104 git archive --format=tar --prefix=libopenstm32-${LIBOPENSTM32}/ ${LIBOPENSTM32} | \
105 bzip2 --stdout > ../libopenstm32-${LIBOPENSTM32}.tar.bz2
113 if [ ! -e build ]; then
117 if [ ! -e .${BINUTILS}.build ]; then
118 echo "******************************************************************"
119 echo "* Unpacking ${BINUTILS}"
120 echo "******************************************************************"
121 tar xfvj sources/${BINUTILS}.tar.bz2
123 echo "******************************************************************"
124 echo "* Configuring ${BINUTILS}"
125 echo "******************************************************************"
126 ../${BINUTILS}/configure --target=${TARGET} \
132 --disable-nls || exit
133 echo "******************************************************************"
134 echo "* Building ${BINUTILS}"
135 echo "******************************************************************"
136 make ${PARALLEL} || exit
137 echo "******************************************************************"
138 echo "* Installing ${BINUTILS}"
139 echo "******************************************************************"
142 echo "******************************************************************"
143 echo "* Cleaning up ${BINUTILS}"
144 echo "******************************************************************"
145 touch .${BINUTILS}.build
146 rm -rf build/* ${BINUTILS}
149 if [ ! -e .${GCC}-boot.build ]; then
150 echo "******************************************************************"
151 echo "* Unpacking ${GCC}-boot"
152 echo "******************************************************************"
153 tar xfvj sources/${GCC}.tar.bz2
155 echo "******************************************************************"
156 echo "* Configuring ${GCC}-boot"
157 echo "******************************************************************"
158 ../${GCC}/configure --target=${TARGET} \
162 --enable-languages="c" \
170 echo "******************************************************************"
171 echo "* Building ${GCC}-boot"
172 echo "******************************************************************"
173 make ${PARALLEL} all-gcc || exit
174 echo "******************************************************************"
175 echo "* Installing ${GCC}-boot"
176 echo "******************************************************************"
177 make install-gcc || exit
179 echo "******************************************************************"
180 echo "* Cleaning up ${GCC}-boot"
181 echo "******************************************************************"
182 touch .${GCC}-boot.build
183 rm -rf build/* ${GCC}
186 if [ ! -e .${NEWLIB}.build ]; then
187 echo "******************************************************************"
188 echo "* Unpacking ${NEWLIB}"
189 echo "******************************************************************"
190 tar xfvz sources/${NEWLIB}.tar.gz
192 echo "******************************************************************"
193 echo "* Configuring ${NEWLIB}"
194 echo "******************************************************************"
195 ../${NEWLIB}/configure --target=${TARGET} \
202 --disable-newlib-supplied-syscalls || exit
203 echo "******************************************************************"
204 echo "* Building ${NEWLIB}"
205 echo "******************************************************************"
206 make ${PARALLEL} || exit
207 echo "******************************************************************"
208 echo "* Installing ${NEWLIB}"
209 echo "******************************************************************"
212 echo "******************************************************************"
213 echo "* Cleaning up ${NEWLIB}"
214 echo "******************************************************************"
215 touch .${NEWLIB}.build
216 rm -rf build/* ${NEWLIB}
219 # Yes, you need to build gcc again!
220 if [ ! -e .${GCC}.build ]; then
221 echo "******************************************************************"
222 echo "* Unpacking ${GCC}"
223 echo "******************************************************************"
224 tar xfvj sources/${GCC}.tar.bz2
226 echo "******************************************************************"
227 echo "* Configuring ${GCC}"
228 echo "******************************************************************"
229 ../${GCC}/configure --target=${TARGET} \
233 --enable-languages="c,c++" \
240 echo "******************************************************************"
241 echo "* Building ${GCC}"
242 echo "******************************************************************"
243 make ${PARALLEL} || exit
244 echo "******************************************************************"
245 echo "* Installing ${GCC}"
246 echo "******************************************************************"
249 echo "******************************************************************"
250 echo "* Cleaning up ${GCC}"
251 echo "******************************************************************"
253 rm -rf build/* ${GCC}
256 if [ ! -e .${GDB}.build ]; then
257 echo "******************************************************************"
258 echo "* Unpacking ${GDB}"
259 echo "******************************************************************"
260 tar xfvj sources/${GDB}.tar.bz2
262 echo "******************************************************************"
263 echo "* Configuring ${GDB}"
264 echo "******************************************************************"
265 ../${GDB}/configure --target=${TARGET} \
270 echo "******************************************************************"
271 echo "* Building ${GDB}"
272 echo "******************************************************************"
273 make ${PARALLEL} || exit
274 echo "******************************************************************"
275 echo "* Installing ${GDB}"
276 echo "******************************************************************"
279 echo "******************************************************************"
280 echo "* Cleaning up ${GDB}"
281 echo "******************************************************************"
283 rm -rf build/* ${GDB}
286 if [ ${LIBSTM32_EN} != 0 ]; then
287 if [ ! -e .libcmsis-${LIBCMSIS}.build ]; then
288 echo "******************************************************************"
289 echo "* Unpacking libcmsis-${LIBCMSIS}"
290 echo "******************************************************************"
291 tar xfvj sources/libcmsis-${LIBCMSIS}.tar.bz2
292 cd libcmsis-${LIBCMSIS}
293 echo "******************************************************************"
294 echo "* Building libcmsis-${LIBCMSIS}"
295 echo "******************************************************************"
296 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
297 echo "******************************************************************"
298 echo "* Installing libcmsis-${LIBCMSIS}"
299 echo "******************************************************************"
300 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
302 echo "******************************************************************"
303 echo "* Cleaning up libcmsis-${LIBCMSIS}"
304 echo "******************************************************************"
305 touch .libcmsis-${LIBCMSIS}.build
306 rm -rf libcmsis-${LIBCMSIS}
309 if [ ! -e .libstm32-${LIBSTM32}.build ]; then
310 echo "******************************************************************"
311 echo "* Unpacking libstm32-${LIBSTM32}"
312 echo "******************************************************************"
313 tar xfvj sources/libstm32-${LIBSTM32}.tar.bz2
314 cd libstm32-${LIBSTM32}
315 echo "******************************************************************"
316 echo "* Building libstm32-${LIBSTM32}"
317 echo "******************************************************************"
318 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
319 echo "******************************************************************"
320 echo "* Installing libstm32-${LIBSTM32}"
321 echo "******************************************************************"
322 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
324 echo "******************************************************************"
325 echo "* Cleaning up libstm32-${LIBSTM32}"
326 echo "******************************************************************"
327 touch .libstm32-${LIBSTM32}.build
328 rm -rf libstm32-${LIBSTM32}
331 if [ ! -e .libstm32usb-${LIBSTM32USB}.build ]; then
332 echo "******************************************************************"
333 echo "* Unpacking libstm32usb-${LIBSTM32USB}"
334 echo "******************************************************************"
335 tar xfvj sources/libstm32usb-${LIBSTM32USB}.tar.bz2
336 cd libstm32usb-${LIBSTM32USB}
337 echo "******************************************************************"
338 echo "* Building libstm32usb-${LIBSTM32USB}"
339 echo "******************************************************************"
340 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
341 echo "******************************************************************"
342 echo "* Installing libstm32usb-${LIBSTM32USB}"
343 echo "******************************************************************"
344 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
346 echo "******************************************************************"
347 echo "* Cleaning up libstm32usb-${LIBSTM32USB}"
348 echo "******************************************************************"
349 touch .libstm32usb-${LIBSTM32USB}.build
350 rm -rf libstm32usb-${LIBSTM32USB}
354 if [ $LIBOPENSTM32_EN != 0 ]; then
355 echo "******************************************************************"
356 echo "* Unpacking libopenstm32-${LIBOPENSTM32}"
357 echo "******************************************************************"
358 tar xfvj sources/libopenstm32-${LIBOPENSTM32}.tar.bz2
359 cd libopenstm32-${LIBOPENSTM32}
360 echo "******************************************************************"
361 echo "* Building libopenstm32-${LIBOPENSTM32}"
362 echo "******************************************************************"
363 make PREFIX=${TARGET} DESTDIR=${PREFIX} || exit
364 echo "******************************************************************"
365 echo "* Installing libopenstm32-${LIBOPENSTM32}"
366 echo "******************************************************************"
367 make PREFIX=${TARGET} DESTDIR=${PREFIX} install || exit
369 echo "******************************************************************"
370 echo "* Cleaning up libopenstm32-${LIBOPENSTM32}"
371 echo "******************************************************************"
372 touch .libopenstm32-${LIBOPENSTM32}.build
373 rm -rf libopenstm32-${LIBOPENSTM32}