Makefile.projbuild 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. # Component support for esptool.py. Doesn't do much by itself,
  2. # components have their own flash targets that can use these variables.
  3. ESPPORT ?= $(CONFIG_ESPTOOLPY_PORT)
  4. ESPBAUD ?= $(CONFIG_ESPTOOLPY_BAUD)
  5. ESPFLASHMODE ?= $(CONFIG_ESPTOOLPY_FLASHMODE)
  6. ESPFLASHFREQ ?= $(CONFIG_ESPTOOLPY_FLASHFREQ)
  7. ESPFLASHSIZE ?= $(CONFIG_ESPTOOLPY_FLASHSIZE)
  8. CONFIG_ESPTOOLPY_COMPRESSED ?=
  9. PYTHON ?= $(call dequote,$(CONFIG_PYTHON))
  10. # two commands that can be used from other components
  11. # to invoke esptool.py (with or without serial port args)
  12. #
  13. ESPTOOLPY_SRC := $(COMPONENT_PATH)/esptool/esptool.py
  14. ESPTOOLPY := $(PYTHON) $(ESPTOOLPY_SRC) --chip esp32
  15. ESPTOOLPY_SERIAL := $(ESPTOOLPY) --port $(ESPPORT) --baud $(ESPBAUD) --before $(CONFIG_ESPTOOLPY_BEFORE) --after $(CONFIG_ESPTOOLPY_AFTER)
  16. # Supporting esptool command line tools
  17. ESPEFUSEPY := $(PYTHON) $(COMPONENT_PATH)/esptool/espefuse.py
  18. ESPSECUREPY := $(PYTHON) $(COMPONENT_PATH)/esptool/espsecure.py
  19. export ESPSECUREPY # is used in bootloader_support component
  20. ESPTOOL_FLASH_OPTIONS := --flash_mode $(ESPFLASHMODE) --flash_freq $(ESPFLASHFREQ) --flash_size $(ESPFLASHSIZE)
  21. ifdef CONFIG_ESPTOOLPY_FLASHSIZE_DETECT
  22. ESPTOOL_WRITE_FLASH_OPTIONS := --flash_mode $(ESPFLASHMODE) --flash_freq $(ESPFLASHFREQ) --flash_size detect
  23. else
  24. ESPTOOL_WRITE_FLASH_OPTIONS := $(ESPTOOL_FLASH_OPTIONS)
  25. endif
  26. ESPTOOL_ELF2IMAGE_OPTIONS :=
  27. ESPTOOLPY_WRITE_FLASH=$(ESPTOOLPY_SERIAL) write_flash $(if $(CONFIG_ESPTOOLPY_COMPRESSED),-z,-u) $(ESPTOOL_WRITE_FLASH_OPTIONS)
  28. ESPTOOL_ALL_FLASH_ARGS += $(CONFIG_APP_OFFSET) $(APP_BIN)
  29. ifdef CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES
  30. ifndef IS_BOOTLOADER_BUILD
  31. # for locally signed secure boot image, add a signing step to get from unsigned app to signed app
  32. APP_BIN_UNSIGNED := $(APP_BIN:.bin=-unsigned.bin)
  33. $(APP_BIN): $(APP_BIN_UNSIGNED) $(SECURE_BOOT_SIGNING_KEY) $(SDKCONFIG_MAKEFILE)
  34. $(ESPSECUREPY) sign_data --keyfile $(SECURE_BOOT_SIGNING_KEY) -o $@ $<
  35. endif
  36. endif
  37. # non-secure boot (or bootloader), both these files are the same
  38. APP_BIN_UNSIGNED ?= $(APP_BIN)
  39. $(APP_BIN_UNSIGNED): $(APP_ELF) $(ESPTOOLPY_SRC)
  40. $(ESPTOOLPY) elf2image $(ESPTOOL_FLASH_OPTIONS) $(ESPTOOL_ELF2IMAGE_OPTIONS) -o $@ $<
  41. flash: all_binaries $(ESPTOOLPY_SRC) $(call prereq_if_explicit,erase_flash)
  42. @echo "Flashing binaries to serial port $(ESPPORT) (app at offset $(CONFIG_APP_OFFSET))..."
  43. ifdef CONFIG_SECURE_BOOT_ENABLED
  44. @echo "(Secure boot enabled, so bootloader not flashed automatically. See 'make bootloader' output)"
  45. endif
  46. $(ESPTOOLPY_WRITE_FLASH) $(ESPTOOL_ALL_FLASH_ARGS)
  47. app-flash: $(APP_BIN) $(ESPTOOLPY_SRC) $(call prereq_if_explicit,erase_flash)
  48. @echo "Flashing app to serial port $(ESPPORT), offset $(CONFIG_APP_OFFSET)..."
  49. $(ESPTOOLPY_WRITE_FLASH) $(CONFIG_APP_OFFSET) $(APP_BIN)
  50. # Submodules normally added in component.mk, but can be added
  51. # at the project level as long as qualified path
  52. COMPONENT_SUBMODULES += $(COMPONENT_PATH)/esptool
  53. erase_flash:
  54. @echo "Erasing entire flash..."
  55. $(ESPTOOLPY_SERIAL) erase_flash
  56. MONITORBAUD ?= $(CONFIG_MONITOR_BAUD)
  57. MONITOR_PYTHON := $(PYTHON)
  58. ifeq ("$(OS)","Windows_NT")
  59. # miniterm and idf_monitor both need a Windows Console PTY in order
  60. # to correctly handle user input
  61. MONITOR_PYTHON := winpty $(PYTHON)
  62. endif
  63. # note: if you want to run miniterm from command line, can simply run
  64. # miniterm.py on the console. The '$(PYTHON) -m serial.tools.miniterm'
  65. # is to allow for the $(PYTHON) variable overriding the python path.
  66. simple_monitor: $(call prereq_if_explicit,%flash)
  67. $(MONITOR_PYTHON) -m serial.tools.miniterm --rts 0 --dtr 0 --raw $(ESPPORT) $(MONITORBAUD)
  68. MONITOR_OPTS := --baud $(MONITORBAUD) --port $(ESPPORT) --toolchain-prefix $(CONFIG_TOOLPREFIX) --make "$(MAKE)"
  69. monitor: $(call prereq_if_explicit,%flash)
  70. $(summary) MONITOR
  71. [ -f $(APP_ELF) ] || echo "*** 'make monitor' target requires an app to be compiled and flashed first."
  72. [ -f $(APP_ELF) ] || echo "*** Run 'make flash monitor' to build, flash and monitor"
  73. [ -f $(APP_ELF) ] || echo "*** Or alternatively 'make simple_monitor' to view the serial port as-is."
  74. [ -f $(APP_ELF) ] || exit 1
  75. $(MONITOR_PYTHON) $(IDF_PATH)/tools/idf_monitor.py $(MONITOR_OPTS) $(APP_ELF)
  76. .PHONY: erase_flash