Skip to content

Updated port qvac-lib-inference-addon-cpp to v0.6.0#11

Merged
yuranich merged 1 commit into
tetherto:mainfrom
jpgaribotti:QVAC-2801
Jul 2, 2025
Merged

Updated port qvac-lib-inference-addon-cpp to v0.6.0#11
yuranich merged 1 commit into
tetherto:mainfrom
jpgaribotti:QVAC-2801

Conversation

@jpgaribotti

Copy link
Copy Markdown
Contributor

No description provided.

@yuranich yuranich merged commit 7015695 into tetherto:main Jul 2, 2025
@jpgaribotti jpgaribotti deleted the QVAC-2801 branch July 2, 2025 11:42
Zbig9000 added a commit to Zbig9000/qvac-registry-vcpkg that referenced this pull request May 20, 2026
…18993)

Re-pins the ggml-speech port from tetherto/qvac-ext-ggml @ 9562ed04
(2026-05-18, port-version 2 just landed in tetherto#156) to Zbig9000/qvac-ext-ggml
@ 45dbdecd (2026-05-19, HEAD of QVAC-18992 PR tetherto#13).

The new REF is a superset of 9562ed04:
  - 9562ed04 (GustavoA1604, PR tetherto#11) ggml-backend: android per-arch CPU
    variant dlopen fallback   --- already on tetherto/speech
  - 19eac6f0 (ggml-org)  sync up to ggml-org v0.10.2 (137 commits,
    bundled-ggml pin matching whisper.cpp v1.8.4.3's sync-ggml.last)
  - 4 conflict-resolution union merges in src/ggml-metal/ (additive,
    speech-stack patches + upstream's new GGML_OP_ROLL) --- details
    in tetherto/qvac-ext-ggml PR tetherto#13

TEMPORARY: REPO stays pinned at Zbig9000 fork until PR tetherto#13 lands on
tetherto/speech. After that, flip REPO -> tetherto/qvac-ext-ggml +
recompute SHA512 (no other port changes needed).

Switches Android build to full dynamic backends (QVAC-18993):
  - GGML_CPU_STATIC=ON --> GGML_CPU_ALL_VARIANTS=ON
  - All backends (per-arch CPU + Vulkan + OpenCL) ship as MODULE .so
    loaded at runtime via ggml's GGML_BACKEND_DL loader.
  - Picks up the .so files into vcpkg's bin/ via post-install file(GLOB).

Adds an `-isystem` shim that injects spirv-headers on the include
path when the vulkan feature is on: the QVAC-18992 ggml-org v0.10.2
merge introduces ggml-vulkan.cpp code that uses spv::* enums
unconditionally for SPIR-V capability injection (rounding-mode RTE).
Vulkan-Headers itself no longer bundles spirv.hpp, so the standalone
SPIRV-Headers tree must be on the include path. ggml-vulkan's
CMakeLists doesn't find_package(SpirvHeaders) so we inject via
CMAKE_CXX_FLAGS.

version-date 2026-04-09 --> 2026-05-19
port-version  2          --> 3 (continues after tetherto#156's bump to 2026-04-09#2)

Co-authored-by: Cursor <cursoragent@cursor.com>
Zbig9000 added a commit to Zbig9000/qvac-registry-vcpkg that referenced this pull request May 27, 2026
Picks up tetherto/qvac-ext-ggml@speech HEAD c9126afc (merge commit
of qvac-ext-ggml PR tetherto#13: "QVAC-18992: merge ggml-org @ 19eac6f0
(v0.10.2) into speech"). The merge brings in:

  c9126afc  Merge pull request tetherto#13 from Zbig9000/QVAC-18992-merge-ggml-from-whisper-cpp
  e31785e4  fix(metal): restore lost 'typedef struct {' before
            ggml_metal_kargs_supertonic_depthwise_1d (caught by qvac
            CI Apple prebuild matrix via an overlay on tetherto/qvac#2270)
  d39c0d29  metal: stride-aware src indexing in kernel_pad_f32 /
            kernel_pad_reflect_1d_f32 (fixes Mac M2 PAD test failure)
  166c4e12  Merge ggml-org @ 19eac6f0 into speech (sync to v0.10.2)

PR tetherto#13 also brings in PR tetherto#11 (GustavoA1604 Android per-arch CPU dlopen
fallback), which was already wired through port-version 4 via the
GGML_CPU_ALL_VARIANTS=ON + GGML_CPU_REPACK=ON shape introduced in
port-version 3 -- no port-side change needed for that.

Build changes vs port-version 4:

* Add patches/0001-ggml-vulkan-find-spirv-headers.patch wiring
  SPIRV-Headers into ggml-vulkan. The v0.10.2 sync added an
  unconditional #include <spirv/unified1/spirv.hpp> in
  src/ggml-vulkan/ggml-vulkan.cpp, but the upstream ggml-vulkan
  CMakeLists.txt never finds spirv-headers nor wires its include dir
  into the ggml-vulkan target. Patch finds the package and links it
  when available, gated on the "vulkan" feature.

* Add spirv-headers as a dependency of the "vulkan" feature so the
  patched find_package(SPIRV-Headers QUIET) actually resolves to a
  vcpkg-installed package.

Validated end-to-end through tetherto/qvac#2270's full CI matrix:
- 9/9 prebuild triplets (linux-x64/arm64, win32-x64, darwin-arm64/x64,
  android-arm64, ios-arm64 + 2 simulators)
- 107/107 C++ addon tests on linux-x64
- 5/5 platform integration test suites
- iOS + Android E2E on AWS Device Farm

Co-authored-by: Cursor <cursoragent@cursor.com>
Zbig9000 added a commit to Zbig9000/qvac-registry-vcpkg that referenced this pull request May 27, 2026
Picks up tetherto/qvac-ext-ggml@speech HEAD c9126afc (merge commit
of qvac-ext-ggml PR tetherto#13: "QVAC-18992: merge ggml-org @ 19eac6f0
(v0.10.2) into speech"). The merge brings in:

  c9126afc  Merge pull request tetherto#13 from Zbig9000/QVAC-18992-merge-ggml-from-whisper-cpp
  e31785e4  fix(metal): restore lost 'typedef struct {' before
            ggml_metal_kargs_supertonic_depthwise_1d (caught by qvac
            CI Apple prebuild matrix via an overlay on tetherto/qvac#2270)
  d39c0d29  metal: stride-aware src indexing in kernel_pad_f32 /
            kernel_pad_reflect_1d_f32 (fixes Mac M2 PAD test failure)
  166c4e12  Merge ggml-org @ 19eac6f0 into speech (sync to v0.10.2)

PR tetherto#13 also brings in PR tetherto#11 (GustavoA1604 Android per-arch CPU dlopen
fallback), which was already wired through port-version 4 via the
GGML_CPU_ALL_VARIANTS=ON + GGML_CPU_REPACK=ON shape introduced in
port-version 3 -- no port-side change needed for that.

Build changes vs port-version 4:

* Add patches/0001-ggml-vulkan-find-spirv-headers.patch wiring
  SPIRV-Headers into ggml-vulkan. The v0.10.2 sync added an
  unconditional #include <spirv/unified1/spirv.hpp> in
  src/ggml-vulkan/ggml-vulkan.cpp, but the upstream ggml-vulkan
  CMakeLists.txt never finds spirv-headers nor wires its include dir
  into the ggml-vulkan target. Patch finds the package and links it
  when available, gated on the "vulkan" feature.

* Add spirv-headers as a dependency of the "vulkan" feature so the
  patched find_package(SPIRV-Headers QUIET) actually resolves to a
  vcpkg-installed package.

Validated end-to-end through tetherto/qvac#2270's full CI matrix:
- 9/9 prebuild triplets (linux-x64/arm64, win32-x64, darwin-arm64/x64,
  android-arm64, ios-arm64 + 2 simulators)
- 107/107 C++ addon tests on linux-x64
- 5/5 platform integration test suites
- iOS + Android E2E on AWS Device Farm

Co-authored-by: Cursor <cursoragent@cursor.com>
jpgaribotti pushed a commit that referenced this pull request May 27, 2026
…pp re-validation (QVAC-19236, QVAC-18992, QVAC-19071) (#169)

* whisper-cpp 1.8.5: migrate to ggml-speech + expose metal feature

  Two ticket deliverables combined into one consistent port rewrite:

  QVAC-18992 — Migrate to use ggml speech branch
  ----------------------------------------------
  whisper-cpp now consumes the system-installed ggml provided by the
  `ggml-speech` port (same shape as parakeet-cpp and tts-cpp), instead of
  building the bundled `qvac-ext-lib-whisper.cpp/ggml/` subdirectory.

  Driven by -DWHISPER_USE_SYSTEM_GGML=ON; whisper.cpp's top-level CMake
  then calls `find_package(ggml CONFIG REQUIRED)` and aliases the
  `ggml::ggml` target to its internal `ggml` target. The bundled ggml
  source tree still exists in the upstream tarball but is no longer
  walked at configure time.

  All backend wiring is delegated to ggml-speech:
    - GGML_METAL / GGML_VULKAN / GGML_OPENCL / GGML_CUDA
    - GGML_BACKEND_DL=ON on Android (dynamic-backend mode)
    - GGML_CPU_ALL_VARIANTS=ON / GGML_CPU_REPACK=ON on Android
      (per-arch CPU MODULE .so files)
    - GGML_VULKAN_DISABLE_COOPMAT[2]=ON on Android (Adreno NDK)
    - spirv-headers `-isystem` shim for Vulkan
    - Android NDK Vulkan-Headers download
    - libqvac-speech-ggml-* output filename prefix

  Side effects:
    - The Vulkan-Headers download block is gone from this portfile;
      ggml-speech handles it. android-vulkan-version.cmake deleted.
    - The MSVC `/I` vs GCC/Clang `-isystem` spirv-headers shim is gone
      from this portfile; ggml-speech handles it.
    - The DL_BACKENDS install-tree fiddling is gone; the
      libqvac-speech-ggml-*.so files are installed by ggml-speech into
      ${VCPKG_INSTALLED_DIR}/<triplet>/lib/, which the
      transcription-whispercpp addon already picks up via
      get_target_property(... LOCATION) on the ggml::<backend> imported
      targets.
    - whisper-cpp + parakeet-cpp + tts-cpp now share the same backend
      binary set on every triplet (was: whisper-cpp brought a separate
      libqvac-ggml-* set, parakeet/tts brought libqvac-speech-ggml-*).
      Single source of truth.

  QVAC-19236 — Expose backend selection as features
  -------------------------------------------------
  Add the `metal` feature (was unconditionally ON for macOS / OFF for
  iOS in the portfile) so all 3 GPU backends are now declarative:

    whisper-cpp[metal]  -> ggml-speech[metal]   (osx | ios)
    whisper-cpp[vulkan] -> ggml-speech[vulkan]  (linux | windows | android)
    whisper-cpp[opencl] -> ggml-speech[opencl]  (android)

  Each whisper-cpp feature simply propagates into the matching
  ggml-speech feature (with the platform guard kept). Consumers can
  express the full GPU matrix declaratively in their own vcpkg.json
  (the transcription-whispercpp addon does exactly this in a companion
  PR — selecting [metal] for osx only, since iOS Metal still has a
  separate XPC/MTLCompiler runtime crash being investigated; the iOS
  binary stays on the CPU backend by simply not selecting [metal]).

  Whisper-cpp REF
  ---------------
  Bumped to v1.8.5 = 738d2e9e (tetherto/qvac-ext-lib-whisper.cpp@master),
  which is the merge of #33 ("update to v1.8.5 and sync vendored
  whisper.cpp + ggml to ggml-org upstream"). Pure upstream sync — no
  tetherto-specific behavior change at the consumer level beyond the
  ggml-source switch above.

  Result
  ------
  portfile.cmake: 150 -> ~55 lines (much closer to parakeet-cpp /
  tts-cpp shape). Total diff: -174 / +56.

  Version bump: 1.8.4.3#1 -> 1.8.5#0 (treating the version-string
  change + the ggml-source switch as a fresh baseline rather than a
  port-revision bump).

  Co-authored-by: Cursor <cursoragent@cursor.com>

Co-authored-by: Cursor <cursoragent@cursor.com>

* ggml-speech: bump to 2026-05-27#0 (PR #13 merged on speech)

Picks up tetherto/qvac-ext-ggml@speech HEAD c9126afc (merge commit
of qvac-ext-ggml PR #13: "QVAC-18992: merge ggml-org @ 19eac6f0
(v0.10.2) into speech"). The merge brings in:

  c9126afc  Merge pull request #13 from Zbig9000/QVAC-18992-merge-ggml-from-whisper-cpp
  e31785e4  fix(metal): restore lost 'typedef struct {' before
            ggml_metal_kargs_supertonic_depthwise_1d (caught by qvac
            CI Apple prebuild matrix via an overlay on tetherto/qvac#2270)
  d39c0d29  metal: stride-aware src indexing in kernel_pad_f32 /
            kernel_pad_reflect_1d_f32 (fixes Mac M2 PAD test failure)
  166c4e12  Merge ggml-org @ 19eac6f0 into speech (sync to v0.10.2)

PR #13 also brings in PR #11 (GustavoA1604 Android per-arch CPU dlopen
fallback), which was already wired through port-version 4 via the
GGML_CPU_ALL_VARIANTS=ON + GGML_CPU_REPACK=ON shape introduced in
port-version 3 -- no port-side change needed for that.

Build changes vs port-version 4:

* Add patches/0001-ggml-vulkan-find-spirv-headers.patch wiring
  SPIRV-Headers into ggml-vulkan. The v0.10.2 sync added an
  unconditional #include <spirv/unified1/spirv.hpp> in
  src/ggml-vulkan/ggml-vulkan.cpp, but the upstream ggml-vulkan
  CMakeLists.txt never finds spirv-headers nor wires its include dir
  into the ggml-vulkan target. Patch finds the package and links it
  when available, gated on the "vulkan" feature.

* Add spirv-headers as a dependency of the "vulkan" feature so the
  patched find_package(SPIRV-Headers QUIET) actually resolves to a
  vcpkg-installed package.

Validated end-to-end through tetherto/qvac#2270's full CI matrix:
- 9/9 prebuild triplets (linux-x64/arm64, win32-x64, darwin-arm64/x64,
  android-arm64, ios-arm64 + 2 simulators)
- 107/107 C++ addon tests on linux-x64
- 5/5 platform integration test suites
- iOS + Android E2E on AWS Device Farm

Co-authored-by: Cursor <cursoragent@cursor.com>

* tts-cpp + parakeet-cpp: bump port-version against ggml-speech 2026-05-27

ggml-speech bumped to 2026-05-27#0 in this PR will auto-apply via baseline
to every consumer port that has version>= on it. tts-cpp and parakeet-cpp
must declare they have been validated against the new ggml-speech to keep
the registry self-consistent.

tts-cpp: 2026-05-20 -> 2026-05-20#1
  - version>=ggml-speech bumped to 2026-05-27 (was 2026-04-09#4)

parakeet-cpp: 2026-05-20#2 -> 2026-05-20#3
  - version>=ggml-speech bumped to 2026-05-27 (was 2026-04-09#3)

Local validation (x64-linux, vulkan feature) against this registry tree:
  - tts-ggml addon: vcpkg resolves clean, build links clean,
    35 C++ unit tests pass, 61 JS unit tests pass
  - transcription-parakeet addon: vcpkg resolves clean, build links clean,
    32 C++ unit tests pass, 17 JS unit tests pass

Co-authored-by: Cursor <cursoragent@cursor.com>

* whisper-cpp: bump version>=ggml-speech to 2026-05-27

The version>= constraint on ggml-speech was still 2026-04-09#4 (carried
over from before the system-ggml migration). whisper-cpp@1.8.5 only
works against the new ggml-speech@2026-05-27 (v0.10.2 vendored sources,
new symbol set, spirv-headers Vulkan wiring), so the constraint must
reflect that minimum.

In practice the resolver always picked 2026-05-27 because that is the
baseline value, so this is metadata-only and not a behavior change for
either the addon CI run or the local file:// validation. It is the
correct declaration so a future consumer with a stale baseline cannot
combine whisper-cpp@1.8.5 with the old ggml-speech.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ggml-speech: pin spirv-headers vulkan dep to version>=1.4.341.0

Without a version>= constraint, the resolved spirv-headers version
depends entirely on the consumer's microsoft/vcpkg baseline. Pin to
1.4.341.0 to match the convention already used by qvac-fabric (the
other speech-stack port that depends on spirv-headers via vulkan),
keep both ports resolvable from the same SPIRV-Headers version when
they coexist in a consumer manifest, and ensure consumers with an
older baseline still pick up a known-good SPIRV-Headers.

Local validation on x64-linux: vcpkg upgrades spirv-headers from the
addon's baseline 1.4.304.1 to the required 1.4.341.0 cleanly, the
ggml-vulkan patch builds against the new headers, the full
transcription-whispercpp addon builds + 107/107 cpp tests + 30/30
unit tests pass.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants