blob: 4d7be7a27cf6f4eb31525f4e6c951588f92dbc35 [file] [log] [blame]
Manuel Pégourié-Gonnardac8673c2015-10-16 13:03:04 +02001#!/bin/sh
SimonBba9dd1e2016-04-03 15:06:52 +01002#
Bence Szépkúti1e148272020-08-07 13:07:28 +02003# Copyright The Mbed TLS Contributors
Bence Szépkútic7da1fe2020-05-26 01:54:15 +02004# SPDX-License-Identifier: Apache-2.0
5#
6# Licensed under the Apache License, Version 2.0 (the "License"); you may
7# not use this file except in compliance with the License.
8# You may obtain a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15# See the License for the specific language governing permissions and
16# limitations under the License.
17#
SimonBba9dd1e2016-04-03 15:06:52 +010018# Purpose
19#
20# This script determines ROM size (or code size) for the standard mbed TLS
21# configurations, when built for a Cortex M3/M4 target.
22#
23# Configurations included:
24# default include/mbedtls/config.h
SimonBba9dd1e2016-04-03 15:06:52 +010025# thread configs/config-thread.h
26# suite-b configs/config-suite-b.h
27# psk configs/config-ccm-psk-tls1_2.h
28#
29# Usage: footprint.sh
30#
Manuel Pégourié-Gonnardac8673c2015-10-16 13:03:04 +020031set -eu
32
33CONFIG_H='include/mbedtls/config.h'
34
35if [ -r $CONFIG_H ]; then :; else
36 echo "$CONFIG_H not found" >&2
Manuel Pégourié-Gonnard4553a6c2015-11-25 10:39:00 +000037 echo "This script needs to be run from the root of" >&2
38 echo "a git checkout or uncompressed tarball" >&2
Manuel Pégourié-Gonnardac8673c2015-10-16 13:03:04 +020039 exit 1
40fi
41
42if grep -i cmake Makefile >/dev/null; then
43 echo "Not compatible with CMake" >&2
44 exit 1
45fi
46
Manuel Pégourié-Gonnard4553a6c2015-11-25 10:39:00 +000047if which arm-none-eabi-gcc >/dev/null 2>&1; then :; else
48 echo "You need the ARM-GCC toolchain in your path" >&2
49 echo "See https://launchpad.net/gcc-arm-embedded/" >&2
50 exit 1
51fi
52
53ARMGCC_FLAGS='-Os -march=armv7-m -mthumb'
54OUTFILE='00-footprint-summary.txt'
55
56log()
57{
58 echo "$@"
59 echo "$@" >> "$OUTFILE"
60}
61
Manuel Pégourié-Gonnardac8673c2015-10-16 13:03:04 +020062doit()
63{
64 NAME="$1"
65 FILE="$2"
66
Manuel Pégourié-Gonnard4553a6c2015-11-25 10:39:00 +000067 log ""
68 log "$NAME ($FILE):"
Manuel Pégourié-Gonnardac8673c2015-10-16 13:03:04 +020069
70 cp $CONFIG_H ${CONFIG_H}.bak
Manuel Pégourié-Gonnard4553a6c2015-11-25 10:39:00 +000071 if [ "$FILE" != $CONFIG_H ]; then
72 cp "$FILE" $CONFIG_H
73 fi
Manuel Pégourié-Gonnardac8673c2015-10-16 13:03:04 +020074
75 {
Gilles Peskine5d46f6a2019-07-27 23:52:53 +020076 scripts/config.py unset MBEDTLS_NET_C || true
77 scripts/config.py unset MBEDTLS_TIMING_C || true
78 scripts/config.py unset MBEDTLS_FS_IO || true
79 scripts/config.py --force set MBEDTLS_NO_PLATFORM_ENTROPY || true
Manuel Pégourié-Gonnardac8673c2015-10-16 13:03:04 +020080 } >/dev/null 2>&1
81
Andres Amaya Garcia9a5398f2016-09-06 17:15:54 +010082 make clean >/dev/null
Manuel Pégourié-Gonnardac8673c2015-10-16 13:03:04 +020083 CC=arm-none-eabi-gcc AR=arm-none-eabi-ar LD=arm-none-eabi-ld \
Andres Amaya Garcia9a5398f2016-09-06 17:15:54 +010084 CFLAGS="$ARMGCC_FLAGS" make lib >/dev/null
Manuel Pégourié-Gonnardac8673c2015-10-16 13:03:04 +020085
86 OUT="size-${NAME}.txt"
87 arm-none-eabi-size -t library/libmbed*.a > "$OUT"
Manuel Pégourié-Gonnard4553a6c2015-11-25 10:39:00 +000088 log "$( head -n1 "$OUT" )"
89 log "$( tail -n1 "$OUT" )"
Manuel Pégourié-Gonnardac8673c2015-10-16 13:03:04 +020090
91 cp ${CONFIG_H}.bak $CONFIG_H
92}
93
Manuel Pégourié-Gonnard4553a6c2015-11-25 10:39:00 +000094# truncate the file just this time
95echo "(generated by $0)" > "$OUTFILE"
96echo "" >> "$OUTFILE"
97
Andres AG788aa4a2016-09-14 14:32:09 +010098log "Footprint of standard configurations (minus net_sockets.c, timing.c, fs_io)"
Manuel Pégourié-Gonnard4553a6c2015-11-25 10:39:00 +000099log "for bare-metal ARM Cortex-M3/M4 microcontrollers."
100
101VERSION_H="include/mbedtls/version.h"
102MBEDTLS_VERSION=$( sed -n 's/.*VERSION_STRING *"\(.*\)"/\1/p' $VERSION_H )
103if git rev-parse HEAD >/dev/null; then
104 GIT_HEAD=$( git rev-parse HEAD | head -c 10 )
Manuel Pégourié-Gonnard3134ef02015-11-25 10:50:27 +0000105 GIT_VERSION=" (git head: $GIT_HEAD)"
Manuel Pégourié-Gonnard4553a6c2015-11-25 10:39:00 +0000106else
107 GIT_VERSION=""
108fi
109
110log ""
111log "mbed TLS $MBEDTLS_VERSION$GIT_VERSION"
112log "$( arm-none-eabi-gcc --version | head -n1 )"
113log "CFLAGS=$ARMGCC_FLAGS"
114
Manuel Pégourié-Gonnard4553a6c2015-11-25 10:39:00 +0000115doit default include/mbedtls/config.h
Manuel Pégourié-Gonnardac8673c2015-10-16 13:03:04 +0200116doit thread configs/config-thread.h
Manuel Pégourié-Gonnard4553a6c2015-11-25 10:39:00 +0000117doit suite-b configs/config-suite-b.h
Manuel Pégourié-Gonnardac8673c2015-10-16 13:03:04 +0200118doit psk configs/config-ccm-psk-tls1_2.h
Manuel Pégourié-Gonnard4553a6c2015-11-25 10:39:00 +0000119
120zip mbedtls-footprint.zip "$OUTFILE" size-*.txt >/dev/null