mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2024-12-25 02:15:35 +00:00
124 lines
3.4 KiB
Bash
Executable file
124 lines
3.4 KiB
Bash
Executable file
#!/bin/sh
|
|
# generate_codesize_stats.sh
|
|
#
|
|
# This file is part of mbed TLS (https://tls.mbed.org)
|
|
#
|
|
# Copyright (c) 2019, ARM Limited, All Rights Reserved
|
|
#
|
|
# Purpose
|
|
#
|
|
# Generate static memory usage statistics for an Mbed TLS build.
|
|
#
|
|
|
|
set -eu
|
|
|
|
if [ -d include/mbedtls ]; then :; else
|
|
echo "$0: must be run from root" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if grep -i cmake Makefile >/dev/null; then
|
|
echo "$0: not compatible with cmake" >&2
|
|
exit 1
|
|
fi
|
|
|
|
BUILD_DIR="./library"
|
|
|
|
LIBFILES=$( ls $BUILD_DIR/*.a )
|
|
OBJFILES=$( ls $BUILD_DIR/*.o )
|
|
|
|
SUMMARY_ONLY=0
|
|
LIMIT=9999
|
|
|
|
print_usage() {
|
|
echo "\nExtract static memory usage statistics for an Mbed TLS build.\n"
|
|
echo "Usage: $0 [options]"
|
|
echo " --files\tGenerate per-file code-size statistics."
|
|
echo " --syms\tGenerate per-symbol code-size statistics."
|
|
echo " -l|--limit num\tPrint only the largest 'num' symbols of the given type. (Default: $LIMIT) "
|
|
echo " -h|--help\tPrint this help."
|
|
echo " -d|--dir=BUILD_DIR\tThe build directory containing the 'library' folder (default: ${BUILD_DIR})"
|
|
}
|
|
|
|
get_options() {
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
-d|--dir)
|
|
shift; BUILD_DIR=$1
|
|
;;
|
|
-h|--help)
|
|
print_usage
|
|
exit 0
|
|
;;
|
|
--files)
|
|
FILE_STATS=1
|
|
;;
|
|
--syms)
|
|
SYM_STATS=1
|
|
;;
|
|
-l|--limit)
|
|
shift; LIMIT=$1
|
|
;;
|
|
-n|--name)
|
|
shift; name=$1
|
|
;;
|
|
-i|--info)
|
|
shift; info=$1
|
|
;;
|
|
*)
|
|
echo "Unknown argument: $1"
|
|
print_usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
}
|
|
|
|
FILE_STATS=0
|
|
SYM_STATS=0
|
|
name="unnamed"
|
|
info="noinfo"
|
|
get_options "$@"
|
|
|
|
date=$( date +%Y-%m-%d-%H-%M-%S )
|
|
|
|
report_syms() {
|
|
file=$(basename $1)
|
|
type=$2
|
|
stat=$(nm --line-numbers --radix=d --size-sort --reverse $1 |
|
|
grep " [$3] " |
|
|
sort --reverse |
|
|
head -n $LIMIT |
|
|
awk -v type="$type" -v info="$info" -v name="$name" -v date="$date" -v file="$file" \
|
|
'{ printf( "%10s %42s %12s %20s %8s %6d %s\n", date, name, info, file, type, $1, $3 ); }')
|
|
if [ -n "$stat" ]; then
|
|
echo "$stat"
|
|
fi
|
|
}
|
|
|
|
# Report static memory usage (RAM and ROM)
|
|
if [ $FILE_STATS -eq 1 ]; then
|
|
for file_full in $LIBFILES; do
|
|
file=$(basename $file_full)
|
|
size --radix=10 $file_full |
|
|
sort -s -n -k 1,1 |
|
|
tail -n +2 |
|
|
sed -n '/^[ ]*0/!p' |
|
|
awk -v info="$info" -v name="$name" -v date="$date" '{ printf( "%10s %42s %12s %20s %6d %6d %6d\n", date, name, info, $6, $1, $2, $3 ); }' |
|
|
awk -v info="$info" -v name="$name" -v date="$date" -v file="$file" '{print $0; sum_text += $5; sum_data += $6; sum_bss += $7}
|
|
END { printf( "%10s %42s %12s %20s %6d %6d %6d\n\n", date, name, info, file, sum_text, sum_data, sum_bss ); }'
|
|
done
|
|
fi
|
|
|
|
if [ $SYM_STATS -eq 1 ]; then
|
|
SYMTYPES="CODE-tT DATA-dD RODATA-rR BSS-bB"
|
|
for symtype in $SYMTYPES; do
|
|
type=${symtype%*-*}
|
|
specifier=${symtype#*-*}
|
|
for file_full in $OBJFILES; do
|
|
report_syms "$file_full" $type $specifier
|
|
done
|
|
done
|
|
fi
|