Subversion Repositories HelenOS

Rev

Rev 3369 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
332 palkovsky 1
#!/bin/bash
2
 
3
# Cross-Compiler Toolchain for ${PLATFORM}
4
#  by Martin Decky <martin@decky.cz>
5
#
6
#  GPL'ed, copyleft
7
#
8
 
9
 
10
check_error() {
11
    if [ "$1" -ne "0" ]; then
12
    echo
13
    echo "Script failed: $2"
14
    exit
15
    fi
16
}
17
 
3369 decky 18
if [ -z "${CROSS_PREFIX}" ] ; then
19
    CROSS_PREFIX="/usr/local"
20
fi
21
 
3799 decky 22
BINUTILS_VERSION="2.19"
23
GCC_VERSION="4.3.2"
332 palkovsky 24
 
25
BINUTILS="binutils-${BINUTILS_VERSION}.tar.gz"
2077 decky 26
GCC_CORE="gcc-core-${GCC_VERSION}.tar.bz2"
27
GCC_OBJC="gcc-objc-${GCC_VERSION}.tar.bz2"
28
GCC_CPP="gcc-g++-${GCC_VERSION}.tar.bz2"
332 palkovsky 29
 
30
BINUTILS_SOURCE="ftp://ftp.gnu.org/gnu/binutils/"
31
GCC_SOURCE="ftp://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/"
32
 
33
PLATFORM="mips"
34
WORKDIR=`pwd`
35
TARGET="${PLATFORM}-sgi-irix5"
3369 decky 36
PREFIX="${CROSS_PREFIX}/${PLATFORM}"
332 palkovsky 37
BINUTILSDIR="${WORKDIR}/binutils-${BINUTILS_VERSION}"
38
GCCDIR="${WORKDIR}/gcc-${GCC_VERSION}"
39
OBJDIR="${WORKDIR}/gcc-obj"
40
 
41
echo ">>> Downloading tarballs"
42
 
43
if [ ! -f "${BINUTILS}" ]; then
44
    wget -c "${BINUTILS_SOURCE}${BINUTILS}"
45
    check_error $? "Error downloading binutils."
46
fi
2077 decky 47
if [ ! -f "${GCC_CORE}" ]; then
48
    wget -c "${GCC_SOURCE}${GCC_CORE}"
49
    check_error $? "Error downloading GCC Core."
332 palkovsky 50
fi
2077 decky 51
if [ ! -f "${GCC_OBJC}" ]; then
52
    wget -c "${GCC_SOURCE}${GCC_OBJC}"
53
    check_error $? "Error downloading GCC Objective C."
54
fi
55
if [ ! -f "${GCC_CPP}" ]; then
56
    wget -c "${GCC_SOURCE}${GCC_CPP}"
57
    check_error $? "Error downloading GCC C++."
58
fi
332 palkovsky 59
 
60
echo ">>> Creating destionation directory"
61
if [ ! -d "${PREFIX}" ]; then
62
    mkdir -p "${PREFIX}"
63
    test -d "${PREFIX}"
64
    check_error $? "Unable to create ${PREFIX}."
65
fi
66
 
67
echo ">>> Creating GCC work directory"
68
if [ ! -d "${OBJDIR}" ]; then
69
    mkdir -p "${OBJDIR}"
70
    test -d "${OBJDIR}"
71
    check_error $? "Unable to create ${OBJDIR}."
72
fi
73
 
74
echo ">>> Unpacking tarballs"
75
tar -xvzf "${BINUTILS}"
76
check_error $? "Error unpacking binutils."
2077 decky 77
tar -xvjf "${GCC_CORE}"
78
check_error $? "Error unpacking GCC Core."
79
tar -xvjf "${GCC_OBJC}"
80
check_error $? "Error unpacking GCC Objective C."
81
tar -xvjf "${GCC_CPP}"
82
check_error $? "Error unpacking GCC C++."
332 palkovsky 83
 
84
echo ">>> Compiling and installing binutils"
85
cd "${BINUTILSDIR}"
86
check_error $? "Change directory failed."
3799 decky 87
patch -p1 <<EOF
88
diff -Naur binutils-2.19.orig/bfd/elfxx-mips.c binutils-2.19/bfd/elfxx-mips.c
89
--- binutils-2.19.orig/bfd/elfxx-mips.c 2008-08-18 20:14:04.000000000 +0200
90
+++ binutils-2.19/bfd/elfxx-mips.c  2009-01-18 18:14:47.292011299 +0100
91
@@ -1409,7 +1409,7 @@
92
    function, or 0 if we can't decide which function that is.  */
93
 
94
 static unsigned long
95
-mips16_stub_symndx (asection *sec, const Elf_Internal_Rela *relocs,
96
+mips16_stub_symndx (asection *sec __attribute__((unused)), const Elf_Internal_Rela *relocs,
97
            const Elf_Internal_Rela *relend)
98
 {
99
   const Elf_Internal_Rela *rel;
100
EOF
101
check_error $? "Error patching binutils"
2139 decky 102
./configure "--target=${TARGET}" "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" "--disable-nls"
332 palkovsky 103
check_error $? "Error configuring binutils."
104
make all install
105
check_error $? "Error compiling/installing binutils."
106
 
107
echo ">>> Compiling and installing GCC"
108
cd "${OBJDIR}"
109
check_error $? "Change directory failed."
2139 decky 110
"${GCCDIR}/configure" "--target=${TARGET}" "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" --with-gnu-as --with-gnu-ld --disable-nls --disable-threads --enable-languages=c,objc,c++,obj-c++ --disable-multilib --disable-libgcj --without-headers --disable-shared
332 palkovsky 111
check_error $? "Error configuring GCC."
112
PATH="${PATH}:${PREFIX}/bin" make all-gcc install-gcc
113
check_error $? "Error compiling/installing GCC."
114
 
115
echo
116
echo ">>> Cross-compiler for ${TARGET} installed."