mirror of
https://github.com/justinian/jsix.git
synced 2025-12-10 08:24:32 -08:00
The debugcon logger is now separate from logger::output, and is instead a kernel-internal thread that watches for logs and prints them to the deubcon device.
77 lines
2.2 KiB
Python
Executable File
77 lines
2.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
def generate(output, config, manifest):
|
|
from os import makedirs
|
|
from glob import iglob
|
|
from pathlib import Path
|
|
from bonnibel.module import Module
|
|
from bonnibel.project import Project
|
|
|
|
root = Path(__file__).parent.resolve()
|
|
project = Project(root)
|
|
|
|
output = root / output
|
|
manifest = root / manifest
|
|
|
|
sources = [
|
|
str(root / "src/**/*.module"),
|
|
str(root / "external/*.module"),
|
|
]
|
|
|
|
modules = {}
|
|
for source in sources:
|
|
for modfile in iglob(source, recursive=True):
|
|
path = Path(modfile).parent
|
|
|
|
def module_init(name, **kwargs):
|
|
if not "root" in kwargs:
|
|
kwargs["root"] = path
|
|
m = Module(name, modfile, **kwargs)
|
|
modules[m.name] = m
|
|
return m
|
|
|
|
glo = {
|
|
"module": module_init,
|
|
"source_root": root,
|
|
"build_root": output,
|
|
"module_root": path,
|
|
"config": config,
|
|
}
|
|
code = compile(open(modfile, 'r').read(), modfile, "exec")
|
|
|
|
loc = {}
|
|
exec(code, glo, loc)
|
|
|
|
Module.update(modules)
|
|
|
|
makedirs(output.resolve(), exist_ok=True)
|
|
project.generate(root, output, modules, config, manifest)
|
|
for mod in modules.values():
|
|
mod.generate(output)
|
|
|
|
if __name__ == "__main__":
|
|
import sys
|
|
from pathlib import Path
|
|
sys.path.insert(0, str(Path(__file__).parent / "scripts"))
|
|
|
|
from argparse import ArgumentParser
|
|
from bonnibel import BonnibelError
|
|
|
|
p = ArgumentParser(description="Generate jsix build files")
|
|
p.add_argument("--manifest", "-m", metavar="FILE", default="assets/manifests/default.yaml",
|
|
help="File to use as the system manifest")
|
|
p.add_argument("--config", "-c", metavar="NAME", default="debug",
|
|
help="Configuration to build (eg, 'debug' or 'release')")
|
|
p.add_argument("output", metavar="DIR", default="build", nargs='?',
|
|
help="Where to create the build root")
|
|
|
|
args = p.parse_args()
|
|
|
|
try:
|
|
generate(args.output, args.config, args.manifest)
|
|
|
|
except BonnibelError as be:
|
|
import sys
|
|
print(f"Error: {be}", file=sys.stderr)
|
|
sys.exit(1)
|