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.19.1
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-libiconv-prefix=${DARWIN_OPT_PATH}"
48 echo "Found unknown OS. Aborting!"
53 if [ ! -e ${SOURCES} ]; then
59 echo "Downloading binutils sources..."
60 wget -c http://ftp.gnu.org/gnu/binutils/${BINUTILS}.tar.bz2
62 echo "Downloading gcc sources..."
63 wget -c http://ftp.gnu.org/gnu/gcc/${GCC}/${GCC}.tar.bz2
65 echo "Downloading newlib sources..."
66 wget -c --no-passive-ftp ftp://sources.redhat.com/pub/newlib/${NEWLIB}.tar.gz
68 echo "Downloading gdb sources..."
69 wget -c http://ftp.gnu.org/gnu/gdb/${GDB}.tar.bz2
71 if [ ${LIBSTM32_EN} != 0 ]; then
72 if [ ! -e libcmsis-${LIBCMSIS}.tar.bz2 ]; then
73 echo "Cloning libcmsis sources..."
74 git clone git://git.open-bldc.org/libcmsis.git
76 git archive --format=tar --prefix=libcmsis-${LIBCMSIS}/ ${LIBCMSIS} | \
77 bzip2 --stdout > ../libcmsis-${LIBCMSIS}.tar.bz2
82 if [ ! -e libstm32-${LIBSTM32}.tar.bz2 ]; then
83 echo "Cloning libstm32 sources..."
84 git clone git://git.open-bldc.org/libstm32.git
86 git archive --format=tar --prefix=libstm32-${LIBSTM32}/ ${LIBSTM32} | \
87 bzip2 --stdout > ../libstm32-${LIBSTM32}.tar.bz2
92 if [ ! -e libstm32usb-${LIBSTM32USB}.tar.bz2 ]; then
93 echo "Cloning libstm32usb sources..."
94 git clone git://git.open-bldc.org/libstm32usb.git
96 git archive --format=tar --prefix=libstm32usb-${LIBSTM32USB}/ ${LIBSTM32USB} | \
97 bzip2 --stdout > ../libstm32usb-${LIBSTM32USB}.tar.bz2
103 if [ ${LIBOPENSTM32_EN} != 0 ]; then
104 if [ ! -e libopenstm32-${LIBOPENSTM32}.tar.bz2 ]; then
105 echo "Cloning libopenstm32 sources..."
106 git clone git://libopenstm32.git.sourceforge.net/gitroot/libopenstm32/libopenstm32
108 git archive --format=tar --prefix=libopenstm32-${LIBOPENSTM32}/ ${LIBOPENSTM32} | \
109 bzip2 --stdout > ../libopenstm32-${LIBOPENSTM32}.tar.bz2
117 if [ ! -e build ]; then
121 if [ ! -e .${BINUTILS}.build ]; then
122 echo "******************************************************************"
123 echo "* Unpacking ${BINUTILS}"
124 echo "******************************************************************"
125 tar xfvj ${SOURCES}/${BINUTILS}.tar.bz2
127 echo "******************************************************************"
128 echo "* Configuring ${BINUTILS}"
129 echo "******************************************************************"
130 ../${BINUTILS}/configure --target=${TARGET} \
138 ${BINUTILFLAGS} || exit
139 echo "******************************************************************"
140 echo "* Building ${BINUTILS}"
141 echo "******************************************************************"
142 make ${PARALLEL} || exit
143 echo "******************************************************************"
144 echo "* Installing ${BINUTILS}"
145 echo "******************************************************************"
148 echo "******************************************************************"
149 echo "* Cleaning up ${BINUTILS}"
150 echo "******************************************************************"
151 touch .${BINUTILS}.build
152 rm -rf build/* ${BINUTILS}
155 if [ ! -e .${GCC}-boot.build ]; then
156 echo "******************************************************************"
157 echo "* Unpacking ${GCC}-boot"
158 echo "******************************************************************"
159 tar xfvj ${SOURCES}/${GCC}.tar.bz2
161 echo "******************************************************************"
162 echo "* Configuring ${GCC}-boot"
163 echo "******************************************************************"
164 ../${GCC}/configure --target=${TARGET} \
168 --enable-languages="c" \
177 echo "******************************************************************"
178 echo "* Building ${GCC}-boot"
179 echo "******************************************************************"
180 make ${PARALLEL} all-gcc || exit
181 echo "******************************************************************"
182 echo "* Installing ${GCC}-boot"
183 echo "******************************************************************"
184 make install-gcc || exit
186 echo "******************************************************************"
187 echo "* Cleaning up ${GCC}-boot"
188 echo "******************************************************************"
189 touch .${GCC}-boot.build
190 rm -rf build/* ${GCC}
193 if [ ! -e .${NEWLIB}.build ]; then
194 echo "******************************************************************"
195 echo "* Unpacking ${NEWLIB}"
196 echo "******************************************************************"
197 tar xfvz ${SOURCES}/${NEWLIB}.tar.gz
199 echo "******************************************************************"
200 echo "* Configuring ${NEWLIB}"
201 echo "******************************************************************"
202 ../${NEWLIB}/configure --target=${TARGET} \
210 --disable-newlib-supplied-syscalls || exit
211 echo "******************************************************************"
212 echo "* Building ${NEWLIB}"
213 echo "******************************************************************"
214 make ${PARALLEL} || exit
215 echo "******************************************************************"
216 echo "* Installing ${NEWLIB}"
217 echo "******************************************************************"
220 echo "******************************************************************"
221 echo "* Cleaning up ${NEWLIB}"
222 echo "******************************************************************"
223 touch .${NEWLIB}.build
224 rm -rf build/* ${NEWLIB}
227 # Yes, you need to build gcc again!
228 if [ ! -e .${GCC}.build ]; then
229 echo "******************************************************************"
230 echo "* Unpacking ${GCC}"
231 echo "******************************************************************"
232 tar xfvj ${SOURCES}/${GCC}.tar.bz2
234 echo "******************************************************************"
235 echo "* Configuring ${GCC}"
236 echo "******************************************************************"
237 ../${GCC}/configure --target=${TARGET} \
241 --enable-languages="c,c++" \
249 echo "******************************************************************"
250 echo "* Building ${GCC}"
251 echo "******************************************************************"
252 make ${PARALLEL} || exit
253 echo "******************************************************************"
254 echo "* Installing ${GCC}"
255 echo "******************************************************************"
258 echo "******************************************************************"
259 echo "* Cleaning up ${GCC}"
260 echo "******************************************************************"
262 rm -rf build/* ${GCC}
265 if [ ! -e .${GDB}.build ]; then
266 echo "******************************************************************"
267 echo "* Unpacking ${GDB}"
268 echo "******************************************************************"
269 tar xfvj ${SOURCES}/${GDB}.tar.bz2
271 echo "******************************************************************"
272 echo "* Configuring ${GDB}"
273 echo "******************************************************************"
274 ../${GDB}/configure --target=${TARGET} \
280 echo "******************************************************************"
281 echo "* Building ${GDB}"
282 echo "******************************************************************"
283 make ${PARALLEL} || exit
284 echo "******************************************************************"
285 echo "* Installing ${GDB}"
286 echo "******************************************************************"
289 echo "******************************************************************"
290 echo "* Cleaning up ${GDB}"
291 echo "******************************************************************"
293 rm -rf build/* ${GDB}
296 if [ ${LIBSTM32_EN} != 0 ]; then
297 if [ ! -e .libcmsis-${LIBCMSIS}.build ]; then
298 echo "******************************************************************"
299 echo "* Unpacking libcmsis-${LIBCMSIS}"
300 echo "******************************************************************"
301 tar xfvj ${SOURCES}/libcmsis-${LIBCMSIS}.tar.bz2
302 cd libcmsis-${LIBCMSIS}
303 echo "******************************************************************"
304 echo "* Building libcmsis-${LIBCMSIS}"
305 echo "******************************************************************"
306 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
307 echo "******************************************************************"
308 echo "* Installing libcmsis-${LIBCMSIS}"
309 echo "******************************************************************"
310 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
312 echo "******************************************************************"
313 echo "* Cleaning up libcmsis-${LIBCMSIS}"
314 echo "******************************************************************"
315 touch .libcmsis-${LIBCMSIS}.build
316 rm -rf libcmsis-${LIBCMSIS}
319 if [ ! -e .libstm32-${LIBSTM32}.build ]; then
320 echo "******************************************************************"
321 echo "* Unpacking libstm32-${LIBSTM32}"
322 echo "******************************************************************"
323 tar xfvj ${SOURCES}/libstm32-${LIBSTM32}.tar.bz2
324 cd libstm32-${LIBSTM32}
325 echo "******************************************************************"
326 echo "* Building libstm32-${LIBSTM32}"
327 echo "******************************************************************"
328 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
329 echo "******************************************************************"
330 echo "* Installing libstm32-${LIBSTM32}"
331 echo "******************************************************************"
332 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
334 echo "******************************************************************"
335 echo "* Cleaning up libstm32-${LIBSTM32}"
336 echo "******************************************************************"
337 touch .libstm32-${LIBSTM32}.build
338 rm -rf libstm32-${LIBSTM32}
341 if [ ! -e .libstm32usb-${LIBSTM32USB}.build ]; then
342 echo "******************************************************************"
343 echo "* Unpacking libstm32usb-${LIBSTM32USB}"
344 echo "******************************************************************"
345 tar xfvj ${SOURCES}/libstm32usb-${LIBSTM32USB}.tar.bz2
346 cd libstm32usb-${LIBSTM32USB}
347 echo "******************************************************************"
348 echo "* Building libstm32usb-${LIBSTM32USB}"
349 echo "******************************************************************"
350 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
351 echo "******************************************************************"
352 echo "* Installing libstm32usb-${LIBSTM32USB}"
353 echo "******************************************************************"
354 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
356 echo "******************************************************************"
357 echo "* Cleaning up libstm32usb-${LIBSTM32USB}"
358 echo "******************************************************************"
359 touch .libstm32usb-${LIBSTM32USB}.build
360 rm -rf libstm32usb-${LIBSTM32USB}
364 if [ $LIBOPENSTM32_EN != 0 ]; then
365 echo "******************************************************************"
366 echo "* Unpacking libopenstm32-${LIBOPENSTM32}"
367 echo "******************************************************************"
368 tar xfvj ${SOURCES}/libopenstm32-${LIBOPENSTM32}.tar.bz2
369 cd libopenstm32-${LIBOPENSTM32}
370 echo "******************************************************************"
371 echo "* Building libopenstm32-${LIBOPENSTM32}"
372 echo "******************************************************************"
373 make PREFIX=${TARGET} DESTDIR=${PREFIX} || exit
374 echo "******************************************************************"
375 echo "* Installing libopenstm32-${LIBOPENSTM32}"
376 echo "******************************************************************"
377 make PREFIX=${TARGET} DESTDIR=${PREFIX} install || exit
379 echo "******************************************************************"
380 echo "* Cleaning up libopenstm32-${LIBOPENSTM32}"
381 echo "******************************************************************"
382 touch .libopenstm32-${LIBOPENSTM32}.build
383 rm -rf libopenstm32-${LIBOPENSTM32}