Subversion Repositories HelenOS

Rev

Rev 3022 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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.  
  18. if [ -z "${CROSS_PREFIX}" ] ; then
  19.     CROSS_PREFIX="/usr/local"
  20. fi
  21.  
  22. BINUTILS_VERSION="2.19"
  23. GCC_VERSION="4.3.2"
  24.  
  25. BINUTILS="binutils-${BINUTILS_VERSION}.tar.gz"
  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"
  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"
  36. PREFIX="${CROSS_PREFIX}/${PLATFORM}"
  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
  47. if [ ! -f "${GCC_CORE}" ]; then
  48.     wget -c "${GCC_SOURCE}${GCC_CORE}"
  49.     check_error $? "Error downloading GCC Core."
  50. fi
  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
  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."
  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++."
  83.  
  84. echo ">>> Compiling and installing binutils"
  85. cd "${BINUTILSDIR}"
  86. check_error $? "Change directory failed."
  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"
  102. ./configure "--target=${TARGET}" "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" "--disable-nls"
  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."
  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
  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."
  117.