diff options
author | Nathan Ringo <nathan@remexre.com> | 2024-09-01 20:49:26 -0500 |
---|---|---|
committer | Nathan Ringo <nathan@remexre.com> | 2024-09-01 20:49:26 -0500 |
commit | 8cb34498eceef231927c444507b6787128c5f0d8 (patch) | |
tree | 0fadd76c82b88d22f993d2333e56a9200f656012 /boards/configure.py | |
parent | 386df39c9866a4d945de46ef0dcab2363c674e0e (diff) |
Move everything over to the new organization.
Diffstat (limited to 'boards/configure.py')
-rw-r--r-- | boards/configure.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/boards/configure.py b/boards/configure.py new file mode 100644 index 0000000..5b01652 --- /dev/null +++ b/boards/configure.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +from argparse import ArgumentParser +from ninja.ninja_syntax import Writer as Ninja +from os import getenv +from pathlib import Path + + +def main(): + arg_parser = ArgumentParser() + arg_parser.add_argument("arch_name") + arg_parser.add_argument("board_name") + arg_parser.add_argument("libkernel") + arg_parser.add_argument("srcdir") + args = arg_parser.parse_args() + + libkernel = Path(args.libkernel).resolve() / "lib/libvernos_kernel.a" + srcdir = Path(args.srcdir).resolve() + objdir = Path("obj") + objdir.mkdir() + + linker_script = str(srcdir / f"{args.board_name}.ld") + + objs: list[str] = [] + with open("build.ninja", "w") as f: + ninja = Ninja(f) + + # Inherit some environment variables. + for var in ["AS", "ASFLAGS", "LD", "LDFLAGS"]: + ninja.variable(var, getenv(var)) + + # Add rules to assemble and link. + ninja.rule("as", "$AS $ASFLAGS -g -o $out $in") + ninja.rule("ld", f"$LD $LDFLAGS -T{linker_script} -o $out $in") + + for path in srcdir.iterdir(): + if path.suffix != ".s": + continue + obj = str(objdir / f"{path.stem}.o") + ninja.build(obj, "as", str(path)) + objs.append(obj) + ninja.build("kernel.elf", "ld", objs + [str(libkernel)]) + + +if __name__ == "__main__": + main() |