#!/bin/bash TARGET_DIR=`pwd` BINUTILS_VER=2.18 GCC_VER=4.3.0 NEWLIB_VER=1.16.0 GMP_VER=4.2.2 MPFR_VER=2.3.1 GDB_VER=6.7.1 TARGET=i386-elf HOST=linux-x86_64 LOGFILETMP=$TARGET_DIR/gen/$HOST/$TARGET/tmp.log mkdir -p $TARGET_DIR/gen/$HOST/$TARGET/ echo "Building $TARGET cross compile tools for $HOST" echo " - Downloading necessary packages" mkdir -p $TARGET_DIR/source cd $TARGET_DIR/source if [ ! -e "gmp-$GMP_VER.tar.bz2" ] then wget http://ftp.sunet.se/pub/gnu/gmp/gmp-$GMP_VER.tar.bz2 fi if [ ! -e "mpfr-$MPFR_VER.tar.bz2" ] then wget http://www.mpfr.org/mpfr-current/mpfr-$MPFR_VER.tar.bz2 fi if [ ! -e "binutils-$BINUTILS_VER.tar.bz2" ] then wget ftp://ftp.sunet.se/pub/gnu/binutils/binutils-$BINUTILS_VER.tar.bz2 fi if [ ! -e "newlib-$NEWLIB_VER.tar.gz" ] then wget ftp://sources.redhat.com/pub/newlib/newlib-$NEWLIB_VER.tar.gz fi if [ ! -e "gcc-$GCC_VER.tar.bz2" ] then wget ftp://ftp.sunet.se/pub/gnu/gcc/releases/gcc-$GCC_VER/gcc-$GCC_VER.tar.bz2 fi echo " - Extracting packages" cd $TARGET_DIR/source if [ ! -e "gmp-$GMP_VER" ] then echo " >> gmp-$GMP_VER.tar.bz2" tar -xf gmp-$GMP_VER.tar.bz2 fi if [ ! -e "mpfr-$MPFR_VER" ] then echo " >> mpfr-$MPFR_VER.tar.bz2" tar -xf mpfr-$MPFR_VER.tar.bz2 fi if [ ! -e "binutils-$BINUTILS_VER" ] then echo " >> binutils-$BINUTILS_VER.tar.bz2" tar -xf binutils-$BINUTILS_VER.tar.bz2 fi if [ ! -e "newlib-$NEWLIB_VER" ] then echo " >> newlib-$NEWLIB_VER.tar.gz" tar -xf newlib-$NEWLIB_VER.tar.gz fi if [ ! -e "gcc-$GCC_VER" ] then echo " >> gcc-$GCC_VER.tar.bz2" tar -xf gcc-$GCC_VER.tar.bz2 fi export target=$TARGET export host_prefix=$TARGET_DIR/bin/$HOST export cross_prefix=$host_prefix/tools/$TARGET export i=$cross_prefix/bin mkdir -p $TARGET_DIR/gen/$HOST/ if [ -e "$TARGET_DIR/source/gmp-$GMP_VER" ] then echo " - Building GMP $GMP_VER (prerequisite)" mkdir -p $TARGET_DIR/gen/$HOST/gmp-$GMP_VER cd $TARGET_DIR/gen/$HOST/gmp-$GMP_VER if [ ! -e "$TARGET_DIR/gen/$HOST/gmp-$GMP_VER/.configured" ] then echo " Configuring .." rm $TARGET_DIR/gen/$HOST/gmp-config.log 2>/dev/null >/dev/null ../../../source/gmp-$GMP_VER/configure --prefix=$host_prefix 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/gmp-config.log echo "done" > $TARGET_DIR/gen/$HOST/gmp-$GMP_VER/.configured fi echo " Compiling .." rm $TARGET_DIR/gen/$HOST/gmp-build.log 2>/dev/null >/dev/null make 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/gmp-build.log make install 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/gmp-build.log make clean 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/gmp-build.log fi if [ -e "$TARGET_DIR/source/mpfr-$MPFR_VER" ] then echo " - Building MPFR $MPFR_VER (prerequisite)" mkdir -p $TARGET_DIR/gen/$HOST/mpfr-$MPFR_VER cd $TARGET_DIR/gen/$HOST/mpfr-$MPFR_VER if [ ! -e "$TARGET_DIR/gen/$HOST/mpfr-$MPFR_VER/.configured" ] then echo " Configuring .." rm $TARGET_DIR/gen/$HOST/mpfr-config.log 2>/dev/null >/dev/null ../../../source/mpfr-$MPFR_VER/configure --prefix=$host_prefix 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/mpfr-config.log echo "done" > $TARGET_DIR/gen/$HOST/mpfr-$MPFR_VER/.configured fi echo " Compiling .." rm $TARGET_DIR/gen/$HOST/mpfr-build.log 2>/dev/null >/dev/null make 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/mpfr-build.log make check 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/mpfr-build.log make install 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/mpfr-build.log make clean 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/mpfr-build.log fi if [ -e "$TARGET_DIR/source/binutils-$BINUTILS_VER" ] then echo " - Building toolchain" mkdir -p $TARGET_DIR/gen/$HOST/$TARGET/binutils-$BINUTILS_VER cd $TARGET_DIR/gen/$HOST/$TARGET/binutils-$BINUTILS_VER if [ ! -e "$TARGET_DIR/gen/$HOST/$TARGET/binutils-$BINUTILS_VER/.configured" ] then echo " Configuring .." rm $TARGET_DIR/gen/$HOST/$TARGET/binutils-config.log 2>/dev/null >/dev/null ../../../../source/binutils-$BINUTILS_VER/configure --target=$target --prefix=$cross_prefix 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/$TARGET/binutils-config.log echo "done" > $TARGET_DIR/gen/$HOST/$TARGET/binutils-$BINUTILS_VER/.configured fi echo " Compiling .." rm $TARGET_DIR/gen/$HOST/$TARGET/binutils-build.log 2>/dev/null >/dev/null make 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/$TARGET/binutils-build.log make install 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/$TARGET/binutils-build.log make clean 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/$TARGET/binutils-build.log fi if [ -e "$TARGET_DIR/source/gcc-$GCC_VER" ] then echo " - Building GCC $GCC_VER" if [ -e "$TARGET_DIR/source/newlib-$NEWLIB_VER" ] then echo " Creating prerequisite library aliases" cd $TARGET_DIR/source/gcc-$GCC_VER ln -s ../newlib-$NEWLIB_VER/newlib . 2>/dev/null >/dev/null ln -s ../newlib-$NEWLIB_VER/libgloss . 2>/dev/null >/dev/null fi mkdir -p $TARGET_DIR/gen/$HOST/$TARGET/gcc-$GCC_VER cd $TARGET_DIR/gen/$HOST/$TARGET/gcc-$GCC_VER if [ ! -e "$TARGET_DIR/gen/$HOST/$TARGET/gcc-$GCC_VER/.configured" ] then echo " Configuring .." rm $TARGET_DIR/gen/$HOST/$TARGET/gcc-config.log 2>/dev/null >/dev/null ../../../../source/gcc-$GCC_VER/configure --target=$target --prefix=$cross_prefix --enable-languages=c --disable-libssp --with-newlib --enable-newlib-io-long-long --with-gnu-as --with-gnu-ld --with-gmp-lib=$host_prefix/lib --with-gmp-include=$host_prefix/include --with-mpfr-lib=$host_prefix/lib --with-mpfr-include=$host_prefix/include 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/$TARGET/gcc-config.log echo "done" > $TARGET_DIR/gen/$HOST/$TARGET/gcc-$GCC_VER/.configured fi echo " Compiling .." rm $TARGET_DIR/gen/$HOST/$TARGET/gcc-build.log 2>/dev/null >/dev/null make "CFLAGS = -DREENTRANT_SYSCALLS_PROVIDED" 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/$TARGET/gcc-build.log make install 2>$LOGFILETMP >$LOGFILETMP cat $LOGFILETMP > $TARGET_DIR/gen/$HOST/$TARGET/gcc-build.log fi rm $LOGFILETMP echo "Build of $TARGET cross compile tools completed"