diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f4f9d4c..b110612 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -81,14 +81,25 @@ jobs: build-essential \ libclang-dev \ clang \ - libvulkan-dev + libvulkan-dev \ + glslang-tools \ + spirv-tools + LIBCLANG_CANDIDATE=$(ls -d /usr/lib/llvm-*/lib 2>/dev/null | sort -V | tail -n1) + if [ -z "$LIBCLANG_CANDIDATE" ]; then + LIBCLANG_CANDIDATE=/usr/lib/x86_64-linux-gnu + fi + echo "LIBCLANG_PATH=$LIBCLANG_CANDIDATE" >> "$GITHUB_ENV" - name: Install macOS deps if: matrix.os == 'macos-latest' run: | brew list cmake >/dev/null 2>&1 || brew install cmake brew list llvm >/dev/null 2>&1 || brew install llvm + brew install vulkan-headers vulkan-loader molten-vk shaderc echo "LIBCLANG_PATH=$(brew --prefix llvm)/lib" >> "$GITHUB_ENV" + BREW_PREFIX=$(brew --prefix) + echo "VULKAN_SDK=$BREW_PREFIX" >> "$GITHUB_ENV" + echo "CMAKE_PREFIX_PATH=$BREW_PREFIX" >> "$GITHUB_ENV" - name: Install Windows deps if: matrix.os == 'windows-latest' diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 56997aa..f389d17 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -35,11 +35,12 @@ jobs: # System packages whisper-rs-sys + llama-cpp-sys-2 + Tauri need on each OS. # - libclang-dev: bindgen (pulled by whisper-rs-sys + llama-cpp-sys-2) # needs a libclang shared library at build time. - # - libvulkan-dev: llama-cpp-sys-2's `vulkan` feature links against - # libvulkan.so at build time, even when VULKAN_SDK is unset - # (falls back to the system-provided lib on Linux). - # - Linux is the heaviest because we depend on GTK/WebKit, audio, - # evdev, plus cmake for whisper.cpp. + # - Vulkan: llama-cpp-sys-2's `vulkan` feature wires `GGML_VULKAN=ON` + # for its embedded llama.cpp build, which runs `find_package(Vulkan)` + # and needs headers + loader + glslc at configure time (and + # libvulkan.so at link time). On Linux apt-get covers all four. + # - LIBCLANG_PATH: set explicitly because bindgen-0.72.1's default + # search path does not include /usr/lib/llvm-*/lib on 22.04. - name: Install Linux deps if: matrix.os == 'ubuntu-22.04' run: | @@ -55,19 +56,35 @@ jobs: build-essential \ libclang-dev \ clang \ - libvulkan-dev + libvulkan-dev \ + glslang-tools \ + spirv-tools + LIBCLANG_CANDIDATE=$(ls -d /usr/lib/llvm-*/lib 2>/dev/null | sort -V | tail -n1) + if [ -z "$LIBCLANG_CANDIDATE" ]; then + LIBCLANG_CANDIDATE=/usr/lib/x86_64-linux-gnu + fi + echo "LIBCLANG_PATH=$LIBCLANG_CANDIDATE" >> "$GITHUB_ENV" # macOS: cmake is preinstalled in macos-latest but pin via brew to - # be explicit and future-proof. Xcode CLT provides libclang but the - # runner's default clang install does not ship libclang.dylib — use - # Homebrew's LLVM, which does, and point LIBCLANG_PATH at it. + # be explicit. Xcode CLT provides libclang but the runner's default + # clang install does not ship libclang.dylib in a discoverable + # location — use Homebrew's LLVM and point LIBCLANG_PATH at it. + # + # Vulkan on macOS is provided by MoltenVK (Vulkan → Metal shim). + # We install the Homebrew formulae individually rather than the + # LunarG macOS SDK, which ships as an interactive .dmg/.app and + # doesn't scriptify cleanly. shaderc gives us glslc, which + # find_package(Vulkan) requires at cmake configure time. - name: Install macOS deps if: matrix.os == 'macos-latest' run: | brew list cmake >/dev/null 2>&1 || brew install cmake brew list llvm >/dev/null 2>&1 || brew install llvm - # Expose libclang.dylib to bindgen for subsequent steps. + brew install vulkan-headers vulkan-loader molten-vk shaderc echo "LIBCLANG_PATH=$(brew --prefix llvm)/lib" >> "$GITHUB_ENV" + BREW_PREFIX=$(brew --prefix) + echo "VULKAN_SDK=$BREW_PREFIX" >> "$GITHUB_ENV" + echo "CMAKE_PREFIX_PATH=$BREW_PREFIX" >> "$GITHUB_ENV" # Windows: cmake + clang (for whisper-rs-sys/llama-cpp-sys bindgen) # + Vulkan SDK (required by llama-cpp-sys-2 when the `vulkan`