#!/usr/bin/env bash # https://blog.tan-ce.com/gcc-bare-metal/ # https://imvoid.wordpress.com/2013/05/01/building-the-gnu-arm-toolchain-for-bare-metal/ set -e BINUTILS=binutils-2.32 GCC=gcc-4.7.1 mkdir -p src pushd src if [ ! -d $BINUTILS ]; then wget ftp://ftp.gnu.org/gnu/binutils/$BINUTILS.tar.bz2 tar -xf $BINUTILS.tar.bz2 fi popd # TODO: replace with /usr mkdir -p out PREFIX=$PWD/out mkdir -p build/$BINUTILS pushd build/$BINUTILS ../../src/$BINUTILS/configure --target=arm-none-eabi \ --build=aarch64-unknown-linux-gnu \ --prefix=$PREFIX --with-cpu=cortex-m4 \ --with-mode=thumb \ --disable-nls \ --disable-werror make -j4 all make install popd mkdir -p src pushd src if [ ! -d $GCC ]; then wget ftp://ftp.gnu.org/gnu/gcc/$GCC/$GCC.tar.bz2 tar -xf $GCC.tar.bz2 cd $GCC contrib/download_prerequisites fi popd export PATH="$PREFIX/bin:$PATH" mkdir -p build/$GCC pushd build/$GCC ../../src/$GCC/configure --target=arm-none-eabi \ --build=aarch64-unknown-linux-gnu \ --disable-libssp --disable-gomp --disable-libstcxx-pch --enable-threads \ --disable-shared --disable-libmudflap \ --prefix=$PREFIX --with-cpu=cortex-m4 \ --with-mode=thumb --disable-multilib \ --enable-interwork \ --enable-languages="c" \ --disable-nls \ --disable-libgcc make -j4 all-gcc make install-gcc popd # replace stdint.h with stdint-gcc.h for Android compatibility mv $PREFIX/lib/gcc/arm-none-eabi/4.7.1/include/stdint-gcc.h $PREFIX/lib/gcc/arm-none-eabi/4.7.1/include/stdint.h