diff options
Diffstat (limited to 'summon-arm-toolchain')
-rwxr-xr-x | summon-arm-toolchain | 334 |
1 files changed, 160 insertions, 174 deletions
diff --git a/summon-arm-toolchain b/summon-arm-toolchain index d77d3a5..fa086ff 100755 --- a/summon-arm-toolchain +++ b/summon-arm-toolchain @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash -x # Written by Uwe Hermann <uwe@hermann-uwe.de>, released as public domain. # Modified by Piotr Esden-Tempski <piotr@esden.net>, released as public domain. @@ -18,23 +18,21 @@ set -e # Settings section # You probably want to customize those ############################################################################## -TARGET=arm-none-eabi # Or: TARGET=arm-elf -PREFIX=${HOME}/sat # Install location of your final toolchain -DARWIN_OPT_PATH=/opt/local # Path in which MacPorts or Fink is installed +TARGET=arm-none-eabi # Or: TARGET=arm-elf +PREFIX=/usr/local # Install location of your final toolchain +DARWIN_OPT_PATH=/sw # Path in which MacPorts or Fink is installed # Set to 'sudo' if you need superuser privileges while installing -SUDO= +SUDO=sudo # Set to 1 to be quieter while running QUIET=0 # Set to 1 to use linaro gcc instead of the FSF gcc USE_LINARO=1 # Set to 1 to enable building of OpenOCD OOCD_EN=1 -# Set to 1 to build libstm32 provided by ST -LIBSTM32_EN=0 -# Set to 1 to build libopenstm32 an open source library for stm32 -LIBOPENSTM32_EN=1 # Make the gcc default to Cortex-M3 -DEFAULT_TO_CORTEX_M3=0 +DEFAULT_TO_CORTEX_M3=1 +# Build for a second host - mingw32 +#SECOND_HOST=i586-mingw32msvc ############################################################################## # Version and download url settings section @@ -53,13 +51,8 @@ else fi BINUTILS=binutils-2.20 -NEWLIB=newlib-1.18.0 GDB=gdb-7.2 OOCD=master -LIBCMSIS=v1.10-2 -LIBSTM32=v3.0.0-1 -LIBSTM32USB=v3.0.1-1 -LIBOPENSTM32=master ############################################################################## # Flags section @@ -83,6 +76,8 @@ else GCCFLAGS="--with-arch=armv7-m --with-mode=thumb --with-float=soft" fi +GCCFLAGS_FOR_TARGET="-ffunction-sections -fdata-sections -fomit-frame-pointer -DPREFER_SIZE_OVER_SPEED -D__OPTIMIZE_SIZE__ -g -Os -fshort-wchar -fno-unroll-loops -mabi=aapcs" + # Pull in the local configuration, if any if [ -f local.sh ]; then . ./local.sh @@ -124,8 +119,10 @@ case "$(uname)" in --with-mpfr=${DARWIN_OPT_PATH} \ --with-mpc=${DARWIN_OPT_PATH} \ --with-libiconv-prefix=${DARWIN_OPT_PATH}" - OOCD_CFLAGS="-m32 -I/opt/mine/include -I/opt/local/include" - OOCD_LDFLAGS="-L/opt/mine/lib -L/opt/local/lib" + GCC_CPPFLAGS="-m32" + GCC_LDFLAGS="-m32" + OOCD_CFLAGS="-m32 -I${DARWIN_OPT_PATH}/include" + OOCD_LDFLAGS="-L${DARWIN_OPT_PATH}/lib" ;; CYGWIN*) echo "Found CygWin that means Windows most likely." @@ -193,7 +190,6 @@ cd ${SOURCES} fetch ${BINUTILS} http://ftp.gnu.org/gnu/binutils/${BINUTILS}.tar.bz2 fetch ${GCC} ${GCCURL} -fetch ${NEWLIB} ftp://sources.redhat.com/pub/newlib/${NEWLIB}.tar.gz fetch ${GDB} http://ftp.gnu.org/gnu/gdb/${GDB}.tar.bz2 if [ ${OOCD_EN} != 0 ]; then @@ -201,68 +197,21 @@ if [ ! -e openocd-${OOCD}.tar.bz2 ]; then log "Cloning OpenOCD sources..." git clone git://openocd.git.sourceforge.net/gitroot/openocd/openocd openocd-${OOCD} cd openocd-${OOCD} + git am ../../0001-Adding-windows-support-for-BusPirate.patch ./bootstrap + rm -rf .git cd .. tar cfvj openocd-${OOCD}.tar.bz2 openocd-${OOCD} - #git archive --format=tar --prefix=openocd-${OOCD}/ ${OOCD} | \ - # bzip2 --stdout > ../openocd-${OOCD}.tar.bz2 rm -rf openocd-${OOCD} fi fi -if [ ${LIBSTM32_EN} != 0 ]; then -if [ ! -e libcmsis-${LIBCMSIS}.tar.bz2 ]; then - log "Cloning libcmsis sources..." - git clone git://git.open-bldc.org/libcmsis.git - cd libcmsis - git archive --format=tar --prefix=libcmsis-${LIBCMSIS}/ ${LIBCMSIS} | \ - bzip2 --stdout > ../libcmsis-${LIBCMSIS}.tar.bz2 - cd .. - rm -rf libcmsis -fi - -if [ ! -e libstm32-${LIBSTM32}.tar.bz2 ]; then - log "Cloning libstm32 sources..." - git clone git://git.open-bldc.org/libstm32.git - cd libstm32 - git archive --format=tar --prefix=libstm32-${LIBSTM32}/ ${LIBSTM32} | \ - bzip2 --stdout > ../libstm32-${LIBSTM32}.tar.bz2 - cd .. - rm -rf libstm32 -fi - -if [ ! -e libstm32usb-${LIBSTM32USB}.tar.bz2 ]; then - log "Cloning libstm32usb sources..." - git clone git://git.open-bldc.org/libstm32usb.git - cd libstm32usb - git archive --format=tar --prefix=libstm32usb-${LIBSTM32USB}/ ${LIBSTM32USB} | \ - bzip2 --stdout > ../libstm32usb-${LIBSTM32USB}.tar.bz2 - cd .. - rm -rf libstm32usb -fi -fi - -if [ ${LIBOPENSTM32_EN} != 0 ]; then -if [ ! -e libopenstm32-${LIBOPENSTM32}.tar.bz2 ]; then - log "Cloning libopenstm32 sources..." - git clone git://libopenstm32.git.sourceforge.net/gitroot/libopenstm32/libopenstm32 - cd libopenstm32 - git archive --format=tar --prefix=libopenstm32-${LIBOPENSTM32}/ ${LIBOPENSTM32} | \ - bzip2 --stdout > ../libopenstm32-${LIBOPENSTM32}.tar.bz2 - cd .. - rm -rf libopenstm32 -fi -fi - cd ${SUMMON_DIR} - -if [ ! -e build ]; then - mkdir build -fi - if [ ! -e ${STAMPS}/${BINUTILS}.build ]; then unpack ${BINUTILS} - cd build + rm -rf build-${BINUTILS} + mkdir -p build-${BINUTILS} + cd build-${BINUTILS} log "Configuring ${BINUTILS}" ../${BINUTILS}/configure --target=${TARGET} \ --prefix=${PREFIX} \ @@ -272,25 +221,55 @@ if [ ! -e ${STAMPS}/${BINUTILS}.build ]; then --with-gnu-ld \ --disable-nls \ --disable-werror \ - ${BINUTILFLAGS} + ${BINUTILFLAGS} log "Building ${BINUTILS}" make ${MAKEFLAGS} install ${BINUTILS} install cd .. - log "Cleaning up ${BINUTILS}" touch ${STAMPS}/${BINUTILS}.build - rm -rf build/* ${BINUTILS} fi -if [ ! -e ${STAMPS}/${GCC}-boot.build ]; then - unpack ${GCC} boot - cd build - log "Configuring ${GCC}-boot" - ../${GCC}/configure --target=${TARGET} \ +cd ${SUMMON_DIR} +if [ ${SECOND_HOST} != "" ]; then +if [ ! -e ${STAMPS}/${BINUTILS}.build.${SECOND_HOST} ]; then + unpack ${BINUTILS} + rm -rf build-${BINUTILS}.${SECOND_HOST} + mkdir -p build-${BINUTILS}.${SECOND_HOST} + cd build-${BINUTILS}.${SECOND_HOST} + log "Configuring ${BINUTILS}" + ../${BINUTILS}/configure --target=${TARGET} \ + --host=${SECOND_HOST} \ + --prefix=${PREFIX} \ + --enable-interwork \ + --enable-multilib \ + --with-gnu-as \ + --with-gnu-ld \ + --disable-nls \ + --disable-werror \ + ${BINUTILFLAGS} + log "Building ${BINUTILS}" + make ${MAKEFLAGS} + make install prefix=${SUMMON_DIR}/${SECOND_HOST} + cd .. + touch ${STAMPS}/${BINUTILS}.build.${SECOND_HOST} +fi +fi + +cd ${SUMMON_DIR} +if [ ! -e ${STAMPS}/${GCC}.build ]; then + unpack ${GCC} gcc + cd ${GCC} + patch -p 1 < ../gcc.patch + rm -rf libstdc++-v3 + cd .. + mkdir -p build-${GCC} + cd build-${GCC} + log "Configuring ${GCC}" + LDFLAGS="${GCC_LDFLAGS}" CPPFLAGS="${GCC_CPPFLAGS}" ../${GCC}/configure --target=${TARGET} \ --prefix=${PREFIX} \ --enable-interwork \ --enable-multilib \ - --enable-languages="c" \ + --enable-languages="c,c++" \ --with-newlib \ --without-headers \ --disable-shared \ @@ -298,70 +277,74 @@ if [ ! -e ${STAMPS}/${GCC}-boot.build ]; then --with-gnu-ld \ --disable-nls \ --disable-werror \ - --with-system-zlib \ - ${GCCFLAGS} - log "Building ${GCC}-boot" - make ${MAKEFLAGS} all-gcc - install ${GCC}-boot install-gcc + --with-system-zlib \ + --disable-libssp \ + --enable-target-optspace \ + --disable-threads \ + --disable-libmudflap \ + --disable-libgomp \ + --disable-libstdcxx-pch \ + --disable-libunwind-exceptions \ + --disable-libffi \ + --enable-extra-sgxxlite-multilibs \ + --enable-libstdcxx-allocator=malloc \ + --disable-lto \ + --enable-cxx-flags="${GCCFLAGS_FOR_TARGET}" \ + ${GCCFLAGS} + log "Building ${GCC}" + LDFLAGS="${GCC_LDFLAGS}" CPPFLAGS="${GCC_CPPFLAGS}" make ${MAKEFLAGS} CFLAGS_FOR_TARGET="${GCCFLAGS_FOR_TARGET}" + install ${GCC} install cd .. log "Cleaning up ${GCC}-boot" - touch ${STAMPS}/${GCC}-boot.build - rm -rf build/* ${GCC} -fi - -if [ ! -e ${STAMPS}/${NEWLIB}.build ]; then - unpack ${NEWLIB} - cd build - log "Configuring ${NEWLIB}" - ../${NEWLIB}/configure --target=${TARGET} \ - --prefix=${PREFIX} \ - --enable-interwork \ - --enable-multilib \ - --with-gnu-as \ - --with-gnu-ld \ - --disable-nls \ - --disable-werror \ - --disable-newlib-supplied-syscalls \ - --with-float=soft - log "Building ${NEWLIB}" - make ${MAKEFLAGS} CFLAGS_FOR_TARGET="-msoft-float" CCASFLAGS="-msoft-float" - install ${NEWLIB} install - cd .. - log "Cleaning up ${NEWLIB}" - touch ${STAMPS}/${NEWLIB}.build - rm -rf build/* ${NEWLIB} + touch ${STAMPS}/${GCC}.build fi -# Yes, you need to build gcc again! -if [ ! -e ${STAMPS}/${GCC}.build ]; then - unpack ${GCC} - cd build +cd ${SUMMON_DIR} +if [ ${SECOND_HOST} != "" ]; then +if [ ! -e ${STAMPS}/${GCC}.build.${SECOND_HOST} ]; then + mkdir -p build-${GCC}.${SECOND_HOST} + cd build-${GCC}.${SECOND_HOST} log "Configuring ${GCC}" ../${GCC}/configure --target=${TARGET} \ + --host=${SECOND_HOST} \ --prefix=${PREFIX} \ --enable-interwork \ --enable-multilib \ --enable-languages="c,c++" \ --with-newlib \ + --without-headers \ --disable-shared \ --with-gnu-as \ --with-gnu-ld \ - --disable-nls \ + --disable-nls \ --disable-werror \ --with-system-zlib \ - ${GCCFLAGS} + --disable-libssp \ + --enable-target-optspace \ + --disable-threads \ + --disable-libmudflap \ + --disable-libgomp \ + --disable-libstdcxx-pch \ + --disable-libunwind-exceptions \ + --disable-libffi \ + --enable-extra-sgxxlite-multilibs \ + --enable-libstdcxx-allocator=malloc \ + --disable-lto \ + --enable-cxx-flags="${GCCFLAGS_FOR_TARGET}" \ + ${GCCFLAGS} log "Building ${GCC}" - make ${MAKEFLAGS} - install ${GCC} install + make ${MAKEFLAGS} CFLAGS_FOR_TARGET="${GCCFLAGS_FOR_TARGET}" + make install prefix=${SUMMON_DIR}/${SECOND_HOST} cd .. - log "Cleaning up ${GCC}" - touch ${STAMPS}/${GCC}.build - rm -rf build/* ${GCC} + touch ${STAMPS}/${GCC}.build.${SECOND_HOST} +fi fi +cd ${SUMMON_DIR} if [ ! -e ${STAMPS}/${GDB}.build ]; then unpack ${GDB} - cd build + mkdir -p build-${GDB} + cd build-${GDB} log "Configuring ${GDB}" ../${GDB}/configure --target=${TARGET} \ --prefix=${PREFIX} \ @@ -373,15 +356,37 @@ if [ ! -e ${STAMPS}/${GDB}.build ]; then make ${MAKEFLAGS} install ${GDB} install cd .. - log "Cleaning up ${GDB}" touch ${STAMPS}/${GDB}.build - rm -rf build/* ${GDB} +fi + +cd ${SUMMON_DIR} +if [ ${SECOND_HOST} != "" ]; then +if [ ! -e ${STAMPS}/${GDB}.build.${SECOND_HOST} ]; then + unpack ${GDB} + mkdir -p build-${GDB}.${SECOND_HOST} + cd build-${GDB}.${SECOND_HOST} + log "Configuring ${GDB}" + ../${GDB}/configure --target=${TARGET} \ + --host=${SECOND_HOST} \ + --prefix=${PREFIX} \ + --enable-interwork \ + --enable-multilib \ + --disable-werror \ + ${GDBFLAGS} + log "Building ${GDB}" + make ${MAKEFLAGS} + make install prefix=${SUMMON_DIR}/${SECOND_HOST} + cd .. + touch ${STAMPS}/${GDB}.build.${SECOND_HOST} +fi fi if [ ${OOCD_EN} != 0 ]; then +cd ${SUMMON_DIR} if [ ! -e ${STAMPS}/openocd-${OOCD}.build ]; then unpack openocd-${OOCD} - cd build + mkdir build-${OOCD} + cd build-${OOCD} log "Configuring openocd-${OOCD}" CFLAGS="${CFLAGS} ${OOCD_CFLAGS}" \ LDFLAGS="${LDFLAGS} ${OOCD_LDFLAGS}" \ @@ -407,60 +412,41 @@ if [ ! -e ${STAMPS}/openocd-${OOCD}.build ]; then make ${MAKEFLAGS} install openocd-${OOCD} install cd .. - log "Cleaning up openocd-${OOCD}" touch ${STAMPS}/openocd-${OOCD}.build - rm -rf build/* ${OOCD} -fi -fi - -if [ ${LIBSTM32_EN} != 0 ]; then -if [ ! -e ${STAMPS}/libcmsis-${LIBCMSIS}.build ]; then - unpack libcmsis-${LIBCMSIS} - cd libcmsis-${LIBCMSIS} - log "Building libcmsis-${LIBCMSIS}" - make arch_prefix=${TARGET} prefix=${PREFIX} - install libcmsis-${LIBCMSIS} arch_prefix=${TARGET} prefix=${PREFIX} install - cd .. - log "Cleaning up libcmsis-${LIBCMSIS}" - touch ${STAMPS}/libcmsis-${LIBCMSIS}.build - rm -rf libcmsis-${LIBCMSIS} fi -if [ ! -e ${STAMPS}/libstm32-${LIBSTM32}.build ]; then - unpack libstm32-${LIBSTM32} - cd libstm32-${LIBSTM32} - log "Building libstm32-${LIBSTM32}" - make arch_prefix=${TARGET} prefix=${PREFIX} - install libstm32-${LIBSTM32} arch_prefix=${TARGET} prefix=${PREFIX} install - cd .. - log "Cleaning up libstm32-${LIBSTM32}" - touch ${STAMPS}/libstm32-${LIBSTM32}.build - rm -rf libstm32-${LIBSTM32} -fi - -if [ ! -e ${STAMPS}/libstm32usb-${LIBSTM32USB}.build ]; then - unpack libstm32usb-${LIBSTM32USB} - cd libstm32usb-${LIBSTM32USB} - log "Building libstm32usb-${LIBSTM32USB}" - make arch_prefix=${TARGET} prefix=${PREFIX} - install libstm32usb-${LIBSTM32USB} arch_prefix=${TARGET} prefix=${PREFIX} install +if [ ${SECOND_HOST} != "" ]; then +cd ${SUMMON_DIR} +if [ ! -e ${STAMPS}/openocd-${OOCD}.build.${SECOND_HOST} ]; then + mkdir build-${OOCD}.${SECOND_HOST} + cd build-${OOCD}.${SECOND_HOST} + log "Configuring openocd-${OOCD}" + CFLAGS="${CFLAGS} ${OOCD_CFLAGS}" \ + LDFLAGS="${LDFLAGS} ${OOCD_LDFLAGS}" \ + ../openocd-${OOCD}/configure --enable-maintainer-mode \ + --host=${SECOND_HOST} \ + --prefix=${PREFIX} \ + --enable-dummy \ + --enable-parport \ + --disable-ft2232_libftdi \ + --disable-usb_blaster_libftdi \ + --enable-amtjtagaccel \ + --disable-zy1000 \ + --enable-ep93xx \ + --enable-at91rm9200 \ + --enable-gw16012 \ + --disable-presto_libftdi \ + --enable-usbprog \ + --enable-jlink \ + --enable-vsllink \ + --enable-rlink \ + --enable-arm-jtag-ew \ + --enable-buspirate + log "Building openocd-${OOCD}" + make ${MAKEFLAGS} + make install prefix=${SUMMON_DIR}/${SECOND_HOST} cd .. - log "Cleaning up libstm32usb-${LIBSTM32USB}" - touch ${STAMPS}/libstm32usb-${LIBSTM32USB}.build - rm -rf libstm32usb-${LIBSTM32USB} + touch ${STAMPS}/openocd-${OOCD}.build.${SECOND_HOST} fi fi - -if [ $LIBOPENSTM32_EN != 0 ]; then -if [ ! -e ${STAMPS}/libopenstm32-${LIBOPENSTM32}.build ]; then - unpack libopenstm32-${LIBOPENSTM32} - cd libopenstm32-${LIBOPENSTM32} - log "Building libopenstm32-${LIBOPENSTM32}" - make PREFIX=${TARGET} DESTDIR=${PREFIX} - install libopenstm32-${LIBOPENSTM32} PREFIX=${TARGET} DESTDIR=${PREFIX} install - cd .. - log "Cleaning up libopenstm32-${LIBOPENSTM32}" - touch ${STAMPS}/libopenstm32-${LIBOPENSTM32}.build - rm -rf libopenstm32-${LIBOPENSTM32} -fi fi |