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.

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