1
mirror of https://github.com/DarkFlippers/unleashed-firmware.git synced 2025-12-12 12:42:30 +04:00

Merge branch 'ofw_dev' into dev

This commit is contained in:
MX
2023-09-05 16:22:49 +03:00
7 changed files with 83 additions and 38 deletions

View File

@@ -290,7 +290,8 @@ void elements_multiline_text_aligned(
} else if((y + font_height) > canvas_height(canvas)) {
line = furi_string_alloc_printf("%.*s...\n", chars_fit, start);
} else {
line = furi_string_alloc_printf("%.*s-\n", chars_fit, start);
// Account for the added "-" in length
line = furi_string_alloc_printf("%.*s-\n", chars_fit - 1, start);
}
canvas_draw_str_aligned(canvas, x, y, horizontal, vertical, furi_string_get_cstr(line));
furi_string_free(line);

View File

@@ -8,6 +8,9 @@ from fbt_extra.util import (
link_elf_dir_as_latest,
)
from fbt.sdk.cache import LazySdkVersionLoader
Import("ENV", "fw_build_meta")
# Building initial C environment for libs
@@ -71,6 +74,8 @@ env = ENV.Clone(
},
FW_API_TABLE=None,
_APP_ICONS=None,
APPS=_.split(",") if (_ := GetOption("extra_int_apps")) else [],
EXTRA_EXT_APPS=_.split(",") if (_ := GetOption("extra_ext_apps")) else [],
)
env.PreConfigureFwEnvionment()
@@ -125,9 +130,6 @@ if env["IS_BASE_FIRMWARE"]:
else:
fwenv.Append(APPS=["updater"])
if extra_int_apps := GetOption("extra_int_apps"):
fwenv.Append(APPS=extra_int_apps.split(","))
for app_dir, _ in fwenv["APPDIRS"]:
app_dir_node = env.Dir("#").Dir(app_dir)
@@ -136,7 +138,6 @@ for app_dir, _ in fwenv["APPDIRS"]:
if isinstance(entry, FS.Dir) and not str(entry).startswith("."):
fwenv.LoadAppManifest(entry)
fwenv.PrepareApplicationsBuild()
# Build external apps + configure SDK
@@ -148,6 +149,11 @@ if env["IS_BASE_FIRMWARE"]:
)
fw_artifacts.append(fwenv["FW_EXTAPPS"].sdk_tree)
fwenv.Append(FBT_API_VERSION=LazySdkVersionLoader(fwenv.subst("$SDK_DEFINITION")))
fwenv.PhonyTarget(
"get_apiversion",
"@echo $( ${FBT_API_VERSION} $)",
)
# Add preprocessor definitions for current set of apps
fwenv.Append(

View File

@@ -193,8 +193,19 @@ class AppManager:
raise FlipperManifestException(f"Duplicate app declaration: {app.appid}")
self.known_apps[app.appid] = app
def filter_apps(self, applist: List[str], hw_target: str):
return AppBuildset(self, applist, hw_target)
def filter_apps(
self,
*,
applist: List[str],
ext_applist: List[str],
hw_target: str,
):
return AppBuildset(
self,
hw_target=hw_target,
appnames=applist,
extra_ext_appnames=ext_applist,
)
class AppBuilderException(Exception):
@@ -211,6 +222,12 @@ class AppBuildset:
FlipperAppType.SETTINGS,
FlipperAppType.STARTUP,
)
EXTERNAL_APP_TYPES = (
FlipperAppType.EXTERNAL,
FlipperAppType.MENUEXTERNAL,
FlipperAppType.PLUGIN,
FlipperAppType.DEBUG,
)
@staticmethod
def print_writer(message):
@@ -219,16 +236,21 @@ class AppBuildset:
def __init__(
self,
appmgr: AppManager,
appnames: List[str],
hw_target: str,
appnames: List[str],
*,
extra_ext_appnames: List[str],
message_writer: Callable | None = None,
):
self.appmgr = appmgr
self.appnames = set(appnames)
self.incompatible_extapps, self.extapps = [], []
self._extra_ext_appnames = extra_ext_appnames
self._orig_appnames = appnames
self.hw_target = hw_target
self._writer = message_writer if message_writer else self.print_writer
self._process_deps()
self._process_ext_apps()
self._check_conflicts()
self._check_unsatisfied() # unneeded?
self._check_target_match()
@@ -271,6 +293,27 @@ class AppBuildset:
break
self.appnames.update(provided)
def _process_ext_apps(self):
extapps = [
app
for apptype in self.EXTERNAL_APP_TYPES
for app in self.get_apps_of_type(apptype, True)
]
extapps.extend(map(self.appmgr.get, self._extra_ext_appnames))
for app in extapps:
(
self.extapps
if app.supports_hardware_target(self.hw_target)
else self.incompatible_extapps
).append(app)
def get_ext_apps(self):
return self.extapps
def get_incompatible_ext_apps(self):
return self.incompatible_extapps
def _check_conflicts(self):
conflicts = []
for app in self.appnames:

