All pastes #985080 Raw Edit

Anonymous

public text v1 · immutable
·published 2008-04-14 19:43 UTC
rendered paste body
#!/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"