fwbin.py 1.7 KB

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