mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2025-12-12 04:34:43 +04:00
Merge branch 'ofw_dev' into dev
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user