86 lines
4.8 KiB
Markdown
86 lines
4.8 KiB
Markdown
# Toolchain and execution profiles
|
|
|
|
Faset uses C++20 without compiler extensions. Dependencies are pinned by commit and
|
|
archive SHA-256 in `dependencies.lock.json`; Slang is pinned to **2026.18** by
|
|
`tools/fetch_slang.py`. Changing these inputs is a deliberate SDK change. Editor
|
|
plugins additionally require the exact generated build fingerprint, including
|
|
compiler, platform, CRT, configuration, dependencies and SDK source identity.
|
|
|
|
## Observed compiler profiles
|
|
|
|
- **Linux development:** Ubuntu 26.04, x86-64, Clang **21.1.8**, CMake **4.2.3**,
|
|
Ninja, glibc **2.43**. Native Editor, GPU tests, gameplay and exports execute here.
|
|
- **Linux CI:** Ubuntu 24.04, x86-64, Clang **18.1.3**. The headless CPU suite and
|
|
manual run on this profile. It is not evidence for desktop rendering on that runner.
|
|
- **Windows CI:** Windows Server 2025 runner, x86-64, clang-cl **20.1.8**,
|
|
MSVC toolset **14.51.36231**, Windows SDK **10.0.26100.0**. Headless tests have
|
|
passed. Full Editor, software Vulkan and Release-package acceptance are tracked
|
|
separately in the implementation log until that job completes.
|
|
|
|
These are recorded validation profiles, not a claim that every intermediate Clang
|
|
release or every supported Windows desktop has been tested. The presets deliberately
|
|
use the compiler available on PATH so local installations remain practical. CI
|
|
configuration output records the actual detected versions; runner image upgrades
|
|
must be reviewed against this baseline. CMake **3.25** is the declared minimum, not
|
|
the exact version used in every recorded run.
|
|
|
|
MSVC-family builds use the dynamic CRT: `/MDd` in Debug, `/MD` otherwise. Physics,
|
|
Player, Editor and native plugins use compatible settings. Development and export
|
|
have separate CMake directories, avoiding accidental Debug/Release mixing.
|
|
|
|
Windows developer machines use the **Enable Win32 long paths** policy
|
|
(`LongPathsEnabled=1`). Faset executables carry `longPathAware` manifests. Engine
|
|
stream/hash/atomic-file boundaries also use wide extended paths, while serialized
|
|
project paths remain ordinary UTF-8. This does not change the independent path
|
|
support of CMake, Ninja, the compiler or Slang. CI records/enables the same host
|
|
profile; the build guide explains setup. A temporary path longer than 260 characters
|
|
exposed the original SceneView failure and now has dedicated regression coverage.
|
|
|
|
## Graphics profiles
|
|
|
|
The baseline requires Vulkan 1.3 with dynamic rendering and synchronization2, a
|
|
graphics queue, the renderer's color/depth format usages and limits, and presentation
|
|
support for a native window. The backend checks these requirements before creating
|
|
resources. It does not require hardware ray tracing, mesh shaders or descriptor
|
|
indexing. Timestamp availability is queried; unavailable GPU timings are reported
|
|
as unavailable rather than zero.
|
|
|
|
- **Physical Linux GPU:** NVIDIA GeForce RTX 2080 Ti, driver **595.84**, reported
|
|
Vulkan **1.4.329**. Tests request `VK_LAYER_KHRONOS_validation` and report whether
|
|
the layer actually activated. This machine runs both Wayland window and offscreen
|
|
scenarios.
|
|
- **Software Vulkan:** official SwiftShader and Vulkan Loader sources are pinned
|
|
with archive hashes in `tools/ci/prepare_windows_vulkan.py`. This profile checks
|
|
API execution and output pixels on Windows CI. It is CPU rendering and is not a
|
|
physical GPU performance benchmark. The bootstrap does **not** install validation
|
|
layers, so its zero error counter must not be described as validation-layer proof.
|
|
|
|
The measured physical GPU is one verified device, not an exhaustive compatibility
|
|
matrix. Additional AMD/Intel GPUs, Windows desktop drivers and display configurations
|
|
need their own execution records.
|
|
|
|
## Offline preparation
|
|
|
|
Before disconnecting, install the native toolchain and platform development packages,
|
|
fetch Slang, and run:
|
|
|
|
```sh
|
|
python3 tools/fetch_dependencies.py
|
|
python3 tools/fetch_dependencies.py --verify-only
|
|
```
|
|
|
|
Preserve `.cache/downloads`, `.cache/slang`, compilers, CMake/Ninja, Python and system
|
|
SDK/libraries. A fresh source checkout can then configure and build without fetching
|
|
third-party sources. Runtime exports require only their documented target runtime
|
|
and graphics driver; they do not need this development toolchain.
|
|
|
|
An offline build is recorded only after a clean build directory is configured and
|
|
built with network access disabled. A warm incremental build or archive checksum
|
|
verification alone is not that acceptance check.
|
|
|
|
Commit `d834cfad67cd81d8c4998b90c16791361ca8c0f8` passed this check on Linux: full
|
|
native build and 19 CPU tests in a new user/network namespace with no external
|
|
connectivity, using a `git archive` checkout and only prefetched inputs. See
|
|
[`validation/offline-linux-2026-09-18.json`](validation/offline-linux-2026-09-18.json).
|
|
Reproduce using `python3 tools/verify_offline_build.py --output .cache/offline-check`.
|