blob: 89bd70441a5bc40b959aa2f30d034ae3dbc4b635 [file] [log] [blame]
#!/usr/bin/env bash
OS=`uname`
HOSTARCH=`uname -m`
ARCHSUFFIX=.xz
PARALLEL=-j8
GNU_FTP=ftp://ftp.gnu.org/gnu
if [ "x$ARCHES" = "x" ]; then
echo need to specify architectures to build in the ARCHES environment variable
echo ie. ARCHES=\"arm sh\"
exit 1
fi
if [ "$OS" = "Linux" ]; then
COUNT=`grep processor /proc/cpuinfo | wc -l`
PARALLEL=-j`expr $COUNT + $COUNT`
fi
if [ "$OS" = "Darwin" ]; then
export CPPFLAGS=-I/opt/local/include
export LDFLAGS=-L/opt/local/lib
fi
if [ "$OS" = "FreeBSD" ]; then
export CPPFLAGS=-I/usr/local/include
export LDFLAGS=-L/usr/local/lib
fi
MAKE=make
if [ "$OS" = "FreeBSD" ]; then
MAKE=gmake
fi
if [ "$HOSTARCH" = "amd64" ]; then
HOSTARCH=x86_64
fi
# load GCCVER and BINVER
. toolvers
if [ "$FETCH" = "1" ]; then
ARCHSUFFIX=.bz2
wget -N $GNU_FTP/binutils/binutils-$BINVER.tar$ARCHSUFFIX
wget -N $GNU_FTP/gcc/gcc-$GCCVER/gcc-$GCCVER.tar$ARCHSUFFIX
wget -N $GNU_FTP/gdb/gdb-$GDBVER.tar$ARCHSUFFIX
fi
if [ ! -d binutils-$BINVER.patched ]; then
echo extracting binutils-$BINVER.tar${ARCHSUFFIX}
rm -rf binutils-$BINVER
tar xf binutils-$BINVER.tar${ARCHSUFFIX} || exit 1
echo patching binutils
patch -d binutils-$BINVER -p1 < binutils-patch.txt || exit 1
rm -rf binutils-$BINVER.patched
mv binutils-$BINVER binutils-$BINVER.patched
fi
if [ ! -d gcc-$GCCVER.patched ]; then
echo extracting gcc-$GCCVER.tar${ARCHSUFFIX}
rm -rf gcc-$GCCVER
tar xf gcc-$GCCVER.tar${ARCHSUFFIX} || exit 1
echo patching gcc
patch -d gcc-$GCCVER -p1 < gcc-patch.txt || exit 1
rm -rf gcc-$GCCVER.patched
mv gcc-$GCCVER gcc-$GCCVER.patched
fi
if [ ! -d gdb-$GDBVER.patched ]; then
echo extracting gdb-$GDBVER.tar${ARCHSUFFIX}
rm -rf gdb-$GDBVER
tar xf gdb-$GDBVER.tar${ARCHSUFFIX} || exit 1
echo patching gdb
patch -d gdb-$GDBVER -p1 < gdb-patch.txt || exit 1
rm -rf gdb-$GDBVER.patched
mv gdb-$GDBVER gdb-$GDBVER.patched
fi
for ARCH in $ARCHES; do
if [ "$ARCH" == "arm" ]; then
TARGET=arm-eabi
else
TARGET=$ARCH-elf
fi
INSTALLPATH=`pwd`/$TARGET-$GCCVER-$OS-$HOSTARCH
BINBUILDPATH=build-binutils-$BINVER-$ARCH-$OS-$HOSTARCH
GCCBUILDPATH=build-gcc-$GCCVER-$ARCH-$OS-$HOSTARCH
GDBBUILDPATH=build-gdb-$GDBVER-$ARCH-$OS-$HOSTARCH
export PATH=$INSTALLPATH/bin:$PATH
if [ ! -f $BINBUILDPATH/built.txt ]; then
mkdir -p $BINBUILDPATH
pushd $BINBUILDPATH &&
../binutils-$BINVER.patched/configure --target=$TARGET --prefix=$INSTALLPATH --disable-werror &&
#$MAKE configure-host &&
$MAKE $PARALLEL &&
$MAKE install &&
touch built.txt || exit 1
popd
fi
if [ ! -f $GCCBUILDPATH/built.txt ]; then
ARCH_OPTIONS=
if [ $ARCH == "arm" ]; then
ARCH_OPTIONS="--with-cpu=arm926ej-s --with-fpu=vfp"
fi
mkdir -p $GCCBUILDPATH
pushd $GCCBUILDPATH &&
../gcc-$GCCVER.patched/configure --target=$TARGET --prefix=$INSTALLPATH --enable-languages=c,c++ $ARCH_OPTIONS --disable-werror &&
$MAKE all-gcc $PARALLEL &&
$MAKE all-target-libgcc $PARALLEL &&
$MAKE install-gcc &&
$MAKE install-target-libgcc &&
touch built.txt || exit 1
popd
fi
if [ ! -f $GDBBUILDPATH/built.txt ]; then
mkdir -p $GDBBUILDPATH
pushd $GDBBUILDPATH &&
../gdb-$GDBVER.patched/configure --target=$TARGET --prefix=$INSTALLPATH --disable-werror &&
make $PARALLEL &&
make install &&
touch built.txt || exit 1
popd
fi
done