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.
6 # Requirements (example is for Debian, replace package names as needed):
8 # apt-get install flex bison libgmp3-dev libmpfr-dev libncurses5-dev \
9 # libmpc-dev autoconf texinfo build-essential
12 TARGET=arm-none-eabi # Or: TARGET=arm-elf
13 PREFIX=${HOME}/arm-none-eabi # Install location of your final toolchain
14 PARALLEL="" # Or: PARALLEL="-j 5" for 4 CPUs
15 DARWIN_OPT_PATH=/opt/local # Path in which MacPorts or Fink is installed
17 BINUTILS=binutils-2.20
29 SOURCES=${SUMMON_DIR}/sources
30 STAMPS=${SUMMON_DIR}/stamps
32 export PATH="${PREFIX}/bin:${PATH}"
38 # Fetch a versioned file from a URL
40 if [ ! -e ${STAMPS}/$1.fetch ]; then
41 echo "Downloading $1 sources..."
42 wget -c --no-passive-ftp $2
43 touch ${STAMPS}/$1.fetch
49 echo "Found Linux OS."
52 echo "Found Darwin OS."
53 GCCFLAGS="--with-gmp=${DARWIN_OPT_PATH} \
54 --with-mpfr=${DARWIN_OPT_PATH} \
55 --with-mpc=${DARWIN_OPT_PATH} \
56 -with-libiconv-prefix=${DARWIN_OPT_PATH}"
59 echo "Found unknown OS. Aborting!"
64 mkdir -p ${STAMPS} ${SOURCES}
68 fetch ${BINUTILS} http://ftp.gnu.org/gnu/binutils/${BINUTILS}.tar.bz2
69 fetch ${GCC} ${GCC_URL}
70 fetch ${NEWLIB} ftp://sources.redhat.com/pub/newlib/${NEWLIB}.tar.gz
71 fetch ${GDB} http://ftp.gnu.org/gnu/gdb/${GDB}.tar.bz2
73 if [ ${LIBSTM32_EN} != 0 ]; then
74 if [ ! -e libcmsis-${LIBCMSIS}.tar.bz2 ]; then
75 echo "Cloning libcmsis sources..."
76 git clone git://git.open-bldc.org/libcmsis.git
78 git archive --format=tar --prefix=libcmsis-${LIBCMSIS}/ ${LIBCMSIS} | \
79 bzip2 --stdout > ../libcmsis-${LIBCMSIS}.tar.bz2
84 if [ ! -e libstm32-${LIBSTM32}.tar.bz2 ]; then
85 echo "Cloning libstm32 sources..."
86 git clone git://git.open-bldc.org/libstm32.git
88 git archive --format=tar --prefix=libstm32-${LIBSTM32}/ ${LIBSTM32} | \
89 bzip2 --stdout > ../libstm32-${LIBSTM32}.tar.bz2
94 if [ ! -e libstm32usb-${LIBSTM32USB}.tar.bz2 ]; then
95 echo "Cloning libstm32usb sources..."
96 git clone git://git.open-bldc.org/libstm32usb.git
98 git archive --format=tar --prefix=libstm32usb-${LIBSTM32USB}/ ${LIBSTM32USB} | \
99 bzip2 --stdout > ../libstm32usb-${LIBSTM32USB}.tar.bz2
105 if [ ${LIBOPENSTM32_EN} != 0 ]; then
106 if [ ! -e libopenstm32-${LIBOPENSTM32}.tar.bz2 ]; then
107 echo "Cloning libopenstm32 sources..."
108 git clone git://libopenstm32.git.sourceforge.net/gitroot/libopenstm32/libopenstm32
110 git archive --format=tar --prefix=libopenstm32-${LIBOPENSTM32}/ ${LIBOPENSTM32} | \
111 bzip2 --stdout > ../libopenstm32-${LIBOPENSTM32}.tar.bz2
119 if [ ! -e build ]; then
123 if [ ! -e ${STAMPS}/${BINUTILS}.build ]; then
124 echo "******************************************************************"
125 echo "* Unpacking ${BINUTILS}"
126 echo "******************************************************************"
127 tar xfvj ${SOURCES}/${BINUTILS}.tar.bz2
129 echo "******************************************************************"
130 echo "* Configuring ${BINUTILS}"
131 echo "******************************************************************"
132 ../${BINUTILS}/configure --target=${TARGET} \
140 ${BINUTILFLAGS} || exit
141 echo "******************************************************************"
142 echo "* Building ${BINUTILS}"
143 echo "******************************************************************"
144 make ${PARALLEL} || exit
145 echo "******************************************************************"
146 echo "* Installing ${BINUTILS}"
147 echo "******************************************************************"
150 echo "******************************************************************"
151 echo "* Cleaning up ${BINUTILS}"
152 echo "******************************************************************"
153 touch ${STAMPS}/${BINUTILS}.build
154 rm -rf build/* ${BINUTILS}
157 if [ ! -e ${STAMPS}/${GCC}-boot.build ]; then
158 echo "******************************************************************"
159 echo "* Unpacking ${GCC}-boot"
160 echo "******************************************************************"
161 tar xfvj ${SOURCES}/${GCC}.tar.bz2
163 echo "******************************************************************"
164 echo "* Configuring ${GCC}-boot"
165 echo "******************************************************************"
166 ../${GCC}/configure --target=${TARGET} \
170 --enable-languages="c" \
179 echo "******************************************************************"
180 echo "* Building ${GCC}-boot"
181 echo "******************************************************************"
182 make ${PARALLEL} all-gcc || exit
183 echo "******************************************************************"
184 echo "* Installing ${GCC}-boot"
185 echo "******************************************************************"
186 make install-gcc || exit
188 echo "******************************************************************"
189 echo "* Cleaning up ${GCC}-boot"
190 echo "******************************************************************"
191 touch ${STAMPS}/${GCC}-boot.build
192 rm -rf build/* ${GCC}
195 if [ ! -e ${STAMPS}/${NEWLIB}.build ]; then
196 echo "******************************************************************"
197 echo "* Unpacking ${NEWLIB}"
198 echo "******************************************************************"
199 tar xfvz ${SOURCES}/${NEWLIB}.tar.gz
201 echo "******************************************************************"
202 echo "* Configuring ${NEWLIB}"
203 echo "******************************************************************"
204 ../${NEWLIB}/configure --target=${TARGET} \
212 --disable-newlib-supplied-syscalls || exit
213 echo "******************************************************************"
214 echo "* Building ${NEWLIB}"
215 echo "******************************************************************"
216 make ${PARALLEL} || exit
217 echo "******************************************************************"
218 echo "* Installing ${NEWLIB}"
219 echo "******************************************************************"
222 echo "******************************************************************"
223 echo "* Cleaning up ${NEWLIB}"
224 echo "******************************************************************"
225 touch ${STAMPS}/${NEWLIB}.build
226 rm -rf build/* ${NEWLIB}
229 # Yes, you need to build gcc again!
230 if [ ! -e ${STAMPS}/${GCC}.build ]; then
231 echo "******************************************************************"
232 echo "* Unpacking ${GCC}"
233 echo "******************************************************************"
234 tar xfvj ${SOURCES}/${GCC}.tar.bz2
236 echo "******************************************************************"
237 echo "* Configuring ${GCC}"
238 echo "******************************************************************"
239 ../${GCC}/configure --target=${TARGET} \
243 --enable-languages="c,c++" \
251 echo "******************************************************************"
252 echo "* Building ${GCC}"
253 echo "******************************************************************"
254 make ${PARALLEL} || exit
255 echo "******************************************************************"
256 echo "* Installing ${GCC}"
257 echo "******************************************************************"
260 echo "******************************************************************"
261 echo "* Cleaning up ${GCC}"
262 echo "******************************************************************"
263 touch ${STAMPS}/${GCC}.build
264 rm -rf build/* ${GCC}
267 if [ ! -e ${STAMPS}/${GDB}.build ]; then
268 echo "******************************************************************"
269 echo "* Unpacking ${GDB}"
270 echo "******************************************************************"
271 tar xfvj ${SOURCES}/${GDB}.tar.bz2
273 echo "******************************************************************"
274 echo "* Configuring ${GDB}"
275 echo "******************************************************************"
276 ../${GDB}/configure --target=${TARGET} \
282 echo "******************************************************************"
283 echo "* Building ${GDB}"
284 echo "******************************************************************"
285 make ${PARALLEL} || exit
286 echo "******************************************************************"
287 echo "* Installing ${GDB}"
288 echo "******************************************************************"
291 echo "******************************************************************"
292 echo "* Cleaning up ${GDB}"
293 echo "******************************************************************"
294 touch ${STAMPS}/${GDB}.build
295 rm -rf build/* ${GDB}
298 if [ ${LIBSTM32_EN} != 0 ]; then
299 if [ ! -e .libcmsis-${LIBCMSIS}.build ]; then
300 echo "******************************************************************"
301 echo "* Unpacking libcmsis-${LIBCMSIS}"
302 echo "******************************************************************"
303 tar xfvj ${SOURCES}/libcmsis-${LIBCMSIS}.tar.bz2
304 cd libcmsis-${LIBCMSIS}
305 echo "******************************************************************"
306 echo "* Building libcmsis-${LIBCMSIS}"
307 echo "******************************************************************"
308 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
309 echo "******************************************************************"
310 echo "* Installing libcmsis-${LIBCMSIS}"
311 echo "******************************************************************"
312 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
314 echo "******************************************************************"
315 echo "* Cleaning up libcmsis-${LIBCMSIS}"
316 echo "******************************************************************"
317 touch .libcmsis-${LIBCMSIS}.build
318 rm -rf libcmsis-${LIBCMSIS}
321 if [ ! -e .libstm32-${LIBSTM32}.build ]; then
322 echo "******************************************************************"
323 echo "* Unpacking libstm32-${LIBSTM32}"
324 echo "******************************************************************"
325 tar xfvj ${SOURCES}/libstm32-${LIBSTM32}.tar.bz2
326 cd libstm32-${LIBSTM32}
327 echo "******************************************************************"
328 echo "* Building libstm32-${LIBSTM32}"
329 echo "******************************************************************"
330 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
331 echo "******************************************************************"
332 echo "* Installing libstm32-${LIBSTM32}"
333 echo "******************************************************************"
334 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
336 echo "******************************************************************"
337 echo "* Cleaning up libstm32-${LIBSTM32}"
338 echo "******************************************************************"
339 touch .libstm32-${LIBSTM32}.build
340 rm -rf libstm32-${LIBSTM32}
343 if [ ! -e .libstm32usb-${LIBSTM32USB}.build ]; then
344 echo "******************************************************************"
345 echo "* Unpacking libstm32usb-${LIBSTM32USB}"
346 echo "******************************************************************"
347 tar xfvj ${SOURCES}/libstm32usb-${LIBSTM32USB}.tar.bz2
348 cd libstm32usb-${LIBSTM32USB}
349 echo "******************************************************************"
350 echo "* Building libstm32usb-${LIBSTM32USB}"
351 echo "******************************************************************"
352 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
353 echo "******************************************************************"
354 echo "* Installing libstm32usb-${LIBSTM32USB}"
355 echo "******************************************************************"
356 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
358 echo "******************************************************************"
359 echo "* Cleaning up libstm32usb-${LIBSTM32USB}"
360 echo "******************************************************************"
361 touch .libstm32usb-${LIBSTM32USB}.build
362 rm -rf libstm32usb-${LIBSTM32USB}
366 if [ $LIBOPENSTM32_EN != 0 ]; then
367 echo "******************************************************************"
368 echo "* Unpacking libopenstm32-${LIBOPENSTM32}"
369 echo "******************************************************************"
370 tar xfvj ${SOURCES}/libopenstm32-${LIBOPENSTM32}.tar.bz2
371 cd libopenstm32-${LIBOPENSTM32}
372 echo "******************************************************************"
373 echo "* Building libopenstm32-${LIBOPENSTM32}"
374 echo "******************************************************************"
375 make PREFIX=${TARGET} DESTDIR=${PREFIX} || exit
376 echo "******************************************************************"
377 echo "* Installing libopenstm32-${LIBOPENSTM32}"
378 echo "******************************************************************"
379 make PREFIX=${TARGET} DESTDIR=${PREFIX} install || exit
381 echo "******************************************************************"
382 echo "* Cleaning up libopenstm32-${LIBOPENSTM32}"
383 echo "******************************************************************"
384 touch .libopenstm32-${LIBOPENSTM32}.build
385 rm -rf libopenstm32-${LIBOPENSTM32}