GN Integration¶
rninja works with GN (Generate Ninja), the meta-build system used by Chromium, Fuchsia, and other large projects.
Basic Usage¶
Generate and Build¶
Specify rninja in GN Args¶
Build Configurations¶
Debug Build¶
Release Build¶
Component Build¶
Common Workflows¶
Initial Setup¶
# Fetch dependencies (Chromium example)
gclient sync
# Generate build files
gn gen out/Default
# Build
rninja -C out/Default
Iterative Development¶
# After code changes
rninja -C out/Default
# After BUILD.gn changes
gn gen out/Default
rninja -C out/Default
Clean Build¶
# Clean outputs
rninja -C out/Default -t clean
# Full clean
rm -rf out/Default
gn gen out/Default
rninja -C out/Default
Using rninja as Default¶
Symlink Method¶
# Replace ninja with rninja
sudo ln -sf $(which rninja) /usr/local/bin/ninja
# GN will now use rninja automatically
gn gen out/Default
ninja -C out/Default # Actually uses rninja
GN Args Method¶
In your args.gn:
Or on command line:
Large Project Considerations¶
Chromium¶
# Generate for component build (faster)
gn gen out/Default --args='is_component_build=true symbol_level=1'
# Build Chrome
rninja -C out/Default chrome
# Build specific component
rninja -C out/Default content_shell
Fuchsia¶
V8¶
Advanced Usage¶
Parallel Builds¶
# Use all cores
rninja -C out/Default -j0
# Limit for memory-constrained machines
rninja -C out/Default -j4
Building Specific Targets¶
# Build one target
rninja -C out/Default my_target
# Build multiple targets
rninja -C out/Default target1 target2
# Build all tests
rninja -C out/Default all_tests
Verbose Output¶
Incremental Builds¶
rninja's caching is especially beneficial for large GN projects:
# First build caches artifacts
rninja -C out/Default
# Switch branches
git checkout feature-branch
# Rebuild uses cache
rninja -C out/Default # Much faster with cache hits
GN Introspection¶
List All Targets¶
Describe Target¶
Show Dependencies¶
Check Build Files¶
IDE Integration¶
VS Code (Chromium)¶
Use the official VS Code configuration:
CLion¶
GN can generate CLion project files:
Compilation Database¶
Generate for IDE support:
# GN method
gn gen out/Default --export-compile-commands
# rninja method
rninja -C out/Default -t compdb cc cxx > compile_commands.json
Troubleshooting¶
GN Uses Original Ninja¶
Check which ninja GN is using:
Set explicitly:
Build Errors After GN Changes¶
# Regenerate
gn gen out/Default
# If still failing, clean and regenerate
rm -rf out/Default
gn gen out/Default
rninja -C out/Default
Memory Issues on Large Projects¶
For projects like Chromium:
# Limit parallelism
rninja -C out/Default -j4
# Use component build
gn gen out/Default --args='is_component_build=true'
Performance Tips¶
Component Builds¶
For faster iteration:
Remote Caching¶
For team builds:
export RNINJA_CACHE_MODE=auto
export RNINJA_CACHE_REMOTE_SERVER=tcp://cache.internal:9999
export RNINJA_CACHE_TOKEN=team-token
rninja -C out/Default
Monitor Build Performance¶
Cache Statistics¶
Tips¶
Use Output Directories¶
Keep multiple configurations:
GN Args File¶
Store common args in args.gn:
# out/Default/args.gn
is_debug = true
is_component_build = true
symbol_level = 1
enable_nacl = false