#!@KSH@ -p # # size_rtems # # This script gathers information related to the size of RTEMS # using the GNU "size" command. # # This script operates by summing up the sizes of the various # object files which constitute a particular configuration of # RTEMS. This size information is gathered for placement in the # brochure flyers and supplement manuals. # # NOTE: The concept of the minimum executive size is buried in this script. # # COPYRIGHT (c) 1989-1999. # On-Line Applications Research Corporation (OAR). # # The license and distribution terms for this file may be # found in the file LICENSE in this distribution or at # http://www.rtems.com/license/LICENSE. target=@target@ program_prefix=@program_prefix@ gnusize=${program_prefix}size # check usage if [ $# -ne 2 ] ; then echo usage ${0}: bsp object_directory exit 1 fi bsp=$1 board=$1 ARCH=$2 cpu=`echo $target | sed -e 's/-.*//'` case $target in sparc-sun-solaris*) rtems_cpu=unix bsp=solaris2 echo Not supported on unix port. exit 0 ;; i[34567]86-pc-linux-gnu) echo linux rtems_cpu=unix bsp=linux1 echo Not supported on unix port. exit 0 ;; i[34567]86-unknown-freebsd2.[12]*) echo freebsd rtems_cpu=unix bsp=freebsd2 echo Not supported on unix port. exit 0 ;; *-rtems*) cpu=`echo $target | sed -e 's/-.*//'` rtems_cpu=$cpu ;; *) echo unknown target $target exit 1 ;; esac case $ARCH in *debug*) VARIANT=debug ;; *profile*) VARIANT=profile ;; *) VARIANT=optimized;; esac echo echo Size Information for the Following Configuration: echo CPU: ${cpu} echo BSP: ${board} echo VARIANT: ${VARIANT} echo # # KLUDGE to figure out at runtime how to echo a line without a # newline. # count=`echo "\\c" | wc -c` if [ ${count} -ne 0 ] ; then EARG="-n" EOL="" else EARG="" EOL="\\c" fi if [ ! -d ../${board} ] ; then echo "${board} does not exist ... is the current directory the build directory?" exit 1 fi #DIRLIST -- so greps for DIRLIST will find this file CPUOBJ=exec/score/cpu/${rtems_cpu}/wrap/${ARCH} COREOBJ=exec/score/src/${ARCH} RTEMSOBJ=exec/rtems/src/${ARCH} SAPIOBJ=exec/sapi/src/${ARCH} OPTOBJ=exec/rtems/optman/${ARCH} # XXX These have been split up MANLIST=" \ ${RTEMSOBJ}/clockget.o \ ${RTEMSOBJ}/clockset.o \ ${RTEMSOBJ}/clocktick.o \ ${RTEMSOBJ}/dpmem.o \ ${RTEMSOBJ}/event.o \ ${RTEMSOBJ}/intr.o \ ${RTEMSOBJ}/msg.o \ ${RTEMSOBJ}/part.o \ ${RTEMSOBJ}/ratemon.o \ ${RTEMSOBJ}/region.o \ ${RTEMSOBJ}/sem.o \ ${RTEMSOBJ}/signal.o \ ${RTEMSOBJ}/tasks.o \ ${RTEMSOBJ}/timer.o \ ${SAPIOBJ}/debug.o \ ${SAPIOBJ}/extension.o \ ${SAPIOBJ}/fatal.o \ ${SAPIOBJ}/exinit.o \ ${SAPIOBJ}/io.o \ ${SAPIOBJ}/rtemsapi.o \ " if [ -r ${RTEMSOBJ}/mp.o ] ; then MPLIST="\ ${RTEMSOBJ}/mp.o ${RTEMSOBJ}/eventmp.o \ ${COREOBJ}/mpci.o ${RTEMSOBJ}/msgmp.o ${COREOBJ}/objectmp.o \ ${RTEMSOBJ}/partmp.o ${RTEMSOBJ}/regionmp.o ${RTEMSOBJ}/semmp.o \ ${RTEMSOBJ}/signalmp.o ${RTEMSOBJ}/taskmp.o ${COREOBJ}/threadmp.o \ " MPOBJLIST=${OPTOBJ}/no-mp.rel fi OPTMANLIST="\ ${OPTOBJ}/no-dpmem.rel \ ${OPTOBJ}/no-event.rel \ ${MPOBJLIST} \ ${OPTOBJ}/no-msg.rel \ ${OPTOBJ}/no-part.rel \ ${OPTOBJ}/no-region.rel \ ${OPTOBJ}/no-rtmon.rel \ ${OPTOBJ}/no-sem.rel \ ${OPTOBJ}/no-signal.rel \ ${OPTOBJ}/no-timer.rel \ " REQMANLIST="\ ${SAPIOBJ}/exinit.o \ ${RTEMSOBJ}/tasks.o \ ${RTEMSOBJ}/intr.o \ ${SAPIOBJ}/fatal.o \ " # XXX parts of these have been split up CORELIST=" \ ${COREOBJ}/apiext.o ${COREOBJ}/chain.o \ ${COREOBJ}/coremsg.o ${COREOBJ}/coremutex.o ${COREOBJ}/coresem.o \ ${COREOBJ}/heap.o ${COREOBJ}/interr.o \ ${COREOBJ}/isr.o \ ${COREOBJ}/object.o \ ${SAPIOBJ}/rtemsapi.o \ ${COREOBJ}/thread.o ${COREOBJ}/threadq.o ${COREOBJ}/tod.o \ ${COREOBJ}/userext.o \ ${COREOBJ}/watchdog.o ${COREOBJ}/wkspace.o \ " CPULIST="\ ${CPUOBJ}/rtems-cpu.rel \ " # check directories for i in ${EXECOBJ} ${CPUOBJ} ${OPTOBJ} do if [ ! -d ${i} ] ; then echo "${i} does not exist ... is RTEMS compiled and installed?" exit 1 fi done for i in ${MANLIST} ${MPLIST} ${OPTMANLIST} ${REQMANLIST} ${CORELIST} ${CPULIST} do if [ ! -r ${i} ] ; then echo ${i} does not exist ... is RTEMS compiled and installed? exit 1 fi done # "rips" a line of gsize's output and prints size, data, bss parse_size() { echo $1 $2 $3 } # prepares a list of code, data, bss sizes for a directory sizedir() { ${gnusize} $* | sed -e '1,1d' | while read line do parse_size ${line} done } # adds the numbers passed on the command line addit() { sumx=0 for x in $* do sumx=`expr $sumx + $x` done echo $sumx } # adds a column from the output of sizedir addsizes() { # dc version is not portable enough -- It can be left out during # installing linux and may not be available on non-UNIX hosts. #cut -d' ' -f${2} ${1} | sed -e '2,$s/$/ + /' -e '$,$s/$/ p/' | dc # This may not be as fast but it is probably more portable. addit `cut -d' ' -f${2} ${1}` } # calculates total size of a directory and prints report line size_files() { trap "rm -f /tmp/size.$$ ; exit 1" 2 3 for file in $* do parse_size `${gnusize} $file | sed -e '/text/d'` done >/tmp/size.$$ code=`cat /tmp/size.$$ | addsizes 1` data=`cat /tmp/size.$$ | addsizes 2` bss=` cat /tmp/size.$$ | addsizes 3` echo "${code} ${data} ${bss}" rm /tmp/size.$$ } echo echo " RTEMS SIZE REPORT" echo echo " CODE DATA BSS" echo " ==================" echo ${EARG} "MANAGERS: " ${EOL} ; size_files $MANLIST $MPLIST echo ${EARG} "CORE : " ${EOL} ; size_files $CORELIST $CPULIST echo ${EARG} "CPU : " ${EOL} ; size_files $CPULIST echo ${EARG} "OVERALL : " ${EOL} ; size_files $CPULIST $CORELIST $MANLIST \ $MPLIST echo ${EARG} "MINIMUM : " ${EOL} ; size_files $CPULIST $CORELIST \ $OPTMANLIST $REQMANLIST echo for file in $MANLIST do base=`basename ${file}` echo ${EARG} ""${base} : " ${EOL} " ; size_files ${file} done echo ${EARG} "MP : " ${EOL} ; size_files $MPLIST echo for file in $OPTMANLIST do base=`basename ${file}` echo ${EARG} "${base} : " ${EOL} ; size_files ${file} done echo exit 0