doc: improve GN build documentation a bit

PR-URL: https://github.com/nodejs/node/pull/55968
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Stefan Stojanovic <stefan.stojanovic@janeasystems.com>
Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
This commit is contained in:
Shelley Vohr 2024-11-27 15:11:35 +01:00 committed by GitHub
parent 5bdf1c4ee8
commit c6d3fddbb3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -28,27 +28,33 @@ Node.js contains following GN build files:
Unlike GYP, the GN tool does not include any built-in rules for compiling a Unlike GYP, the GN tool does not include any built-in rules for compiling a
project, which means projects building with GN must provide their own build project, which means projects building with GN must provide their own build
configurations for things like how to invoke a C++ compiler. Chromium related configurations for things like how to invoke a C++ compiler.
projects like V8 and skia choose to reuse Chromium's build configurations, and
V8's Node.js integration testing repository Chromium related projects like V8 and skia choose to reuse Chromium's build
([node-ci](https://chromium.googlesource.com/v8/node-ci/)) can be reused for configurations, and V8's Node.js integration testing repository
building Node.js. [`node-ci`][node-ci] can be reused for building Node.js.
### 1. Install `depot_tools` ### 1. Install `depot_tools`
The `depot_tools` is a set of tools used by Chromium related projects for You'll need to install [`depot_tools`][depot-tools] the toolset
checking out code and managing dependencies, and since this guide is reusing the used for fetching Chromium and its dependencies.
infra of V8, it needs to be installed and added to `PATH`:
```bash ```bash
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=/path/to/depot_tools:$PATH export PATH=/path/to/depot_tools:$PATH
``` ```
You can also follow the [official tutorial of You can ensure `depot_tools` is correctly added to your PATH by running
`depot_tools`](https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html). `which gn` and confirming that it returns `/path/to/depot_tools/gn`.
### 2. Check out code of Node.js **NOTE:** On Windows you'll also need to set the environment variable
`DEPOT_TOOLS_WIN_TOOLCHAIN=0`. To do so, open `Control Panel` → `System and
Security` → `System``Advanced system settings` and add a system variable
`DEPOT_TOOLS_WIN_TOOLCHAIN` with value `0`. This tells `depot_tools` to use
your locally installed version of Visual Studio (by default, `depot_tools` will
try to download a Google-internal version that only Googlers have access to).
### 2. Checkout Node.js Source Code
To check out the latest main branch of Node.js for building, use the `fetch` To check out the latest main branch of Node.js for building, use the `fetch`
tool from `depot_tools`: tool from `depot_tools`:
@ -91,9 +97,9 @@ out at `node_gn/node/node`.
### 3. Build ### 3. Build
GN only supports [`ninja`](https://ninja-build.org) for building, so to build GN only supports [`ninja`](https://ninja-build.org) for building. To build
Node.js with GN, `ninja` build files should be generated first, and then Node.js with GN you'll first need to generate `ninja` build files and then invoke
`ninja` can be invoked to do the building. `ninja` to perform the build.
The `node-ci` repository provides a script for calling GN: The `node-ci` repository provides a script for calling GN:
@ -103,9 +109,10 @@ cd node # Enter `node_gn/node` which contains a node-ci checkout
``` ```
which writes `ninja` build files into the `out/Release` directory under which writes `ninja` build files into the `out/Release` directory under
`node_gn/node`. `node_gn/node`. To see all possible configurable options, run
`tools/gn-gen.py --help`.
And then you can execute `ninja`: When `gn-gen.py` has executed successfully, you can then execute `ninja`:
```bash ```bash
ninja -C out/Release node ninja -C out/Release node
@ -116,10 +123,12 @@ After the build is completed, the compiled Node.js executable can be found in
## Status of the GN build ## Status of the GN build
Currently the GN build of Node.js is not fully functioning. It builds for macOS Currently the GN build of Node.js is not fully functioning. Some tests
and Linux, while the Windows build is still a work in progress. And some tests are still failing with the GN build, and there may be other small pitfall
are still failing with the GN build. for certain configuration options.
There are also efforts on making GN build work without using `depot_tools`, An effort is currently underway to make GN build work without using `depot_tools`,
which is tracked in the issue which is tracked in [#51689](https://github.com/nodejs/node/issues/51689).
[#51689](https://github.com/nodejs/node/issues/51689).
[depot-tools]: https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up
[node-ci]: https://chromium.googlesource.com/v8/node-ci