Skip to content
Merged
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
diff --git a/src/ggml-vulkan/CMakeLists.txt b/src/ggml-vulkan/CMakeLists.txt
index 715a263a..3d92ac5d 100644
--- a/src/ggml-vulkan/CMakeLists.txt
+++ b/src/ggml-vulkan/CMakeLists.txt
@@ -7,6 +7,7 @@ if (POLICY CMP0147)
endif()

find_package(Vulkan COMPONENTS glslc REQUIRED)
+find_package(SPIRV-Headers QUIET)

if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
# Parallel build object files
@@ -87,6 +88,11 @@ if (Vulkan_FOUND)
)

target_link_libraries(ggml-vulkan PRIVATE Vulkan::Vulkan)
+
+ if (TARGET SPIRV-Headers::SPIRV-Headers)
+ target_link_libraries(ggml-vulkan PRIVATE SPIRV-Headers::SPIRV-Headers)
+ endif()
+
target_include_directories(ggml-vulkan PRIVATE ${CMAKE_CURRENT_BINARY_DIR})

# Workaround to the "can't dereference invalidated vector iterator" bug in clang-cl debug build
45 changes: 31 additions & 14 deletions ports/ggml-speech/portfile.cmake
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
# ggml-speech: tetherto/qvac-ext-ggml@speech, including the iOS Metal
# NULL-safety hardening from
# https://github.com/tetherto/qvac-ext-ggml/pull/10 (PR-10's 3 commits
# f21ff9a0 + b7dc01c7 + 0f54d9f7) now merged into the speech branch
# as PR-10 merge 08d39f0c (`Merge pull request #10 from
# ishanvohra2/fix/metal-ios-null-propagation`).
# ggml-speech: tetherto/qvac-ext-ggml@speech HEAD c9126afc, the merge
# commit of PR #13 ("QVAC-18992: merge ggml-org @ 19eac6f0 (v0.10.2)
# into speech"). The merge brings in:
#
# The Android backend stack still uses the GGML_CPU_ALL_VARIANTS=ON
# + GGML_CPU_REPACK=ON shape introduced in port-version 3 (per-arch
# CPU dlopen variants on top of the Vulkan / OpenCL MODULE .so files);
# only the Apple Metal path changes versus port-version 3, courtesy
# of PR-10's NULL-safety hardening on `ggml_metal_device_init` /
# `ggml_metal_buffer_init` etc.
# 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 (the ggml-org
# v0.10.2 sync in 166c4e12 dropped the typedef header;
# 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)
#
# The Android CPU dlopen fallback (GustavoA1604 #11) carried over from
# port-version 4 (08d39f0c) is unchanged.

vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO tetherto/qvac-ext-ggml
REF 08d39f0c
SHA512 0e681f60ba0ad49b1cebda914ee065c0b29f301617970b968054089830029153f1be28012dfe2ced9c1014fe8605647ca68208544e9564b5d5f1c68dfd1e82e9
REF c9126afc96145cc93892029b953f7de5abc09728
SHA512 e24b4bfb48a2be01d4703badee0aecb8772c5e35e76348e9de2ea693288bd23d84d1fb7c626dd63736f76bfcc442433522621998977661cf602ec90289f596a0
HEAD_REF speech
)

Expand Down Expand Up @@ -105,6 +108,20 @@ if(VCPKG_TARGET_IS_ANDROID)
)
endif()

# PR #13 (v0.10.2 sync) introduces 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. Apply a small patch
# so it does (and depend on spirv-headers in vcpkg.json's vulkan feature).
# TODO: push the equivalent fix upstream and drop this patch.
if("vulkan" IN_LIST FEATURES)
vcpkg_apply_patches(
SOURCE_PATH "${SOURCE_PATH}"
PATCHES
"${CMAKE_CURRENT_LIST_DIR}/patches/0001-ggml-vulkan-find-spirv-headers.patch"
)
endif()

vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
Expand Down
14 changes: 10 additions & 4 deletions ports/ggml-speech/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"name": "ggml-speech",
"version-date": "2026-04-09",
"port-version": 4,
"description": "Speech-stack flavour of ggml from tetherto/qvac-ext-ggml@speech, including the iOS Metal NULL-safety hardening from PR #10. Library filenames are prefixed libqvac-speech-ggml-* so they coexist with libqvac-ggml-* (fabric/llm) and libqvac-diffusion-ggml-* on the same Android device. Mutually exclusive with the regular ggml port in the same triplet -- pick one per build.",
"version-date": "2026-05-27",
"port-version": 0,
"description": "Speech-stack flavour of ggml from tetherto/qvac-ext-ggml@speech, including the ggml-org v0.10.2 sync (PR #13), the iOS Metal NULL-safety hardening from PR #10, GustavoA1604's Android per-arch CPU dlopen fallback (PR #11), and the Mac M2 PAD test fix. Library filenames are prefixed libqvac-speech-ggml-* so they coexist with libqvac-ggml-* (fabric/llm) and libqvac-diffusion-ggml-* on the same Android device. Mutually exclusive with the regular ggml port in the same triplet -- pick one per build.",
"homepage": "https://github.com/tetherto/qvac-ext-ggml/tree/speech",
"license": "MIT",
"dependencies": [
Expand Down Expand Up @@ -46,7 +46,13 @@
]
},
"vulkan": {
"description": "Enable Vulkan GPU backend"
"description": "Enable Vulkan GPU backend",
"dependencies": [
{
"name": "spirv-headers",
"version>=": "1.4.341.0"
}
]
}
}
}
4 changes: 2 additions & 2 deletions ports/parakeet-cpp/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{
"name": "parakeet-cpp",
"version-date": "2026-05-26",
"port-version": 0,
"port-version": 1,
"description": "Parakeet (NVIDIA FastConformer ASR + Sortformer diarization) inference in pure C++/ggml. Ships CTC, TDT, EOU and Sortformer engines under one Engine umbrella, plus the cross-engine StreamEvent API (VadStateChanged / EndOfTurn). Sourced from tetherto/qvac-ext-lib-whisper.cpp's parakeet-cpp/ subfolder; consumes the ggml-speech port.",
"homepage": "https://github.com/tetherto/qvac-ext-lib-whisper.cpp/tree/master/parakeet-cpp",
"license": "MIT",
"dependencies": [
{
"name": "ggml-speech",
"version>=": "2026-04-09#3"
"version>=": "2026-05-27"
},
{
"name": "vcpkg-cmake",
Expand Down
4 changes: 2 additions & 2 deletions ports/tts-cpp/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{
"name": "tts-cpp",
"version-date": "2026-05-20",
"port-version": 2,
"port-version": 3,
"description": "Text-to-speech inference in pure C++/ggml. Ships Resemble Chatterbox (Turbo + Multilingual variants) and Supertonic engines under a unified Engine API. Sourced from tetherto/qvac-ext-lib-whisper.cpp's tts-cpp/ subfolder (including the Android dynamic backend selection landed in PR #29); consumes the ggml-speech port.",
"homepage": "https://github.com/tetherto/qvac-ext-lib-whisper.cpp/tree/master/tts-cpp",
"license": "MIT",
"dependencies": [
{
"name": "ggml-speech",
"version>=": "2026-04-09#4"
"version>=": "2026-05-27"
},
{
"name": "vcpkg-cmake",
Expand Down
36 changes: 0 additions & 36 deletions ports/whisper-cpp/android-vulkan-version.cmake

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
From: qvac-registry-vcpkg <none@tether.io>
Subject: [PATCH] CMake: include(GNUInstallDirs) before add_subdirectory(src)

src/CMakeLists.txt uses `${CMAKE_INSTALL_INCLUDEDIR}` in line
`$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/whisper>` to populate
the imported target's INTERFACE_INCLUDE_DIRECTORIES via the exported
`whisper-targets.cmake`. The variable is only defined after
`include(GNUInstallDirs)` runs, which is currently *after*
`add_subdirectory(src)` in top-level CMakeLists.txt. As a result the
generator-expression expands to just `/whisper`, and downstream
`find_package(whisper)` consumers that rely on the install-tree
(`WHISPER_USE_SYSTEM_GGML=ON` paths in vcpkg ports such as
parakeet-cpp / tts-cpp / transcription-whispercpp addons) fail to
configure with:

CMake Error in CMakeLists.txt:
Imported target "whisper::whisper" includes non-existent path
"/whisper"
in its INTERFACE_INCLUDE_DIRECTORIES.

Move the `include(GNUInstallDirs)` call above `add_subdirectory(src)`
so the INSTALL_INTERFACE generator-expression evaluates to the
intended `include/whisper`. Does not change build-tree behavior
(BUILD_INTERFACE path unaffected) and does not move any other rule
that consumes `${CMAKE_INSTALL_*}` (those all stay after src/).

Filed for upstream submission as a follow-up PR.
---
CMakeLists.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -167,13 +167,14 @@
endif()
# ... otherwise assume ggml is added by a parent CMakeLists.txt
endif()
+include(GNUInstallDirs)
+
add_subdirectory(src)

#
# install
#

-include(GNUInstallDirs)
include(CMakePackageConfigHelpers)

set(WHISPER_BUILD_NUMBER ${BUILD_NUMBER})
Loading