mirror of https://github.com/python/cpython.git
48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
"""Build an experimental just-in-time compiler for CPython."""
|
|
|
|
import argparse
|
|
import pathlib
|
|
import shlex
|
|
import sys
|
|
|
|
import _targets
|
|
|
|
if __name__ == "__main__":
|
|
comment = f"$ {shlex.join([pathlib.Path(sys.executable).name] + sys.argv)}"
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument(
|
|
"target",
|
|
nargs="+",
|
|
type=_targets.get_target,
|
|
help="a PEP 11 target triple to compile for",
|
|
)
|
|
parser.add_argument(
|
|
"-d", "--debug", action="store_true", help="compile for a debug build of Python"
|
|
)
|
|
parser.add_argument(
|
|
"-f", "--force", action="store_true", help="force the entire JIT to be rebuilt"
|
|
)
|
|
parser.add_argument(
|
|
"-v", "--verbose", action="store_true", help="echo commands as they are run"
|
|
)
|
|
args = parser.parse_args()
|
|
for target in args.target:
|
|
target.debug = args.debug
|
|
target.force = args.force
|
|
target.verbose = args.verbose
|
|
target.build(
|
|
pathlib.Path.cwd(),
|
|
comment=comment,
|
|
stencils_h=f"jit_stencils-{target.triple}.h",
|
|
force=args.force,
|
|
)
|
|
|
|
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")
|