buildgcc: Fix typo in check for failed iasl build
[coreboot.git] / util / crossgcc / buildgcc
index f25685121ce0f646b18cf006702c679e64efb0a3..b3329b0c5ecbe1cda2ce5f4410e97a447f3af984 100755 (executable)
@@ -4,6 +4,8 @@
 # written by Patrick Georgi <patrick.georgi@coresystems.de> and
 #            Stefan Reinauer <stefan.reinauer@coresystems.de>
 #
+# Copyright (C) 2011 by Sage Electronic Engineering
+#
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; version 2 of the License.
@@ -18,8 +20,8 @@
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
 #
 
-CROSSGCC_DATE="May 18th, 2010"
-CROSSGCC_VERSION="1.01"
+CROSSGCC_DATE="August 8th, 2011"
+CROSSGCC_VERSION="1.04"
 
 # default settings
 TARGETDIR=`pwd`/xgcc
@@ -28,27 +30,28 @@ DESTDIR=
 
 # version numbers
 GMP_VERSION=5.0.1
-MPFR_VERSION=2.4.2
+MPFR_VERSION=3.0.0
 MPC_VERSION=0.8.2
 LIBELF_VERSION=0.8.13
-# GCC 4.5.0 is broken on some AMD boards:
-# GCC_VERSION=4.5.0 # enable for Link Time Optimization & Co
-GCC_VERSION=4.4.4
+GCC_VERSION=4.5.2
 BINUTILS_VERSION=2.20.1
-GDB_VERSION=7.1
-W32API_VERSION=3.14
+GDB_VERSION=7.2
+W32API_VERSION=3.17-2
+W32API_VERSION_SHORT=3.17
 MINGWRT_VERSION=3.18
+IASL_VERSION=20110623
 
 # archive locations
 GMP_ARCHIVE="ftp://ftp.gmplib.org/pub/gmp-${GMP_VERSION}/gmp-${GMP_VERSION}.tar.bz2"
 MPFR_ARCHIVE="http://www.mpfr.org/mpfr-${MPFR_VERSION}/mpfr-${MPFR_VERSION}.tar.bz2"
 MPC_ARCHIVE="http://www.multiprecision.org/mpc/download/mpc-${MPC_VERSION}.tar.gz"
 LIBELF_ARCHIVE="http://www.mr511.de/software/libelf-${LIBELF_VERSION}.tar.gz"
-GCC_ARCHIVE="ftp://ftp.gwdg.de/pub/gnu/ftp/gnu/gcc/gcc-${GCC_VERSION}/gcc-core-${GCC_VERSION}.tar.bz2"
+GCC_ARCHIVE="ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-${GCC_VERSION}/gcc-core-${GCC_VERSION}.tar.bz2"
 BINUTILS_ARCHIVE="http://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.bz2"
 GDB_ARCHIVE="http://ftp.gnu.org/gnu/gdb/gdb-${GDB_VERSION}.tar.bz2"
-W32API_ARCHIVE="http://downloads.sourceforge.net/project/mingw/MinGW%20API%20for%20MS-Windows/w32api-${W32API_VERSION}/w32api-${W32API_VERSION}-mingw32-src.tar.gz"
-MINGWRT_ARCHIVE="http://downloads.sourceforge.net/project/mingw/MinGW%20Runtime/mingwrt-${MINGWRT_VERSION}/mingwrt-${MINGWRT_VERSION}-mingw32-src.tar.gz"
+W32API_ARCHIVE="http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/RuntimeLibrary/Win32-API/w32api-${W32API_VERSION_SHORT}/w32api-${W32API_VERSION}-mingw32-src.tar.lzma"
+MINGWRT_ARCHIVE="http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/RuntimeLibrary/MinGW-RT/mingwrt-${MINGWRT_VERSION}/mingwrt-${MINGWRT_VERSION}-mingw32-src.tar.gz"
+IASL_ARCHIVE="http://www.acpica.org/download/acpica-unix-${IASL_VERSION}.tar.gz"
 
 GMP_DIR="gmp-${GMP_VERSION}"
 MPFR_DIR="mpfr-${MPFR_VERSION}"
@@ -59,8 +62,10 @@ BINUTILS_DIR="binutils-${BINUTILS_VERSION}"
 GDB_DIR="gdb-${GDB_VERSION}"
 W32API_DIR="w32api-${W32API_VERSION}-mingw32"
 MINGWRT_DIR="mingwrt-${MINGWRT_VERSION}-mingw32"
+IASL_DIR="acpica-unix-${IASL_VERSION}"
 
 SAVETEMPS=0
