3 # Written by Uwe Hermann <uwe@hermann-uwe.de>, released as public domain.
4 # Modified by Piotr Esden-Tempski <piotr@esden.net>, released as public domain.
5 # Modified by Christophe Duparquet <e39@free.fr>, released as public domain.
9 # This script was contributed by Cristophe it contains several implementation
10 # improvements. I did not test it myself and I know that it lacks support for
11 # linaro GCC. I currenty have no time to integrate the improvements into the
12 # original summon-arm-toolchain. It is a nice reference where SAR should go
13 # implementationwise, IMHO. Maybe someone with some more time on their hands
14 # would help out here and incorporate the improvements into the original SAR
15 # that more up to date and has additional features. It would be very
18 # Also take a look into the HOW-TO-SUBMIT section of the main README what is
19 # the prefered way to submit patches to SAR.
21 # This script will build a GNU ARM toolchain in the directory arm-toolchain.
22 # Process can be suspended and restarted at will.
23 # Packages are downloaded to arm-toolchain/archives/.
24 # Packages are extracted to arm-toolchain/sources/.
25 # Packages are built in arm-toolchain/build/.
26 # arm-toolchain/install contains the result of make install for each tool.
27 # arm-toolchain/status contains the status of each part of the process (logs, errors...)
30 # PACKAGE_DESCRIPTION = BASE_URL ARCHIVE_BASENAME PACKAGE_VERSION ARCHIVE_TYPE URL_OPTIONS
32 BINUTILS="http://ftp.gnu.org/gnu/binutils binutils 2.19.1 tar.bz2"
33 GCC="ftp://ftp.lip6.fr/pub/gcc/releases/gcc-4.4.4 gcc 4.4.4 tar.bz2"
34 GDB="http://ftp.gnu.org/gnu/gdb gdb 7.1 tar.bz2"
35 NEWLIB="ftp://sources.redhat.com/pub/newlib newlib 1.18.0 tar.gz --no-passive-ftp"
36 INSIGHT="ftp://sourceware.org/pub/insight/releases insight 6.8-1 tar.bz2"
38 LIBCMSIS="git://git.open-bldc.org libcmsis git dir"
39 LIBSTM32="git://git.open-bldc.org libstm32 git dir"
40 LIBSTM32USB="git://git.open-bldc.org libstm32usb git dir"
41 LIBOPENSTM32="git://libopenstm32.git.sourceforge.net/gitroot/libopenstm32 libopenstm32 git dir"
44 TARGET=arm-none-eabi # Or: TARGET=arm-elf
46 BASEDIR=$(pwd)/arm-toolchain # Base directory
47 ARCHIVES=${BASEDIR}/archives # Where to store downloaded packages
48 SOURCES=${BASEDIR}/sources # Where to extract packages
49 BUILD=${BASEDIR}/build # Where to build packages
50 STATUS=${BASEDIR}/status # Where to store building process status
51 PREFIX=${BASEDIR}/install # Install location of your final toolchain
53 PARALLEL=-j$(getconf _NPROCESSORS_ONLN)
55 export PATH="${PREFIX}/bin:${PATH}"
56 mkdir -p ${ARCHIVES} ${SOURCES} ${BUILD} ${STATUS}
60 echo -e "\n\n**FAIL**"
62 # echo -e "\nIn ${ERR} :"
76 SOURCE=$ANAME-$AVERSION
77 ARCHIVE=$SOURCE.$ATYPE
82 CMD=${STATUS}/${SOURCE}.fetch.cmd
83 LOG=${STATUS}/${SOURCE}.fetch.log
84 ERR=${STATUS}/${SOURCE}.fetch.errors
85 DONE=${STATUS}/${SOURCE}.fetch.done
87 if [ -e ${DONE} ]; then
88 echo "${SOURCE} already fetched"
103 echo "${URL}: unknown protocol." >${ERR}
110 echo -n "Downloading $ARCHIVE ... "
111 echo wget -c $URL_OPTIONS "$URL/$ARCHIVE" >${CMD}
112 wget -c $URL_OPTIONS "$URL/$ARCHIVE" >${LOG} 2>${ERR} || die
117 echo -n "Downloading $SOURCE ... "
118 echo git clone "$URL/$ANAME.git" >${CMD}
119 ((git clone "$URL/$ANAME.git" || git clone "$URL/$ANAME") \
120 && mv ${ANAME} ${ANAME}-git) >${LOG} 2>${ERR} || die
129 CMD=${STATUS}/${SOURCE}.extract.cmd
130 LOG=${STATUS}/${SOURCE}.extract.log
131 ERR=${STATUS}/${SOURCE}.extract.errors
132 DONE=${STATUS}/${SOURCE}.extract.done
135 if [ -e ${DONE} ] ; then
136 echo "${SOURCE} already extracted"
138 echo -n "Extracting ${SOURCE} ... "
149 cp -a "$SOURCES/$SOURCE" "$BUILD/$SOURCE"
152 if [ -d ${ARCHIVES}/${ARCHIVE} ] ; then
153 ln -s ${ARCHIVES}/${ARCHIVE} .
154 ln -s ${ARCHIVES}/${ARCHIVE} ${BUILD}
158 echo "${ARCHIVE}: unknown archive format." >${ERR}
162 if [ -n "$COMMAND" ] ; then
163 echo "tar $COMMAND ${ARCHIVES}/${ARCHIVE}" >${CMD}
164 tar $COMMAND ${ARCHIVES}/${ARCHIVE} >${LOG} 2>${ERR} || die
176 [ -z "$PASS" ] || ZPASS=".$PASS"
177 CMD=${STATUS}/${SOURCE}.configure${ZPASS}.cmd
178 LOG=${STATUS}/${SOURCE}.configure${ZPASS}.log
179 ERR=${STATUS}/${SOURCE}.configure${ZPASS}.errors
180 DONE=${STATUS}/${SOURCE}.configure${ZPASS}.done
183 if [ -e ${DONE} ]; then
184 echo "${SOURCE} already configured"
186 echo -n "Configuring ${SOURCE} ... "
187 mkdir -p ${BUILD}/${SOURCE}
188 cd ${BUILD}/${SOURCE}
189 echo "${SOURCES}/${SOURCE}/configure $OPTIONS" >${CMD}
190 ${SOURCES}/${SOURCE}/configure $OPTIONS >${LOG} 2>${ERR} || die
202 [ -z "$WHAT" ] || ZWHAT=".$WHAT"
203 [ -z "$PASS" ] || ZPASS=".$PASS"
204 CMD=${STATUS}/${SOURCE}.make${ZWHAT}${ZPASS}.cmd
205 LOG=${STATUS}/${SOURCE}.make${ZWHAT}${ZPASS}.log
206 ERR=${STATUS}/${SOURCE}.make${ZWHAT}${ZPASS}.errors
207 DONE=${STATUS}/${SOURCE}.make${ZWHAT}${ZPASS}.done
210 if [ -e ${DONE} ]; then
211 echo "Make ${SOURCE} \"${WHAT}\" already done"
213 echo -n "Make ${SOURCE} \"${WHAT}\" ... "
214 cd ${BUILD}/${SOURCE}
215 echo "make ${WHAT} $OPTIONS" >${CMD}
216 make ${PARALLEL} ${WHAT} $OPTIONS >${LOG} 2>${ERR} || die
220 unset PASS ZPASS ZWHAT
252 --enable-languages="c" \
260 PASS=1 domake all-gcc
261 PASS=1 domake install-gcc
278 --disable-newlib-supplied-syscalls
286 # rm -rf ${BUILD}/${SOURCE}
287 # rm ${STATUS}/${SOURCE}.configure.done
293 --enable-languages="c,c++" \
301 PASS=2 domake install
327 --enable-languages=c,c++ \
346 domake "" arch_prefix=${TARGET} prefix=${PREFIX}
347 domake install arch_prefix=${TARGET} prefix=${PREFIX}
355 domake "" arch_prefix=${TARGET} prefix=${PREFIX}
356 domake install arch_prefix=${TARGET} prefix=${PREFIX}
364 domake "" arch_prefix=${TARGET} prefix=${PREFIX}
365 domake install arch_prefix=${TARGET} prefix=${PREFIX}
370 context $LIBOPENSTM32
373 domake "" DESTDIR=${PREFIX} PREFIX=${TARGET}
374 domake install DESTDIR=${PREFIX} PREFIX=${TARGET}