You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
3.6 KiB
133 lines
3.6 KiB
#!/bin/bash |
|
|
|
echo "Installing Python Wheel ..." |
|
pip install wheel > /dev/null 2>&1 |
|
|
|
echo "Installing PlatformIO ..." |
|
pip install -U platformio > /dev/null 2>&1 |
|
|
|
echo "PlatformIO has been installed" |
|
echo "" |
|
|
|
|
|
function build_pio_sketch(){ # build_pio_sketch <board> <path-to-ino> |
|
if [ "$#" -lt 2 ]; then |
|
echo "ERROR: Illegal number of parameters" |
|
echo "USAGE: build_pio_sketch <board> <path-to-ino>" |
|
return 1 |
|
fi |
|
|
|
local board="$1" |
|
local sketch="$2" |
|
local sketch_dir=$(dirname "$sketch") |
|
echo "" |
|
echo "Compiling '"$(basename "$sketch")"' ..." |
|
python -m platformio ci -l '.' --board "$board" "$sketch_dir" --project-option="board_build.partitions = huge_app.csv" |
|
} |
|
|
|
function count_sketches() # count_sketches <examples-path> |
|
{ |
|
local examples="$1" |
|
rm -rf sketches.txt |
|
if [ ! -d "$examples" ]; then |
|
touch sketches.txt |
|
return 0 |
|
fi |
|
local sketches=$(find $examples -name *.ino) |
|
local sketchnum=0 |
|
for sketch in $sketches; do |
|
local sketchdir=$(dirname $sketch) |
|
local sketchdirname=$(basename $sketchdir) |
|
local sketchname=$(basename $sketch) |
|
if [[ "${sketchdirname}.ino" != "$sketchname" ]]; then |
|
continue |
|
fi; |
|
if [[ -f "$sketchdir/.test.skip" ]]; then |
|
continue |
|
fi |
|
echo $sketch >> sketches.txt |
|
sketchnum=$(($sketchnum + 1)) |
|
done |
|
return $sketchnum |
|
} |
|
|
|
function build_pio_sketches() # build_pio_sketches <board> <examples-path> <chunk> <total-chunks> |
|
{ |
|
if [ "$#" -lt 2 ]; then |
|
echo "ERROR: Illegal number of parameters" |
|
echo "USAGE: build_pio_sketches <board> <examples-path> [<chunk> <total-chunks>]" |
|
return 1 |
|
fi |
|
|
|
local board=$1 |
|
local examples=$2 |
|
local chunk_idex=$3 |
|
local chunks_num=$4 |
|
|
|
if [ "$#" -lt 4 ]; then |
|
chunk_idex="0" |
|
chunks_num="1" |
|
fi |
|
|
|
if [ "$chunks_num" -le 0 ]; then |
|
echo "ERROR: Chunks count must be positive number" |
|
return 1 |
|
fi |
|
if [ "$chunk_idex" -ge "$chunks_num" ]; then |
|
echo "ERROR: Chunk index must be less than chunks count" |
|
return 1 |
|
fi |
|
|
|
set +e |
|
count_sketches "$examples" |
|
local sketchcount=$? |
|
set -e |
|
local sketches=$(cat sketches.txt) |
|
rm -rf sketches.txt |
|
|
|
local chunk_size=$(( $sketchcount / $chunks_num )) |
|
local all_chunks=$(( $chunks_num * $chunk_size )) |
|
if [ "$all_chunks" -lt "$sketchcount" ]; then |
|
chunk_size=$(( $chunk_size + 1 )) |
|
fi |
|
|
|
local start_index=$(( $chunk_idex * $chunk_size )) |
|
if [ "$sketchcount" -le "$start_index" ]; then |
|
echo "Skipping job" |
|
return 0 |
|
fi |
|
|
|
local end_index=$(( $(( $chunk_idex + 1 )) * $chunk_size )) |
|
if [ "$end_index" -gt "$sketchcount" ]; then |
|
end_index=$sketchcount |
|
fi |
|
|
|
local start_num=$(( $start_index + 1 )) |
|
echo "Found $sketchcount Sketches"; |
|
echo "Chunk Count : $chunks_num" |
|
echo "Chunk Size : $chunk_size" |
|
echo "Start Sketch: $start_num" |
|
echo "End Sketch : $end_index" |
|
|
|
local sketchnum=0 |
|
for sketch in $sketches; do |
|
local sketchdir=$(dirname $sketch) |
|
local sketchdirname=$(basename $sketchdir) |
|
local sketchname=$(basename $sketch) |
|
if [ "${sketchdirname}.ino" != "$sketchname" ] \ |
|
|| [ -f "$sketchdir/.test.skip" ]; then |
|
continue |
|
fi |
|
sketchnum=$(($sketchnum + 1)) |
|
if [ "$sketchnum" -le "$start_index" ] \ |
|
|| [ "$sketchnum" -gt "$end_index" ]; then |
|
continue |
|
fi |
|
build_pio_sketch "$board" "$sketch" |
|
local result=$? |
|
if [ $result -ne 0 ]; then |
|
return $result |
|
fi |
|
done |
|
return 0 |
|
}
|
|
|