xref: /aosp_15_r20/external/mbedtls/scripts/footprint.sh (revision 62c56f9862f102b96d72393aff6076c951fb8148)
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