import SCons from SCons.Action import Action from SCons.Builder import Builder __OBJCOPY_ARM_BIN = "arm-none-eabi-objcopy" __NM_ARM_BIN = "arm-none-eabi-nm" def generate(env): env.SetDefault( BIN2DFU="${FBT_SCRIPT_DIR}/bin2dfu.py", BIN_SIZE_SCRIPT="${FBT_SCRIPT_DIR}/fwsize.py", OBJCOPY=__OBJCOPY_ARM_BIN, # FIXME NM=__NM_ARM_BIN, # FIXME ) if not env["VERBOSE"]: env.SetDefault( HEXCOMSTR="\tHEX\t${TARGET}", BINCOMSTR="\tBIN\t${TARGET}", DFUCOMSTR="\tDFU\t${TARGET}", ) env.Append( BUILDERS={ "HEXBuilder": Builder( action=Action( '${OBJCOPY} -O ihex "${SOURCE}" "${TARGET}"', "${HEXCOMSTR}", ), suffix=".hex", src_suffix=".elf", ), "BINBuilder": Builder( action=Action( '${OBJCOPY} -O binary -S "${SOURCE}" "${TARGET}"', "${BINCOMSTR}", ), suffix=".bin", src_suffix=".elf", ), "DFUBuilder": Builder( action=Action( '${PYTHON3} "${BIN2DFU}" -i "${SOURCE}" -o "${TARGET}" -a ${IMAGE_BASE_ADDRESS} -l "Flipper Zero F${TARGET_HW}"', "${DFUCOMSTR}", ), suffix=".dfu", src_suffix=".bin", ), } ) def exists(env): try: return env["OBJCOPY"] except KeyError: pass if objcopy := env.WhereIs(__OBJCOPY_ARM_BIN): return objcopy raise SCons.Errors.StopError("Could not detect objcopy for arm")