xref: /aosp_15_r20/external/openthread/script/check-size (revision cfb92d1480a9e65faed56933e9c12405f45898b4)
1*cfb92d14SAndroid Build Coastguard Worker#!/bin/bash
2*cfb92d14SAndroid Build Coastguard Worker#
3*cfb92d14SAndroid Build Coastguard Worker#  Copyright (c) 2019, The OpenThread Authors.
4*cfb92d14SAndroid Build Coastguard Worker#  All rights reserved.
5*cfb92d14SAndroid Build Coastguard Worker#
6*cfb92d14SAndroid Build Coastguard Worker#  Redistribution and use in source and binary forms, with or without
7*cfb92d14SAndroid Build Coastguard Worker#  modification, are permitted provided that the following conditions are met:
8*cfb92d14SAndroid Build Coastguard Worker#  1. Redistributions of source code must retain the above copyright
9*cfb92d14SAndroid Build Coastguard Worker#     notice, this list of conditions and the following disclaimer.
10*cfb92d14SAndroid Build Coastguard Worker#  2. Redistributions in binary form must reproduce the above copyright
11*cfb92d14SAndroid Build Coastguard Worker#     notice, this list of conditions and the following disclaimer in the
12*cfb92d14SAndroid Build Coastguard Worker#     documentation and/or other materials provided with the distribution.
13*cfb92d14SAndroid Build Coastguard Worker#  3. Neither the name of the copyright holder nor the
14*cfb92d14SAndroid Build Coastguard Worker#     names of its contributors may be used to endorse or promote products
15*cfb92d14SAndroid Build Coastguard Worker#     derived from this software without specific prior written permission.
16*cfb92d14SAndroid Build Coastguard Worker#
17*cfb92d14SAndroid Build Coastguard Worker#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18*cfb92d14SAndroid Build Coastguard Worker#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19*cfb92d14SAndroid Build Coastguard Worker#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20*cfb92d14SAndroid Build Coastguard Worker#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21*cfb92d14SAndroid Build Coastguard Worker#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22*cfb92d14SAndroid Build Coastguard Worker#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23*cfb92d14SAndroid Build Coastguard Worker#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24*cfb92d14SAndroid Build Coastguard Worker#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25*cfb92d14SAndroid Build Coastguard Worker#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26*cfb92d14SAndroid Build Coastguard Worker#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27*cfb92d14SAndroid Build Coastguard Worker#  POSSIBILITY OF SUCH DAMAGE.
28*cfb92d14SAndroid Build Coastguard Worker#
29*cfb92d14SAndroid Build Coastguard Worker
30*cfb92d14SAndroid Build Coastguard Workerset -euo pipefail
31*cfb92d14SAndroid Build Coastguard Worker
32*cfb92d14SAndroid Build Coastguard WorkerOT_TMP_DIR=/tmp/ot-size-report
33*cfb92d14SAndroid Build Coastguard Workerreadonly OT_TMP_DIR
34*cfb92d14SAndroid Build Coastguard Worker
35*cfb92d14SAndroid Build Coastguard WorkerOT_SHA_NEW=${GITHUB_SHA:-$(git rev-parse HEAD)}
36*cfb92d14SAndroid Build Coastguard Workerreadonly OT_SHA_NEW
37*cfb92d14SAndroid Build Coastguard Worker
38*cfb92d14SAndroid Build Coastguard WorkerOT_SHA_OLD="$(git cat-file -p "${OT_SHA_NEW}" | grep 'parent ' | head -n1 | cut -d' ' -f2)"
39*cfb92d14SAndroid Build Coastguard Workerreadonly OT_SHA_OLD
40*cfb92d14SAndroid Build Coastguard Worker
41*cfb92d14SAndroid Build Coastguard WorkerOT_REPORT_FILE_TABLE="${OT_TMP_DIR}/report_table"
42*cfb92d14SAndroid Build Coastguard Workerreadonly OT_REPORT_FILE_TABLE
43*cfb92d14SAndroid Build Coastguard Worker
44*cfb92d14SAndroid Build Coastguard WorkerOT_REPORT_FILE_PR="${OT_TMP_DIR}/report_pr"
45*cfb92d14SAndroid Build Coastguard Workerreadonly OT_REPORT_FILE_TABLE
46*cfb92d14SAndroid Build Coastguard Worker
47*cfb92d14SAndroid Build Coastguard WorkerOT_REPORTER="${OT_SIZE_REPORTER-}"
48*cfb92d14SAndroid Build Coastguard Workerreadonly OT_REPORTER
49*cfb92d14SAndroid Build Coastguard Worker
50*cfb92d14SAndroid Build Coastguard Workersetup_arm_gcc_7()
51*cfb92d14SAndroid Build Coastguard Worker{
52*cfb92d14SAndroid Build Coastguard Worker    if arm-none-eabi-gcc --version | grep -q 'Arm Embedded Processors 7'; then
53*cfb92d14SAndroid Build Coastguard Worker        return 0
54*cfb92d14SAndroid Build Coastguard Worker    fi
55*cfb92d14SAndroid Build Coastguard Worker
56*cfb92d14SAndroid Build Coastguard Worker    (cd /tmp/ \
57*cfb92d14SAndroid Build Coastguard Worker        && wget --tries 4 --no-check-certificate --quiet https://developer.arm.com/-/media/Files/downloads/gnu-rm/7-2018q2/gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2 \
58*cfb92d14SAndroid Build Coastguard Worker        && tar xjf gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2)
59*cfb92d14SAndroid Build Coastguard Worker    export PATH=/tmp/gcc-arm-none-eabi-7-2018-q2-update/bin:$PATH
60*cfb92d14SAndroid Build Coastguard Worker
61*cfb92d14SAndroid Build Coastguard Worker    arm-none-eabi-gcc --version
62*cfb92d14SAndroid Build Coastguard Worker}
63*cfb92d14SAndroid Build Coastguard Worker
64*cfb92d14SAndroid Build Coastguard Workersetup_ninja_build()
65*cfb92d14SAndroid Build Coastguard Worker{
66*cfb92d14SAndroid Build Coastguard Worker    sudo apt-get --no-install-recommends install -y ninja-build
67*cfb92d14SAndroid Build Coastguard Worker}
68*cfb92d14SAndroid Build Coastguard Worker
69*cfb92d14SAndroid Build Coastguard Workersetup()
70*cfb92d14SAndroid Build Coastguard Worker{
71*cfb92d14SAndroid Build Coastguard Worker    setup_arm_gcc_7
72*cfb92d14SAndroid Build Coastguard Worker    setup_ninja_build
73*cfb92d14SAndroid Build Coastguard Worker}
74*cfb92d14SAndroid Build Coastguard Worker
75*cfb92d14SAndroid Build Coastguard Workernm_size()
76*cfb92d14SAndroid Build Coastguard Worker{
77*cfb92d14SAndroid Build Coastguard Worker    arm-none-eabi-nm --print-size --defined-only -C "$1" | cut -d' ' -f2- >nmsize_old
78*cfb92d14SAndroid Build Coastguard Worker    arm-none-eabi-nm --print-size --defined-only -C "$2" | cut -d' ' -f2- >nmsize_new
79*cfb92d14SAndroid Build Coastguard Worker    diff -Nuar nmsize_old nmsize_new || true
80*cfb92d14SAndroid Build Coastguard Worker}
81*cfb92d14SAndroid Build Coastguard Worker
82*cfb92d14SAndroid Build Coastguard Workerbuild_nrf52840()
83*cfb92d14SAndroid Build Coastguard Worker{
84*cfb92d14SAndroid Build Coastguard Worker    case "$1" in
85*cfb92d14SAndroid Build Coastguard Worker        ftd)
86*cfb92d14SAndroid Build Coastguard Worker            local ot_ftd=ON
87*cfb92d14SAndroid Build Coastguard Worker            local ot_mtd=OFF
88*cfb92d14SAndroid Build Coastguard Worker            local ot_rcp=ON
89*cfb92d14SAndroid Build Coastguard Worker            ;;
90*cfb92d14SAndroid Build Coastguard Worker        mtd)
91*cfb92d14SAndroid Build Coastguard Worker            local ot_ftd=OFF
92*cfb92d14SAndroid Build Coastguard Worker            local ot_mtd=ON
93*cfb92d14SAndroid Build Coastguard Worker            local ot_rcp=ON
94*cfb92d14SAndroid Build Coastguard Worker            ;;
95*cfb92d14SAndroid Build Coastguard Worker        br)
96*cfb92d14SAndroid Build Coastguard Worker            local ot_ftd=ON
97*cfb92d14SAndroid Build Coastguard Worker            local ot_mtd=OFF
98*cfb92d14SAndroid Build Coastguard Worker            local ot_rcp=OFF
99*cfb92d14SAndroid Build Coastguard Worker            ;;
100*cfb92d14SAndroid Build Coastguard Worker        *)
101*cfb92d14SAndroid Build Coastguard Worker            exit 128
102*cfb92d14SAndroid Build Coastguard Worker            ;;
103*cfb92d14SAndroid Build Coastguard Worker    esac
104*cfb92d14SAndroid Build Coastguard Worker
105*cfb92d14SAndroid Build Coastguard Worker    case "$2" in
106*cfb92d14SAndroid Build Coastguard Worker        new)
107*cfb92d14SAndroid Build Coastguard Worker            local sha=${OT_SHA_NEW}
108*cfb92d14SAndroid Build Coastguard Worker            local clone_options=("clone")
109*cfb92d14SAndroid Build Coastguard Worker            ;;
110*cfb92d14SAndroid Build Coastguard Worker        old)
111*cfb92d14SAndroid Build Coastguard Worker            local sha=${OT_SHA_OLD}
112*cfb92d14SAndroid Build Coastguard Worker            local clone_options=("clone" "no-depend")
113*cfb92d14SAndroid Build Coastguard Worker            ;;
114*cfb92d14SAndroid Build Coastguard Worker        *)
115*cfb92d14SAndroid Build Coastguard Worker            exit 128
116*cfb92d14SAndroid Build Coastguard Worker            ;;
117*cfb92d14SAndroid Build Coastguard Worker    esac
118*cfb92d14SAndroid Build Coastguard Worker
119*cfb92d14SAndroid Build Coastguard Worker    local folder="$1_$2"
120*cfb92d14SAndroid Build Coastguard Worker    local config_name="ot-core-config-check-size-$1.h"
121*cfb92d14SAndroid Build Coastguard Worker    local config_file="../examples/config/${config_name}"
122*cfb92d14SAndroid Build Coastguard Worker
123*cfb92d14SAndroid Build Coastguard Worker    mkdir -p "${OT_TMP_DIR}/${folder}"
124*cfb92d14SAndroid Build Coastguard Worker    script/git-tool "${clone_options[@]}" https://github.com/openthread/ot-nrf528xx.git "${OT_TMP_DIR}/${folder}"
125*cfb92d14SAndroid Build Coastguard Worker    rm -rf "${OT_TMP_DIR}/${folder}/openthread/*" # replace openthread submodule with latest commit
126*cfb92d14SAndroid Build Coastguard Worker    git archive "${sha}" | tar x -C "${OT_TMP_DIR}/${folder}/openthread"
127*cfb92d14SAndroid Build Coastguard Worker
128*cfb92d14SAndroid Build Coastguard Worker    if [ ! -e "${OT_TMP_DIR}/${folder}/openthread/examples/config/${config_name}" ]; then
129*cfb92d14SAndroid Build Coastguard Worker        # Check if the the config headers are not present, copy from
130*cfb92d14SAndroid Build Coastguard Worker        # the main sha.
131*cfb92d14SAndroid Build Coastguard Worker        case "$1" in
132*cfb92d14SAndroid Build Coastguard Worker            br)
133*cfb92d14SAndroid Build Coastguard Worker                rm -rf "${OT_TMP_DIR}/${folder}/openthread/*"
134*cfb92d14SAndroid Build Coastguard Worker                git archive "${OT_SHA_NEW}" | tar x -C "${OT_TMP_DIR}/${folder}/openthread"
135*cfb92d14SAndroid Build Coastguard Worker                ;;
136*cfb92d14SAndroid Build Coastguard Worker            *)
137*cfb92d14SAndroid Build Coastguard Worker                mkdir -p "${OT_TMP_DIR}/${folder}/openthread/examples/config"
138*cfb92d14SAndroid Build Coastguard Worker                cp "./examples/config/${config_name}" "${OT_TMP_DIR}/${folder}/openthread/examples/config"
139*cfb92d14SAndroid Build Coastguard Worker                ;;
140*cfb92d14SAndroid Build Coastguard Worker        esac
141*cfb92d14SAndroid Build Coastguard Worker    fi
142*cfb92d14SAndroid Build Coastguard Worker
143*cfb92d14SAndroid Build Coastguard Worker    local cur_dir
144*cfb92d14SAndroid Build Coastguard Worker
145*cfb92d14SAndroid Build Coastguard Worker    cur_dir=$(pwd)
146*cfb92d14SAndroid Build Coastguard Worker
147*cfb92d14SAndroid Build Coastguard Worker    cd "${OT_TMP_DIR}/${folder}"
148*cfb92d14SAndroid Build Coastguard Worker    OT_CMAKE_BUILD_DIR=build script/build nrf52840 UART_trans \
149*cfb92d14SAndroid Build Coastguard Worker        -DOT_APP_CLI=ON -DOT_APP_NCP=ON -DOT_APP_RCP=${ot_rcp} \
150*cfb92d14SAndroid Build Coastguard Worker        -DOT_FTD=${ot_ftd} -DOT_MTD=${ot_mtd} -DOT_RCP=${ot_rcp} \
151*cfb92d14SAndroid Build Coastguard Worker        -DBUILD_TESTING=OFF \
152*cfb92d14SAndroid Build Coastguard Worker        -DOT_PROJECT_CONFIG="${config_file}"
153*cfb92d14SAndroid Build Coastguard Worker
154*cfb92d14SAndroid Build Coastguard Worker    if [[ $1 == "br" ]]; then
155*cfb92d14SAndroid Build Coastguard Worker        mv ./build/bin/ot-cli-ftd ./build/bin/ot-cli-ftd-br
156*cfb92d14SAndroid Build Coastguard Worker        mv ./build/lib/libopenthread-ftd.a ./build/lib/libopenthread-ftd-br.a
157*cfb92d14SAndroid Build Coastguard Worker        mv ./build/lib/libopenthread-cli-ftd.a ./build/lib/libopenthread-cli-ftd-br.a
158*cfb92d14SAndroid Build Coastguard Worker    fi
159*cfb92d14SAndroid Build Coastguard Worker
160*cfb92d14SAndroid Build Coastguard Worker    cd "${cur_dir}"
161*cfb92d14SAndroid Build Coastguard Worker}
162*cfb92d14SAndroid Build Coastguard Worker
163*cfb92d14SAndroid Build Coastguard Workergenerate_table_header()
164*cfb92d14SAndroid Build Coastguard Worker{
165*cfb92d14SAndroid Build Coastguard Worker    {
166*cfb92d14SAndroid Build Coastguard Worker        printf "+----------------------------+----------+----------+----------+----------+----------+\n"
167*cfb92d14SAndroid Build Coastguard Worker        printf "| name                       | branch   | text     | data     | bss      | total    |\n"
168*cfb92d14SAndroid Build Coastguard Worker        printf "+============================+==========+==========+==========+==========+==========+\n"
169*cfb92d14SAndroid Build Coastguard Worker    } >>"${OT_REPORT_FILE_TABLE}"
170*cfb92d14SAndroid Build Coastguard Worker
171*cfb92d14SAndroid Build Coastguard Worker    {
172*cfb92d14SAndroid Build Coastguard Worker        printf "# Size Report of **OpenThread**\n"
173*cfb92d14SAndroid Build Coastguard Worker        printf "Merging PR into main\n\n"
174*cfb92d14SAndroid Build Coastguard Worker        printf "|  name  |  branch  |  text  | data  | bss  | total |\n"
175*cfb92d14SAndroid Build Coastguard Worker        printf "| :----: | :------: | -----: | ----: | ---: | ----: |\n"
176*cfb92d14SAndroid Build Coastguard Worker    } >>"${OT_REPORT_FILE_PR}"
177*cfb92d14SAndroid Build Coastguard Worker
178*cfb92d14SAndroid Build Coastguard Worker    {
179*cfb92d14SAndroid Build Coastguard Worker        printf "\n<details><summary>Library files</summary>\n\n\n"
180*cfb92d14SAndroid Build Coastguard Worker        printf "|  name  |  branch  |  text  | data  | bss  | total |\n"
181*cfb92d14SAndroid Build Coastguard Worker        printf "| :----: | :------: | -----: | ----: | ---: | ----: |\n"
182*cfb92d14SAndroid Build Coastguard Worker    } >>"${OT_REPORT_FILE_PR}_libs"
183*cfb92d14SAndroid Build Coastguard Worker
184*cfb92d14SAndroid Build Coastguard Worker    if [ -n "${OT_REPORTER}" ]; then
185*cfb92d14SAndroid Build Coastguard Worker        "${OT_REPORTER}" init OpenThread
186*cfb92d14SAndroid Build Coastguard Worker    fi
187*cfb92d14SAndroid Build Coastguard Worker
188*cfb92d14SAndroid Build Coastguard Worker}
189*cfb92d14SAndroid Build Coastguard Worker
190*cfb92d14SAndroid Build Coastguard Workergenerate_size_diff()
191*cfb92d14SAndroid Build Coastguard Worker{
192*cfb92d14SAndroid Build Coastguard Worker    local name
193*cfb92d14SAndroid Build Coastguard Worker    local old_file
194*cfb92d14SAndroid Build Coastguard Worker    local new_file
195*cfb92d14SAndroid Build Coastguard Worker
196*cfb92d14SAndroid Build Coastguard Worker    old_file="$1"
197*cfb92d14SAndroid Build Coastguard Worker    new_file="$2"
198*cfb92d14SAndroid Build Coastguard Worker
199*cfb92d14SAndroid Build Coastguard Worker    name=$(basename "${old_file}")
200*cfb92d14SAndroid Build Coastguard Worker
201*cfb92d14SAndroid Build Coastguard Worker    case "${name}" in
202*cfb92d14SAndroid Build Coastguard Worker        lib*)
203*cfb92d14SAndroid Build Coastguard Worker            table_report_file="${OT_REPORT_FILE_TABLE}_libs"
204*cfb92d14SAndroid Build Coastguard Worker            pr_report_file="${OT_REPORT_FILE_PR}"_libs
205*cfb92d14SAndroid Build Coastguard Worker            ;;
206*cfb92d14SAndroid Build Coastguard Worker        *)
207*cfb92d14SAndroid Build Coastguard Worker            table_report_file="${OT_REPORT_FILE_TABLE}"
208*cfb92d14SAndroid Build Coastguard Worker            pr_report_file="${OT_REPORT_FILE_PR}"
209*cfb92d14SAndroid Build Coastguard Worker            ;;
210*cfb92d14SAndroid Build Coastguard Worker    esac
211*cfb92d14SAndroid Build Coastguard Worker
212*cfb92d14SAndroid Build Coastguard Worker    read -r -a size_old <<<"$(size "${old_file}" | awk '{text+=$1} {bss+=$2} {data+=$3} {total+=$4} END {printf "%d %d %d %d", text, bss, data, total}')"
213*cfb92d14SAndroid Build Coastguard Worker    read -r -a size_new <<<"$(size "${new_file}" | awk '{text+=$1} {bss+=$2} {data+=$3} {total+=$4} END {printf "%d %d %d %d", text, bss, data, total}')"
214*cfb92d14SAndroid Build Coastguard Worker
215*cfb92d14SAndroid Build Coastguard Worker    local -a size_diff
216*cfb92d14SAndroid Build Coastguard Worker
217*cfb92d14SAndroid Build Coastguard Worker    for i in 0 1 2 3; do
218*cfb92d14SAndroid Build Coastguard Worker        size_diff[$i]="$((size_new["$i"] - size_old["$i"]))"
219*cfb92d14SAndroid Build Coastguard Worker        if [[ ${size_diff["$i"]} != 0 ]]; then
220*cfb92d14SAndroid Build Coastguard Worker            size_diff["$i"]=$(printf '%+d' "${size_diff["$i"]}")
221*cfb92d14SAndroid Build Coastguard Worker        fi
222*cfb92d14SAndroid Build Coastguard Worker    done
223*cfb92d14SAndroid Build Coastguard Worker
224*cfb92d14SAndroid Build Coastguard Worker    # Generate table format report
225*cfb92d14SAndroid Build Coastguard Worker
226*cfb92d14SAndroid Build Coastguard Worker    {
227*cfb92d14SAndroid Build Coastguard Worker        printf "| %-26s | %-8s " "${name}" "${OT_SHA_OLD:0:8}"
228*cfb92d14SAndroid Build Coastguard Worker        printf "| %8u | %8u | %8u | %8u |" "${size_old[0]}" "${size_old[1]}" "${size_old[2]}" "${size_old[3]}"
229*cfb92d14SAndroid Build Coastguard Worker        printf "\n"
230*cfb92d14SAndroid Build Coastguard Worker
231*cfb92d14SAndroid Build Coastguard Worker        printf "| %-26s | %-8s " "" "${OT_SHA_NEW:0:8}"
232*cfb92d14SAndroid Build Coastguard Worker        printf "| %8u | %8u | %8u | %8u |" "${size_new[0]}" "${size_new[1]}" "${size_new[2]}" "${size_new[3]}"
233*cfb92d14SAndroid Build Coastguard Worker        printf "\n"
234*cfb92d14SAndroid Build Coastguard Worker
235*cfb92d14SAndroid Build Coastguard Worker        printf "| %-26s | %-8s " "" "+/-"
236*cfb92d14SAndroid Build Coastguard Worker        printf "| %+8d | %+8d | %+8d | %+8d |" "${size_diff[0]}" "${size_diff[1]}" "${size_diff[2]}" "${size_diff[3]}"
237*cfb92d14SAndroid Build Coastguard Worker        printf "\n" >>"${table_report_file}"
238*cfb92d14SAndroid Build Coastguard Worker
239*cfb92d14SAndroid Build Coastguard Worker        printf "+----------------------------+----------+----------+----------+----------+----------+\n"
240*cfb92d14SAndroid Build Coastguard Worker    } >>"${table_report_file}"
241*cfb92d14SAndroid Build Coastguard Worker
242*cfb92d14SAndroid Build Coastguard Worker    # Generate PR post format report
243*cfb92d14SAndroid Build Coastguard Worker
244*cfb92d14SAndroid Build Coastguard Worker    {
245*cfb92d14SAndroid Build Coastguard Worker        printf "| %s | %s " "${name}" "${OT_SHA_OLD:0:8}"
246*cfb92d14SAndroid Build Coastguard Worker        printf "| %u | %u | %u | %u |" "${size_old[0]}" "${size_old[1]}" "${size_old[2]}" "${size_old[3]}"
247*cfb92d14SAndroid Build Coastguard Worker        printf "\n"
248*cfb92d14SAndroid Build Coastguard Worker
249*cfb92d14SAndroid Build Coastguard Worker        printf "|  | %s " "${OT_SHA_NEW:0:8}"
250*cfb92d14SAndroid Build Coastguard Worker        printf "| %u | %u | %u | %u |" "${size_new[0]}" "${size_new[1]}" "${size_new[2]}" "${size_new[3]}"
251*cfb92d14SAndroid Build Coastguard Worker        printf "\n"
252*cfb92d14SAndroid Build Coastguard Worker
253*cfb92d14SAndroid Build Coastguard Worker        printf "|  | %s " "+/-"
254*cfb92d14SAndroid Build Coastguard Worker        printf "| %+d | %+d | %+d | %+d |" "${size_diff[0]}" "${size_diff[1]}" "${size_diff[2]}" "${size_diff[3]}"
255*cfb92d14SAndroid Build Coastguard Worker        printf "\n"
256*cfb92d14SAndroid Build Coastguard Worker    } >>"${pr_report_file}"
257*cfb92d14SAndroid Build Coastguard Worker
258*cfb92d14SAndroid Build Coastguard Worker    if [ -n "${OT_REPORTER}" ]; then
259*cfb92d14SAndroid Build Coastguard Worker        "${OT_REPORTER}" size "${old_file}" "${new_file}"
260*cfb92d14SAndroid Build Coastguard Worker    fi
261*cfb92d14SAndroid Build Coastguard Worker}
262*cfb92d14SAndroid Build Coastguard Worker
263*cfb92d14SAndroid Build Coastguard Workergenerate_report()
264*cfb92d14SAndroid Build Coastguard Worker{
265*cfb92d14SAndroid Build Coastguard Worker    local type="${1}"
266*cfb92d14SAndroid Build Coastguard Worker    shift
267*cfb92d14SAndroid Build Coastguard Worker
268*cfb92d14SAndroid Build Coastguard Worker    local old_file
269*cfb92d14SAndroid Build Coastguard Worker    local new_file
270*cfb92d14SAndroid Build Coastguard Worker
271*cfb92d14SAndroid Build Coastguard Worker    for file in "$@"; do
272*cfb92d14SAndroid Build Coastguard Worker        case "${file}" in
273*cfb92d14SAndroid Build Coastguard Worker            lib*)
274*cfb92d14SAndroid Build Coastguard Worker                old_file="${OT_TMP_DIR}"/${type}_old/build/lib/"${file}"
275*cfb92d14SAndroid Build Coastguard Worker                new_file="${OT_TMP_DIR}"/${type}_new/build/lib/"${file}"
276*cfb92d14SAndroid Build Coastguard Worker                ;;
277*cfb92d14SAndroid Build Coastguard Worker            *)
278*cfb92d14SAndroid Build Coastguard Worker                old_file="${OT_TMP_DIR}"/${type}_old/build/bin/"${file}"
279*cfb92d14SAndroid Build Coastguard Worker                new_file="${OT_TMP_DIR}"/${type}_new/build/bin/"${file}"
280*cfb92d14SAndroid Build Coastguard Worker                ;;
281*cfb92d14SAndroid Build Coastguard Worker        esac
282*cfb92d14SAndroid Build Coastguard Worker
283*cfb92d14SAndroid Build Coastguard Worker        generate_size_diff "${old_file}" "${new_file}"
284*cfb92d14SAndroid Build Coastguard Worker
285*cfb92d14SAndroid Build Coastguard Worker        echo "nm_size ${old_file} ${new_file}"
286*cfb92d14SAndroid Build Coastguard Worker        nm_size "${old_file}" "${new_file}"
287*cfb92d14SAndroid Build Coastguard Worker    done
288*cfb92d14SAndroid Build Coastguard Worker}
289*cfb92d14SAndroid Build Coastguard Worker
290*cfb92d14SAndroid Build Coastguard Workerfinalize_report()
291*cfb92d14SAndroid Build Coastguard Worker{
292*cfb92d14SAndroid Build Coastguard Worker    cat "${OT_REPORT_FILE_TABLE}"
293*cfb92d14SAndroid Build Coastguard Worker    cat "${OT_REPORT_FILE_TABLE}_libs"
294*cfb92d14SAndroid Build Coastguard Worker
295*cfb92d14SAndroid Build Coastguard Worker    printf "</details>" >>${OT_REPORT_FILE_PR}_libs
296*cfb92d14SAndroid Build Coastguard Worker    cat "${OT_REPORT_FILE_PR}_libs" >>${OT_REPORT_FILE_PR}
297*cfb92d14SAndroid Build Coastguard Worker
298*cfb92d14SAndroid Build Coastguard Worker    if [ -n "${OT_REPORTER}" ]; then
299*cfb92d14SAndroid Build Coastguard Worker        "${OT_REPORTER}" post
300*cfb92d14SAndroid Build Coastguard Worker    fi
301*cfb92d14SAndroid Build Coastguard Worker}
302*cfb92d14SAndroid Build Coastguard Worker
303*cfb92d14SAndroid Build Coastguard Workersize_nrf52840()
304*cfb92d14SAndroid Build Coastguard Worker{
305*cfb92d14SAndroid Build Coastguard Worker    export OT_SHA_NEW OT_SHA_OLD
306*cfb92d14SAndroid Build Coastguard Worker
307*cfb92d14SAndroid Build Coastguard Worker    rm -rf "${OT_TMP_DIR}"
308*cfb92d14SAndroid Build Coastguard Worker    mkdir -p "${OT_TMP_DIR}"
309*cfb92d14SAndroid Build Coastguard Worker
310*cfb92d14SAndroid Build Coastguard Worker    if [[ "${GITHUB_ACTIONS+x}" ]]; then
311*cfb92d14SAndroid Build Coastguard Worker        git fetch --depth 1 --no-recurse-submodules origin "${OT_SHA_OLD}"
312*cfb92d14SAndroid Build Coastguard Worker    fi
313*cfb92d14SAndroid Build Coastguard Worker
314*cfb92d14SAndroid Build Coastguard Worker    generate_table_header
315*cfb92d14SAndroid Build Coastguard Worker
316*cfb92d14SAndroid Build Coastguard Worker    build_nrf52840 ftd new
317*cfb92d14SAndroid Build Coastguard Worker    build_nrf52840 mtd new
318*cfb92d14SAndroid Build Coastguard Worker    build_nrf52840 br new
319*cfb92d14SAndroid Build Coastguard Worker
320*cfb92d14SAndroid Build Coastguard Worker    build_nrf52840 ftd old
321*cfb92d14SAndroid Build Coastguard Worker    build_nrf52840 mtd old
322*cfb92d14SAndroid Build Coastguard Worker    build_nrf52840 br old
323*cfb92d14SAndroid Build Coastguard Worker
324*cfb92d14SAndroid Build Coastguard Worker    local ftd_files=(
325*cfb92d14SAndroid Build Coastguard Worker        "ot-cli-ftd"
326*cfb92d14SAndroid Build Coastguard Worker        "ot-ncp-ftd"
327*cfb92d14SAndroid Build Coastguard Worker        "libopenthread-ftd.a"
328*cfb92d14SAndroid Build Coastguard Worker        "libopenthread-cli-ftd.a"
329*cfb92d14SAndroid Build Coastguard Worker        "libopenthread-ncp-ftd.a"
330*cfb92d14SAndroid Build Coastguard Worker    )
331*cfb92d14SAndroid Build Coastguard Worker
332*cfb92d14SAndroid Build Coastguard Worker    local mtd_files=(
333*cfb92d14SAndroid Build Coastguard Worker        "ot-cli-mtd"
334*cfb92d14SAndroid Build Coastguard Worker        "ot-ncp-mtd"
335*cfb92d14SAndroid Build Coastguard Worker        "libopenthread-mtd.a"
336*cfb92d14SAndroid Build Coastguard Worker        "libopenthread-cli-mtd.a"
337*cfb92d14SAndroid Build Coastguard Worker        "libopenthread-ncp-mtd.a"
338*cfb92d14SAndroid Build Coastguard Worker    )
339*cfb92d14SAndroid Build Coastguard Worker
340*cfb92d14SAndroid Build Coastguard Worker    local br_files=(
341*cfb92d14SAndroid Build Coastguard Worker        "ot-cli-ftd-br"
342*cfb92d14SAndroid Build Coastguard Worker        "libopenthread-ftd-br.a"
343*cfb92d14SAndroid Build Coastguard Worker        "libopenthread-cli-ftd-br.a"
344*cfb92d14SAndroid Build Coastguard Worker    )
345*cfb92d14SAndroid Build Coastguard Worker
346*cfb92d14SAndroid Build Coastguard Worker    # `rcp`` is using same config as `ftd`.
347*cfb92d14SAndroid Build Coastguard Worker    local rcp_files=(
348*cfb92d14SAndroid Build Coastguard Worker        "ot-rcp"
349*cfb92d14SAndroid Build Coastguard Worker        "libopenthread-rcp.a"
350*cfb92d14SAndroid Build Coastguard Worker        "libopenthread-radio.a"
351*cfb92d14SAndroid Build Coastguard Worker    )
352*cfb92d14SAndroid Build Coastguard Worker
353*cfb92d14SAndroid Build Coastguard Worker    generate_report ftd "${ftd_files[@]}"
354*cfb92d14SAndroid Build Coastguard Worker    generate_report mtd "${mtd_files[@]}"
355*cfb92d14SAndroid Build Coastguard Worker    generate_report br "${br_files[@]}"
356*cfb92d14SAndroid Build Coastguard Worker    generate_report ftd "${rcp_files[@]}"
357*cfb92d14SAndroid Build Coastguard Worker
358*cfb92d14SAndroid Build Coastguard Worker    finalize_report
359*cfb92d14SAndroid Build Coastguard Worker}
360*cfb92d14SAndroid Build Coastguard Worker
361*cfb92d14SAndroid Build Coastguard Workermain()
362*cfb92d14SAndroid Build Coastguard Worker{
363*cfb92d14SAndroid Build Coastguard Worker    if [[ $# == 0 ]]; then
364*cfb92d14SAndroid Build Coastguard Worker        setup
365*cfb92d14SAndroid Build Coastguard Worker        size_nrf52840
366*cfb92d14SAndroid Build Coastguard Worker        cd
367*cfb92d14SAndroid Build Coastguard Worker    elif [[ $1 == setup ]]; then
368*cfb92d14SAndroid Build Coastguard Worker        setup
369*cfb92d14SAndroid Build Coastguard Worker    elif [[ $1 == nrf52840 ]]; then
370*cfb92d14SAndroid Build Coastguard Worker        size_nrf52840
371*cfb92d14SAndroid Build Coastguard Worker    else
372*cfb92d14SAndroid Build Coastguard Worker        echo "USAGE: $0 [setup|nrf52840]"
373*cfb92d14SAndroid Build Coastguard Worker        exit 128
374*cfb92d14SAndroid Build Coastguard Worker    fi
375*cfb92d14SAndroid Build Coastguard Worker}
376*cfb92d14SAndroid Build Coastguard Worker
377*cfb92d14SAndroid Build Coastguard Workermain "$@"
378