Skip to main content

Lean Builds

FrameLift's built-in capabilities — graphics backends, audio, the read-ahead cache, and so on — are modules, the same unit plugins are built from (see Architecture). Built-in modules are compiled into the host, and each one you don't need can be compiled out for a leaner binary with fewer dependencies.

The FRAMELIFT_MODULE_<NAME> options

Every built-in module exposes a CMake option whose default is the module's .Module.json enabled flag. Pass -DFRAMELIFT_MODULE_<NAME>=OFF at configure time to drop a module and everything that depends only on it.

The option name is derived from the module id: strip the framelift. prefix, uppercase the rest, and replace any non-alphanumeric character with _. For example:

Module idCMake option
framelift.graphics_vulkanFRAMELIFT_MODULE_GRAPHICS_VULKAN
framelift.read_aheadFRAMELIFT_MODULE_READ_AHEAD
framelift.audioFRAMELIFT_MODULE_AUDIO

Example: a Vulkan-free build

Drop the Vulkan backend (and its dependencies — Vulkan-Headers, volk, VMA) while keeping the OpenGL backend:

cmake -B cmake-build-lean -DCMAKE_BUILD_TYPE=Debug -DFRAMELIFT_MODULE_GRAPHICS_VULKAN=OFF
cmake --build cmake-build-lean

See exactly what's toggleable

At configure time CMake prints the full enabled/disabled module table via framelift_report_builtin_modules(). Each row shows the module's state, its option name, and any constraints:

-- FrameLift built-in modules:
-- Vulkan: ON (FRAMELIFT_MODULE_GRAPHICS_VULKAN) - Vulkan backend, zero-copy GPU decode
-- Media Playback: ON (FRAMELIFT_MODULE_PLAYBACK) [required] - FFmpeg-backed playback
-- …

Read this table to learn the exact option name and current default for every module in your tree.

Constraints

Two kinds of module cannot be toggled this way:

  • Required modules (e.g. media playback, the host UI, the graphics core) are marked required in their metadata; disabling one is a configure error. The table tags them [required].
  • Platform-unsupported modules are always off regardless of the option — for example, a Windows-only module on a Linux build. The table notes the reason.

Dependencies are validated too: if you disable a module that an enabled module requires, configuration fails with a clear message rather than producing a broken binary.