custom-allocators
Custom allocator skill for memory allocation strategies. Use when implementing…
Ninja build system skill. Use when diagnosing Ninja build failures, understanding Ninja's role as a low-level build executor generated by CMake or other meta-build systems, tuning parallelism, interpreting Ninja output, or working with build.ninja files. Activates on queries
$ npx -y skills add mohitmishra786/low-level-dev-skills --skill ninja --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/ninjaContext preview
The summary Claude sees to decide when to auto-load this skill.
Ninja build system skill. Use when diagnosing Ninja build failures, understanding Ninja's role as a low-level build executor generated by CMake or other meta-build systems, tuning parallelism, interpreting Ninja output, or working with build.ninja files. Activates on queries
name: ninja description: Ninja build system skill. Use when diagnosing Ninja build failures, understanding Ninja's role as a low-level build executor generated by CMake or other meta-build systems, tuning parallelism, interpreting Ninja output, or working with build.ninja files. Activates on queries about ninja errors, ninja parallelism, ninja verbose output, build.ninja format, or ninja as a CMake generator. user-invocable: true triggers: - ninja build failure - ninja parallelism tuning - cmake ninja generator - interpret ninja output - build.ninja file format - ninja verbose output - ninja as cmake generator - diagnose ninja errors
Guide agents through Ninja as a build executor: diagnosing failures, controlling parallelism, generating from CMake, and understanding the `.ninja` file format when needed.
The most common use of Ninja is as the build executor for CMake:
# Configure with Ninja cmake -S . -B build -G Ninja cmake --build build # uses ninja internally # Or invoke ninja directly cd build && ninja # Specify parallelism ninja -j4 ninja -j$(nproc) # Build specific target ninja myapp ninja install
CMake also supports `Ninja Multi-Config`:
cmake -S . -B build -G "Ninja Multi-Config" cmake --build build --config Release cmake --build build --config Debug
# Show full commands (not just [CC] foo.c) ninja -v # Dry run (show what would be built) ninja -n # Show why a target needs rebuilding ninja -d explain myapp # Print all targets ninja -t targets all # Print targets grouped by rule ninja -t targets rule cc # Dependency graph (graphviz) ninja -t graph myapp | dot -Tsvg -o deps.svg
| Flag | Effect | |------|--------| | `-j N` | Parallel jobs (default: CPUs + 2) | | `-l N` | Don't start new jobs if load average > N | | `-k N` | Keep going after N failures (default 1) | | `-v` | Verbose: show full command lines | | `-n` | Dry run | | `-C dir` | Change to `dir` before doing anything | | `-t tool` | Run a sub-tool (`clean`, `query`, `targets`, `graph`, `compdb`) |
ninja -t clean # remove build outputs ninja -t clean -g # also remove generated files
Or via CMake:
cmake --build build --target clean
Ninja (via CMake) can generate a `compile_commands.json` for IDE integration and `clang-tidy`:
cmake -S . -B build -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ln -sf build/compile_commands.json .
Rarely hand-written, but useful to understand for debugging:
# Variable cflags = -Wall -O2 # Rule rule cc command = gcc $cflags -c $in -o $out description = CC $in # Build edge build foo.o: cc foo.c # Phony target build all: phony foo.o # Default target default all
Key concepts:
# List all build targets ninja -t targets # Query dependencies of a target ninja -t query myapp # Clean (already mentioned) ninja -t clean # Generate compile_commands.json (if supported by generator) ninja -t compdb cc cxx > compile_commands.json # List rules ninja -t rules
| Issue | Cause | Fix | |-------|-------|-----| | `ninja: error: 'foo.o', needed by 'prog', missing and no known rule to make it` | Missing build rule | Regenerate with CMake; check `add_executable` source list | | Build not picking up changes | Stale `build.ninja` | Re-run `cmake -S . -B build` | | Very slow parallel build | `-j` too high for I/O-bound build | Use `-l$(nproc)` to limit by load | | Circular dependency | Rule depends on itself | Check CMake target dependencies |
For the full Ninja command reference, `build.ninja` format details, and CMake integration patterns, see [references/cheatsheet.md](references/cheatsheet.md).
A curated suite of AI agent skills for systems and low-level programming — C/C++, Rust, Zig, GPU, bare-metal firmware, Linux kernel/driver development, computer architecture, compiler internals, HPC, and more.
Repo: mohitmishra786/low-level-dev-skills
Custom allocator skill for memory allocation strategies. Use when implementing…
NUMA programming skill for multi-socket memory locality. Use when detecting NUMA topology,…
AF_XDP skill for high-performance XDP sockets. Use when creating AF_XDP sockets, configuring…
DPDK skill for userspace packet I/O. Use when initializing EAL, configuring PMD drivers,…
io_uring skill for Linux async I/O. Use when building high-performance servers with liburing,…
Bare-metal ADC and DAC skill. Use when configuring analog sampling, DMA-driven ADC,…