| 
									
										
										
										
											2017-01-28 13:09:20 +02:00
										 |  |  | #!/usr/bin/env bash
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function print_size_info() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     elf_file=$1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if [ -z "$elf_file" ]; then | 
					
						
							| 
									
										
										
										
											2017-01-28 14:09:00 +02:00
										 |  |  |         printf "sketch                       iram0.text flash.text flash.rodata dram0.data dram0.bss    dram     flash\n" | 
					
						
							| 
									
										
										
										
											2017-01-28 13:09:20 +02:00
										 |  |  |         return 0 | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     elf_name=$(basename $elf_file) | 
					
						
							|  |  |  |     sketch_name="${elf_name%.*}" | 
					
						
							|  |  |  |     # echo $sketch_name | 
					
						
							|  |  |  |     declare -A segments | 
					
						
							|  |  |  |     while read -a tokens; do | 
					
						
							|  |  |  |         seg=${tokens[0]} | 
					
						
							|  |  |  |         seg=${seg//./} | 
					
						
							|  |  |  |         size=${tokens[1]} | 
					
						
							|  |  |  |         addr=${tokens[2]} | 
					
						
							|  |  |  |         if [ "$addr" -eq "$addr" -a "$addr" -ne "0" ] 2>/dev/null; then | 
					
						
							|  |  |  |             segments[$seg]=$size | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |     done < <(xtensa-esp32-elf-size --format=sysv $elf_file) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-28 14:00:19 +02:00
										 |  |  |     total_ram=$((${segments[dram0data]} + ${segments[dram0bss]})) | 
					
						
							|  |  |  |     total_flash=$((${segments[iram0text]} + ${segments[flashtext]} + ${segments[dram0data]} + ${segments[flashrodata]})) | 
					
						
							| 
									
										
										
										
											2017-01-28 14:09:00 +02:00
										 |  |  |     printf "%-28s %-8d   %-8d   %-8d     %-8d   %-8d     %-8d %-8d\n" $sketch_name ${segments[iram0text]} ${segments[flashtext]} ${segments[flashrodata]} ${segments[dram0data]} ${segments[dram0bss]} $total_ram $total_flash | 
					
						
							| 
									
										
										
										
											2017-01-28 13:09:20 +02:00
										 |  |  |     return 0 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function build_sketches() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-02-05 19:58:27 +02:00
										 |  |  |     #set +e | 
					
						
							| 
									
										
										
										
											2017-01-28 13:09:20 +02:00
										 |  |  |     local arduino=$1 | 
					
						
							|  |  |  |     local srcpath=$2 | 
					
						
							|  |  |  |     local build_arg=$3 | 
					
						
							|  |  |  |     local build_dir=build.tmp | 
					
						
							|  |  |  |     mkdir -p $build_dir | 
					
						
							| 
									
										
										
										
											2017-01-28 13:19:30 +02:00
										 |  |  |     local build_cmd="python tools/build.py -b esp32 -v -k -p $PWD/$build_dir $build_arg " | 
					
						
							| 
									
										
										
										
											2017-01-28 13:09:20 +02:00
										 |  |  |     local sketches=$(find $srcpath -name *.ino) | 
					
						
							|  |  |  |     print_size_info >size.log | 
					
						
							|  |  |  |     export ARDUINO_IDE_PATH=$arduino | 
					
						
							|  |  |  |     for sketch in $sketches; do | 
					
						
							|  |  |  |         rm -rf $build_dir/* | 
					
						
							|  |  |  |         local sketchdir=$(dirname $sketch) | 
					
						
							|  |  |  |         local sketchdirname=$(basename $sketchdir) | 
					
						
							|  |  |  |         local sketchname=$(basename $sketch) | 
					
						
							|  |  |  |         if [[ "${sketchdirname}.ino" != "$sketchname" ]]; then | 
					
						
							|  |  |  |             echo "Skipping $sketch, beacause it is not the main sketch file"; | 
					
						
							|  |  |  |             continue | 
					
						
							|  |  |  |         fi; | 
					
						
							|  |  |  |         if [[ -f "$sketchdir/.test.skip" ]]; then | 
					
						
							|  |  |  |             echo -e "\n ------------ Skipping $sketch ------------ \n"; | 
					
						
							|  |  |  |             continue | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |         echo -e "\n ------------ Building $sketch ------------ \n"; | 
					
						
							|  |  |  |         # $arduino --verify $sketch; | 
					
						
							| 
									
										
										
										
											2017-02-05 19:58:27 +02:00
										 |  |  |         #echo "$build_cmd $sketch" | 
					
						
							| 
									
										
										
										
											2017-01-28 13:09:20 +02:00
										 |  |  |         time ($build_cmd $sketch >build.log) | 
					
						
							|  |  |  |         local result=$? | 
					
						
							|  |  |  |         if [ $result -ne 0 ]; then | 
					
						
							|  |  |  |             echo "Build failed ($1)" | 
					
						
							|  |  |  |             echo "Build log:" | 
					
						
							|  |  |  |             cat build.log | 
					
						
							|  |  |  |             return $result | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |         rm build.log | 
					
						
							|  |  |  |         print_size_info $build_dir/*.elf >>size.log | 
					
						
							|  |  |  |     done | 
					
						
							| 
									
										
										
										
											2017-02-05 19:58:27 +02:00
										 |  |  |     #set -e | 
					
						
							| 
									
										
										
										
											2017-01-28 13:09:20 +02:00
										 |  |  | } |