diff options
Diffstat (limited to 'Tools/jit/build.py')
-rw-r--r-- | Tools/jit/build.py | 45 |
1 files changed, 34 insertions, 11 deletions
diff --git a/Tools/jit/build.py b/Tools/jit/build.py index 4d1e484b683..a0733005929 100644 --- a/Tools/jit/build.py +++ b/Tools/jit/build.py @@ -23,25 +23,48 @@ if __name__ == "__main__": "-f", "--force", action="store_true", help="force the entire JIT to be rebuilt" ) parser.add_argument( + "-o", + "--output-dir", + help="where to output generated files", + required=True, + type=lambda p: pathlib.Path(p).resolve(), + ) + parser.add_argument( + "-p", + "--pyconfig-dir", + help="where to find pyconfig.h", + required=True, + type=lambda p: pathlib.Path(p).resolve(), + ) + parser.add_argument( "-v", "--verbose", action="store_true", help="echo commands as they are run" ) + parser.add_argument( + "--cflags", help="additional flags to pass to the compiler", default="" + ) args = parser.parse_args() for target in args.target: target.debug = args.debug target.force = args.force target.verbose = args.verbose + target.cflags = args.cflags + target.pyconfig_dir = args.pyconfig_dir target.build( - pathlib.Path.cwd(), comment=comment, - stencils_h=f"jit_stencils-{target.triple}.h", force=args.force, + jit_stencils=args.output_dir / f"jit_stencils-{target.triple}.h", ) - - with open("jit_stencils.h", "w") as fp: - for idx, target in enumerate(args.target): - fp.write(f"#{'if' if idx == 0 else 'elif'} {target.condition}\n") - fp.write(f'#include "jit_stencils-{target.triple}.h"\n') - - fp.write("#else\n") - fp.write('#error "unexpected target"\n') - fp.write("#endif\n") + jit_stencils_h = args.output_dir / "jit_stencils.h" + lines = [f"// {comment}\n"] + guard = "#if" + for target in args.target: + lines.append(f"{guard} {target.condition}\n") + lines.append(f'#include "jit_stencils-{target.triple}.h"\n') + guard = "#elif" + lines.append("#else\n") + lines.append('#error "unexpected target"\n') + lines.append("#endif\n") + body = "".join(lines) + # Don't touch the file if it hasn't changed (so we don't trigger a rebuild): + if not jit_stencils_h.is_file() or jit_stencils_h.read_text() != body: + jit_stencils_h.write_text(body) |