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