install-platformio.sh 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #!/bin/bash
  2. echo "Installing Python Wheel ..."
  3. pip install wheel > /dev/null 2>&1
  4. echo "Installing PlatformIO ..."
  5. pip install -U platformio > /dev/null 2>&1
  6. echo "PlatformIO has been installed"
  7. echo ""
  8. function build_pio_sketch(){ # build_pio_sketch <board> <path-to-ino> <build-flags>
  9. if [ "$#" -lt 3 ]; then
  10. echo "ERROR: Illegal number of parameters"
  11. echo "USAGE: build_pio_sketch <board> <path-to-ino> <build-flags>"
  12. return 1
  13. fi
  14. local board="$1"
  15. local sketch="$2"
  16. local buildFlags="$3"
  17. local sketch_dir=$(dirname "$sketch")
  18. echo ""
  19. echo "Compiling '"$(basename "$sketch")"' ..."
  20. python -m platformio ci -l '.' --board "$board" "$sketch_dir" --project-option="board_build.partitions = huge_app.csv" --project-option="build_flags=$buildFlags"
  21. }
  22. function count_sketches() # count_sketches <examples-path>
  23. {
  24. local examples="$1"
  25. rm -rf sketches.txt
  26. if [ ! -d "$examples" ]; then
  27. touch sketches.txt
  28. return 0
  29. fi
  30. local sketches=$(find $examples -name *.ino)
  31. local sketchnum=0
  32. for sketch in $sketches; do
  33. local sketchdir=$(dirname $sketch)
  34. local sketchdirname=$(basename $sketchdir)
  35. local sketchname=$(basename $sketch)
  36. if [[ "${sketchdirname}.ino" != "$sketchname" ]]; then
  37. continue
  38. fi;
  39. if [[ -f "$sketchdir/.test.skip" ]]; then
  40. continue
  41. fi
  42. echo $sketch >> sketches.txt
  43. sketchnum=$(($sketchnum + 1))
  44. done
  45. return $sketchnum
  46. }
  47. function build_pio_sketches() # build_pio_sketches <board> <examples-path> <chunk> <total-chunks>
  48. {
  49. if [ "$#" -lt 2 ]; then
  50. echo "ERROR: Illegal number of parameters"
  51. echo "USAGE: build_pio_sketches <board> <examples-path> [<chunk> <total-chunks>]"
  52. return 1
  53. fi
  54. local board=$1
  55. local examples=$2
  56. local chunk_idex=$3
  57. local chunks_num=$4
  58. if [ "$#" -lt 4 ]; then
  59. chunk_idex="0"
  60. chunks_num="1"
  61. fi
  62. if [ "$chunks_num" -le 0 ]; then
  63. echo "ERROR: Chunks count must be positive number"
  64. return 1
  65. fi
  66. if [ "$chunk_idex" -ge "$chunks_num" ]; then
  67. echo "ERROR: Chunk index must be less than chunks count"
  68. return 1
  69. fi
  70. set +e
  71. count_sketches "$examples"
  72. local sketchcount=$?
  73. set -e
  74. local sketches=$(cat sketches.txt)
  75. rm -rf sketches.txt
  76. local chunk_size=$(( $sketchcount / $chunks_num ))
  77. local all_chunks=$(( $chunks_num * $chunk_size ))
  78. if [ "$all_chunks" -lt "$sketchcount" ]; then
  79. chunk_size=$(( $chunk_size + 1 ))
  80. fi
  81. local start_index=$(( $chunk_idex * $chunk_size ))
  82. if [ "$sketchcount" -le "$start_index" ]; then
  83. echo "Skipping job"
  84. return 0
  85. fi
  86. local end_index=$(( $(( $chunk_idex + 1 )) * $chunk_size ))
  87. if [ "$end_index" -gt "$sketchcount" ]; then
  88. end_index=$sketchcount
  89. fi
  90. local start_num=$(( $start_index + 1 ))
  91. echo "Found $sketchcount Sketches";
  92. echo "Chunk Count : $chunks_num"
  93. echo "Chunk Size : $chunk_size"
  94. echo "Start Sketch: $start_num"
  95. echo "End Sketch : $end_index"
  96. local sketchnum=0
  97. for sketch in $sketches; do
  98. local sketchdir=$(dirname $sketch)
  99. local sketchdirname=$(basename $sketchdir)
  100. local sketchname=$(basename $sketch)
  101. if [ "${sketchdirname}.ino" != "$sketchname" ] \
  102. || [ -f "$sketchdir/.test.skip" ]; then
  103. continue
  104. fi
  105. local sketchBuildFlags=""
  106. if [ -f "$sketchdir/.test.build_flags" ]; then
  107. while read line; do
  108. sketchBuildFlags="$sketchBuildFlags $line"
  109. done < "$sketchdir/.test.build_flags"
  110. fi
  111. sketchnum=$(($sketchnum + 1))
  112. if [ "$sketchnum" -le "$start_index" ] \
  113. || [ "$sketchnum" -gt "$end_index" ]; then
  114. continue
  115. fi
  116. build_pio_sketch "$board" "$sketch" "$sketchBuildFlags"
  117. local result=$?
  118. if [ $result -ne 0 ]; then
  119. return $result
  120. fi
  121. done
  122. return 0
  123. }