Skip to content

Commit 64706c8

Browse files
committed
Add compilation log to the build scripts
1 parent ff95b59 commit 64706c8

File tree

2 files changed

+100
-12
lines changed

2 files changed

+100
-12
lines changed

.github/scripts/on-push.sh

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ function build(){
99
local fqbn=$2
1010
local chunk_index=$3
1111
local chunks_cnt=$4
12-
shift; shift; shift; shift;
12+
local build_log=$5
13+
shift; shift; shift; shift; shift;
1314
local sketches=$*
1415

1516
local BUILD_SKETCH="${SCRIPTS_DIR}/sketch_utils.sh build"
@@ -22,6 +23,9 @@ function build(){
2223
if [ "$OS_IS_LINUX" == "1" ]; then
2324
args+=" -p $ARDUINO_ESP32_PATH/libraries"
2425
args+=" -i $chunk_index -m $chunks_cnt"
26+
if [ $build_log -eq 1 ]; then
27+
args+=" -l $build_log"
28+
fi
2529
${BUILD_SKETCHES} ${args}
2630
else
2731
for sketch in ${sketches}; do
@@ -45,6 +49,7 @@ fi
4549

4650
CHUNK_INDEX=$1
4751
CHUNKS_CNT=$2
52+
BUILD_LOG=$3
4853
BUILD_PIO=0
4954
if [ "$#" -lt 2 ] || [ "$CHUNKS_CNT" -le 0 ]; then
5055
CHUNK_INDEX=0
@@ -55,6 +60,10 @@ elif [ "$CHUNK_INDEX" -eq "$CHUNKS_CNT" ]; then
5560
BUILD_PIO=1
5661
fi
5762

63+
if [ "$BUILD_LOG" -le 0 ]; then
64+
BUILD_LOG=0
65+
fi
66+
5867
#echo "Updating submodules ..."
5968
#git -C "$GITHUB_WORKSPACE" submodule update --init --recursive > /dev/null 2>&1
6069

@@ -77,13 +86,28 @@ if [ "$BUILD_PIO" -eq 0 ]; then
7786
$ARDUINO_ESP32_PATH/libraries/ESP32/examples/Camera/CameraWebServer/CameraWebServer.ino\
7887
$ARDUINO_ESP32_PATH/libraries/Insights/examples/MinimalDiagnostics/MinimalDiagnostics.ino\
7988
"
89+
#create sizes_file
90+
sizes_file="$GITHUB_WORKSPACE/cli_compile_$CHUNK_INDEX.json"
91+
92+
if [ "$BUILD_LOG" -eq 1 ]; then
93+
#create sizes_file and echo start of JSON array with "boards" key
94+
echo "{\"boards\": [" > $sizes_file
95+
fi
8096

81-
build "esp32s3" $FQBN_ESP32S3 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32
82-
build "esp32s2" $FQBN_ESP32S2 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32
83-
build "esp32c3" $FQBN_ESP32C3 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32
84-
build "esp32c6" $FQBN_ESP32C6 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32
85-
build "esp32h2" $FQBN_ESP32H2 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32
86-
build "esp32" $FQBN_ESP32 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32
97+
#build sketches for different targets
98+
build "esp32s3" $FQBN_ESP32S3 $CHUNK_INDEX $CHUNKS_CNT $BUILD_LOG $SKETCHES_ESP32
99+
build "esp32s2" $FQBN_ESP32S2 $CHUNK_INDEX $CHUNKS_CNT $BUILD_LOG $SKETCHES_ESP32
100+
build "esp32c3" $FQBN_ESP32C3 $CHUNK_INDEX $CHUNKS_CNT $BUILD_LOG $SKETCHES_ESP32
101+
build "esp32c6" $FQBN_ESP32C6 $CHUNK_INDEX $CHUNKS_CNT $BUILD_LOG $SKETCHES_ESP32
102+
build "esp32h2" $FQBN_ESP32H2 $CHUNK_INDEX $CHUNKS_CNT $BUILD_LOG $SKETCHES_ESP32
103+
build "esp32" $FQBN_ESP32 $CHUNK_INDEX $CHUNKS_CNT $BUILD_LOG $SKETCHES_ESP32
104+
105+
if [ "$BUILD_LOG" -eq 1 ]; then
106+
#remove last comma from the last JSON object
107+
sed -i '$ s/.$//' "$sizes_file"
108+
#echo end of JSON array
109+
echo "]}" >> $sizes_file
110+
fi
87111
else
88112
source ${SCRIPTS_DIR}/install-platformio-esp32.sh
89113
# PlatformIO ESP32 Test
@@ -102,4 +126,4 @@ else
102126
done
103127

104128
#build_pio_sketches "$BOARD" "$OPTIONS" "$PLATFORMIO_ESP32_PATH/libraries"
105-
fi
129+
fi

.github/scripts/sketch_utils.sh

Lines changed: 68 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex
2727
shift
2828
sketchdir=$1
2929
;;
30+
-i )
31+
shift
32+
chunk_index=$1
33+
;;
34+
-l )
35+
shift
36+
log_compilation=$1
37+
;;
3038
* )
3139
break
3240
;;
@@ -140,6 +148,9 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex
140148
build_dir="$HOME/.arduino/tests/$sketchname/build.tmp"
141149
fi
142150

