Browse Source

build: re-add --ninja option to configure

Ninja is a build backend supported by gyp which is much faster than
Make and is able to parallelize builds across all of the available
cores very well. On my machine, this reduces the average build time
from 5:14 minutes to 4:33 minutes.

Refs: https://github.com/nodejs/node/pull/467
Refs: de224d6e6c
PR-URL: https://github.com/nodejs/node/pull/6780
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
v4.x
Ehsan Akhgari 9 years ago
committed by Myles Borins
parent
commit
2a66ddbcbb
  1. 10
      configure
  2. 13
      doc/guides/building-node-with-ninja.md

10
configure

@ -370,6 +370,11 @@ parser.add_option('--xcode',
dest='use_xcode', dest='use_xcode',
help='generate build files for use with xcode') help='generate build files for use with xcode')
parser.add_option('--ninja',
action='store_true',
dest='use_ninja',
help='generate build files for use with Ninja')
parser.add_option('--enable-asan', parser.add_option('--enable-asan',
action='store_true', action='store_true',
dest='enable_asan', dest='enable_asan',
@ -776,6 +781,9 @@ def configure_node(o):
o['variables']['asan'] = int(options.enable_asan or 0) o['variables']['asan'] = int(options.enable_asan or 0)
if options.use_xcode and options.use_ninja:
raise Exception('--xcode and --ninja cannot be used together.')
def configure_library(lib, output): def configure_library(lib, output):
shared_lib = 'shared_' + lib shared_lib = 'shared_' + lib
output['variables']['node_' + shared_lib] = b(getattr(options, shared_lib)) output['variables']['node_' + shared_lib] = b(getattr(options, shared_lib))
@ -1197,6 +1205,8 @@ gyp_args = [sys.executable, 'tools/gyp_node.py', '--no-parallel']
if options.use_xcode: if options.use_xcode:
gyp_args += ['-f', 'xcode'] gyp_args += ['-f', 'xcode']
elif options.use_ninja:
gyp_args += ['-f', 'ninja']
elif flavor == 'win' and sys.platform != 'msys': elif flavor == 'win' and sys.platform != 'msys':
gyp_args += ['-f', 'msvs', '-G', 'msvs_version=auto'] gyp_args += ['-f', 'msvs', '-G', 'msvs_version=auto']
else: else:

13
doc/guides/building-node-with-ninja.md

@ -2,12 +2,11 @@
The purpose of this guide is to show how to build Node.js using [Ninja][], as doing so can be significantly quicker than using `make`. Please see [Ninja's site][Ninja] for installation instructions (unix only). The purpose of this guide is to show how to build Node.js using [Ninja][], as doing so can be significantly quicker than using `make`. Please see [Ninja's site][Ninja] for installation instructions (unix only).
To build Node with ninja, there are 4 steps that must be taken: To build Node with ninja, there are 3 steps that must be taken:
1. Configure the project's OS-based build rules via `./configure` as usual. 1. Configure the project's OS-based build rules via `./configure --ninja`.
2. Use `tools/gyp_node.py -f ninja` to produce Ninja-buildable `gyp` output. 2. Run `ninja -C out/Release` to produce a compiled release binary.
3. Run `ninja -C out/Release` to produce a compiled release binary. 3. Lastly, make symlink to `./node` using `ln -fs out/Release/node node`.
4. Lastly, make symlink to `./node` using `ln -fs out/Release/node node`.
When running `ninja -C out/Release` you will see output similar to the following if the build has succeeded: When running `ninja -C out/Release` you will see output similar to the following if the build has succeeded:
``` ```
@ -28,12 +27,12 @@ As such, if you wish to run the tests, it can be helpful to invoke the test runn
## Alias ## Alias
`alias nnode='./configure && tools/gyp_node.py -f ninja && ninja -C out/Release && ln -fs out/Release/node node'` `alias nnode='./configure --ninja && ninja -C out/Release && ln -fs out/Release/node node'`
## Producing a debug build ## Producing a debug build
The above alias can be modified slightly to produce a debug build, rather than a release build as shown below: The above alias can be modified slightly to produce a debug build, rather than a release build as shown below:
`alias nnodedebug='./configure && tools/gyp_node.py -f ninja && ninja -C out/Debug && ln -fs out/Debug/node node_g'` `alias nnodedebug='./configure --ninja && ninja -C out/Debug && ln -fs out/Debug/node node_g'`
[Ninja]: https://martine.github.io/ninja/ [Ninja]: https://martine.github.io/ninja/

Loading…
Cancel
Save