diff --git a/lib/CPUs/MIPS/doc/toolchain/howto_build.txt b/lib/CPUs/MIPS/doc/toolchain/howto_build.txt new file mode 100644 index 0000000..270be3b --- /dev/null +++ b/lib/CPUs/MIPS/doc/toolchain/howto_build.txt @@ -0,0 +1,46 @@ +# --------------------------------------------------------------- +# 1. Binutils bauen und installieren +# --------------------------------------------------------------- +> tar -xzf binutils-2.19.tar.gz +> mkdir binutils-2.19_build +> cd binutils-2.19_build + +> ../binutils-2.19/configure --target=mipsel-elf --prefix=/usr/local +> make +> make install + +# --------------------------------------------------------------- +# 2. GCC bootstrapping +# --------------------------------------------------------------- +> tar -xzf gcc-4.3.2.tar.gz +> mkdir gcc-4.3.2_build +> cd gcc-4.3.2_build +> ../gcc-4.3.2/configure --target=mipsel-elf --prefix=/usr/local --enable-languages="c,c++" --without-headers --with-newlib --with-float=soft --disable-multilib +> CFLAGS_FOR_TARGET="-mno-gpopt" make all-gcc +> make info-gcc +> make install-gcc + +# --------------------------------------------------------------- +# 3. Newlib bauen und installieren +# --------------------------------------------------------------- +> tar -xzf newlib-1.16.0.tar.gz +! Bug in newlib-1.16.0/newlib/libc/machine/mips/strlen.c. + Newlib von Hand patchen (32-bit MIPS targets): + "lbu $3,0($4)\n" + "nop\n" <= nop einfügen + "bnez $3,1b\n" + +> mkdir newlib-1.16.0_build +> cd newlib-1.16.0_build +> ../newlib-1.16.0/configure --target=mipsel-elf --prefix=/usr/local --with-float=soft --disable-multilib +> TARGET_CFLAGS="-mno-gpopt" make all +> make install + +# --------------------------------------------------------------- +# 4. GCC bauen und installieren +# --------------------------------------------------------------- +> cd gcc-4.3.2_build +> ../gcc-4.3.2/configure --target=mipsel-elf --prefix=/usr/local --enable-languages="c,c++" --disable-shared --with-newlib --with-float=soft --disable-multilib +> CFLAGS_FOR_TARGET="-mno-gpopt" make all +> make info +> make install diff --git a/lib/CPUs/MIPS/doc/toolchain/make.sh b/lib/CPUs/MIPS/doc/toolchain/make.sh new file mode 100644 index 0000000..1568da9 --- /dev/null +++ b/lib/CPUs/MIPS/doc/toolchain/make.sh @@ -0,0 +1,151 @@ +#!/bin/sh +TARGET=mipsel-elf +PREFIX=/usr/local + +SRC_BINUTILS=binutils-2.19 +SRC_GCC=gcc-4.3.3 +SRC_NEWLIB=newlib-1.16.0 +SRC_GMP=gmp-4.2.4 +SRC_MPFR=mpfr-2.4.0 + +# --------------------------------------------------------------- +# 1. Binutils bauen und installieren +# --------------------------------------------------------------- +if [ ! -e $SRC_BINUTILS.tar.bz2 ]; then + echo Downloading $SRC_BINUTILS + wget ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/ftp.gnu.org/binutils/$SRC_BINUTILS.tar.bz2 || exit 1 +else + echo Skipped downloading $SRC_BINUTILS +fi + +if [ ! -e ./$SRC_BINUTILS ]; then + echo Unpacking $SRC_BINUTILS + tar -xjf $SRC_BINUTILS.tar.bz2 || exit 1 +else + echo Skipped unpacking $SRC_BINUTILS +fi + +if [ ! -e ./$SRC_BINUTILS-build ]; then + echo Building $SRC_BINUTILS + mkdir -p $SRC_BINUTILS-build + cd $SRC_BINUTILS-build + ../$SRC_BINUTILS/configure --target=$TARGET --prefix=$PREFIX || exit 1 + make || exit 1 + make install || exit 1 + cd .. +else + echo $SRC_BINUTILS is already built. +fi + +# --------------------------------------------------------------- +# 2. GMP bauen und installieren +# --------------------------------------------------------------- +if [ ! -e $SRC_GMP.tar.bz2 ]; then + echo Downloading $SRC_GMP + wget http://ftp.sunet.se/pub/gnu/gmp/$SRC_GMP.tar.bz2 || exit 1 +else + echo Skipped downloading $SRC_GMP +fi + +if [ ! -e ./$SRC_GMP ]; then + echo Unpacking $SRC_GMP + tar -xjf $SRC_GMP.tar.bz2 || exit 1 +else + echo Skipped unpacking $SRC_GMP +fi + +if [ ! -e ./$SRC_GMP-build ]; then + echo Building $SRC_GMP + mkdir -p $SRC_GMP-build + cd $SRC_GMP-build + ../$SRC_GMP/configure --prefix=$PREFIX || exit 1 + make || exit 1 + make check || exit 1 + make install || exit 1 + cd .. +else + echo $SRC_GMP is already built. +fi + +# --------------------------------------------------------------- +# 3. MPFR bauen und installieren +# --------------------------------------------------------------- +if [ ! -e $SRC_MPFR.tar.bz2 ]; then + echo Downloading $SRC_MPFR + wget http://www.mpfr.org/mpfr-current/$SRC_MPFR.tar.bz2 || exit 1 +else + echo Skipped downloading $SRC_MPFR +fi + +if [ ! -e ./$SRC_MPFR ]; then + echo Unpacking $SRC_MPFR + tar -xjf $SRC_MPFR.tar.bz2 || exit 1 +else + echo Skipped unpacking $SRC_MPFR +fi + +if [ ! -e ./$SRC_MPFR-build ]; then + echo Building $SRC_MPFR + mkdir -p $SRC_MPFR-build + cd $SRC_MPFR-build + ../$SRC_MPFR/configure --prefix=$PREFIX || exit 1 + make || exit 1 + make check || exit 1 + make install || exit 1 + cd .. +else + echo $SRC_MPFR is already built. +fi + +# --------------------------------------------------------------- +# 4. GCC & newlib bauen und installieren +# --------------------------------------------------------------- +if [ ! -e $SRC_NEWLIB.tar.gz ]; then + echo Downloading $SRC_NEWLIB + wget ftp://sources.redhat.com/pub/newlib/$SRC_NEWLIB.tar.gz || exit 1 +else + echo Skipped downloading $SRC_NEWLIB +fi + +if [ ! -e ./$SRC_NEWLIB ]; then + echo Unpacking $SRC_NEWLIB + tar -xzf $SRC_NEWLIB.tar.gz || exit 1 + if [ -e $SRC_NEWLIB-jens.patch ]; then + echo Patching $SRC_NEWLIB + patch -p0 < $SRC_NEWLIB-jens.patch || exit 1 + fi +else + echo Skipped unpacking $SRC_NEWLIB +fi + +if [ ! -e $SRC_GCC.tar.bz2 ]; then + echo Downloading $SRC_GCC + wget ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/ftp.gnu.org/gcc/$SRC_GCC/$SRC_GCC.tar.bz2 || exit 1 +else + echo Skipped downloading $SRC_GCC +fi + +if [ ! -e ./$SRC_GCC ]; then + echo Unpacking $SRC_GCC + tar -xjf $SRC_GCC.tar.bz2 || exit 1 + cd ./$SRC_GCC + ln -sf ../$SRC_NEWLIB/newlib/ . + cd .. +else + echo Skipped unpacking $SRC_GCC +fi + +if [ ! -e ./$SRC_GCC-build ]; then + echo Building $SRC_GCC + mkdir -p $SRC_GCC-build + cd $SRC_GCC-build + ../$SRC_GCC/configure --target=$TARGET --prefix=$PREFIX --with-float=soft --with-newlib --verbose --enable-languages="c,c++" || exit 1 + LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PREFIX/lib make all || exit 1 + make info || exit 1 + make install || exit 1 + cd .. + echo $PREFIX/lib >/etc/ld.so.conf.d/local.conf + ldconfig +else + echo $SRC_GCC is already built. +fi diff --git a/lib/CPUs/MIPS/doc/toolchain/newlib-1.16.0-jens.patch b/lib/CPUs/MIPS/doc/toolchain/newlib-1.16.0-jens.patch new file mode 100644 index 0000000..bf61a14 --- /dev/null +++ b/lib/CPUs/MIPS/doc/toolchain/newlib-1.16.0-jens.patch @@ -0,0 +1,11 @@ +diff -Naur newlib-1.16.0/newlib/libc/machine/mips/strlen.c newlib-1.16.0-fixed/newlib/libc/machine/mips/strlen.c +--- newlib-1.16.0/newlib/libc/machine/mips/strlen.c 2002-03-14 03:41:43.000000000 +0100 ++++ newlib-1.16.0-fixed/newlib/libc/machine/mips/strlen.c 2009-02-14 15:52:58.000000000 +0100 +@@ -60,6 +60,7 @@ + " addiu $2,$4,1\n" + "\n" + "1: lbu $3,0($4)\n" ++ " nop\n" + " bnez $3,1b\n" + " addiu $4,$4,1\n" + "\n" diff --git a/lib/CPUs/MIPS/doc/toolchain/newlib-1.17.0-jens.patch b/lib/CPUs/MIPS/doc/toolchain/newlib-1.17.0-jens.patch new file mode 100644 index 0000000..bc28abc --- /dev/null +++ b/lib/CPUs/MIPS/doc/toolchain/newlib-1.17.0-jens.patch @@ -0,0 +1,11 @@ +diff -Naur newlib-1.17.0/newlib/libc/machine/mips/strlen.c newlib-1.17.0-fixed/newlib/libc/machine/mips/strlen.c +--- newlib-1.17.0/newlib/libc/machine/mips/strlen.c 2002-03-14 03:41:43.000000000 +0100 ++++ newlib-1.17.0-fixed/newlib/libc/machine/mips/strlen.c 2009-02-14 15:45:19.000000000 +0100 +@@ -60,6 +60,7 @@ + " addiu $2,$4,1\n" + "\n" + "1: lbu $3,0($4)\n" ++ " nop\n" + " bnez $3,1b\n" + " addiu $4,$4,1\n" + "\n"