dotnet/runtime · error · RuntimeError
Missing JIT
Error message
Missing JIT
What it means
Raised by upload_command in jitrollingbuild.py during the 'upload' subcommand. After computing the JIT filename via determine_jit_name(host_os) (clrjit.dll on Windows, libclrjit.so on Linux, libclrjit.dylib on macOS), the script checks os.path.isfile(jit_path) under coreclr_args.product_location and aborts if the primary JIT binary is absent. The upload cannot proceed because the essential artifact is missing.
Solutions
- Build the JIT for the selected arch/build_type/host_os first (e.g. `build.cmd clr+libs -arch x64 -c Checked`) so clrjit exists in the product directory.
- List product_location and confirm the file reported in the 'Couldn't find JIT at <path>' log line actually exists.
- Re-run upload with -arch / -build_type / -host_os matching the tree you actually built.
Example fix
// before python jitrollingbuild.py upload -git_hash abc123 # raises 'Missing JIT' // after (build first, then upload with matching arch/build_type) build.cmd clr+libs -arch x64 -c Checked python jitrollingbuild.py upload -git_hash abc123 -arch x64 -build_type Checked
Defensive patterns
Strategy: validation
Validate before calling
import os
from jitutil import determine_jit_name
jit_name = determine_jit_name(host_os)
jit_path = os.path.join(product_location, jit_name)
if not os.path.isfile(jit_path):
raise SystemExit(f"No JIT at {jit_path}; build clr+libs for {host_os} first")
# safe to proceed to upload Prevention
- Always run the CLR build (clr+libs) for the exact arch/build_type before invoking upload.
- Log the computed jit_path and product_location before upload so mismatches are obvious.
When it happens
Trigger: Running `jitrollingbuild.py upload -git_hash <hash>` before the JIT has been built, or with product_location / -arch / -build_type / -host_os that do not match the built tree, so the expected clrjit.* file is not on disk at the computed path.
Common situations: Forgetting to run the CLR build (e.g. build.cmd clr+libs -arch x64 -c Checked) before uploading; mis-set CORE_ROOT/product_location; selecting Release when only Checked was built; cross-arch uploads without the matching arch JIT.
Related errors
- Error
- Missing azure storage or identity packages.
- Unknown OS.
- {coreclr_args.mode}
- Azure failed to download
AI-assisted analysis of dotnet/runtime@60108ba66e (2026-08-10).
Data as JSON: /api/errors/b75ee692c19a1dba.
Report an issue: GitHub.
Appendix: source
Thrown at src/coreclr/scripts/jitrollingbuild.py:388
#
# We could also upload debug info, but it's not clear it's needed for most purposes, and it is very big:
# it increases the upload size from about 190MB to over 900MB for each roll.
#
# For reference, the JIT debug info is found:
# a. For Windows, in the PDB subdirectory, e.g. PDB\clrjit.pdb
# b. For Linux .dbg files, and Mac .dwarf files, in the same directory as the jit, e.g., libcoreclr.so.dbg
# Target directory: <root>/git-hash/OS/architecture/build-flavor/
# Note that build-flavor will probably always be Checked.
files = []
# First, find the primary JIT that we expect to find.
jit_name = determine_jit_name(coreclr_args.host_os)
jit_path = os.path.join(coreclr_args.product_location, jit_name)
if not os.path.isfile(jit_path):
logging.error("Error: Couldn't find JIT at {}".format(jit_path))
raise RuntimeError("Missing JIT")
files.append(jit_path)
# Next, look for any and all cross-compilation JITs. These are named, e.g.:
# clrjit_unix_x64_x64.dll
# clrjit_universal_arm_x64.dll
# clrjit_universal_arm64_x64.dll
# and so on, and live in the same product directory as the primary JIT.
#
# Note that the expression below explicitly filters out the primary JIT since we added that above.
# We handle the primary JIT specially so we can error if it is missing. For the cross-compilation
# JITs, we don't bother trying to ensure that all the ones we might expect are actually there.
#
# We don't do a recursive walk because the JIT is also copied to the "sharedFramework" subdirectory,
# so we don't want to pick that up.
if coreclr_args.host_os == "osx":
allowed_extensions = [ ".dylib" ]View on GitHub (pinned to 60108ba66e)