@@ -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+ sizes_file=" $GITHUB_WORKSPACE /cli_compile_$chunk_index .json"
386+ if [ $log_compilation ]; then
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
@@ -389,4 +454,3 @@ case "$cmd" in
389454 echo " $USAGE "
390455 exit 2
391456esac
392-
0 commit comments