made executable again.
[summon-arm-toolchain.git] / summon-arm-toolchain
index e1f396eb1c526be099ac8ad228ef02455ec5d54c..6c72dc29f52c2f0359c7471aff360249e8ef700b 100755 (executable)
@@ -27,11 +27,13 @@ SUDO='sudo'
 # Set to 1 to be quieter while running
 QUIET=0
 # Set to 1 to use linaro gcc instead of the FSF gcc
 # Set to 1 to be quieter while running
 QUIET=0
 # Set to 1 to use linaro gcc instead of the FSF gcc
-USE_LINARO=0
+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
 # 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=0
+LIBOPENSTM32_EN=1
 # Make the gcc default to Cortex-M3
 DEFAULT_TO_CORTEX_M3=0
 
 # Make the gcc default to Cortex-M3
 DEFAULT_TO_CORTEX_M3=0
 
@@ -45,14 +47,16 @@ if [ ${USE_LINARO} == 0 ] ; then
        GCCURL=http://ftp.gnu.org/gnu/gcc/${GCC}/${GCC}.tar.gz
 else
        # For the Linaro GCC:
        GCCURL=http://ftp.gnu.org/gnu/gcc/${GCC}/${GCC}.tar.gz
 else
        # For the Linaro GCC:
-       GCCVERSION=4.5-2010.08-1
+       GCCRELEASE=4.5-2010.11-0
+       GCCVERSION=4.5-2010.11-1
        GCC=gcc-linaro-${GCCVERSION}
        GCC=gcc-linaro-${GCCVERSION}
-       GCCURL=http://launchpad.net/gcc-linaro/4.5/${GCCVERSION}/+download/${GCC}.tar.gz
+       GCCURL=http://launchpad.net/gcc-linaro/4.5/${GCCRELEASE}/+download/${GCC}.tar.bz2
 fi
 
 BINUTILS=binutils-2.20
 NEWLIB=newlib-1.18.0
 GDB=gdb-7.2
 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
 LIBCMSIS=v1.10-2
 LIBSTM32=v3.0.0-1
 LIBSTM32USB=v3.0.1-1
@@ -62,6 +66,14 @@ LIBOPENSTM32=master
 # Flags section
 ##############################################################################
 
 # Flags section
 ##############################################################################
 
+if which getconf > /dev/null; then
+       CPUS=$(getconf _NPROCESSORS_ONLN)
+else
+       CPUS=1
+fi
+PARALLEL=-j$((CPUS + 1))
+echo "${CPUS} cpu's detected running make with '${PARALLEL}' flag"
+
 GDBFLAGS=
 BINUTILFLAGS=
 
 GDBFLAGS=
 BINUTILFLAGS=
 
@@ -69,7 +81,7 @@ if [ ${DEFAULT_TO_CORTEX_M3} == 0 ] ; then
        GCCFLAGS=
 else
        # To default to the Cortex-M3:
        GCCFLAGS=
 else
        # To default to the Cortex-M3:
-       GCCFLAGS="--with-arch=armv7-m --with-mode=thumb"
+       GCCFLAGS="--with-arch=armv7-m --with-mode=thumb --with-float=soft"
 fi
 
 # Pull in the local configuration, if any
 fi
 
 # Pull in the local configuration, if any
@@ -91,15 +103,20 @@ SUMMON_DIR=$(pwd)
 SOURCES=${SUMMON_DIR}/sources
 STAMPS=${SUMMON_DIR}/stamps
 
 SOURCES=${SUMMON_DIR}/sources
 STAMPS=${SUMMON_DIR}/stamps
 
+
+##############################################################################
+# Tool section
+##############################################################################
+TAR=tar
+
 ##############################################################################
 # OS and Tooldetection section
 ##############################################################################
 # OS and Tooldetection section
-# Detects which tools to use
+# Detects which tools and flags to use
 ##############################################################################
 
 case "$(uname)" in
        Linux)
        echo "Found Linux OS."
 ##############################################################################
 
 case "$(uname)" in
        Linux)
        echo "Found Linux OS."
-       TAR=tar
        ;;
        Darwin)
        echo "Found Darwin OS."
        ;;
        Darwin)
        echo "Found Darwin OS."
@@ -119,7 +136,7 @@ case "$(uname)" in
     echo "MacPorts not installed."
   else
     pc=`port installed ${DARWINDEPS} | wc -l | tr -d " "`
     echo "MacPorts not installed."
   else
     pc=`port installed ${DARWINDEPS} | wc -l | tr -d " "`
-    if [ ${pc} -lt ${DARWINDEPSCOUNT} ];
+    if [ ${pc} -lt $[${DARWINDEPSCOUNT}+1] ];
     then
       echo "Something is missing, do you want to install everything needed?"
       echo "(You need super user rights to do this.)"
     then
       echo "Something is missing, do you want to install everything needed?"
       echo "(You need super user rights to do this.)"
