mirror of
https://github.com/DarkFlippers/unleashed-firmware
synced 2024-11-10 06:54:19 +00:00
fbt/ufbt: Ensure POSIX paths are passed to GDB on all platforms
https://github.com/flipperdevices/flipperzero-firmware/pull/3360/files
This commit is contained in:
parent
760deb66c5
commit
6d9a2cc699
6 changed files with 56 additions and 33 deletions
|
@ -229,7 +229,6 @@ firmware_debug = distenv.PhonyTarget(
|
||||||
source=firmware_env["FW_ELF"],
|
source=firmware_env["FW_ELF"],
|
||||||
GDBOPTS="${GDBOPTS_BASE}",
|
GDBOPTS="${GDBOPTS_BASE}",
|
||||||
GDBREMOTE="${OPENOCD_GDB_PIPE}",
|
GDBREMOTE="${OPENOCD_GDB_PIPE}",
|
||||||
FBT_FAP_DEBUG_ELF_ROOT=path_as_posix(firmware_env.subst("$FBT_FAP_DEBUG_ELF_ROOT")),
|
|
||||||
)
|
)
|
||||||
distenv.Depends(firmware_debug, firmware_flash)
|
distenv.Depends(firmware_debug, firmware_flash)
|
||||||
|
|
||||||
|
@ -239,7 +238,6 @@ distenv.PhonyTarget(
|
||||||
source=firmware_env["FW_ELF"],
|
source=firmware_env["FW_ELF"],
|
||||||
GDBOPTS="${GDBOPTS_BASE} ${GDBOPTS_BLACKMAGIC}",
|
GDBOPTS="${GDBOPTS_BASE} ${GDBOPTS_BLACKMAGIC}",
|
||||||
GDBREMOTE="${BLACKMAGIC_ADDR}",
|
GDBREMOTE="${BLACKMAGIC_ADDR}",
|
||||||
FBT_FAP_DEBUG_ELF_ROOT=path_as_posix(firmware_env.subst("$FBT_FAP_DEBUG_ELF_ROOT")),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Debug alien elf
|
# Debug alien elf
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
import webbrowser
|
||||||
|
from pathlib import Path, PurePosixPath
|
||||||
|
|
||||||
import SCons
|
import SCons
|
||||||
from SCons.Errors import StopError
|
from SCons.Errors import StopError
|
||||||
|
@ -80,6 +84,27 @@ def resolve_real_dir_node(node):
|
||||||
raise StopError(f"Can't find absolute path for {node.name} ({node})")
|
raise StopError(f"Can't find absolute path for {node.name} ({node})")
|
||||||
|
|
||||||
|
|
||||||
|
class PosixPathWrapper:
|
||||||
|
def __init__(self, pathobj):
|
||||||
|
self.pathobj = pathobj
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def fixup_separators(path):
|
||||||
|
if SCons.Platform.platform_default() == "win32":
|
||||||
|
return path.replace(os.path.sep, os.path.altsep)
|
||||||
|
return path
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def fix_path(path):
|
||||||
|
return str(PurePosixPath(Path(path).as_posix()))
|
||||||
|
|
||||||
|
def __call__(self, target, source, env, for_signature):
|
||||||
|
if for_signature:
|
||||||
|
return self.pathobj
|
||||||
|
|
||||||
|
return self.fix_path(env.subst(self.pathobj))
|
||||||
|
|
||||||
|
|
||||||
def path_as_posix(path):
|
def path_as_posix(path):
|
||||||
if SCons.Platform.platform_default() == "win32":
|
if SCons.Platform.platform_default() == "win32":
|
||||||
return path.replace(os.path.sep, os.path.altsep)
|
return path.replace(os.path.sep, os.path.altsep)
|
||||||
|
|
|
@ -18,7 +18,7 @@ def GetDevices(env):
|
||||||
def generate(env, **kw):
|
def generate(env, **kw):
|
||||||
env.AddMethod(GetDevices)
|
env.AddMethod(GetDevices)
|
||||||
env.SetDefault(
|
env.SetDefault(
|
||||||
FBT_DEBUG_DIR="${FBT_SCRIPT_DIR}/debug",
|
FBT_DEBUG_DIR="${POSIXPATH('$FBT_SCRIPT_DIR')}/debug",
|
||||||
)
|
)
|
||||||
|
|
||||||
if (adapter_serial := env.subst("$SWD_TRANSPORT_SERIAL")) != "auto":
|
if (adapter_serial := env.subst("$SWD_TRANSPORT_SERIAL")) != "auto":
|
||||||
|
@ -36,11 +36,11 @@ def generate(env, **kw):
|
||||||
|
|
||||||
env.SetDefault(
|
env.SetDefault(
|
||||||
OPENOCD_GDB_PIPE=[
|
OPENOCD_GDB_PIPE=[
|
||||||
"|openocd -c 'gdb_port pipe; log_output ${FBT_DEBUG_DIR}/openocd.log' ${[SINGLEQUOTEFUNC(OPENOCD_OPTS)]}"
|
"|openocd -c 'gdb_port pipe; log_output ${POSIXPATH('$FBT_DEBUG_DIR')}/openocd.log' ${[SINGLEQUOTEFUNC(OPENOCD_OPTS)]}"
|
||||||
],
|
],
|
||||||
GDBOPTS_BASE=[
|
GDBOPTS_BASE=[
|
||||||
"-ex",
|
"-ex",
|
||||||
"source ${FBT_DEBUG_DIR}/gdbinit",
|
"source ${POSIXPATH('$FBT_DEBUG_DIR')}/gdbinit",
|
||||||
"-ex",
|
"-ex",
|
||||||
"target extended-remote ${GDBREMOTE}",
|
"target extended-remote ${GDBREMOTE}",
|
||||||
],
|
],
|
||||||
|
@ -57,17 +57,17 @@ def generate(env, **kw):
|
||||||
],
|
],
|
||||||
GDBPYOPTS=[
|
GDBPYOPTS=[
|
||||||
"-ex",
|
"-ex",
|
||||||
"source ${FBT_DEBUG_DIR}/FreeRTOS/FreeRTOS.py",
|
"source ${POSIXPATH('$FBT_DEBUG_DIR')}/FreeRTOS/FreeRTOS.py",
|
||||||
"-ex",
|
"-ex",
|
||||||
"source ${FBT_DEBUG_DIR}/flipperapps.py",
|
"source ${POSIXPATH('$FBT_DEBUG_DIR')}/flipperapps.py",
|
||||||
"-ex",
|
"-ex",
|
||||||
"source ${FBT_DEBUG_DIR}/flipperversion.py",
|
"source ${POSIXPATH('$FBT_DEBUG_DIR')}/flipperversion.py",
|
||||||
"-ex",
|
"-ex",
|
||||||
"fap-set-debug-elf-root ${FBT_FAP_DEBUG_ELF_ROOT}",
|
"fap-set-debug-elf-root ${POSIXPATH('$FBT_FAP_DEBUG_ELF_ROOT')}",
|
||||||
"-ex",
|
"-ex",
|
||||||
"source ${FBT_DEBUG_DIR}/PyCortexMDebug/PyCortexMDebug.py",
|
"source ${POSIXPATH('$FBT_DEBUG_DIR')}/PyCortexMDebug/PyCortexMDebug.py",
|
||||||
"-ex",
|
"-ex",
|
||||||
"svd_load ${SVD_FILE}",
|
"svd_load ${POSIXPATH('$SVD_FILE')}",
|
||||||
"-ex",
|
"-ex",
|
||||||
"compare-sections",
|
"compare-sections",
|
||||||
"-ex",
|
"-ex",
|
||||||
|
|
|
@ -6,7 +6,7 @@ import shutil
|
||||||
|
|
||||||
from fbt.sdk.cache import SdkCache
|
from fbt.sdk.cache import SdkCache
|
||||||
from fbt.sdk.collector import SdkCollector
|
from fbt.sdk.collector import SdkCollector
|
||||||
from fbt.util import path_as_posix
|
from fbt.util import PosixPathWrapper
|
||||||
from SCons.Action import Action
|
from SCons.Action import Action
|
||||||
from SCons.Builder import Builder
|
from SCons.Builder import Builder
|
||||||
from SCons.Errors import UserError
|
from SCons.Errors import UserError
|
||||||
|
@ -80,7 +80,7 @@ class SdkMeta:
|
||||||
vars,
|
vars,
|
||||||
target=Entry(self.MAP_FILE_SUBST),
|
target=Entry(self.MAP_FILE_SUBST),
|
||||||
)
|
)
|
||||||
return path_as_posix(expanded_vars)
|
return PosixPathWrapper.fixup_separators(expanded_vars)
|
||||||
|
|
||||||
|
|
||||||
class SdkTreeBuilder:
|
class SdkTreeBuilder:
|
||||||
|
@ -149,7 +149,7 @@ class SdkTreeBuilder:
|
||||||
meta.save_to(self.target[0].path)
|
meta.save_to(self.target[0].path)
|
||||||
|
|
||||||
def build_sdk_file_path(self, orig_path: str) -> str:
|
def build_sdk_file_path(self, orig_path: str) -> str:
|
||||||
return path_as_posix(
|
return PosixPathWrapper.fix_path(
|
||||||
posixpath.normpath(
|
posixpath.normpath(
|
||||||
posixpath.join(
|
posixpath.join(
|
||||||
self.SDK_DIR_SUBST,
|
self.SDK_DIR_SUBST,
|
||||||
|
|
|
@ -47,7 +47,7 @@ from fbt.appmanifest import FlipperApplication, FlipperAppType
|
||||||
from fbt.sdk.cache import SdkCache
|
from fbt.sdk.cache import SdkCache
|
||||||
from fbt.util import (
|
from fbt.util import (
|
||||||
FORWARDED_ENV_VARIABLES,
|
FORWARDED_ENV_VARIABLES,
|
||||||
path_as_posix,
|
PosixPathWrapper,
|
||||||
resolve_real_dir_node,
|
resolve_real_dir_node,
|
||||||
single_quote,
|
single_quote,
|
||||||
tempfile_arg_esc_func,
|
tempfile_arg_esc_func,
|
||||||
|
@ -89,6 +89,7 @@ env = core_env.Clone(
|
||||||
("compilation_db", {"COMPILATIONDB_COMSTR": "\tCDB\t${TARGET}"}),
|
("compilation_db", {"COMPILATIONDB_COMSTR": "\tCDB\t${TARGET}"}),
|
||||||
],
|
],
|
||||||
FBT_FAP_DEBUG_ELF_ROOT=ufbt_build_dir,
|
FBT_FAP_DEBUG_ELF_ROOT=ufbt_build_dir,
|
||||||
|
POSIXPATH=PosixPathWrapper,
|
||||||
TEMPFILE=TempFileMunge,
|
TEMPFILE=TempFileMunge,
|
||||||
MAXLINELENGTH=2048,
|
MAXLINELENGTH=2048,
|
||||||
PROGSUFFIX=".elf",
|
PROGSUFFIX=".elf",
|
||||||
|
@ -128,7 +129,7 @@ dist_env = env.Clone(
|
||||||
"-c",
|
"-c",
|
||||||
"transport select hla_swd",
|
"transport select hla_swd",
|
||||||
"-f",
|
"-f",
|
||||||
"${FBT_DEBUG_DIR}/stm32wbx.cfg",
|
"${POSIXPATH('$FBT_DEBUG_DIR')}/stm32wbx.cfg",
|
||||||
"-c",
|
"-c",
|
||||||
"stm32wbx.cpu configure -rtos auto",
|
"stm32wbx.cpu configure -rtos auto",
|
||||||
],
|
],
|
||||||
|
@ -161,7 +162,6 @@ firmware_debug = dist_env.PhonyTarget(
|
||||||
source=dist_env["FW_ELF"],
|
source=dist_env["FW_ELF"],
|
||||||
GDBOPTS="${GDBOPTS_BASE}",
|
GDBOPTS="${GDBOPTS_BASE}",
|
||||||
GDBREMOTE="${OPENOCD_GDB_PIPE}",
|
GDBREMOTE="${OPENOCD_GDB_PIPE}",
|
||||||
FBT_FAP_DEBUG_ELF_ROOT=path_as_posix(dist_env.subst("$FBT_FAP_DEBUG_ELF_ROOT")),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
dist_env.PhonyTarget(
|
dist_env.PhonyTarget(
|
||||||
|
@ -170,15 +170,14 @@ dist_env.PhonyTarget(
|
||||||
source=dist_env["FW_ELF"],
|
source=dist_env["FW_ELF"],
|
||||||
GDBOPTS="${GDBOPTS_BASE} ${GDBOPTS_BLACKMAGIC}",
|
GDBOPTS="${GDBOPTS_BASE} ${GDBOPTS_BLACKMAGIC}",
|
||||||
GDBREMOTE="${BLACKMAGIC_ADDR}",
|
GDBREMOTE="${BLACKMAGIC_ADDR}",
|
||||||
FBT_FAP_DEBUG_ELF_ROOT=path_as_posix(dist_env.subst("$FBT_FAP_DEBUG_ELF_ROOT")),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Debug alien elf
|
# Debug alien elf
|
||||||
debug_other_opts = [
|
debug_other_opts = [
|
||||||
"-ex",
|
"-ex",
|
||||||
"source ${FBT_DEBUG_DIR}/PyCortexMDebug/PyCortexMDebug.py",
|
"source ${POSIXPATH('FBT_DEBUG_DIR')}/PyCortexMDebug/PyCortexMDebug.py",
|
||||||
"-ex",
|
"-ex",
|
||||||
"source ${FBT_DEBUG_DIR}/flipperversion.py",
|
"source ${POSIXPATH('FBT_DEBUG_DIR')}/flipperversion.py",
|
||||||
"-ex",
|
"-ex",
|
||||||
"fw-version",
|
"fw-version",
|
||||||
]
|
]
|
||||||
|
@ -371,10 +370,6 @@ dist_env.PhonyTarget(
|
||||||
|
|
||||||
|
|
||||||
# Prepare vscode environment
|
# Prepare vscode environment
|
||||||
def _path_as_posix(path):
|
|
||||||
return pathlib.Path(path).as_posix()
|
|
||||||
|
|
||||||
|
|
||||||
vscode_dist = []
|
vscode_dist = []
|
||||||
project_template_dir = dist_env["UFBT_SCRIPT_ROOT"].Dir("project_template")
|
project_template_dir = dist_env["UFBT_SCRIPT_ROOT"].Dir("project_template")
|
||||||
for template_file in project_template_dir.Dir(".vscode").glob("*"):
|
for template_file in project_template_dir.Dir(".vscode").glob("*"):
|
||||||
|
@ -387,20 +382,24 @@ for template_file in project_template_dir.Dir(".vscode").glob("*"):
|
||||||
"@UFBT_TOOLCHAIN_ARM_TOOLCHAIN_DIR@": pathlib.Path(
|
"@UFBT_TOOLCHAIN_ARM_TOOLCHAIN_DIR@": pathlib.Path(
|
||||||
dist_env.WhereIs("arm-none-eabi-gcc")
|
dist_env.WhereIs("arm-none-eabi-gcc")
|
||||||
).parent.as_posix(),
|
).parent.as_posix(),
|
||||||
"@UFBT_TOOLCHAIN_GCC@": _path_as_posix(
|
"@UFBT_TOOLCHAIN_GCC@": PosixPathWrapper.fix_path(
|
||||||
dist_env.WhereIs("arm-none-eabi-gcc")
|
dist_env.WhereIs("arm-none-eabi-gcc")
|
||||||
),
|
),
|
||||||
"@UFBT_TOOLCHAIN_GDB_PY@": _path_as_posix(
|
"@UFBT_TOOLCHAIN_GDB_PY@": PosixPathWrapper.fix_path(
|
||||||
dist_env.WhereIs("arm-none-eabi-gdb-py3")
|
dist_env.WhereIs("arm-none-eabi-gdb-py3")
|
||||||
),
|
),
|
||||||
"@UFBT_TOOLCHAIN_OPENOCD@": _path_as_posix(dist_env.WhereIs("openocd")),
|
"@UFBT_TOOLCHAIN_OPENOCD@": PosixPathWrapper.fix_path(
|
||||||
"@UFBT_APP_DIR@": _path_as_posix(original_app_dir.abspath),
|
dist_env.WhereIs("openocd")
|
||||||
"@UFBT_ROOT_DIR@": _path_as_posix(Dir("#").abspath),
|
),
|
||||||
"@UFBT_DEBUG_DIR@": _path_as_posix(dist_env["FBT_DEBUG_DIR"].abspath),
|
"@UFBT_APP_DIR@": PosixPathWrapper.fix_path(original_app_dir.abspath),
|
||||||
"@UFBT_DEBUG_ELF_DIR@": _path_as_posix(
|
"@UFBT_ROOT_DIR@": PosixPathWrapper.fix_path(Dir("#").abspath),
|
||||||
|
"@UFBT_DEBUG_DIR@": dist_env.subst("FBT_DEBUG_DIR"),
|
||||||
|
"@UFBT_DEBUG_ELF_DIR@": PosixPathWrapper.fix_path(
|
||||||
dist_env["FBT_FAP_DEBUG_ELF_ROOT"].abspath
|
dist_env["FBT_FAP_DEBUG_ELF_ROOT"].abspath
|
||||||
),
|
),
|
||||||
"@UFBT_FIRMWARE_ELF@": _path_as_posix(dist_env["FW_ELF"].abspath),
|
"@UFBT_FIRMWARE_ELF@": PosixPathWrapper.fix_path(
|
||||||
|
dist_env["FW_ELF"].abspath
|
||||||
|
),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -3,6 +3,7 @@ import os
|
||||||
|
|
||||||
from fbt.util import (
|
from fbt.util import (
|
||||||
FORWARDED_ENV_VARIABLES,
|
FORWARDED_ENV_VARIABLES,
|
||||||
|
PosixPathWrapper,
|
||||||
resolve_real_dir_node,
|
resolve_real_dir_node,
|
||||||
single_quote,
|
single_quote,
|
||||||
tempfile_arg_esc_func,
|
tempfile_arg_esc_func,
|
||||||
|
@ -26,7 +27,6 @@ for env_value_name in variables_to_forward:
|
||||||
if environ_value := os.environ.get(env_value_name, None):
|
if environ_value := os.environ.get(env_value_name, None):
|
||||||
forward_os_env[env_value_name] = environ_value
|
forward_os_env[env_value_name] = environ_value
|
||||||
|
|
||||||
|
|
||||||
coreenv = VAR_ENV.Clone(
|
coreenv = VAR_ENV.Clone(
|
||||||
tools=[
|
tools=[
|
||||||
"fbt_tweaks",
|
"fbt_tweaks",
|
||||||
|
@ -43,6 +43,7 @@ coreenv = VAR_ENV.Clone(
|
||||||
"ccache",
|
"ccache",
|
||||||
],
|
],
|
||||||
TEMPFILE=TempFileMunge,
|
TEMPFILE=TempFileMunge,
|
||||||
|
POSIXPATH=PosixPathWrapper,
|
||||||
MAXLINELENGTH=2048,
|
MAXLINELENGTH=2048,
|
||||||
PROGSUFFIX=".elf",
|
PROGSUFFIX=".elf",
|
||||||
ENV=forward_os_env,
|
ENV=forward_os_env,
|
||||||
|
|
Loading…
Reference in a new issue