mirror of
https://github.com/EdgeTX/edgetx.git
synced 2025-07-25 17:25:10 +03:00
[build] Add comprehensive firmware size reporting scripts for ARM MCUs. (#4218)
* [build] Add comprehensive firmware size reporting scripts for ARM MCUs. * [build] Add firmware size reports to commit-tests.sh. * [build] Set permissions on new scripts. * [build] Add -Wno-error option to commit-tests.sh. * [build] Revert firmware size report to using `arm-none-eabi-size` if bash not found (eg. on Windows). * [git] Add .gitattributes to force line endings on UNIX shell scripts.
This commit is contained in:
parent
3944f30d06
commit
f4f07d3c0c
9 changed files with 409 additions and 25 deletions
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
*.sh eol=lf
|
|
@ -451,11 +451,20 @@ if(NOT MSVC)
|
|||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
|
||||
find_program(BASH bash HINTS "c:/cygwin/bin/" DOC "bash shell for firmware size report (eg. c:/cygwin/bin/bash.exe on Windows).")
|
||||
if (BASH)
|
||||
add_custom_target(firmware-size
|
||||
COMMAND arm-none-eabi-size firmware.elf
|
||||
COMMAND ${BASH} -kc '${RADIO_DIRECTORY}/util/elf-size-report.sh --mcu=${CPU_TYPE_FULL} ${SIZE_TARGET_MEM_DEFINE} firmware.elf'
|
||||
DEPENDS firmware
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
else()
|
||||
add_custom_target(firmware-size
|
||||
COMMAND arm-none-eabi-size -A firmware.elf
|
||||
DEPENDS firmware
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
endif()
|
||||
|
||||
else() # AVR
|
||||
|
||||
|
|
|
@ -25,6 +25,9 @@ set(FLAVOUR horus)
|
|||
set(RAMBACKUP YES)
|
||||
set(LUA YES)
|
||||
set(PPM_LIMITS_SYMETRICAL YES)
|
||||
# for size report script
|
||||
set(CPU_TYPE_FULL STM32F429xI)
|
||||
set(SIZE_TARGET_MEM_DEFINE "MEM_SIZE_SDRAM2=8192")
|
||||
|
||||
if(SPLASH STREQUAL OFF)
|
||||
message(FATAL_ERROR "Option SPLASH=OFF not supported on Horus")
|
||||
|
|
|
@ -15,6 +15,7 @@ if(PCB STREQUAL 9XRPRO)
|
|||
set(LINKER_SCRIPT targets/sky9x/sam3s8c_flash.ld)
|
||||
set(TARGET_SRC ${TARGET_SRC} rtc_driver.cpp)
|
||||
set(OPENRC_BOOTLOADER bootflash8.lbm)
|
||||
set(CPU_TYPE_FULL ATSAM3S8C) # for size report
|
||||
elseif(PCB STREQUAL AR9X)
|
||||
add_definitions(-Dat91sam3s8 -DAR9X -DSOFTWARE_VOLUME)
|
||||
set(FLAVOUR ar9x)
|
||||
|
@ -23,20 +24,28 @@ elseif(PCB STREQUAL AR9X)
|
|||
set(TARGET_SRC ${TARGET_SRC} i2c_driver.cpp rtc_ds3231_driver.cpp)
|
||||
set(LINKER_SCRIPT targets/sky9x/sam3s8c_flash.ld)
|
||||
set(OPENRC_BOOTLOADER bootflash8.lbm)
|
||||
set(CPU_TYPE_FULL ATSAM3S8C) # for size report
|
||||
else()
|
||||
set(FLAVOUR sky9x)
|
||||
option(PCBREV "PCB Revision" REVC)
|
||||
set(PCBREV "REVC" CACHE STRING "PCB Revision (REVA/REVB/REVC)")
|
||||
set_property(CACHE PCBREV PROPERTY STRINGS "REVA" "REVB" "REVC")
|
||||
set(TARGET_SRC ${TARGET_SRC} coproc_driver.cpp rotenc_driver.cpp rtc_driver.cpp)
|
||||
set(OPENRC_BOOTLOADER bootflash4.lbm)
|
||||
if(PCBREV STREQUAL REVA)
|
||||
add_definitions(-DDREVA)
|
||||
set(LINKER_SCRIPT targets/sky9x/sam3s2c_flash.ld)
|
||||
elseif(PCBREV STREQUAL REVB)
|
||||
add_definitions(-DDREVB -DCOPROCESSOR)
|
||||
set(LINKER_SCRIPT targets/sky9x/sam3s4c_flash.ld)
|
||||
set(CPU_TYPE_FULL ATSAM3S2C) # for size report
|
||||
else()
|
||||
add_definitions(-DDREVC -DCOPROCESSOR)
|
||||
if(PCBREV STREQUAL REVB)
|
||||
add_definitions(-DDREVB)
|
||||
elseif(PCBREV STREQUAL REVC)
|
||||
add_definitions(-DDREVC)
|
||||
else()
|
||||
message(SEND_ERROR "Unknown PCB Revision '${PCBREV}'")
|
||||
endif()
|
||||
add_definitions(-DCOPROCESSOR)
|
||||
set(LINKER_SCRIPT targets/sky9x/sam3s4c_flash.ld)
|
||||
set(CPU_TYPE_FULL ATSAM3S4C) # for size report
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ option(TARANIS_INTERNAL_PPM "Taranis internal module hack to output PPM" OFF)
|
|||
if(PCB STREQUAL X9E)
|
||||
set(STICKS "STANDARD" CACHE STRING "Sticks type (STANDARD/HORUS)")
|
||||
set(CPU_TYPE STM32F4)
|
||||
set(CPU_TYPE_FULL STM32F407xE) # for size report
|
||||
set(LINKER_SCRIPT targets/taranis/stm32f4_flash.ld)
|
||||
set(HAPTIC YES)
|
||||
set(LUA_EXPORT lua_export_x9e)
|
||||
|
@ -28,6 +29,7 @@ if(PCB STREQUAL X9E)
|
|||
set(GVAR_SCREEN model_gvars.cpp)
|
||||
elseif(PCB STREQUAL X9D+)
|
||||
set(CPU_TYPE STM32F2)
|
||||
set(CPU_TYPE_FULL STM32F205xE) # for size report
|
||||
set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld)
|
||||
set(HAPTIC YES)
|
||||
set(LUA_EXPORT lua_export_x9d)
|
||||
|
@ -42,6 +44,7 @@ elseif(PCB STREQUAL X9D+)
|
|||
set(GVAR_SCREEN model_gvars.cpp)
|
||||
elseif(PCB STREQUAL X9D)
|
||||
set(CPU_TYPE STM32F2)
|
||||
set(CPU_TYPE_FULL STM32F205xE) # for size report
|
||||
set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld)
|
||||
option(HAPTIC "Haptic support" OFF)
|
||||
set(LUA_EXPORT lua_export_x9d)
|
||||
|
@ -56,6 +59,7 @@ elseif(PCB STREQUAL X9D)
|
|||
set(GVAR_SCREEN model_gvars.cpp)
|
||||
elseif(PCB STREQUAL X7)
|
||||
set(CPU_TYPE STM32F2)
|
||||
set(CPU_TYPE_FULL STM32F205xE) # for size report
|
||||
set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld)
|
||||
set(HAPTIC YES)
|
||||
set(LUA_EXPORT lua_export_x7)
|
||||
|
|
70
radio/util/elf-size-compare.awk
Executable file
70
radio/util/elf-size-compare.awk
Executable file
|
@ -0,0 +1,70 @@
|
|||
#!/usr/bin/awk -nf
|
||||
#
|
||||
# Parses the output of elf-size-report.awk and calculates segment memory usage deltas between the analyzed elf files.
|
||||
#
|
||||
# License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
# Copyright (c)2016 Maxim Paperno
|
||||
# Copyright (c)2017 OpenTX
|
||||
#
|
||||
|
||||
|
||||
BEGIN {
|
||||
in_ttls = 0;
|
||||
elf_cnt = 0;
|
||||
sec_cnt = 0;
|
||||
}
|
||||
{
|
||||
if ($1 == "----" && NF > 5 && $5 ~ /\.elf$/) {
|
||||
fname[elf_cnt] = $5;
|
||||
}
|
||||
else if (tolower($1) ~ /totals/) {
|
||||
in_ttls = 1;
|
||||
elf_cnt++;
|
||||
}
|
||||
else if (in_ttls && NF != 5) {
|
||||
in_ttls = 0;
|
||||
}
|
||||
else if (in_ttls) {
|
||||
if (elf_cnt == 1)
|
||||
a[++sec_cnt] = $1;
|
||||
d[elf_cnt][$1]["total"] = $2;
|
||||
}
|
||||
}
|
||||
END {
|
||||
printf("\n---- Comparing results of %d files ----\n\n", elf_cnt);
|
||||
PROCINFO["sorted_in"] = "@ind_num_asc"
|
||||
for (j in d) {
|
||||
if (length(fname[j-1]))
|
||||
printf("file %d: %s\n", j, fname[j-1])
|
||||
}
|
||||
printf("\n%-8s ", "Section");
|
||||
for (j in d) {
|
||||
printf("%8s ", "file " j);
|
||||
if (j > 1)
|
||||
printf("(%7s) ", "\xCE\x94 vs f1");
|
||||
if (j > 2)
|
||||
printf("(%7s) ", "\xCE\x94 vs f" j-1);
|
||||
}
|
||||
printf("\n");
|
||||
for (i in a) {
|
||||
n = a[i];
|
||||
printf("%8s ", n);
|
||||
for (j in d) {
|
||||
printf("%8.2f ", d[j][n]["total"]);
|
||||
if (j > 1)
|
||||
printDelta(d[j][n]["total"] - d[1][n]["total"]);
|
||||
if (j > 2)
|
||||
printDelta(d[j][n]["total"] - d[j-1][n]["total"]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
function printDelta(dlta) {
|
||||
if (dlta)
|
||||
printf("(%+7.2f) ", dlta);
|
||||
else
|
||||
printf("(%7s) ", "--.--");
|
||||
}
|
||||
|
105
radio/util/elf-size-report.awk
Executable file
105
radio/util/elf-size-report.awk
Executable file
|
@ -0,0 +1,105 @@
|
|||
#!/usr/bin/awk -nf
|
||||
#
|
||||
# Process gcc binutils 'size -A' output to show more specific and summarized information about memory segment usage.
|
||||
#
|
||||
# This script expects some variables to be set on the command line with -v:
|
||||
# names : list of segment names ("Flash", "RAM" etc.)
|
||||
# addrs : list of segment start addresses in hex/oct/dec (in same order as names)
|
||||
# sizes : list of segment sizes in KB (in same order as names)
|
||||
# elf : name of elf file (optional, for display only)
|
||||
# mcu : name of MCU (optional, for display only)
|
||||
# skip_data : skip duplicate .data in Flash (0/1 default: 0)
|
||||
#
|
||||
# NOTE: The memory segments should be specified in increasing address order (low to high).
|
||||
#
|
||||
# Usage example:
|
||||
# arm-none-eabi-size -A -x firmware.elf | ./elf-size-report.awk \
|
||||
# -v elf="firmware.elf" \
|
||||
# -v mcu="STM32F401VG" \
|
||||
# -v names="Flash RAM" \
|
||||
# -v addrs "0x08000000 0x100000000" \
|
||||
# -v sizes "512 128"
|
||||
#
|
||||
# License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
# Copyright (c)2016 Maxim Paperno
|
||||
# Copyright (c)2017 OpenTX
|
||||
#
|
||||
|
||||
|
||||
BEGIN {
|
||||
err = 0;
|
||||
len = split(names, a_names, " ");
|
||||
alen = split(addrs, a_addrs, " ");
|
||||
slen = split(sizes, a_sizes, " ");
|
||||
if (!len || len != alen || len != slen) {
|
||||
print "Error: No segment data provided or array sizes mismatch, exiting.";
|
||||
exit err = 1;
|
||||
}
|
||||
flash_name = "Flash";
|
||||
for (i in a_names) {
|
||||
n = a_names[i];
|
||||
a[i] = n; d[n]["addr"] = a_addrs[i]; d[n]["size"] = a_sizes[i]; d[n]["sum"] = 0;
|
||||
if (tolower(n) ~ /flash/)
|
||||
flash_name = n;
|
||||
}
|
||||
flmax = d[flash_name]["addr"];
|
||||
fmtstr = "%-20s %7d 0x%08x %s\n";
|
||||
|
||||
printf("\n---- Size report");
|
||||
if (length(elf)) printf(" for %s", elf);
|
||||
if (length(mcu)) printf(" (MCU: %s)", mcu);
|
||||
printf(" ----\n\n");
|
||||
printf("Section Details:\n");
|
||||
printf("%-20s %7s %10s %s\n", "section", "size(B)", "addr", "loc");
|
||||
}
|
||||
# Process each line of 'size' output listing the program's sections,
|
||||
# skip line if sections size or address are zero.
|
||||
NR > 2 && $2 != 0 && $3 != 0 {
|
||||
if ($1 == ".data") {
|
||||
# .data section is always in Flash but 'size' reports it only in RAM (sometimes twice)
|
||||
d[flash_name]["sum"] += $2;
|
||||
printf(fmtstr, $1 " (added)", $2, flmax, flash_name);
|
||||
flmax += $3;
|
||||
if (skip_data) { next; }
|
||||
}
|
||||
# Walk over each specified memory segment looking for a match
|
||||
# note: (this assumes segments were passed in ascending memory order)
|
||||
PROCINFO["sorted_in"] = "@ind_num_desc"
|
||||
addr = d[a[len]]["addr"];
|
||||
for (i in a) {
|
||||
n = a[i];
|
||||
if ($3 >= addr) {
|
||||
# check for overflow into contigious region
|
||||
t = d[n]["sum"] + $2 - (d[n]["size"] * 1024);
|
||||
if (t > 0 && i < len && d[a[i+1]]["addr"] = d[n]["addr"] + d[n]["size"] + 1) {
|
||||
d[n]["sum"] += $2 - t;
|
||||
d[a[i+1]]["sum"] += t;
|
||||
seg = n "+" a[i+1];
|
||||
}
|
||||
else {
|
||||
d[n]["sum"] += $2;
|
||||
seg = n;
|
||||
}
|
||||
printf(fmtstr, $1, $2, $3, seg);
|
||||
# track maximum flash address used
|
||||
if (n == flash_name)
|
||||
flmax += $2;
|
||||
break;
|
||||
}
|
||||
else if (i > 1)
|
||||
addr = d[a[i-1]]["addr"];
|
||||
}
|
||||
}
|
||||
END {
|
||||
if (err) exit err;
|
||||
fmtstr = "%7s: %8.2f %6.2f%% %6d\t%7.2f\n";
|
||||
printf("\nTotals %8s usage of ttl\tKB free\n", "KB");
|
||||
PROCINFO["sorted_in"] = "@ind_num_asc"
|
||||
for (i in a) {
|
||||
n = a[i];
|
||||
if (d[n]["size"] > 0)
|
||||
printf(fmtstr, n, d[n]["sum"]/1024, d[n]["sum"]/(d[n]["size"]*1024)*100, d[n]["size"], d[n]["size"] - d[n]["sum"]/1024 );
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
175
radio/util/elf-size-report.sh
Executable file
175
radio/util/elf-size-report.sh
Executable file
|
@ -0,0 +1,175 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# This is a wrapper for the elf-size-report.awk script which prints a detailed report
|
||||
# of memory segment allocations and usage in a given ELF file, based on gcc 'size' output.
|
||||
# This script sets up memory segment information needed by the awk script.
|
||||
# If more than one .elf file is given, then a comparison (delta memory use) report is
|
||||
# also performed using elf-size-compare.awk.
|
||||
# Currently supports some STMicro & Atmel ARM MCUs. May not work with all placement strategies.
|
||||
#
|
||||
# Usage:
|
||||
# [VAR=value] ./elf-memory-report.sh [options] [file.elf] [file2.elf] [...]
|
||||
#
|
||||
# Where VAR is any of the CAPITALIZED variables below. More than one can be specified,
|
||||
# and any VAR can also be set in the environment.
|
||||
# SIZE : gcc binutils 'size' command to use, default is "arm-none-eabi-size".
|
||||
# MCU :
|
||||
# Specifies MCU model on which to base default segment location/size parameters. Also see "--mcu=" option.
|
||||
# MEM_START_<segment> & MEM_SIZE_<segment> : (read code below for defaults)
|
||||
# Allows specifying additional/custom segment information, eg. MEM_SIZE_FLASH=768
|
||||
#
|
||||
# Options can be one or more of the following:
|
||||
# --mcu=<MCU>
|
||||
# Set MCU type. Same as setting the MCU env. variable, and overrides it.
|
||||
# --skip-data
|
||||
# Some linker scripts duplicate .data in the output (eg: .data and .data_run).
|
||||
# Set this option to skip .data from being counted in RAM a 2nd time
|
||||
# (it is always shown as being in Flash).
|
||||
# --compare-only
|
||||
# When specifying multiple elf files, only show the final comparison report.
|
||||
# --no-compare
|
||||
# Opposite and exclusive of previous option, that is, do NOT show comparison report (only size reports).
|
||||
#
|
||||
# If an elf file is not specified on the command line, this script will prompt for one.
|
||||
#
|
||||
# Examples:
|
||||
# MCU="STM32F439xI" MEM_SIZE_SDRAM2=8192 ./elf-memory-report.sh path/to/firmware.elf
|
||||
# ./elf-memory-report.sh --mcu ATSAM3S4C --compare-only firmware_new.elf firmware_old.elf
|
||||
# set -k && ./elf-memory-report.sh MCU=STM32F427VG --skip-data firmware.elf
|
||||
# (the -k switch allows variable assignment anywhere on the command line)
|
||||
# c:\cygwin\bin\bash -kc './elf-memory-report.sh --mcu ATSAM3S8C "c:\windows\path\with spaces\firmware.elf"'
|
||||
#
|
||||
# License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
# Copyright (c)2016 Maxim Paperno
|
||||
# Copyright (c)2017 OpenTX
|
||||
#
|
||||
|
||||
# -- gcc binutils 'size' command to use
|
||||
: ${SIZE:="arm-none-eabi-size"}
|
||||
|
||||
# -- MCU type, if defined will set certain memory defaults
|
||||
# e.g. STM32F205xE or ATSAM3S4C
|
||||
: ${MCU:="unknown"}
|
||||
|
||||
# -- process options
|
||||
compare=2
|
||||
skip_data=0
|
||||
for i in "$@" ; do
|
||||
case $i in
|
||||
--mcu=*) MCU="${i#*=}"; shift;;
|
||||
--skip-data) skip_data=1; shift;;
|
||||
--compare-only) compare=1; shift;;
|
||||
--no-compare) compare=0; shift;;
|
||||
esac
|
||||
done
|
||||
|
||||
# -- defaults which may change based on MCU
|
||||
default_flash_addr=0x08000000
|
||||
default_flash_sz=1024 # KB
|
||||
default_ccm_sz=0
|
||||
default_ram1_sz=128
|
||||
default_ram2_sz=0
|
||||
default_ram3_sz=0
|
||||
# -- Set defaults based on MCU type
|
||||
if [[ $MCU != "unknown" ]] ; then
|
||||
mcu_brand=${MCU:0:2} # ST or AT
|
||||
if [[ $mcu_brand == "ST" && ${#MCU} -ge 7 ]] ; then
|
||||
# e.g.: STM32F427VG
|
||||
stm_series=${MCU:6:1} # 4
|
||||
stm_ser_ex=${MCU:7:1} # 2
|
||||
stm_flash=${MCU:10:1} # G
|
||||
default_ram1_sz=112
|
||||
default_ram2_sz=16
|
||||
case $stm_flash in
|
||||
"I") default_flash_sz=2048;;
|
||||
"G") default_flash_sz=1024;;
|
||||
"E") default_flash_sz=512;;
|
||||
"C") default_flash_sz=256;;
|
||||
esac
|
||||
if (( $stm_series == 4 )) ; then
|
||||
default_ccm_sz=64
|
||||
if (( $stm_ser_ex >= 2 )) ; then
|
||||
default_ram3_sz=64
|
||||
fi
|
||||
fi
|
||||
elif [[ $mcu_brand == "AT" && ${#MCU} -ge 9 ]] ; then
|
||||
# e.g.: ATSAM3S4C
|
||||
atm_series=${MCU:5:4} # 3S4C
|
||||
default_flash_addr=0x00400000
|
||||
case $atm_series in
|
||||
"3S8C") default_flash_sz=512; default_ram1_sz=64;;
|
||||
"3S4C") default_flash_sz=256; default_ram1_sz=48;;
|
||||
"3S2C") default_flash_sz=128; default_ram1_sz=32;;
|
||||
esac
|
||||
else
|
||||
echo "MCU type unrecognized, exiting."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# -- target memory locations in hex
|
||||
: ${MEM_START_FLASH:=$default_flash_addr}
|
||||
: ${MEM_START_CCRAM:=0x10000000}
|
||||
: ${MEM_START_SRAM1:=0x20000000}
|
||||
: ${MEM_START_SRAM2:=0x2001c000}
|
||||
: ${MEM_START_SRAM3:=0x20020000}
|
||||
: ${MEM_START_PSRAM1:=0x60000000}
|
||||
: ${MEM_START_SDRAM1:=0xC0000000}
|
||||
: ${MEM_START_SDRAM2:=0xD0000000}
|
||||
|
||||
# -- target memory sizes in KB
|
||||
: ${MEM_SIZE_FLASH:=$default_flash_sz}
|
||||
: ${MEM_SIZE_CCRAM:=$default_ccm_sz}
|
||||
: ${MEM_SIZE_SRAM1:=$default_ram1_sz}
|
||||
: ${MEM_SIZE_SRAM2:=$default_ram2_sz}
|
||||
: ${MEM_SIZE_SRAM3:=$default_ram3_sz}
|
||||
: ${MEM_SIZE_PSRAM1:=0}
|
||||
: ${MEM_SIZE_SDRAM1:=0}
|
||||
: ${MEM_SIZE_SDRAM2:=0}
|
||||
|
||||
# -- prompt for elf file if not on command line
|
||||
if [[ -z "$@" ]] ; then
|
||||
read -p "Elf file(s): " ELF_FILES
|
||||
else
|
||||
ELF_FILES=$@
|
||||
fi
|
||||
|
||||
# -- Set arrays for awk script. The segments should be in increasing address order.
|
||||
names=("Flash" "CCRAM" "SRAM1" "SRAM2" "SRAM3" "PSRAM1" "SDRAM1" "SDRAM2")
|
||||
addrs=(${MEM_START_FLASH} ${MEM_START_CCRAM} ${MEM_START_SRAM1} ${MEM_START_SRAM2} ${MEM_START_SRAM3} \
|
||||
${MEM_START_PSRAM1} ${MEM_START_SDRAM1} ${MEM_START_SDRAM2})
|
||||
sizes=(${MEM_SIZE_FLASH} ${MEM_SIZE_CCRAM} ${MEM_SIZE_SRAM1} ${MEM_SIZE_SRAM2} ${MEM_SIZE_SRAM3} \
|
||||
${MEM_SIZE_PSRAM1} ${MEM_SIZE_SDRAM1} ${MEM_SIZE_SDRAM2})
|
||||
|
||||
base_dir="$(dirname "$BASH_SOURCE")"
|
||||
base_dir="${base_dir%%[[:space:]]}" # sometimes we get trailing \n
|
||||
|
||||
# -- run the ARM size command for each elf file and send output to awk script
|
||||
all_output=""
|
||||
file_cnt=0
|
||||
for elf in "$@"; do
|
||||
if [[ ! -f "$elf" ]] ; then
|
||||
echo "ELF file \"$elf\" not found."
|
||||
continue
|
||||
fi
|
||||
#${SIZE} -A -x ${elf}
|
||||
escelf="${elf//\\//}"
|
||||
output=`${SIZE} -A -x ${elf} | "${base_dir}/elf-size-report.awk" \
|
||||
-v mcu="${MCU}" \
|
||||
-v elf="${escelf}" \
|
||||
-v skip_data=${skip_data} \
|
||||
-v names="${names[*]}" \
|
||||
-v addrs="${addrs[*]}" \
|
||||
-v sizes="${sizes[*]}"`
|
||||
if (( compare != 1 )) ; then
|
||||
echo "$output"
|
||||
echo
|
||||
fi
|
||||
file_cnt+=1
|
||||
all_output+="${output}\n"
|
||||
done
|
||||
# -- if more than one elf file was given, also run a comparison report
|
||||
if (( file_cnt > 1 && compare )) ; then
|
||||
echo "$all_output" | "${base_dir}/elf-size-compare.awk"
|
||||
fi
|
||||
|
|
@ -5,7 +5,9 @@ set -e
|
|||
set -x
|
||||
|
||||
# Allow variable core usage, default uses two cores, to set 8 cores for example : commit-tests.sh -j8
|
||||
# Default build treats warnings as errors, set -Wno-error to override, e.g.: commit-tests.sh -Wno-error
|
||||
CORES=2
|
||||
WERROR=1
|
||||
for i in "$@"
|
||||
do
|
||||
case $i in
|
||||
|
@ -17,6 +19,10 @@ case $i in
|
|||
CORES="${i#*j}"
|
||||
shift
|
||||
;;
|
||||
-Wno-error)
|
||||
WERROR=0
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
@ -27,7 +33,9 @@ else
|
|||
fi
|
||||
|
||||
SRCDIR=$(dirname "$SCRIPT")/..
|
||||
COMMON_OPTIONS="-DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH=/opt/qt55 -DTRACE_SIMPGMSPACE=NO -DWARNINGS_AS_ERRORS=YES -DVERBOSE_CMAKELISTS=YES -DCMAKE_RULE_MESSAGES=OFF -Wno-dev"
|
||||
COMMON_OPTIONS="-DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH=/opt/qt55 -DTRACE_SIMPGMSPACE=NO -DVERBOSE_CMAKELISTS=YES -DCMAKE_RULE_MESSAGES=OFF -Wno-dev"
|
||||
if (( $WERROR )); then COMMON_OPTIONS+=" -DWARNINGS_AS_ERRORS=YES"; fi
|
||||
FIRMARE_TARGET="firmware-size"
|
||||
|
||||
mkdir build || true
|
||||
cd build
|
||||
|
@ -35,94 +43,94 @@ cd build
|
|||
# OpenTX on 9X stock with FrSky telemetry
|
||||
rm -rf *
|
||||
cmake ${COMMON_OPTIONS} -DPCB=9X -DHELI=YES -DTEMPLATES=YES -DTELEMETRY=FRSKY ${SRCDIR}
|
||||
make -j${CORES} firmware
|
||||
make -j${CORES} ${FIRMARE_TARGET}
|
||||
make -j${CORES} simu
|
||||
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
|
||||
|
||||
# OpenTX on 9X stock with Ardupilot telemetry
|
||||
rm -rf *
|
||||
cmake ${COMMON_OPTIONS} -DPCB=9X -DHELI=YES -DTEMPLATES=YES -DTELEMETRY=ARDUPILOT ${SRCDIR}
|
||||
make -j${CORES} firmware
|
||||
make -j${CORES} ${FIRMARE_TARGET}
|
||||
|
||||
# OpenTX on 9X stock with JETI telemetry
|
||||
rm -rf *
|
||||
cmake ${COMMON_OPTIONS} -DPCB=9X -DHELI=YES -DTEMPLATES=YES -DTELEMETRY=JETI ${SRCDIR}
|
||||
make -j${CORES} firmware
|
||||
make -j${CORES} ${FIRMARE_TARGET}
|
||||
|
||||
# OpenTX on Mega2560
|
||||
rm -rf *
|
||||
cmake ${COMMON_OPTIONS} -DPCB=MEGA2560 -DTEMPLATES=YES -DHELI=YES ${SRCDIR}
|
||||
make -j${CORES} firmware
|
||||
make -j${CORES} ${FIRMARE_TARGET}
|
||||
make -j${CORES} simu
|
||||
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
|
||||
|
||||
# OpenTX on Mega2560 with Mavlink telemetry
|
||||
rm -rf *
|
||||
cmake ${COMMON_OPTIONS} -DPCB=MEGA2560 -DTELEMETRY=MAVLINK -DHELI=YES -DTEMPLATES=YES -DAUDIO=YES -DVOICE=YES ${SRCDIR}
|
||||
make -j${CORES} firmware
|
||||
make -j${CORES} ${FIRMARE_TARGET}
|
||||
make -j${CORES} simu
|
||||
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
|
||||
|
||||
# OpenTX on gruvin9x board
|
||||
rm -rf *
|
||||
cmake ${COMMON_OPTIONS} -DPCB=GRUVIN9X -DHELI=YES -DTEMPLATES=YES -DAUDIO=YES -DVOICE=YES ${SRCDIR}
|
||||
make -j${CORES} firmware
|
||||
make -j${CORES} ${FIRMARE_TARGET}
|
||||
make -j${CORES} simu
|
||||
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
|
||||
|
||||
# OpenTX on Sky9x
|
||||
rm -rf *
|
||||
cmake ${COMMON_OPTIONS} -DPCB=SKY9X -DHELI=YES ${SRCDIR}
|
||||
make -j${CORES} firmware
|
||||
make -j${CORES} ${FIRMARE_TARGET}
|
||||
make -j${CORES} simu
|
||||
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
|
||||
|
||||
# OpenTX on AR9X
|
||||
rm -rf *
|
||||
cmake ${COMMON_OPTIONS} -DPCB=AR9X -DHELI=YES ${SRCDIR}
|
||||
make -j${CORES} firmware
|
||||
make -j${CORES} ${FIRMARE_TARGET}
|
||||
make -j${CORES} simu
|
||||
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
|
||||
|
||||
# OpenTX on X7
|
||||
rm -rf *
|
||||
cmake ${COMMON_OPTIONS} -DPCB=X7 -DHELI=YES ${SRCDIR}
|
||||
make -j${CORES} firmware
|
||||
make -j${CORES} ${FIRMARE_TARGET}
|
||||
make -j${CORES} simu
|
||||
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
|
||||
|
||||
# OpenTX on X9D
|
||||
rm -rf *
|
||||
cmake ${COMMON_OPTIONS} -DPCB=X9D -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR}
|
||||
make -j${CORES} firmware
|
||||
make -j${CORES} ${FIRMARE_TARGET}
|
||||
make -j${CORES} simu
|
||||
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
|
||||
|
||||
# OpenTX on X9D+
|
||||
rm -rf *
|
||||
cmake ${COMMON_OPTIONS} -DPCB=X9D+ -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR}
|
||||
make -j${CORES} firmware
|
||||
make -j${CORES} ${FIRMARE_TARGET}
|
||||
make -j${CORES} simu
|
||||
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
|
||||
|
||||
# OpenTX on Taranis X9E
|
||||
rm -rf *
|
||||
cmake ${COMMON_OPTIONS} -DPCB=X9E -DHELI=YES -DLUA=YES -DGVARS=YES -DPPM_UNIT=PERCENT_PREC1 ${SRCDIR}
|
||||
make -j${CORES} firmware
|
||||
make -j${CORES} ${FIRMARE_TARGET}
|
||||
make -j${CORES} simu
|
||||
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
|
||||
|
||||
# OpenTX on Horus beta boards
|
||||
rm -rf *
|
||||
cmake ${COMMON_OPTIONS} -DPCB=HORUS -DPCBREV=10 -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR}
|
||||
make -j${CORES} firmware
|
||||
make -j${CORES} ${FIRMARE_TARGET}
|
||||
make -j${CORES} simu
|
||||
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
|
||||
|
||||
# OpenTX on Horus
|
||||
rm -rf *
|
||||
cmake ${COMMON_OPTIONS} -DPCB=HORUS -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR}
|
||||
make -j${CORES} firmware
|
||||
make -j${CORES} ${FIRMARE_TARGET}
|
||||
make -j${CORES} simu
|
||||
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue