Add ino
parent
beb424e6dc
commit
2eb3aa45c5
@ -0,0 +1,136 @@
|
||||
#!/usr/bin/env -S bash -e
|
||||
#
|
||||
# Copyright 2021 Nathan L. Conrad
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it under
|
||||
# the terms of version 3 of the GNU General Public License as published by the
|
||||
# Free Software Foundation.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
# details.
|
||||
|
||||
# Establish usage
|
||||
IFS= read -rd '' usage << '__eof__' || true
|
||||
Usage: ino [-cdghu] [sketch]
|
||||
|
||||
Streamlines the compilation and development of an Arduino sketch
|
||||
|
||||
Optional arguments:
|
||||
-c, --clean Delete build output and if -d/--compilation-db,
|
||||
-g/--debug, and -u/--upload are not set, exit
|
||||
-d, --compilation-db Construct the compilation command database and exit
|
||||
-g, --debug Optimize compilation for debugging
|
||||
-h, --help Show this help message and exit
|
||||
-u, --upload Upload after successful build
|
||||
|
||||
Positional arguments:
|
||||
sketch The Arduino sketch directory. Defaults to the current
|
||||
working directory.
|
||||
__eof__
|
||||
|
||||
# Usage: argerr msg
|
||||
#
|
||||
# Write an argument usage error message to standard error and fail
|
||||
#
|
||||
# Positional arguments:
|
||||
# msg The core error message
|
||||
function argerr
|
||||
{
|
||||
echo "$1. Use -h for help." >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Parse optional arguments
|
||||
clean=0
|
||||
compilation_db=0
|
||||
debug=0
|
||||
upload=0
|
||||
while (( $# ))
|
||||
do
|
||||
# If the argument is a single hyphen followed by multiple single-character
|
||||
# options, separate the first option from the argument and leave the rest
|
||||
# for the next iteration
|
||||
(( ${#1} > 2 )) && [[ $1 =~ ^-[^-]*$ ]] && \
|
||||
set -- "${1::2}" "-${1:2}" "${@:2}"
|
||||
|
||||
# Handle the argument
|
||||
case $1 in
|
||||
-c|--clean)
|
||||
clean=1
|
||||
;;
|
||||
-d|--compilation_db)
|
||||
(( upload )) && argerr "$1 is incompatible with -u/--upload"
|
||||
compilation_db=1
|
||||
;;
|
||||
-g|--debug)
|
||||
debug=1
|
||||
;;
|
||||
-h|--help)
|
||||
echo -n "$usage"
|
||||
exit 0
|
||||
;;
|
||||
-u|--upload)
|
||||
(( compilation_db )) && \
|
||||
argerr "$1 is incompatible with -d/--compilation-db"
|
||||
upload=1
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
;;
|
||||
-*|--*)
|
||||
argerr "Invalid argument '$1'"
|
||||
;;
|
||||
*)
|
||||
break
|
||||
esac
|
||||
|
||||
# Advance to the next argument
|
||||
shift
|
||||
done
|
||||
|
||||
# Change into the sketch directory
|
||||
if (( $# ))
|
||||
then
|
||||
(( $# < 2 )) || argerr 'Too many positional arguments'
|
||||
cd "$1"
|
||||
fi
|
||||
|
||||
# Clean
|
||||
if (( clean ))
|
||||
then
|
||||
rm -fr .compilation-db bin
|
||||
rm -f compile_commands.json
|
||||
if (( !(compilation_db || debug || upload) ))
|
||||
then
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Construct Arduino CLI compile options
|
||||
if [[ -f .ino ]]
|
||||
then
|
||||
IFS=$'\n' compile_opts=($(grep -v '^#' .ino | xargs -n 1))
|
||||
else
|
||||
compile_opts=()
|
||||
fi
|
||||
if (( debug ))
|
||||
then
|
||||
compile_opts+=(--optimize-for-debug)
|
||||
fi
|
||||
|
||||
# Construct the compilation database
|
||||
rm -fr .compilation-db
|
||||
arduino-cli compile "${compile_opts[@]}" --only-compilation-database \
|
||||
--build-path .compilation-db
|
||||
cp .compilation-db/compile_commands.json ./
|
||||
|
||||
# Build and upload
|
||||
if (( upload ))
|
||||
then
|
||||
compile_opts+=(--upload)
|
||||
compile_opts+=(--verify)
|
||||
fi
|
||||
arduino-cli compile "${compile_opts[@]}" --output-dir bin
|
Loading…
Reference in New Issue