Skip to content

Commit e0209f9

Browse files
committed
doc: improve GN build documentation a bit
1 parent 1d01ad6 commit e0209f9

File tree

1 file changed

+30
-19
lines changed

1 file changed

+30
-19
lines changed

doc/contributing/gn-build.md

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,37 @@ Node.js contains following GN build files:
2828

2929
Unlike GYP, the GN tool does not include any built-in rules for compiling a
3030
project, which means projects building with GN must provide their own build
31-
configurations for things like how to invoke a C++ compiler. Chromium related
32-
projects like V8 and skia choose to reuse Chromium's build configurations, and
33-
V8's Node.js integration testing repository
34-
([node-ci](https://chromium.googlesource.com/v8/node-ci/)) can be reused for
35-
building Node.js.
31+
configurations for things like how to invoke a C++ compiler.
32+
33+
Chromium related projects like V8 and skia choose to reuse Chromium's build
34+
configurations, and V8's Node.js integration testing repository
35+
[`node-ci`][node-ci] can be reused for building Node.js.
36+
37+
[node-ci]: https://chromium.googlesource.com/v8/node-ci
3638

3739
### 1. Install `depot_tools`
3840

39-
The `depot_tools` is a set of tools used by Chromium related projects for
40-
checking out code and managing dependencies, and since this guide is reusing the
41-
infra of V8, it needs to be installed and added to `PATH`:
41+
You'll need to install [`depot_tools`][depot-tools] the toolset
42+
used for fetching Chromium and its dependencies.
4243

4344
```bash
4445
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
4546
export PATH=/path/to/depot_tools:$PATH
4647
```
4748

48-
You can also follow the [official tutorial of
49-
`depot_tools`](https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html).
49+
You can ensure `depot_tools` is correctly added to your PATH by running
50+
`which gn` and confirming that it returns `/path/to/depot_tools/gn`.
51+
52+
**NOTE:** On Windows you'll also need to set the environment variable
53+
`DEPOT_TOOLS_WIN_TOOLCHAIN=0`. To do so, open `Control Panel` → `System and
54+
Security``System``Advanced system settings` and add a system variable
55+
`DEPOT_TOOLS_WIN_TOOLCHAIN` with value `0`. This tells `depot_tools` to use
56+
your locally installed version of Visual Studio (by default, `depot_tools` will
57+
try to download a Google-internal version that only Googlers have access to).
58+
59+
[depot-tools]: https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up
5060

51-
### 2. Check out code of Node.js
61+
### 2. Checkout Node.js Source Code
5262

5363
To check out the latest main branch of Node.js for building, use the `fetch`
5464
tool from `depot_tools`:
@@ -91,9 +101,9 @@ out at `node_gn/node/node`.
91101

92102
### 3. Build
93103

94-
GN only supports [`ninja`](https://ninja-build.org) for building, so to build
95-
Node.js with GN, `ninja` build files should be generated first, and then
96-
`ninja` can be invoked to do the building.
104+
GN only supports [`ninja`](https://ninja-build.org) for building. To build
105+
Node.js with GN you'll first need to generate `ninja` build files and then invoke
106+
`ninja` to perform the build.
97107

98108
The `node-ci` repository provides a script for calling GN:
99109

@@ -103,9 +113,10 @@ cd node # Enter `node_gn/node` which contains a node-ci checkout
103113
```
104114

105115
which writes `ninja` build files into the `out/Release` directory under
106-
`node_gn/node`.
116+
`node_gn/node`. To see all possible configurable options, run
117+
`tools/gn-gen.py --help`.
107118

108-
And then you can execute `ninja`:
119+
When `gn-gen.py` has executed successfully, you can then execute `ninja`:
109120

110121
```bash
111122
ninja -C out/Release node
@@ -116,9 +127,9 @@ After the build is completed, the compiled Node.js executable can be found in
116127

117128
## Status of the GN build
118129

119-
Currently the GN build of Node.js is not fully functioning. It builds for macOS
120-
and Linux, while the Windows build is still a work in progress. And some tests
121-
are still failing with the GN build.
130+
Currently the GN build of Node.js is not fully functioning. Some tests
131+
are still failing with the GN build, and there may be other small pitfall
132+
for certain configuration options.
122133

123134
There are also efforts on making GN build work without using `depot_tools`,
124135
which is tracked in the issue

0 commit comments

Comments
 (0)