More efficient Value implementation. Using a union to store all possible inner data-types means less work whenever creating / copying / moving / destroying values, and small size for each instance. This results in a slightly faster "gn gen" operation, using slightly less memory, i.e. when used with a Chromium checkout: $ /usr/bin/time -f "%M %U" /tmp/aa/gn-origin gen out/Release Done. Made 21651 targets from 1614 files in 6339ms 764468 25.30 $ /usr/bin/time -f "%M %U" /tmp/aa/gn-better-value gen out/Release Done. Made 21651 targets from 1614 files in 6014ms 738132 23.27 R=brettw@chromium.org,dpranke@chromium.org BUG=NONE Change-Id: I6804857b1e69653713f038903f9abbbcae6ec62c Reviewed-on: https://gn-review.googlesource.com/c/3662 Reviewed-by: Brett Wilson <brettw@chromium.org> Commit-Queue: Brett Wilson <brettw@chromium.org>
GN is a meta-build system that generates build files for Ninja. There is documentation in docs/ and a presentation on it.
You can download the latest version of GN binary for Linux, macOS and Windows.
Alternatively, you can build GN from source:
git clone https://gn.googlesource.com/gn cd gn python build/gen.py ninja -C out # To run tests: out/gn_unittests
On Windows, it is expected that cl.exe, link.exe, and lib.exe can be found in PATH, so you'll want to run from a Visual Studio command prompt, or similar.
On Linux and Mac, the default compiler is clang++, a recent version is expected to be found in PATH. This can be overridden by setting CC, CXX, and AR.
If you find a bug, you can see if it is known or report it in the bug database.
GN uses Gerrit for code review. The short version of how to patch is:
Register at https://gn-review.googlesource.com. ... edit code ... ninja -C out && out/gn_unittests
Then, to upload a change for review:
git commit git cl upload --gerrit
When revising a change, use:
git commit --amend git cl upload --gerrit
which will add the new changes to the existing code review, rather than creating a new one.
We ask that all contributors sign Google's Contributor License Agreement (either individual or corporate as appropriate, select ‘any other Google project’).
You may ask questions and follow along w/ GN‘s development on Chromium’s gn-dev@ Google Group.