set -e
##############################################################################
-# Settings section
+# Default settings section
# You probably want to customize those
+# You can also pass them as parameters to the script
##############################################################################
TARGET=arm-none-eabi # Or: TARGET=arm-elf
-PREFIX=${HOME}/sat # Install location of your final toolchain
+PREFIX=/opt/cortex # Install location of your final toolchain
DARWIN_OPT_PATH=/opt/local # Path in which MacPorts or Fink is installed
# Set to 'sudo' if you need superuser privileges while installing
SUDO=
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
+# Set to 1 to build libopencm3 an open source library for Cortex M3 and simalar
+# chips
+LIBOPENCM3_EN=1
# Make the gcc default to Cortex-M3
DEFAULT_TO_CORTEX_M3=0
+# Override automatic detection of cpus to compile on
+CPUS=
+
+##############################################################################
+# Parsing command line parameters
+##############################################################################
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ TARGET=*)
+ TARGET=$(echo $1 | sed 's,^TARGET=,,')
+ ;;
+ PREFIX=*)
+ PREFIX=$(echo $1 | sed 's,^PREFIX=,,')
+ ;;
+ DARWIN_OPT_PATH=*)
+ DARWIN_OPT_PATH=$(echo $1 | sed 's,^DARWIN_OPT_PATH=,,')
+ ;;
+ SUDO=*)
+ SUDO=$(echo $1 | sed 's,^SUDO=,,')
+ ;;
+ QUIET=*)
+ QUIET=$(echo $1 | sed 's,^QUIET=,,')
+ ;;
+ USE_LINARO=*)
+ USE_LINARO=$(echo $1 | sed 's,^USE_LINARO=,,')
+ ;;
+ OOCD_EN=*)
+ OOCD_EN=$(echo $1 | sed 's,^OOCD_EN=,,')
+ ;;
+ LIBSTM32_EN=*)
+ LIBSTM32_EN=$(echo $1 | sed 's,^LIBSTM32_EN=,,')
+ ;;
+ LIBOPENCM3_EN=*)
+ LIBOPENCM3_EN=$(echo $1 | sed 's,^LIBOPENCM3_EN=,,')
+ ;;
+ DEFAULT_TO_CORTEX_M3=*)
+ DEFAULT_TO_CORTEX_M3=$(echo $1 | sed 's,^DEFAULT_TO_CORTEX_M3=,,')
+ ;;
+ CPUS=*)
+ CPUS=$(echo $1 | sed 's,^CPUS=,,')
+ ;;
+ *)
+ echo "Unknown parameter: $1"
+ exit 1
+ ;;
+ esac
+
+ shift # shifting parameter list to access the next one
+done
+
+echo "Settings used for this build are:"
+echo "TARGET=$TARGET"
+echo "PREFIX=$PREFIX"
+echo "DARWIN_OPT_PATH=$DARWIN_OPT_PATH"
+echo "SUDO=$SUDO"
+echo "QUIET=$QUIET"
+echo "USE_LINARO=$USE_LINARO"
+echo "OOCD_EN=$OOCD_EN"
+echo "LIBSTM32_EN=$LIBSTM32_EN"
+echo "LIBOPENCM3_EN=$LIBOPENCM3_EN"
+echo "DEFAULT_TO_CORTEX_M3=$DEFAULT_TO_CORTEX_M3"
+echo "CPUS=$CPUS"
##############################################################################
# Version and download url settings section
GCCURL=http://launchpad.net/gcc-linaro/4.5/${GCCRELEASE}/+download/${GCC}.tar.bz2
fi
-BINUTILS=binutils-2.21
+BINUTILS=binutils-2.21.1
NEWLIB=newlib-1.19.0
-GDB=gdb-7.2
+GDB=gdb-7.5.1
OOCD=master
-LIBCMSIS=v1.10-2
-LIBSTM32=v3.0.0-1
+LIBCMSIS=v1.10-3
+LIBSTM32=v3.0.0-2
LIBSTM32USB=v3.0.1-1
-LIBOPENSTM32=master
+LIBOPENCM3=master
##############################################################################
# Flags section
##############################################################################
-if which getconf > /dev/null; then
- CPUS=$(getconf _NPROCESSORS_ONLN)
+if [ "x${CPUS}" == "x" ]; then
+ if which getconf > /dev/null; then
+ CPUS=$(getconf _NPROCESSORS_ONLN)
+ else
+ CPUS=1
+ fi
+
+ PARALLEL=-j$((CPUS + 1))
else
- CPUS=1
+ PARALLEL=-j${CPUS}
fi
-PARALLEL=-j$((CPUS + 1))
+
echo "${CPUS} cpu's detected running make with '${PARALLEL}' flag"
GDBFLAGS=
--with-libiconv-prefix=${DARWIN_OPT_PATH}"
OOCD_CFLAGS="-I/opt/mine/include -I/opt/local/include"
OOCD_LDFLAGS="-L/opt/mine/lib -L/opt/local/lib"
+ if gcc --version | grep llvm-gcc > /dev/null ; then
+ echo "Found you are using llvm gcc, switching to clang for gcc compile."
+ GCC_CC=clang
+ fi
;;
CYGWIN*)
echo "Found CygWin that means Windows most likely."
function fetch {
if [ ! -e ${STAMPS}/$1.fetch ]; then
log "Downloading $1 sources..."
- wget -c --no-passive-ftp $2
- touch ${STAMPS}/$1.fetch
+ wget -c $2 && touch ${STAMPS}/$1.fetch
fi
}
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
+if [ ${LIBOPENCM3_EN} != 0 ]; then
+if [ ! -e libopencm3-${LIBOPENCM3}.tar.bz2 ]; then
+ log "Cloning libopencm3 sources..."
+ git clone https://github.com/libopencm3/libopencm3
+ cd libopencm3
+ git archive --format=tar --prefix=libopencm3-${LIBOPENCM3}/ ${LIBOPENCM3} | \
+ bzip2 --stdout > ../libopencm3-${LIBOPENCM3}.tar.bz2
cd ..
- rm -rf libopenstm32
+ rm -rf libopencm3
fi
fi
if [ ! -e ${STAMPS}/${BINUTILS}.build ]; then
unpack ${BINUTILS}
+ log "Patching binutils to allow SVC support on cortex-m3"
+ cd ${BINUTILS}
+ patch -p1 -i ../patches/patch-binutils-2.21.1-svc-cortexm3.diff
+ cd ..
cd build
log "Configuring ${BINUTILS}"
../${BINUTILS}/configure --target=${TARGET} \
- --prefix=${PREFIX} \
- --enable-interwork \
- --enable-multilib \
- --with-gnu-as \
- --with-gnu-ld \
- --disable-nls \
- --disable-werror \
- ${BINUTILFLAGS}
+ --prefix=${PREFIX} \
+ --enable-interwork \
+ --enable-multilib \
+ --with-gnu-as \
+ --with-gnu-ld \
+ --disable-nls \
+ --disable-werror \
+ ${BINUTILFLAGS}
log "Building ${BINUTILS}"
make ${MAKEFLAGS}
install ${BINUTILS} install
fi
cd build
+ if [ "X${GCC_CC}" != "X" ] ; then
+ export GLOBAL_CC=${CC}
+ log "Overriding the default compiler with: \"${GCC_CC}\""
+ export CC=${GCC_CC}
+ fi
+
log "Configuring ${GCC} and ${NEWLIB}"
../${GCC}/configure --target=${TARGET} \
--prefix=${PREFIX} \
install ${GCC} install
cd ..
log "Cleaning up ${GCC} and ${NEWLIB}"
+
+ if [ "X${GCC_CC}" != "X" ] ; then
+ unset CC
+ CC=${GLOBAL_CC}
+ unset GLOBAL_CC
+ fi
+
touch ${STAMPS}/${GCC}-${NEWLIB}.build
rm -rf build/* ${GCC} ${NEWLIB}
fi
CFLAGS="${CFLAGS} ${OOCD_CFLAGS}" \
LDFLAGS="${LDFLAGS} ${OOCD_LDFLAGS}" \
../openocd-${OOCD}/configure --enable-maintainer-mode \
+ --disable-werror \
--prefix=${PREFIX} \
--enable-dummy \
--enable-ft2232_libftdi \
fi
fi
-if [ $LIBOPENSTM32_EN != 0 ]; then
-if [ ! -e ${STAMPS}/libopenstm32-${LIBOPENSTM32}.build ]; then
- unpack libopenstm32-${LIBOPENSTM32}
- cd libopenstm32-${LIBOPENSTM32}
- log "Building libopenstm32-${LIBOPENSTM32}"
+if [ $LIBOPENCM3_EN != 0 ]; then
+if [ ! -e ${STAMPS}/libopencm3-${LIBOPENCM3}.build ]; then
+ unpack libopencm3-${LIBOPENCM3}
+ cd libopencm3-${LIBOPENCM3}
+ log "Building libopencm3-${LIBOPENCM3}"
make PREFIX=${TARGET} DESTDIR=${PREFIX}
- install libopenstm32-${LIBOPENSTM32} PREFIX=${TARGET} DESTDIR=${PREFIX} install
+ install libopencm3-${LIBOPENCM3} PREFIX=${TARGET} DESTDIR=${PREFIX} install
cd ..
- log "Cleaning up libopenstm32-${LIBOPENSTM32}"
- touch ${STAMPS}/libopenstm32-${LIBOPENSTM32}.build
- rm -rf libopenstm32-${LIBOPENSTM32}
+ log "Cleaning up libopencm3-${LIBOPENCM3}"
+ touch ${STAMPS}/libopencm3-${LIBOPENCM3}.build
+ rm -rf libopencm3-${LIBOPENCM3}
fi
fi