#!/usr/bin/env python import subprocess import json from os import path from multiprocessing import cpu_count import ninja_syntax if __name__ == "__main__": with open("grammars.json", "r") as fp: grammars = json.loads(fp.read()) with open("generate.ninja", "w") as fp: w = ninja_syntax.Writer(fp) w.comment("automatically generated, do not edit.") w.rule("generate", "cd $in && tree-sitter generate") # NOTE: this will use a lot of memory on your system, you might decrase # the parallelism count here if you encounter issues. w.pool("generate", cpu_count()) for grammar in grammars: parser_out = path.join(grammar["path"], "src/parser.c") w.build(parser_out, "generate", inputs=[grammar["path"]], pool="generate") w.close() subprocess.call(["ninja", "-f", "generate.ninja"])