#! /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] " 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 " echo " -o " 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="hppa1.1-rtems i386-rtems i960-rtems m68k-rtems \ # m68k-rtemself mips-rtems mips64orion-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 i386-rtems i960-rtems m68k-rtems \ mips-rtems mips64orion-rtems powerpc-rtems sh-rtems sparc-rtems" fi . $CFG binutils=${binutils_version} gcc=${gcc_version} gdb=${gdb_version} newlib=${newlib_version} # also use binutils_rpm_release buildroot=/tmp # # 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 ${buildroot} 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 cd / rm -rf /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 --enable-threads \ --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 ${buildroot} 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 ${buildroot} 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