themis/
├── CMakeLists.txt # Root CMake (delegates to cmake/)
├── cmake/ # ✨ Centralized
│ ├── CMakeLists.txt # Main configuration (2600+ lines)
│ ├── CMakePresets.json # All build profiles (MSVC, WSL, Docker)
│ ├── config/ # Feature configuration
│ ├── modules/ # CMake modules
│ └── ModularBuild.cmake
├── docker/ # ✨ Centralized
│ ├── Dockerfile.themis-server # Production (LLM + GPU)
│ ├── Dockerfile.minimal # Minimal Edition
│ ├── Dockerfile.qnap # QNAP NAS
│ └── docker-compose-minimal.yml
└── docs/build-guide/ # ✨ Detailed documentation
vcpkg Cache Structure:
vcpkg/
├── downloads/ # ~2.5 GB - Source Archives
├── buildtrees/ # ~3 GB - Temporary build artifacts
├── packages/ # ~10 GB - Installed packages
└── scripts/buildsystems/vcpkg.cmake
One-time Setup:
# Windows
.\scripts\setup-vcpkg-offline.ps1
# Linux/WSL
./scripts/setup-vcpkg-offline.sh| Platform | Triplet | Build Directory | Generator |
|---|---|---|---|
| Windows MSVC | x64-windows | build-msvc |
Visual Studio 17 2022 |
| Linux/WSL x64 | x64-linux | build-wsl or build-linux |
Ninja |
| Linux ARM64 | arm64-linux | build-arm |
Ninja |
| Docker Multi-Arch | x64-linux, arm64-linux | Container | Multi-stage |
| QNAP NAS | x64-linux | build-qnap |
Ninja |
All builds use CMake Presets (defined in cmake/CMakePresets.json).
Best practice for daily development:
- Install CMake Tools extension (ms-vscode.cmake-tools)
- Select preset: Command Palette → "CMake: Select Configure Preset"
- Build: Press
F7or Command Palette → "CMake: Build" - Test: Command Palette → "CMake: Run Tests"
- Debug: Press
F5with debug configuration
Benefits:
- ✅ Automatic preset detection
- ✅ Integrated build/test/debug
- ✅ IntelliSense auto-configuration
- ✅ Progress visualization
- ✅ Error navigation
See VSCODE_CONTEXT.md for detailed setup.
For CI/CD or when VSCode is not available:
cd C:\VCC\themis
# With Preset (recommended)
cmake --preset windows-vs2022-release
cmake --build --preset windows-vs2022-release --parallel 8
# Or manual
cmake -S . -B build-msvc -G "Visual Studio 17 2022" -A x64 \
-DCMAKE_BUILD_TYPE=Release \
-DTHEMIS_ENABLE_LLM=ON \
-DTHEMIS_ENABLE_GPU=ON
cmake --build build-msvc --config Release --parallel 8Output: build-msvc/Release/themis_server.exe
Docs: docs/build-guide/BUILD_WINDOWS.md
cd /path/to/themis
# With Preset
cmake --preset linux-gcc-release
cmake --build build-wsl --parallel 8
# Or manual
cmake -S . -B build-wsl -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DTHEMIS_ENABLE_LLM=ON
cmake --build build-wsl --parallel $(nproc)Output: build-wsl/themis_server
Docs: docs/build-guide/BUILD_LINUX.md
docker build -f docker/Dockerfile.themis-server \
-t themis-server:hyperscaler-llm \
--build-arg THEMIS_ENABLE_LLM=ON \
--build-arg THEMIS_ENABLE_GPU=ON \
.Docs: docs/build-guide/BUILD_DOCKER.md
Note: Multi-Stage Build (Builder 2.5GB → Runtime 200MB)
# Native build on RPi 4+ with reduced parallelism
cmake -S . -B build-rpi -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DTHEMIS_BUILD_TESTS=OFF
cmake --build build-rpi --parallel 2Output: build-rpi/themis_server
Docs: docs/build-guide/BUILD_RASPBERRY_PI.md
docker build -f docker/Dockerfile.qnap \
-t themis-server:qnap \
--build-arg THEMIS_ENABLE_LLM=OFF \
.Docs: docs/build-guide/BUILD_QNAP.md
| Edition | Script | CMake Flag | Features |
|---|---|---|---|
| Community | build-community-release.ps1 |
-DTHEMIS_EDITION=COMMUNITY |
Core, 24GB GPU, Single-Node |
| Enterprise | build-enterprise-release.ps1 |
-DTHEMIS_EDITION=ENTERPRISE |
+ Sharding, 256GB GPU, 100 Nodes |
| Hyperscaler | build-hyperscaler-release.ps1 |
-DTHEMIS_EDITION=HYPERSCALER |
Unlimited |
# Minimal Build (Core only, ~150 MB)
cmake -B build -DTHEMIS_ENABLE_LLM=OFF -DTHEMIS_BUILD_RPC_FRAMEWORK=OFF
# LLM Build (Core + llama.cpp, ~250 MB)
cmake -B build -DTHEMIS_ENABLE_LLM=ON
# Full Build (Core + LLM + RPC + GPU, ~350 MB)
cmake -B build \
-DTHEMIS_ENABLE_LLM=ON \
-DTHEMIS_BUILD_RPC_FRAMEWORK=ON \
-DTHEMIS_ENABLE_GPU=ON| Option | Default | Description |
|---|---|---|
THEMIS_CORE_SHARED |
OFF | Build themis_core as DLL/SO instead of static |
THEMIS_STATIC_BUILD |
OFF | Fully static binary (Docker/QNAP) |
THEMIS_ENABLE_LLM |
OFF | llama.cpp integration |
THEMIS_ENABLE_GPU |
OFF | CUDA/Vulkan/ROCm support |
THEMIS_BUILD_TESTS |
ON | Google Test suite |
THEMIS_BUILD_BENCHMARKS |
ON | Google Benchmark suite |
THEMIS_QNAP_BUILD |
OFF | QNAP NAS optimizations (SSE4.2 baseline) |
# Quick Fix
.\scripts\fix-cmake-prefix-path.ps1 -Action build -EnableGPU $true
# Or manually set CMAKE_PREFIX_PATH
$VCPKG = "C:\VCC\themis\vcpkg_installed\x64-windows"
cmake -DCMAKE_PREFIX_PATH="$VCPKG;$VCPKG\share" ...- Problem:
/O1,/bigobj,/Bt+on Linux - Fix: Gate in CMakeLists.txt with
if(MSVC)
- Problem: vcpkg/buildtrees too large
- Fix: Update .dockerignore, only include downloads/
For Docker builds, see: docker/DOCKER_BUILD_STRATEGY_QUICKREF.md
- Triple-Cache uses host packages from
./vcpkg/packages/+ BuildKit Cache - No unnecessary downloads/rebuilds for existing dependencies
- Check bind-mounts in
Dockerfile.unifiedif cache issues occur
docs/de/deployment/deployment_strategy.md- Overall strategydocs/de/deployment/deployment_arm_build.md- ARM/Raspberry Pi buildsdocs/de/deployment/BUILD_OPTIONEN_REFERENZ.md- All CMake flagsdocs/de/deployment/QUICK_REFERENCE.md- CMake find_package fixes