merge-bin.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #!/usr/bin/python3
  2. # Adds PlatformIO post-processing to merge all the ESP flash images into a single image.
  3. import os
  4. Import("env", "projenv")
  5. board_config = env.BoardConfig()
  6. firmware_bin = "${BUILD_DIR}/${PROGNAME}.bin"
  7. merged_bin = os.environ.get("MERGED_BIN_PATH", "${BUILD_DIR}/${PROGNAME}-merged.bin")
  8. def merge_bin_action(source, target, env):
  9. flash_images = [
  10. *env.Flatten(env.get("FLASH_EXTRA_IMAGES", [])),
  11. "$ESP32_APP_OFFSET",
  12. source[0].get_abspath(),
  13. ]
  14. merge_cmd = " ".join(
  15. [
  16. '"$PYTHONEXE"',
  17. '"$OBJCOPY"',
  18. "--chip",
  19. board_config.get("build.mcu", "esp32"),
  20. "merge_bin",
  21. "-o",
  22. merged_bin,
  23. "--flash_mode",
  24. board_config.get("build.flash_mode", "dio"),
  25. "--flash_freq",
  26. "${__get_board_f_flash(__env__)}",
  27. "--flash_size",
  28. board_config.get("upload.flash_size", "4MB"),
  29. *flash_images,
  30. ]
  31. )
  32. env.Execute(merge_cmd)
  33. env.AddCustomTarget(
  34. name="mergebin",
  35. dependencies=firmware_bin,
  36. actions=merge_bin_action,
  37. title="Merge binary",
  38. description="Build combined image",
  39. always_build=True,
  40. )