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
30 STAMPS=${SUMMON_DIR}/stamps
32 export PATH="${PREFIX}/bin:${PATH}"
38 # Fetch a versioned file from a URL
40 if [ ! -e ${STAMPS}/$1.fetch ]; then
41 echo "Downloading $1 sources..."
42 wget -c --no-passive-ftp $2
43 touch ${STAMPS}/$1.fetch
47 # Log a message out to the console
49 echo "******************************************************************"
51 echo "******************************************************************"
56 # Use 'auto' mode decompression. Replace with a switch if tar doesn't support -a
62 echo "Found Linux OS."
65 echo "Found Darwin OS."
66 GCCFLAGS="${GCCFLAGS} \
67 --with-gmp=${DARWIN_OPT_PATH} \
68 --with-mpfr=${DARWIN_OPT_PATH} \
69 --with-mpc=${DARWIN_OPT_PATH} \
70 -with-libiconv-prefix=${DARWIN_OPT_PATH}"
73 echo "Found unknown OS. Aborting!"
78 mkdir -p ${STAMPS} ${SOURCES}
82 fetch ${BINUTILS} http://ftp.gnu.org/gnu/binutils/${BINUTILS}.tar.bz2
83 fetch ${GCC} ${GCC_URL}
84 fetch ${NEWLIB} ftp://sources.redhat.com/pub/newlib/${NEWLIB}.tar.gz
85 fetch ${GDB} http://ftp.gnu.org/gnu/gdb/${GDB}.tar.bz2
87 if [ ${LIBSTM32_EN} != 0 ]; then
88 if [ ! -e libcmsis-${LIBCMSIS}.tar.bz2 ]; then
89 echo "Cloning libcmsis sources..."
90 git clone git://git.open-bldc.org/libcmsis.git
92 git archive --format=tar --prefix=libcmsis-${LIBCMSIS}/ ${LIBCMSIS} | \
93 bzip2 --stdout > ../libcmsis-${LIBCMSIS}.tar.bz2
98 if [ ! -e libstm32-${LIBSTM32}.tar.bz2 ]; then
99 echo "Cloning libstm32 sources..."
100 git clone git://git.open-bldc.org/libstm32.git
102 git archive --format=tar --prefix=libstm32-${LIBSTM32}/ ${LIBSTM32} | \
103 bzip2 --stdout > ../libstm32-${LIBSTM32}.tar.bz2
108 if [ ! -e libstm32usb-${LIBSTM32USB}.tar.bz2 ]; then
109 echo "Cloning libstm32usb sources..."
110 git clone git://git.open-bldc.org/libstm32usb.git
112 git archive --format=tar --prefix=libstm32usb-${LIBSTM32USB}/ ${LIBSTM32USB} | \
113 bzip2 --stdout > ../libstm32usb-${LIBSTM32USB}.tar.bz2
119 if [ ${LIBOPENSTM32_EN} != 0 ]; then
120 if [ ! -e libopenstm32-${LIBOPENSTM32}.tar.bz2 ]; then
121 echo "Cloning libopenstm32 sources..."
122 git clone git://libopenstm32.git.sourceforge.net/gitroot/libopenstm32/libopenstm32
124 git archive --format=tar --prefix=libopenstm32-${LIBOPENSTM32}/ ${LIBOPENSTM32} | \
125 bzip2 --stdout > ../libopenstm32-${LIBOPENSTM32}.tar.bz2
133 if [ ! -e build ]; then
137 if [ ! -e ${STAMPS}/${BINUTILS}.build ]; then
138 log "Unpacking ${BINUTILS}"
139 unpack ${SOURCES}/${BINUTILS}.tar.bz2
141 log "Configuring ${BINUTILS}"
142 ../${BINUTILS}/configure --target=${TARGET} \
150 ${BINUTILFLAGS} || exit
151 log "Building ${BINUTILS}"
152 make ${PARALLEL} || exit
153 log "Installing ${BINUTILS}"
156 log "Cleaning up ${BINUTILS}"
157 touch ${STAMPS}/${BINUTILS}.build
158 rm -rf build/* ${BINUTILS}
161 if [ ! -e ${STAMPS}/${GCC}-boot.build ]; then
162 log "Unpacking ${GCC}-boot"
163 unpack ${SOURCES}/${GCC}.tar.bz2
165 log "Configuring ${GCC}-boot"
166 ../${GCC}/configure --target=${TARGET} \
170 --enable-languages="c" \
179 log "Building ${GCC}-boot"
180 make ${PARALLEL} all-gcc || exit
181 log "Installing ${GCC}-boot"
182 make install-gcc || exit
184 log "Cleaning up ${GCC}-boot"
185 touch ${STAMPS}/${GCC}-boot.build
186 rm -rf build/* ${GCC}
189 if [ ! -e ${STAMPS}/${NEWLIB}.build ]; then
190 log "Unpacking ${NEWLIB}"
191 unpack ${SOURCES}/${NEWLIB}.tar.gz
193 log "Configuring ${NEWLIB}"
194 ../${NEWLIB}/configure --target=${TARGET} \
202 --disable-newlib-supplied-syscalls || exit
203 log "Building ${NEWLIB}"
204 make ${PARALLEL} || exit
205 log "Installing ${NEWLIB}"
208 log "Cleaning up ${NEWLIB}"
209 touch ${STAMPS}/${NEWLIB}.build
210 rm -rf build/* ${NEWLIB}
213 # Yes, you need to build gcc again!
214 if [ ! -e ${STAMPS}/${GCC}.build ]; then
215 log "Unpacking ${GCC}"
216 unpack ${SOURCES}/${GCC}.tar.bz2
218 log "Configuring ${GCC}"
219 ../${GCC}/configure --target=${TARGET} \
223 --enable-languages="c,c++" \
231 log "Building ${GCC}"
232 make ${PARALLEL} || exit
233 log "Installing ${GCC}"
236 log "Cleaning up ${GCC}"
237 touch ${STAMPS}/${GCC}.build
238 rm -rf build/* ${GCC}
241 if [ ! -e ${STAMPS}/${GDB}.build ]; then
242 log "Unpacking ${GDB}"
243 unpack ${SOURCES}/${GDB}.tar.bz2
245 log "Configuring ${GDB}"
246 ../${GDB}/configure --target=${TARGET} \
252 log "Building ${GDB}"
253 make ${PARALLEL} || exit
254 log "Installing ${GDB}"
257 log "Cleaning up ${GDB}"
258 touch ${STAMPS}/${GDB}.build
259 rm -rf build/* ${GDB}
262 if [ ${LIBSTM32_EN} != 0 ]; then
263 if [ ! -e .libcmsis-${LIBCMSIS}.build ]; then
264 log "Unpacking libcmsis-${LIBCMSIS}"
265 unpack ${SOURCES}/libcmsis-${LIBCMSIS}.tar.bz2
266 cd libcmsis-${LIBCMSIS}
267 log "Building libcmsis-${LIBCMSIS}"
268 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
269 log "Installing libcmsis-${LIBCMSIS}"
270 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
272 log "Cleaning up libcmsis-${LIBCMSIS}"
273 touch .libcmsis-${LIBCMSIS}.build
274 rm -rf libcmsis-${LIBCMSIS}
277 if [ ! -e .libstm32-${LIBSTM32}.build ]; then
278 log "Unpacking libstm32-${LIBSTM32}"
279 unpack ${SOURCES}/libstm32-${LIBSTM32}.tar.bz2
280 cd libstm32-${LIBSTM32}
281 log "Building libstm32-${LIBSTM32}"
282 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
283 log "Installing libstm32-${LIBSTM32}"
284 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
286 log "Cleaning up libstm32-${LIBSTM32}"
287 touch .libstm32-${LIBSTM32}.build
288 rm -rf libstm32-${LIBSTM32}
291 if [ ! -e .libstm32usb-${LIBSTM32USB}.build ]; then
292 log "Unpacking libstm32usb-${LIBSTM32USB}"
293 unpack ${SOURCES}/libstm32usb-${LIBSTM32USB}.tar.bz2
294 cd libstm32usb-${LIBSTM32USB}
295 log "Building libstm32usb-${LIBSTM32USB}"
296 make arch_prefix=${TARGET} prefix=${PREFIX} || exit
297 log "Installing libstm32usb-${LIBSTM32USB}"
298 make arch_prefix=${TARGET} prefix=${PREFIX} install || exit
300 log "Cleaning up libstm32usb-${LIBSTM32USB}"
301 touch .libstm32usb-${LIBSTM32USB}.build
302 rm -rf libstm32usb-${LIBSTM32USB}
306 if [ $LIBOPENSTM32_EN != 0 ]; then
307 log "Unpacking libopenstm32-${LIBOPENSTM32}"
308 unpack ${SOURCES}/libopenstm32-${LIBOPENSTM32}.tar.bz2
309 cd libopenstm32-${LIBOPENSTM32}
310 log "Building libopenstm32-${LIBOPENSTM32}"
311 make PREFIX=${TARGET} DESTDIR=${PREFIX} || exit
312 log "Installing libopenstm32-${LIBOPENSTM32}"
313 make PREFIX=${TARGET} DESTDIR=${PREFIX} install || exit
315 log "Cleaning up libopenstm32-${LIBOPENSTM32}"
316 touch .libopenstm32-${LIBOPENSTM32}.build
317 rm -rf libopenstm32-${LIBOPENSTM32}