mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-02 02:46:20 +02:00
176 lines
3.1 KiB
Bash
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}
|