coreboot-kgpe-d16/util/crossgcc/buildgcc
Stefan Reinauer 17b77ab6aa buildgcc: Print error if flex is missing
flex is needed by acpica. This patch makes the build fail early
instead of after gcc has been compiled, if flex is not there.

Change-Id: Idfd71bdf704ab25de655f1a72c266c5220b15048
Signed-off-by: Stefan Reinauer <reinauer@google.com>
Reviewed-on: http://review.coreboot.org/1860
Reviewed-by: Idwer Vollering <vidwer@gmail.com>
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
2012-11-16 18:08:06 +01:00

629 lines
20 KiB
Bash
Executable file

#!/bin/sh
#
# Copyright (C) 2008-2010 by coresystems GmbH
# 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.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
#
CROSSGCC_DATE="November 1st, 2012"
CROSSGCC_VERSION="1.18"
# default settings
TARGETDIR=`pwd`/xgcc
TARGETARCH=i386-elf
DESTDIR=
# version numbers
GMP_VERSION=5.0.5
MPFR_VERSION=3.1.1
MPC_VERSION=1.0.1
LIBELF_VERSION=0.8.13
GCC_VERSION=4.7.2
GCC_AUTOCONF_VERSION=2.64
BINUTILS_VERSION=2.23
GDB_VERSION=7.5
W32API_VERSION=3.17-2
W32API_VERSION_SHORT=3.17
MINGWRT_VERSION=3.20-2
MINGWRT_VERSION_SHORT=3.20
IASL_VERSION=20120420
PYTHON_VERSION=2.7.3
EXPAT_VERSION=2.1.0
# archive locations
GMP_ARCHIVE="http://ftpmirror.gnu.org/gmp/gmp-${GMP_VERSION}.tar.bz2"
MPFR_ARCHIVE="http://ftpmirror.gnu.org/mpfr/mpfr-${MPFR_VERSION}.tar.bz2"
MPC_ARCHIVE="http://ftpmirror.gnu.org/mpc/mpc-${MPC_VERSION}.tar.gz"
LIBELF_ARCHIVE="http://www.mr511.de/software/libelf-${LIBELF_VERSION}.tar.gz"
GCC_ARCHIVE="http://ftpmirror.gnu.org/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.bz2"
BINUTILS_ARCHIVE="http://ftpmirror.gnu.org/binutils/binutils-${BINUTILS_VERSION}.tar.gz"
GDB_ARCHIVE="http://ftpmirror.gnu.org/gdb/gdb-${GDB_VERSION}.tar.bz2"
W32API_ARCHIVE="http://downloads.sourceforge.net/project/mingw/MinGW/Base/w32api/w32api-${W32API_VERSION_SHORT}/w32api-${W32API_VERSION}-mingw32-src.tar.lzma"
MINGWRT_ARCHIVE="http://downloads.sourceforge.net/project/mingw/MinGW/Base/mingw-rt/mingwrt-${MINGWRT_VERSION_SHORT}/mingwrt-${MINGWRT_VERSION}-mingw32-src.tar.lzma"
IASL_ARCHIVE="http://www.acpica.org/download/acpica-unix-${IASL_VERSION}.tar.gz"
PYTHON_ARCHIVE="http://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.bz2"
EXPAT_ARCHIVE="http://downloads.sourceforge.net/sourceforge/expat/expat-${EXPAT_VERSION}.tar.gz"
GMP_DIR="gmp-${GMP_VERSION}"
MPFR_DIR="mpfr-${MPFR_VERSION}"
MPC_DIR="mpc-${MPC_VERSION}"
LIBELF_DIR="libelf-${LIBELF_VERSION}"
GCC_DIR="gcc-${GCC_VERSION}"
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}"
PYTHON_DIR="Python-${PYTHON_VERSION}"
EXPAT_DIR="expat-${EXPAT_VERSION}"
SAVETEMPS=0
SKIPGDB=1
SKIPPYTHON=1
red='\033[0;31m'
RED='\033[1;31m'
green='\033[0;32m'
GREEN='\033[1;32m'
blue='\033[0;34m'
BLUE='\033[1;34m'
cyan='\033[0;36m'
CYAN='\033[1;36m'
NC='\033[0m' # No Color
searchgnu()
{
# $1 short name
# result: GNU version of that tool on stdout
# or no output if no GNU version was found
for i in "$1" "g$1" "gnu$1"; do
if test -x "`which $i 2>/dev/null`"; then
if test `$i --version 2>/dev/null |grep -c GNU` \
-gt 0; then
echo $i
return
fi
fi
done
# A workaround for XxxBSD, whose nongnu patch and tar also work.
if [ `uname` = "FreeBSD" -o `uname` = "NetBSD" ]; then
if [ $1 != "make" ]; then
if test -x "`which $1 2>/dev/null`"; then
echo $1
return
fi
fi
fi
printf "${RED}ERROR:${red} Missing toolchain: $1${NC}\n" >&2
exit 1
}
TAR=`searchgnu tar` || exit $?
PATCH=`searchgnu patch` || exit $?
MAKE=`searchgnu make` || exit $?
searchgnu m4 > /dev/null
searchgnu bison > /dev/null
searchgnu flex > /dev/null
cleanup()
{
printf "Cleaning up temporary files... "
rm -rf build-* combined gcc-* gmp-* mpfr-* mpc-* libelf-* binutils-*
rm -rf gdb-* w32api-* mingwrt-* acpica-* python-* expat-*
printf "${green}ok${NC}\n"
}
myhelp()
{
printf "Usage: $0 [-V] [-c] [-p <platform>] [-d <target directory>] [-D <dest dir>] [-G] [-S]\n"
printf " $0 [-V|--version]\n"
printf " $0 [-h|--help]\n\n"
printf "Options:\n"
printf " [-V|--version] print version number and exit\n"
printf " [-h|--help] print this help and exit\n"
printf " [-c|--clean] remove temporary files before build\n"
printf " [-t|--savetemps] don't remove temporary files after build\n"
printf " [-y|--ccache] Use ccache when building cross compiler\n"
printf " [-j|--jobs <num>] run <num> jobs in parallel in make\n"
printf " [-p|--platform <platform>] target platform to build cross compiler for\n"
printf " (defaults to $TARGETARCH)\n"
printf " [-d|--directory <target dir>] target directory to install cross compiler to\n"
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"
printf " [-G|--gdb] build GNU debugger\n"
printf " [-S|--scripting] build scripting support for GDB\n\n"
}
myversion()
{
# version tag is always printed, so just print the license here
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
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
EOF
}
printf "${blue}Welcome to the ${red}coreboot${blue} cross toolchain builder v$CROSSGCC_VERSION ($CROSSGCC_DATE)${NC}\n\n"
# Look if we have getopt. If not, build it.
export PATH=$PATH:.
getopt - > /dev/null 2>/dev/null || gcc -o getopt getopt.c
# parse parameters.. try to find out whether we're running GNU getopt
getoptbrand="`getopt -V | sed -e '1!d' -e 's,^\(......\).*,\1,'`"
if [ "${getoptbrand}" = "getopt" ]; then
# Detected GNU getopt that supports long options.
args=`getopt -l version,help,clean,directory:,platform:,jobs:,destdir:,savetemps,skip-gdb,ccache Vhcd:p:j:D:tGy -- "$@"`
eval set "$args"
else
# Detected non-GNU getopt
args=`getopt Vhcd:p:j:D:tGy $*`
set -- $args
fi
if [ $? != 0 ]; then
myhelp
exit 1
fi
while true ; do
case "$1" in
-V|--version) shift; myversion; exit 0;;
-h|--help) shift; myhelp; exit 0;;
-c|--clean) shift; cleanup;;
-t|--savetemps) shift; SAVETEMPS=1;;
-d|--directory) shift; TARGETDIR="$1"; shift;;
-p|--platform) shift; TARGETARCH="$1"; shift;;
-D|--destdir) shift; DESTDIR="$1"; shift;;
-j|--jobs) shift; JOBS="-j $1"; shift;;
-G|--gdb) shift; SKIPGDB=0;;
-S|--scripting) shift; SKIPPYTHON=0;;
-y|--ccache) shift; USECCACHE=1;;
--) shift; break;;
-*) printf "Invalid option\n\n"; myhelp; exit 1;;
*) break;;
esac
done
GDB_PACKAGE="GDB"
PYTHON_PACKAGE="PYTHON"
EXPAT_PACKAGE="EXPAT"
if [ $SKIPGDB -eq 1 ]; then
printf "Will skip GDB ... ${green}ok${NC}\n"
GDB_ARCHIVE=""
GDB_PACKAGE=""
if [ $SKIPPYTHON -eq 0 ]; then
printf "Python scripting needs GDB ... disabling ... ${green}ok${NC}\n"
SKIPPYTHON=1
fi
fi
if [ $SKIPPYTHON -eq 1 ]; then
PYTHON_ARCHIVE=""
PYTHON_PACKAGE=""
EXPAT_ARCHIVE=""
EXPAT_PACKAGE=""
fi
MINGW_ARCHIVES=""
if [ "$TARGETARCH" = "i386-mingw32" ]; then
MINGW_ARCHIVES="$W32API_ARCHIVE $MINGWRT_ARCHIVE"
fi
# coreboot does not like the GOLD linker
# USE_GOLD="--enable-gold"
USE_GOLD=""
GCC_OPTIONS="--enable-lto"
if [ ${GCC_VERSION} = "trunk" ]; then
if [ ! -r tarballs/gcc-core-${GCC_VERSION}.tar.bz2 ]; then
printf "Pre-Release GCC ${GCC_VERSION}, checking out subversion trunk\n"
mkdir -p tarballs/.tmp
cd tarballs/.tmp
rm -rf gcc-${GCC_VERSION}
svn export -q svn://gcc.gnu.org/svn/gcc/trunk gcc-${GCC_VERSION}
printf "done. Now creating tar ball...\n"
tar cjf ../gcc-core-${GCC_VERSION}.tar.bz2 gcc-${GCC_VERSION}
printf "done. Now cleaning up...\n"
cd ..
rm -rf .tmp
cd ..
printf "done.\n"
fi
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 \
$IASL_ARCHIVE $PYTHON_ARCHIVE $EXPAT_ARCHIVE; do
FILE=`basename $ARCHIVE`
printf " * $FILE "
test -f tarballs/$FILE && printf "(cached)" || (
printf "(downloading)"
cd tarballs
wget --no-check-certificate -q $ARCHIVE
)
test -f tarballs/$FILE || \
printf "\n${RED}Failed to download $FILE.${NC}\n"
test -f tarballs/$FILE || exit 1
printf "\n"
done
printf "Downloaded tar balls ... "
printf "${green}ok${NC}\n"
MINGW_PACKAGES=""
if [ "$TARGETARCH" = "i386-mingw32" ]; then
MINGW_PACKAGES="W32API MINGWRT"
fi
printf "Unpacking and patching ... \n"
for PACKAGE in GMP MPFR MPC LIBELF GCC BINUTILS $PYTHON_PACKAGE \
$EXPAT_PACKAGE $GDB_PACKAGE $MINGW_PACKAGES IASL; do
archive=$PACKAGE"_ARCHIVE"
archive="`eval echo '$'$archive`"
dir=$PACKAGE"_DIR"
dir="`eval echo '$'${dir}`"
test -d ${dir} || (
printf " * `basename $archive`\n"
FLAGS=zxf
suffix=`echo $archive | sed 's,.*\.,,'`
test "$suffix" = "gz" && FLAGS=zxf
test "$suffix" = "bz2" && FLAGS=jxf
test "$suffix" = "lzma" && FLAGS="--lzma -xf"
$TAR $FLAGS tarballs/`basename $archive`
for patch in patches/${dir}_*.patch; do
test -r $patch || continue
printf " o `basename $patch`\n"
$PATCH -s -N -p0 < `echo $patch` || \
printf "\n${RED}Failed $patch.${NC}\n"
done
)
done
printf "Unpacked and patched ... "
printf "${green}ok${NC}\n"
if [ "$TARGETARCH" = "i386-mingw32" ]; then
mkdir -p $TARGETDIR/i386-mingw32/sys-include
mv $MINGWRT_DIR/include/* $W32API_DIR/include/* \
$TARGETDIR/i386-mingw32/sys-include
fi
CC=cc
if [ `uname` = "Darwin" ]; then
#GCC_OPTIONS="$GCC_OPTIONS --enable-threads=posix"
# generally the OS X compiler can create x64 binaries.
# Per default it generated i386 binaries in 10.5 and x64
# binaries in 10.6 (even if the kernel is 32bit)
# For some weird reason, 10.5 autodetects an ABI=64 though
# so we're setting the ABI explicitly here.
if [ `sysctl -n hw.optional.x86_64 2>/dev/null` -eq 1 ] 2>/dev/null; then
OPTIONS="ABI=64"
else
OPTIONS="ABI=32"
fi
# In Xcode 4 the default compiler was switched to gcc-llvm.
# However, this compiler fails to compile gcc 4.6.x. As a
# workaround it's possible to compile gcc with gcc-4.2 or
# clang.
if $CC -v 2>&1 | grep -q LLVM; then
CC=clang
fi
fi
if [ "$USECCACHE" = 1 ]; then
CC="ccache $CC"
fi
mkdir -p build-gmp build-mpfr build-mpc build-libelf build-binutils \
build-gcc build-python build-expat
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
printf "Building GMP ${GMP_VERSION} ... "
(
cd build-gmp
rm -f .failed
CC="$CC" ../${GMP_DIR}/configure --disable-shared --prefix=$TARGETDIR $OPTIONS \
|| touch .failed
$MAKE $JOBS || touch .failed
$MAKE install DESTDIR=$DESTDIR || touch .failed
if [ ! -f .failed ]; then touch .success; fi
) > build-gmp/crossgcc-build.log 2>&1
test -r build-gmp/.failed && printf "${RED}failed${NC}\n" || \
printf "${green}ok${NC}\n"
test -r build-gmp/.failed && exit 1
fi
#if [ "$DESTDIR" != "" -a ! -x $TARGETDIR ]; then
# # create compat link
# ln -s $DESTDIR$TARGETDIR $TARGETDIR
#fi
# Now set CFLAGS to match GMP CFLAGS but strip out -pedantic
# as GCC 4.6.x fails if it's there.
HOSTCFLAGS=`grep __GMP_CFLAGS $DESTDIR$TARGETDIR/include/gmp.h |cut -d\" -f2 |\
sed s,-pedantic,,`
if [ -f build-mpfr/.success ]; then
printf "Skipping MPFR as it is already built\n"
else
printf "Building MPFR ${MPFR_VERSION} ... "
(
test `uname` = "Darwin" && CFLAGS="$CFLAGS -force_cpusubtype_ALL"
cd build-mpfr
rm -f .failed
CC="$CC" ../${MPFR_DIR}/configure --disable-shared --prefix=$TARGETDIR \
--infodir=$TARGETDIR/info \
--with-gmp=$DESTDIR$TARGETDIR CFLAGS="$HOSTCFLAGS" || \
touch .failed
$MAKE $JOBS || touch .failed
$MAKE install DESTDIR=$DESTDIR || touch .failed
# work around build problem of libgmp.la
if [ "$DESTDIR" != "" ]; then
perl -pi -e "s,$DESTDIR,," $DESTDIR$TARGETDIR/libgmp.la
fi
if [ ! -f .failed ]; then touch .success; fi
) > build-mpfr/crossgcc-build.log 2>&1
test -r build-mpfr/.failed && printf "${RED}failed${NC}\n" || \
printf "${green}ok${NC}\n"
test -r build-mpfr/.failed && exit 1
fi
if [ -f build-mpc/.success ]; then
printf "Skipping MPC as it is already built\n"
else
printf "Building MPC ${MPC_VERSION} ... "
(
#test `uname` = "Darwin" && CFLAGS="$CFLAGS -force_cpusubtype_ALL"
cd build-mpc
rm -f .failed
CC="$CC" ../${MPC_DIR}/configure --disable-shared --prefix=$TARGETDIR \
--infodir=$TARGETDIR/info --with-mpfr=$DESTDIR$TARGETDIR \
--with-gmp=$DESTDIR$TARGETDIR CFLAGS="$HOSTCFLAGS" || \
touch .failed
$MAKE $JOBS || touch .failed
$MAKE install DESTDIR=$DESTDIR || touch .failed
if [ ! -f .failed ]; then touch .success; fi
) > build-mpc/crossgcc-build.log 2>&1
test -r build-mpc/.failed && printf "${RED}failed${NC}\n" || \
printf "${green}ok${NC}\n"
test -r build-mpc/.failed && exit 1
fi
if [ -f build-libelf/.success ]; then
printf "Skipping libelf as it is already built\n"
else
printf "Building libelf ${LIBELF_VERSION} ... "
(
cd build-libelf
rm -f .failed
echo "$HOSTCFLAGS"
CC="$CC" 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
if [ ! -f .failed ]; then touch .success; fi
) > build-libelf/crossgcc-build.log 2>&1
test -r build-libelf/.failed && printf "${RED}failed${NC}\n" || \
printf "${green}ok${NC}\n"
test -r build-libelf/.failed && exit 1
fi
if [ -f build-binutils/.success ]; then
printf "Skipping binutils as it is already built\n"
else
printf "Building binutils ${BINUTILS_VERSION} ... "
(
# What a pain: binutils don't come with configure
# script anymore. Create it:
cd binutils-${BINUTILS_VERSION}/
autoconf
cd ..
# Now build binutils
cd build-binutils
rm -f .failed
CC="$CC" ../binutils-${BINUTILS_VERSION}/configure --prefix=$TARGETDIR \
--target=${TARGETARCH} --disable-werror --disable-nls \
$USE_GOLD CFLAGS="$HOSTCFLAGS" || touch .failed
$MAKE $JOBS || touch .failed
$MAKE install DESTDIR=$DESTDIR || touch .failed
if [ ! -f .failed ]; then touch .success; fi
) > build-binutils/crossgcc-build.log 2>&1
test -r build-binutils/.failed && printf "${RED}failed${NC}\n" || \
printf "${green}ok${NC}\n"
test -r build-binutils/.failed && exit 1
fi
if [ -f build-gcc/.success ]; then
printf "Skipping GCC as it is already built\n"
else
printf "Building GCC ${GCC_VERSION} ... "
(
# Even worse than binutils: GCC does not come with configure
# script anymore, but also enforces an obsolete autoconf version
# to create it. This is a poster child of how autotools help make
# software portable.
cd gcc-${GCC_VERSION}
sed '/dnl Ensure exactly this Autoconf version is used/d' \
config/override.m4 > config/override.m4.new
autoconf_version=`autoconf -V | grep "autoconf" | tr ' ' '\n' | tail -1`
sed "s/${GCC_AUTOCONF_VERSION}/${autoconf_version}/g" \
config/override.m4.new > config/override.m4
autoconf
cd ..
# Now, finally, we can build gcc:
cd build-gcc
export PATH=$PATH:$DESTDIR$TARGETDIR/bin
rm -f .failed
# GCC does not honour HOSTCFLAGS at all. CFLAGS are used for
# both target and host object files. This is pretty misdesigned.
# There's a work-around called CFLAGS_FOR_BUILD and CFLAGS_FOR_TARGET
# but it does not seem to work properly. At least the host library
# libiberty is not compiled with CFLAGS_FOR_BUILD.
CC="$CC" CFLAGS_FOR_TARGET="-O2" CFLAGS="$HOSTCFLAGS" \
CFLAGS_FOR_BUILD="$HOSTCFLAGS" ../gcc-${GCC_VERSION}/configure \
--prefix=$TARGETDIR --libexecdir=$TARGETDIR/lib \
--target=${TARGETARCH} --disable-werror --disable-shared \
--disable-libssp --disable-bootstrap --disable-nls \
--disable-libquadmath \
$GCC_OPTIONS --enable-languages="c" $USE_GOLD \
--with-gmp=$DESTDIR$TARGETDIR --with-mpfr=$DESTDIR$TARGETDIR \
--with-mpc=$DESTDIR$TARGETDIR --with-libelf=$DESTDIR$TARGETDIR \
--with-pkgversion="coreboot toolchain v$CROSSGCC_VERSION $CROSSGCC_DATE" \
|| touch .failed
$MAKE $JOBS CFLAGS_FOR_BUILD="$HOSTCFLAGS" || touch .failed
$MAKE install DESTDIR=$DESTDIR || touch .failed
if [ ! -f .failed ]; then touch .success; fi
) > build-gcc/crossgcc-build.log 2>&1
test -r build-gcc/.failed && printf "${RED}failed${NC}\n" || \
printf "${green}ok${NC}\n"
test -r build-gcc/.failed && exit 1
fi
if [ -f build-expat/.success ]; then
printf "Skipping Expat as it is already built\n"
elif [ $SKIPPYTHON -eq 1 ]; then
printf "Skipping Expat (Python scripting not enabled)\n"
else
printf "Building Expat ${EXPAT_VERSION} ... "
(
cd build-expat
export PATH=$PATH:$DESTDIR$TARGETDIR/bin
rm -f .failed
CC="$CC" CFLAGS="$HOSTCFLAGS" ../${EXPAT_DIR}/configure --disable-shared \
--prefix=$TARGETDIR --target=${TARGETARCH} || touch .failed
$MAKE || touch .failed
$MAKE install DESTDIR=$DESTDIR || touch .failed
if [ ! -f .failed ]; then touch .success; fi
) > build-expat/crossgcc-build.log 2>&1
test -r build-expat/.failed && printf "${RED}failed${NC}\n" || \
printf "${green}ok${NC}\n"
test -r build-expat/.failed && exit 1
fi
if [ -f build-python/.success ]; then
printf "Skipping Python as it is already built\n"
elif [ $SKIPPYTHON -eq 1 ]; then
printf "Skipping Python (Python scripting not enabled)\n"
else
printf "Building Python ${PYTHON_VERSION} ... "
(
cd build-python
export PATH=$PATH:$DESTDIR$TARGETDIR/bin
rm -f .failed
CC="$CC" CFLAGS="$HOSTCFLAGS" ../${PYTHON_DIR}/configure --prefix=$TARGETDIR \
--target=${TARGETARCH} || touch .failed
$MAKE $JOBS || touch .failed
$MAKE install DESTDIR=$DESTDIR || touch .failed
if [ ! -f .failed ]; then touch .success; fi
) > build-python/crossgcc-build.log 2>&1
test -r build-python/.failed && printf "${RED}failed${NC}\n" || \
printf "${green}ok${NC}\n"
test -r build-python/.failed && exit 1
fi
if [ -f build-gdb/.success ]; then
printf "Skipping GDB as it is already built\n"
elif [ $SKIPGDB -eq 1 ]; then
printf "Skipping GDB (GDB support not enabled)\n"
else
printf "Building GDB ${GDB_VERSION} ... "
(
cd build-gdb
export PATH=$PATH:$DESTDIR$TARGETDIR/bin
export PYTHONHOME=$DESTDIR$TARGETDIR
rm -f .failed
LDFLAGS="-Wl,-rpath,\$\$ORIGIN/../lib/ -L$DESTDIR$TARGETDIR/lib \
-lpthread -ldl -lutil" \
CC="$CC" CFLAGS="$HOSTCFLAGS -I$DESTDIR$TARGETDIR/include" \
../gdb-${GDB_VERSION}/configure --prefix=$TARGETDIR \
--target=${TARGETARCH} --disable-werror --disable-nls
$MAKE $JOBS || touch .failed
$MAKE install DESTDIR=$DESTDIR || touch .failed
if [ ! -f .failed ]; then touch .success; fi
) > build-gdb/crossgcc-build.log 2>&1
test -r build-gdb/.failed && printf "${RED}failed${NC}\n" || \
printf "${green}ok${NC}\n"
test -r build-gdb/.failed && exit 1
fi
if [ -f $IASL_DIR/source/compiler/.success ]; then
printf "Skipping IASL as it is already built\n"
else
printf "Building IASL ${IASL_VERSION} ... "
(
cd $IASL_DIR/source/compiler
export PATH=$PATH:$DESTDIR$TARGETDIR/bin
rm -f .failed
CFLAGS="$HOSTCFLAGS"
$MAKE CC="$CC" || 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/source/compiler/crossgcc-build.log 2>&1
test -r $IASL_DIR/source/compiler/.failed && printf "${RED}failed${NC}\n" || \
printf "${green}ok${NC}\n"
test -r $IASL_DIR/source/compiler/.failed && exit 1
fi
if [ $SAVETEMPS -eq 0 ]; then
printf "Cleaning up... "
rm -rf ${GMP_DIR} build-gmp
rm -rf ${MPFR_DIR} build-mpfr
rm -rf ${MPC_DIR} build-mpc
rm -rf ${LIBELF_DIR} build-libelf
rm -rf ${BINUTILS_DIR} build-binutils
rm -rf ${GCC_DIR} build-gcc
rm -rf ${GDB_DIR} build-gdb
rm -rf ${EXPAT_DIR} build-expat
rm -rf ${PYTHON_DIR} build-python
rm -rf ${IASL_DIR}
printf "${green}ok${NC}\n"
else
printf "Leaving temporary files around... ${green}ok${NC}\n"
fi
printf "\n${green}You can now run your $TARGETARCH cross toolchain from $TARGETDIR.${NC}\n"