You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ci(windows): ship Ninja build as ninja-windows classifier alongside permanent MSVC
Builds on the prior Ninja evaluation jobs. Per owner decision, the MSVC /
Visual Studio Windows build is the default JAR and is kept permanently (the
sccache cache loss on it is accepted); the Ninja Multi-Config build is shipped
ALONGSIDE it as a separate classifier JAR, never as a replacement. The two
generators produce different jllama.dll files, so they cannot share a resource
path in one JAR — hence the classifier (mirrors the cuda / opencl-android
pattern). Result: 4 permanent Windows build jobs, both generators distributed
and tested end-to-end.
- pom.xml: add `windows-ninja` profile producing a <classifier>ninja-windows</classifier>
JAR from ${outputDirectory}_windows_ninja (separate compile pass + resource
copy + classified jar; mirrors cuda / opencl-android).
- publish.yml: the package, publish-snapshot, and publish-release jobs download
Windows-{x86_64,x86}-ninja into src/main/resources_windows_ninja/ and activate
the `windows-ninja` profile (-P ...,windows-ninja). Add a
test-java-windows-x86_64-ninja job that loads the Ninja DLL via JNI and runs
the full model-backed suite (parity with test-java-windows-x86_64). Wire the
Ninja build + Java-test jobs into the package `needs:` graph.
- .gitignore: ignore src/main/resources_windows_ninja/ (CI-staged, never committed).
- README.md: add the `ninja-windows` classifier row + dependency snippet.
- CLAUDE.md: add "Windows Ninja artifact" section; refresh the sccache "Windows"
note (no CMakeLists change — routing is CI-download + pom-profile, not a GGML flag).
- TODO.md: rewrite the Windows section to the final dual-build design (MSVC kept
forever; remaining work is cache-hit verification, not a redesign).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SfvSZ76NW4e1qX1PjL4RKq
*) echo "::error::Refusing to publish non-SNAPSHOT version '$VERSION' from the snapshot job. Snapshot publishing requires a -SNAPSHOT version; releases go through the v* tag path."; exit 1 ;;
|_(none)_| CPU | Linux x86-64 / aarch64, macOS x86-64 / aarch64, Windows x86-64, Android aarch64 (CPU) | None beyond a JDK 8+ JVM |
166
+
|_(none)_| CPU | Linux x86-64 / aarch64, macOS x86-64 / aarch64, Windows x86-64 (MSVC / Visual Studio generator), Android aarch64 (CPU) | None beyond a JDK 8+ JVM |
166
167
|`cuda13-linux-x86-64`| CUDA 13 | Linux x86-64 with NVIDIA GPU | NVIDIA driver + CUDA 13 runtime libraries (`libcudart.so.13`, `libcublas.so.13`) installed on the host. The shared library is dynamically linked against them and will fail to `dlopen` if they are absent — there is no automatic fallback to CPU. |
167
168
|`opencl-android-aarch64`| OpenCL (Adreno) | Android aarch64 with Qualcomm Adreno GPU | A device-supplied OpenCL ICD (`libOpenCL.so`). Devices without an ICD (e.g. most non-Snapdragon Android hardware) must use the default CPU JAR. |
169
+
|`ninja-windows`| CPU (Ninja Multi-Config + MSVC) | Windows x86-64 and x86 | None beyond a JDK 8+ JVM. Same CPU backend as the default JAR's Windows natives, but compiled with the `Ninja Multi-Config` generator (sccache-cached in CI) instead of the Visual Studio generator. Provided so both Windows builds are available; functionally equivalent for normal use. |
168
170
169
171
```xml
170
172
<!-- CPU (default) -->
@@ -189,6 +191,14 @@ Pick at most one — they are mutually exclusive.
189
191
<version>5.0.2</version>
190
192
<classifier>opencl-android-aarch64</classifier>
191
193
</dependency>
194
+
195
+
<!-- Windows natives built with the Ninja Multi-Config generator (CPU) -->
0 commit comments