#!/bin/bash
|
|
set -e
|
|
|
|
# defaults
|
|
|
|
script_build_environments=true
|
|
script_build_webui=true
|
|
script_build_release=false
|
|
|
|
destination=../firmware
|
|
release_args=""
|
|
|
|
# ALL env: sections from the .ini, even including those we don't want to build
|
|
list_all_envs() {
|
|
grep -E '^\[env:' platformio.ini | sed 's/\[env:\(.*\)\]/\1/g'
|
|
}
|
|
|
|
# -base is only supposed to be used through `extends = ...-base` for another env:
|
|
# -ssl / -secure-client hard-code certificates, so not very useful to distribute those
|
|
# -ota is a legacy option to conditionally load upload args, no longer needed
|
|
list_available_envs() {
|
|
list_all_envs | grep -Ev -- '-ota$|-ssl$|-secure-client.*$|^esp8266-.*base$' | sort
|
|
}
|
|
|
|
print_available() {
|
|
echo "--------------------------------------------------------------"
|
|
echo "Available environments:"
|
|
for environment in $(list_available_envs); do
|
|
echo "* $environment"
|
|
done
|
|
}
|
|
|
|
set_default_environments() {
|
|
environments=$(list_available_envs)
|
|
}
|
|
|
|
build_webui() {
|
|
# Build system uses gulpscript.js to build web interface
|
|
if [ ! -e node_modules/gulp/bin/gulp.js ]; then
|
|
echo "--------------------------------------------------------------"
|
|
echo "Installing dependencies..."
|
|
npm ci
|
|
fi
|
|
|
|
# Recreate web interface (espurna/data/index.html.*.gz.h)
|
|
echo "--------------------------------------------------------------"
|
|
echo "Building web interface..."
|
|
node node_modules/gulp/bin/gulp.js || exit
|
|
}
|
|
|
|
build_release() {
|
|
echo "--------------------------------------------------------------"
|
|
echo "Building release images..."
|
|
|
|
set -x
|
|
python scripts/generate_release_sh.py $release_args > release.sh
|
|
bash release.sh
|
|
set +x
|
|
|
|
echo "--------------------------------------------------------------"
|
|
}
|
|
|
|
build_environments() {
|
|
echo "--------------------------------------------------------------"
|
|
echo "Building environment images..."
|
|
|
|
local environments=$@
|
|
if [ $# -eq 0 ]; then
|
|
environments=$(list_available_envs)
|
|
fi
|
|
|
|
set -x
|
|
for environment in $environments; do
|
|
env ESPURNA_BUILD_NAME=$environment \
|
|
ESPURNA_BUILD_DESTINATION="$destination" \
|
|
ESPURNA_BUILD_SINGLE_SOURCE="1" \
|
|
pio run --silent --environment $environment -t build-and-copy
|
|
done
|
|
set +x
|
|
|
|
echo "--------------------------------------------------------------"
|
|
}
|
|
|
|
# Parameters
|
|
print_getopts_help() {
|
|
cat <<EOF
|
|
Usage: $(basename "$0") [OPTION] <ENVIRONMENT>...
|
|
|
|
Where ENVIRONMENT is environment name(s) from platformio.ini
|
|
|
|
Options:
|
|
|
|
-f VALUE Filter build stage by name to skip it
|
|
Supported VALUEs are "environments" and "webui"
|
|
Can be specified multiple times.
|
|
-r Release mode. Instead of building specified environments,
|
|
build every available one with an external script (ref. scripts/generate_release_sh.py)
|
|
-a When in 'Release mode', append the string to the builder script arguments list
|
|
-l Print available environments
|
|
-d VALUE Destination to move the .bin file after building the environment
|
|
-h Display this message
|
|
EOF
|
|
}
|
|
|
|
while getopts "f:lra:pd:h" opt; do
|
|
case $opt in
|
|
f)
|
|
case "$OPTARG" in
|
|
webui) script_build_webui=false ;;
|
|
environments) script_build_environments=false ;;
|
|
*)
|
|
echo Must be either webui or environments
|
|
exit
|
|
;;
|
|
esac
|
|
;;
|
|
l)
|
|
print_available
|
|
exit
|
|
;;
|
|
d)
|
|
destination=$OPTARG
|
|
;;
|
|
r)
|
|
script_build_environments=false
|
|
script_build_release=true
|
|
;;
|
|
a)
|
|
if ! $script_build_release ; then
|
|
echo Must be in release mode to append arguments
|
|
exit 1
|
|
fi
|
|
release_args="$release_args $OPTARG"
|
|
;;
|
|
h)
|
|
print_getopts_help
|
|
exit
|
|
esac
|
|
done
|
|
|
|
shift $((OPTIND-1))
|
|
|
|
# Welcome
|
|
echo "--------------------------------------------------------------"
|
|
echo "ESPURNA FIRMWARE BUILDER"
|
|
|
|
if $script_build_webui ; then
|
|
build_webui
|
|
fi
|
|
|
|
if $script_build_release ; then
|
|
build_release
|
|
elif $script_build_environments ; then
|
|
build_environments $@
|
|
fi
|