Add scripts to build, test and measure baremetal configuration
diff --git a/scripts/generate_codesize_stats.sh b/scripts/generate_codesize_stats.sh
new file mode 100755
index 0000000..33d1c7b
--- /dev/null
+++ b/scripts/generate_codesize_stats.sh
@@ -0,0 +1,123 @@
+#!/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