View File

@@ -255,3 +255,18 @@ class SdkCache:
self.sync_sets(self.sdk.headers, api.headers, False)
self.sync_sets(self.sdk.functions, api.functions)
self.sync_sets(self.sdk.variables, api.variables)
class LazySdkVersionLoader:
def __init__(self, sdk_path: str):
self.sdk_path = sdk_path
self._version = None
@property
def version(self) -> SdkVersion:
if self._version is None:
self._version = SdkCache(self.sdk_path, load_version_only=True).version
return self._version
def __str__(self) -> str:
return str(self.version)

View File

@@ -36,7 +36,9 @@ def LoadAppManifest(env, entry):
def PrepareApplicationsBuild(env):
try:
appbuild = env["APPBUILD"] = env["APPMGR"].filter_apps(
env["APPS"], env.subst("f${TARGET_HW}")
applist=env["APPS"],
ext_applist=env["EXTRA_EXT_APPS"],
hw_target=env.subst("f${TARGET_HW}"),
)
except Exception as e:
raise StopError(e)
@@ -56,6 +58,11 @@ def DumpApplicationConfig(target, source, env):
fg.green(f"{apptype.value}:\n\t"),
", ".join(app.appid for app in app_sublist),
)
if incompatible_ext_apps := env["APPBUILD"].get_incompatible_ext_apps():
print(
fg.blue("Incompatible apps (skipped):\n\t"),
", ".join(app.appid for app in incompatible_ext_apps),
)
def build_apps_c(target, source, env):

View File

@@ -107,6 +107,7 @@ env = core_env.Clone(
SINGLEQUOTEFUNC=single_quote,
ABSPATHGETTERFUNC=resolve_real_dir_node,
APPS=[],
EXTRA_EXT_APPS=[],
UFBT_API_VERSION=SdkCache(
core_env.subst("$SDK_DEFINITION"), load_version_only=True
).version,

View File

@@ -60,40 +60,12 @@ class FlipperExtAppBuildArtifacts:
sdk_tree: NodeList = field(default_factory=NodeList)
apps_to_build_as_faps = [
FlipperAppType.PLUGIN,
FlipperAppType.EXTERNAL,
FlipperAppType.MENUEXTERNAL,
FlipperAppType.DEBUG,
]
known_extapps = [
app
for apptype in apps_to_build_as_faps
for app in appenv["APPBUILD"].get_apps_of_type(apptype, True)
]
# Ugly access to global option
if extra_app_list := GetOption("extra_ext_apps"):
known_extapps.extend(map(appenv["APPMGR"].get, extra_app_list.split(",")))
incompatible_apps = []
for app in known_extapps:
if not app.supports_hardware_target(appenv.subst("f${TARGET_HW}")):
incompatible_apps.append(app)
continue
for app in appenv["APPBUILD"].get_ext_apps():
appenv.BuildAppElf(app)
extapps = FlipperExtAppBuildArtifacts()
extapps.application_map = appenv["EXT_APPS"]
if incompatible_apps:
warn(
WarningOnByDefault,
f"Skipping build of {len(incompatible_apps)} incompatible app(s): "
+ ", ".join(f"'{app.name}' (id '{app.appid}')" for app in incompatible_apps),
)
if appenv["FORCE"]:
appenv.AlwaysBuild(