Files
cuber/AGENTS.md
T
portersky a13105a591 docs: add coding and shell conventions to AGENTS.md
- Add include ordering rules: C++ std, C std, OS-specific,
  third-party, local headers (separated by blank lines)
- Clarify <> for system headers, "" for third-party deps
- Remove .exe from run command
- Mark shell code blocks as sh (POSIX compliant)
- Add shell script conventions section
2026-05-05 21:34:00 +02:00

2.2 KiB

AGENTS.md

Project Overview

cuber is a simple cube timer application.

Build System

  • Generator: Ninja
  • CMake minimum: 3.21
  • C++ standard: C++23

Commands

cmake -S . -B build -GNinja
ninja -C build
./build/cuber

Dependencies

Dependencies are managed via custom Find*.cmake scripts in deps/. These scripts use FetchContent under the hood to download and build libraries automatically. They are shared with the nerv project.

To add a new dependency:

  1. Copy the corresponding Find<name>.cmake from nerv/deps/
  2. Add find_package(<name> REQUIRED) to CMakeLists.txt
  3. Link with <name>::<name> in target_link_libraries()

CMake Module Path

deps/ is added to CMAKE_MODULE_PATH so find_package() resolves to the custom scripts instead of system-installed packages.

Coding Conventions

  • Language: C++23
  • Trailing return type for function signatures
  • 4-space indentation
  • No semicolons after closing braces for namespaces/classes
  • auto for obvious types (e.g. auto main(...) -> int)
  • <> includes only for system headers (std, OS, etc.)
  • "" includes for third-party dependencies (e.g. fmt, nlohmann/json)
  • Include order:
    1. C++ standard library headers (<chrono>, <vector>, etc.)
    2. (blank line)
    3. C standard library headers (<stdlib.h>, <string.h>, etc.)
    4. (blank line)
    5. OS-specific headers (Windows API, POSIX, etc.)
    6. (blank line)
    7. Third-party dependencies ("fmt/core.h", etc.)
    8. (blank line)
    9. Local/project headers

Shell Scripts

  • Always use #!/bin/sh shebang for shell scripts
  • Scripts must be POSIX compliant (no bashisms)
  • When providing commands to users:
    • Windows/PowerShell: use ` for line continuation
    • Unix/Linux/macOS: use \ for line continuation

Source Layout

cuber/
  CMakeLists.txt      # Build configuration
  cuber.cpp           # Entry point
  deps/               # Custom Find*.cmake scripts
    Findfmt.cmake     # fmt library

Platform Support

The nerv project supports Windows, Linux, Emscripten, and Android via Platform.cmake and Flags.cmake. These can be added to cuber/deps/ when cross-platform support is needed.