dotnet/runtime · error · RuntimeError
Missing JIT
Error message
Missing JIT
What it means
Thrown by upload_command() when the primary JIT binary (e.g., clrjit.dll, libclrjit.so, libclrjit.dylib) is not found at the expected path in the product (build output) directory. The script computes jit_name via determine_jit_name() based on host_os, then checks os.path.isfile(jit_path); if the file doesn't exist, it logs the path and raises.
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 290d5ab72c)
Solutions
- Verify the build completed successfully: check that os.path.join(product_location, determine_jit_name(host_os)) exists.
- Ensure -arch and -host_os match the architecture and OS you built for.
- Check the product_location path — it should typically be the Core_Root or build output directory containing clrjit.dll/libclrjit.so.
- If only cross-compilation JITs exist, verify whether the primary JIT was built as part of your build configuration.
Example fix
# before: product_location doesn't contain the expected JIT python jitrollingbuild.py upload -git_hash abc123 -product_location /wrong/path # after: point to correct build output python jitrollingbuild.py upload -git_hash abc123 -product_location /artifacts/bin/coreclr/Linux.x64.Checked
Defensive patterns
Strategy: validation
Validate before calling
# Verify the JIT binary exists before calling upload
import os
from jitutil import determine_jit_name
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):
print(f'JIT not found at {jit_path}. Build the runtime first.') Type guard
def jit_binary_exists(product_location: str, host_os: str) -> bool:
from jitutil import determine_jit_name
jit_path = os.path.join(product_location, determine_jit_name(host_os))
return os.path.isfile(jit_path) Try / catch
try:
upload_command(coreclr_args)
except RuntimeError as e:
if 'Missing JIT' in str(e):
logging.error('Build the runtime first, then retry upload.')
sys.exit(1)
raise Prevention
- Build the runtime (e.g., build.sh clr.runtime+libs) before running upload.
- Verify -product_location points to the directory containing clrjit.dll/libclrjit.so.
- Check that -arch and -host_os match your build configuration.
When it happens
Trigger: Called during 'jitrollingbuild.py upload'. Line 384-385: jit_name = determine_jit_name(coreclr_args.host_os); jit_path = os.path.join(coreclr_args.product_location, jit_name). Line 386-388: if not os.path.isfile(jit_path), raise. The product_location must contain the built JIT binary.
Common situations: The .NET runtime hasn't been built yet, or was built for a different OS/architecture than specified. The -product_location or core_root path points to the wrong build output directory. The build completed but the JIT was named differently (e.g., cross-compile JIT with a different naming convention). The build produced only cross-compilation JITs but not the primary clrjit binary.
Related errors
- Error
- Unknown OS.
- Missing azure storage or identity packages.
- Mismatched git hashes between loader and runtime. Loader: ${
- Mismatched git hashes between loader and runtime. Loader: ${
AI-assisted analysis of dotnet/runtime@290d5ab72c (2026-08-06).
Data as JSON: /api/errors/b75ee692c19a1dba.
Report an issue: GitHub.