|
|
|
# -*- shell-script -*-
|
|
|
|
|
|
|
|
## NEEDS: LIBRARY, SKETCH, ROOT, SOURCEDIR
|
|
|
|
## Should be included when the current directory is the dir of the Sketch.
|
|
|
|
|
|
|
|
SKETCH="${SKETCH:-${DEFAULT_SKETCH}}"
|
|
|
|
LIBRARY="${LIBRARY:-${SKETCH}}"
|
|
|
|
|
|
|
|
########
|
|
|
|
######## Keyboard hardware definitions
|
|
|
|
########
|
|
|
|
|
|
|
|
BOARD="${BOARD:-model01}"
|
|
|
|
MCU="${MCU:-atmega32u4}"
|
|
|
|
|
|
|
|
if [ -z "${ARCH}" ]; then
|
|
|
|
ARCH=$(echo "${FQBN}" | sed -n -e 's/^[^:]\+:\([^:]\+\).*/\1/p')
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ "${ARCH}" = "virtual" ]; then
|
|
|
|
FQBN="${FQBN:-keyboardio:virtual:${BOARD}}"
|
|
|
|
|
|
|
|
# Set the compiler path for virtual builds
|
|
|
|
#
|
|
|
|
if [ -z "${COMPILER_PATH}" ]; then
|
|
|
|
COMPILER_PATH="/usr/bin"
|
|
|
|
COMPILER_PREFIX=""
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
ARCH="avr"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -z "${FQBN}" ]; then
|
|
|
|
FQBN="${FQBN:-keyboardio:avr:${BOARD}}"
|
|
|
|
fi
|
|
|
|
|
|
|
|
########
|
|
|
|
######## Host OS specific commands
|
|
|
|
########
|
|
|
|
|
|
|
|
## Platform-specific overrides
|
|
|
|
# Shamelessly stolen from git's Makefile
|
|
|
|
uname_S=$(uname -s 2>/dev/null || echo not)
|
|
|
|
|
|
|
|
|
|
|
|
find_max_prog_size() {
|
|
|
|
# SKETCH and -build-path in this command are here because of a bug introduced in Arduino 1.8.10
|
|
|
|
# https://github.com/arduino/arduino-builder/issues/341
|
|
|
|
VPIDS=$("${ARDUINO_BUILDER}" \
|
|
|
|
-hardware "${ARDUINO_PATH}/hardware" \
|
|
|
|
-hardware "${BOARD_HARDWARE_PATH}" \
|
|
|
|
${ARDUINO_TOOLS_FLAG:+"${ARDUINO_TOOLS_FLAG}"} ${ARDUINO_TOOLS_PARAM:+"${ARDUINO_TOOLS_PARAM}"} \
|
|
|
|
-tools "${ARDUINO_PATH}/tools-builder" \
|
|
|
|
-fqbn "${FQBN}" \
|
|
|
|
-build-path ${ARDUINO_PATH} \
|
|
|
|
-dump-prefs "${SKETCH_DIR}/${SKETCH}.ino" | grep "upload\.maximum_size=")
|
|
|
|
MAX_PROG_SIZE=${MAX_PROG_SIZE:-$(echo "${VPIDS}" | grep upload.maximum_size | head -n 1 | cut -d= -f2)}
|
|
|
|
}
|
|
|
|
|
|
|
|
find_device_vid_pid() {
|
|
|
|
# SKETCH and -build-path in this command are here because of a bug introduced in Arduino 1.8.10
|
|
|
|
# https://github.com/arduino/arduino-builder/issues/341
|
|
|
|
VPIDS=$("${ARDUINO_BUILDER}" \
|
|
|
|
-hardware "${ARDUINO_PATH}/hardware" \
|
|
|
|
-hardware "${BOARD_HARDWARE_PATH}" \
|
|
|
|
${ARDUINO_TOOLS_FLAG:+"${ARDUINO_TOOLS_FLAG}"} ${ARDUINO_TOOLS_PARAM:+"${ARDUINO_TOOLS_PARAM}"} \
|
|
|
|
-tools "${ARDUINO_PATH}/tools-builder" \
|
|
|
|
-fqbn "${FQBN}" \
|
|
|
|
-build-path ${ARDUINO_PATH} \
|
|
|
|
-dump-prefs "${SKETCH_DIR}/${SKETCH}.ino" || grep "\.[vp]id=")
|
|
|
|
VID=${VID:-$(echo "${VPIDS}" | grep build.vid= | cut -dx -f2)}
|
|
|
|
SKETCH_PID=${SKETCH_PID:-$(echo "${VPIDS}" | grep build.pid= | cut -dx -f2)}
|
|
|
|
BOOTLOADER_PID=${BOOTLOADER_PID:-$(echo "${VPIDS}" | grep bootloader.pid= | cut -dx -f2)}
|
|
|
|
BOOTLOADER_VID=${BOOTLOADER_VID:-$(echo "${VPIDS}" | grep bootloader.vid= | cut -dx -f2)}
|
|
|
|
}
|
|
|
|
|
|
|
|
find_device_port() {
|
|
|
|
find_device_vid_pid
|
|
|
|
DIR=$(dirname "$(readlink -f "$0")")
|
|
|
|
DEVICE_PORT_PROBER="${DIR}/find-device-port-linux-udev"
|
|
|
|
DEVICE_PORT="$(perl ${DEVICE_PORT_PROBER} ${VID} ${SKETCH_PID})"
|
|
|
|
}
|
|
|
|
|
|
|
|
reset_device_cmd() {
|
|
|
|
if [ -z ${NO_RESET} ]; then
|
|
|
|
stty -F ${DEVICE_PORT} 1200 hupcl
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
find_bootloader_ports() {
|
|
|
|
find_device_vid_pid
|
|
|
|
DIR=$(dirname "$(readlink -f "$0")")
|
|
|
|
BOOTLOADER_VID="${BOOTLOADER_VID:-${VID}}"
|
|
|
|
DEVICE_PORT_PROBER="${DIR}/find-device-port-linux-udev"
|
|
|
|
DEVICE_PORT_BOOTLOADER="$(perl ${DEVICE_PORT_PROBER} ${BOOTLOADER_VID} ${BOOTLOADER_PID})"
|
|
|
|
}
|
|
|
|
|
|
|
|
MD5="md5sum"
|
|
|
|
|
|
|
|
if [ "${uname_S}" = "Darwin" ]; then
|
|
|
|
|
|
|
|
find_device_port() {
|
|
|
|
DIR=$(dirname "$0")
|
|
|
|
DEVICE_PORT_PROBER="${DIR}/find-device-port-macos"
|
|
|
|
DEVICE_PORT="$(perl ${DEVICE_PORT_PROBER})"
|
|
|
|
}
|
|
|
|
|
|
|
|
reset_device_cmd() {
|
|
|
|
/bin/stty -f ${DEVICE_PORT} 1200
|
|
|
|
}
|
|
|
|
|
|
|
|
ARDUINO_PATH="${ARDUINO_PATH:-/Applications/Arduino.app/Contents/Java/}"
|
|
|
|
ARDUINO_PACKAGE_PATH="${ARDUINO_PACKAGE_PATH:-${HOME}/Library/Arduino15/packages}"
|
|
|
|
ARDUINO_LOCAL_LIB_PATH="${ARDUINO_LOCAL_LIB_PATH:-${HOME}/Documents/Arduino}"
|
|
|
|
|
|
|
|
MD5="md5"
|
|
|
|
|
|
|
|
find_bootloader_ports() {
|
|
|
|
DIR=$(dirname "$0")
|
|
|
|
DEVICE_PORT_PROBER="${DIR}/find-device-port-macos"
|
|
|
|
DEVICE_PORT_BOOTLOADER="$(perl ${DEVICE_PORT_PROBER})"
|
|
|
|
}
|
|
|
|
|
Add rules and scripts for building on FreeBSD.
* Uses usbconfig to determine the Model 01's USB modem port.
* Works around incompatibe avrsize flags.
You need to be able to run usbconfig to flash the firmware from the
buildtools. This can be accomplished with appropriate groups and devfs
rules.
Requires gmake, perl, avrdude, and (probably) arduino18 from ports.
The version of avrdude in ports uses an avr-size command that doesn't
understand the -C or --mcu flags. From what I can tell, these flags
are uneccessary, as the size computed with them is the same as what
you get from adding up the appropriate segments from the standard
output of avr-size without any flags. However, since the size is only
informative, I've opted to simply check to see if the command
succeeded, and if not, output a string saying it could not be.
It would probably be better to:
* Determine appropriate flags based on build tools, or,
* Just not use the flags at all, and grab the .text, etc., segment
sizes from the standard output and add them up via `dc` for
display.
I've been using this toolchain to build successfully on FreeBSD 12 for
the Model 01 without issue. It should work with earlier versions of
FreeBSD as well.
Signed-off-by: Brian Cully <bjc@kublai.com>
6 years ago
|
|
|
elif [ "${uname_S}" = "FreeBSD" ]; then
|
|
|
|
|
|
|
|
find_device_port() {
|
|
|
|
DIR=$(dirname "$0")
|
|
|
|
DEVICE_PORT_PROBER="${DIR}/find-device-port-freebsd"
|
|
|
|
DEVICE_PORT="$(perl ${DEVICE_PORT_PROBER})"
|
|
|
|
}
|
|
|
|
|
|
|
|
reset_device_cmd() {
|
|
|
|
/bin/stty -f ${DEVICE_PORT} 1200
|
|
|
|
}
|
|
|
|
|
|
|
|
MD5="md5"
|
|
|
|
AVR_SIZE="${AVR_SIZE:-/usr/local/bin/avr-size}"
|
|
|
|
AVR_NM="${AVR_NM:-/usr/local/bin/avr-nm}"
|
|
|
|
AVR_OBJDUMP="${AVR_OBJDUMP:-/usr/local/bin/avr-objdump}"
|
|
|
|
AVRDUDE="${AVRDUDE:-/usr/local/bin/avrdude}"
|
|
|
|
AVRDUDE_CONF="${AVRDUDE_CONF:-/usr/local/etc/avrdude.conf}"
|
|
|
|
|
|
|
|
find_bootloader_ports() {
|
|
|
|
DIR=$(dirname "$0")
|
|
|
|
DEVICE_PORT_PROBER="${DIR}/find-device-port-freebsd"
|
|
|
|
DEVICE_PORT_BOOTLOADER="$(perl ${DEVICE_PORT_PROBER})"
|
|
|
|
}
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
######
|
|
|
|
###### Arduino tools configuration
|
|
|
|
######
|
|
|
|
|
|
|
|
ARDUINO_PATH="${ARDUINO_PATH:-/usr/local/arduino}"
|
|
|
|
ARDUINO_LOCAL_LIB_PATH="${ARDUINO_LOCAL_LIB_PATH:-${HOME}/Arduino}"
|
|
|
|
ARDUINO_TOOLS_PATH="${ARDUINO_TOOLS_PATH:-${ARDUINO_PATH}/hardware/tools}"
|
|
|
|
ARDUINO_PACKAGE_PATH="${ARDUINO_PACKAGE_PATH:-${HOME}/.arduino15/packages}"
|
|
|
|
|
|
|
|
ARDUINO_BUILDER="${ARDUINO_BUILDER:-${ARDUINO_PATH}/arduino-builder}"
|
|
|
|
ARDUINO_IDE_VERSION="10607"
|
|
|
|
|
|
|
|
######
|
|
|
|
###### Executable paths
|
|
|
|
######
|
|
|
|
|
|
|
|
# Allow the compiler path to be empty for virtual builds
|
|
|
|
COMPILER_PATH="${COMPILER_PATH-${ARDUINO_TOOLS_PATH}/avr/bin/}"
|
|
|
|
|
|
|
|
# Allow the compiler prefix to be empty for virtual builds
|
|
|
|
COMPILER_PREFIX="${COMPILER_PREFIX-avr-}"
|
|
|
|
AVR_SIZE="${AVR_SIZE:-${COMPILER_PATH}/${COMPILER_PREFIX}size}"
|
Add rules and scripts for building on FreeBSD.
* Uses usbconfig to determine the Model 01's USB modem port.
* Works around incompatibe avrsize flags.
You need to be able to run usbconfig to flash the firmware from the
buildtools. This can be accomplished with appropriate groups and devfs
rules.
Requires gmake, perl, avrdude, and (probably) arduino18 from ports.
The version of avrdude in ports uses an avr-size command that doesn't
understand the -C or --mcu flags. From what I can tell, these flags
are uneccessary, as the size computed with them is the same as what
you get from adding up the appropriate segments from the standard
output of avr-size without any flags. However, since the size is only
informative, I've opted to simply check to see if the command
succeeded, and if not, output a string saying it could not be.
It would probably be better to:
* Determine appropriate flags based on build tools, or,
* Just not use the flags at all, and grab the .text, etc., segment
sizes from the standard output and add them up via `dc` for
display.
I've been using this toolchain to build successfully on FreeBSD 12 for
the Model 01 without issue. It should work with earlier versions of
FreeBSD as well.
Signed-off-by: Brian Cully <bjc@kublai.com>
6 years ago
|
|
|
AVR_SIZE_FLAGS="${AVR_SIZE_FLAGS:--C --mcu=${MCU}}"
|
|
|
|
AVR_OBJDUMP="${AVR_OBJDUMP:-${COMPILER_PATH}/${COMPILER_PREFIX}objdump}"
|
|
|
|
AVR_OBJCOPY="${AVR_OBJCOPY:-${COMPILER_PATH}/${COMPILER_PREFIX}objcopy}"
|
|
|
|
AVR_NM="${AVR_NM:-${COMPILER_PATH}/${COMPILER_PREFIX}nm}"
|
|
|
|
AVR_AR="${AVR_AR:-${COMPILER_PATH}/${COMPILER_PREFIX}ar}"
|
|
|
|
AVR_GCC="${AVR_GCC:-${COMPILER_PATH}/${COMPILER_PREFIX}gcc}"
|
|
|
|
AVR_GPLUSPLUS="${AVR_GCC:-${COMPILER_PATH}/${COMPILER_PREFIX}g++}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AVRDUDE="${AVRDUDE:-${ARDUINO_TOOLS_PATH}/avr/bin/avrdude}"
|
|
|
|
AVRDUDE_CONF="${AVRDUDE_CONF:-${ARDUINO_TOOLS_PATH}/avr/etc/avrdude.conf}"
|
|
|
|
|
|
|
|
######
|
|
|
|
###### Source files and dependencies
|
|
|
|
######
|
|
|
|
|
|
|
|
BOARD_HARDWARE_PATH="${BOARD_HARDWARE_PATH:-${ARDUINO_LOCAL_LIB_PATH}/hardware}"
|
|
|
|
BOOTLOADER_PATH="${BOOTLOADER_PATH:-${BOARD_HARDWARE_PATH}/keyboardio/avr/bootloaders/caterina/Caterina.hex}"
|
|
|
|
|
|
|
|
if [ ! -z "${ARDUINO_TOOLS_PATH}" ]; then
|
|
|
|
ARDUINO_TOOLS_PARAM="${ARDUINO_TOOLS_PATH}"
|
|
|
|
ARDUINO_TOOLS_FLAG="-tools"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ ! -z "${AVR_GCC_PREFIX}" ]; then
|
|
|
|
ARDUINO_AVR_GCC_PREFIX_PARAM="-prefs \"runtime.tools.avr-gcc.path=${AVR_GCC_PREFIX}\""
|
|
|
|
fi
|