Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/on-pr-fabric.yml
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,9 @@ jobs:
sha: ${{ github.event.pull_request.base.sha || github.sha }}
pr_head_sha: ${{ github.event.pull_request.head.sha }}
workdir: packages/fabric
# fabric pulls qvac-fabric[hip-backend]; ggml-config find_dependency(hip)
# needs ROCm on the lint runner at configure time.
include-rocm-sdk: true
Comment thread
jpgaribotti marked this conversation as resolved.

detect-fabric-stack:
if: needs.authorize.outputs.allowed == 'true'
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/prebuilds-fabric.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,10 @@ jobs:
repository: ${{ inputs.repository }}
artifact-name-prefix: fabric-
include-vulkan-sdk: true
# Cross-compile the ROCm/HIP backend (gfx1151) into the linux-x64 prebuild
# so every @qvac/fabric consumer gets libqvac-ggml-hip.so from the shared
# runtime. No AMD GPU needed on the runner, but the SDK is mandatory: the
# `hip` port is deterministic and hard-fails without ROCm rather than
# installing empty, so dropping this input breaks the linux-x64 build.
include-rocm: true
secrets: inherit
37 changes: 37 additions & 0 deletions packages/fabric/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,42 @@
# Changelog

## [0.9.0] - 2026-08-25

### Added

- ROCm/HIP compute backend (`libqvac-ggml-hip.so`, gfx1151 / Strix Halo) in the
linux-x64 prebuild, via the `qvac-fabric[hip-backend]` feature. It ships as a
`GGML_BACKEND_DL` module under `prebuilds/linux-x64/qvac__fabric/` alongside
Vulkan, so every consumer of the shared runtime can select it β€” previously the
feature was requested per-consumer by `@qvac/vla-ggml`, which no longer builds
its own ggml. At **runtime** this is fail-safe: the DL loader skips the module
on non-AMD hosts and falls back to Vulkan/CPU. At **build time** it is not β€”
the `hip` port is deterministic and hard-fails when no ROCm SDK is found,
because a host-dependent skip would let the vcpkg binary cache conflate a
no-HIP build with a real HIP build under an identical ABI hash. Building
`packages/fabric` for linux-x64 therefore requires a ROCm/TheRock install,
located via `ROCM_PATH` or `/opt/rocm`. Other platforms are unaffected β€” the
`hip` dependency is gated on `linux & x64`.

### Changed

- `prebuilds-fabric.yml` sets `include-rocm: true` so the linux-x64 prebuild
cross-compiles the HIP backend, and `on-pr-fabric.yml`'s `cpp-lint` sets
`include-rocm-sdk: true` because `ggml-config.cmake` resolves
`find_dependency(hip/hipblas/rocblas)` at configure time. No AMD GPU is
required on either runner, but the SDK itself is mandatory on both: without it
`cpp-lint` fails at configure time resolving the port's `$ENV{ROCM_PATH}` shim
to an empty prefix (`/lib/cmake/hip/hip-config.cmake`), which a warm vcpkg
binary cache can disguise as a successful `hip` install.
- `qvac-registry-vcpkg` baseline `c57eec31` -> `f04e2447`, matching
`@qvac/vla-ggml`. Required because `qvac-fabric[hip-backend]` depends on `hip`
with no version constraint, so its version comes from the pinned baseline, and
the `hip` port does not exist at `c57eec31`. No other version selected by this
package changes: `qvac-fabric` and `qvac-lint-cpp` are pinned above their
baseline entries by `version>=`, `opencl` / `vcpkg-cmake` /
`vcpkg-cmake-config` are identical in both baselines, and `spirv-headers`
resolves from the separately pinned `microsoft/vcpkg` registry.

## [0.8.0] - 2026-08-24

### Changed
Expand Down
2 changes: 2 additions & 0 deletions packages/fabric/NOTICE
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,7 @@ C++ Dependencies

--- mit (MIT License) ---

hip (system ROCm/HIP SDK shim, linux-x64 only)
https://rocm.docs.amd.com
qvac-fabric (forked llama.cpp + ggml)
https://github.com/tetherto/qvac-fabric-llm.cpp
10 changes: 9 additions & 1 deletion packages/fabric/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ consumer guide.
ship under `prebuilds/<platform>/qvac__fabric/` and are loaded at runtime via
`ggml_backend_load_all_from_path()`. On **macOS, Windows, and iOS** the backends
are linked statically inside `qvac__fabric.bare` and self-register on load.
On **linux-x64** this includes the ROCm/HIP backend (`libqvac-ggml-hip.so`,
gfx1151) alongside Vulkan; the DL loader skips it on non-AMD hosts.

## Architecture

Expand Down Expand Up @@ -68,11 +70,17 @@ npm install
npm run build # bare-make generate && bare-make build && bare-make install
```

On **linux-x64** a ROCm/TheRock SDK is required, discovered via `ROCM_PATH` or
`/opt/rocm`. The `hip` port is deterministic β€” it hard-fails rather than
installing empty, so that the vcpkg binary cache cannot conflate a no-HIP build
with a real one under the same ABI hash. Other platforms need nothing extra; the
`hip` dependency is gated on `linux & x64`.

## Supported platforms

| Platform | Triplet | Backends |
|----------|---------|----------|
| Linux | `x64-linux`, `arm64-linux` | shared `.so` under `prebuilds/<platform>/qvac__fabric/` |
| Linux | `x64-linux`, `arm64-linux` | shared `.so` under `prebuilds/<platform>/qvac__fabric/` (x64 also ships ROCm/HIP) |
| macOS | `arm64-osx` | static (CPU, Metal) inside `.bare` |
| Windows | (default MSVC) | static inside `.bare` |
| Android | `arm64-android` | shared `.so` under `prebuilds/<platform>/qvac__fabric/` |
Expand Down
2 changes: 1 addition & 1 deletion packages/fabric/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@qvac/fabric",
"version": "0.8.0",
"version": "0.9.0",
"description": "Shared bare addon hosting the qvac-fabric (forked llama.cpp + ggml) runtime for QVAC inference addons",
"addon": true,
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion packages/fabric/vcpkg-configuration.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"default-registry": {
"kind": "git",
"baseline": "c57eec31bdc37ce3a98537b312f5a366b554db6a",
"baseline": "f04e244701f462c4c8fead7b50bcaffa52c052ac",
"repository": "https://github.com/tetherto/qvac-registry-vcpkg.git"
},
"registries": [
Expand Down
5 changes: 4 additions & 1 deletion packages/fabric/vcpkg.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@
},
{
"name": "qvac-fabric",
"version>=": "10297.0.0"
"version>=": "10297.0.0",
"features": [
"hip-backend"
]
Comment thread
jpgaribotti marked this conversation as resolved.
},
{
"name": "qvac-lint-cpp",
Expand Down
Loading