Skip to content

Add experimental Vulkan support#657

Draft
dharmab wants to merge 7 commits into
mainfrom
vulkan
Draft

Add experimental Vulkan support#657
dharmab wants to merge 7 commits into
mainfrom
vulkan

Conversation

@dharmab

@dharmab dharmab commented Apr 18, 2026

Copy link
Copy Markdown
Owner

No description provided.

@dharmab dharmab changed the title Add experiemental Vulkan support Add experimental Vulkan support May 7, 2026
@dharmab dharmab marked this pull request as draft May 7, 2026 05:19
dharmab and others added 2 commits July 2, 2026 17:48
golang:1.26 is Debian trixie (glibc 2.41), but the runtime stages used
debian:bookworm-slim (glibc 2.36). Binaries built in the builder stage
fail to start on the runtime image with "GLIBC_2.38 not found". Use
debian:trixie-slim for the runtime base to match the builder.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Build whisper.cpp with -DGGML_VULKAN=ON to accelerate speech
recognition on GPUs. make skyeye-vulkan produces a skyeye-vulkan
binary (skyeye-vulkan.exe on Windows) using a separate whisper.cpp
build directory so CPU and Vulkan builds don't collide.

At runtime the Vulkan build needs only the GPU driver's Vulkan
loader: vulkan-1.dll ships with Windows GPU drivers, and the
container image includes libvulkan1 plus Mesa ICDs for AMD/Intel
(the NVIDIA container toolkit injects NVIDIA's ICD). When no Vulkan
device is present, whisper.cpp logs "no GPU found" and falls back
to CPU inference.

Releases gain skyeye-linux-amd64-vulkan.tar.gz and
skyeye-windows-amd64-vulkan.zip, and images are pushed to ghcr.io
with a -vulkan tag suffix.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
dharmab and others added 5 commits July 2, 2026 18:01
The -static linker flag limits -l searches to static libraries, so
ld cannot find -lvulkan-1 (MSYS2 ships only the import library
libvulkan-1.dll.a). Explicit file arguments bypass the search rules,
so link the import library by full path instead.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Name the binary skyeye/skyeye.exe inside the Vulkan release archives
to match the standard archives, so the winsw service config and
documented paths work unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ld.exe is a native Windows program and cannot resolve MSYS2 virtual
paths like /ucrt64. Convert the import library path to a Windows path
with cygpath. (MSYS2 auto-converts environment variables that look
like path lists, such as LIBRARY_PATH, but CGO_LDFLAGS contains flags
and is passed through unconverted.)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CGO_LDFLAGS is appended after the Go binding's link flags, so
-lggml-vulkan lands after -lstdc++. With -static the linker does not
re-scan libstdc++.a for symbols only libggml-vulkan.a needs (threads,
stringstreams). Repeat -lstdc++ at the end of the link order.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.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.

1 participant