@@ -133,8 +150,15 @@ case "$(uname)" in
     fi
   fi
 
     fi
   fi
 
-       ;;
+  TAR=gnutar
 
 
+                 --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"
+       ;;
+       CYGWIN*)
+       echo "Found CygWin that means Windows most likely."
+       ;;
        *)
        echo "Found unknown OS. Aborting!"
        exit 1
        *)
        echo "Found unknown OS. Aborting!"
        exit 1
@@ -165,12 +189,24 @@ function log {
 # Unpack an archive
 function unpack {
     log Unpacking $*
 # Unpack an archive
 function unpack {
     log Unpacking $*
-    if [ -f ${SOURCES}/$1.tar.gz ];
-    then
-      ${TAR} xfz${TARFLAGS} ${SOURCES}/$1.tar.gz
-    else
-      ${TAR} xfj${TARFLAGS} ${SOURCES}/$1.tar.bz2
-    fi
+    # Use 'auto' mode decompression.  Replace with a switch if tar doesn't support -a
+    ARCHIVE=$(ls ${SOURCES}/$1.tar.*)
+    case ${ARCHIVE} in
+       *.bz2)
+           echo "archive type bz2"
+           TYPE=j
+           ;;
+       *.gz)
+           echo "archive type gz"
+           TYPE=z
+           ;;
+       *)
+           echo "Unknown archive type of $1"
+           echo ${ARCHIVE}
+           exit 1
+           ;;
+    esac
+    ${TAR} xf${TYPE}${TARFLAGS} ${SOURCES}/$1.tar.*
 }
 
 # Install a build
 }
 
 # Install a build
@@ -189,6 +225,20 @@ 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
 
 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
+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}
+       ./bootstrap
+       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..."
 if [ ${LIBSTM32_EN} != 0 ]; then
 if [ ! -e libcmsis-${LIBCMSIS}.tar.bz2 ]; then
        log "Cloning libcmsis sources..."
@@ -300,9 +350,10 @@ if [ ! -e ${STAMPS}/${NEWLIB}.build ]; then
                          --with-gnu-ld \
                          --disable-nls \
                          --disable-werror \
                          --with-gnu-ld \
                          --disable-nls \
                          --disable-werror \
-                         --disable-newlib-supplied-syscalls
+                         --disable-newlib-supplied-syscalls \
+                        --with-float=soft
     log "Building ${NEWLIB}"
     log "Building ${NEWLIB}"
-    make ${MAKEFLAGS}
+    make ${MAKEFLAGS} CFLAGS_FOR_TARGET="-msoft-float" CCASFLAGS="-msoft-float"
     install ${NEWLIB} install
     cd ..
     log "Cleaning up ${NEWLIB}"
     install ${NEWLIB} install
     cd ..
     log "Cleaning up ${NEWLIB}"
