1 | #!/usr/bin/env python
|
2 |
|
3 | import subprocess
|
4 | import json
|
5 | from os import path
|
6 | from multiprocessing import cpu_count
|
7 |
|
8 | import ninja_syntax
|
9 |
|
10 | if __name__ == "__main__":
|
11 | with open("grammars.json", "r") as fp:
|
12 | grammars = json.loads(fp.read())
|
13 |
|
14 | with open("generate.ninja", "w") as fp:
|
15 | w = ninja_syntax.Writer(fp)
|
16 | w.comment("automatically generated, do not edit.")
|
17 | w.rule("generate", "cd $in && tree-sitter generate")
|
18 | # NOTE: this will use a lot of memory on your system, you might decrase
|
19 | # the parallelism count here if you encounter issues.
|
20 | w.pool("generate", cpu_count())
|
21 | for grammar in grammars:
|
22 | parser_out = path.join(grammar["path"], "src/parser.c")
|
23 | w.build(parser_out, "generate", inputs=[grammar["path"]], pool="generate")
|
24 |
|
25 | w.close()
|
26 |
|
27 | subprocess.call(["ninja", "-f", "generate.ninja"])
|