+SKIPGDB=0
 
 red='\e[0;31m'
 RED='\e[1;31m'
@@ -89,20 +94,20 @@ searchgnu()
        exit 1
 }
 
-TAR=`searchgnu tar`
-PATCH=`searchgnu patch`
-MAKE=`searchgnu make`
+TAR=`searchgnu tar` || exit $?
+PATCH=`searchgnu patch` || exit $?
+MAKE=`searchgnu make` || exit $?
 
 cleanup()
 {
        printf "Cleaning up temporary files... "
-       rm -rf build-* combined gcc-* gmp-* mpfr-* mpc-* libelf-* binutils-* gdb-* w32api-* mingwrt-*
+       rm -rf build-* combined gcc-* gmp-* mpfr-* mpc-* libelf-* binutils-* gdb-* w32api-* mingwrt-* acpica-*
        printf "${green}ok${NC}\n"
 }
 
 myhelp()
 {
-       printf "Usage: $0 [-V] [-c] [-p <platform>] [-d <target directory>] [-D <dest dir>]\n"
+       printf "Usage: $0 [-V] [-c] [-p <platform>] [-d <target directory>] [-D <dest dir>] [-G]\n"
        printf "       $0 [-V|--version]\n"
        printf "       $0 [-h|--help]\n\n"
 
@@ -118,6 +123,7 @@ myhelp()
        printf "                                  (defaults to $TARGETDIR)\n\n"
        printf "    [-D|--destdir <dest dir>]     destination directory to install cross compiler to\n"
        printf "                                  (for RPM builds, default unset)\n\n"
+       printf "    [-G|--skip-gdb]               don't build GNU debugger\n"
 }
 
 myversion()
@@ -126,6 +132,7 @@ myversion()
 
        cat << EOF
 Copyright (C) 2008-2010 by coresystems GmbH
+Copyright (C) 2011 by Sage Electronic Engineering
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -149,11 +156,11 @@ getopt - > /dev/null 2>/dev/null || gcc -o getopt getopt.c
 getoptbrand="`getopt -V`"
 if [ "${getoptbrand:0:6}" == "getopt" ]; then
        # Detected GNU getopt that supports long options.
-       args=`getopt -l version,help,clean,directory:,platform:,jobs:,destdir:,savetemps Vhcd:p:j:D:t -- "$@"`
+       args=`getopt -l version,help,clean,directory:,platform:,jobs:,destdir:,savetemps,skip-gdb Vhcd:p:j:D:tG -- "$@"`
        eval set "$args"
 else
        # Detected non-GNU getopt
-       args=`getopt Vhcd:p:j:D:t $*`
+       args=`getopt Vhcd:p:j:D:tG $*`
        set -- $args
 fi
 
@@ -172,12 +179,19 @@ while true ; do
                -p|--platform)  shift; TARGETARCH="$1"; shift;;
                -D|--destdir)   shift; DESTDIR="$1"; shift;;
                -j|--jobs)      shift; JOBS="-j $1"; shift;;
+               -G|--skip-gdb)  shift; SKIPGDB=1;;
                --)             shift; break;;
                -*)             printf "Invalid option\n\n"; myhelp; exit 1;;
                *)              break;;
        esac
 done
 
+GDB_PACKAGE="GDB"
+if [ $SKIPGDB -eq 1 ]; then
+       printf "Will skip GDB ... ${green}ok${NC}\n"
+       GDB_PACKAGE=""
+fi
+
 MINGW_ARCHIVES=""
 if [ "$TARGETARCH" = "i386-mingw32" ]; then
        MINGW_ARCHIVES="$W32API_ARCHIVE $MINGWRT_ARCHIVE"
@@ -209,7 +223,7 @@ fi
 
 printf "Downloading tar balls ... \n"
 mkdir -p tarballs
