Merge pull request #305 from algernon/builder-fixes

Various kaleidoscope-builder fixes
pull/308/head
Jesse Vincent 7 years ago committed by GitHub
commit cd94ffe24c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -2,10 +2,15 @@ dist: trusty
sudo: false sudo: false
os: os:
- linux - linux
addons:
apt:
packages:
- shellcheck
install: install:
- git clone --depth 1 --recurse-submodules https://github.com/keyboardio/Arduino-Boards hardware/keyboardio/avr - git clone --depth 1 --recurse-submodules https://github.com/keyboardio/Arduino-Boards hardware/keyboardio/avr
script: script:
- make travis-test BOARD_HARDWARE_PATH=$(pwd)/hardware - make travis-test BOARD_HARDWARE_PATH=$(pwd)/hardware
- shellcheck bin/kaleidoscope-builder
notifications: notifications:
irc: irc:
channels: channels:

@ -1,4 +1,4 @@
#! /bin/sh #!/usr/bin/env bash
set -e set -e
@ -7,10 +7,10 @@ set -e
###### ######
build_version () { build_version () {
GIT_VERSION="$(cd $(find_sketch); git describe --abbrev=4 --dirty --always)" GIT_VERSION="$(cd "$(find_sketch)"; git describe --abbrev=4 --dirty --always)"
LIB_VERSION="$(cd $(find_sketch); (grep version= ../../library.properties 2>/dev/null || echo version=0.0.0) | cut -d= -f2)-g${GIT_VERSION}" LIB_VERSION="$(cd "$(find_sketch)"; (grep version= ../../library.properties 2>/dev/null || echo version=0.0.0) | cut -d= -f2)-g${GIT_VERSION}"
BUILD_PATH="${BUILD_PATH:-$(mktemp -d 2>/dev/null || mktemp -d -t 'build')}" BUILD_PATH="${BUILD_PATH:-"$(mktemp -d 2>/dev/null || mktemp -d -t 'build')"}"
OUTPUT_DIR="${OUTPUT_DIR:-output/${LIBRARY}}" OUTPUT_DIR="${OUTPUT_DIR:-output/${LIBRARY}}"
OUTPUT_PATH="${OUTPUT_PATH:-${SOURCEDIR}/${OUTPUT_DIR}}" OUTPUT_PATH="${OUTPUT_PATH:-${SOURCEDIR}/${OUTPUT_DIR}}"
} }
@ -32,15 +32,18 @@ firmware_size () {
MAX_PROG_SIZE=28672 MAX_PROG_SIZE=28672
output="$($@ | grep "\\(Program\\|Data\\):" | sed -e 's,^, - ,' && echo)" output="$("$@" | grep "\\(Program\\|Data\\):" | sed -e 's,^, - ,' && echo)"
PROGSIZE="$(echo "${output}" | grep Program: | cut -d: -f2 | awk '{print $1}')" PROGSIZE="$(echo "${output}" | grep "Program:" | cut -d: -f2 | awk '{print $1}')"
PERCENT="$(echo ${PROGSIZE} ${MAX_PROG_SIZE} | awk "{ printf \"%02.01f\", \$1 / \$2 * 100 }")" PERCENT="$(echo "${PROGSIZE}" "${MAX_PROG_SIZE}" | awk "{ printf \"%02.01f\", \$1 / \$2 * 100 }")"
# we want the sed there, doing with shell builtins would be worse.
# shellcheck disable=SC2001
echo "${output}" | sed -e "s/\(Program:.*\)(\([0-9\.]*%\) Full)/\1(${PERCENT}% Full)/" echo "${output}" | sed -e "s/\(Program:.*\)(\([0-9\.]*%\) Full)/\1(${PERCENT}% Full)/"
} }
find_sketch () { find_sketch () {
SKETCH="${SKETCH:-${DEFAULT_SKETCH}}" SKETCH="${SKETCH:-${DEFAULT_SKETCH}}"
LIBRARY="${LIBRARY:-${SKETCH}}" LIBRARY="${LIBRARY:-${SKETCH}}"
@ -68,7 +71,10 @@ prepare_to_flash () {
fi fi
echo "Press ENTER when ready..." echo "Press ENTER when ready..."
read a
# We do not want to permit line continuations here. We just want a newline.
# shellcheck disable=SC2162
read
} }
flash () { flash () {
@ -85,7 +91,7 @@ flash_over_usb () {
return 1 return 1
fi fi
sleep 1s sleep 1s
${AVRDUDE} -q -q -C ${AVRDUDE_CONF} -p${MCU} -cavr109 -D -P ${DEVICE_PORT_BOOTLOADER} -b57600 "-Uflash:w:${HEX_FILE_PATH}:i" ${AVRDUDE} -q -q -C "${AVRDUDE_CONF}" -p"${MCU}" -cavr109 -D -P "${DEVICE_PORT_BOOTLOADER}" -b57600 "-Uflash:w:${HEX_FILE_PATH}:i"
} }
flash_from_bootloader() { flash_from_bootloader() {
@ -101,8 +107,8 @@ program() {
flash_with_programmer() { flash_with_programmer() {
${AVRDUDE} -v \ ${AVRDUDE} -v \
-C ${AVRDUDE_CONF} \ -C "${AVRDUDE_CONF}" \
-p${MCU} \ -p"${MCU}" \
-cusbtiny \ -cusbtiny \
-D \ -D \
-B 1 \ -B 1 \
@ -114,12 +120,12 @@ hex_with_bootloader () {
compile compile
fi fi
cat ${HEX_FILE_PATH} | awk '/^:00000001FF/ == 0' > ${HEX_FILE_WITH_BOOTLOADER_PATH} awk '/^:00000001FF/ == 0' "${HEX_FILE_PATH}" > "${HEX_FILE_WITH_BOOTLOADER_PATH}"
echo "Using ${BOOTLOADER_PATH}" echo "Using ${BOOTLOADER_PATH}"
${MD5} ${BOOTLOADER_PATH} ${MD5} "${BOOTLOADER_PATH}"
cat ${BOOTLOADER_PATH} >> ${HEX_FILE_WITH_BOOTLOADER_PATH} cat "${BOOTLOADER_PATH}" >> "${HEX_FILE_WITH_BOOTLOADER_PATH}"
ln -sf "${HEX_FILE_WITH_BOOTLOADER_PATH}" "${OUTPUT_PATH}/${SKETCH}-latest-with-bootloader.hex" ln -sf -- "${HEX_FILE_WITH_BOOTLOADER_PATH}" "${OUTPUT_PATH}/${SKETCH}-latest-with-bootloader.hex"
cat <<EOF cat <<- EOF
Combined firmware and bootloader are now at ${HEX_FILE_WITH_BOOTLOADER_PATH} Combined firmware and bootloader are now at ${HEX_FILE_WITH_BOOTLOADER_PATH}
Make sure you have the bootloader version you expect. Make sure you have the bootloader version you expect.
@ -130,8 +136,8 @@ EOF
} }
build () { build () {
compile $@ compile "$@"
size $@ size "$@"
} }
compile () { compile () {
@ -140,17 +146,27 @@ compile () {
install -d "${OUTPUT_PATH}" install -d "${OUTPUT_PATH}"
echo "Building ${OUTPUT_DIR}/${SKETCH} (${LIB_VERSION}) ..." echo "Building ${OUTPUT_DIR}/${SKETCH} (${LIB_VERSION}) ..."
# This is defined in the (optional) user config.
# shellcheck disable=SC2154
${compile_HOOKS} ${compile_HOOKS}
if [ -d "${ARDUINO_LOCAL_LIB_PATH}/libraries" ]; then if [ -d "${ARDUINO_LOCAL_LIB_PATH}/libraries" ]; then
# shellcheck disable=SC2089
# We want literal backslashes here, not arrays.
local_LIBS="-libraries \"${ARDUINO_LOCAL_LIB_PATH}/libraries\"" local_LIBS="-libraries \"${ARDUINO_LOCAL_LIB_PATH}/libraries\""
fi fi
ARDUINO_PACKAGES="" ARDUINO_PACKAGES=""
if [ -d ${ARDUINO_PACKAGE_PATH} ]; then if [ -d "${ARDUINO_PACKAGE_PATH}" ]; then
# shellcheck disable=SC2089
# We want literal backslashes here, not arrays.
ARDUINO_PACKAGES="-hardware \"${ARDUINO_PACKAGE_PATH}\"" ARDUINO_PACKAGES="-hardware \"${ARDUINO_PACKAGE_PATH}\""
fi fi
# SC2091: We do not care if quotes or backslashes are not respected.
# SC2086: We want word splitting.
# shellcheck disable=SC2086,SC2090
${ARDUINO_BUILDER} \ ${ARDUINO_BUILDER} \
-compile \ -compile \
${ARDUINO_PACKAGES} \ ${ARDUINO_PACKAGES} \
@ -188,7 +204,7 @@ _find_all () {
for plugin in ./*.ino \ for plugin in ./*.ino \
examples/* \ examples/* \
src/*.ino; do src/*.ino; do
if [ -d "$(dirname ${plugin})" ] || [ -f "${plugin}" ]; then if [ -d "$(dirname "${plugin}")" ] || [ -f "${plugin}" ]; then
p="$(basename "${plugin}" .ino)" p="$(basename "${plugin}" .ino)"
if [ "${p}" != '*' ]; then if [ "${p}" != '*' ]; then
echo "${p}" echo "${p}"
@ -203,7 +219,7 @@ build_all () {
for plugin in ${plugins}; do for plugin in ${plugins}; do
export SKETCH="${plugin}" export SKETCH="${plugin}"
export LIBRARY="${plugin}" export LIBRARY="${plugin}"
$0 ${plugin} build $0 "${plugin}" build
done done
} }
@ -239,7 +255,7 @@ decompile () {
} }
clean () { clean () {
rm -rf "${OUTPUT_PATH}" rm -rf -- "${OUTPUT_PATH}"
} }
reset_device() { reset_device() {
@ -277,11 +293,11 @@ EOF
$DEVICE_PORT is not writable: $DEVICE_PORT is not writable:
`ls -l $DEVICE_PORT` $(ls -l "$DEVICE_PORT")
You are currently in the following groups: You are currently in the following groups:
`id -Gn` $(id -Gn)
Please ensure you have followed the instructions on setting up your Please ensure you have followed the instructions on setting up your
account to be in the right group: account to be in the right group:
@ -294,7 +310,7 @@ EOF
} }
usage () { usage () {
cat <<EOF cat <<- EOF
Usage: $0 SKETCH commands... Usage: $0 SKETCH commands...
Runs all of the commands in the context of the Sketch. Runs all of the commands in the context of the Sketch.
@ -349,23 +365,28 @@ fi
## ##
## - if there is only one argument, that's a command ## - if there is only one argument, that's a command
ROOT="$(cd $(dirname $0)/..; pwd)" ROOT="$(cd "$(dirname "$0")"/..; pwd)"
export ROOT export ROOT
# shellcheck disable=SC2155
export SOURCEDIR="$(pwd)" export SOURCEDIR="$(pwd)"
if [ -e "${HOME}/.kaleidoscope-builder.conf" ]; then if [ -e "${HOME}/.kaleidoscope-builder.conf" ]; then
# shellcheck disable=SC1090
. "${HOME}/.kaleidoscope-builder.conf" . "${HOME}/.kaleidoscope-builder.conf"
fi fi
if [ -e "${SOURCEDIR}/.kaleidoscope-builder.conf" ]; then if [ -e "${SOURCEDIR}/.kaleidoscope-builder.conf" ]; then
# shellcheck disable=SC1090
. "${SOURCEDIR}/.kaleidoscope-builder.conf" . "${SOURCEDIR}/.kaleidoscope-builder.conf"
fi fi
if [ -e "${SOURCEDIR}/kaleidoscope-builder.conf" ]; then if [ -e "${SOURCEDIR}/kaleidoscope-builder.conf" ]; then
# shellcheck disable=SC1090
. "${SOURCEDIR}/kaleidoscope-builder.conf" . "${SOURCEDIR}/kaleidoscope-builder.conf"
fi fi
. ${ROOT}/etc/kaleidoscope-builder.conf # shellcheck disable=SC1090
. "${ROOT}/etc/kaleidoscope-builder.conf"
if [ ! -z "${VERBOSE}" ] && [ "${VERBOSE}" -gt 0 ]; then if [ ! -z "${VERBOSE}" ] && [ "${VERBOSE}" -gt 0 ]; then
ARDUINO_VERBOSE="-verbose" ARDUINO_VERBOSE="-verbose"
@ -382,6 +403,8 @@ for i in $(seq 1 $#); do
case "${v}" in case "${v}" in
*=*) *=*)
# Exporting an expansion is *precisely* what we want here.
# shellcheck disable=SC2086,SC2163
export ${v} export ${v}
;; ;;
*) *)
@ -390,10 +413,12 @@ for i in $(seq 1 $#); do
esac esac
done done
# Word splitting is desired here.
# shellcheck disable=SC2086
set -- ${cmds} set -- ${cmds}
if [ $# -eq 1 ]; then if [ $# -eq 1 ]; then
cmd="$(echo $1 | tr '-' '_')" cmd="$(echo "$1" | tr '-' '_')"
${cmd} ${cmd}
exit $? exit $?
fi fi
@ -407,8 +432,9 @@ fi
cmds="" cmds=""
# shellcheck disable=2034
for i in $(seq 1 $#); do for i in $(seq 1 $#); do
cmds="${cmds} $(echo $1 | tr '-' '_')" cmds="${cmds} $(echo "$1" | tr '-' '_')"
shift shift
done done

Loading…
Cancel
Save