From 83e60e567e864f129903678c178d494a12b7b953 Mon Sep 17 00:00:00 2001 From: yingying0906 <30721578+yingying0906@users.noreply.github.com> Date: Wed, 12 Aug 2026 21:23:54 +0800 Subject: [PATCH 1/5] QVAC-23075 chore[notask]: overlay-validate the 7 fabric consumers against VisionPsy Rollout Phase A for the VisionPsy fabric change. Adds the shared qvac-fabric overlay port and points every consumer at it, so all 7 build against the fabric branch head before the tag exists and before anything is published to the registry. The port is copied from qvac-registry-vcpkg origin/main, which is two files now; android-vulkan-version.cmake is gone from the registry and is deliberately not reinstated here. REF is a branch SHA rather than v${VERSION} because the tag does not exist yet, and the whole overlay dies at the registry publish. Consumer version>= pins stay at 10069.0.0. The overlay bypasses version resolution entirely, so only the overlay port's own version matters here; bumping the pins is Phase B. default-registry.baseline is untouched in all 7, which is the one thing a rollout PR must never move. Roster re-derived rather than assumed: git grep -l "qvac-fabric" origin/main -- "packages/*/vcpkg.json" classification-ggml is absent because it consumes the published @qvac/fabric npm package rather than the vcpkg port. DO NOT MERGE. Validation only. --- .../embed-llamacpp/vcpkg-configuration.json | 3 + packages/fabric/vcpkg-configuration.json | 3 + .../llm-llamacpp/vcpkg-configuration.json | 3 + packages/model-fit/vcpkg-configuration.json | 3 + packages/ocr-ggml/vcpkg-configuration.json | 3 + .../vcpkg-configuration.json | 3 + packages/vla-ggml/vcpkg-configuration.json | 3 + .../ports/qvac-fabric/portfile.cmake | 237 ++++++++++++++++++ vcpkg-overlays/ports/qvac-fabric/vcpkg.json | 58 +++++ 9 files changed, 316 insertions(+) create mode 100644 vcpkg-overlays/ports/qvac-fabric/portfile.cmake create mode 100644 vcpkg-overlays/ports/qvac-fabric/vcpkg.json diff --git a/packages/embed-llamacpp/vcpkg-configuration.json b/packages/embed-llamacpp/vcpkg-configuration.json index e894485aaa..c383e60f96 100644 --- a/packages/embed-llamacpp/vcpkg-configuration.json +++ b/packages/embed-llamacpp/vcpkg-configuration.json @@ -14,5 +14,8 @@ "spirv-headers" ] } + ], + "overlay-ports": [ + "../../vcpkg-overlays/ports" ] } diff --git a/packages/fabric/vcpkg-configuration.json b/packages/fabric/vcpkg-configuration.json index 39265c0d89..37335a2da5 100644 --- a/packages/fabric/vcpkg-configuration.json +++ b/packages/fabric/vcpkg-configuration.json @@ -13,5 +13,8 @@ "spirv-headers" ] } + ], + "overlay-ports": [ + "../../vcpkg-overlays/ports" ] } diff --git a/packages/llm-llamacpp/vcpkg-configuration.json b/packages/llm-llamacpp/vcpkg-configuration.json index 74bbaaec5a..98bd001d6b 100644 --- a/packages/llm-llamacpp/vcpkg-configuration.json +++ b/packages/llm-llamacpp/vcpkg-configuration.json @@ -17,5 +17,8 @@ "spirv-headers" ] } + ], + "overlay-ports": [ + "../../vcpkg-overlays/ports" ] } diff --git a/packages/model-fit/vcpkg-configuration.json b/packages/model-fit/vcpkg-configuration.json index 74bbaaec5a..98bd001d6b 100644 --- a/packages/model-fit/vcpkg-configuration.json +++ b/packages/model-fit/vcpkg-configuration.json @@ -17,5 +17,8 @@ "spirv-headers" ] } + ], + "overlay-ports": [ + "../../vcpkg-overlays/ports" ] } diff --git a/packages/ocr-ggml/vcpkg-configuration.json b/packages/ocr-ggml/vcpkg-configuration.json index 7531c31bb3..cbab73712f 100644 --- a/packages/ocr-ggml/vcpkg-configuration.json +++ b/packages/ocr-ggml/vcpkg-configuration.json @@ -63,5 +63,8 @@ "spirv-headers" ] } + ], + "overlay-ports": [ + "../../vcpkg-overlays/ports" ] } diff --git a/packages/translation-nmtcpp/vcpkg-configuration.json b/packages/translation-nmtcpp/vcpkg-configuration.json index b49381752c..084da01bf4 100644 --- a/packages/translation-nmtcpp/vcpkg-configuration.json +++ b/packages/translation-nmtcpp/vcpkg-configuration.json @@ -80,5 +80,8 @@ "spirv-headers" ] } + ], + "overlay-ports": [ + "../../vcpkg-overlays/ports" ] } diff --git a/packages/vla-ggml/vcpkg-configuration.json b/packages/vla-ggml/vcpkg-configuration.json index 38cb9910d8..0386c1cef4 100644 --- a/packages/vla-ggml/vcpkg-configuration.json +++ b/packages/vla-ggml/vcpkg-configuration.json @@ -14,5 +14,8 @@ "spirv-headers" ] } + ], + "overlay-ports": [ + "../../vcpkg-overlays/ports" ] } diff --git a/vcpkg-overlays/ports/qvac-fabric/portfile.cmake b/vcpkg-overlays/ports/qvac-fabric/portfile.cmake new file mode 100644 index 0000000000..6c0c36f611 --- /dev/null +++ b/vcpkg-overlays/ports/qvac-fabric/portfile.cmake @@ -0,0 +1,237 @@ +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO tetherto/qvac-fabric-llm.cpp + # QVAC-23075 rollout Phase A: validate the 7 consumers against the VisionPsy fabric + # branch head before the tag exists. A branch SHA, not v${VERSION}, on purpose. + # Replaced by the published tag at the registry publish, so this overlay is temporary. + REF 7a6425a3add96f2598110a5953786866c9d49e0c + SHA512 0296d40e7663452dff2da62e4d9f509b018a989a7aa4231711eb4219dba0d878c8a9cb296a85de8d87b6d8e6b188f943bd8ca6df5ed696297d115557afe9579d + HEAD_REF main +) + +# Upstream CMake options only — passed through to vcpkg_cmake_configure. +vcpkg_check_features( + OUT_FEATURE_OPTIONS FEATURE_OPTIONS + FEATURES + force-profiler FORCE_GGML_VK_PERF_LOGGER + llama BUILD_LLAMA +) + +# Portfile-only feature flags (drive PLATFORM_OPTIONS; not upstream cache vars). +vcpkg_check_features( + OUT_FEATURE_OPTIONS _PORTFILE_FEATURE_OPTIONS + FEATURES + gpu-backends BUILD_GPU_BACKENDS + kleidiai BUILD_KLEIDIAI + openmp BUILD_OPENMP + hip-backend BUILD_HIP_BACKEND +) + +# gpu-backends is default-on via default-features in vcpkg.json. CPU-only +# consumers (e.g. @qvac/classification-ggml) disable it with +# default-features:false (and re-add 'llama' if needed). +if(NOT BUILD_GPU_BACKENDS) + message(STATUS "qvac-fabric: gpu-backends feature OFF — building CPU-only ggml (no Metal/Vulkan/CUDA/OpenCL)") +endif() + +set(PLATFORM_OPTIONS) + +if (VCPKG_TARGET_IS_ANDROID AND BUILD_GPU_BACKENDS) + # The Android NDK ships only the C Vulkan headers; the ggml Vulkan backend + # additionally needs the C++ bindings (vulkan.hpp) and SPIRV-Headers, which as + # of b9840 ggml fetches itself via FetchContent (ggml/src/ggml-vulkan/CMakeLists.txt, + # `if (ANDROID)` block). The registry vcpkg-cmake sets FETCHCONTENT_FULLY_DISCONNECTED=ON + # globally, so allow the fetch here (same as the kleidiai path below). + list(APPEND PLATFORM_OPTIONS -DFETCHCONTENT_FULLY_DISCONNECTED=OFF) +endif() + +if(NOT BUILD_GPU_BACKENDS) + # Force every GPU backend off explicitly, in case upstream defaults change. + list(APPEND PLATFORM_OPTIONS + -DGGML_METAL=OFF + -DGGML_VULKAN=OFF + -DGGML_CUDA=OFF + -DGGML_OPENCL=OFF + ) + if (VCPKG_TARGET_IS_IOS) + # Same iOS BLAS/Accelerate gating as the GPU-on path; unrelated to the + # CPU-vs-GPU split, an iOS-toolchain workaround for missing frameworks. + list(APPEND PLATFORM_OPTIONS -DGGML_BLAS=OFF -DGGML_ACCELERATE=OFF) + endif() +elseif (VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_IOS) + list(APPEND PLATFORM_OPTIONS -DGGML_METAL=ON) + if (VCPKG_TARGET_IS_IOS) + list(APPEND PLATFORM_OPTIONS -DGGML_BLAS=OFF -DGGML_ACCELERATE=OFF) + endif() +else() + list(APPEND PLATFORM_OPTIONS -DGGML_VULKAN=ON) +endif() + +# Android: always build CPU variants (NEON_DOTPROD, NEON_I8MM, etc.) and CPU +# repacking. These are CPU-only runtime optimizations selected based on the +# device's SIMD capabilities at load time, completely orthogonal to the GPU +# backends. Bundling them is essential for good CPU inference performance on +# the wide range of arm64 devices the addons ship to. Requires GGML_BACKEND_DL +# to dispatch the variants at runtime; the existing #ifdef guard around +# `ggml_backend_load_all_from_path()` in ggml-backend-reg.cpp keeps the search +# scoped to the consumer's own prebuilds dir. +if(VCPKG_TARGET_IS_ANDROID OR (VCPKG_TARGET_IS_LINUX AND BUILD_GPU_BACKENDS)) + # Desktop Linux also needs GGML_BACKEND_DL=ON so that multiple GPU backends + # (Vulkan + HIP/ROCm) can coexist as separately-loaded modules, the same way + # Android dispatches CPU variants at runtime. Without DL the Linux build links + # a single static GPU backend and a second one (HIP) cannot be stacked. + # GGML_NATIVE is incompatible with DL, so CPU variants are dispatched via + # GGML_CPU_ALL_VARIANTS instead. Consumers must ship the core ggml/llama libs + # alongside their backend modules so the dynamically-linked .bare can resolve + # them at load time. + set(DL_BACKENDS ON) + list(APPEND PLATFORM_OPTIONS + -DGGML_BACKEND_DL=ON + -DGGML_CPU_ALL_VARIANTS=ON + -DGGML_CPU_REPACK=ON) +else() + set(DL_BACKENDS OFF) +endif() + +# HIP/ROCm backend — opt-in via the 'hip-backend' feature (Linux + AMD only). +# Only @qvac/vla-ggml requests it, so every other consumer builds with no HIP +# and gains no ROCm dependency. Builds libqvac-ggml-hip.so as a standalone DL +# module alongside Vulkan (GGML_BACKEND_DL is already ON above), so the addon +# dlopen's whichever GPU backend BackendSelection picks at runtime. The `hip` +# feature-dependency port forwards the system ROCm's find_package() configs. +# +# FAIL-SAFE: enable GGML_HIP only when a ROCm SDK is actually present. On a build +# host without ROCm we skip HIP and build Vulkan/CPU only — the build never +# hard-fails, and at runtime a missing HIP module just isn't loaded (the DL +# loader skips it) so BackendSelection falls back to Vulkan/CPU. Targets gfx1151 +# (Strix Halo / Radeon 8060S); the HIP compiler + ROCM_PATH come from the build env. +# linux-x64 only: AMD GPU hosts (Strix Halo / gfx1151) are x86_64, and the ROCm +# dist is x64. On other arches (e.g. linux-arm64) HIP is skipped even if the +# feature is requested — no ROCm requirement, no build break. +if(VCPKG_TARGET_IS_LINUX AND VCPKG_TARGET_ARCHITECTURE STREQUAL "x64" AND BUILD_GPU_BACKENDS AND BUILD_HIP_BACKEND) + # DETERMINISTIC: requesting hip-backend REQUIRES a ROCm SDK at build time. We + # must NOT silently skip when ROCm is absent — a host-dependent skip yields a + # no-HIP package with the SAME vcpkg ABI as a real HIP build, which the binary + # cache then conflates (cache poisoning: a no-ROCm build caches a no-HIP + # package that ROCm-equipped builds then restore). So ROCm present => HIP; + # ROCm absent => hard error (don't request hip-backend on a host without ROCm). + # The RUNTIME fail-safe is unchanged: an absent HIP module / non-AMD target is + # simply not loaded and BackendSelection falls back to Vulkan/CPU. + if(NOT (DEFINED ENV{ROCM_PATH} AND EXISTS "$ENV{ROCM_PATH}/lib/cmake/hip/hip-config.cmake")) + message(FATAL_ERROR "qvac-fabric: hip-backend feature requires a ROCm SDK — set ROCM_PATH to a ROCm/TheRock install containing lib/cmake/hip/hip-config.cmake. Do not request hip-backend on a host without ROCm.") + endif() + message(STATUS "qvac-fabric: hip-backend ON — building GGML_HIP (gfx1151)") + list(APPEND PLATFORM_OPTIONS + -DGGML_HIP=ON + -DAMDGPU_TARGETS=gfx1151 + -DCMAKE_HIP_ARCHITECTURES=gfx1151) +endif() + +if(VCPKG_TARGET_IS_ANDROID AND BUILD_KLEIDIAI) + message(STATUS "qvac-fabric: kleidiai feature ON — building with ARM KleidiAI optimized kernels") + # ggml only vendors KleidiAI via FetchContent; registry vcpkg-cmake sets + # FETCHCONTENT_FULLY_DISCONNECTED=ON globally, so allow the download here. + list(APPEND PLATFORM_OPTIONS + -DGGML_CPU_KLEIDIAI=ON + -DFETCHCONTENT_FULLY_DISCONNECTED=OFF + ) +endif() + +if(VCPKG_TARGET_IS_ANDROID AND BUILD_OPENMP) + message(STATUS "qvac-fabric: OpenMP for Android enabled") + list(APPEND PLATFORM_OPTIONS -DGGML_OPENMP=ON) +else() + message(STATUS "qvac-fabric: OpenMP Disabled") + list(APPEND PLATFORM_OPTIONS -DGGML_OPENMP=OFF) +endif() + +if (VCPKG_TARGET_IS_ANDROID AND BUILD_GPU_BACKENDS) + list(APPEND PLATFORM_OPTIONS -DGGML_OPENCL=ON) +endif() + +if(BUILD_GPU_BACKENDS AND NOT VCPKG_TARGET_IS_OSX AND NOT VCPKG_TARGET_IS_IOS) + if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) + string(APPEND VCPKG_C_FLAGS " /I${CURRENT_INSTALLED_DIR}/include") + string(APPEND VCPKG_CXX_FLAGS " /I${CURRENT_INSTALLED_DIR}/include") + else() + string(APPEND VCPKG_C_FLAGS " -isystem ${CURRENT_INSTALLED_DIR}/include") + string(APPEND VCPKG_CXX_FLAGS " -isystem ${CURRENT_INSTALLED_DIR}/include") + endif() +endif() + +# Under GGML_BACKEND_DL the per-microarch backends ship as standalone +# libqvac-ggml-*.so modules that the consumer dlopen's at runtime. Built with +# -stdlib=libc++ they otherwise carry a runtime NEEDED dependency on the system +# libc++.so.1 / libc++abi.so.1, so they silently fail to dlopen on any target +# without libc++ installed (e.g. stock ubuntu-24.04 — no CPU backend registers, +# inference aborts). Statically link the C++ runtime into the modules so they +# are self-contained, matching how the addons link themselves. The module<->addon +# boundary is the C ggml-backend ABI, so per-module libc++ copies never exchange +# C++ objects. Linux only: Apple/iOS use Metal frameworks, Android ships +# libc++_shared via the NDK STL, Windows uses the MSVC runtime. +if(VCPKG_TARGET_IS_LINUX AND DL_BACKENDS) + string(APPEND VCPKG_LINKER_FLAGS " -static-libstdc++") +endif() + +set(LLAMA_OPTIONS) +if("llama" IN_LIST FEATURES) + list(APPEND LLAMA_OPTIONS -DLLAMA_MTMD=ON) +else() + list(APPEND LLAMA_OPTIONS + -DLLAMA_MTMD=OFF + -DLLAMA_BUILD_COMMON=OFF + ) +endif() + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + DISABLE_PARALLEL_CONFIGURE + OPTIONS + -DGGML_NATIVE=OFF + -DGGML_CCACHE=OFF + -DGGML_LLAMAFILE=OFF + -DLLAMA_CURL=OFF + -DLLAMA_BUILD_TESTS=OFF + -DLLAMA_BUILD_TOOLS=OFF + -DLLAMA_BUILD_EXAMPLES=OFF + -DLLAMA_BUILD_SERVER=OFF + -DLLAMA_BUILD_APP=OFF + -DMTMD_VIDEO=OFF + -DLLAMA_ALL_WARNINGS=OFF + ${LLAMA_OPTIONS} + ${PLATFORM_OPTIONS} + ${FEATURE_OPTIONS} +) + +vcpkg_cmake_install() +vcpkg_cmake_config_fixup( + PACKAGE_NAME ggml) + +if(BUILD_LLAMA) + vcpkg_cmake_config_fixup(PACKAGE_NAME llama) +endif() + +vcpkg_copy_pdbs() +vcpkg_fixup_pkgconfig() + + +if(BUILD_LLAMA) + file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/${PORT}") + file(RENAME "${CURRENT_PACKAGES_DIR}/bin/convert_hf_to_gguf.py" "${CURRENT_PACKAGES_DIR}/tools/${PORT}/convert-hf-to-gguf.py") + file(INSTALL "${SOURCE_PATH}/gguf-py" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}") + file(RENAME "${CURRENT_PACKAGES_DIR}/bin/vulkan_profiling_analyzer.py" "${CURRENT_PACKAGES_DIR}/tools/${PORT}/vulkan_profiling_analyzer.py") +endif() + +if (NOT VCPKG_BUILD_TYPE) + file(REMOVE "${CURRENT_PACKAGES_DIR}/debug/bin/convert_hf_to_gguf.py") +endif() + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share") + +if (VCPKG_LIBRARY_LINKAGE MATCHES "static") + file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin") + file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/bin") +endif() + +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") diff --git a/vcpkg-overlays/ports/qvac-fabric/vcpkg.json b/vcpkg-overlays/ports/qvac-fabric/vcpkg.json new file mode 100644 index 0000000000..ecd3f5b9e9 --- /dev/null +++ b/vcpkg-overlays/ports/qvac-fabric/vcpkg.json @@ -0,0 +1,58 @@ +{ + "name": "qvac-fabric", + "version": "10069.1.0", + "description": "LLM inference in C/C++", + "homepage": "https://github.com/tetherto/qvac-fabric-llm.cpp", + "license": "MIT", + "dependencies": [ + { + "name": "opencl", + "platform": "android" + }, + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ], + "default-features": [ + "gpu-backends", + "llama" + ], + "features": { + "force-profiler": { + "description": "Force vk performance logging in ggml" + }, + "gpu-backends": { + "description": "Build the GPU backends ggml ships per platform: Metal on Apple, Vulkan on Linux/Windows/Android, plus the Android backend-DL hybrid mode and OpenCL. Default-on so existing consumers (llamacpp-llm, llamacpp-embed, nmtcpp, diffusion-cpp) keep their current behaviour with default features. Disable to produce a CPU-only ggml build (useful for consumers like @qvac/classification-ggml that don't need GPU paths and want to skip the vulkan-sdk / metal / opencl build cost). Orthogonal to the 'llama' feature.", + "dependencies": [ + { + "name": "spirv-headers", + "platform": "!osx & !ios", + "version>=": "1.4.341.0" + } + ] + }, + "hip-backend": { + "description": "Build the ROCm/HIP GPU backend (libqvac-ggml-hip.so) for AMD GPUs on Linux as a DL module alongside Vulkan. Opt-in (only @qvac/vla-ggml requests it). Fail-safe: if no ROCm SDK is present at build time the HIP backend is skipped (Vulkan/CPU only). Targets gfx1151 (Strix Halo). The 'hip' dependency forwards the system ROCm find_package configs.", + "dependencies": [ + { + "name": "hip", + "platform": "linux & x64" + } + ] + }, + "kleidiai": { + "description": "Enable ARM KleidiAI optimized kernels on Android." + }, + "llama": { + "description": "Build llama components." + }, + "openmp": { + "description": "Enable openmp on Android." + } + } +} From 84aa46c770742a4b1ff7e7ba3dbaedefbc5280da Mon Sep 17 00:00:00 2001 From: yingying0906 <30721578+yingying0906@users.noreply.github.com> Date: Thu, 13 Aug 2026 12:39:21 +0800 Subject: [PATCH 2/5] QVAC-23075 chore[notask]: repoint the rollout overlay at the reviewed fabric head The branch pinned 7a6425a3a, which predates the review round. Fabric is now 8be2131e2, ten commits on, including the OpenCL view readback fix and the preprocessing changes the consumers should be validated against. SHA512 recomputed from the archive of the full SHA, with the method checked by reproducing the old pin's hash exactly. --- vcpkg-overlays/ports/qvac-fabric/portfile.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vcpkg-overlays/ports/qvac-fabric/portfile.cmake b/vcpkg-overlays/ports/qvac-fabric/portfile.cmake index 6c0c36f611..951dcf9462 100644 --- a/vcpkg-overlays/ports/qvac-fabric/portfile.cmake +++ b/vcpkg-overlays/ports/qvac-fabric/portfile.cmake @@ -4,8 +4,8 @@ vcpkg_from_github( # QVAC-23075 rollout Phase A: validate the 7 consumers against the VisionPsy fabric # branch head before the tag exists. A branch SHA, not v${VERSION}, on purpose. # Replaced by the published tag at the registry publish, so this overlay is temporary. - REF 7a6425a3add96f2598110a5953786866c9d49e0c - SHA512 0296d40e7663452dff2da62e4d9f509b018a989a7aa4231711eb4219dba0d878c8a9cb296a85de8d87b6d8e6b188f943bd8ca6df5ed696297d115557afe9579d + REF 8be2131e27d5589667db9c7f780fc1a9ef20869a + SHA512 e08658709630fd574bf6a463b06c81f73953e228737b505d41d3d5ccc4609793712da922ca47ab6ac42b20df8f0e9e562a364649ecb5fd9f82bbf0a70f11b24a HEAD_REF main ) From c9c55a90965fa07800dfb28afebcf1a9a96263a9 Mon Sep 17 00:00:00 2001 From: yingying0906 <30721578+yingying0906@users.noreply.github.com> Date: Thu, 13 Aug 2026 15:48:33 +0800 Subject: [PATCH 3/5] QVAC-23075 chore[notask]: repoint the rollout overlay at 295226e2d The fabric branch gained three commits from the second review pass: the zero image_size rejection extended to idefics3, the libmtmd rebuild note in mtmd.h, and the prompt-sequence assertions in tests.sh. Phase A has to validate the consumers against what will actually be tagged, so the overlay follows the head. SHA512 is the sha512 of the GitHub archive tarball for that commit. Method checked by reproducing the previous pin's hash from the same command before replacing it. --- vcpkg-overlays/ports/qvac-fabric/portfile.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vcpkg-overlays/ports/qvac-fabric/portfile.cmake b/vcpkg-overlays/ports/qvac-fabric/portfile.cmake index 951dcf9462..c739740e17 100644 --- a/vcpkg-overlays/ports/qvac-fabric/portfile.cmake +++ b/vcpkg-overlays/ports/qvac-fabric/portfile.cmake @@ -4,8 +4,8 @@ vcpkg_from_github( # QVAC-23075 rollout Phase A: validate the 7 consumers against the VisionPsy fabric # branch head before the tag exists. A branch SHA, not v${VERSION}, on purpose. # Replaced by the published tag at the registry publish, so this overlay is temporary. - REF 8be2131e27d5589667db9c7f780fc1a9ef20869a - SHA512 e08658709630fd574bf6a463b06c81f73953e228737b505d41d3d5ccc4609793712da922ca47ab6ac42b20df8f0e9e562a364649ecb5fd9f82bbf0a70f11b24a + REF 295226e2d9067f88acfeb6184561d66e2366fc99 + SHA512 5106bda08fb26dbc44257d540b89d2c9dbe9f65af8e8d50927f51d467c8640f214fd520d9690a6f47bdfb95476e7279a28d823e5ecc69a4bb837a34331497a6f HEAD_REF main ) From ec532d799bb8f1c2a9d5b798cb910a55e1938bb2 Mon Sep 17 00:00:00 2001 From: yingying0906 <30721578+yingying0906@users.noreply.github.com> Date: Thu, 13 Aug 2026 21:44:15 +0800 Subject: [PATCH 4/5] QVAC-23075 chore[DO NOT MERGE]: bump the overlay pin to fabric a812964c9 Was 295226e2d, which predates four fabric commits, two of which change what the consumers build: d85b1f367 formats string_format into the result rather than a vector, and a812964c9 takes the idefics3 overview from the original again. The other two do not affect the library, 4bccd82aa is test-only and aff60f874 touches build-opencl.yml. Phase A validation against the old pin no longer describes the branch, so no run on it counts as evidence. SHA512 recomputed from the archive for the full 40-char ref. --- vcpkg-overlays/ports/qvac-fabric/portfile.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vcpkg-overlays/ports/qvac-fabric/portfile.cmake b/vcpkg-overlays/ports/qvac-fabric/portfile.cmake index c739740e17..6362cb56a4 100644 --- a/vcpkg-overlays/ports/qvac-fabric/portfile.cmake +++ b/vcpkg-overlays/ports/qvac-fabric/portfile.cmake @@ -4,8 +4,8 @@ vcpkg_from_github( # QVAC-23075 rollout Phase A: validate the 7 consumers against the VisionPsy fabric # branch head before the tag exists. A branch SHA, not v${VERSION}, on purpose. # Replaced by the published tag at the registry publish, so this overlay is temporary. - REF 295226e2d9067f88acfeb6184561d66e2366fc99 - SHA512 5106bda08fb26dbc44257d540b89d2c9dbe9f65af8e8d50927f51d467c8640f214fd520d9690a6f47bdfb95476e7279a28d823e5ecc69a4bb837a34331497a6f + REF a812964c93ce692e70fc190857614ef462c43850 + SHA512 1fb895fb6e826a355909775db039dc52c4095f360c9e9894a288400e8a8a79f6b7f4db8acb78d2c1eae6ac2b3b96b1c97cba8bc332cc3e69498a47d0f28938f1 HEAD_REF main ) From dd8d11721dcb9e7a4bab3c76081d94c2d3a7ba57 Mon Sep 17 00:00:00 2001 From: yingying0906 <30721578+yingying0906@users.noreply.github.com> Date: Fri, 14 Aug 2026 23:56:35 +0800 Subject: [PATCH 5/5] QVAC-23075 chore[DO NOT MERGE]: bump the overlay pin to fabric 4ef2b3fdc Fabric head moved with the load-time bounds on the idefics3-style preprocessing metadata, so the 7 consumers need re-validating against it. SHA512 recomputed from the tarball for the new REF. Also drops the em-dashes from the portfile comments and message() strings. --- .../ports/qvac-fabric/portfile.cmake | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/vcpkg-overlays/ports/qvac-fabric/portfile.cmake b/vcpkg-overlays/ports/qvac-fabric/portfile.cmake index 6362cb56a4..68eb7706c4 100644 --- a/vcpkg-overlays/ports/qvac-fabric/portfile.cmake +++ b/vcpkg-overlays/ports/qvac-fabric/portfile.cmake @@ -4,12 +4,12 @@ vcpkg_from_github( # QVAC-23075 rollout Phase A: validate the 7 consumers against the VisionPsy fabric # branch head before the tag exists. A branch SHA, not v${VERSION}, on purpose. # Replaced by the published tag at the registry publish, so this overlay is temporary. - REF a812964c93ce692e70fc190857614ef462c43850 - SHA512 1fb895fb6e826a355909775db039dc52c4095f360c9e9894a288400e8a8a79f6b7f4db8acb78d2c1eae6ac2b3b96b1c97cba8bc332cc3e69498a47d0f28938f1 + REF 4ef2b3fdc0788d38e4e176030c07241ede40c5d0 + SHA512 d37f50c9097fdbbb5af4c26ff130d1725aa431611220195a0a7f9fbbfb8acb0663593b09084f499145cc164e18ba2db96230005b885a38b942b58c7c79c675d2 HEAD_REF main ) -# Upstream CMake options only — passed through to vcpkg_cmake_configure. +# Upstream CMake options only, passed through to vcpkg_cmake_configure. vcpkg_check_features( OUT_FEATURE_OPTIONS FEATURE_OPTIONS FEATURES @@ -31,7 +31,7 @@ vcpkg_check_features( # consumers (e.g. @qvac/classification-ggml) disable it with # default-features:false (and re-add 'llama' if needed). if(NOT BUILD_GPU_BACKENDS) - message(STATUS "qvac-fabric: gpu-backends feature OFF — building CPU-only ggml (no Metal/Vulkan/CUDA/OpenCL)") + message(STATUS "qvac-fabric: gpu-backends feature OFF, building CPU-only ggml (no Metal/Vulkan/CUDA/OpenCL)") endif() set(PLATFORM_OPTIONS) @@ -93,7 +93,7 @@ else() set(DL_BACKENDS OFF) endif() -# HIP/ROCm backend — opt-in via the 'hip-backend' feature (Linux + AMD only). +# HIP/ROCm backend, opt-in via the 'hip-backend' feature (Linux + AMD only). # Only @qvac/vla-ggml requests it, so every other consumer builds with no HIP # and gains no ROCm dependency. Builds libqvac-ggml-hip.so as a standalone DL # module alongside Vulkan (GGML_BACKEND_DL is already ON above), so the addon @@ -101,16 +101,16 @@ endif() # feature-dependency port forwards the system ROCm's find_package() configs. # # FAIL-SAFE: enable GGML_HIP only when a ROCm SDK is actually present. On a build -# host without ROCm we skip HIP and build Vulkan/CPU only — the build never +# host without ROCm we skip HIP and build Vulkan/CPU only, so the build never # hard-fails, and at runtime a missing HIP module just isn't loaded (the DL # loader skips it) so BackendSelection falls back to Vulkan/CPU. Targets gfx1151 # (Strix Halo / Radeon 8060S); the HIP compiler + ROCM_PATH come from the build env. # linux-x64 only: AMD GPU hosts (Strix Halo / gfx1151) are x86_64, and the ROCm # dist is x64. On other arches (e.g. linux-arm64) HIP is skipped even if the -# feature is requested — no ROCm requirement, no build break. +# feature is requested, so no ROCm requirement and no build break. if(VCPKG_TARGET_IS_LINUX AND VCPKG_TARGET_ARCHITECTURE STREQUAL "x64" AND BUILD_GPU_BACKENDS AND BUILD_HIP_BACKEND) # DETERMINISTIC: requesting hip-backend REQUIRES a ROCm SDK at build time. We - # must NOT silently skip when ROCm is absent — a host-dependent skip yields a + # must NOT silently skip when ROCm is absent, because a host-dependent skip yields a # no-HIP package with the SAME vcpkg ABI as a real HIP build, which the binary # cache then conflates (cache poisoning: a no-ROCm build caches a no-HIP # package that ROCm-equipped builds then restore). So ROCm present => HIP; @@ -118,9 +118,9 @@ if(VCPKG_TARGET_IS_LINUX AND VCPKG_TARGET_ARCHITECTURE STREQUAL "x64" AND BUILD_ # The RUNTIME fail-safe is unchanged: an absent HIP module / non-AMD target is # simply not loaded and BackendSelection falls back to Vulkan/CPU. if(NOT (DEFINED ENV{ROCM_PATH} AND EXISTS "$ENV{ROCM_PATH}/lib/cmake/hip/hip-config.cmake")) - message(FATAL_ERROR "qvac-fabric: hip-backend feature requires a ROCm SDK — set ROCM_PATH to a ROCm/TheRock install containing lib/cmake/hip/hip-config.cmake. Do not request hip-backend on a host without ROCm.") + message(FATAL_ERROR "qvac-fabric: hip-backend feature requires a ROCm SDK. Set ROCM_PATH to a ROCm/TheRock install containing lib/cmake/hip/hip-config.cmake. Do not request hip-backend on a host without ROCm.") endif() - message(STATUS "qvac-fabric: hip-backend ON — building GGML_HIP (gfx1151)") + message(STATUS "qvac-fabric: hip-backend ON, building GGML_HIP (gfx1151)") list(APPEND PLATFORM_OPTIONS -DGGML_HIP=ON -DAMDGPU_TARGETS=gfx1151 @@ -128,7 +128,7 @@ if(VCPKG_TARGET_IS_LINUX AND VCPKG_TARGET_ARCHITECTURE STREQUAL "x64" AND BUILD_ endif() if(VCPKG_TARGET_IS_ANDROID AND BUILD_KLEIDIAI) - message(STATUS "qvac-fabric: kleidiai feature ON — building with ARM KleidiAI optimized kernels") + message(STATUS "qvac-fabric: kleidiai feature ON, building with ARM KleidiAI optimized kernels") # ggml only vendors KleidiAI via FetchContent; registry vcpkg-cmake sets # FETCHCONTENT_FULLY_DISCONNECTED=ON globally, so allow the download here. list(APPEND PLATFORM_OPTIONS @@ -163,7 +163,7 @@ endif() # libqvac-ggml-*.so modules that the consumer dlopen's at runtime. Built with # -stdlib=libc++ they otherwise carry a runtime NEEDED dependency on the system # libc++.so.1 / libc++abi.so.1, so they silently fail to dlopen on any target -# without libc++ installed (e.g. stock ubuntu-24.04 — no CPU backend registers, +# without libc++ installed (e.g. stock ubuntu-24.04, no CPU backend registers, # inference aborts). Statically link the C++ runtime into the modules so they # are self-contained, matching how the addons link themselves. The module<->addon # boundary is the C ggml-backend ABI, so per-module libc++ copies never exchange