@@ -28,27 +28,33 @@ Node.js contains following GN build files:
2828
2929Unlike GYP, the GN tool does not include any built-in rules for compiling a
3030project, 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.
3636
3737### 1. Install `depot_tools`
3838
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`:
39+ You'll need to install [`depot_tools`][depot-tools] the toolset
40+ used for fetching Chromium and its dependencies.
4241
4342```bash
4443git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
4544export PATH=/path/to/depot_tools:$PATH
4645```
4746
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).
47+ You can ensure `depot_tools` is correctly added to your PATH by running
48+ `which gn` and confirming that it returns `/path/to/depot_tools/gn`.
49+
50+ **NOTE:** On Windows you'll also need to set the environment variable
51+ `DEPOT_TOOLS_WIN_TOOLCHAIN=0`. To do so, open `Control Panel` → `System and
52+ Security` → `System` → `Advanced system settings` and add a system variable
53+ `DEPOT_TOOLS_WIN_TOOLCHAIN` with value `0`. This tells `depot_tools` to use
54+ your locally installed version of Visual Studio (by default, `depot_tools` will
55+ try to download a Google-internal version that only Googlers have access to).
5056
51- ### 2. Check out code of Node.js
57+ ### 2. Checkout Node.js Source Code
5258
5359To check out the latest main branch of Node.js for building, use the `fetch`
5460tool from `depot_tools`:
@@ -91,9 +97,9 @@ out at `node_gn/node/node`.
9197
9298### 3. Build
9399
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 .
100+ GN only supports [`ninja`](https://ninja-build.org) for building. To build
101+ Node.js with GN you'll first need to generate `ninja` build files and then invoke
102+ `ninja` to perform the build .
97103
98104The `node-ci` repository provides a script for calling GN:
99105
@@ -103,9 +109,10 @@ cd node # Enter `node_gn/node` which contains a node-ci checkout
103109```
104110
105111which writes `ninja` build files into the `out/Release` directory under
106- `node_gn/node`.
112+ `node_gn/node`. To see all possible configurable options, run
113+ `tools/gn-gen.py --help`.
107114
108- And then you can execute `ninja`:
115+ When `gn-gen.py` has executed successfully, you can then execute `ninja`:
109116
110117```bash
111118ninja -C out/Release node
@@ -116,10 +123,12 @@ After the build is completed, the compiled Node.js executable can be found in
116123
117124## Status of the GN build
118125
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.
126+ Currently the GN build of Node.js is not fully functioning. Some tests
127+ are still failing with the GN build, and there may be other small pitfall
128+ for certain configuration options.
129+
130+ An effort is currently underway to make GN build work without using `depot_tools`,
131+ which is tracked in [#51689](https://github.com/nodejs/node/issues/51689).
122132
123- There are also efforts on making GN build work without using `depot_tools`,
124- which is tracked in the issue
125- [#51689](https://github.com/nodejs/node/issues/51689).
133+ [depot-tools]: https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up
134+ [node-ci]: https://chromium.googlesource.com/v8/node-ci
0 commit comments