aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Tools/jit/build.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/jit/build.py')
-rw-r--r--Tools/jit/build.py45
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)