unleashed-firmware/scripts/fbt_tools/fwbin.py
hedger 98d5718ec9
fbt: improvements (#3217)
* fbt: changed cdefines & lib handling for external apps; added extra checks for app manifest fields; moved around AppsC generator
* fbt: commandline fixes for spaces in paths
* fbt: fixed stringification for FAP_VERSION
* fbt: Removed excessive quoting for gdb
* docs: update for cdefines; fbt: typo fix
* fbt: enforcing at least 2 components in app version=

Co-authored-by: あく <alleteam@gmail.com>
2023-11-16 01:27:35 +09:00

77 lines
2.1 KiB
Python

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")