# Hey Emacs, this is a -*- makefile -*- ############################################################################## # Architecture or project specific options # DFU_ARGS ?= ifneq ("$(SERIAL)","") DFU_ARGS += -S $(SERIAL) endif DFU_UTIL ?= dfu-util define EXEC_DFU_UTIL if ! $(DFU_UTIL) -l | grep -q "Found DFU"; then \ printf "$(MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY)" ;\ sleep $(BOOTLOADER_RETRY_TIME) ;\ while ! $(DFU_UTIL) -l | grep -q "Found DFU"; do \ printf "." ;\ sleep $(BOOTLOADER_RETRY_TIME) ;\ done ;\ printf "\n" ;\ fi $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin endef WB32_DFU_UPDATER ?= wb32-dfu-updater_cli define EXEC_WB32_DFU_UPDATER if ! wb32-dfu-updater_cli -l | grep -q "Found DFU"; then \ printf "$(MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY)" ;\ sleep $(BOOTLOADER_RETRY_TIME) ;\ while ! wb32-dfu-updater_cli -l | grep -q "Found DFU"; do \ printf "." ;\ sleep $(BOOTLOADER_RETRY_TIME) ;\ done ;\ printf "\n" ;\ fi $(WB32_DFU_UPDATER) -D $(BUILD_DIR)/$(TARGET).bin && $(WB32_DFU_UPDATER) -R endef dfu-util: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter $(call EXEC_DFU_UTIL) define EXEC_UF2_UTIL_DEPLOY $(UF2CONV) --wait --deploy $(BUILD_DIR)/$(TARGET).uf2 endef # TODO: Remove once ARM has a way to configure EECONFIG_HANDEDNESS # within the emulated eeprom via dfu-util or another tool ifneq (,$(filter $(MAKECMDGOALS), dfu-util-split-left uf2-split-left)) OPT_DEFS += -DINIT_EE_HANDS_LEFT endif ifneq (,$(filter $(MAKECMDGOALS), dfu-util-split-right uf2-split-right)) OPT_DEFS += -DINIT_EE_HANDS_RIGHT endif dfu-util-split-left: dfu-util dfu-util-split-right: dfu-util uf2-split-left: flash uf2-split-right: flash ST_LINK_CLI ?= st-link_cli ST_LINK_ARGS ?= st-link-cli: $(BUILD_DIR)/$(TARGET).hex sizeafter $(ST_LINK_CLI) $(ST_LINK_ARGS) -q -c SWD -p $(BUILD_DIR)/$(TARGET).hex -Rst ST_FLASH ?= st-flash ST_FLASH_ARGS ?= st-flash: $(BUILD_DIR)/$(TARGET).hex sizeafter $(ST_FLASH) $(ST_FLASH_ARGS) --reset --format ihex write $(BUILD_DIR)/$(TARGET).hex # Autodetect teensy loader ifndef TEENSY_LOADER_CLI ifneq (, $(shell which teensy-loader-cli 2>/dev/null)) TEENSY_LOADER_CLI ?= teensy-loader-cli else TEENSY_LOADER_CLI ?= teensy_loader_cli endif endif TEENSY_LOADER_CLI_MCU ?= $(MCU_LDSCRIPT) define EXEC_TEENSY $(TEENSY_LOADER_CLI) -mmcu=$(TEENSY_LOADER_CLI_MCU) -w -v $(BUILD_DIR)/$(TARGET).hex endef teensy: $(BUILD_DIR)/$(TARGET).hex cpfirmware sizeafter $(call EXEC_TEENSY) flash: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter $(SILENT) || printf "Flashing for bootloader: $(BLUE)$(BOOTLOADER)$(NO_COLOR)\n" ifneq ($(strip $(PROGRAM_CMD)),) $(UNSYNC_OUTPUT_CMD) && $(PROGRAM_CMD) else ifeq ($(strip $(BOOTLOADER)),kiibohd) $(UNSYNC_OUTPUT_CMD) && $(call EXEC_DFU_UTIL) else ifeq ($(strip $(BOOTLOADER)),tinyuf2) $(UNSYNC_OUTPUT_CMD) && $(call EXEC_UF2_UTIL_DEPLOY) else ifeq ($(strip $(BOOTLOADER)),uf2boot) $(UNSYNC_OUTPUT_CMD) && $(call EXEC_UF2_UTIL_DEPLOY) else ifeq ($(strip $(BOOTLOADER)),rp2040) $(UNSYNC_OUTPUT_CMD) && $(call EXEC_UF2_UTIL_DEPLOY) else ifeq ($(strip $(MCU_FAMILY)),KINETIS) $(UNSYNC_OUTPUT_CMD) && $(call EXEC_TEENSY) else ifeq ($(strip $(MCU_FAMILY)),MIMXRT1062) $(UNSYNC_OUTPUT_CMD) && $(call EXEC_TEENSY) else ifeq ($(strip $(MCU_FAMILY)),STM32) $(UNSYNC_OUTPUT_CMD) && $(call EXEC_DFU_UTIL) else ifeq ($(strip $(MCU_FAMILY)),WB32) $(UNSYNC_OUTPUT_CMD) && $(call EXEC_WB32_DFU_UPDATER) else ifeq ($(strip $(MCU_FAMILY)),AT32) $(UNSYNC_OUTPUT_CMD) && $(call EXEC_DFU_UTIL) else ifeq ($(strip $(MCU_FAMILY)),GD32V) $(UNSYNC_OUTPUT_CMD) && $(call EXEC_DFU_UTIL) else $(PRINT_OK); $(SILENT) || printf "$(MSG_FLASH_BOOTLOADER)" endif