fwbin.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. if not env["VERBOSE"]:
  13. env.SetDefault(
  14. HEXCOMSTR="\tHEX\t${TARGET}",
  15. BINCOMSTR="\tBIN\t${TARGET}",
  16. DFUCOMSTR="\tDFU\t${TARGET}",
  17. )
  18. env.Append(
  19. BUILDERS={
  20. "HEXBuilder": Builder(
  21. action=Action(
  22. '${OBJCOPY} -O ihex "${SOURCE}" "${TARGET}"',
  23. "${HEXCOMSTR}",
  24. ),
  25. suffix=".hex",
  26. src_suffix=".elf",
  27. ),
  28. "BINBuilder": Builder(
  29. action=Action(
  30. '${OBJCOPY} -O binary -S "${SOURCE}" "${TARGET}"',
  31. "${BINCOMSTR}",
  32. ),
  33. suffix=".bin",
  34. src_suffix=".elf",
  35. ),
  36. "DFUBuilder": Builder(
  37. action=Action(
  38. '${PYTHON3} "${BIN2DFU}" -i "${SOURCE}" -o "${TARGET}" -a ${IMAGE_BASE_ADDRESS} -l "Flipper Zero F${TARGET_HW}"',
  39. "${DFUCOMSTR}",
  40. ),
  41. suffix=".dfu",
  42. src_suffix=".bin",
  43. ),
  44. }
  45. )
  46. def exists(env):
  47. try:
  48. return env["OBJCOPY"]
  49. except KeyError:
  50. pass
  51. if objcopy := env.WhereIs(__OBJCOPY_ARM_BIN):
  52. return objcopy
  53. raise SCons.Errors.StopError("Could not detect objcopy for arm")