fpc/install/cross/buildcrossbinutils
2004-01-31 13:24:20 +00:00

176 lines
3.1 KiB
Bash

#!/bin/sh
#
# A script to build the crossutils for a set of platforms.
# Note:cygwin seems to like to have all platforms qualified.
#
BASE=~
# where to store the built tree of binutils?
DESTDIR=${BASE}/cross
# directory where logs go
LOGDIR=${BASE}/logs
# where can I decrunch and build?
WORKDIR=${BASE}/buildme
# where is the binutils archive?
BINUTILSPATH=~
# what is it's base name?
BINUTILSBASE=binutils
# what is the version part of the archive?
BINUTILSVERSION=2.14
# is binutils archive gz or bz2?
BINUTILS_GZIP=no
# what i6868 platform do you want/need to build for?
MYINTEL=i686
# target info, OSes per processor with "WIN" as special case
BSD="freebsd netbsd openbsd"
TARGETS_WIN="cygwin mingw32 msdosdjgpp"
TARGETS_I386="${BSD} linux solaris darwin"
TARGETS_X86_64="${BSD} linux"
TARGETS_POWERPC="${BSD} linux darwin"
TARGETS_SPARC="${BSD} linux solaris"
#TARGETS_M68k=
# I use the below because my default system is dual proc.
#EXTRAOPT=-j 4
###########################################################################
# don't edit below
#
#
#
#
LD_FLAGS="${LD_FLAGS} -static"
LDFLAGS="${LD_FLAGS} -s"
CFLAGS="${CFLAGS} -static"
CPPFLAGS="${CPPFLAGS} -static"
CXXFLAGS="${CXXFLAGS} -static"
#
# Make a list of targets
#
TARGETS=""
for OS in ${TARGETS_WIN}; do
TARGETS="${TARGETS} ${MYINTEL}-${OS}"
done;
for OS in ${TARGETS_I386}; do
TARGETS="${TARGETS} ${MYINTEL}-${OS}"
done;
for OS in ${TARGETS_X86_64}; do
TARGETS="${TARGETS} x86_64-${OS}"
done;
for OS in ${TARGETS_POWERPC}; do
TARGETS="${TARGETS} powerpc-${OS}"
done;
for OS in ${TARGETS_SPARC}; do
TARGETS="${TARGETS} sparc-${OS}"
done;
for OS in ${TARGETS_M68K}; do
TARGETS="${TARGETS} m68k-${OS}"
done;
#
# force slash
#
DESTDIR=${DESTDIR%/}/
WORKDIR=${WORKDIR%/}/
LOGDIR=${LOGDIR%/}/
BINUTILSPATH=${BINUTILSPATH%/}/
BINUTILSARCHIVE=${BINUTILSPATH}${BINUTILSBASE}-${BINUTILSVERSION}
MAKE=make
#
# Make sure they exist
#
mkdir -p $DESTDIR
mkdir -p $WORKDIR
mkdir -p $LOGDIR
#
# BSD? -> gmake
#
SYSTEM=`uname -s`
case "$SYSTEM" in
*BSD*) MAKE=gmake
;;
*bsd*) MAKE=gmake
;;
esac
#
# tar.gz or .tar.bz2 ?
#
if [ $BINUTILS_GZIP = "no" ] ; then
BINUTILSARCHIVE=${BINUTILSARCHIVE}.tar.bz2
else
BINUTILSARCHIVE=${BINUTILSARCHIVE}.tar.gz
fi
#
# depack or clean dir
#
cd ${WORKDIR}
if [ ! -d ${WORKDIR}${BINUTILSBASE}-${BINUTILSVERSION} ]; then
if [ $BINUTILS_GZIP = "no" ]; then
bzip2 -dc $BINUTILSARCHIVE |tar xvf - > ${LOGDIR}log-extract
else
tar xvzf $BINUTILSARCHIVE > ${LOGDIR}log-extract
fi
if [ ! $? = 0 ]; then
echo DECRUNCHING OF ${BINUTILSARCHIVE} failed
exit
fi
else
echo It seams that you already have a build directory. Skipping.
cd ${WORKDIR}${BINUTILSBASE}-${BINUTILSVERSION}
${MAKE} clean >/dev/null
fi
cd ${WORKDIR}${BINUTILSBASE}-${BINUTILSVERSION}
#
# build loop.
#
FAILURES=""
for a in $TARGETS; do
if [ ! -f ${DESTDIR}bin/${a}-as ] ; then
echo Building $a
{ ./configure --disable-nls --disable-shared --target=$a --prefix=${DESTDIR} && ${MAKE} $(EXTRAOPT) && ${MAKE} install && ${MAKE} clean; } > ${LOGDIR}log-${a} 2>&1
if [ ! $? = 0 ]; then
echo $a FAILES!
FAILURES="${FAILURES} ${a}"
fi
fi
done;
echo Failed targets: ${FAILURES}