Updated gcc and binutils version, added a variable to allow external source directori...
[fw/cortex-toolchain] / summon-arm-toolchain
1 #!/bin/bash
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.
4
5 TARGET=arm-none-eabi                    # Or: TARGET=arm-none-eabi
6 PREFIX=${HOME}/arm-none-eabi            # 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
9
10 BINUTILS=binutils-2.19.1
11 GCC=gcc-4.4.2
12 NEWLIB=newlib-1.17.0
13 GDB=gdb-7.0
14 LIBCMSIS=v1.10-2
15 LIBSTM32=v3.0.0-1
16 LIBSTM32USB=v3.0.1-1
17 LIBOPENSTM32=master
18 LIBSTM32_EN=1
19 LIBOPENSTM32_EN=0
20
21 SUMMON_DIR=$(pwd)
22 SOURCES=${SUMMON_DIR}/sources
23
24 export PATH="${PREFIX}/bin:${PATH}"
25
26 case "$(uname)" in
27         Linux)
28         echo "Found Linux OS."
29         GCCFLAGS=
30         GDBFLAGS=
31         ;;
32         Darwin)
33         echo "Found Darwin OS."
34         GCCFLAGS="--with-gmp=${DARWIN_OPT_PATH} \
35                   --with-mpfr=${DARWIN_OPT_PATH} \
36                   -with-libiconv-prefix=${DARWIN_OPT_PATH}"
37         GDBFLAGS="--disable-werror"
38         ;;
39         *)
40         echo "Found unknown OS. Aborting!"
41         exit 1
42         ;;
43 esac
44
45 if [ ! -e ${SOURCES} ]; then
46     mkdir ${SOURCES}
47 fi
48
49 cd ${SOURCES}
50
51 echo "Downloading binutils sources..."
52 wget -c http://ftp.gnu.org/gnu/binutils/${BINUTILS}.tar.bz2
53
54 echo "Downloading gcc sources..."
55 wget -c ftp://ftp.gnu.org/gnu/gcc/${GCC}/${GCC}.tar.bz2
56
57 echo "Downloading newlib sources..."
58 wget -c ftp://sources.redhat.com/pub/newlib/${NEWLIB}.tar.gz
59
60 echo "Downloading gdb sources..."
61 wget -c ftp://ftp.gnu.org/gnu/gdb/${GDB}.tar.bz2
62
63 if [ ${LIBSTM32_EN} != 0 ]; then
64 if [ ! -e libcmsis-${LIBCMSIS}.tar.bz2 ]; then
65         echo "Cloning libcmsis sources..."
66         git clone git://git.open-bldc.org/libcmsis.git
67         cd libcmsis
68         git archive --format=tar --prefix=libcmsis-${LIBCMSIS}/ ${LIBCMSIS} | \
69             bzip2 --stdout > ../libcmsis-${LIBCMSIS}.tar.bz2
70         cd ..
71         rm -rf libcmsis
72 fi
73
74 if [ ! -e libstm32-${LIBSTM32}.tar.bz2 ]; then
75         echo "Cloning libstm32 sources..."
76         git clone git://git.open-bldc.org/libstm32.git
77         cd libstm32
78         git archive --format=tar --prefix=libstm32-${LIBSTM32}/ ${LIBSTM32} | \
79             bzip2 --stdout > ../libstm32-${LIBSTM32}.tar.bz2
80         cd ..
81         rm -rf libstm32
82 fi
83
84 if [ ! -e libstm32usb-${LIBSTM32USB}.tar.bz2 ]; then
85         echo "Cloning libstm32usb sources..."
86         git clone git://git.open-bldc.org/libstm32usb.git
87         cd libstm32usb
88         git archive --format=tar --prefix=libstm32usb-${LIBSTM32USB}/ ${LIBSTM32USB} | \
89             bzip2 --stdout > ../libstm32usb-${LIBSTM32USB}.tar.bz2
90         cd ..
91         rm -rf libstm32usb
92 fi
93 fi
94
95 if [ ${LIBOPENSTM32_EN} != 0 ]; then
96 if [ ! -e libopenstm32-${LIBOPENSTM32}.tar.bz2 ]; then
97         echo "Cloning libopenstm32 sources..."
98         git clone git://libopenstm32.git.sourceforge.net/gitroot/libopenstm32/libopenstm32
99         cd libopenstm32
100         git archive --format=tar --prefix=libopenstm32-${LIBOPENSTM32}/ ${LIBOPENSTM32} | \
101             bzip2 --stdout > ../libopenstm32-${LIBOPENSTM32}.tar.bz2
102         cd ..
103         rm -rf libopenstm32
104 fi
105 fi
106
107 cd ${SUMMON_DIR}
108
109 if [ ! -e build ]; then
110     mkdir build
111 fi
112
113 if [ ! -e .${BINUTILS}.build ]; then
114     echo "******************************************************************"
115     echo "* Unpacking ${BINUTILS}"
116     echo "******************************************************************"
117     tar xfvj ${SOURCES}/${BINUTILS}.tar.bz2
118     cd build
119     echo "******************************************************************"
120     echo "* Configuring ${BINUTILS}"
121     echo "******************************************************************"
122     ../${BINUTILS}/configure --target=${TARGET} \
123                            --prefix=${PREFIX} \
124                            --enable-interwork \
125                            --enable-multilib \
126                            --with-gnu-as \
127                            --with-gnu-ld \
128                            --disable-nls || exit
129     echo "******************************************************************"
130     echo "* Building ${BINUTILS}"
131     echo "******************************************************************"
132     make ${PARALLEL} || exit
133     echo "******************************************************************"
134     echo "* Installing ${BINUTILS}"
135     echo "******************************************************************"
136     make install || exit
137     cd ..
138     echo "******************************************************************"
139     echo "* Cleaning up ${BINUTILS}"
140     echo "******************************************************************"
141     touch .${BINUTILS}.build
142     rm -rf build/* ${BINUTILS}
143 fi
144
145 if [ ! -e .${GCC}-boot.build ]; then
146     echo "******************************************************************"
147     echo "* Unpacking ${GCC}-boot"
148     echo "******************************************************************"
149     tar xfvj ${SOURCES}/${GCC}.tar.bz2
150     cd build
151     echo "******************************************************************"
152     echo "* Configuring ${GCC}-boot"
153     echo "******************************************************************"
154     ../${GCC}/configure --target=${TARGET} \
155                       --prefix=${PREFIX} \
156                       --enable-interwork \
157                       --enable-multilib \
158                       --enable-languages="c" \
159                       --with-newlib \
160                       --without-headers \
161                       --disable-shared \
162                       --with-gnu-as \
163                       --with-gnu-ld \
164                       --disable-nls \
165                       ${GCCFLAGS} || exit
166     echo "******************************************************************"
167     echo "* Building ${GCC}-boot"
168     echo "******************************************************************"
169     make ${PARALLEL} all-gcc || exit
170     echo "******************************************************************"
171     echo "* Installing ${GCC}-boot"
172     echo "******************************************************************"
173     make install-gcc || exit
174     cd ..
175     echo "******************************************************************"
176     echo "* Cleaning up ${GCC}-boot"
177     echo "******************************************************************"
178     touch .${GCC}-boot.build
179     rm -rf build/* ${GCC}
180 fi
181
182 if [ ! -e .${NEWLIB}.build ]; then
183     echo "******************************************************************"
184     echo "* Unpacking ${NEWLIB}"
185     echo "******************************************************************"
186     tar xfvz ${SOURCES}/${NEWLIB}.tar.gz
187     cd build
188     echo "******************************************************************"
189     echo "* Configuring ${NEWLIB}"
190     echo "******************************************************************"
191     ../${NEWLIB}/configure --target=${TARGET} \
192                          --prefix=${PREFIX} \
193                          --enable-interwork \
194                          --enable-multilib \
195                          --with-gnu-as \
196                          --with-gnu-ld \
197                          --disable-nls \
198                          --disable-newlib-supplied-syscalls || exit
199     echo "******************************************************************"
200     echo "* Building ${NEWLIB}"
201     echo "******************************************************************"
202     make ${PARALLEL} || exit
203     echo "******************************************************************"
204     echo "* Installing ${NEWLIB}"
205     echo "******************************************************************"
206     make install || exit
207     cd ..
208     echo "******************************************************************"
209     echo "* Cleaning up ${NEWLIB}"
210     echo "******************************************************************"
211     touch .${NEWLIB}.build
212     rm -rf build/* ${NEWLIB}
213 fi
214
215 # Yes, you need to build gcc again!
216 if [ ! -e .${GCC}.build ]; then
217     echo "******************************************************************"
218     echo "* Unpacking ${GCC}"
219     echo "******************************************************************"
220     #tar xfvj ${SOURCES}/${GCC}.tar.bz2
221     cd build
222     echo "******************************************************************"
223     echo "* Configuring ${GCC}"
224     echo "******************************************************************"
225 #    ../${GCC}/configure --target=${TARGET} \
226 #                      --prefix=${PREFIX} \
227 #                      --enable-interwork \
228 #                      --enable-multilib \
229 #                      --enable-languages="c,c++" \
230 #                      --with-newlib \
231 #                      --disable-shared \
232 #                      --with-gnu-as \
233 #                      --with-gnu-ld \
234 #                     --disable-nls \
235 #                     ${GCCFLAGS} || exit
236     echo "******************************************************************"
237     echo "* Building ${GCC}"
238     echo "******************************************************************"
239     make ${PARALLEL} || exit
240     echo "******************************************************************"
241     echo "* Installing ${GCC}"
242     echo "******************************************************************"
243     make install || exit
244     cd ..
245     echo "******************************************************************"
246     echo "* Cleaning up ${GCC}"
247     echo "******************************************************************"
248     touch .${GCC}.build
249     rm -rf build/* ${GCC}
250 fi
251
252 if [ ! -e .${GDB}.build ]; then
253     echo "******************************************************************"
254     echo "* Unpacking ${GDB}"
255     echo "******************************************************************"
256     tar xfvj ${SOURCES}/${GDB}.tar.bz2
257     cd build
258     echo "******************************************************************"
259     echo "* Configuring ${GDB}"
260     echo "******************************************************************"
261     ../${GDB}/configure --target=${TARGET} \
262                       --prefix=${PREFIX} \
263                       --enable-interwork \
264                       --enable-multilib \
265                       ${GDBFLAGS} || exit
266     echo "******************************************************************"
267     echo "* Building ${GDB}"
268     echo "******************************************************************"
269     make ${PARALLEL} || exit
270     echo "******************************************************************"
271     echo "* Installing ${GDB}"
272     echo "******************************************************************"
273     make install || exit
274     cd ..
275     echo "******************************************************************"
276     echo "* Cleaning up ${GDB}"
277     echo "******************************************************************"
278     touch .${GDB}.build
279     rm -rf build/* ${GDB}
280 fi
281
282 if [ ${LIBSTM32_EN} != 0 ]; then
283 if [ ! -e .libcmsis-${LIBCMSIS}.build ]; then
284     echo "******************************************************************"
285     echo "* Unpacking libcmsis-${LIBCMSIS}"
286     echo "******************************************************************"
287     tar xfvj ${SOURCES}/libcmsis-${LIBCMSIS}.tar.bz2
288     cd libcmsis-${LIBCMSIS}
289     echo "******************************************************************"
290     echo "* Building libcmsis-${LIBCMSIS}"
291     echo "******************************************************************"
292     make arch_prefix=${TARGET} prefix=${PREFIX} || exit
293     echo "******************************************************************"
294     echo "* Installing libcmsis-${LIBCMSIS}"
295     echo "******************************************************************"
296     make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
297     cd ..
298     echo "******************************************************************"
299     echo "* Cleaning up libcmsis-${LIBCMSIS}"
300     echo "******************************************************************"
301     touch .libcmsis-${LIBCMSIS}.build
302     rm -rf libcmsis-${LIBCMSIS}
303 fi
304
305 if [ ! -e .libstm32-${LIBSTM32}.build ]; then
306     echo "******************************************************************"
307     echo "* Unpacking libstm32-${LIBSTM32}"
308     echo "******************************************************************"
309     tar xfvj ${SOURCES}/libstm32-${LIBSTM32}.tar.bz2
310     cd libstm32-${LIBSTM32}
311     echo "******************************************************************"
312     echo "* Building libstm32-${LIBSTM32}"
313     echo "******************************************************************"
314     make arch_prefix=${TARGET} prefix=${PREFIX} || exit
315     echo "******************************************************************"
316     echo "* Installing libstm32-${LIBSTM32}"
317     echo "******************************************************************"
318     make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
319     cd ..
320     echo "******************************************************************"
321     echo "* Cleaning up libstm32-${LIBSTM32}"
322     echo "******************************************************************"
323     touch .libstm32-${LIBSTM32}.build
324     rm -rf libstm32-${LIBSTM32}
325 fi
326
327 if [ ! -e .libstm32usb-${LIBSTM32USB}.build ]; then
328     echo "******************************************************************"
329     echo "* Unpacking libstm32usb-${LIBSTM32USB}"
330     echo "******************************************************************"
331     tar xfvj ${SOURCES}/libstm32usb-${LIBSTM32USB}.tar.bz2
332     cd libstm32usb-${LIBSTM32USB}
333     echo "******************************************************************"
334     echo "* Building libstm32usb-${LIBSTM32USB}"
335     echo "******************************************************************"
336     make arch_prefix=${TARGET} prefix=${PREFIX} || exit
337     echo "******************************************************************"
338     echo "* Installing libstm32usb-${LIBSTM32USB}"
339     echo "******************************************************************"
340     make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
341     cd ..
342     echo "******************************************************************"
343     echo "* Cleaning up libstm32usb-${LIBSTM32USB}"
344     echo "******************************************************************"
345     touch .libstm32usb-${LIBSTM32USB}.build
346     rm -rf libstm32usb-${LIBSTM32USB}
347 fi
348 fi
349
350 if [ $LIBOPENSTM32_EN != 0 ]; then
351     echo "******************************************************************"
352     echo "* Unpacking libopenstm32-${LIBOPENSTM32}"
353     echo "******************************************************************"
354     tar xfvj ${SOURCES}/libopenstm32-${LIBOPENSTM32}.tar.bz2
355     cd libopenstm32-${LIBOPENSTM32}
356     echo "******************************************************************"
357     echo "* Building libopenstm32-${LIBOPENSTM32}"
358     echo "******************************************************************"
359     make PREFIX=${TARGET} DESTDIR=${PREFIX} || exit
360     echo "******************************************************************"
361     echo "* Installing libopenstm32-${LIBOPENSTM32}"
362     echo "******************************************************************"
363     make PREFIX=${TARGET} DESTDIR=${PREFIX} install || exit
364     cd ..
365     echo "******************************************************************"
366     echo "* Cleaning up libopenstm32-${LIBOPENSTM32}"
367     echo "******************************************************************"
368     touch .libopenstm32-${LIBOPENSTM32}.build
369     rm -rf libopenstm32-${LIBOPENSTM32}
370 fi