Skip to content

Commit b04240c

Browse files
nedsebdpgeorge
authored andcommitted
stm32/Makefile: Make the generation of firmware.bin explicit.
The file `$(BUILD)/firmware.bin` was used by the target `deploy-stlink` and `deploy-openocd` but it was generated indirectly by the target `firmware.dfu`. As this file could be used to program boards directly by a Mass Storage copy, it's better to make it explicitly generated. Additionally, some target are refactored to remove redundancy and be more explicit on dependencies.
1 parent a7932ae commit b04240c

File tree

1 file changed

+71
-41
lines changed

1 file changed

+71
-41
lines changed

ports/stm32/Makefile

Lines changed: 71 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -564,15 +564,56 @@ CFLAGS += -DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool
564564
CFLAGS += -DMICROPY_MODULE_FROZEN_MPY
565565
endif
566566

567-
.PHONY: deploy
567+
define RUN_DFU
568+
$(ECHO) "Writing $(1) to the board"
569+
$(if $(filter $(USE_PYDFU),1),\
570+
$(Q)$(PYTHON) $(PYDFU) --vid $(BOOTLOADER_DFU_USB_VID) --pid $(BOOTLOADER_DFU_USB_PID) -u $(1),
571+
$(Q)$(DFU_UTIL) -a 0 -d $(BOOTLOADER_DFU_USB_VID):$(BOOTLOADER_DFU_USB_PID) -D $(1))
572+
endef
573+
574+
define RUN_STLINK
575+
$(ECHO) "Writing $(1) to the board via ST-LINK"
576+
$(Q)$(STFLASH) write $(1) $(2)
577+
endef
578+
579+
define RUN_OPENOCD
580+
$(ECHO) "Writing $(1) to the board via ST-LINK using OpenOCD"
581+
$(Q)$(OPENOCD) -f $(OPENOCD_CONFIG) -c "stm_flash $(1) $(2) $(3) $(4)"
582+
endef
583+
584+
define GENERATE_ELF
585+
$(ECHO) "LINK $(1)"
586+
$(Q)$(LD) $(LDFLAGS) -o $(1) $(2) $(LDFLAGS_MOD) $(LIBS)
587+
$(Q)$(SIZE) $(1)
588+
$(if $(filter-out $(TEXT0_ADDR),0x08000000), \
589+
$(ECHO) "INFO: this build requires mboot to be installed first")
590+
$(if $(filter $(TEXT1_ADDR),0x90000000), \
591+
$(ECHO) "INFO: this build places firmware in external QSPI flash")
592+
endef
593+
594+
define GENERATE_BIN
595+
$(ECHO) "GEN $(1)"
596+
$(Q)$(OBJCOPY) -O binary $(addprefix -j ,$(3)) $(2) $(1)
597+
endef
598+
599+
define GENERATE_DFU
600+
$(ECHO) "GEN $(1)"
601+
$(Q)$(PYTHON) $(DFU) \
602+
-D $(BOOTLOADER_DFU_USB_VID):$(BOOTLOADER_DFU_USB_PID) \
603+
$(if $(2),$(addprefix -b ,$(3):$(2))) \
604+
$(if $(4),$(addprefix -b ,$(5):$(4))) \
605+
$(1)
606+
endef
607+
608+
define GENERATE_HEX
609+
$(ECHO) "GEN $(1)"
610+
$(Q)$(OBJCOPY) -O ihex $(2) $(1)
611+
endef
612+
613+
.PHONY: deploy deploy-stlink deploy-openocd
568614

569615
deploy: $(BUILD)/firmware.dfu
570-
$(ECHO) "Writing $< to the board"
571-
ifeq ($(USE_PYDFU),1)
572-
$(Q)$(PYTHON) $(PYDFU) --vid $(BOOTLOADER_DFU_USB_VID) --pid $(BOOTLOADER_DFU_USB_PID) -u $<
573-
else
574-
$(Q)$(DFU_UTIL) -a 0 -d $(BOOTLOADER_DFU_USB_VID):$(BOOTLOADER_DFU_USB_PID) -D $<
575-
endif
616+
$(call RUN_DFU,$^)
576617

577618
# A board should specify TEXT0_ADDR if to use a different location than the
578619
# default for the firmware memory location. A board can also optionally define
@@ -584,57 +625,46 @@ ifeq ($(TEXT1_ADDR),)
584625

585626
TEXT0_SECTIONS ?= .isr_vector .text .data
586627

587-
deploy-stlink: $(BUILD)/firmware.dfu
588-
$(ECHO) "Writing $(BUILD)/firmware.bin to the board via ST-LINK"
589-
$(Q)$(STFLASH) write $(BUILD)/firmware.bin $(TEXT0_ADDR)
628+
deploy-stlink: $(BUILD)/firmware.bin
629+
$(call RUN_STLINK,$^,$(TEXT0_ADDR))
590630

591-
deploy-openocd: $(BUILD)/firmware.dfu
592-
$(ECHO) "Writing $(BUILD)/firmware.bin to the board via ST-LINK using OpenOCD"
593-
$(Q)$(OPENOCD) -f $(OPENOCD_CONFIG) -c "stm_flash $(BUILD)/firmware.bin $(TEXT0_ADDR)"
631+
deploy-openocd: $(BUILD)/firmware.bin
632+
$(call RUN_OPENOCD,$^,$(TEXT0_ADDR))
594633

