{"record":{"id":"b75ee692c19a1dba","repo":"dotnet/runtime","slug":"missing-jit","errorCode":null,"errorMessage":"Missing JIT","messagePattern":"Missing JIT","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"src/coreclr/scripts/jitrollingbuild.py","lineNumber":388,"sourceCode":"    #\n    # We could also upload debug info, but it's not clear it's needed for most purposes, and it is very big:\n    # it increases the upload size from about 190MB to over 900MB for each roll.\n    #\n    # For reference, the JIT debug info is found:\n    #    a. For Windows, in the PDB subdirectory, e.g. PDB\\clrjit.pdb\n    #    b. For Linux .dbg files, and Mac .dwarf files, in the same directory as the jit, e.g., libcoreclr.so.dbg\n\n    # Target directory: <root>/git-hash/OS/architecture/build-flavor/\n    # Note that build-flavor will probably always be Checked.\n\n    files = []\n\n    # First, find the primary JIT that we expect to find.\n    jit_name = determine_jit_name(coreclr_args.host_os)\n    jit_path = os.path.join(coreclr_args.product_location, jit_name)\n    if not os.path.isfile(jit_path):\n        logging.error(\"Error: Couldn't find JIT at {}\".format(jit_path))\n        raise RuntimeError(\"Missing JIT\")\n\n    files.append(jit_path)\n\n    # Next, look for any and all cross-compilation JITs. These are named, e.g.:\n    #   clrjit_unix_x64_x64.dll\n    #   clrjit_universal_arm_x64.dll\n    #   clrjit_universal_arm64_x64.dll\n    # and so on, and live in the same product directory as the primary JIT.\n    #\n    # Note that the expression below explicitly filters out the primary JIT since we added that above.\n    # We handle the primary JIT specially so we can error if it is missing. For the cross-compilation\n    # JITs, we don't bother trying to ensure that all the ones we might expect are actually there.\n    #\n    # We don't do a recursive walk because the JIT is also copied to the \"sharedFramework\" subdirectory,\n    # so we don't want to pick that up.\n\n    if coreclr_args.host_os == \"osx\":\n        allowed_extensions = [ \".dylib\" ]","sourceCodeStart":370,"sourceCodeEnd":406,"githubUrl":"https://github.com/dotnet/runtime/blob/60108ba66eb7d1d12f595480091b4ad80a24b172/src/coreclr/scripts/jitrollingbuild.py#L370-L406","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\npython jitrollingbuild.py upload -git_hash abc123   # raises 'Missing JIT'\n// after (build first, then upload with matching arch/build_type)\nbuild.cmd clr+libs -arch x64 -c Checked\npython jitrollingbuild.py upload -git_hash abc123 -arch x64 -build_type Checked","handlingStrategy":"validation","validationCode":"import os\nfrom jitutil import determine_jit_name\n\njit_name = determine_jit_name(host_os)\njit_path = os.path.join(product_location, jit_name)\nif not os.path.isfile(jit_path):\n    raise SystemExit(f\"No JIT at {jit_path}; build clr+libs for {host_os} first\")\n# safe to proceed to upload","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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."],"tags":["jit-rolling-build","upload","build-artifacts","python"],"backgroundTag":null,"analyzedSha":"60108ba66eb7d1d12f595480091b4ad80a24b172","analyzedAt":"2026-08-10T18:54:11.478Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}