1*62c56f98SSadaf Ebrahimi#!/bin/sh 2*62c56f98SSadaf Ebrahimi# 3*62c56f98SSadaf Ebrahimi# Copyright The Mbed TLS Contributors 4*62c56f98SSadaf Ebrahimi# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 5*62c56f98SSadaf Ebrahimi# 6*62c56f98SSadaf Ebrahimi# Purpose 7*62c56f98SSadaf Ebrahimi# 8*62c56f98SSadaf Ebrahimi# This script determines ROM size (or code size) for the standard Mbed TLS 9*62c56f98SSadaf Ebrahimi# configurations, when built for a Cortex M3/M4 target. 10*62c56f98SSadaf Ebrahimi# 11*62c56f98SSadaf Ebrahimi# Configurations included: 12*62c56f98SSadaf Ebrahimi# default include/mbedtls/mbedtls_config.h 13*62c56f98SSadaf Ebrahimi# thread configs/config-thread.h 14*62c56f98SSadaf Ebrahimi# suite-b configs/config-suite-b.h 15*62c56f98SSadaf Ebrahimi# psk configs/config-ccm-psk-tls1_2.h 16*62c56f98SSadaf Ebrahimi# 17*62c56f98SSadaf Ebrahimi# Usage: footprint.sh 18*62c56f98SSadaf Ebrahimi# 19*62c56f98SSadaf Ebrahimiset -eu 20*62c56f98SSadaf Ebrahimi 21*62c56f98SSadaf EbrahimiCONFIG_H='include/mbedtls/mbedtls_config.h' 22*62c56f98SSadaf Ebrahimi 23*62c56f98SSadaf Ebrahimiif [ -r $CONFIG_H ]; then :; else 24*62c56f98SSadaf Ebrahimi echo "$CONFIG_H not found" >&2 25*62c56f98SSadaf Ebrahimi echo "This script needs to be run from the root of" >&2 26*62c56f98SSadaf Ebrahimi echo "a git checkout or uncompressed tarball" >&2 27*62c56f98SSadaf Ebrahimi exit 1 28*62c56f98SSadaf Ebrahimifi 29*62c56f98SSadaf Ebrahimi 30*62c56f98SSadaf Ebrahimiif grep -i cmake Makefile >/dev/null; then 31*62c56f98SSadaf Ebrahimi echo "Not compatible with CMake" >&2 32*62c56f98SSadaf Ebrahimi exit 1 33*62c56f98SSadaf Ebrahimifi 34*62c56f98SSadaf Ebrahimi 35*62c56f98SSadaf Ebrahimiif which arm-none-eabi-gcc >/dev/null 2>&1; then :; else 36*62c56f98SSadaf Ebrahimi echo "You need the ARM-GCC toolchain in your path" >&2 37*62c56f98SSadaf Ebrahimi echo "See https://launchpad.net/gcc-arm-embedded/" >&2 38*62c56f98SSadaf Ebrahimi exit 1 39*62c56f98SSadaf Ebrahimifi 40*62c56f98SSadaf Ebrahimi 41*62c56f98SSadaf EbrahimiARMGCC_FLAGS='-Os -march=armv7-m -mthumb' 42*62c56f98SSadaf EbrahimiOUTFILE='00-footprint-summary.txt' 43*62c56f98SSadaf Ebrahimi 44*62c56f98SSadaf Ebrahimilog() 45*62c56f98SSadaf Ebrahimi{ 46*62c56f98SSadaf Ebrahimi echo "$@" 47*62c56f98SSadaf Ebrahimi echo "$@" >> "$OUTFILE" 48*62c56f98SSadaf Ebrahimi} 49*62c56f98SSadaf Ebrahimi 50*62c56f98SSadaf Ebrahimidoit() 51*62c56f98SSadaf Ebrahimi{ 52*62c56f98SSadaf Ebrahimi NAME="$1" 53*62c56f98SSadaf Ebrahimi FILE="$2" 54*62c56f98SSadaf Ebrahimi 55*62c56f98SSadaf Ebrahimi log "" 56*62c56f98SSadaf Ebrahimi log "$NAME ($FILE):" 57*62c56f98SSadaf Ebrahimi 58*62c56f98SSadaf Ebrahimi cp $CONFIG_H ${CONFIG_H}.bak 59*62c56f98SSadaf Ebrahimi if [ "$FILE" != $CONFIG_H ]; then 60*62c56f98SSadaf Ebrahimi cp "$FILE" $CONFIG_H 61*62c56f98SSadaf Ebrahimi fi 62*62c56f98SSadaf Ebrahimi 63*62c56f98SSadaf Ebrahimi { 64*62c56f98SSadaf Ebrahimi scripts/config.py unset MBEDTLS_NET_C || true 65*62c56f98SSadaf Ebrahimi scripts/config.py unset MBEDTLS_TIMING_C || true 66*62c56f98SSadaf Ebrahimi scripts/config.py unset MBEDTLS_FS_IO || true 67*62c56f98SSadaf Ebrahimi scripts/config.py --force set MBEDTLS_NO_PLATFORM_ENTROPY || true 68*62c56f98SSadaf Ebrahimi } >/dev/null 2>&1 69*62c56f98SSadaf Ebrahimi 70*62c56f98SSadaf Ebrahimi make clean >/dev/null 71*62c56f98SSadaf Ebrahimi CC=arm-none-eabi-gcc AR=arm-none-eabi-ar LD=arm-none-eabi-ld \ 72*62c56f98SSadaf Ebrahimi CFLAGS="$ARMGCC_FLAGS" make lib >/dev/null 73*62c56f98SSadaf Ebrahimi 74*62c56f98SSadaf Ebrahimi OUT="size-${NAME}.txt" 75*62c56f98SSadaf Ebrahimi arm-none-eabi-size -t library/libmbed*.a > "$OUT" 76*62c56f98SSadaf Ebrahimi log "$( head -n1 "$OUT" )" 77*62c56f98SSadaf Ebrahimi log "$( tail -n1 "$OUT" )" 78*62c56f98SSadaf Ebrahimi 79*62c56f98SSadaf Ebrahimi cp ${CONFIG_H}.bak $CONFIG_H 80*62c56f98SSadaf Ebrahimi} 81*62c56f98SSadaf Ebrahimi 82*62c56f98SSadaf Ebrahimi# truncate the file just this time 83*62c56f98SSadaf Ebrahimiecho "(generated by $0)" > "$OUTFILE" 84*62c56f98SSadaf Ebrahimiecho "" >> "$OUTFILE" 85*62c56f98SSadaf Ebrahimi 86*62c56f98SSadaf Ebrahimilog "Footprint of standard configurations (minus net_sockets.c, timing.c, fs_io)" 87*62c56f98SSadaf Ebrahimilog "for bare-metal ARM Cortex-M3/M4 microcontrollers." 88*62c56f98SSadaf Ebrahimi 89*62c56f98SSadaf EbrahimiVERSION_H="include/mbedtls/version.h" 90*62c56f98SSadaf EbrahimiMBEDTLS_VERSION=$( sed -n 's/.*VERSION_STRING *"\(.*\)"/\1/p' $VERSION_H ) 91*62c56f98SSadaf Ebrahimiif git rev-parse HEAD >/dev/null; then 92*62c56f98SSadaf Ebrahimi GIT_HEAD=$( git rev-parse HEAD | head -c 10 ) 93*62c56f98SSadaf Ebrahimi GIT_VERSION=" (git head: $GIT_HEAD)" 94*62c56f98SSadaf Ebrahimielse 95*62c56f98SSadaf Ebrahimi GIT_VERSION="" 96*62c56f98SSadaf Ebrahimifi 97*62c56f98SSadaf Ebrahimi 98*62c56f98SSadaf Ebrahimilog "" 99*62c56f98SSadaf Ebrahimilog "Mbed TLS $MBEDTLS_VERSION$GIT_VERSION" 100*62c56f98SSadaf Ebrahimilog "$( arm-none-eabi-gcc --version | head -n1 )" 101*62c56f98SSadaf Ebrahimilog "CFLAGS=$ARMGCC_FLAGS" 102*62c56f98SSadaf Ebrahimi 103*62c56f98SSadaf Ebrahimidoit default include/mbedtls/mbedtls_config.h 104*62c56f98SSadaf Ebrahimidoit thread configs/config-thread.h 105*62c56f98SSadaf Ebrahimidoit suite-b configs/config-suite-b.h 106*62c56f98SSadaf Ebrahimidoit psk configs/config-ccm-psk-tls1_2.h 107*62c56f98SSadaf Ebrahimi 108*62c56f98SSadaf Ebrahimizip mbedtls-footprint.zip "$OUTFILE" size-*.txt >/dev/null 109