Building from source, running the test suites, sanitizers, cross-compiling,
and CI, for both the terminal frontend (nam_console) and the graphical
frontend (nam_sdl).
make # build both frontends (default)
make console # build only nam_console
make run # build and run nam_console
make test # configure + build + run its test suite
make sanitize # configure + build + run under ASan/UBSanCMake is the authoritative build system; the Makefile is a convenience
wrapper. Equivalent presets:
cmake --preset debug && cmake --build --preset debug
ctest --preset debug --output-on-failure
cmake --preset release && cmake --build --preset release
ctest --preset release --output-on-failure
cmake --preset asan-ubsan && cmake --build --preset asan-ubsan
ctest --preset asan-ubsan --output-on-failureCross-compile the Windows console executable from Linux with make mingw
(artifact: build/mingw/NAM_Console/nam_console.exe).
nam_sdl plays the same deterministic expedition with a rendered map, HUD,
and overlays instead of ANSI text. It's opt-in at build time — an ordinary
make console/make test never fetches SDL3.
Prerequisites: a C++17 toolchain and (for the reproducible presets) Ninja.
FetchContent pulls and statically links pinned SDL3/SDL3_image/SDL3_ttf
commits, so no system SDL install is required.
make sdl # build nam_sdl
make run-sdl # build and run it
make test-sdl # configure/build/run its test suiteor with presets:
cmake --preset sdl-debug && cmake --build --preset sdl-debug
ctest --preset sdl-debug -L sdl --output-on-failureSupported flags: --help, --version, --no-animation (disable
presentation animation), and --smoke (headless asset/init check, no
window). There is no --seed/--map selection in version 1 — it always
launches a fixed internal seed's four-tier expedition.
Supported desktop platforms: Linux, Windows (MSVC and MinGW cross-compiled
from Linux via make mingw-sdl), and macOS. See
../NAM_SDL/README.md for architecture, asset
licensing, the test-coverage boundary, and troubleshooting.
CI is split by cost. .github/workflows/ci.yml runs on every push and pull
request as two independent tracks that never gate on each other — console
(debug-preset tests, then a single advanced job running the acceptance,
sanitizers, hardened, and Clang checks concurrently as a CMake superbuild —
see cmake/advanced_checks/CMakeLists.txt — then Linux/MinGW release builds)
and SDL (SDL debug-preset tests, then SDL ASan+UBSan, then Linux/MinGW
nam_sdl release builds) — so a failure in one track never blocks the other
from testing or shipping.
.github/workflows/windows.yml (native MSVC) and
.github/workflows/macos.yml are workflow_dispatch only, kept off the push
tier due to billing multipliers.