cpython/Tools/jit/build.py
Zanie Blue 2b0c684e07
Some checks failed
Tests / (push) Blocked by required conditions
Tests / Windows MSI (push) Blocked by required conditions
Tests / Change detection (push) Waiting to run
Tests / Docs (push) Blocked by required conditions
Tests / Check if Autoconf files are up to date (push) Blocked by required conditions
Tests / Check if generated files are up to date (push) Blocked by required conditions
Tests / Ubuntu SSL tests with OpenSSL (push) Blocked by required conditions
Tests / WASI (push) Blocked by required conditions
Tests / Hypothesis tests on Ubuntu (push) Blocked by required conditions
Tests / Address sanitizer (push) Blocked by required conditions
Tests / Cross build Linux (push) Blocked by required conditions
Tests / CIFuzz (push) Blocked by required conditions
Tests / All required checks pass (push) Blocked by required conditions
Lint / lint (push) Waiting to run
mypy / Run mypy on Lib/_pyrepl (push) Waiting to run
mypy / Run mypy on Lib/test/libregrtest (push) Waiting to run
mypy / Run mypy on Lib/tomllib (push) Waiting to run
mypy / Run mypy on Tools/build (push) Waiting to run
mypy / Run mypy on Tools/cases_generator (push) Waiting to run
mypy / Run mypy on Tools/clinic (push) Waiting to run
mypy / Run mypy on Tools/jit (push) Waiting to run
mypy / Run mypy on Tools/peg_generator (push) Waiting to run
JIT / Interpreter (Debug) (push) Has been cancelled
JIT / aarch64-pc-windows-msvc/msvc (Release) (push) Has been cancelled
JIT / aarch64-pc-windows-msvc/msvc (Debug) (push) Has been cancelled
JIT / i686-pc-windows-msvc/msvc (Release) (push) Has been cancelled
JIT / i686-pc-windows-msvc/msvc (Debug) (push) Has been cancelled
JIT / aarch64-apple-darwin/clang (Release) (push) Has been cancelled
JIT / aarch64-unknown-linux-gnu/gcc (Release) (push) Has been cancelled
JIT / aarch64-apple-darwin/clang (Debug) (push) Has been cancelled
JIT / aarch64-unknown-linux-gnu/gcc (Debug) (push) Has been cancelled
JIT / x86_64-apple-darwin/clang (Debug) (push) Has been cancelled
JIT / x86_64-unknown-linux-gnu/gcc (Debug) (push) Has been cancelled
JIT / x86_64-pc-windows-msvc/msvc (Release) (push) Has been cancelled
JIT / x86_64-pc-windows-msvc/msvc (Debug) (push) Has been cancelled
JIT / x86_64-apple-darwin/clang (Release) (push) Has been cancelled
JIT / x86_64-unknown-linux-gnu/gcc (Release) (push) Has been cancelled
GH-134273: Allow setting JIT compiler flags at build time with CFLAGS_JIT (GH134276)
2025-06-12 16:11:08 -07:00

70 lines
2.3 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(
"-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(
comment=comment,
force=args.force,
jit_stencils=args.output_dir / f"jit_stencils-{target.triple}.h",
)
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)