Developer Setup¶
Concise instructions to build, test, and develop YAMS locally.
Supported Platforms¶
| Platform | Architecture | Status |
|---|---|---|
| Linux | x86_64, arm64 | Primary |
| macOS | Apple Silicon, x86_64 | Primary |
| Windows | x86_64 | Supported |
Prerequisites¶
See ../BUILD.md#prerequisites for compilers, build tools, and system package installs.
Initialize Conan (one-time)¶
conan profile detect --force
Quick Start¶
Linux/macOS¶
# Release build
./setup.sh Release
meson compile -C build/release
# Debug build (includes tests)
./setup.sh Debug
meson compile -C builddir
Windows¶
# Release build
./setup.ps1 Release
meson compile -C build/release
# Debug build (includes tests)
./setup.ps1 Debug
meson compile -C builddir
For manual (Conan + Meson) commands, see ../BUILD.md.
Build Options¶
For the full list of build variables and Meson options, see ../BUILD.md#build-options.
Developer convenience variables¶
| Variable | Default | Description |
|---|---|---|
YAMS_ONNX_GPU |
auto | GPU provider: auto, cuda, coreml, directml, none |
FAST_MODE |
0 | Disable ONNX and tests for quick iteration |
Common post-setup tweak:
meson configure builddir -Dbuild-tests=true
Testing¶
# Build with tests
./setup.sh Debug
meson configure builddir -Dbuild-tests=true
meson compile -C builddir
# Run all tests
meson test -C builddir --print-errorlogs
# Run specific suites
meson test -C builddir --suite unit:smoke # Quick smoke tests
meson test -C builddir --suite unit # All unit tests
meson test -C builddir --suite integration # Integration tests
Developer Loop¶
# Edit code, then rebuild (incremental)
meson compile -C builddir
# Smoke test CLI
./builddir/tools/yams-cli/yams --version
# Use temporary data directory
mkdir -p /tmp/yams-dev && export YAMS_STORAGE=/tmp/yams-dev
yams init --non-interactive
echo "test" | yams add - --tags test
yams search test
Sanitizers (Debug)¶
CFLAGS='-fsanitize=address,undefined' CXXFLAGS='-fsanitize=address,undefined' \
meson setup builddir --reconfigure
meson compile -C builddir
meson test -C builddir
Static Analysis and Formatting¶
# clang-format
find src include -name '*.[ch]pp' -o -name '*.cc' -o -name '*.hh' | xargs clang-format -i
# clang-tidy (integrate via editor or invoke directly)
CCache (optional)¶
Speed up rebuilds:
# Install
brew install ccache # macOS
sudo apt install ccache # Ubuntu
# Export wrappers
export CC="ccache gcc"
export CXX="ccache g++"
Docker (optional)¶
# Quick CLI check
docker run --rm -it ghcr.io/trvon/yams:latest --version
# Persistent data
mkdir -p $HOME/yams-data
docker run --rm -it -v $HOME/yams-data:/var/lib/yams ghcr.io/trvon/yams:latest yams init --non-interactive
GPU Acceleration¶
The ONNX plugin supports GPU acceleration for embedding generation. GPU support is auto-detected during build based on platform and available hardware.
Supported Providers¶
| Platform | Provider | Hardware | Detection |
|---|---|---|---|
| macOS | CoreML | Apple Neural Engine + GPU | Always enabled (built into ONNX Runtime) |
| Linux | CUDA | NVIDIA GPUs | Detected via nvidia-smi |
| Windows | DirectML | Any DirectX 12 GPU | Detected via Win32 API |
| Windows | CUDA | NVIDIA GPUs | Preferred over DirectML if detected |
Build Configuration¶
# Auto-detect (default) - recommended
./setup.sh Release
# Force specific provider
YAMS_ONNX_GPU=cuda ./setup.sh Release # NVIDIA CUDA
YAMS_ONNX_GPU=coreml ./setup.sh Release # macOS CoreML
YAMS_ONNX_GPU=directml ./setup.ps1 # Windows DirectML
# Disable GPU (CPU-only)
YAMS_ONNX_GPU=none ./setup.sh Release
Runtime Configuration¶
GPU is used automatically when the plugin loads. To enable/disable at runtime:
# ~/.config/yams/config.toml
[embeddings]
enable_gpu = true # Use GPU if available (default)
# enable_gpu = false # Force CPU-only
Prerequisites¶
CUDA (Linux/Windows): - NVIDIA GPU with CUDA Compute Capability 5.0+ - CUDA Toolkit 11.8+ and cuDNN 8.6+ - Driver version 525.60+
DirectML (Windows): - Any DirectX 12 capable GPU (no additional drivers needed)
CoreML (macOS): - macOS 11+ (Big Sur or later) - No additional setup required; Neural Engine used on Apple Silicon
Verification¶
# Check build configuration
yams plugin health
# Check ONNX provider in logs
yams daemon log | grep -i "execution provider"
# Should show: "[ONNX] CoreML execution provider enabled" or similar
Troubleshooting¶
| Symptom | Fix |
|---|---|
| Missing native file | Re-run Conan install |
| Link errors after dep change | Delete builddir and reconfigure |
| Tests not found | Ensure -Dbuild-tests=true and recompile |
| qpdf: “recompile with -fPIC” | conan remove 'qpdf/*' -c then re-setup |
| Clang: “cannot find -lstdc++” | Install libstdc++ or use YAMS_COMPILER=gcc |
| Windows: Boost build failures | Install v143 toolset, clean cache |
| Windows: Missing recipes | Export qpdf and onnxruntime recipes |
Notes¶
- Use Release for benchmarking; Debug + sanitizers for development
- Keep build trees out of version control
mediainfo/libmediainfo-devenables richer video metadata- Provide exact versions and commands when filing issues