# cmake/voicecat-toolchain.cmake — vcpkg toolchain wrapper with auto-triplet. # # Wraps vcpkg's toolchain to auto-resolve VCPKG_HOST_TRIPLET and VCPKG_TARGET_TRIPLET # from the host platform, so the main presets (dev, release, server-release) build on # Windows/MinGW, Linux, and macOS without per-OS preset variants. # # Triplet mapping (auto): # Windows → x64-mingw-static (the project's toolchain is MSYS2/UCRT64 — see # clients/windows/README.md; MSVC users must set # VCPKG_TARGET_TRIPLET=x64-windows explicitly) # Linux x64 → x64-linux # Linux arm64 → arm64-linux # macOS arm64 → arm64-osx (Apple Silicon) # macOS x64 → x64-osx (Intel) # # Cross-compile presets (apple-ios, apple-ios-sim) set VCPKG_TARGET_TRIPLET explicitly # in their cacheVariables; the DEFINED guards below preserve those. VCPKG_HOST_TRIPLET # is always the host's (e.g. arm64-osx when cross-compiling iOS on Apple Silicon). # # Resolution order: an explicit VCPKG_ROOT env var always wins (for developers pointing at # their own external vcpkg checkout); otherwise this falls back to the bundled submodule at # /vcpkg (`git submodule update --init vcpkg`). # ── Host triplet (the platform running vcpkg / the build) ───────────────────── if(NOT DEFINED VCPKG_HOST_TRIPLET) if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") set(_voicecat_host "x64-mingw-static") elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64|arm64") set(_voicecat_host "arm64-linux") else() set(_voicecat_host "x64-linux") endif() elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64|arm64") set(_voicecat_host "arm64-osx") else() set(_voicecat_host "x64-osx") endif() endif() if(_voicecat_host) set(VCPKG_HOST_TRIPLET "${_voicecat_host}" CACHE STRING "vcpkg host triplet (auto-resolved)") endif() unset(_voicecat_host) endif() # ── Target triplet (the platform being built for) ───────────────────────────── # Auto-resolve only when not explicitly set. Cross-compile presets (apple-ios, # apple-ios-sim) set VCPKG_TARGET_TRIPLET in their cacheVariables; the DEFINED # guard preserves those so they win over the auto-detection. if(NOT DEFINED VCPKG_TARGET_TRIPLET) if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") set(_voicecat_target "x64-mingw-static") elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64|arm64") set(_voicecat_target "arm64-linux") else() set(_voicecat_target "x64-linux") endif() elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64|arm64") set(_voicecat_target "arm64-osx") else() set(_voicecat_target "x64-osx") endif() endif() if(_voicecat_target) set(VCPKG_TARGET_TRIPLET "${_voicecat_target}" CACHE STRING "vcpkg target triplet (auto-resolved)") endif() unset(_voicecat_target) endif() # ── Overlay triplets — project-local overrides take precedence ──────────────── # Enables custom triplets (e.g. release-only x64-linux/arm64-linux, iOS slices) # without needing to fork vcpkg's built-in ones. Cross-compile presets that # already set VCPKG_OVERLAY_TRIPLETS explicitly (apple-ios, apple-ios-sim) keep # their own value via the DEFINED guard. if(NOT DEFINED VCPKG_OVERLAY_TRIPLETS) set(VCPKG_OVERLAY_TRIPLETS "${CMAKE_CURRENT_LIST_DIR}/vcpkg-overlays/triplets" CACHE STRING "vcpkg overlay triplets directory") endif() # ── Resolve vcpkg root ────────────────────────────────────────────────────────── if(DEFINED ENV{VCPKG_ROOT} AND NOT "$ENV{VCPKG_ROOT}" STREQUAL "") set(_voicecat_vcpkg_root "$ENV{VCPKG_ROOT}") else() set(_voicecat_vcpkg_root "${CMAKE_CURRENT_LIST_DIR}/../vcpkg") endif() if(NOT EXISTS "${_voicecat_vcpkg_root}/scripts/buildsystems/vcpkg.cmake") message(FATAL_ERROR "vcpkg not found at '${_voicecat_vcpkg_root}'.\n" "Either init the bundled submodule:\n" " git submodule update --init vcpkg\n" "or point VCPKG_ROOT at an external vcpkg checkout.") endif() # ── Hand off to the real vcpkg toolchain ────────────────────────────────────── include("${_voicecat_vcpkg_root}/scripts/buildsystems/vcpkg.cmake") unset(_voicecat_vcpkg_root)