Files
Faset_Engine/docs/manual/getting-started/build.md
T

5.3 KiB

Build from source

!!! note "Verified build profiles" The Editor, Player and both sample exports passed the recorded Linux and Windows profiles. Linux rendering used an RTX 2080 Ti; Windows CI used SwiftShader. This does not certify every graphics driver or display configuration.

Linux prerequisites

The selected toolchain is C++20, CMake 3.25 or later, Ninja, Clang, and Python 3.12+. Graphical builds need Vulkan 1.3 headers/loader and a compatible driver. SDL3, FreeType and HarfBuzz are built from pinned source archives.

On Ubuntu, install the native build tools before configuring:

sudo apt install clang ninja-build cmake python3 python3-venv pkg-config \
  libvulkan-dev vulkan-validationlayers libx11-dev libxext-dev libxrandr-dev \
  libxcursor-dev libxi-dev libxfixes-dev libxkbcommon-dev libwayland-dev \
  xvfb

xvfb is used for automated window tests. A normal desktop session does not need it.

Configure, build, test

python3 tools/fetch_slang.py
cmake --preset linux-debug
cmake --build --preset linux-debug --parallel
ctest --preset linux-debug

Create a project and open the native Editor:

build/linux-debug/faset_editor --project "$PWD/MyGame" --new MyGame --dimension 3

You can also run build/linux-debug/faset_editor without arguments to open the project launcher and create or select a project using the native interface.

Use Build after changing MyGame/Scripts/Gameplay.cpp, then Play. The Player runs separately. Stop it before changing and rebuilding C++ gameplay. See MCP and CLI for headless authoring and automation.

For an optimized build use linux-release. The linux-sanitize preset enables AddressSanitizer and UndefinedBehaviorSanitizer for tests without the graphics backend.

Optional Lua module

Engine development builds enable FASET_ENABLE_LUA by default. Lua 5.4.9 is compiled from its checksum-pinned source archive; no system Lua installation is required. Pass -DFASET_ENABLE_LUA=OFF to omit the VM and bindings. The Editor's project build/export service selects this flag from scripting.lua.scripts in project.faset.json, so C++-only games do not link Lua.

See the Lua guide for the manifest, a Lua-only project, hot reload, and external-editor/LuaLS setup. Headless CPU checks can be run with:

cmake --preset linux-debug -DFASET_BUILD_RENDERER=OFF -DFASET_BUILD_EDITOR=OFF
cmake --build --preset linux-debug --parallel
ctest --preset linux-debug

These checks do not verify the graphical Player or renderer.

Dependencies and offline builds

Dependency source URLs, commits, and archive SHA-256 values are stored in dependencies.lock.json. CMake downloads them on the first configuration. To prefetch them for later offline use:

python3 tools/fetch_dependencies.py
python3 tools/fetch_dependencies.py --verify-only

Cached archives live in .cache/downloads and are not committed. Local compilers, system development libraries, and the Slang compiler must also be available before disconnecting. Prefetching source archives alone is not a complete offline SDK.

Windows prerequisites

Use an x64 Visual Studio Developer shell with the Windows SDK, MSVC runtime libraries, LLVM clang-cl, Ninja, CMake 3.25+, Python 3.12+, and the Vulkan SDK available. The commands below use the Python py launcher; substitute python if your installation exposes that command instead. Use the windows-debug or windows-release presets.

Enable Win32 long paths on the Windows development machine before starting the build shell. Faset's executable manifest declares long-path support, and its direct file IO uses wide extended paths; external CMake/Ninja/compiler tools also need a compatible host policy for deeply nested build/cache directories. An administrator can enable the policy once in PowerShell:

New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' `
  -Name LongPathsEnabled -Value 1 -PropertyType DWORD -Force

Open a new build shell afterwards; Windows may require a restart for existing processes. See Microsoft's long-path requirements. Windows CI enables and records this developer profile explicitly.

py tools/fetch_slang.py
cmake --preset windows-debug
cmake --build --preset windows-debug --parallel
ctest --preset windows-debug

Windows acceptance uses a fresh native CI checkout, full Editor build, launcher Create/Open tests, native window/MCP tests and standalone Release exports. Its software Vulkan driver is a CI fixture; install your normal hardware Vulkan driver on a development desktop. See the acceptance dossier for observed results.

Native Wayland programmatic restore was skipped when the tested compositor declined the operation; XWayland passed. If this affects your desktop, run the Editor with SDL_VIDEODRIVER=x11. Real system IME composition and movement between physical monitors with different scale factors remain compatibility checks, beyond the passing deterministic text/DPI tests.

The repository's docs/TOOLCHAINS.md records the exact compiler, SDK and GPU profiles used in observed validation, separately from the minimum tool requirements above.