Contributor builds are organized around a short feedback loop: compile the affected target, run the narrowest relevant test, then expand validation before committing. Project generation is optional.
Use a recent C++ compiler supported by the host platform and make sure Git subcommands and the repository bootstrap can run. The first tool invocation compiles the small bootstrap and may download pinned development tools into _Build.
Read CONTRIBUTING.md before changing code. It defines the issue-first workflow, commit format, and agent guidance. Read Coding Style before writing a new API.
Compile the test executable before running it:
Replace StringsTest with the test relevant to the change. To isolate one named section:
Arguments after -- belong to the test executable. Arguments before it belong to SC::Build.
Network tests can run alongside other worktrees by adding a unique --port-offset. A hang usually means an async handle, task, or reference count was not closed; reduce the run to one section before adding temporary tracing.
After focused tests pass:
SCTest in Debug.SCSingleFileLibs: when library dependencies or public headers changed.Representative commands:
BuildTest is omitted from ordinary local SCTest runs because it exercises broader toolchain flows. Use --all-tests when the change touches SC::Build, package resolution, bootstrap behavior, or CI-equivalent validation:
Format supported source files with the pinned formatter:
Then inspect the diff. Formatting is necessary but does not catch accidental generated files, over-wide declaration alignment, stale comments, or unrelated edits.
The native backend is the default command-line workflow. Generate projects when you want an IDE's project model or a generated Make flow:
Generated projects are placed below _Build/_Projects. They are disposable and should not become the source of truth for target definitions; edit Tools/SC-build.cpp instead.
Build Debug, reduce the test selection, and launch the produced executable through LLDB, GDB, Visual Studio, or the repository's VS Code configuration. The output directory printed by SC::Build identifies the exact executable for the selected platform, architecture, toolchain, and configuration.
When debugging async code, reconstruct ownership and completion in order:
Remove temporary logging after the behavior is understood.
Documentation is part of validation when changing public headers or Markdown pages:
Doxygen warnings fail the build. Check the generated page as well as the source because snippets, links, tables, and embedded HTML are transformed during generation.