Added provide and --all-targets
This commit is contained in:
parent
a290e8388c
commit
59cec04d0e
5 changed files with 44 additions and 11 deletions
|
@ -43,13 +43,22 @@ def runCmd(opts: dict, args: list[str]) -> None:
|
||||||
|
|
||||||
|
|
||||||
def buildCmd(opts: dict, args: list[str]) -> None:
|
def buildCmd(opts: dict, args: list[str]) -> None:
|
||||||
|
allTargets = opts.get('all-targets', False)
|
||||||
targetName = opts.get('target', 'default')
|
targetName = opts.get('target', 'default')
|
||||||
|
|
||||||
if len(args) == 0:
|
if allTargets:
|
||||||
build.buildAll(targetName)
|
for target in targets.available():
|
||||||
|
if len(args) == 0:
|
||||||
|
build.buildAll(target)
|
||||||
|
else:
|
||||||
|
for component in args:
|
||||||
|
build.buildOne(target, component)
|
||||||
else:
|
else:
|
||||||
for component in args:
|
if len(args) == 0:
|
||||||
build.buildOne(targetName, component)
|
build.buildAll(targetName)
|
||||||
|
else:
|
||||||
|
for component in args:
|
||||||
|
build.buildOne(targetName, component)
|
||||||
|
|
||||||
|
|
||||||
def listCmd(opts: dict, args: list[str]) -> None:
|
def listCmd(opts: dict, args: list[str]) -> None:
|
||||||
|
|
|
@ -107,7 +107,7 @@ def buildAll(targetId: str) -> None:
|
||||||
target, _ = prepare(targetId)
|
target, _ = prepare(targetId)
|
||||||
print(f"{utils.Colors.BOLD}Building all components for target '{targetId}{utils.Colors.RESET}'")
|
print(f"{utils.Colors.BOLD}Building all components for target '{targetId}{utils.Colors.RESET}'")
|
||||||
try:
|
try:
|
||||||
utils.runCmd("ninja", "-j", "1", "-f", target["ninjafile"])
|
utils.runCmd("ninja", "-v", "-j", "1", "-f", target["ninjafile"])
|
||||||
except:
|
except:
|
||||||
raise utils.CliException(
|
raise utils.CliException(
|
||||||
"Failed to build all for " + target["key"])
|
"Failed to build all for " + target["key"])
|
||||||
|
@ -121,7 +121,7 @@ def buildOne(targetId: str, componentId: str) -> str:
|
||||||
raise utils.CliException("Unknown component: " + componentId)
|
raise utils.CliException("Unknown component: " + componentId)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
utils.runCmd("ninja", "-j", "1", "-f",
|
utils.runCmd("ninja", "-v", "-j", "1", "-f",
|
||||||
target["ninjafile"], manifests[componentId]["out"])
|
target["ninjafile"], manifests[componentId]["out"])
|
||||||
except:
|
except:
|
||||||
raise utils.CliException(
|
raise utils.CliException(
|
||||||
|
|
|
@ -55,8 +55,26 @@ def doInjects(manifests: dict) -> dict:
|
||||||
def resolveDeps(manifests: dict) -> dict:
|
def resolveDeps(manifests: dict) -> dict:
|
||||||
manifests = copy.deepcopy(manifests)
|
manifests = copy.deepcopy(manifests)
|
||||||
|
|
||||||
|
def findProvide(key: str) -> str:
|
||||||
|
if key in manifests:
|
||||||
|
return key
|
||||||
|
|
||||||
|
result = []
|
||||||
|
for pkg in manifests:
|
||||||
|
if key in manifests[pkg].get("provide", []):
|
||||||
|
result.append(pkg)
|
||||||
|
|
||||||
|
if len(result) == 0:
|
||||||
|
raise utils.CliException(f"Failed to resolve dependency {key}")
|
||||||
|
|
||||||
|
if len(result) == 1:
|
||||||
|
return result[0]
|
||||||
|
|
||||||
|
raise utils.CliException(f"Multiple providers for {key}: {result}")
|
||||||
|
|
||||||
def resolve(key: str, stack: list[str] = []) -> list[str]:
|
def resolve(key: str, stack: list[str] = []) -> list[str]:
|
||||||
result: list[str] = []
|
result: list[str] = []
|
||||||
|
|
||||||
if key in stack:
|
if key in stack:
|
||||||
raise utils.CliException("Circular dependency detected: " +
|
raise utils.CliException("Circular dependency detected: " +
|
||||||
str(stack) + " -> " + key)
|
str(stack) + " -> " + key)
|
||||||
|
@ -66,10 +84,14 @@ def resolveDeps(manifests: dict) -> dict:
|
||||||
|
|
||||||
if "deps" in manifests[key]:
|
if "deps" in manifests[key]:
|
||||||
stack.append(key)
|
stack.append(key)
|
||||||
result.extend(manifests[key]["deps"])
|
|
||||||
for dep in manifests[key]["deps"]:
|
for dep in manifests[key]["deps"]:
|
||||||
|
dep = findProvide(dep)
|
||||||
|
result.append(dep)
|
||||||
result += resolve(dep, stack)
|
result += resolve(dep, stack)
|
||||||
|
|
||||||
stack.pop()
|
stack.pop()
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
for key in manifests:
|
for key in manifests:
|
||||||
|
|
|
@ -173,9 +173,10 @@ def processJson(e: any) -> any:
|
||||||
for i in range(len(e)):
|
for i in range(len(e)):
|
||||||
e[i] = processJson(e[i])
|
e[i] = processJson(e[i])
|
||||||
elif isinstance(e, str):
|
elif isinstance(e, str):
|
||||||
if e == "@sysname":
|
e = e.replace("@uname(sysname)", os.uname().sysname.lower())
|
||||||
e = os.uname().sysname.lower()
|
e = e.replace("@uname(machine)", os.uname().machine.lower())
|
||||||
elif e.startswith("@include("):
|
|
||||||
|
if e.startswith("@include("):
|
||||||
e = loadJson(e[9:-1])
|
e = loadJson(e[9:-1])
|
||||||
|
|
||||||
return e
|
return e
|
||||||
|
|
3
setup.py
3
setup.py
|
@ -2,7 +2,8 @@ from setuptools import setup
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="osdk",
|
name="osdk",
|
||||||
version="0.0.1",
|
version="0.1.0",
|
||||||
|
python_requires='>=3.10',
|
||||||
description="Operating System Development Kit",
|
description="Operating System Development Kit",
|
||||||
author="The DEVSE Community",
|
author="The DEVSE Community",
|
||||||
author_email="contact@devse.wiki",
|
author_email="contact@devse.wiki",
|
||||||
|
|
Loading…
Add table
Reference in a new issue