HACK
[asbestos.git] / toolchain / buildit.sh
blobcebd304527ed69f26779e217d4f26d8d357f406b
1 #!/bin/sh
3 # Copyright (C) 2007 Segher Boessenkool <segher@kernel.crashing.org>
4 # Copyright (C) 2009-2010 Hector Martin "marcan" <hector@marcansoft.com>
5 # Copyright (C) 2009 Andre Heider "dhewg" <dhewg@wiibrew.org>
7 # Released under the terms of the GNU GPL, version 2
8 SCRIPTDIR=`dirname $PWD/$0`
10 BINUTILS_VER=2.21.1
11 BINUTILS_DIR="binutils-$BINUTILS_VER"
12 BINUTILS_TARBALL="binutils-$BINUTILS_VER.tar.bz2"
13 BINUTILS_URI="http://ftp.gnu.org/gnu/binutils/$BINUTILS_TARBALL"
15 GMP_VER=5.0.2
16 GMP_DIR="gmp-$GMP_VER"
17 GMP_TARBALL="gmp-$GMP_VER.tar.bz2"
18 GMP_URI="http://ftp.gnu.org/gnu/gmp/$GMP_TARBALL"
20 MPFR_VER=3.0.1
21 MPFR_DIR="mpfr-$MPFR_VER"
22 MPFR_TARBALL="mpfr-$MPFR_VER.tar.bz2"
23 MPFR_URI="http://www.mpfr.org/mpfr-$MPFR_VER/$MPFR_TARBALL"
25 MPC_VER=0.9
26 MPC_DIR="mpc-$MPC_VER"
27 MPC_TARBALL="mpc-$MPC_VER.tar.gz"
28 MPC_URI="http://www.multiprecision.org/mpc/download/$MPC_TARBALL"
30 GCC_VER=4.6.1
31 GCC_DIR="gcc-$GCC_VER"
32 GCC_CORE_TARBALL="gcc-core-$GCC_VER.tar.bz2"
33 GCC_CORE_URI="http://ftp.gnu.org/gnu/gcc/gcc-$GCC_VER/$GCC_CORE_TARBALL"
35 BUILDTYPE=$1
37 PPU_TARGET=powerpc64-linux
38 SPU_TARGET=spu-elf
40 if [ -z $MAKEOPTS ]; then
41 MAKEOPTS=-j3
44 # End of configuration section.
46 case `uname -s` in
47 *BSD*)
48 MAKE=gmake
51 MAKE=make
52 esac
54 export PATH=$PS3LINUXDEV/bin:$PATH
56 die() {
57 echo $@
58 exit 1
61 cleansrc() {
62 [ -e $PS3LINUXDEV/$BINUTILS_DIR ] && rm -rf $PS3LINUXDEV/$BINUTILS_DIR
63 [ -e $PS3LINUXDEV/$GCC_DIR ] && rm -rf $PS3LINUXDEV/$GCC_DIR
66 cleanbuild() {
67 [ -e $PS3LINUXDEV/build_binutils ] && rm -rf $PS3LINUXDEV/build_binutils
68 [ -e $PS3LINUXDEV/build_gcc ] && rm -rf $PS3LINUXDEV/build_gcc
71 download() {
72 DL=1
73 if [ -f "$PS3LINUXDEV/$2" ]; then
74 echo "Testing $2..."
75 tar tf "$PS3LINUXDEV/$2" >/dev/null 2>&1 && DL=0
78 if [ $DL -eq 1 ]; then
79 echo "Downloading $2..."
80 wget "$1" -c -O "$PS3LINUXDEV/$2" || die "Could not download $2"
84 extract() {
85 echo "Extracting $1..."
86 tar xf "$PS3LINUXDEV/$1" -C "$2" || die "Error unpacking $1"
89 makedirs() {
90 mkdir -p $PS3LINUXDEV/build_binutils || die "Error making binutils build directory $PS3LINUXDEV/build_binutils"
91 mkdir -p $PS3LINUXDEV/build_gcc || die "Error making gcc build directory $PS3LINUXDEV/build_gcc"
94 buildbinutils() {
95 TARGET=$1
97 cd $PS3LINUXDEV/build_binutils && \
98 $PS3LINUXDEV/$BINUTILS_DIR/configure --target=$TARGET \
99 --prefix=$PS3LINUXDEV --disable-werror --enable-64-bit-bfd && \
100 nice $MAKE $MAKEOPTS && \
101 $MAKE install
102 ) || die "Error building binutils for target $TARGET"
105 buildgcc() {
106 TARGET=$1
108 cd $PS3LINUXDEV/build_gcc && \
109 $PS3LINUXDEV/$GCC_DIR/configure --target=$TARGET --enable-targets=all \
110 --prefix=$PS3LINUXDEV \
111 --enable-languages=c --without-headers \
112 --disable-nls --disable-threads --disable-shared \
113 --disable-libmudflap --disable-libssp --disable-libgomp \
114 --disable-decimal-float \
115 --enable-checking=release $EXTRA_CONFIG_OPTS && \
116 nice $MAKE $MAKEOPTS all-gcc && \
117 nice $MAKE $MAKEOPTS all-target-libgcc && \
118 nice $MAKE $MAKEOPTS install-gcc && \
119 nice $MAKE $MAKEOPTS install-target-libgcc
120 ) || die "Error building gcc for target $TARGET"
123 buildspu() {
124 cleanbuild
125 makedirs
126 echo "******* Building SPU binutils"
127 buildbinutils $SPU_TARGET
128 echo "******* Building SPU GCC"
129 buildgcc $SPU_TARGET
130 echo "******* SPU toolchain built and installed"
133 buildppu() {
134 cleanbuild
135 makedirs
136 echo "******* Building PowerPC binutils"
137 buildbinutils $PPU_TARGET
138 echo "******* Building PowerPC GCC"
139 EXTRA_CONFIG_OPTS="--with-cpu=cell" buildgcc $PPU_TARGET
140 echo "******* PowerPC toolchain built and installed"
143 if [ -z "$PS3LINUXDEV" ]; then
144 die "Please set PS3LINUXDEV in your environment."
147 case $BUILDTYPE in
148 ppu|spu|both|clean) ;;
150 die "Please specify build type (ppu/spu/both/clean)"
153 die "Unknown build type $BUILDTYPE"
155 esac
157 if [ "$BUILDTYPE" = "clean" ]; then
158 cleanbuild
159 cleansrc
160 exit 0
163 download "$BINUTILS_URI" "$BINUTILS_TARBALL"
164 download "$GMP_URI" "$GMP_TARBALL"
165 download "$MPFR_URI" "$MPFR_TARBALL"
166 download "$MPC_URI" "$MPC_TARBALL"
167 download "$GCC_CORE_URI" "$GCC_CORE_TARBALL"
169 cleansrc
171 extract "$BINUTILS_TARBALL" "$PS3LINUXDEV"
172 patch -d $PS3LINUXDEV/$BINUTILS_DIR -u -p1 -i $SCRIPTDIR/binutils-2.21.1.patch || die "Error applying binutils patch"
173 extract "$GCC_CORE_TARBALL" "$PS3LINUXDEV"
174 extract "$GMP_TARBALL" "$PS3LINUXDEV/$GCC_DIR"
175 extract "$MPFR_TARBALL" "$PS3LINUXDEV/$GCC_DIR"
176 extract "$MPC_TARBALL" "$PS3LINUXDEV/$GCC_DIR"
178 # in-tree gmp, mpfr and mpc
179 mv "$PS3LINUXDEV/$GCC_DIR/$GMP_DIR" "$PS3LINUXDEV/$GCC_DIR/gmp" || die "Error renaming $GMP_DIR -> gmp"
180 mv "$PS3LINUXDEV/$GCC_DIR/$MPFR_DIR" "$PS3LINUXDEV/$GCC_DIR/mpfr" || die "Error renaming $MPFR_DIR -> mpfr"
181 mv "$PS3LINUXDEV/$GCC_DIR/$MPC_DIR" "$PS3LINUXDEV/$GCC_DIR/mpc" || die "Error renaming $MPC_DIR -> mpc"
183 case $BUILDTYPE in
184 spu) buildspu ;;
185 ppu) buildppu ;;
186 both) buildppu ; buildspu; cleanbuild; cleansrc ;;
187 esac