|
|
|
# -*- shell-script -*-
|
|
|
|
|
|
|
|
########
|
|
|
|
######## Keyboard hardware definitions
|
|
|
|
########
|
|
|
|
|
|
|
|
: "${BOARD:=model01}"
|
|
|
|
|
|
|
|
if [[ -z "${ARCH}" && -n "${FQBN}" ]]; then
|
|
|
|
ARCH=$(echo "${FQBN}" | sed -n -e 's/^[^:]\+:\([^:]\+\).*/\1/p')
|
|
|
|
fi
|
|
|
|
|
|
|
|
: "${ARCH:=avr}"
|
|
|
|
|
|
|
|
if [ "${ARCH}" = "virtual" ]; then
|
|
|
|
: "${FQBN:=keyboardio:virtual:${BOARD}}"
|
|
|
|
: "${COMPILER_PATH:=/usr/bin/}"
|
|
|
|
|
|
|
|
COMPILER_PREFIX=""
|
|
|
|
fi
|
|
|
|
|
|
|
|
: "${FQBN:=keyboardio:${ARCH}:${BOARD}}"
|
|
|
|
|
|
|
|
########
|
|
|
|
######## Host OS specific commands
|
|
|
|
########
|
|
|
|
|
|
|
|
## Platform-specific overrides
|
|
|
|
# Shamelessly stolen from git's Makefile
|
|
|
|
uname_S=$(uname -s 2>/dev/null || echo not)
|
|
|
|
uname_O=$(uname -o 2>/dev/null || echo not)
|
|
|
|
|
|
|
|
find_device_port() {
|
|
|
|
if [ -n "${DEVICE_PORT}" ]; then
|
|
|
|
echo "DEVICE_PORT=\"${DEVICE_PORT}\" predefined."
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
|
|
|
|
find_device_vid_pid
|
|
|
|
if [ "${uname_S}" = "Darwin" ]; then
|
|
|
|
DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-macos"
|
|
|
|
DEVICE_PORT="$(perl ${DEVICE_PORT_PROBER} ${VID} ${SKETCH_PID})"
|
|
|
|
elif [ "${uname_O}" = "Cygwin" ]; then
|
|
|
|
DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-windows.ps1"
|
|
|
|
DEVICE_PORT="$(powershell -noprofile -executionpolicy bypass ${DEVICE_PORT_PROBER} ${VID} ${SKETCH_PID} -Format Cygwin)"
|
|
|
|
DEVICE_COM_PORT="$(powershell -noprofile -executionpolicy bypass ${DEVICE_PORT_PROBER} ${VID} ${SKETCH_PID} -Format COM)"
|
|
|
|
elif [ "${uname_S}" = "FreeBSD" ]; then
|
|
|
|
DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-freebsd"
|
|
|
|
DEVICE_PORT="$(perl ${DEVICE_PORT_PROBER})"
|
|
|
|
else
|
|
|
|
DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-linux-udev"
|
|
|
|
DEVICE_PORT="$(perl ${DEVICE_PORT_PROBER} ${VID} ${SKETCH_PID})"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
reset_device_cmd() {
|
|
|
|
if [ -z ${NO_RESET} ]; then
|
|
|
|
if [ "${uname_S}" = "Darwin" ]; then
|
|
|
|
/bin/stty -f ${DEVICE_PORT} 1200
|
|
|
|
elif [ "${uname_S}" = "FreeBSD" ]; then
|
|
|
|
/bin/stty -f ${DEVICE_PORT} 1200
|
|
|
|
|
|
|
|
elif [ "${uname_O}" = "Cygwin" ]; then
|
|
|
|
cmd /c mode ${DEVICE_COM_PORT} baud=1200
|
|
|
|
else
|
|
|
|
stty -F ${DEVICE_PORT} 1200 hupcl
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
find_bootloader_ports() {
|
|
|
|
if [ -n "${DEVICE_PORT_BOOTLOADER}" ]; then
|
|
|
|
echo "DEVICE_PORT_BOOTLOADER=\"${DEVICE_PORT_BOOTLOADER}\" predefined."
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
|
|
|
|
find_device_vid_pid
|
|
|
|
: "${BOOTLOADER_VID:=${VID}}"
|
|
|
|
if [ "${uname_S}" = "Darwin" ]; then
|
|
|
|
DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-macos"
|
|
|
|
DEVICE_PORT_BOOTLOADER="$(perl ${DEVICE_PORT_PROBER} ${BOOTLOADER_VID} ${BOOTLOADER_PID})"
|
|
|
|
elif [ "${uname_O}" = "Cygwin" ]; then
|
|
|
|
DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-windows.ps1"
|
|
|
|
DEVICE_PORT_BOOTLOADER="$(powershell -noprofile -executionpolicy bypass ${DEVICE_PORT_PROBER} ${BOOTLOADER_VID} ${BOOTLOADER_PID} -Format COM)"
|
|
|
|
elif [ "${uname_S}" = "FreeBSD" ]; then
|
|
|
|
DEVICE_PORT_PROBER="${KALEIDOSCPE_BIN_DIR}/find-device-port-freebsd"
|
|
|
|
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
|
|
|
|
|
|
|
else
|
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
|
|
|
|
|
|
|
DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-linux-udev"
|
|
|
|
DEVICE_PORT_BOOTLOADER="$(perl ${DEVICE_PORT_PROBER} ${BOOTLOADER_VID} ${BOOTLOADER_PID})"
|
|
|
|
fi
|
|
|
|
}
|
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
|
|
|
|
|
|
|
if [ "${uname_S}" = "FreeBSD" ]; then
|
|
|
|
: "${AVR_SIZE:=/usr/local/bin/avr-size}"
|
|
|
|
: "${AVR_NM:=/usr/local/bin/avr-nm}"
|
|
|
|
: "${AVR_OBJDUMP:=/usr/local/bin/avr-objdump}"
|
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
|
|
|
|
|
|
|
if [ "${ARCH}" = "virtual" ]; then
|
|
|
|
: "${COMPILER_PATH:=/usr/local/bin/}"
|
|
|
|
fi
|
|
|
|
|
|
|
|
elif [ "${uname_O}" = "Cygwin" ]; then
|
|
|
|
# The Windows arduino-builder.exe doesn't understand being told to exec against Cygwin symlinks
|
|
|
|
CCACHE_NOT_SUPPORTED=1
|
|
|
|
|
|
|
|
#
|
|
|
|
# It's important that all of these be underneath /cygdrive/c so they can be converted to Windows paths that the
|
|
|
|
# Windows Arduino binaries can understand.
|
|
|
|
: "${TMPDIR:=/cygdrive/c/Users/${USER}/AppData/Local/Temp}"
|
|
|
|
|
|
|
|
# We need to prevent Windows executables from being passed parameters that are absolute paths, since they won't
|
|
|
|
# be interpretable when of the form /cygdrive/c/foo. To work around this, we set the common path root variables
|
|
|
|
# to use relative paths instead of absolute paths, since those have mostly platform-agnostic behavior.
|
|
|
|
#
|
|
|
|
# Note that this trick requires that all of these paths exist on the same drive letter as the current directory,
|
|
|
|
# since otherwise even the relative paths would include Cygwin-specific components. So...
|
|
|
|
if [[ $(realpath --relative-base=/cygdrive/c .) == /* ]]; then
|
|
|
|
echo "kaleidoscope-builder's Cygwin support is currently limited to running from within /cygdrive/c"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
TMPDIR="$(realpath --relative-to=./ ${TMPDIR})"
|
|
|
|
|
|
|
|
fi
|