Adds vcpkg as a submodule at vcpkg/, pinned to the exact commit vcpkg.json already declares as builtin-baseline, so the bundled checkout and the manifest's resolved port versions can never drift apart. cmake/voicecat-toolchain.cmake, scripts/common.sh, and clients/apple/scripts/build-xcframework.sh now resolve vcpkg as: VCPKG_ROOT env var (external checkout) > bundled submodule. Docs updated to describe the new one-time setup. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
101 lines
4.8 KiB
CMake
101 lines
4.8 KiB
CMake
# 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
|
|
# <repo-root>/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)
|