~/openengine
$ cat docs/core/build-system.md
# CMake configuration reference

OpenEngine uses CMake as its build system with vcpkg for dependency management. All third-party C/C++ dependencies (GLFW, shaderc, VMA, etc.) are handled automatically via manifest mode.

CMake Generators

Visual Studio 2022

Windows-only. Multi-config generator supporting Debug/Release/RelWithDebInfo.

Ninja

Recommended for Linux/macOS. Single-config generator โ€” specify CMAKE_BUILD_TYPE.

Unix Makefiles

Fallback for Linux/macOS if Ninja is unavailable.

Xcode

macOS only. Multi-config, supports Debug/Release.

Key CMake Options

OptionValuesDefaultDescription
BUILD_EXAMPLESON/OFFOFFBuild example games and demos
BUILD_TESTINGON/OFFOFFBuild test executables
ENABLE_SCRIPTINGON/OFFOFFEnable C# scripting via CoreCLR
CMAKE_BUILD_TYPEDebug/Release/RelWithDebInfoDebugBuild configuration (single-config only)

Dependency Management

Dependencies are declared in vcpkg.json at the project root. CMake's manifest mode bootstraps vcpkg under cmake/dependencies/vcpkg/ on first configure and installs all ports automatically.

Key dependencies installed via vcpkg:

  • GLFW โ€” windowing and input
  • shaderc โ€” Vulkan shader compilation (glslc)
  • Vulkan Memory Allocator (VMA) โ€” GPU memory management
  • vulkan-loader โ€” Vulkan API loader (includes wayland,xcb,xlib surface extensions on Linux)

Build Outputs

bash
# Windows multi-config
cmake --build build --config Debug
cmake --build build --config Release

# Linux/macOS single-config
cmake --build build -- -j$(nproc)

Output layout (Visual Studio):

build/
โ”œโ”€โ”€ bin/Debug/
โ”‚   โ”œโ”€โ”€ Apps/Editor/Editor.exe
โ”‚   โ””โ”€โ”€ Tests/
โ”œโ”€โ”€ lib/Debug/Engine.lib
โ””โ”€โ”€ bin/Release/
    โ”œโ”€โ”€ Apps/Editor/Editor.exe
    โ””โ”€โ”€ Tests/

For single-config generators, output goes directly to build/bin/ without config subfolder.

Custom Build Configurations

bash
cmake -B build -G "Visual Studio 17 2022" -A x64 \
  -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build --config RelWithDebInfo
info

Use Release builds for performance testing. Debug builds include full symbols and validation layers.

Next Steps

enesfrar