595-
$(BUILD)/firmware.dfu: $(BUILD)/firmware.elf
596-
$(ECHO) "Create $@"
597-
$(Q)$(OBJCOPY) -O binary $(addprefix -j ,$(TEXT0_SECTIONS)) $^ $(BUILD)/firmware.bin
598-
$(Q)$(PYTHON) $(DFU) -D $(BOOTLOADER_DFU_USB_VID):$(BOOTLOADER_DFU_USB_PID) -b $(TEXT0_ADDR):$(BUILD)/firmware.bin $@
634+
$(BUILD)/firmware.bin: $(BUILD)/firmware.elf
635+
$(call GENERATE_BIN,$@,$^,$(TEXT0_SECTIONS))
636+
637+
$(BUILD)/firmware.dfu: $(BUILD)/firmware.bin
638+
$(call GENERATE_DFU,$@,$^,$(TEXT0_ADDR))
599639

600640
else
601641
# TEXT0_ADDR and TEXT1_ADDR are specified so split firmware between these locations
602642

603643
TEXT0_SECTIONS ?= .isr_vector
604644
TEXT1_SECTIONS ?= .text .data
605645

606-
deploy-stlink: $(BUILD)/firmware.dfu
607-
$(ECHO) "Writing $(BUILD)/firmware0.bin to the board via ST-LINK"
608-
$(Q)$(STFLASH) write $(BUILD)/firmware0.bin $(TEXT0_ADDR)
609-
$(ECHO) "Writing $(BUILD)/firmware1.bin to the board via ST-LINK"
610-
$(Q)$(STFLASH) --reset write $(BUILD)/firmware1.bin $(TEXT1_ADDR)
646+
deploy-stlink: $(BUILD)/firmware0.bin $(BUILD)/firmware1.bin
647+
$(call RUN_STLINK,$(word 1,$^),$(TEXT0_ADDR))
648+
$(call RUN_STLINK,$(word 2,$^),$(TEXT1_ADDR))
611649

612-
deploy-openocd: $(BUILD)/firmware.dfu
613-
$(ECHO) "Writing $(BUILD)/firmware{0,1}.bin to the board via ST-LINK using OpenOCD"
614-
$(Q)$(OPENOCD) -f $(OPENOCD_CONFIG) -c "stm_flash $(BUILD)/firmware0.bin $(TEXT0_ADDR) $(BUILD)/firmware1.bin $(TEXT1_ADDR)"
650+
deploy-openocd: $(BUILD)/firmware0.bin $(BUILD)/firmware1.bin
651+
$(call RUN_OPENOCD,$(word 1,$^),$(TEXT0_ADDR),$(word 2,$^),$(TEXT1_ADDR))
615652

616-
$(BUILD)/firmware.dfu: $(BUILD)/firmware.elf
617-
$(ECHO) "GEN $@"
618-
$(Q)$(OBJCOPY) -O binary $(addprefix -j ,$(TEXT0_SECTIONS)) $^ $(BUILD)/firmware0.bin
619-
$(Q)$(OBJCOPY) -O binary $(addprefix -j ,$(TEXT1_SECTIONS)) $^ $(BUILD)/firmware1.bin
620-
$(Q)$(PYTHON) $(DFU) -D $(BOOTLOADER_DFU_USB_VID):$(BOOTLOADER_DFU_USB_PID) -b $(TEXT0_ADDR):$(BUILD)/firmware0.bin -b $(TEXT1_ADDR):$(BUILD)/firmware1.bin $@
653+
$(BUILD)/firmware0.bin: $(BUILD)/firmware.elf
654+
$(call GENERATE_BIN,$@,$^,$(TEXT0_SECTIONS))
621655

656+
$(BUILD)/firmware1.bin: $(BUILD)/firmware.elf
657+
$(call GENERATE_BIN,$@,$^,$(TEXT1_SECTIONS))
658+
659+
$(BUILD)/firmware.dfu: $(BUILD)/firmware0.bin $(BUILD)/firmware1.bin
660+
$(call GENERATE_DFU,$@,$(word 1,$^),$(TEXT0_ADDR),$(word 2,$^),$(TEXT1_ADDR))
622661
endif
623662

624663
$(BUILD)/firmware.hex: $(BUILD)/firmware.elf
625-
$(ECHO) "GEN $@"
626-
$(Q)$(OBJCOPY) -O ihex $< $@
664+
$(call GENERATE_HEX,$@,$^)
627665

628666
$(BUILD)/firmware.elf: $(OBJ)
629-
$(ECHO) "LINK $@"
630-
$(Q)$(LD) $(LDFLAGS) -o $@ $^ $(LDFLAGS_MOD) $(LIBS)
631-
$(Q)$(SIZE) $@
632-
ifneq ($(TEXT0_ADDR),0x08000000)
633-
$(ECHO) "INFO: this build requires mboot to be installed first"
634-
endif
635-
ifeq ($(TEXT1_ADDR),0x90000000)
636-
$(ECHO) "INFO: this build places firmware in external QSPI flash"
637-
endif
667+
$(call GENERATE_ELF,$@,$^)
638668

639669
PLLVALUES = boards/pllvalues.py
640670
MAKE_PINS = boards/make-pins.py

0 commit comments

Comments
 (0)