@@ -356,8 +407,43 @@ if [ ! -e ${STAMPS}/${GDB}.build ]; then
     rm -rf build/* ${GDB}
 fi
 
     rm -rf build/* ${GDB}
 fi
 
+if [ ${OOCD_EN} != 0 ]; then
+if [ ! -e ${STAMPS}/openocd-${OOCD}.build ]; then
+    unpack openocd-${OOCD}
+    cd build
+    log "Configuring openocd-${OOCD}"
+    CFLAGS="${CFLAGS} ${OOCD_CFLAGS}" \
+    LDFLAGS="${LDFLAGS} ${OOCD_LDFLAGS}" \
+    ../openocd-${OOCD}/configure --enable-maintainer-mode \
+                      --prefix=${PREFIX} \
+                      --enable-dummy \
+                     --enable-parport \
+                     --enable-ft2232_libftdi \
+                     --enable-usb_blaster_libftdi \
+                     --enable-amtjtagaccel \
+                     --enable-zy1000 \
+                     --enable-ep93xx \
+                     --enable-at91rm9200 \
+                     --enable-gw16012 \
+                     --enable-presto_libftdi \
+                     --enable-usbprog \
+                     --enable-jlink \
+                     --enable-vsllink \
+                     --enable-rlink \
+                     --enable-arm-jtag-ew \
+                     --enable-buspirate
+    log "Building openocd-${OOCD}"
+    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 [ ${LIBSTM32_EN} != 0 ]; then
-if [ ! -e .libcmsis-${LIBCMSIS}.build ]; then
+if [ ! -e ${STAMPS}/libcmsis-${LIBCMSIS}.build ]; then
     unpack libcmsis-${LIBCMSIS}
     cd libcmsis-${LIBCMSIS}
     log "Building libcmsis-${LIBCMSIS}"
     unpack libcmsis-${LIBCMSIS}
     cd libcmsis-${LIBCMSIS}
     log "Building libcmsis-${LIBCMSIS}"
@@ -365,11 +451,11 @@ if [ ! -e .libcmsis-${LIBCMSIS}.build ]; then
     install libcmsis-${LIBCMSIS} arch_prefix=${TARGET} prefix=${PREFIX} install
     cd ..
     log "Cleaning up libcmsis-${LIBCMSIS}"
     install libcmsis-${LIBCMSIS} arch_prefix=${TARGET} prefix=${PREFIX} install
     cd ..
     log "Cleaning up libcmsis-${LIBCMSIS}"
-    touch .libcmsis-${LIBCMSIS}.build
+    touch ${STAMPS}/libcmsis-${LIBCMSIS}.build
     rm -rf libcmsis-${LIBCMSIS}
 fi
 
     rm -rf libcmsis-${LIBCMSIS}
 fi
 
-if [ ! -e .libstm32-${LIBSTM32}.build ]; then
+if [ ! -e ${STAMPS}/libstm32-${LIBSTM32}.build ]; then
     unpack libstm32-${LIBSTM32}
     cd libstm32-${LIBSTM32}
     log "Building libstm32-${LIBSTM32}"
     unpack libstm32-${LIBSTM32}
     cd libstm32-${LIBSTM32}
     log "Building libstm32-${LIBSTM32}"
@@ -377,11 +463,11 @@ if [ ! -e .libstm32-${LIBSTM32}.build ]; then
     install libstm32-${LIBSTM32} arch_prefix=${TARGET} prefix=${PREFIX} install
     cd ..
     log "Cleaning up libstm32-${LIBSTM32}"
     install libstm32-${LIBSTM32} arch_prefix=${TARGET} prefix=${PREFIX} install
     cd ..
     log "Cleaning up libstm32-${LIBSTM32}"
-    touch .libstm32-${LIBSTM32}.build
+    touch ${STAMPS}/libstm32-${LIBSTM32}.build
     rm -rf libstm32-${LIBSTM32}
 fi
 
     rm -rf libstm32-${LIBSTM32}
 fi
 
-if [ ! -e .libstm32usb-${LIBSTM32USB}.build ]; then
+if [ ! -e ${STAMPS}/libstm32usb-${LIBSTM32USB}.build ]; then
     unpack libstm32usb-${LIBSTM32USB}
     cd libstm32usb-${LIBSTM32USB}
     log "Building libstm32usb-${LIBSTM32USB}"
     unpack libstm32usb-${LIBSTM32USB}
     cd libstm32usb-${LIBSTM32USB}
     log "Building libstm32usb-${LIBSTM32USB}"
@@ -389,12 +475,13 @@ if [ ! -e .libstm32usb-${LIBSTM32USB}.build ]; then
     install libstm32usb-${LIBSTM32USB} arch_prefix=${TARGET} prefix=${PREFIX} install
     cd ..
     log "Cleaning up libstm32usb-${LIBSTM32USB}"
     install libstm32usb-${LIBSTM32USB} arch_prefix=${TARGET} prefix=${PREFIX} install
     cd ..
     log "Cleaning up libstm32usb-${LIBSTM32USB}"
-    touch .libstm32usb-${LIBSTM32USB}.build
+    touch ${STAMPS}/libstm32usb-${LIBSTM32USB}.build
     rm -rf libstm32usb-${LIBSTM32USB}
 fi
 fi
 
 if [ $LIBOPENSTM32_EN != 0 ]; then
     rm -rf libstm32usb-${LIBSTM32USB}
 fi
 fi
 
 if [ $LIBOPENSTM32_EN != 0 ]; then
+if [ ! -e ${STAMPS}/libopenstm32-${LIBOPENSTM32}.build ]; then
     unpack libopenstm32-${LIBOPENSTM32}
     cd libopenstm32-${LIBOPENSTM32}
     log "Building libopenstm32-${LIBOPENSTM32}"
     unpack libopenstm32-${LIBOPENSTM32}
     cd libopenstm32-${LIBOPENSTM32}
     log "Building libopenstm32-${LIBOPENSTM32}"
@@ -402,6 +489,7 @@ if [ $LIBOPENSTM32_EN != 0 ]; then
     install libopenstm32-${LIBOPENSTM32} PREFIX=${TARGET} DESTDIR=${PREFIX} install
     cd ..
     log "Cleaning up libopenstm32-${LIBOPENSTM32}"
     install libopenstm32-${LIBOPENSTM32} PREFIX=${TARGET} DESTDIR=${PREFIX} install
     cd ..
     log "Cleaning up libopenstm32-${LIBOPENSTM32}"
-    touch .libopenstm32-${LIBOPENSTM32}.build
+    touch ${STAMPS}/libopenstm32-${LIBOPENSTM32}.build
     rm -rf libopenstm32-${LIBOPENSTM32}
 fi
     rm -rf libopenstm32-${LIBOPENSTM32}
 fi
+fi