7e1a4940ac
Can start heater if high humidity Altitude reported to heater per BMP180 in OEM controllers. lowered min Hz limit to 500
220 lines
6.6 KiB
Bash
220 lines
6.6 KiB
Bash
#!/bin/bash
|
|
|
|
#OSTYPE: 'linux-gnu', ARCH: 'x86_64' => linux64
|
|
#OSTYPE: 'msys', ARCH: 'x86_64' => win32
|
|
#OSTYPE: 'darwin18', ARCH: 'i386' => macos
|
|
|
|
OSBITS=`arch`
|
|
if [[ "$OSTYPE" == "linux"* ]]; then
|
|
export OS_IS_LINUX="1"
|
|
ARCHIVE_FORMAT="tar.xz"
|
|
if [[ "$OSBITS" == "i686" ]]; then
|
|
OS_NAME="linux32"
|
|
elif [[ "$OSBITS" == "x86_64" ]]; then
|
|
OS_NAME="linux64"
|
|
elif [[ "$OSBITS" == "armv7l" || "$OSBITS" == "aarch64" ]]; then
|
|
OS_NAME="linuxarm"
|
|
else
|
|
OS_NAME="$OSTYPE-$OSBITS"
|
|
echo "Unknown OS '$OS_NAME'"
|
|
exit 1
|
|
fi
|
|
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
|
export OS_IS_MACOS="1"
|
|
ARCHIVE_FORMAT="zip"
|
|
OS_NAME="macosx"
|
|
elif [[ "$OSTYPE" == "cygwin" ]] || [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "win32" ]]; then
|
|
export OS_IS_WINDOWS="1"
|
|
ARCHIVE_FORMAT="zip"
|
|
OS_NAME="windows"
|
|
else
|
|
OS_NAME="$OSTYPE-$OSBITS"
|
|
echo "Unknown OS '$OS_NAME'"
|
|
exit 1
|
|
fi
|
|
export OS_NAME
|
|
|
|
ARDUINO_BUILD_DIR="$HOME/.arduino/build.tmp"
|
|
ARDUINO_CACHE_DIR="$HOME/.arduino/cache.tmp"
|
|
|
|
if [ "$OS_IS_MACOS" == "1" ]; then
|
|
export ARDUINO_IDE_PATH="/Applications/Arduino.app/Contents/Java"
|
|
export ARDUINO_USR_PATH="$HOME/Documents/Arduino"
|
|
elif [ "$OS_IS_WINDOWS" == "1" ]; then
|
|
export ARDUINO_IDE_PATH="$HOME/arduino_ide"
|
|
export ARDUINO_USR_PATH="$HOME/Documents/Arduino"
|
|
else
|
|
export ARDUINO_IDE_PATH="$HOME/arduino_ide"
|
|
export ARDUINO_USR_PATH="$HOME/Arduino"
|
|
fi
|
|
|
|
if [ ! -d "$ARDUINO_IDE_PATH" ]; then
|
|
echo "Installing Arduino IDE on $OS_NAME ..."
|
|
echo "Downloading 'arduino-nightly-$OS_NAME.$ARCHIVE_FORMAT' to 'arduino.$ARCHIVE_FORMAT' ..."
|
|
if [ "$OS_IS_LINUX" == "1" ]; then
|
|
wget -O "arduino.$ARCHIVE_FORMAT" "https://www.arduino.cc/download.php?f=/arduino-nightly-$OS_NAME.$ARCHIVE_FORMAT" > /dev/null 2>&1
|
|
echo "Extracting 'arduino.$ARCHIVE_FORMAT' ..."
|
|
tar xf "arduino.$ARCHIVE_FORMAT" > /dev/null
|
|
mv arduino-nightly "$ARDUINO_IDE_PATH"
|
|
else
|
|
curl -o "arduino.$ARCHIVE_FORMAT" -L "https://www.arduino.cc/download.php?f=/arduino-nightly-$OS_NAME.$ARCHIVE_FORMAT" > /dev/null 2>&1
|
|
echo "Extracting 'arduino.$ARCHIVE_FORMAT' ..."
|
|
unzip "arduino.$ARCHIVE_FORMAT" > /dev/null
|
|
if [ "$OS_IS_MACOS" == "1" ]; then
|
|
mv "Arduino.app" "/Applications/Arduino.app"
|
|
else
|
|
mv arduino-nightly "$ARDUINO_IDE_PATH"
|
|
fi
|
|
fi
|
|
rm -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 ""
|
|
fi
|
|
|
|
function build_sketch(){ # build_sketch <fqbn> <path-to-ino> [extra-options]
|
|
if [ "$#" -lt 2 ]; then
|
|
echo "ERROR: Illegal number of parameters"
|
|
echo "USAGE: build_sketch <fqbn> <path-to-ino> [extra-options]"
|
|
return 1
|
|
fi
|
|
|
|
local fqbn="$1"
|
|
local sketch="$2"
|
|
local xtra_opts="$3"
|
|
local win_opts=""
|
|
if [ "$OS_IS_WINDOWS" == "1" ]; then
|
|
local 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"
|
|
fi
|
|
|
|
echo ""
|
|
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.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_sketches() # build_sketches <fqbn> <examples-path> <chunk> <total-chunks> [extra-options]
|
|
{
|
|
local fqbn=$1
|
|
local examples=$2
|
|
local chunk_idex=$3
|
|
local chunks_num=$4
|
|
local xtra_opts=$5
|
|
|
|
if [ "$#" -lt 2 ]; then
|
|
echo "ERROR: Illegal number of parameters"
|
|
echo "USAGE: build_sketches <fqbn> <examples-path> [<chunk> <total-chunks>] [extra-options]"
|
|
return 1
|
|
fi
|
|
|
|
if [ "$#" -lt 4 ]; then
|
|
chunk_idex="0"
|
|
chunks_num="1"
|
|
xtra_opts=$3
|
|
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_sketch "$fqbn" "$sketch" "$xtra_opts"
|
|
local result=$?
|
|
if [ $result -ne 0 ]; then
|
|
return $result
|
|
fi
|
|
done
|
|
return 0
|
|
}
|