| OLD | NEW |
| 1 # What is GN? | 1 # What is GN? |
| 2 | 2 |
| 3 GN is a meta-build system that generates | 3 GN is a meta-build system that generates |
| 4 [NinjaBuild](https://chromium.googlesource.com/chromium/src/+/master/docs/ninja_
build.md) | 4 [NinjaBuild](https://chromium.googlesource.com/chromium/src/+/master/docs/ninja_
build.md) |
| 5 files. It's meant to be faster and simpler than GYP. It outputs only Ninja build | 5 files. It's meant to be faster and simpler than GYP. It outputs only Ninja build |
| 6 files. | 6 files. |
| 7 | 7 |
| 8 ## Why bother with GN? | 8 ## Why bother with GN? |
| 9 | 9 |
| 10 1. We believe GN files are more readable and more maintainable | 10 1. We believe GN files are more readable and more maintainable |
| 11 than GYP files. | 11 than GYP files. |
| 12 2. GN is fast: | 12 2. GN is fast: |
| 13 * GN is 20x faster than GYP. | 13 * GN is 20x faster than GYP. |
| 14 * GN supports automatically re-running itself as needed by Ninja | 14 * GN supports automatically re-running itself as needed by Ninja |
| 15 as part of the build. This eliminates the need to remember to | 15 as part of the build. This eliminates the need to remember to |
| 16 re-run GN when you change a build file. | 16 re-run GN when you change a build file. |
| 17 3. GN gives us better tools for enforcing dependencies (see | 17 3. GN gives us better tools for enforcing dependencies (see |
| 18 `gn check` and the `visibility`, `public_deps`, and `data_deps` | 18 `gn check` and the `visibility`, `public_deps`, and `data_deps` |
| 19 options for some examples). | 19 options for some examples). |
| 20 4. GN gives us tools for querying the build graph; you can ask | 20 4. GN gives us tools for querying the build graph; you can ask |
| 21 "what does X depend on" and "who depends on Y", for example. | 21 "what does X depend on" and "who depends on Y", for example. |
| 22 | 22 |
| 23 ## What's the status? | 23 ## What's the status? |
| 24 | 24 |
| 25 _as of 7 Oct 2015:_ | 25 _as of March 2016:_ |
| 26 | 26 |
| 27 GN is now the default system for Linux, though GYP still works. It | 27 * Linux and Android: Complete but not quite all bots have been flipped. |
| 28 is mostly complete on Android, ChromeOS, and Windows (apart from NaCl | 28 Developers should be using GN on these platforms for most work. |
| 29 support on Windows). | 29 * Windows and ChromeOS: Should be usable for almost all development. Some |
| 30 | 30 bots need to be flipped. cros_sdk builds don't work on ChromeOS yet. |
| 31 Mac and iOS are making progress, though we still need better support | 31 * Mac and iOS: Work is in progress, generally not usable for normal |
| 32 for bundles before the major targets like Chrome can link and they get | 32 development. |
| 33 to parity w/ the other platforms. | |
| 34 | 33 |
| 35 ## When are you going to be done? | 34 ## When are you going to be done? |
| 36 | 35 |
| 37 _as of 7 Oct 2015:_ | 36 _as of March 2016:_ |
| 38 | 37 |
| 39 We're currently shooting for having Android, ChromeOS, and Windows | 38 We expect most work to be finishing up between now and the end of Q2. |
| 40 converted over by the end of 2015, with Mac and iOS following in Q1 | |
| 41 of 2016. | |
| 42 | 39 |
| 43 ## What does "done" mean? | 40 ## What does "done" mean? |
| 44 | 41 |
| 45 Ideally we're done when all of the GYP files have been deleted from | 42 Ideally we're done when all of the GYP files have been deleted from |
| 46 Chromium and no one misses them. | 43 Chromium and no one misses them. |
| 47 | 44 |
| 48 We will be "mostly" done when the following are true: | 45 We will be "mostly" done when the following are true: |
| 49 | 46 |
| 50 * All of the bots maintained by the Chrome infra team for Chromium and | 47 * All of the bots maintained by the Chrome infra team for Chromium and |
| 51 downstream of Chromium have been switched to GN. (Upstream projects | 48 downstream of Chromium have been switched to GN. (Upstream projects |
| 52 like Skia and V8 can choose to stay on GYP if they like). | 49 like Skia and V8 can choose to stay on GYP if they like). |
| 53 * Any developer configurations we care about that don't have bots also | 50 * Any developer configurations we care about that don't have bots also |
| 54 work (Generally speaking, we're aiming to not have any of these. | 51 work (Generally speaking, we're aiming to not have any of these. |
| 55 * Configurations we care about should have bots to ensure they don't | 52 * Configurations we care about should have bots to ensure they don't |
| 56 break). We have verified that all of the tests pass. We have | 53 break). We have verified that all of the tests pass. We have |
| 57 verified that the command lines match in the above configurations as | 54 verified that the command lines match in the above configurations as |
| 58 much as possible, and we accept any differences. We have reviewed | 55 much as possible, and we accept any differences. We have reviewed |
| 59 any binary differences that result in the official builds and | 56 any binary differences that result in the official builds and |
| 60 accepted them. The GN files are the "source of truth" for the | 57 accepted them. The GN files are the "source of truth" for the |
| 61 build, and normal chromium developers normally do not need to touch | 58 build, and normal chromium developers normally do not need to touch |
| 62 GYP files to keep things working. We have replacements for the | 59 GYP files to keep things working. We have replacements for the |
| 63 hybrid "msvs-ninja" and "xcode-ninja" configurations that GYP can | 60 hybrid "msvs-ninja" and "xcode-ninja" configurations that GYP can |
| 64 currently build. | 61 currently build. |
| 65 | 62 |
| 66 The difference between "mostly done" and "done" exists to cover any | 63 The difference between "mostly done" and "done" exists to cover any |
| 67 issues we haven't yet identified :) | 64 issues we haven't yet identified :) |
| 68 | 65 |
| 69 We do not currently plan to support full native XCode or Visual Studio | |
| 70 generation from GN. It is theoretically possible to support such things, | |
| 71 so we would at least look at patches adding the functionality. | |
| 72 | |
| 73 ## How can I help? | 66 ## How can I help? |
| 74 | 67 |
| 75 Check to see if your targets build under GN yet. If they don't, | 68 We could espeially use infrastructure/bot, Mac, and iOS help. |
| 76 volunteer to help convert them! | |
| 77 | 69 |
| 78 Or, look at [the list of open bugs](https://code.google.com/p/chromium/issues/li
st?can=2&q=label:Proj-GN-Migration%20-type:Project&sort=pri&colspec=ID%20Pri%20S
ummary%20Type%20OS%20Owner%20Status%20Modified%20Blocking) related to the migrat
ion and see if there's anything that catches your fancy. | 70 Or, look at [the list of open bugs](https://code.google.com/p/chromium/issues/li
st?can=2&q=label:Proj-GN-Migration%20-type:Project&sort=pri&colspec=ID%20Pri%20S
ummary%20Type%20OS%20Owner%20Status%20Modified%20Blocking) related to the migrat
ion and see if there's anything that catches your fancy. |
| 79 | 71 |
| 80 ## I want more info on GN! | 72 ## I want more info on GN! |
| 81 | 73 |
| 82 Read these links: | 74 Read these links: |
| 83 | 75 |
| 84 * [Quick start](https://chromium.googlesource.com/chromium/src/+/master/tools/
gn/docs/quick_start.md) | 76 * [Quick start](https://chromium.googlesource.com/chromium/src/+/master/tools/
gn/docs/quick_start.md) |
| 85 * [FAQ](https://chromium.googlesource.com/chromium/src/+/master/tools/gn/docs/
faq.md) | 77 * [FAQ](https://chromium.googlesource.com/chromium/src/+/master/tools/gn/docs/
faq.md) |
| 86 * [GYP conversion cookbook](https://chromium.googlesource.com/chromium/src/+/m
aster/tools/gn/docs/cookbook.md) | 78 * [GYP conversion cookbook](https://chromium.googlesource.com/chromium/src/+/m
aster/tools/gn/docs/cookbook.md) |
| 87 * [Language and operation details](https://chromium.googlesource.com/chromium/
src/+/master/tools/gn/docs/language.md) | 79 * [Language and operation details](https://chromium.googlesource.com/chromium/
src/+/master/tools/gn/docs/language.md) |
| 88 * [Reference](https://chromium.googlesource.com/chromium/src/+/master/tools/gn
/docs/reference.md) The built-in `gn help` documentation. | 80 * [Reference](https://chromium.googlesource.com/chromium/src/+/master/tools/gn
/docs/reference.md) The built-in `gn help` documentation. |
| 89 * [Style guide](https://chromium.googlesource.com/chromium/src/+/master/tools/
gn/docs/style_guide.md) | 81 * [Style guide](https://chromium.googlesource.com/chromium/src/+/master/tools/
gn/docs/style_guide.md) |
| 90 * [Cross compiling and toolchains](https://chromium.googlesource.com/chromium/
src/+/master/tools/gn/docs/cross_compiles.md) | 82 * [Cross compiling and toolchains](https://chromium.googlesource.com/chromium/
src/+/master/tools/gn/docs/cross_compiles.md) |
| 91 * [Hacking on GN itself](https://chromium.googlesource.com/chromium/src/+/mast
er/tools/gn/docs/hacking.md) | 83 * [Hacking on GN itself](https://chromium.googlesource.com/chromium/src/+/mast
er/tools/gn/docs/hacking.md) |
| 92 * [GNStandalone](https://chromium.googlesource.com/chromium/src/+/master/tools
/gn/docs/standalone.md) Standalone GN projects | 84 * [GNStandalone](https://chromium.googlesource.com/chromium/src/+/master/tools
/gn/docs/standalone.md) Standalone GN projects |
| 93 * [UpdateGNBinaries](https://chromium.googlesource.com/chromium/src/+/master/t
ools/gn/docs/update_binaries.md) Pushing new binaries | 85 * [UpdateGNBinaries](https://chromium.googlesource.com/chromium/src/+/master/t
ools/gn/docs/update_binaries.md) Pushing new binaries |
| 94 * [Check](https://chromium.googlesource.com/chromium/src/+/master/tools/gn/doc
s/check.md) `gn check` command reference | 86 * [Check](https://chromium.googlesource.com/chromium/src/+/master/tools/gn/doc
s/check.md) `gn check` command reference |
| OLD | NEW |