You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
3.8 KiB

  1. # Hey Emacs, this is a -*- makefile -*-
  2. ##############################################################################
  3. # Architecture or project specific options
  4. #
  5. DFU_ARGS ?=
  6. ifneq ("$(SERIAL)","")
  7. DFU_ARGS += -S $(SERIAL)
  8. endif
  9. DFU_UTIL ?= dfu-util
  10. define EXEC_DFU_UTIL
  11. if ! $(DFU_UTIL) -l | grep -q "Found DFU"; then \
  12. printf "$(MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY)" ;\
  13. sleep $(BOOTLOADER_RETRY_TIME) ;\
  14. while ! $(DFU_UTIL) -l | grep -q "Found DFU"; do \
  15. printf "." ;\
  16. sleep $(BOOTLOADER_RETRY_TIME) ;\
  17. done ;\
  18. printf "\n" ;\
  19. fi
  20. $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin
  21. endef
  22. WB32_DFU_UPDATER ?= wb32-dfu-updater_cli
  23. define EXEC_WB32_DFU_UPDATER
  24. if ! wb32-dfu-updater_cli -l | grep -q "Found DFU"; then \
  25. printf "$(MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY)" ;\
  26. sleep $(BOOTLOADER_RETRY_TIME) ;\
  27. while ! wb32-dfu-updater_cli -l | grep -q "Found DFU"; do \
  28. printf "." ;\
  29. sleep $(BOOTLOADER_RETRY_TIME) ;\
  30. done ;\
  31. printf "\n" ;\
  32. fi
  33. $(WB32_DFU_UPDATER) -D $(BUILD_DIR)/$(TARGET).bin && $(WB32_DFU_UPDATER) -R
  34. endef
  35. dfu-util: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
  36. $(call EXEC_DFU_UTIL)
  37. define EXEC_UF2_UTIL_DEPLOY
  38. if ! $(UF2CONV) --deploy $(BUILD_DIR)/$(TARGET).uf2 2>/dev/null; then \
  39. printf "$(MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY)" ;\
  40. sleep $(BOOTLOADER_RETRY_TIME) ;\
  41. while ! $(UF2CONV) --deploy $(BUILD_DIR)/$(TARGET).uf2 2>/dev/null; do \
  42. printf "." ;\
  43. sleep $(BOOTLOADER_RETRY_TIME) ;\
  44. done ;\
  45. printf "\n" ;\
  46. fi
  47. endef
  48. # TODO: Remove once ARM has a way to configure EECONFIG_HANDEDNESS
  49. # within the emulated eeprom via dfu-util or another tool
  50. ifneq (,$(filter $(MAKECMDGOALS), dfu-util-split-left uf2-split-left))
  51. OPT_DEFS += -DINIT_EE_HANDS_LEFT
  52. endif
  53. ifneq (,$(filter $(MAKECMDGOALS), dfu-util-split-right uf2-split-right))
  54. OPT_DEFS += -DINIT_EE_HANDS_RIGHT
  55. endif
  56. dfu-util-split-left: dfu-util
  57. dfu-util-split-right: dfu-util
  58. uf2-split-left: flash
  59. uf2-split-right: flash
  60. ST_LINK_CLI ?= st-link_cli
  61. ST_LINK_ARGS ?=
  62. st-link-cli: $(BUILD_DIR)/$(TARGET).hex sizeafter
  63. $(ST_LINK_CLI) $(ST_LINK_ARGS) -q -c SWD -p $(BUILD_DIR)/$(TARGET).hex -Rst
  64. ST_FLASH ?= st-flash
  65. ST_FLASH_ARGS ?=
  66. st-flash: $(BUILD_DIR)/$(TARGET).hex sizeafter
  67. $(ST_FLASH) $(ST_FLASH_ARGS) --reset --format ihex write $(BUILD_DIR)/$(TARGET).hex
  68. # Autodetect teensy loader
  69. ifndef TEENSY_LOADER_CLI
  70. ifneq (, $(shell which teensy-loader-cli 2>/dev/null))
  71. TEENSY_LOADER_CLI ?= teensy-loader-cli
  72. else
  73. TEENSY_LOADER_CLI ?= teensy_loader_cli
  74. endif
  75. endif
  76. TEENSY_LOADER_CLI_MCU ?= $(MCU_LDSCRIPT)
  77. define EXEC_TEENSY
  78. $(TEENSY_LOADER_CLI) -mmcu=$(TEENSY_LOADER_CLI_MCU) -w -v $(BUILD_DIR)/$(TARGET).hex
  79. endef
  80. teensy: $(BUILD_DIR)/$(TARGET).hex cpfirmware sizeafter
  81. $(call EXEC_TEENSY)
  82. flash: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
  83. $(SILENT) || printf "Flashing for bootloader: $(BLUE)$(BOOTLOADER)$(NO_COLOR)\n"
  84. ifneq ($(strip $(PROGRAM_CMD)),)
  85. $(UNSYNC_OUTPUT_CMD) && $(PROGRAM_CMD)
  86. else ifeq ($(strip $(BOOTLOADER)),kiibohd)
  87. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_DFU_UTIL)
  88. else ifeq ($(strip $(BOOTLOADER)),tinyuf2)
  89. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_UF2_UTIL_DEPLOY)
  90. else ifeq ($(strip $(BOOTLOADER)),uf2boot)
  91. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_UF2_UTIL_DEPLOY)
  92. else ifeq ($(strip $(BOOTLOADER)),rp2040)
  93. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_UF2_UTIL_DEPLOY)
  94. else ifeq ($(strip $(MCU_FAMILY)),KINETIS)
  95. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_TEENSY)
  96. else ifeq ($(strip $(MCU_FAMILY)),MIMXRT1062)
  97. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_TEENSY)
  98. else ifeq ($(strip $(MCU_FAMILY)),STM32)
  99. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_DFU_UTIL)
  100. else ifeq ($(strip $(MCU_FAMILY)),WB32)
  101. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_WB32_DFU_UPDATER)
  102. else ifeq ($(strip $(MCU_FAMILY)),GD32V)
  103. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_DFU_UTIL)
  104. else
  105. $(PRINT_OK); $(SILENT) || printf "$(MSG_FLASH_BOOTLOADER)"
  106. endif