From 79d2d46a196614e3997e1afd7df02081a6b56c13 Mon Sep 17 00:00:00 2001 From: Jesse Vincent Date: Wed, 22 Sep 2021 15:13:54 -0700 Subject: [PATCH] Remove historical 'kaleidoscope-builder' - It was supposed to have been fully removed six months ago --- .kaleidoscope-builder.conf | 3 - bin/find-device-port-freebsd | 24 - bin/find-device-port-linux-udev | 92 --- bin/find-device-port-macos | 113 --- bin/find-device-port-windows.ps1 | 41 - bin/kaleidoscope-builder | 738 ------------------ docs/UPGRADING.md | 7 + etc/kaleidoscope-builder.conf | 274 ------- .../Atreus/.kaleidoscope-builder.conf | 2 - 9 files changed, 7 insertions(+), 1287 deletions(-) delete mode 100644 .kaleidoscope-builder.conf delete mode 100755 bin/find-device-port-freebsd delete mode 100644 bin/find-device-port-linux-udev delete mode 100644 bin/find-device-port-macos delete mode 100644 bin/find-device-port-windows.ps1 delete mode 100755 bin/kaleidoscope-builder delete mode 100644 etc/kaleidoscope-builder.conf delete mode 100644 examples/Devices/Keyboardio/Atreus/.kaleidoscope-builder.conf diff --git a/.kaleidoscope-builder.conf b/.kaleidoscope-builder.conf deleted file mode 100644 index 4acea89e..00000000 --- a/.kaleidoscope-builder.conf +++ /dev/null @@ -1,3 +0,0 @@ -# -*- mode: sh -*- - -DEFAULT_SKETCH=Kaleidoscope diff --git a/bin/find-device-port-freebsd b/bin/find-device-port-freebsd deleted file mode 100755 index afe08934..00000000 --- a/bin/find-device-port-freebsd +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env perl - -use warnings; -use strict; - -# -# Scan all USB devices to find the Model 01's modem device number. -# -my @output = qx(/usr/sbin/usbconfig show_ifdrv); -my $serial_port_number; - -foreach my $line (@output) { - chomp $line; - - next unless $line =~ m/umodem(\d+):.*Keyboardio Model 01/; - $serial_port_number = $1; -} - -die "Can't find Model 01" unless defined($serial_port_number); - -my $serial_port_name = "/dev/cuaU$serial_port_number"; -die "Missing serial port at $serial_port_name" unless -e $serial_port_name; -print "$serial_port_name\n"; -exit 0; diff --git a/bin/find-device-port-linux-udev b/bin/find-device-port-linux-udev deleted file mode 100644 index 5d00c7a6..00000000 --- a/bin/find-device-port-linux-udev +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env perl -# find-device-port-linux-udev - Kaleidoscope helper tool -# Copyright (C) 2017-2018 Keyboard.io, Inc. -# -# This program is free software: you can redistribute it and/or modify it under -# the terms of the GNU General Public License as published by the Free Software -# Foundation, version 3. -# -# 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. -# -# You should have received a copy of the GNU General Public License along with -# this program. If not, see . - -use warnings; -use strict; - -use FindBin qw{$Bin}; - -die "Usage: $0 VID PID [-v]\n" unless @ARGV >= 2; - -my $vid = shift @ARGV; -my $pid = shift @ARGV; -my $verbose = shift @ARGV if (@ARGV); -my $prefix = '/dev/serial/by-id/'; -my @paths = `ls $prefix`; -my %devices; -my @log; - -sub debug { - if ($verbose) { - print STDERR @_; - } else { - push @log, @_; - } -} - -sub print_warning { - print STDERR @_; -} - - -debug "Looking for USB device with vid=$vid and pid=$pid\n"; - -for my $path (@paths) { - chomp($path); - debug "Examining $path\n"; - debug " not symlink\n" unless -l $prefix . $path; - next unless -l $prefix . $path; - my @data = `udevadm info -q property --name=${prefix}${path}`; - for my $line (@data) { - chomp($line); - my ( $key, $val ) = split( /=/, $line, 2 ); - $devices{$path}{$key} = $val; - } - if ( hex $devices{$path}{'ID_VENDOR_ID'} != hex $vid ) { - debug " ID_VENDOR_ID $devices{$path}{'ID_VENDOR_ID'} != $vid\n"; - next; - } - if ( hex $devices{$path}{'ID_MODEL_ID'} != hex $pid ) { - debug " ID_MODEL_ID $devices{$path}{'ID_MODEL_ID'} != $pid\n"; - next; - } - - debug " Found keyboard!\n"; - - if ( $devices{$path}{'ID_MM_DEVICE_IGNORE'} ) { - debug " ID_MM_DEVICE_IGNORE is set - good!\n"; - } - - if ( $devices{$path}{'ID_MM_CANDIDATE'}) { - my $rules = "$Bin/../etc/60-kaleidoscope.rules"; - print_warning < and Jesse Vincent - -use warnings; -use strict; - -my $vid = shift @ARGV; -my $pid = shift @ARGV; - -if (!defined $vid || !defined $pid) { - die "$0 has two required parameters, VID and PID"; -} - -# ioreg might be more machine-readable than system_profiler, but I haven't been able to -# get it to produce useful output -my @output = qx(/usr/sbin/system_profiler SPUSBDataType 2> /dev/null); - -my $serial = ""; -my $location = ""; - -my $output = join('', @output); - -my @stanzas = split(/\n\n/, $output); -foreach my $stanza (@stanzas) { - if ($stanza =~ /Product ID: ${pid}/ && $stanza =~ /Vendor ID: ${vid}/) { - if ($stanza =~ /Serial Number: (.*?)$/m) { - $serial = $1; - } - if ($stanza =~ /Location ID: (.*?)$/m) { - $location = $1; - } - - if ($serial) { - try_for_raw_serialnum($serial); - } - if ($location) { - try_for_location_id($location); - } - if ($serial) { - try_for_sn_prefix($serial); - } - - } -} - -sub try_for_raw_serialnum { - my $sn = shift; - - my $serial_port_name = "/dev/cu.usbmodem" . $sn; - exit_with_port_if_exists($serial_port_name); - - # High Sierra sometimes has a mismatch between the serial number and the device - # filename. I'm not sure why, but system_profiler has a serial number ending in "E", - # whereas the device filename ends in "1". In fact, when I change HID.getShortName() - # to return "kbio02", the final character is replaced with a "1". - - if ($serial_port_name =~ /\d$/) { - chop $serial_port_name; - exit_with_port_if_exists($serial_port_name . "1"); - } else { - # If the serial port name doesn't end with a digit, try -appending- rather than replacing - # the last character of the port name - exit_with_port_if_exists($serial_port_name . "1"); - - # and if that didn't work, try replacing the last character with a "1" anyway. - # Jason Koh reports that he saw this behavior as required on Catalina in May 2020. - - chop $serial_port_name; - exit_with_port_if_exists($serial_port_name . "1"); - } - - -} - -sub try_for_location_id { - my $location_id = shift; - - # macOS truncates the string of "0"s from the right of the location id. - # Here, also, the final character is an appended "1", so if macOS ever stops doing that, - # this will need an update, as well. - if ($location_id =~ /0x(\d+?)0*\b/) { - my $loc = $1; - exit_with_port_if_exists("/dev/cu.usbmodem" . $loc . "1"); - } -} - -sub try_for_sn_prefix { - my $sn = shift; - # If macOS has appended 'E', take it off to maximise our chances of a match. - $sn =~ s/E$//; - - # If none of the above tests succeeds, just list the directory and see if there are any - # files that have the device shortname that we expect: - foreach my $line (qx(ls /dev/cu.usbmodem*)) { - if ($line =~ /${sn}/) { - chomp $line; - print $line; - exit 0; - } - } -} - -sub exit_with_port_if_exists { - my $serial_port_name = shift; - - if (-e $serial_port_name) { - print $serial_port_name; - exit 0; - } -} diff --git a/bin/find-device-port-windows.ps1 b/bin/find-device-port-windows.ps1 deleted file mode 100644 index 0764efd3..00000000 --- a/bin/find-device-port-windows.ps1 +++ /dev/null @@ -1,41 +0,0 @@ -# Usage: -# -# > find-device-port-cygwin.ps1 '1209' '2300' -Format COM -# COM7 -# > find-device-port-cygwin.ps1 '1209' '2300' -Format WSL -# /dev/ttyS7 -# > find-device-port-cygwin.ps1 '1209' '2300' -Format Cygwin -# /dev/ttyS6 -Param( - [string]$VendorID, - [string]$ProductID, # Careful; $PID is a different builtin - [ValidateSet('COM','Cygwin','WSL')][string]$Format -) - -$DeviceParametersRegKey = @(Get-ChildItem -ErrorAction SilentlyContinue -Recurse 'HKLM:\SYSTEM\CurrentControlSet\Enum' | - Where-Object Name -match "VID_$VendorID&PID_$ProductID" | - Where-Object Property -eq PortName) - -if ($DeviceParametersRegKey.Count -eq 0) { - throw "Could not find any devices matching VID $VendorID and PID $ProductID which were mapped to a COM port" -} - -if ($DeviceParametersRegKey.Count -ge 2) { - throw "More than one devices matching VID $VendorID and PID $ProductID were found mapped to a COM port" -} - -# This will be of form 'COM6' -$COMPortName = ($DeviceParametersRegKey | Get-ItemProperty).PortName -$COMPortNumber = [int]$COMPortName.Substring(3) - -if ($Format -eq 'COM') { - $Output = $COMPortName -} elseif ($Format -eq 'WSL') { - $Output = "/dev/ttyS$COMPortNumber" -} elseif ($Format -eq 'Cygwin') { - $CygwinPortNumber = $COMPortNumber - 1 - $Output = "/dev/ttyS$CygwinPortNumber" -} - -# "-NoNewline" below is important to prevent bash from seeing an extra trailing '\r' -Write-Host -NoNewline $Output diff --git a/bin/kaleidoscope-builder b/bin/kaleidoscope-builder deleted file mode 100755 index 6d2c9f90..00000000 --- a/bin/kaleidoscope-builder +++ /dev/null @@ -1,738 +0,0 @@ -#!/usr/bin/env bash -# kaleidoscope-builder - Kaleidoscope helper tool -# Copyright (C) 2017-2018 Keyboard.io, Inc. -# -# This program is free software: you can redistribute it and/or modify it under -# the terms of the GNU General Public License as published by the Free Software -# Foundation, version 3. -# -# 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. -# -# You should have received a copy of the GNU General Public License along with -# this program. If not, see . - -set -e - -###### -###### Build and output configuration -###### - -absolute_filename() { - echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")" -} - - - -build_version () { - : "${LIB_PROPERTIES_PATH:="../.."}" - GIT_VERSION="$(cd "${SKETCH_DIR}"; if [ -d .git ]; then echo -n '-g' && git describe --abbrev=4 --dirty --always; fi)" - LIB_VERSION="$(cd "${SKETCH_DIR}"; (grep version= "${LIB_PROPERTIES_PATH}/library.properties" 2>/dev/null || echo version=0.0.0) | cut -d= -f2)${GIT_VERSION}" -} - -build_paths() { - # We need that echo because we\re piping to cksum - # shellcheck disable=SC2005 - SKETCH_IDENTIFIER="$(echo "${SKETCH_FILE_PATH}" | cksum | cut -d ' ' -f 1)-${SKETCH_FILE_NAME}" - : "${KALEIDOSCOPE_TEMP_PATH:=${TMPDIR:-/tmp}/kaleidoscope-${USER}}" - - : "${KALEIDOSCOPE_BUILD_PATH:=${KALEIDOSCOPE_TEMP_PATH}/sketch}" - : "${KALEIDOSCOPE_OUTPUT_PATH:=${KALEIDOSCOPE_TEMP_PATH}/sketch}" - - : "${SKETCH_OUTPUT_DIR:=${SKETCH_IDENTIFIER}/output}" - : "${SKETCH_BUILD_DIR:=${SKETCH_IDENTIFIER}/build}" - - : "${BUILD_PATH:=${KALEIDOSCOPE_BUILD_PATH}/${SKETCH_BUILD_DIR}}" - : "${OUTPUT_PATH:=${KALEIDOSCOPE_OUTPUT_PATH}/${SKETCH_OUTPUT_DIR}}" - - : "${CCACHE_WRAPPER_PATH:=${KALEIDOSCOPE_TEMP_PATH}/ccache/bin}" - : "${CORE_CACHE_PATH:=${KALEIDOSCOPE_TEMP_PATH}/arduino-cores}" - - mkdir -p "$CORE_CACHE_PATH" - mkdir -p "$BUILD_PATH" -} - -build_filenames () { - : "${OUTPUT_FILE_PREFIX:=${SKETCH_BASE_NAME}-${LIB_VERSION}}" - : "${HEX_FILE_PATH:=${OUTPUT_PATH}/${OUTPUT_FILE_PREFIX}.hex}" - : "${HEX_FILE_WITH_BOOTLOADER_PATH:=${OUTPUT_PATH}/${OUTPUT_FILE_PREFIX}-with-bootloader.hex}" - : "${ELF_FILE_PATH:=${OUTPUT_PATH}/${OUTPUT_FILE_PREFIX}.elf}" - : "${LIB_FILE_PATH:=${OUTPUT_PATH}/${OUTPUT_FILE_PREFIX}.a}" -} - - -enable_ccache () { - if [ -z "${CCACHE_NOT_SUPPORTED}" ] && [ "$(command -v ccache)" ]; then - if ! [ -d "$CCACHE_WRAPPER_PATH" ]; then - mkdir -p "$CCACHE_WRAPPER_PATH" - - if ! [ -h "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}${C_COMPILER_BASENAME}" ]; then - ln -s "$(command -v ccache)" "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}${C_COMPILER_BASENAME}" - fi - - if ! [ -h "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}${CXX_COMPILER_BASENAME}" ]; then - ln -s "$(command -v ccache)" "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}${CXX_COMPILER_BASENAME}" - fi - - if ! [ -h "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}nm" ]; then - ln -s "${AVR_NM}" "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}nm" - fi - - if ! [ -h "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}objcopy" ]; then - ln -s "${AVR_OBJCOPY}" "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}objcopy" - fi - - if ! [ -h "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}ar" ]; then - ln -s "${AVR_AR}" "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}ar" - fi - - if ! [ -h "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}size" ]; then - ln -s "${AVR_SIZE}" "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}size" - fi - fi - - export CCACHE_PATH=${COMPILER_PATH}/ - CCACHE_ENABLE="-prefs compiler.path=${CCACHE_WRAPPER_PATH}/" - fi -} - - -firmware_size () { - if [ "${ARCH}" = "virtual" ]; then - echo "[Size not computed for virtual build]" - return - fi - - : "${MAX_PROG_SIZE:=$(get_arduino_pref 'upload.maximum_size')}" - - ## This is a terrible hack, please don't hurt me. - algernon - - set +e - raw_output=$("$@" 2> /dev/null) - rc=$? - set -e - - if [ $rc -eq 0 ]; then - output="$(echo "${raw_output}"| grep "\\(Program\\|Data\\):" | sed -e 's,^, - ,' && echo)" - - PROGSIZE="$(echo "${output}" | grep "Program:" | cut -d: -f2 | awk '{print $1}')" - - 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 disable=SC1117 - echo "${output}" | sed -e "s/\(Program:.*\)(\([0-9\.]*%\) Full)/\1(${PERCENT}% Full)/" - else - echo "Unable to determine image size." - fi -} - - -find_sketch () { - if [ -z "${SKETCH}" ]; then - echo "SKETCH needs to be set before including this file!" >&2 - exit 1 - fi - - SKETCH_DIR="${SKETCH}" - SKETCH_BASE_NAME=$(basename "$SKETCH") - SKETCH_FILE_NAME="${SKETCH_BASE_NAME}.ino" - - for path in "${SKETCH_DIR}" \ - "src" \ - "."; do - if [ -f "${path}/${SKETCH_FILE_NAME}" ]; then - SKETCH_DIR="${path}" - SKETCH_FILE_PATH=$(absolute_filename "${SKETCH_DIR}/${SKETCH_FILE_NAME}") - return - fi - done - echo "I couldn't find your sketch (.ino file)" >&2 - exit 1 -} - - - -prompt_before_flashing () { - flashing_instructions=$(get_arduino_pref 'build.flashing_instructions') - - if [ "x${flashing_instructions}x" = "xx" ]; then - flashing_instructions="If your keyboard needs you to do something to put it in flashing mode, do that now." - fi - - printf '%b\n\n' "${flashing_instructions}" - echo "" - echo "When you're ready to proceed, press 'Enter'." - - # We do not want to permit line continuations here. We just want a newline. - # shellcheck disable=SC2162 - read -} - -flash () { - compile "$@" - - # Check to see if we can see a keyboard bootloader port. - # If we -can-, then we should skip over the "reset to bootloader" thing - find_bootloader_ports - if [ -z "${DEVICE_PORT_BOOTLOADER}" ]; then - prompt_before_flashing - - # This is defined in the (optional) user config. - # shellcheck disable=SC2154 - ${preFlash_HOOKS} - - # If we're -not- doing a manual reset, then try to do it automatically - if [ -z "${MANUAL_RESET}" ]; then - reset_device - sleep 2 - find_bootloader_ports - # Otherwise, poll for a bootloader port. - else - wait_for_bootloader_port - fi - - fi - - check_bootloader_port_and_flash - - # This is defined in the (optional) user config. - # shellcheck disable=SC2154 - ${postFlash_HOOKS} -} - -wait_for_bootloader_port() { - declare -i tries - tries=15 - - while [ "$tries" -gt 0 ] && [ -z "${DEVICE_PORT_BOOTLOADER}" ]; do - sleep 1 - printf "." - find_bootloader_ports - # the variable annotations do appear to be necessary - # shellcheck disable=SC2004 - tries=$(($tries-1)) - done - - if [ "$tries" -gt 0 ]; then - echo "Found." - else - echo "Timed out." - fi -} - -check_bootloader_port () { - if [ -z "${DEVICE_PORT_BOOTLOADER}" ]; then - echo "Unable to detect a keyboard in bootloader mode." - echo "You may need to hold a key or hit a reset button." - echo "Please check your keyboard's documentation" - return 1 - fi - -} - -check_bootloader_port_and_flash () { - - if ! check_bootloader_port; then - return 1 - fi - - echo "Flashing your keyboard:" - - # If the flash fails, try a second time - if ! flash_over_usb; then - sleep 2 - if ! flash_over_usb; then - if [ "${ARDUINO_VERBOSE}" != "-verbose" ]; then - echo "Something went wrong." - echo "You might want to try flashing again with the VERBOSE environment variable set" - fi - - return 1 - fi - fi - echo "Keyboard flashed successfully!" - return 0 -} - -flash_over_usb () { - - FLASH_CMD=$(${AVRDUDE} \ - -C "${AVRDUDE_CONF}" \ - -p"${MCU}" \ - -cavr109 \ - -D \ - -P "${DEVICE_PORT_BOOTLOADER}" \ - -b57600 \ - "-Uflash:w:${HEX_FILE_PATH}:i") - - if [ "${ARDUINO_VERBOSE}" != "-verbose" ]; then - ${FLASH_CMD} 2>&1 |grep -v ^avrdude | grep -v '^$' |grep -v '^ ' | grep -vi programmer - return "${PIPESTATUS[0]}" - else - ${FLASH_CMD} - return $? - fi -} - -flash_from_bootloader() { - compile "$@" - prompt_before_flashing - find_bootloader_ports - check_bootloader_port_and_flash -} - -program() { - compile "$@" - prompt_before_flashing - flash_with_programmer -} - -flash_with_programmer() { - ${AVRDUDE} -v \ - -C "${AVRDUDE_CONF}" \ - -p"${MCU}" \ - -cusbtiny \ - -D \ - -B 1 \ - "-Uflash:w:${HEX_FILE_PATH}:i" -} - -find_bootloader_path() { - BOOTLOADER_FILE=$( get_arduino_pref 'bootloader.file' ) - : "${BOOTLOADER_FILE:=caterina/Caterina.hex}" - : "${BOOTLOADER_PATH:=${BOARD_HARDWARE_PATH}/keyboardio/avr/bootloaders/${BOOTLOADER_FILE}}" -} - - -hex_with_bootloader () { - compile - - find_bootloader_path - - awk '/^:00000001FF/ == 0' "${HEX_FILE_PATH}" > "${HEX_FILE_WITH_BOOTLOADER_PATH}" - echo "Using ${BOOTLOADER_PATH}" - ${MD5} "${BOOTLOADER_PATH}" - cat "${BOOTLOADER_PATH}" >> "${HEX_FILE_WITH_BOOTLOADER_PATH}" - ln -sf -- "${OUTPUT_FILE_PREFIX}-with-bootloader.hex" "${OUTPUT_PATH}/${SKETCH_BASE_NAME}-latest-with-bootloader.hex" - cat <<- EOF - - Combined firmware and bootloader are now at ${HEX_FILE_WITH_BOOTLOADER_PATH} - Make sure you have the bootloader version you expect. - - And TEST THIS ON REAL HARDWARE BEFORE YOU GIVE IT TO ANYONE - - EOF -} - -build () { - compile "$@" - size "$@" -} - - -prepare_ccache () { - build_paths - enable_ccache -} -compile () { - find_sketch - build_version - build_paths - build_filenames - # If the hex file is older than the sketch file, or the hex file does not exist - # then rebuild. This is not as correct as letting make check our dependencies - # But it's less broken for most user use cases - # TODO(anyone): Make this suck less - if [ "${HEX_FILE_PATH}" -ot "${SKETCH_FILE_PATH}" ]; then - do_compile "$@" - fi - -} - - -do_compile () { - prepare_ccache - - install -d "${OUTPUT_PATH}" - - echo "Building ${SKETCH_FILE_PATH}" - - # This is defined in the (optional) user config. - # shellcheck disable=SC2154 - ${compile_HOOKS} - - 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\"" - fi - - ARDUINO_PACKAGES="" - if [ -d "${ARDUINO_PACKAGE_PATH}" ]; then - # shellcheck disable=SC2089 - # We want literal backslashes here, not arrays. - ARDUINO_PACKAGES="-hardware \"${ARDUINO_PACKAGE_PATH}\"" - fi - - SAVED_BOARD="${BOARD}" - SAVED_FQBN="${FQBN}" - if [ -e "${SKETCH_DIR}/.kaleidoscope-builder.conf" ]; then - # shellcheck disable=SC1090 - BOARD="$(. "${SKETCH_DIR}"/.kaleidoscope-builder.conf && echo "${BOARD}")" - # shellcheck disable=SC1090 - FQBN="$(. "${SKETCH_DIR}"/.kaleidoscope-builder.conf && echo "${FQBN}")" - if [ -n "${BOARD}" ]; then - if [ -z "${ARCH}" ]; then - FQBN="keyboardio:avr:${BOARD}" - else - FQBN="keyboardio:${ARCH}:${BOARD}" - fi - fi - fi - - _CMD_CXX="${CXX:-${COMPILER_PREFIX}${CXX_COMPILER_BASENAME}${COMPILER_SUFFIX}}" - _CMD_CC="${CC:-${COMPILER_PREFIX}${C_COMPILER_BASENAME}${COMPILER_SUFFIX}}" - _CMD_AR="${AR:-${COMPILER_PREFIX}${AR_BASENAME}${COMPILER_SUFFIX}}" - - # SC2091: We do not care if quotes or backslashes are not respected. - # SC2086: We want word splitting. - # shellcheck disable=SC2086,SC2090 - "${ARDUINO_BUILDER}" \ - -compile \ - ${ARDUINO_PACKAGES} \ - -hardware "${ARDUINO_PATH}/hardware" \ - -hardware "${BOARD_HARDWARE_PATH}" \ - ${ARDUINO_TOOLS_FLAG:+"${ARDUINO_TOOLS_FLAG}"} ${ARDUINO_TOOLS_PARAM:+"${ARDUINO_TOOLS_PARAM}"} \ - -tools "${ARDUINO_BUILDER_TOOLS_PATH}" \ - -fqbn "${FQBN}" \ - -libraries "." \ - -libraries "${KALEIDOSCOPE_DIR}" \ - -libraries "${BOARD_HARDWARE_PATH}/.." \ - ${local_LIBS} \ - ${EXTRA_BUILDER_ARGS} \ - -build-cache "${CORE_CACHE_PATH}" \ - -build-path "${BUILD_PATH}" \ - -ide-version "${ARDUINO_IDE_VERSION}" \ - -built-in-libraries "${ARDUINO_PATH}/libraries" \ - -prefs "compiler.cpp.extra_flags=${ARDUINO_CFLAGS} ${LOCAL_CFLAGS}" \ - -prefs "compiler.path=${COMPILER_PATH}" \ - -prefs "compiler.c.cmd=${_CMD_CC}" \ - -prefs "compiler.cpp.cmd=${_CMD_CXX}" \ - -prefs "compiler.ar.cmd=${_CMD_AR}" \ - -prefs "compiler.c.elf.cmd=${_CMD_CXX}" \ - $CCACHE_ENABLE \ - -warnings all \ - ${ARDUINO_VERBOSE} \ - ${ARDUINO_AVR_GCC_PREFIX_PARAM} \ - "${SKETCH_FILE_PATH}" - - if [ -z "${LIBONLY}" ]; then - cp "${BUILD_PATH}/${SKETCH_FILE_NAME}.hex" "${HEX_FILE_PATH}" - cp "${BUILD_PATH}/${SKETCH_FILE_NAME}.elf" "${ELF_FILE_PATH}" - ln -sf "${OUTPUT_FILE_PREFIX}.hex" "${OUTPUT_PATH}/${SKETCH_BASE_NAME}-latest.hex" - ln -sf "${OUTPUT_FILE_PREFIX}.elf" "${OUTPUT_PATH}/${SKETCH_BASE_NAME}-latest.elf" - else - cp "${BUILD_PATH}/${SKETCH_FILE_NAME}.a" "${LIB_FILE_PATH}" - ln -sf "${OUTPUT_FILE_PREFIX}.a" "${OUTPUT_PATH}/${SKETCH_BASE_NAME}-latest.a" - fi - - if [ "${ARDUINO_VERBOSE}" = "-verbose" ]; then - echo "Build artifacts can be found in ${BUILD_PATH}"; - fi - - BOARD="${SAVED_BOARD}" - FQBN="${SAVED_FQBN}" -} - -find_all_sketches () { - for plugin in ./*.ino \ - $([ -d examples ] && find examples -name '*.ino') \ - src/*.ino; do - if [ -d "$(dirname "${plugin}")" ] || [ -f "${plugin}" ]; then - p="$(basename "${plugin}" .ino)" - if [ "${p}" != '*' ]; then - case "${plugin}" in - examples/*/${p}/${p}.ino) - echo "${plugin}" | sed -e "s,examples/,," | sed -e "s,/${p}\\.ino,," - ;; - *) - echo "${p}" - ;; - esac - fi - fi - done | sort -} - -build_all () { - plugins="$(find_all_sketches)" - - for plugin in ${plugins}; do - export SKETCH="${plugin}" - $0 "${plugin}" build - done -} - - -compile_all () { - plugins="$(find_all_sketches)" - - for plugin in ${plugins}; do - export SKETCH="${plugin}" - $0 "${plugin}" compile - done -} - - -size () { - compile - - echo "- Size: ${ELF_FILE_PATH}" - # shellcheck disable=SC2086 - firmware_size "${AVR_SIZE}" ${AVR_SIZE_FLAGS} "${ELF_FILE_PATH}" - echo -} - -size_map () { - compile - - "${AVR_NM}" --size-sort -C -r -l -t decimal "${ELF_FILE_PATH}" -} - -disassemble () { - compile - - "${AVR_OBJDUMP}" -C -d "${ELF_FILE_PATH}" -} - -decompile () { - disassemble -} - -clean () { - find_sketch - build_paths - rm -rf -- "${OUTPUT_PATH}" - rm -rf -- "${BUILD_PATH}" - kaleidoscope_dir="$(dirname "$0")/.." - if [ -d "${kaleidoscope_dir}/testing/googletest/build" ]; then - ( cd "${kaleidoscope_dir}/testing/googletest/build" && - cmake .. && - make clean) - fi -} - -reset_device() { - find_device_port - check_device_port - reset_device_cmd -} - -check_device_port () { - if [ -z "$DEVICE_PORT" ]; then - cat <&2 - -I couldn't autodetect the keyboard's serial port. - -If you see this message and your keyboard is connected to your computer, -it may mean that our serial port detection logic is buggy or incomplete. -In that case, please report this issue at: - https://github.com/keyboardio/Kaleidoscope -EOF - exit 1 - elif echo "$DEVICE_PORT" | grep -q '[[:space:]]'; then - cat <&2 -Unexpected whitespace found in detected serial port: - - $DEVICE_PORT - -If you see this message, it means that our serial port -detection logic is buggy or incomplete. - -Please report this issue at: - https://github.com/keyboardio/Kaleidoscope -EOF - exit 1 - fi - - if ! [ -w "$DEVICE_PORT" ]; then - cat <&2 - -In order to update your keyboard's firmware you need to have permission -to write to its serial port $DEVICE_PORT. - -It appears that you do not have this permission: - - $(ls -l "$DEVICE_PORT") - -This may be because you're not in the correct unix group: - - $(stat -c %G "$DEVICE_PORT"). - -You are currently in the following groups: - - $(id -Gn) - -Please ensure you have followed the instructions on setting up your -account to be in the right group: - -https://github.com/keyboardio/Kaleidoscope/wiki/Install-Arduino-support-on-Linux - -EOF - exit 1 - fi -} - - -deprecation_message() { -echo "kaleidoscope-builder is deprecated and will be removed" -echo "by February 15, 2021" -echo "" -echo "To switch to the new build system, replace your sketch's" -echo "Makefile with a copy of:" -echo "" -echo "${KALEIDOSCOPE_DIR}/etc/Makefile.sketch" -echo "" -} - -usage () { - cat <<- EOF - Usage: $0 SKETCH commands... - - Runs all of the commands in the context of the Sketch. - - Available commands: - - help - This help screen. - - compile - Compiles the sketch. - - size - Reports the size of the compiled sketch. - - build - Runs compile and report-size. - - clean - Cleans up the output directory. - - size-map - Displays the size map for the sketch. - - disassemble - Decompile the sketch. - - reset-device - Reset the device. - - flash - Flashes the firmware using avrdude. - - build-all - Build all Sketches we can find. - - EOF -} - - -KALEIDOSCOPE_DIR="$(cd "$(dirname "$0")"/..; pwd)" -# shellcheck disable=SC2034 -KALEIDOSCOPE_BIN_DIR="${KALEIDOSCOPE_DIR}/bin/" - - -help () { - usage -} - -if [ $# -lt 1 ]; then - usage - exit 1 -fi - -## Parse the command-line -## - anything that has a =, is an env var -## - from the remaining stuff, the first one is the Library/Sketch -## - everything else are commands -## -## - if there is only one argument, that's a command - - -deprecation_message - - -# shellcheck disable=SC2155 -export SOURCEDIR="$(pwd)" - - -for conf_file in \ - "${HOME}/.kaleidoscope-builder.conf" \ - "${SOURCEDIR}/.kaleidoscope-builder.conf" \ - "${SOURCEDIR}/kaleidoscope-builder.conf" \ - "${KALEIDOSCOPE_DIR}/etc/kaleidoscope-builder.conf"; do - if [ -e "${conf_file}" ]; then - # shellcheck disable=SC1090 - . "${conf_file}" - fi - -done - -# shellcheck disable=SC1090 - - -if [ -n "${VERBOSE}" ] && [[ "${VERBOSE}" -gt 0 ]]; then - ARDUINO_VERBOSE="-verbose" -else - ARDUINO_VERBOSE="-quiet" -fi - -cmds="" - -## Export vars -for i in $(seq 1 $#); do - v="$1" - shift - - case "${v}" in - *=*) - # Exporting an expansion is *precisely* what we want here. - # shellcheck disable=SC2086,SC2163 - export ${v} - ;; - *) - cmds="${cmds} ${v}" - ;; - esac -done - -# Word splitting is desired here. -# shellcheck disable=SC2086 -set -- ${cmds} - -if [ $# -eq 1 ]; then - cmd="$(echo "$1" | tr '-' '_')" - ${cmd} - exit $? -fi - -SKETCH="$1" -shift - -if [ "${SKETCH}" = "default" ]; then - SKETCH="${DEFAULT_SKETCH}" -fi - -cmds="" - -# shellcheck disable=2034 -for i in $(seq 1 $#); do - cmds="${cmds} $(echo "$1" | tr '-' '_')" - shift -done - -for cmd in ${cmds}; do - ${cmd} -done diff --git a/docs/UPGRADING.md b/docs/UPGRADING.md index 25b98358..69f43dee 100644 --- a/docs/UPGRADING.md +++ b/docs/UPGRADING.md @@ -435,6 +435,13 @@ As a developer, one can continue using `millis()`, but migrating to `Kaleidoscop ## Breaking changes +### + +`kaleidoscope-builder` has been removed. + +We replaced it with a new Makefile based build system that uses `arduino-cli` instead of of the full Arduino IDE. This means that you can now check out development copies of Kaliedoscope into any directory, using the `KALEIDOSCOPE_DIR` environment variable to point to your installation. + + ### OneShot meta keys The special OneShot keys `OneShot_MetaStickyKey` & `OneShot_ActiveStickyKey` are no longer handled by the OneShot plugin directly, but instead by a separate OneShotMetaKeys plugin. If you use these keys in your sketch, you will need to add the new plugin, and register it after OneShot in `KALEIDOSCOPE_INIT_PLUGINS()` for those keys to work properly. diff --git a/etc/kaleidoscope-builder.conf b/etc/kaleidoscope-builder.conf deleted file mode 100644 index 4f3e7437..00000000 --- a/etc/kaleidoscope-builder.conf +++ /dev/null @@ -1,274 +0,0 @@ -# -*- shell-script -*- - -## NEEDS: SKETCH -## Should be included when the current directory is the dir of the Sketch. - -SKETCH="${SKETCH:-${DEFAULT_SKETCH}}" - -######## -######## Keyboard hardware definitions -######## - -: "${BOARD:=model01}" -: "${MCU:=atmega32u4}" - -if [ -z "${ARCH}" ]; then - ARCH=$(echo "${FQBN}" | sed -n -e 's/^[^:]\+:\([^:]\+\).*/\1/p') -fi - -if [ "${ARCH}" = "virtual" ]; then - : "${FQBN:=keyboardio:virtual:${BOARD}}" - - # Set the compiler path for virtual builds - # - if [ -z "${COMPILER_PATH}" ]; then - COMPILER_PATH="/usr/bin/" - fi - - COMPILER_PREFIX="" -else - ARCH="avr" -fi - -if [ -z "${FQBN}" ]; then - : "${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) -uname_O=$(uname -o 2>/dev/null || echo not) - - -find_device_vid_pid() { - : ${VID:=$(get_arduino_pref 'build.vid')} - : ${SKETCH_PID:=$(get_arduino_pref 'build.pid')} - : ${BOOTLOADER_PID:=$(get_arduino_pref 'bootloader.pid')} - : ${BOOTLOADER_VID:=$(get_arduino_pref 'bootloader.vid')} -} - - -get_arduino_pref() { - pref=$1 - # Strip the preference name. And then strip leading and trailing quotations - MESSAGE=$(dump_arduino_prefs | grep --max-count=1 ${pref}= | sed -e s/^.*${pref}=// -e 's/^"//' -e 's/"$//') - echo $MESSAGE -} - - -dump_arduino_prefs() { -# 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 - - if [ "x${_ARDUINO_PREFS}x" == "xx" ]; then - - _ARDUINO_PREFS=$("${ARDUINO_BUILDER}" \ - -hardware "${ARDUINO_PATH}/hardware" \ - -hardware "${BOARD_HARDWARE_PATH}" \ - ${ARDUINO_TOOLS_FLAG:+"${ARDUINO_TOOLS_FLAG}"} ${ARDUINO_TOOLS_PARAM:+"${ARDUINO_TOOLS_PARAM}"} \ - -tools "${ARDUINO_BUILDER_TOOLS_PATH}" \ - -fqbn "${FQBN}" \ - -build-path "${ARDUINO_PATH}" \ - -dump-prefs "${SKETCH_DIR}/${SKETCH}.ino" ) - fi - echo "$_ARDUINO_PREFS" - -} - -find_device_port() { - find_device_vid_pid - DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-linux-udev" - if [[ "${DEVICE_PORT}" = "" ]]; then - DEVICE_PORT="$(perl ${DEVICE_PORT_PROBER} ${VID} ${SKETCH_PID})" - else - echo "DEVICE_PORT=\"${DEVICE_PORT}\" predefined." - fi -} - -reset_device_cmd() { - if [ -z ${NO_RESET} ]; then - stty -F ${DEVICE_PORT} 1200 hupcl - fi -} - -find_bootloader_ports() { - find_device_vid_pid - : "${BOOTLOADER_VID:=${VID}}" - DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-linux-udev" - if [[ "${DEVICE_PORT_BOOTLOADER}" = "" ]]; then - DEVICE_PORT_BOOTLOADER="$(perl ${DEVICE_PORT_PROBER} ${BOOTLOADER_VID} ${BOOTLOADER_PID})" - else - echo "DEVICE_PORT_BOOTLOADER=\"${DEVICE_PORT_BOOTLOADER}\" predefined." - fi -} - - -MD5="md5sum" - -if [ "${uname_S}" = "Darwin" ]; then - - find_device_port() { - DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-macos" - DEVICE_PORT="$(perl ${DEVICE_PORT_PROBER} ${VID} ${SKETCH_PID})" - } - - reset_device_cmd() { - /bin/stty -f ${DEVICE_PORT} 1200 - } - - : "${ARDUINO_PATH:=/Applications/Arduino.app/Contents/Java/}" - : "${ARDUINO_PACKAGE_PATH:=${HOME}/Library/Arduino15/packages}" - : "${ARDUINO_LOCAL_LIB_PATH:=${HOME}/Documents/Arduino}" - - MD5="md5" - - find_bootloader_ports() { - find_device_vid_pid - : "${BOOTLOADER_VID:=${VID}}" - DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-macos" - if [[ "${DEVICE_PORT_BOOTLOADER}" = "" ]]; then - DEVICE_PORT_BOOTLOADER="$(perl ${DEVICE_PORT_PROBER} ${BOOTLOADER_VID} ${BOOTLOADER_PID})" - else - echo "DEVICE_PORT_BOOTLOADER=\"${DEVICE_PORT_BOOTLOADER}\" predefined." - fi - } - -elif [ "${uname_S}" = "FreeBSD" ]; then - - find_device_port() { - DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-freebsd" - DEVICE_PORT="$(perl ${DEVICE_PORT_PROBER})" - } - - reset_device_cmd() { - /bin/stty -f ${DEVICE_PORT} 1200 - } - - MD5="md5" - : "${AVR_SIZE:=/usr/local/bin/avr-size}" - : "${AVR_NM:=/usr/local/bin/avr-nm}" - : "${AVR_OBJDUMP:=/usr/local/bin/avr-objdump}" - : "${AVRDUDE:=/usr/local/bin/avrdude}" - : "${AVRDUDE_CONF:=/usr/local/etc/avrdude.conf}" - : "${ARDUINO_BUILDER:=/usr/local/bin/arduino-builder}" - - find_bootloader_ports() { - DEVICE_PORT_PROBER="${KALEIDOSCPE_BIN_DIR}/find-device-port-freebsd" - DEVICE_PORT_BOOTLOADER="$(perl ${DEVICE_PORT_PROBER})" - } - - 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 - - # Note: the default ARDUINO_PATH here is the default Arduino installation path on Windows, but it won't actually - # work in practice right now since we haven't fixed all bugs related to interpretation of spaces in these paths. - # - # 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. - : "${ARDUINO_PATH:=/cygdrive/c/Program\ Files\ (x86)/Arduino}" - : "${ARDUINO_PACKAGE_PATH:=/cygdrive/c/Users/${USER}/AppData/Local/Arduino15/packages}" - : "${ARDUINO_LOCAL_LIB_PATH:=/cygdrive/c/Users/${USER}/Arduino}" - TMPDIR="${ARDUINO_LOCAL_LIB_PATH:-/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 - - ARDUINO_PATH="$(realpath --relative-to=./ ${ARDUINO_PATH})" - ARDUINO_PACKAGE_PATH="$(realpath --relative-to=./ ${ARDUINO_PACKAGE_PATH})" - ARDUINO_LOCAL_LIB_PATH="$(realpath --relative-to=./ ${ARDUINO_LOCAL_LIB_PATH})" - TMPDIR="$(realpath --relative-to=./ ${ARDUINO_PATH})" - - find_device_port() { - find_device_vid_pid - 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)" - } - - reset_device_cmd() { - cmd /c mode ${DEVICE_COM_PORT} baud=1200 - } - - find_bootloader_ports() { - find_device_vid_pid - : "${BOOTLOADER_VID:=${VID}}" - 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)" - } - -fi - -###### -###### Arduino tools configuration -###### - -: "${ARDUINO_PATH:=/usr/local/arduino}" -: "${ARDUINO_LOCAL_LIB_PATH:=${HOME}/Arduino}" -: "${ARDUINO_TOOLS_PATH:=${ARDUINO_PATH}/hardware/tools}" -: "${ARDUINO_PACKAGE_PATH:=${HOME}/.arduino15/packages}" -: "${ARDUINO_BUILDER:=${ARDUINO_PATH}/arduino-builder}" -: "${ARDUINO_BUILDER_TOOLS_PATH:=${ARDUINO_PATH}/tools-builder}" - -ARDUINO_IDE_VERSION="10607" - -###### -###### Executable paths -###### - -# Allow the compiler path to be empty for virtual builds -: "${COMPILER_PATH=${ARDUINO_TOOLS_PATH}/avr/bin/}" - -COMPILER_SUFFIX="" - -C_COMPILER_BASENAME=$(basename ${CC:-gcc}) -CXX_COMPILER_BASENAME=$(basename ${CXX:-g++}) -AR_BASENAME=$(basename ${AR:-ar}) -OBJCOPY_BASENAME=$(basename ${OBJCOPY:-objcopy}) - -# Allow the compiler prefix to be empty for virtual builds -COMPILER_PREFIX="${COMPILER_PREFIX-avr-}" -: "${AVR_SIZE:=${COMPILER_PATH}/${COMPILER_PREFIX}size}" -: "${AVR_SIZE_FLAGS:=-C --mcu=${MCU}}" -: "${AVR_OBJDUMP:=${COMPILER_PATH}/${COMPILER_PREFIX}objdump}" -: "${AVR_OBJCOPY:=${COMPILER_PATH}/${COMPILER_PREFIX}objcopy}" -: "${AVR_NM:=${COMPILER_PATH}/${COMPILER_PREFIX}nm}" -: "${AVR_AR:=${COMPILER_PATH}/${COMPILER_PREFIX}ar}" -: "${AVR_GCC:=${COMPILER_PATH}/${COMPILER_PREFIX}${C_COMPILER_BASENAME}}" -AVR_GPLUSPLUS="${AVR_GCC:-${COMPILER_PATH}/${COMPILER_PREFIX}${CXX_COMPILER_BASENAME}}" - - - -: "${AVRDUDE:=${ARDUINO_TOOLS_PATH}/avr/bin/avrdude}" -: "${AVRDUDE_CONF:=${ARDUINO_TOOLS_PATH}/avr/etc/avrdude.conf}" - -###### -###### Source files and dependencies -###### - -: "${BOARD_HARDWARE_PATH:=${ARDUINO_LOCAL_LIB_PATH}/hardware}" - -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 diff --git a/examples/Devices/Keyboardio/Atreus/.kaleidoscope-builder.conf b/examples/Devices/Keyboardio/Atreus/.kaleidoscope-builder.conf deleted file mode 100644 index 5d03ea41..00000000 --- a/examples/Devices/Keyboardio/Atreus/.kaleidoscope-builder.conf +++ /dev/null @@ -1,2 +0,0 @@ -DEFAULT_SKETCH="Atreus" -BOARD="keyboardio_atreus"