fwbin.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from SCons.Builder import Builder
  2. from SCons.Action import Action
  3. import SCons
  4. __OBJCOPY_ARM_BIN = "arm-none-eabi-objcopy"
  5. __NM_ARM_BIN = "arm-none-eabi-nm"
  6. def generate(env):
  7. env.SetDefault(
  8. BIN2DFU="${ROOT_DIR.abspath}/scripts/bin2dfu.py",
  9. OBJCOPY=__OBJCOPY_ARM_BIN, # FIXME
  10. NM=__NM_ARM_BIN, # FIXME
  11. )
  12. env.Append(
  13. BUILDERS={
  14. "HEXBuilder": Builder(
  15. action=Action(
  16. '${OBJCOPY} -O ihex "${SOURCE}" "${TARGET}"',
  17. "${HEXCOMSTR}",
  18. ),
  19. suffix=".hex",
  20. src_suffix=".elf",
  21. ),
  22. "BINBuilder": Builder(
  23. action=Action(
  24. '${OBJCOPY} -O binary -S "${SOURCE}" "${TARGET}"',
  25. "${BINCOMSTR}",
  26. ),
  27. suffix=".bin",
  28. src_suffix=".elf",
  29. ),
  30. "DFUBuilder": Builder(
  31. action=Action(
  32. '${PYTHON3} "${BIN2DFU}" -i "${SOURCE}" -o "${TARGET}" -a ${IMAGE_BASE_ADDRESS} -l "Flipper Zero F${TARGET_HW}"',
  33. "${DFUCOMSTR}",
  34. ),
  35. suffix=".dfu",
  36. src_suffix=".bin",
  37. ),
  38. }
  39. )
  40. def exists(env):
  41. try:
  42. return env["OBJCOPY"]
  43. except KeyError:
  44. pass
  45. if objcopy := env.WhereIs(__OBJCOPY_ARM_BIN):
  46. return objcopy
  47. raise SCons.Errors.StopError("Could not detect objcopy for arm")