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
31 export PATH="${PREFIX}/bin:${PATH}"
39 echo "Found Linux OS."
42 echo "Found Darwin OS."
43 GCCFLAGS="--with-gmp=${DARWIN_OPT_PATH} \
44 --with-mpfr=${DARWIN_OPT_PATH} \
45 --with-mpc=${DARWIN_OPT_PATH} \
46 -with-libiconv-prefix=${DARWIN_OPT_PATH}"
49 echo "Found unknown OS. Aborting!"
54 if [ ! -e ${SOURCES} ]; then
60 echo "Downloading binutils sources..."
61 wget -c http://ftp.gnu.org/gnu/binutils/${BINUTILS}.tar.bz2
63 echo "Downloading gcc sources..."
64 wget -c http://ftp.gnu.org/gnu/gcc/${GCC}/${GCC}.tar.bz2
66 echo "Downloading newlib sources..."
67 wget -c --no-passive-ftp ftp://sources.redhat.com/pub/newlib/${NEWLIB}.tar.gz
69 echo "Downloading gdb sources..."
70 wget -c http://ftp.gnu.org/gnu/gdb/${GDB}.tar.bz2
72 if [ ${LIBSTM32_EN} != 0 ]; then
73 if [ ! -e libcmsis-${LIBCMSIS}.tar.bz2 ]; then
74 echo "Cloning libcmsis sources..."
75 git clone git://git.open-bldc.org/libcmsis.git
77 git archive --format=tar --prefix=libcmsis-${LIBCMSIS}/ ${LIBCMSIS} | \
78 bzip2 --stdout > ../libcmsis-${LIBCMSIS}.tar.bz2
83 if [ ! -e libstm32-${LIBSTM32}.tar.bz2 ]; then
84 echo "Cloning libstm32 sources..."
85 git clone git://git.open-bldc.org/libstm32.git
87 git archive --format=tar --prefix=libstm32-${LIBSTM32}/ ${LIBSTM32} | \
88 bzip2 --stdout > ../libstm32-${LIBSTM32}.tar.bz2
93 if [ ! -e libstm32usb-${LIBSTM32USB}.tar.bz2 ]; then
94 echo "Cloning libstm32usb sources..."
95 git clone git://git.open-bldc.org/libstm32usb.git
97 git archive --format=tar --prefix=libstm32usb-${LIBSTM32USB}/ ${LIBSTM32USB} | \
98 bzip2 --stdout > ../libstm32usb-${LIBSTM32USB}.tar.bz2
104 if [ ${LIBOPENSTM32_EN} != 0 ]; then
105 if [ ! -e libopenstm32-${LIBOPENSTM32}.tar.bz2 ]; then
106 echo "Cloning libopenstm32 sources..."
107 git clone git://libopenstm32.git.sourceforge.net/gitroot/libopenstm32/libopenstm32
109 git archive --format=tar --prefix=libopenstm32-${LIBOPENSTM32}/ ${LIBOPENSTM32} | \
110 bzip2 --stdout > ../libopenstm32-${LIBOPENSTM32}.tar.bz2
118 if [ ! -e build ]; then
122 if [ ! -e .${BINUTILS}.build ]; then
123 echo "******************************************************************"
124 echo "* Unpacking ${BINUTILS}"
125 echo "******************************************************************"
126 tar xfvj ${SOURCES}/${BINUTILS}.tar.bz2
128 echo "******************************************************************"
129 echo "* Configuring ${BINUTILS}"
130 echo "******************************************************************"
131 ../${BINUTILS}/configure --target=${TARGET} \
139 ${BINUTILFLAGS} || exit
140 echo "******************************************************************"
141 echo "* Building ${BINUTILS}"
142 echo "******************************************************************"
143 make ${PARALLEL} || exit
144 echo "******************************************************************"
145 echo "* Installing ${BINUTILS}"
146 echo "******************************************************************"
149 echo "******************************************************************"
150 echo "* Cleaning up ${BINUTILS}"
151 echo "******************************************************************"
152 touch .${BINUTILS}.build
153 rm -rf build/* ${BINUTILS}
156 if [ ! -e .${GCC}-boot.build ]; then
157 echo "******************************************************************"
158 echo "* Unpacking ${GCC}-boot"
159 echo "******************************************************************"
160 tar xfvj ${SOURCES}/${GCC}.tar.bz2
162 echo "******************************************************************"
163 echo "* Configuring ${GCC}-boot"
164 echo "******************************************************************"
165 ../${GCC}/configure --target=${TARGET} \
169 --enable-languages="c" \
178 echo "******************************************************************"
179 echo "* Building ${GCC}-boot"
180 echo "******************************************************************"
181 make ${PARALLEL} all-gcc || exit
182 echo "******************************************************************"
183 echo "* Installing ${GCC}-boot"
184 echo "******************************************************************"
185 make install-gcc || exit
187 echo "******************************************************************"
188 echo "* Cleaning up ${GCC}-boot"
189 echo "******************************************************************"
190 touch .${GCC}-boot.build
191 rm -rf build/* ${GCC}
194 if [ ! -e .${NEWLIB}.build ]; then
195 echo "******************************************************************"
196 echo "* Unpacking ${NEWLIB}"
197 echo "******************************************************************"
198 tar xfvz ${SOURCES}/${NEWLIB}.tar.gz
200 echo "******************************************************************"
201 echo "* Configuring ${NEWLIB}"
202 echo "******************************************************************"
203 ../${NEWLIB}/configure --target=${TARGET} \
211 --disable-newlib-supplied-syscalls || exit
212 echo "******************************************************************"
213 echo "* Building ${NEWLIB}"
214 echo "******************************************************************"
215 make ${PARALLEL} || exit
216 echo "******************************************************************"
217 echo "* Installing ${NEWLIB}"
218 echo "******************************************************************"
221 echo "******************************************************************"
222 echo "* Cleaning up ${NEWLIB}"
223 echo "******************************************************************"
224 touch .${NEWLIB}.build
225 rm -rf build/* ${NEWLIB}
228 # Yes, you need to build gcc again!
229 if [ ! -e .${GCC}.build ]; then
230 echo "******************************************************************"
231 echo "* Unpacking ${GCC}"
232 echo "******************************************************************"
233 tar xfvj ${SOURCES}/${GCC}.tar.bz2
235 echo "******************************************************************"
236 echo "* Configuring ${GCC}"
237 echo "******************************************************************"
238 ../${GCC}/configure --target=${TARGET} \
242 --enable-languages="c,c++" \
250 echo "******************************************************************"
251 echo "* Building ${GCC}"
252 echo "******************************************************************"
253 make ${PARALLEL} || exit
254 echo "******************************************************************"
255 echo "* Installing ${GCC}"
256 echo "******************************************************************"
259 echo "******************************************************************"
260 echo "* Cleaning up ${GCC}"
261 echo "******************************************************************"
263 rm -rf build/* ${GCC}
266 if [ ! -e .${GDB}.build ]; then
267 echo "******************************************************************"
268 echo "* Unpacking ${GDB}"
269 echo "******************************************************************"
270 tar xfvj ${SOURCES}/${GDB}.tar.bz2
272 echo "******************************************************************"
273 echo "* Configuring ${GDB}"
274 echo "******************************************************************"
275 ../${GDB}/configure --target=${TARGET} \
281 echo "******************************************************************"
282 echo "* Building ${GDB}"
283 echo "******************************************************************"
284 make ${PARALLEL} || exit
285 echo "******************************************************************"
286 echo "* Installing ${GDB}"
287 echo "******************************************************************"
290 echo "******************************************************************"
291 echo "* Cleaning up ${GDB}"
292 echo "******************************************************************"
294 rm -rf build/* ${GDB}
297 if [ ${LIBSTM32_EN} != 0 ]; then
298 if [ ! -e .libcmsis-${LIBCMSIS}.build ]; then
299 echo "******************************************************************"
300 echo "* Unpacking libcmsis-${LIBCMSIS}"
301 echo "******************************************************************"
302 tar xfvj ${SOURCES}/libcmsis-${LIBCMSIS}.tar.bz2
303 cd libcmsis-${LIBCMSIS}
304 echo "******************************************************************"
305 echo "* Building libcmsis-${LIBCMSIS}"
306 echo "******************************************************************"
307 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
308 echo "******************************************************************"
309 echo "* Installing libcmsis-${LIBCMSIS}"
310 echo "******************************************************************"
311 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
313 echo "******************************************************************"
314 echo "* Cleaning up libcmsis-${LIBCMSIS}"
315 echo "******************************************************************"
316 touch .libcmsis-${LIBCMSIS}.build
317 rm -rf libcmsis-${LIBCMSIS}
320 if [ ! -e .libstm32-${LIBSTM32}.build ]; then
321 echo "******************************************************************"
322 echo "* Unpacking libstm32-${LIBSTM32}"
323 echo "******************************************************************"
324 tar xfvj ${SOURCES}/libstm32-${LIBSTM32}.tar.bz2
325 cd libstm32-${LIBSTM32}
326 echo "******************************************************************"
327 echo "* Building libstm32-${LIBSTM32}"
328 echo "******************************************************************"
329 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
330 echo "******************************************************************"
331 echo "* Installing libstm32-${LIBSTM32}"
332 echo "******************************************************************"
333 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
335 echo "******************************************************************"
336 echo "* Cleaning up libstm32-${LIBSTM32}"
337 echo "******************************************************************"
338 touch .libstm32-${LIBSTM32}.build
339 rm -rf libstm32-${LIBSTM32}
342 if [ ! -e .libstm32usb-${LIBSTM32USB}.build ]; then
343 echo "******************************************************************"
344 echo "* Unpacking libstm32usb-${LIBSTM32USB}"
345 echo "******************************************************************"
346 tar xfvj ${SOURCES}/libstm32usb-${LIBSTM32USB}.tar.bz2
347 cd libstm32usb-${LIBSTM32USB}
348 echo "******************************************************************"
349 echo "* Building libstm32usb-${LIBSTM32USB}"
350 echo "******************************************************************"
351 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
352 echo "******************************************************************"
353 echo "* Installing libstm32usb-${LIBSTM32USB}"
354 echo "******************************************************************"
355 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
357 echo "******************************************************************"
358 echo "* Cleaning up libstm32usb-${LIBSTM32USB}"
359 echo "******************************************************************"
360 touch .libstm32usb-${LIBSTM32USB}.build
361 rm -rf libstm32usb-${LIBSTM32USB}
365 if [ $LIBOPENSTM32_EN != 0 ]; then
366 echo "******************************************************************"
367 echo "* Unpacking libopenstm32-${LIBOPENSTM32}"
368 echo "******************************************************************"
369 tar xfvj ${SOURCES}/libopenstm32-${LIBOPENSTM32}.tar.bz2
370 cd libopenstm32-${LIBOPENSTM32}
371 echo "******************************************************************"
372 echo "* Building libopenstm32-${LIBOPENSTM32}"
373 echo "******************************************************************"
374 make PREFIX=${TARGET} DESTDIR=${PREFIX} || exit
375 echo "******************************************************************"
376 echo "* Installing libopenstm32-${LIBOPENSTM32}"
377 echo "******************************************************************"
378 make PREFIX=${TARGET} DESTDIR=${PREFIX} install || exit
380 echo "******************************************************************"
381 echo "* Cleaning up libopenstm32-${LIBOPENSTM32}"
382 echo "******************************************************************"
383 touch .libopenstm32-${LIBOPENSTM32}.build
384 rm -rf libopenstm32-${LIBOPENSTM32}