diff --git a/.github/android-consumer-test/settings.gradle.kts b/.github/android-consumer-test/settings.gradle.kts index 542f54fac..9b91b9b0e 100644 --- a/.github/android-consumer-test/settings.gradle.kts +++ b/.github/android-consumer-test/settings.gradle.kts @@ -14,13 +14,13 @@ pluginManagement { gradlePluginPortal() } plugins { - // AGP 9.3.x requires Gradle >= 9.5.0 — see the gradle-version pins on the CI jobs + // AGP 9.4.x requires Gradle >= 9.6.0 — see the gradle-version pins on the CI jobs // that build this fixture in publish.yml (package-android-aar, test-android-emulator). // Stay at >= 9.2.1: 9.2.1 (not 9.2.0) first fixed a real R8 regression // (java.lang.ClassNotFoundException on com.android.tools.r8.RecordTag after // upgrading Gradle to 9.x with AGP 9.2.0) that hits this fixture directly since - // buildTypes.release sets isMinifyEnabled = true; 9.3.0 carries that fix forward. - id("com.android.application") version "9.3.0" + // buildTypes.release sets isMinifyEnabled = true; 9.4.0 carries that fix forward. + id("com.android.application") version "9.4.0" } } diff --git a/.github/build.sh b/.github/build.sh index 373670258..87d21a1ea 100755 --- a/.github/build.sh +++ b/.github/build.sh @@ -33,9 +33,9 @@ fi # # SCCACHE_DL_VERSION is overridable per-job, so a container that crashes one sccache build can # try another without editing this script (the in-container panic that stalled phase 2 was on -# v0.8.2; v0.16.0 is the latest release and the default). A wrong/unavailable version just fails +# v0.8.2; v0.18.0 is the latest release and the default). A wrong/unavailable version just fails # the `curl -f` and falls back to an uncached build, so bumping it can never red a build. -SCCACHE_DL_VERSION="${SCCACHE_DL_VERSION:-0.16.0}" +SCCACHE_DL_VERSION="${SCCACHE_DL_VERSION:-0.18.0}" case "$(uname -m)" in x86_64) SCCACHE_DL_ARCH="x86_64" ;; aarch64|arm64) SCCACHE_DL_ARCH="aarch64" ;; diff --git a/.github/workflows/clang-format.yml b/.github/workflows/clang-format.yml index 688050864..74f235842 100644 --- a/.github/workflows/clang-format.yml +++ b/.github/workflows/clang-format.yml @@ -12,7 +12,7 @@ on: # reproducible between contributors and CI. Bump CLANG_FORMAT_VERSION here and in # CLAUDE.md (Code Formatting) together, then reformat the tree with the same version. env: - CLANG_FORMAT_VERSION: "22.1.8" + CLANG_FORMAT_VERSION: "23.1.1" jobs: clang-format: diff --git a/.github/workflows/osv-scanner.yml b/.github/workflows/osv-scanner.yml index 32a142f50..044ee2cc2 100644 --- a/.github/workflows/osv-scanner.yml +++ b/.github/workflows/osv-scanner.yml @@ -19,7 +19,7 @@ permissions: jobs: scan-scheduled: if: ${{ github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }} - uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@v2.5.1" + uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@v2.6.0" permissions: actions: read contents: read @@ -27,7 +27,7 @@ jobs: scan-pr: if: ${{ github.event_name == 'pull_request' }} - uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable-pr.yml@v2.5.1" + uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable-pr.yml@v2.6.0" permissions: actions: read contents: read diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 2ce6f8df7..718d58117 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -245,7 +245,7 @@ jobs: distribution: temurin - uses: gradle/actions/setup-gradle@v6 with: - gradle-version: "9.6.1" + gradle-version: "9.7.1" - name: Sign a throwaway artifact via useInMemoryPgpKeys (BouncyCastle) shell: bash env: @@ -1034,7 +1034,7 @@ jobs: - uses: gradle/actions/setup-gradle@v6 with: # AGP 9.3.0 (the .github/android-consumer-test fixture) requires Gradle >= 9.5.0. - gradle-version: "9.6.1" + gradle-version: "9.7.1" - name: Build core jar (byte-identical classes payload for the AAR) run: > mvn -B --no-transfer-progress -pl llama -am -DskipTests -Denforcer.skip=true @@ -1165,7 +1165,7 @@ jobs: - uses: gradle/actions/setup-gradle@v6 with: # AGP 9.3.0 (the .github/android-consumer-test fixture) requires Gradle >= 9.5.0. - gradle-version: "9.6.1" + gradle-version: "9.7.1" - name: Enable KVM group permissions (GitHub-hosted runner) run: | echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules @@ -1261,7 +1261,7 @@ jobs: # AGP 9.3.0 (android-llmservice) requires Gradle >= 9.5.0; also satisfies Kotlin # 2.4's Gradle-plugin floor. The AAR/lib-only jobs stay on an older Gradle since # they build no AGP project. - gradle-version: "9.6.1" + gradle-version: "9.7.1" - name: Build core jar + install llama-kotlin facade to mavenLocal # install (not package) so the app's Gradle build resolves llama-kotlin + # the core POM from mavenLocal. llama-kotlin's core dep is provided-scope, so the @@ -1345,7 +1345,7 @@ jobs: - uses: gradle/actions/setup-gradle@v6 with: # AGP 9.3.0 (android-llmservice) requires Gradle >= 9.5.0. - gradle-version: "9.6.1" + gradle-version: "9.7.1" - name: Enable KVM group permissions (GitHub-hosted runner) run: | echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules @@ -1607,7 +1607,7 @@ jobs: continue-on-error: true shell: pwsh run: | - $ver = "0.16.0" + $ver = "0.18.0" $rel = "sccache-v$ver-x86_64-pc-windows-msvc" $url = "https://github.com/mozilla/sccache/releases/download/v$ver/$rel.zip" Write-Host "Downloading $url" @@ -1661,7 +1661,7 @@ jobs: continue-on-error: true shell: pwsh run: | - $ver = "0.16.0" + $ver = "0.18.0" $rel = "sccache-v$ver-x86_64-pc-windows-msvc" $url = "https://github.com/mozilla/sccache/releases/download/v$ver/$rel.zip" Write-Host "Downloading $url" @@ -1790,7 +1790,7 @@ jobs: continue-on-error: true shell: pwsh run: | - $ver = "0.16.0" + $ver = "0.18.0" $rel = "sccache-v$ver-x86_64-pc-windows-msvc" $url = "https://github.com/mozilla/sccache/releases/download/v$ver/$rel.zip" Write-Host "Downloading $url" @@ -1841,7 +1841,7 @@ jobs: continue-on-error: true shell: pwsh run: | - $ver = "0.16.0" + $ver = "0.18.0" $rel = "sccache-v$ver-x86_64-pc-windows-msvc" $url = "https://github.com/mozilla/sccache/releases/download/v$ver/$rel.zip" Write-Host "Downloading $url" @@ -1885,7 +1885,7 @@ jobs: continue-on-error: true shell: pwsh run: | - $ver = "0.16.0" + $ver = "0.18.0" $rel = "sccache-v$ver-x86_64-pc-windows-msvc" $url = "https://github.com/mozilla/sccache/releases/download/v$ver/$rel.zip" Write-Host "Downloading $url" @@ -3728,7 +3728,7 @@ jobs: # downloads above; the core jar was just built by the reactor deploy. - uses: gradle/actions/setup-gradle@v6 with: - gradle-version: "9.6.1" + gradle-version: "9.7.1" - name: Publish Android AAR snapshots (llama-android + llama-android-opencl) run: | mkdir -p llama-android/natives/cpu/arm64-v8a llama-android/natives/cpu/x86_64 llama-android/natives/opencl/arm64-v8a @@ -3986,7 +3986,7 @@ jobs: # built by the reactor deploy. - uses: gradle/actions/setup-gradle@v6 with: - gradle-version: "9.6.1" + gradle-version: "9.7.1" - name: Publish Android AAR release bundle to Central Portal shell: bash run: | diff --git a/CLAUDE.md b/CLAUDE.md index 1bd0dd218..397e3ea04 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -213,7 +213,7 @@ Wiring (mirrors the CUDA-Linux / OpenCL-Android classifier pattern): (`OpenCL.lib`), then delegates to `build.bat` with `-DOpenCL_INCLUDE_DIR`/`-DOpenCL_LIBRARY` (the Windows analogue of `build_opencl_android.sh`). 4. **`.github/workflows/publish.yml`** — build jobs (all `windows-2025-vs2026`, `ilammy/msvc-dev-cmd@v1`, - sccache v0.16.0 zip + Depot WebDAV): + sccache v0.18.0 zip + Depot WebDAV): - `build-windows-x86_64` / `build-windows-x86` — **Ninja CPU**, artifacts `Windows-{arch}-libraries` → picked up by the `package` job's `pattern: "*-libraries"` into the **default** tree. - `build-windows-x86_64-msvc` / `build-windows-x86-msvc` — **MSVC CPU**, artifacts `Windows-{arch}-msvc`. @@ -638,7 +638,7 @@ v0.16.0 + the probe this is no longer a risk.) Job-by-job status: Per-job recipe: add `env:` { `USE_CACHE`, `SCCACHE_WEBDAV_ENDPOINT`, `SCCACHE_WEBDAV_TOKEN` } and `DOCKCROSS_ARGS: "-e SCCACHE_WEBDAV_ENDPOINT -e SCCACHE_WEBDAV_TOKEN -e USE_CACHE"` — the dockcross wrapper only forwards host env it is explicitly told to via `-e`. The fetched sccache -version is the `SCCACHE_DL_VERSION` knob in `build.sh` (default **0.16.0**; overridable per-job +version is the `SCCACHE_DL_VERSION` knob in `build.sh` (default **0.18.0**; overridable per-job to try a different build against a container that crashed another). **Windows** is handled separately (the Visual Studio generator ignores `CMAKE_*_COMPILER_LAUNCHER`): see "Windows native classifiers" below — the **default** Windows CPU JAR now uses the **Ninja @@ -1187,12 +1187,12 @@ not track the loader's own Java package). This is the same ### Code Formatting C++ formatting is **enforced in CI** (`.github/workflows/clang-format.yml`) with a **pinned** -clang-format — currently **22.1.8**, installed via `pip install clang-format==22.1.8`. Format with +clang-format — currently **23.1.1**, installed via `pip install clang-format==23.1.1`. Format with that exact version before committing; a different clang-format version reflows code differently and will fail the check. ```bash -pip install "clang-format==22.1.8" +pip install "clang-format==23.1.1" clang-format -i src/main/cpp/*.cpp src/main/cpp/*.hpp src/test/cpp/*.cpp # Format C++ code ``` @@ -1604,7 +1604,7 @@ ctest --test-dir build --output-on-failure -R "ResultsToJson" llama.cpp is fetched via CMake FetchContent, pinned to `GIT_TAG b11062`. -**GoogleTest** is a separate `BUILD_TESTING`-only FetchContent (`GIT_TAG v1.17.0`), used solely +**GoogleTest** is a separate `BUILD_TESTING`-only FetchContent (`GIT_TAG v1.18.0`), used solely by the `jllama_test` C++ unit-test binary — not by the shipped library, and not coupled to the llama.cpp pin or the bundled nlohmann/json. There is **no constraint behind the exact tag**; it is just the latest stable at the time it was last touched. Bump it from time to time (nothing @@ -2128,16 +2128,16 @@ compiles/loads the API); this one has a UI and is driven end-to-end. The name is domain is the only string that must be globally unique. Structure (mirrors the consumer-test's plumbing): -- **`settings.gradle.kts`** — `rootProject.name = "android-llmservice"`; pins AGP `9.3.0` + the +- **`settings.gradle.kts`** — `rootProject.name = "android-llmservice"`; pins AGP `9.4.0` + the Compose compiler plugin (`2.4.10`); `mavenLocal()` first so the freshly-built AAR + façade resolve there in CI (Maven Central for real users). Stay at `>= 9.2.1`: `9.2.1` (not `9.2.0`) first fixed a real R8 regression (`ClassNotFoundException` on `com.android.tools.r8.RecordTag` after upgrading Gradle to 9.x with AGP 9.2.0) that hits this project directly since - `buildTypes.release` sets `isMinifyEnabled = true`; `9.3.0` carries that fix forward and the - `.github/android-consumer-test` fixture is pinned the same way. AGP 9.3.x requires Gradle >= 9.5.0 + `buildTypes.release` sets `isMinifyEnabled = true`; `9.4.0` carries that fix forward and the + `.github/android-consumer-test` fixture is pinned the same way. AGP 9.4.x requires Gradle >= 9.6.0 and JDK 17+; CI already runs JDK 21 everywhere (`env.JAVA_VERSION`), so only the `gradle-version` pin on the jobs that build this project (and the `.github/android-consumer-test` fixture) - needed bumping (9.4.1 → 9.5.0). AGP 9.0+ has **built-in Kotlin support** (a runtime dependency on + needed bumping (currently `9.7.1`). AGP 9.0+ has **built-in Kotlin support** (a runtime dependency on Kotlin Gradle plugin 2.2.10+), so the standalone `org.jetbrains.kotlin.android` plugin is no longer applied — applying it now fails the build with "no longer required for Kotlin support since AGP 9.0" (`app/build.gradle.kts` line 7). The Compose compiler plugin still applies diff --git a/android-llmservice/README.md b/android-llmservice/README.md index fc926623e..8c4d67939 100644 --- a/android-llmservice/README.md +++ b/android-llmservice/README.md @@ -199,7 +199,7 @@ gradle -p android-llmservice connectedDebugAndroidTest -PjllamaVersion="$VERSION ``` android-llmservice/ -├── settings.gradle.kts # AGP 9.3.0 (built-in Kotlin) + Compose plugin 2.4.10, mavenLocal first +├── settings.gradle.kts # AGP 9.4.0 (built-in Kotlin) + Compose plugin 2.4.10, mavenLocal first ├── gradle.properties ├── requirements.md # spec of record: every feature the app implements today (no unit tests) ├── TODO.md # roadmap: not-yet-built features diff --git a/android-llmservice/settings.gradle.kts b/android-llmservice/settings.gradle.kts index bae0aad35..bab2f43ba 100644 --- a/android-llmservice/settings.gradle.kts +++ b/android-llmservice/settings.gradle.kts @@ -14,19 +14,19 @@ pluginManagement { gradlePluginPortal() } // Versions pinned here (KISS: no version catalog). AGP matches the consumer-test - // fixture. AGP 9.3.x requires Gradle >= 9.5.0 — see the gradle-version pins on the CI + // fixture. AGP 9.4.x requires Gradle >= 9.6.0 — see the gradle-version pins on the CI // jobs that build this project in publish.yml. Stay at >= 9.2.1: 9.2.1 (not 9.2.0) // first fixed a real R8 regression (java.lang.ClassNotFoundException on // com.android.tools.r8.RecordTag after upgrading Gradle to 9.x with AGP 9.2.0) that // hits this project directly since buildTypes.release sets isMinifyEnabled = true; - // 9.3.0 carries that fix forward. + // 9.4.0 carries that fix forward. // AGP 9.0+ has built-in Kotlin support (runtime dependency on Kotlin Gradle plugin // 2.2.10+), so the standalone org.jetbrains.kotlin.android plugin is no longer // applied/needed — see https://developer.android.com/build/migrate-to-built-in-kotlin. // The Compose compiler plugin (2.4.10) still applies separately and exceeds AGP's // 2.2.10 floor. plugins { - id("com.android.application") version "9.3.0" + id("com.android.application") version "9.4.0" id("org.jetbrains.kotlin.plugin.compose") version "2.4.10" } } diff --git a/llama/CMakeLists.txt b/llama/CMakeLists.txt index 9486e622f..c936f0163 100644 --- a/llama/CMakeLists.txt +++ b/llama/CMakeLists.txt @@ -550,7 +550,7 @@ if(BUILD_TESTING) # No constraint behind this exact tag — GoogleTest is only used by this repo's own # C++ unit tests (jllama_test), not by the shipped library and not tied to llama.cpp. # It is just "latest stable at the time"; bump it from time to time (see CLAUDE.md). - GIT_TAG v1.17.0 + GIT_TAG v1.18.0 ) # Keep GTest on the same CRT as the rest of the project. # OFF means GTest respects CMAKE_MSVC_RUNTIME_LIBRARY (static /MT here). diff --git a/llama/pom.xml b/llama/pom.xml index d525bc012..682c83a2e 100644 --- a/llama/pom.xml +++ b/llama/pom.xml @@ -67,7 +67,7 @@ SPDX-License-Identifier: MIT 3.8.7 2.0.19 1.6.3 - 1.27 + 1.28 6.1.3 3.0 1.37 @@ -101,7 +101,7 @@ SPDX-License-Identifier: MIT 7.7.4 1.14.0 3.10.2 - 2.97.0 + 2.98.0 UTF-8 2026-09-01T07:57:45Z @@ -420,7 +420,7 @@ SPDX-License-Identifier: MIT org.codehaus.mojo exec-maven-plugin - 3.6.3 + 3.6.4 org.jacoco