Blame | Last modification | View Log | RSS feed
#!/bin/bash#OSTYPE: 'linux-gnu', ARCH: 'x86_64' => linux64#OSTYPE: 'msys', ARCH: 'x86_64' => win32#OSTYPE: 'darwin18', ARCH: 'i386' => macosOSBITS=`arch`if [[ "$OSTYPE" == "linux"* ]]; thenexport OS_IS_LINUX="1"ARCHIVE_FORMAT="tar.xz"if [[ "$OSBITS" == "i686" ]]; thenOS_NAME="linux32"elif [[ "$OSBITS" == "x86_64" ]]; thenOS_NAME="linux64"elif [[ "$OSBITS" == "armv7l" || "$OSBITS" == "aarch64" ]]; thenOS_NAME="linuxarm"elseOS_NAME="$OSTYPE-$OSBITS"echo "Unknown OS '$OS_NAME'"exit 1fielif [[ "$OSTYPE" == "darwin"* ]]; thenexport OS_IS_MACOS="1"ARCHIVE_FORMAT="zip"OS_NAME="macosx"elif [[ "$OSTYPE" == "cygwin" ]] || [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "win32" ]]; thenexport OS_IS_WINDOWS="1"ARCHIVE_FORMAT="zip"OS_NAME="windows"elseOS_NAME="$OSTYPE-$OSBITS"echo "Unknown OS '$OS_NAME'"exit 1fiexport OS_NAMEARDUINO_BUILD_DIR="$HOME/.arduino/build.tmp"ARDUINO_CACHE_DIR="$HOME/.arduino/cache.tmp"if [ "$OS_IS_MACOS" == "1" ]; thenexport ARDUINO_IDE_PATH="/Applications/Arduino.app/Contents/Java"export ARDUINO_USR_PATH="$HOME/Documents/Arduino"elif [ "$OS_IS_WINDOWS" == "1" ]; thenexport ARDUINO_IDE_PATH="$HOME/arduino_ide"export ARDUINO_USR_PATH="$HOME/Documents/Arduino"elseexport ARDUINO_IDE_PATH="$HOME/arduino_ide"export ARDUINO_USR_PATH="$HOME/Arduino"fiif [ ! -d "$ARDUINO_IDE_PATH" ]; thenecho "Installing Arduino IDE on $OS_NAME ..."echo "Downloading 'arduino-nightly-$OS_NAME.$ARCHIVE_FORMAT' to 'arduino.$ARCHIVE_FORMAT' ..."if [ "$OS_IS_LINUX" == "1" ]; thenwget -O "arduino.$ARCHIVE_FORMAT" "https://www.arduino.cc/download.php?f=/arduino-nightly-$OS_NAME.$ARCHIVE_FORMAT" > /dev/null 2>&1echo "Extracting 'arduino.$ARCHIVE_FORMAT' ..."tar xf "arduino.$ARCHIVE_FORMAT" > /dev/nullmv arduino-nightly "$ARDUINO_IDE_PATH"elsecurl -o "arduino.$ARCHIVE_FORMAT" -L "https://www.arduino.cc/download.php?f=/arduino-nightly-$OS_NAME.$ARCHIVE_FORMAT" > /dev/null 2>&1echo "Extracting 'arduino.$ARCHIVE_FORMAT' ..."unzip "arduino.$ARCHIVE_FORMAT" > /dev/nullif [ "$OS_IS_MACOS" == "1" ]; thenmv "Arduino.app" "/Applications/Arduino.app"elsemv arduino-nightly "$ARDUINO_IDE_PATH"fifirm -rf "arduino.$ARCHIVE_FORMAT"mkdir -p "$ARDUINO_USR_PATH/libraries"mkdir -p "$ARDUINO_USR_PATH/hardware"echo "Arduino IDE Installed in '$ARDUINO_IDE_PATH'"echo ""fifunction build_sketch(){ # build_sketch <fqbn> <path-to-ino> [extra-options]if [ "$#" -lt 2 ]; thenecho "ERROR: Illegal number of parameters"echo "USAGE: build_sketch <fqbn> <path-to-ino> [extra-options]"return 1filocal fqbn="$1"local sketch="$2"local xtra_opts="$3"local win_opts=""if [ "$OS_IS_WINDOWS" == "1" ]; thenlocal ctags_version=`ls "$ARDUINO_IDE_PATH/tools-builder/ctags/"`local preprocessor_version=`ls "$ARDUINO_IDE_PATH/tools-builder/arduino-preprocessor/"`win_opts="-prefs=runtime.tools.ctags.path=$ARDUINO_IDE_PATH/tools-builder/ctags/$ctags_version -prefs=runtime.tools.arduino-preprocessor.path=$ARDUINO_IDE_PATH/tools-builder/arduino-preprocessor/$preprocessor_version"fiecho ""echo "Compiling '"$(basename "$sketch")"' ..."mkdir -p "$ARDUINO_BUILD_DIR"mkdir -p "$ARDUINO_CACHE_DIR"$ARDUINO_IDE_PATH/arduino-builder -compile -logger=human -core-api-version=10810 \-fqbn=$fqbn \-warnings="all" \-tools "$ARDUINO_IDE_PATH/tools-builder" \-tools "$ARDUINO_IDE_PATH/tools" \-built-in-libraries "$ARDUINO_IDE_PATH/libraries" \-hardware "$ARDUINO_IDE_PATH/hardware" \-hardware "$ARDUINO_USR_PATH/hardware" \-libraries "$ARDUINO_USR_PATH/libraries" \-build-cache "$ARDUINO_CACHE_DIR" \-build-path "$ARDUINO_BUILD_DIR" \$win_opts $xtra_opts "$sketch"}function count_sketches() # count_sketches <examples-path>{local examples="$1"rm -rf sketches.txtif [ ! -d "$examples" ]; thentouch sketches.txtreturn 0filocal sketches=$(find $examples -name *.ino)local sketchnum=0for sketch in $sketches; dolocal sketchdir=$(dirname $sketch)local sketchdirname=$(basename $sketchdir)local sketchname=$(basename $sketch)if [[ "${sketchdirname}.ino" != "$sketchname" ]]; thencontinuefi;if [[ -f "$sketchdir/.test.skip" ]]; thencontinuefiecho $sketch >> sketches.txtsketchnum=$(($sketchnum + 1))donereturn $sketchnum}function build_sketches() # build_sketches <fqbn> <examples-path> <chunk> <total-chunks> [extra-options]{local fqbn=$1local examples=$2local chunk_idex=$3local chunks_num=$4local xtra_opts=$5if [ "$#" -lt 2 ]; thenecho "ERROR: Illegal number of parameters"echo "USAGE: build_sketches <fqbn> <examples-path> [<chunk> <total-chunks>] [extra-options]"return 1fiif [ "$#" -lt 4 ]; thenchunk_idex="0"chunks_num="1"xtra_opts=$3fiif [ "$chunks_num" -le 0 ]; thenecho "ERROR: Chunks count must be positive number"return 1fiif [ "$chunk_idex" -ge "$chunks_num" ]; thenecho "ERROR: Chunk index must be less than chunks count"return 1fiset +ecount_sketches "$examples"local sketchcount=$?set -elocal sketches=$(cat sketches.txt)rm -rf sketches.txtlocal chunk_size=$(( $sketchcount / $chunks_num ))local all_chunks=$(( $chunks_num * $chunk_size ))if [ "$all_chunks" -lt "$sketchcount" ]; thenchunk_size=$(( $chunk_size + 1 ))filocal start_index=$(( $chunk_idex * $chunk_size ))if [ "$sketchcount" -le "$start_index" ]; thenecho "Skipping job"return 0filocal end_index=$(( $(( $chunk_idex + 1 )) * $chunk_size ))if [ "$end_index" -gt "$sketchcount" ]; thenend_index=$sketchcountfilocal 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=0for sketch in $sketches; dolocal sketchdir=$(dirname $sketch)local sketchdirname=$(basename $sketchdir)local sketchname=$(basename $sketch)if [ "${sketchdirname}.ino" != "$sketchname" ] \|| [ -f "$sketchdir/.test.skip" ]; thencontinuefisketchnum=$(($sketchnum + 1))if [ "$sketchnum" -le "$start_index" ] \|| [ "$sketchnum" -gt "$end_index" ]; thencontinuefibuild_sketch "$fqbn" "$sketch" "$xtra_opts"local result=$?if [ $result -ne 0 ]; thenreturn $resultfidonereturn 0}