|
|
@@ -28,15 +28,41 @@ SConscript("site_scons/cc.scons", exports={"ENV": coreenv})
|
|
|
# Store root dir in environment for certain tools
|
|
|
coreenv["ROOT_DIR"] = Dir(".")
|
|
|
|
|
|
+
|
|
|
# Create a separate "dist" environment and add construction envs to it
|
|
|
distenv = coreenv.Clone(
|
|
|
- tools=["fbt_dist", "openocd"],
|
|
|
- GDBOPTS="-ex 'target extended-remote | ${OPENOCD} -c \"gdb_port pipe\" ${OPENOCD_OPTS}' "
|
|
|
- '-ex "set confirm off" ',
|
|
|
+ tools=["fbt_dist", "openocd", "blackmagic"],
|
|
|
+ OPENOCD_GDB_PIPE=["|openocd -c 'gdb_port pipe' ${[SINGLEQUOTEFUNC(OPENOCD_OPTS)]}"],
|
|
|
+ GDBOPTS_BASE=[
|
|
|
+ "-ex",
|
|
|
+ "target extended-remote ${GDBREMOTE}",
|
|
|
+ "-ex",
|
|
|
+ "set confirm off",
|
|
|
+ ],
|
|
|
+ GDBOPTS_BLACKMAGIC=[
|
|
|
+ "-ex",
|
|
|
+ "monitor swdp_scan",
|
|
|
+ "-ex",
|
|
|
+ "monitor debug_bmp enable",
|
|
|
+ "-ex",
|
|
|
+ "attach 1",
|
|
|
+ "-ex",
|
|
|
+ "set mem inaccessible-by-default off",
|
|
|
+ ],
|
|
|
+ GDBPYOPTS=[
|
|
|
+ "-ex",
|
|
|
+ "source debug/FreeRTOS/FreeRTOS.py",
|
|
|
+ "-ex",
|
|
|
+ "source debug/PyCortexMDebug/PyCortexMDebug.py",
|
|
|
+ "-ex",
|
|
|
+ "svd_load ${SVD_FILE}",
|
|
|
+ "-ex",
|
|
|
+ "compare-sections",
|
|
|
+ ],
|
|
|
ENV=os.environ,
|
|
|
)
|
|
|
|
|
|
-firmware_out = distenv.AddFwProject(
|
|
|
+firmware_env = distenv.AddFwProject(
|
|
|
base_env=coreenv,
|
|
|
fw_type="firmware",
|
|
|
fw_env_key="FW_ENV",
|
|
|
@@ -44,7 +70,7 @@ firmware_out = distenv.AddFwProject(
|
|
|
|
|
|
# If enabled, initialize updater-related targets
|
|
|
if GetOption("fullenv"):
|
|
|
- updater_out = distenv.AddFwProject(
|
|
|
+ updater_env = distenv.AddFwProject(
|
|
|
base_env=coreenv,
|
|
|
fw_type="updater",
|
|
|
fw_env_key="UPD_ENV",
|
|
|
@@ -72,19 +98,32 @@ if GetOption("fullenv"):
|
|
|
|
|
|
selfupdate_dist = distenv.DistCommand(
|
|
|
"updater_package",
|
|
|
- (distenv["DIST_DEPENDS"], firmware_out["FW_RESOURCES"]),
|
|
|
+ (distenv["DIST_DEPENDS"], firmware_env["FW_RESOURCES"]),
|
|
|
DIST_EXTRA=dist_arguments,
|
|
|
)
|
|
|
|
|
|
# Updater debug
|
|
|
- distenv.AddDebugTarget("updater_debug", updater_out, False)
|
|
|
+ distenv.PhonyTarget(
|
|
|
+ "updater_debug",
|
|
|
+ "${GDBPYCOM}",
|
|
|
+ source=updater_env["FW_ELF"],
|
|
|
+ GDBREMOTE="${OPENOCD_GDB_PIPE}",
|
|
|
+ )
|
|
|
+
|
|
|
+ distenv.PhonyTarget(
|
|
|
+ "updater_blackmagic",
|
|
|
+ "${GDBPYCOM}",
|
|
|
+ source=updater_env["FW_ELF"],
|
|
|
+ GDBOPTS=distenv.subst("$GDBOPTS_BLACKMAGIC"),
|
|
|
+ GDBREMOTE="${BLACKMAGIC_ADDR}",
|
|
|
+ )
|
|
|
|
|
|
# Installation over USB & CLI
|
|
|
usb_update_package = distenv.UsbInstall(
|
|
|
"#build/usbinstall.flag",
|
|
|
(
|
|
|
distenv["DIST_DEPENDS"],
|
|
|
- firmware_out["FW_RESOURCES"],
|
|
|
+ firmware_env["FW_RESOURCES"],
|
|
|
selfupdate_dist,
|
|
|
),
|
|
|
)
|
|
|
@@ -104,15 +143,47 @@ copro_dist = distenv.CoproBuilder(
|
|
|
)
|
|
|
distenv.Alias("copro_dist", copro_dist)
|
|
|
|
|
|
+firmware_flash = distenv.AddOpenOCDFlashTarget(firmware_env)
|
|
|
+distenv.Alias("flash", firmware_flash)
|
|
|
+
|
|
|
+firmware_bm_flash = distenv.PhonyTarget(
|
|
|
+ "flash_blackmagic",
|
|
|
+ "$GDB $GDBOPTS $SOURCES $GDBFLASH",
|
|
|
+ source=firmware_env["FW_ELF"],
|
|
|
+ GDBOPTS="${GDBOPTS_BASE} ${GDBOPTS_BLACKMAGIC}",
|
|
|
+ GDBREMOTE="${BLACKMAGIC_ADDR}",
|
|
|
+ GDBFLASH=[
|
|
|
+ "-ex",
|
|
|
+ "load",
|
|
|
+ "-ex",
|
|
|
+ "quit",
|
|
|
+ ],
|
|
|
+)
|
|
|
+
|
|
|
# Debugging firmware
|
|
|
-distenv.AddDebugTarget("debug", firmware_out)
|
|
|
+firmware_debug = distenv.PhonyTarget(
|
|
|
+ "debug",
|
|
|
+ "${GDBPYCOM}",
|
|
|
+ source=firmware_env["FW_ELF"],
|
|
|
+ GDBOPTS="${GDBOPTS_BASE}",
|
|
|
+ GDBREMOTE="${OPENOCD_GDB_PIPE}",
|
|
|
+)
|
|
|
+distenv.Depends(firmware_debug, firmware_flash)
|
|
|
+
|
|
|
+distenv.PhonyTarget(
|
|
|
+ "blackmagic",
|
|
|
+ "${GDBPYCOM}",
|
|
|
+ source=firmware_env["FW_ELF"],
|
|
|
+ GDBOPTS="${GDBOPTS_BASE} ${GDBOPTS_BLACKMAGIC}",
|
|
|
+ GDBREMOTE="${BLACKMAGIC_ADDR}",
|
|
|
+)
|
|
|
+
|
|
|
# Debug alien elf
|
|
|
distenv.PhonyTarget(
|
|
|
"debug_other",
|
|
|
- "$GDBPYCOM",
|
|
|
- GDBPYOPTS=
|
|
|
- # '-ex "source ${ROOT_DIR.abspath}/debug/FreeRTOS/FreeRTOS.py" '
|
|
|
- '-ex "source debug/PyCortexMDebug/PyCortexMDebug.py" ',
|
|
|
+ "${GDBPYCOM}",
|
|
|
+ GDBPYOPTS='-ex "source debug/PyCortexMDebug/PyCortexMDebug.py" ',
|
|
|
+ GDBREMOTE="${OPENOCD_GDB_PIPE}",
|
|
|
)
|
|
|
|
|
|
# Just start OpenOCD
|
|
|
@@ -125,11 +196,19 @@ distenv.PhonyTarget(
|
|
|
distenv.PhonyTarget(
|
|
|
"lint",
|
|
|
"${PYTHON3} scripts/lint.py check ${LINT_SOURCES}",
|
|
|
- LINT_SOURCES=firmware_out["LINT_SOURCES"],
|
|
|
+ LINT_SOURCES=firmware_env["LINT_SOURCES"],
|
|
|
)
|
|
|
|
|
|
distenv.PhonyTarget(
|
|
|
"format",
|
|
|
"${PYTHON3} scripts/lint.py format ${LINT_SOURCES}",
|
|
|
- LINT_SOURCES=firmware_out["LINT_SOURCES"],
|
|
|
+ LINT_SOURCES=firmware_env["LINT_SOURCES"],
|
|
|
+)
|
|
|
+
|
|
|
+
|
|
|
+# Find blackmagic probe
|
|
|
+
|
|
|
+distenv.PhonyTarget(
|
|
|
+ "get_blackmagic",
|
|
|
+ "@echo $( ${BLACKMAGIC_ADDR} $)",
|
|
|
)
|