merged.
authorStefan Graupner <stefan.graupner@gmail.com>
Tue, 18 Jan 2011 22:43:16 +0000 (23:43 +0100)
committerStefan Graupner <stefan.graupner@gmail.com>
Tue, 18 Jan 2011 22:43:16 +0000 (23:43 +0100)
1  2 
summon-arm-toolchain

diff --combined summon-arm-toolchain
index 3a94e7d6e8f78b95b5ded3d6bb746a1df81b7256,d77d3a50a075ceffa68e71d0932408d8aa2ed5c3..6c72dc29f52c2f0359c7471aff360249e8ef700b
mode 100755,100755..100644
@@@ -18,20 -18,21 +18,22 @@@ set -
  # 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
 +TARGET=arm-elf                # Or: TARGET=arm-elf
 +PREFIX=/arm   # Install location of your final toolchain
 +PARALLEL=                     # Or: PARALLEL="-j 5" for 4 CPUs
  DARWIN_OPT_PATH=/opt/local    # 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=0
+ LIBOPENSTM32_EN=1
  # Make the gcc default to Cortex-M3
  DEFAULT_TO_CORTEX_M3=0
  
@@@ -45,14 -46,16 +47,16 @@@ if [ ${USE_LINARO} == 0 ] ; the
        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}
-       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
+ OOCD=master
  LIBCMSIS=v1.10-2
  LIBSTM32=v3.0.0-1
  LIBSTM32USB=v3.0.1-1
@@@ -62,6 -65,14 +66,14 @@@ LIBOPENSTM32=maste
  # 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=
  
@@@ -69,7 -80,7 +81,7 @@@ if [ ${DEFAULT_TO_CORTEX_M3} == 0 ] ; t
        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
@@@ -91,52 -102,34 +103,62 @@@ SUMMON_DIR=$(pwd
  SOURCES=${SUMMON_DIR}/sources
  STAMPS=${SUMMON_DIR}/stamps
  
+ ##############################################################################
+ # Tool section
+ ##############################################################################
+ TAR=tar
  ##############################################################################
  # OS and Tooldetection section
- # Detects which tools to use
+ # Detects which tools and flags to use
  ##############################################################################
  
  case "$(uname)" in
        Linux)
        echo "Found Linux OS."
-       TAR=tar
        ;;
        Darwin)
        echo "Found Darwin OS."
 -      GCCFLAGS="${GCCFLAGS} \
 -                  --with-gmp=${DARWIN_OPT_PATH} \
 +
 +      # darwin dependencies
 +      DARWINDEPS="gnutar mpfr libmpc gmp"
 +  DARWINDEPSCOUNT=4
 +
 +  GCCFLAGS="${GCCFLAGS} \
 +            --with-gmp=${DARWIN_OPT_PATH} \
                  --with-mpfr=${DARWIN_OPT_PATH} \
                  --with-mpc=${DARWIN_OPT_PATH} \
 +                      -with-libiconv-prefix=${DARWIN_OPT_PATH}"
 +
 +  echo "Attempting to automatically check if common dependencies are installed on your system"
 +  if ! which port > /dev/null; then
 +    echo "MacPorts not installed."
 +  else
 +    pc=`port installed ${DARWINDEPS} | wc -l | tr -d " "`
 +    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.)"
 +
 +      if [ read = "y" || read = "yes" ];
 +      then
 +        sudo port install ${DARWINDEPS}
 +      fi
 +    else
 +      echo "Found: "${DARWINDEPS}"!"
 +    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
@@@ -167,12 -160,24 +189,24 @@@ function log 
  # 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
@@@ -191,6 -196,20 +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
  
+ 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..."
@@@ -302,9 -321,10 +350,10 @@@ if [ ! -e ${STAMPS}/${NEWLIB}.build ]; 
                           --with-gnu-ld \
                           --disable-nls \
                           --disable-werror \
-                          --disable-newlib-supplied-syscalls
+                          --disable-newlib-supplied-syscalls \
+                        --with-float=soft
      log "Building ${NEWLIB}"
-     make ${MAKEFLAGS}
+     make ${MAKEFLAGS} CFLAGS_FOR_TARGET="-msoft-float" CCASFLAGS="-msoft-float"
      install ${NEWLIB} install
      cd ..
      log "Cleaning up ${NEWLIB}"
@@@ -358,8 -378,43 +407,43 @@@ if [ ! -e ${STAMPS}/${GDB}.build ]; the
      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 [ ! -e .libcmsis-${LIBCMSIS}.build ]; then
+ if [ ! -e ${STAMPS}/libcmsis-${LIBCMSIS}.build ]; then
      unpack libcmsis-${LIBCMSIS}
      cd libcmsis-${LIBCMSIS}
      log "Building 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
  
- if [ ! -e .libstm32-${LIBSTM32}.build ]; then
+ if [ ! -e ${STAMPS}/libstm32-${LIBSTM32}.build ]; then
      unpack libstm32-${LIBSTM32}
      cd libstm32-${LIBSTM32}
      log "Building 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
  
- if [ ! -e .libstm32usb-${LIBSTM32USB}.build ]; then
+ if [ ! -e ${STAMPS}/libstm32usb-${LIBSTM32USB}.build ]; then
      unpack libstm32usb-${LIBSTM32USB}
      cd libstm32usb-${LIBSTM32USB}
      log "Building 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
+ if [ ! -e ${STAMPS}/libopenstm32-${LIBOPENSTM32}.build ]; then
      unpack libopenstm32-${LIBOPENSTM32}
      cd libopenstm32-${LIBOPENSTM32}
      log "Building 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
+ fi