mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-11-16 12:34:45 +00:00
* buildalltar.in, setup.def: Tool update including binaries for Cygwin with a special RTEMS user account.
349 lines
8.5 KiB
Bash
349 lines
8.5 KiB
Bash
#! /bin/sh
|
|
#
|
|
# Generate all the specs and then cycle through building them.
|
|
#
|
|
|
|
RTEMS_DIR=`dirname $0`
|
|
CFG=./setup.cache
|
|
#dst=/usr/src/redhat/SPECS
|
|
dst=`pwd`
|
|
target=@target@
|
|
rpm_cpu=i386
|
|
|
|
usage()
|
|
{
|
|
echo "$0 [options] <target_alias>"
|
|
echo " options:"
|
|
echo " -b -- build binutils"
|
|
echo " -g -- build gcc/newlib"
|
|
echo " -d -- build gdb"
|
|
echo " -C HOST -- build canadian cross for HOST "
|
|
echo " -t -- enable test/debug mode"
|
|
echo " -cfg <setup.cache>"
|
|
echo " -o <rpm-spec-dir>"
|
|
exit 1 ;
|
|
}
|
|
|
|
#
|
|
# Checks the status returned by executables and exits if it is non-zero.
|
|
#
|
|
check_fatal()
|
|
{
|
|
if [ $1 -ne 0 ] ; then
|
|
shift
|
|
echo "ERROR: $*" >&2
|
|
exit 1
|
|
fi
|
|
#echo
|
|
#echo "End of $*"
|
|
#echo -n "Press return to continue> "
|
|
#echo
|
|
#read line
|
|
}
|
|
|
|
testing=no
|
|
do_binutils=no
|
|
do_gccnewlib=no
|
|
do_gdb=no
|
|
cdn_cross=no
|
|
|
|
while test $# -ge 1; do
|
|
case $1 in
|
|
-b) do_binutils=yes ; shift;;
|
|
-g) do_gccnewlib=yes ; shift;;
|
|
-d) do_gdb=yes ; shift;;
|
|
-t) do_test=yes ; shift;;
|
|
-cfg)
|
|
test $# -ge 2 || usage
|
|
shift
|
|
CFG=$1
|
|
shift
|
|
;;
|
|
-o)
|
|
test $# -ge 2 || usage
|
|
shift
|
|
dst=$1
|
|
shift
|
|
;;
|
|
-C)
|
|
test $# -ge 2 || usage
|
|
shift
|
|
build=$1
|
|
shift
|
|
if ! test -x ${RTEMS_DIR}/../config.guess ; then
|
|
echo "Missing ${RTEMS_DIR}/../config.guess!"
|
|
exit 1
|
|
fi
|
|
CDN_ARGS="--build=`${RTEMS_DIR}/../config.guess` --host=${build}"
|
|
cdn_cross=yes
|
|
;;
|
|
-*)
|
|
echo "invalid option $1";
|
|
usage
|
|
;;
|
|
*)
|
|
TARGETS="${TARGETS} $1"
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if test ${do_binutils} = no -a ${do_gccnewlib} = no -a ${do_gdb} = no ; then
|
|
echo "You must request building binutils, gcc/newlib, or gdb."
|
|
usage
|
|
fi
|
|
|
|
|
|
# This is the full list .. hppa1.1 does not build now.
|
|
#ALL_TARGETS="arm-rtems h8300-rtems hppa1.1-rtems i386-rtems i960-rtems \
|
|
# m68k-rtems mips64orion-rtems mips-rtems or32-rtems powerpc-rtems \
|
|
# sh-rtems sh-rtemself sparc-rtems"
|
|
|
|
# This is the full buildable set.
|
|
if [ "X${TARGETS}" = "X" ] ; then
|
|
# do not include c4x or hppa primary targets
|
|
# do not include sh-elf or i960-elf secondary targets
|
|
TARGETS="arm-rtems h8300-rtems hppa1.1-rtems i386-rtems \
|
|
m68k-rtems mips64orion-rtems mips-rtems powerpc-rtems \
|
|
sh-rtems sh-rtemself sparc-rtems"
|
|
fi
|
|
|
|
. $CFG
|
|
|
|
# override the one from $CFG since it likely has a % in it to use the
|
|
# .rpmrc setting which we can't use
|
|
rpm_build_root=${HOME}/tmp
|
|
|
|
binutils=${binutils_version}
|
|
gcc=${gcc3_version}
|
|
gdb=${gdb_version}
|
|
newlib=${gcc3newlib_version}
|
|
# also use binutils_rpm_release
|
|
|
|
#
|
|
# Now get started
|
|
#
|
|
start=`date`
|
|
|
|
echo PATH=$PATH
|
|
|
|
if [ ${testing} = yes ] ; then
|
|
ECHO=echo
|
|
fi
|
|
|
|
#installed_count=`rpm -q -g rtems | wc -l`
|
|
#if [ ${installed_count} -ne 0 ] ; then
|
|
# echo This script should be run with NO rtems RPMs installed.
|
|
# echo It appears that the following rtems RPMs are installed:
|
|
# echo
|
|
# rpm -qa | grep rtems
|
|
# echo
|
|
# echo Please remove these and restart this script.
|
|
# exit 1
|
|
#fi
|
|
|
|
#echo Copying specs files.
|
|
#if [ ${testing} = no ] ; then
|
|
# cd ${RTEMS_DIR}
|
|
#
|
|
# # ./configure || exit 1
|
|
# make || exit 1
|
|
#
|
|
# # Now generate all the specs
|
|
# for target in ${TARGETS}
|
|
# do
|
|
# tspecs=`find . -name "${target}*"`
|
|
# if [ "X${tspecs}" = "X" ] ; then
|
|
# echo RPM specifications were not generated for ${tspec}.
|
|
# exit 1
|
|
# fi
|
|
# ${ECHO} cp -r ${tspecs} ${dst}
|
|
# done
|
|
#fi
|
|
|
|
# clean up a bit before we start
|
|
cd ${dst}
|
|
test -d log || mkdir log
|
|
|
|
if [ "X${rpm_build_root}" = "X" ] ; then
|
|
echo rpm_build_root NOT set!
|
|
exit 1
|
|
fi
|
|
|
|
CWD=`pwd`
|
|
test -d tarballs || mkdir tarballs
|
|
|
|
OUT=${CWD}/tarballs
|
|
|
|
# do all the tools
|
|
for target in ${TARGETS}
|
|
do
|
|
bintarfile=${OUT}/${target}-binutils-${binutils}-${binutils_rpm_release}.tar
|
|
if [ ${do_binutils} = yes ] ; then
|
|
logfile=${CWD}/log/${target}-binutils
|
|
# this part is for tar.bz2
|
|
cd ${CWD}
|
|
if [ ! -d binutils-${binutils} ] ; then
|
|
echo Could not find binutils-${binutils}!
|
|
exit 1
|
|
fi
|
|
rm -rf b-${target}-bin
|
|
mkdir b-${target}-bin
|
|
cd b-${target}-bin
|
|
echo "Building binutils-${binutils} for ${target}"
|
|
../binutils-${binutils}/configure ${CDN_ARGS} --target=${target} \
|
|
--verbose --prefix=/opt/rtems >${logfile} 2>&1
|
|
check_fatal $? "binutils configure"
|
|
|
|
make all >>${logfile} 2>&1
|
|
check_fatal $? "make all"
|
|
|
|
make info >>${logfile} 2>&1
|
|
check_fatal $? "make info"
|
|
|
|
make prefix=${rpm_build_root}/opt/rtems install >>${logfile} 2>&1
|
|
check_fatal $? "make install"
|
|
|
|
make prefix=${rpm_build_root}/opt/rtems install-info >>${logfile} 2>&1
|
|
check_fatal $? "make install-info"
|
|
|
|
cd ${rpm_build_root}
|
|
tar cjf ${bintarfile}.bz2 opt
|
|
cd ${CWD}
|
|
rm -rf b-${target}-bin
|
|
${ECHO} rm -rf ${rpm_build_root}/opt
|
|
rm -rf ${rpm_build_root}/opt
|
|
else
|
|
echo Skipping binutils for ${target}
|
|
fi
|
|
|
|
#
|
|
# build gcc/newlib
|
|
#
|
|
|
|
if [ ${do_gccnewlib} = yes ] ; then
|
|
logfile=${CWD}/log/${target}-gccnewlib
|
|
# now build gcc/newlib
|
|
# this part is for tar.bz2
|
|
|
|
gcctarfile=${OUT}/${target}-gcc-${gcc}-newlib-${newlib}-${gccnewlib_rpm_release}.tar
|
|
if [ ${cdn_cross} = "no" ] ; then
|
|
bintarfile=${dst}/binaries/binutils-${binutils}-${binutils_rpm_release}/${target}-binutils-${binutils}-${binutils_rpm_release}.tar
|
|
rm -rf ${rpm_build_root}/opt/*
|
|
tar xjf ${bintarfile}.bz2
|
|
fi
|
|
|
|
cd ${CWD}
|
|
if [ ! -d gcc-${gcc} ] ; then
|
|
echo Could not find gcc-${gcc}!
|
|
exit 1
|
|
fi
|
|
if [ ! -d gcc-${gcc}/newlib ] ; then
|
|
echo Could not find gcc-${gcc}/newlib!
|
|
exit 1
|
|
fi
|
|
rm -rf b-${target}-gccnewlib
|
|
mkdir b-${target}-gccnewlib
|
|
cd b-${target}-gccnewlib
|
|
echo "Building gcc-${gcc} for ${target}"
|
|
../gcc-${gcc}/configure ${CDN_ARGS} --target=${target} \
|
|
--with-gnu-as --with-gnu-ld --with-newlib --verbose \
|
|
--with-system-zlib --disable-nls \
|
|
--enable-version-specific-runtime-libs \
|
|
--enable-threads=rtems \
|
|
--prefix=/opt/rtems '--enable-languages=c,c++' >${logfile} 2>&1
|
|
check_fatal $? "gcc configure"
|
|
|
|
make all >>${logfile} 2>&1
|
|
check_fatal $? "make all"
|
|
|
|
make info >>${logfile} 2>&1
|
|
check_fatal $? "make info"
|
|
|
|
make prefix=${rpm_build_root}/opt/rtems install >>${logfile} 2>&1
|
|
check_fatal $? "make install"
|
|
|
|
cd ${target}/newlib
|
|
make prefix=${rpm_build_root}/opt/rtems install-info >>${logfile} 2>&1
|
|
check_fatal $? "newlib make install-info"
|
|
|
|
cd ${rpm_build_root}
|
|
tar cjf ${gcctarfile}.bz2 opt
|
|
cd ${CWD}
|
|
rm -rf ${rpm_build_root}/opt
|
|
rm -rf ${rpm_build_root}/opt/rtems
|
|
rm -rf b-${target}-gccnewlib
|
|
else
|
|
echo Skipping gcc/newlib for ${target}
|
|
fi
|
|
|
|
#
|
|
# build gdb
|
|
#
|
|
|
|
if [ ${do_gdb} = yes ] ; then
|
|
# now build gdb
|
|
gdbtarfile=${OUT}/${target}-gdb-${gdb}-${gdb_rpm_release}.tar
|
|
logfile=${CWD}/log/${target}-gdb
|
|
|
|
# this part is for tar.bz2
|
|
|
|
if [ ! -d gdb-${gdb} ] ; then
|
|
echo Could not find gdb-${gdb}!
|
|
exit 1
|
|
fi
|
|
mkdir b-${target}-gdb
|
|
cd b-${target}-gdb
|
|
case ${target} in
|
|
arm* | d10v* | d30v* | erc32* | fr30* | h8300* | h8500* | i960* | \
|
|
m32r* | mcore* | mips* | mn10200* | mn10300* | sh* | sparc*| v850* | \
|
|
w65* | z8k*)
|
|
extra_configure_arguments="--enable-sim"
|
|
;;
|
|
powerpc*)
|
|
extra_configure_arguments="--enable-sim --enable-sim-powerpc --enable-sim-timebase --enable-sim-hardware"
|
|
# Enabling this causes the program image to be huge and causes
|
|
# some gcc/hosts combinations to run out of memory.
|
|
# --enable-sim-inline
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
echo "Building gdb-${gdb}/configure ${CDN_ARGS} --target=${target}"
|
|
../gdb-${gdb}/configure ${CDN_ARGS} --target=${target} \
|
|
${extra_configure_arguments} --verbose --prefix=/opt/rtems >${logfile} 2>&1
|
|
check_fatal $? "make info"
|
|
|
|
make all >>${logfile} 2>&1
|
|
check_fatal $? "make all"
|
|
|
|
make info >>${logfile} 2>&1
|
|
check_fatal $? "make info"
|
|
|
|
make prefix=${rpm_build_root}/opt/rtems install >>${logfile} 2>&1
|
|
check_fatal $? "make install"
|
|
|
|
make prefix=${rpm_build_root}/opt/rtems install-info >>${logfile} 2>&1
|
|
check_fatal $? "make install-info"
|
|
|
|
cd ${rpm_build_root}
|
|
tar cjf ${gdbtarfile}.bz2 opt
|
|
cd ${CWD}
|
|
${ECHO} rm -rf ${rpm_build_root}/opt
|
|
rm -rf ${rpm_build_root}/opt/rtems
|
|
rm -rf b-${target}-gdb
|
|
else
|
|
echo Skipping gdb for ${target}
|
|
fi
|
|
|
|
done
|
|
|
|
# Now we are done
|
|
|
|
stop=`date`
|
|
|
|
echo
|
|
echo "Started: " $start
|
|
echo "Finished: " $stop
|
|
exit 0
|