2 # Written by Uwe Hermann <uwe@hermann-uwe.de>, released as public domain.
3 # Modified by Piot Esden-Tempski <piotr@esden.net>, released as public domain.
5 TARGET=arm-none-eabi # Or: TARGET=arm-none-eabi
6 PREFIX=${HOME}/arm-none-eabi # Install location of your final toolchain
7 PARALLEL="-j 5" # Or: PARALLEL=""
9 BINUTILS=binutils-2.19.1
17 export PATH="${PREFIX}/bin:${PATH}"
19 if [ ! -e sources ]; then
24 if [ ! -e ${BINUTILS}.tar.bz2 ]; then
25 echo "Downloading binutils sources..."
26 wget -c http://ftp.gnu.org/gnu/binutils/${BINUTILS}.tar.bz2
29 if [ ! -e ${GCC}.tar.bz2 ]; then
30 echo "Downloading gcc sources..."
31 wget -c ftp://ftp.gnu.org/gnu/gcc/${GCC}/${GCC}.tar.bz2
34 if [ ! -e ${NEWLIB}.tar.gz ]; then
35 echo "Downloading newlib sources..."
36 wget -c ftp://sources.redhat.com/pub/newlib/${NEWLIB}.tar.gz
39 if [ ! -e ${GDB}.tar.bz2 ]; then
40 echo "Downloading gdb sources..."
41 wget -c ftp://ftp.gnu.org/gnu/gdb/${GDB}.tar.bz2
44 if [ ! -e libcmsis-${LIBCMSIS}.tar.bz2 ]; then
45 echo "Cloning libcmsis sources..."
46 git clone git://git.open-bldc.org/libcmsis.git
48 git archive --format=tar --prefix=libcmsis-${LIBCMSIS}/ ${LIBCMSIS} | \
49 bzip2 --stdout > ../libcmsis-${LIBCMSIS}.tar.bz2
54 if [ ! -e libstm32-${LIBSTM32}.tar.bz2 ]; then
55 echo "Cloning libstm32 sources..."
56 git clone git://git.open-bldc.org/libstm32.git
58 git archive --format=tar --prefix=libstm32-${LIBSTM32}/ ${LIBSTM32} | \
59 bzip2 --stdout > ../libstm32-${LIBSTM32}.tar.bz2
64 if [ ! -e libstm32usb-${LIBSTM32USB}.tar.bz2 ]; then
65 echo "Cloning libstm32usb sources..."
66 git clone git://git.open-bldc.org/libstm32usb.git
68 git archive --format=tar --prefix=libstm32usb-${LIBSTM32USB}/ ${LIBSTM32USB} | \
69 bzip2 --stdout > ../libstm32usb-${LIBSTM32USB}.tar.bz2
76 if [ ! -e build ]; then
80 if [ ! -e .${BINUTILS}.build ]; then
81 echo "******************************************************************"
82 echo "* Unpacking ${BINUTILS}"
83 echo "******************************************************************"
84 tar xfvj sources/${BINUTILS}.tar.bz2
86 echo "******************************************************************"
87 echo "* Configuring ${BINUTILS}"
88 echo "******************************************************************"
89 ../${BINUTILS}/configure --target=${TARGET} \
96 echo "******************************************************************"
97 echo "* Building ${BINUTILS}"
98 echo "******************************************************************"
99 make ${PARALLEL} || exit
100 echo "******************************************************************"
101 echo "* Installing ${BINUTILS}"
102 echo "******************************************************************"
105 echo "******************************************************************"
106 echo "* Cleaning up ${BINUTILS}"
107 echo "******************************************************************"
108 touch .${BINUTILS}.build
109 rm -rf build/* ${BINUTILS}
112 if [ ! -e .${GCC}-boot.build ]; then
113 echo "******************************************************************"
114 echo "* Unpacking ${GCC}-boot"
115 echo "******************************************************************"
116 tar xfvj sources/${GCC}.tar.bz2
118 echo "******************************************************************"
119 echo "* Configuring ${GCC}-boot"
120 echo "******************************************************************"
121 ../${GCC}/configure --target=${TARGET} \
125 --enable-languages="c" \
131 --disable-nls || exit
132 echo "******************************************************************"
133 echo "* Building ${GCC}-boot"
134 echo "******************************************************************"
135 make ${PARALLEL} all-gcc || exit
136 echo "******************************************************************"
137 echo "* Installing ${GCC}-boot"
138 echo "******************************************************************"
139 make install-gcc || exit
141 echo "******************************************************************"
142 echo "* Cleaning up ${GCC}-boot"
143 echo "******************************************************************"
144 touch .${GCC}-boot.build
145 rm -rf build/* ${GCC}
148 if [ ! -e .${NEWLIB}.build ]; then
149 echo "******************************************************************"
150 echo "* Unpacking ${NEWLIB}"
151 echo "******************************************************************"
152 tar xfvz sources/${NEWLIB}.tar.gz
154 echo "******************************************************************"
155 echo "* Configuring ${NEWLIB}"
156 echo "******************************************************************"
157 ../${NEWLIB}/configure --target=${TARGET} \
164 --disable-newlib-supplied-syscalls || exit
165 echo "******************************************************************"
166 echo "* Building ${NEWLIB}"
167 echo "******************************************************************"
168 make ${PARALLEL} || exit
169 echo "******************************************************************"
170 echo "* Installing ${NEWLIB}"
171 echo "******************************************************************"
174 echo "******************************************************************"
175 echo "* Cleaning up ${NEWLIB}"
176 echo "******************************************************************"
177 touch .${NEWLIB}.build
178 rm -rf build/* ${NEWLIB}
181 # Yes, you need to build gcc again!
182 if [ ! -e .${GCC}.build ]; then
183 echo "******************************************************************"
184 echo "* Unpacking ${GCC}"
185 echo "******************************************************************"
186 tar xfvj sources/${GCC}.tar.bz2
188 echo "******************************************************************"
189 echo "* Configuring ${GCC}"
190 echo "******************************************************************"
191 ../${GCC}/configure --target=${TARGET} \
195 --enable-languages="c,c++" \
200 --disable-nls || exit
201 echo "******************************************************************"
202 echo "* Building ${GCC}"
203 echo "******************************************************************"
204 make ${PARALLEL} || exit
205 echo "******************************************************************"
206 echo "* Installing ${GCC}"
207 echo "******************************************************************"
210 echo "******************************************************************"
211 echo "* Cleaning up ${GCC}"
212 echo "******************************************************************"
214 rm -rf build/* ${GCC}
217 if [ ! -e .${GDB}.build ]; then
218 echo "******************************************************************"
219 echo "* Unpacking ${GDB}"
220 echo "******************************************************************"
221 tar xfvj sources/${GDB}.tar.bz2
223 echo "******************************************************************"
224 echo "* Configuring ${GDB}"
225 echo "******************************************************************"
226 ../${GDB}/configure --target=${TARGET} \
229 --enable-multilib || exit
230 echo "******************************************************************"
231 echo "* Building ${GDB}"
232 echo "******************************************************************"
233 make ${PARALLEL} || exit
234 echo "******************************************************************"
235 echo "* Installing ${GDB}"
236 echo "******************************************************************"
239 echo "******************************************************************"
240 echo "* Cleaning up ${GDB}"
241 echo "******************************************************************"
243 rm -rf build/* ${GDB}
246 if [ ! -e .libcmsis-${LIBCMSIS}.build ]; then
247 echo "******************************************************************"
248 echo "* Unpacking libcmsis-${LIBCMSIS}"
249 echo "******************************************************************"
250 tar xfvj sources/libcmsis-${LIBCMSIS}.tar.bz2
251 cd libcmsis-${LIBCMSIS}
252 echo "******************************************************************"
253 echo "* Building libcmsis-${LIBCMSIS}"
254 echo "******************************************************************"
255 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
256 echo "******************************************************************"
257 echo "* Installing libcmsis-${LIBCMSIS}"
258 echo "******************************************************************"
259 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
261 echo "******************************************************************"
262 echo "* Cleaning up libcmsis-${LIBCMSIS}"
263 echo "******************************************************************"
264 touch .libcmsis-${LIBCMSIS}.build
265 rm -rf libcmsis-${LIBCMSIS}
268 if [ ! -e .libstm32-${LIBSTM32}.build ]; then
269 echo "******************************************************************"
270 echo "* Unpacking libstm32-${LIBSTM32}"
271 echo "******************************************************************"
272 tar xfvj sources/libstm32-${LIBSTM32}.tar.bz2
273 cd libstm32-${LIBSTM32}
274 echo "******************************************************************"
275 echo "* Building libstm32-${LIBSTM32}"
276 echo "******************************************************************"
277 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
278 echo "******************************************************************"
279 echo "* Installing libstm32-${LIBSTM32}"
280 echo "******************************************************************"
281 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
283 echo "******************************************************************"
284 echo "* Cleaning up libstm32-${LIBSTM32}"
285 echo "******************************************************************"
286 touch .libstm32-${LIBSTM32}.build
287 rm -rf libstm32-${LIBSTM32}
290 if [ ! -e .libstm32usb-${LIBSTM32USB}.build ]; then
291 echo "******************************************************************"
292 echo "* Unpacking libstm32usb-${LIBSTM32USB}"
293 echo "******************************************************************"
294 tar xfvj sources/libstm32usb-${LIBSTM32USB}.tar.bz2
295 cd libstm32usb-${LIBSTM32USB}
296 echo "******************************************************************"
297 echo "* Building libstm32usb-${LIBSTM32USB}"
298 echo "******************************************************************"
299 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
300 echo "******************************************************************"
301 echo "* Installing libstm32usb-${LIBSTM32USB}"
302 echo "******************************************************************"
303 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
305 echo "******************************************************************"
306 echo "* Cleaning up libstm32usb-${LIBSTM32USB}"
307 echo "******************************************************************"
308 touch .libstm32usb-${LIBSTM32USB}.build
309 rm -rf libstm32usb-${LIBSTM32USB}