-for ARCHIVE in $GMP_ARCHIVE $MPFR_ARCHIVE $MPC_ARCHIVE $LIBELF_ARCHIVE $GCC_ARCHIVE $BINUTILS_ARCHIVE $GDB_ARCHIVE $MINGW_ARCHIVES; do
+for ARCHIVE in $GMP_ARCHIVE $MPFR_ARCHIVE $MPC_ARCHIVE $LIBELF_ARCHIVE $GCC_ARCHIVE $BINUTILS_ARCHIVE $GDB_ARCHIVE $MINGW_ARCHIVES $IASL_ARCHIVE; do
        FILE=`basename $ARCHIVE`
        printf " * $FILE "
        test -f tarballs/$FILE && printf "(cached)" || (
@@ -230,7 +244,7 @@ if [ "$TARGETARCH" = "i386-mingw32" ]; then
 fi
 
 printf "Unpacking and patching ... \n"
-for PACKAGE in GMP MPFR MPC LIBELF GCC BINUTILS GDB $MINGW_PACKAGES; do
+for PACKAGE in GMP MPFR MPC LIBELF GCC BINUTILS $GDB_PACKAGE $MINGW_PACKAGES IASL; do
        archive=$PACKAGE"_ARCHIVE"
        archive=${!archive}
        dir=$PACKAGE"_DIR"
@@ -239,6 +253,7 @@ for PACKAGE in GMP MPFR MPC LIBELF GCC BINUTILS GDB $MINGW_PACKAGES; do
                FLAGS=zxf
                test ${archive:${#archive}-2:2} = "gz" && FLAGS=zxf
                test ${archive:${#archive}-3:3} = "bz2" && FLAGS=jxf
+               test ${archive:${#archive}-4:4} = "lzma" && FLAGS="--lzma -xf"
                $TAR $FLAGS tarballs/`basename $archive`
                for patch in patches/${!dir}_*.patch; do
                        test -r $patch || continue
@@ -277,7 +292,10 @@ if [ `uname` = "Darwin" ]; then
        #rm .architecture_check.c .architecture_check.o
 fi
 
-mkdir -p build-gmp build-mpfr build-mpc build-libelf build-binutils build-gcc build-gdb
+mkdir -p build-gmp build-mpfr build-mpc build-libelf build-binutils build-gcc
+if [ $SKIPGDB -eq 0 ]; then
+       mkdir -p build-gdb
+fi
 if [ -f build-gmp/.success ]; then
        printf "Skipping GMP as it is already built\n"
 else
@@ -356,7 +374,7 @@ printf "Building libelf ${LIBELF_VERSION} ... "
        cd build-libelf
        rm -f .failed
        echo "$HOSTCFLAGS"
-       CFLAGS="$HOSTCFLAGS"  ../${LIBELF_DIR}/configure --disable-shared --prefix=$TARGETDIR \
+       CFLAGS="$HOSTCFLAGS" libelf_cv_elf_h_works=no ../${LIBELF_DIR}/configure --disable-shared --prefix=$TARGETDIR \
                --infodir=$TARGETDIR/info CFLAGS="$HOSTCFLAGS" || touch .failed
        $MAKE $JOBS || touch .failed
        $MAKE install DESTDIR=$DESTDIR || touch .failed
@@ -417,6 +435,8 @@ fi
 
 if [ -f build-gdb/.success ]; then
        printf "Skipping GDB as it is already built\n"
+elif [ $SKIPGDB -eq 1 ]; then
+       printf "Skipping GDB as requested by command line\n"
 else
 printf "Building GDB ${GDB_VERSION} ... "
 (
@@ -433,6 +453,24 @@ test -r build-gdb/.failed && printf "${RED}failed${NC}\n" || printf "${green}ok$
 test -r build-gdb/.failed && exit 1
 fi
 
+if [ -f $IASL_DIR/compiler/.success ]; then
+       printf "Skipping IASL as it is already built\n"
+else
+printf "Building IASL ${IASL_VERSION} ... "
+(
+       cd $IASL_DIR/compiler
+       export PATH=$PATH:$DESTDIR$TARGETDIR/bin
+       rm -f .failed
+       CFLAGS="$HOSTCFLAGS"
+       $MAKE || touch .failed
+       rm -f $DESTDIR$TARGETDIR/bin/iasl || touch .failed
+       cp iasl $DESTDIR$TARGETDIR/bin || touch .failed
+       if [ ! -f .failed ]; then touch .success; fi
+) &> $IASL_DIR/compiler/crossgcc-build.log
+test -r $IASL_DIR/compiler/.failed && printf "${RED}failed${NC}\n" || printf "${green}ok${NC}\n"
+test -r $IASL_DIR/compiler/.failed && exit 1
+fi
+
 if [ $SAVETEMPS -eq 0 ]; then
        printf "Cleaning up... "
        rm -rf ${GMP_DIR} build-gmp
@@ -442,6 +480,7 @@ if [ $SAVETEMPS -eq 0 ]; then
        rm -rf ${BINUTILS_DIR} build-binutils
        rm -rf ${GCC_DIR} build-gcc
        rm -rf ${GDB_DIR} build-gdb
+       rm -rf ${IASL_DIR}
        printf "${green}ok${NC}\n"
 else
        printf "Leaving temporary files around... ${green}ok${NC}\n"