151+
output_file="$HOME/.arduino/cli_compile_output.txt"
152+
sizes_file="$GITHUB_WORKSPACE/cli_compile_$chunk_index.json"
153+
143154
mkdir -p "$ARDUINO_CACHE_DIR"
144155
for i in `seq 0 $(($len - 1))`
145156
do
@@ -164,13 +175,39 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex
164175
--build-property "compiler.warning_flags.all=-Wall -Werror=all -Wextra" \
165176
--build-cache-path "$ARDUINO_CACHE_DIR" \
166177
--build-path "$build_dir" \
167-
$xtra_opts "${sketchdir}"
178+
$xtra_opts "${sketchdir}" \
179+
> $output_file
168180

169181
exit_status=$?
170182
if [ $exit_status -ne 0 ]; then
171183
echo ""ERROR: Compilation failed with error code $exit_status""
172184
exit $exit_status
173185
fi
186+
187+
if [ $log_compilation ]; then
188+
#Extract the program storage space and dynamic memory usage in bytes and percentage in separate variables from the output, just the value without the string
189+
flash_bytes=$(grep -oE 'Sketch uses ([0-9]+) bytes' $output_file | awk '{print $3}')
190+
flash_percentage=$(grep -oE 'Sketch uses ([0-9]+) bytes \(([0-9]+)%\)' $output_file | awk '{print $5}' | tr -d '(%)')
191+
ram_bytes=$(grep -oE 'Global variables use ([0-9]+) bytes' $output_file | awk '{print $4}')
192+
ram_percentage=$(grep -oE 'Global variables use ([0-9]+) bytes \(([0-9]+)%\)' $output_file | awk '{print $6}' | tr -d '(%)')
193+
194+
# Extract the directory path excluding the filename
195+
directory_path=$(dirname "$sketch")
196+
# Define the constant part
197+
constant_part="/home/runner/Arduino/hardware/espressif/esp32/libraries/"
198+
# Extract the desired substring using sed
199+
lib_sketch_name=$(echo "$directory_path" | sed "s|$constant_part||")
200+
#append json file where key is fqbn, sketch name, sizes -> extracted values
201+
echo "{\"name\": \"$lib_sketch_name\",
202+
\"sizes\": [{
203+
\"flash_bytes\": $flash_bytes,
204+
\"flash_percentage\": $flash_percentage,
205+
\"ram_bytes\": $ram_bytes,
206+
\"ram_percentage\": $ram_percentage
207+
}]
208+
}," >> "$sizes_file"
209+
fi
210+
174211
elif [ -f "$ide_path/arduino-builder" ]; then
175212
echo "Building $sketchname with arduino-builder and FQBN=$currfqbn"
176213
echo "Build path = $build_dir"
@@ -204,6 +241,7 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex
204241
# $xtra_opts "${sketchdir}/${sketchname}.ino"
205242
fi
206243
done
244+
207245
unset fqbn
208246
unset xtra_opts
209247
unset options
@@ -277,6 +315,10 @@ function build_sketches(){ # build_sketches <ide_path> <user_path> <target> <pat
277315
shift
278316
chunk_max=$1
279317
;;
318+
-l )
319+
shift
320+
log_compilation=$1
321+
;;
280322
* )
281323
break
282324
;;
@@ -340,8 +382,19 @@ function build_sketches(){ # build_sketches <ide_path> <user_path> <target> <pat
340382
echo "Start Sketch: $start_num"
341383
echo "End Sketch : $end_index"
342384

385+
if [ $log_compilation ]; then
386+
sizes_file="$GITHUB_WORKSPACE/cli_compile_$chunk_index.json"
387+
#echo board,target and start of sketches to sizes_file json
388+
echo "{ \"board\": \"$fqbn\",
389+
\"target\": \"$target\",
390+
\"sketches\": [" >> "$sizes_file"
391+
fi
392+
343393
local sketchnum=0
344-
args+=" -ai $ide_path -au $user_path"
394+
args+=" -ai $ide_path -au $user_path -i $chunk_index"
395+
if [ $log_compilation ]; then
396+
args+=" -l $log_compilation"
397+
fi
345398
for sketch in $sketches; do
346399
local sketchdir=$(dirname $sketch)
347400
local sketchdirname=$(basename $sketchdir)
@@ -358,6 +411,18 @@ function build_sketches(){ # build_sketches <ide_path> <user_path> <target> <pat
358411
return $result
359412
fi
360413
done
414+
415+
if [ $log_compilation ]; then
416+
#remove last comma from json
417+
if [ $i -eq $(($len - 1)) ]; then
418+
sed -i '$ s/.$//' "$sizes_file"
419+
fi
420+
#echo end of sketches sizes_file json
421+
echo "]" >> "$sizes_file"
422+
#echo end of board sizes_file json
423+
echo "}," >> "$sizes_file"
424+
fi
425+
361426
return 0
362427
}
363428

@@ -388,5 +453,4 @@ case "$cmd" in
388453
echo "ERROR: Unrecognized command"
389454
echo "$USAGE"
390455
exit 2
391-
esac
392-
456+
esac

0 commit comments

Comments
 (0)