From 2a66ddbcbb596bd8de9892019f95175fb760562b Mon Sep 17 00:00:00 2001 From: Ehsan Akhgari Date: Sun, 15 May 2016 21:51:07 -0400 Subject: [PATCH] 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: de224d6e6c9381e71ffee965dbda928802cc438e PR-URL: https://github.com/nodejs/node/pull/6780 Reviewed-By: Jeremiah Senkpiel --- configure | 10 ++++++++++ doc/guides/building-node-with-ninja.md | 13 ++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/configure b/configure index bd06a55b5a..27ab9a54a9 100755 --- a/configure +++ b/configure @@ -370,6 +370,11 @@ parser.add_option('--xcode', dest='use_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', action='store_true', dest='enable_asan', @@ -776,6 +781,9 @@ def configure_node(o): 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): shared_lib = '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: gyp_args += ['-f', 'xcode'] +elif options.use_ninja: + gyp_args += ['-f', 'ninja'] elif flavor == 'win' and sys.platform != 'msys': gyp_args += ['-f', 'msvs', '-G', 'msvs_version=auto'] else: diff --git a/doc/guides/building-node-with-ninja.md b/doc/guides/building-node-with-ninja.md index 550effa976..eb5791af54 100644 --- a/doc/guides/building-node-with-ninja.md +++ b/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). -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. -2. Use `tools/gyp_node.py -f ninja` to produce Ninja-buildable `gyp` output. -3. Run `ninja -C out/Release` to produce a compiled release binary. -4. Lastly, make symlink to `./node` using `ln -fs out/Release/node node`. +1. Configure the project's OS-based build rules via `./configure --ninja`. +2. Run `ninja -C out/Release` to produce a compiled release binary. +3. 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: ``` @@ -28,12 +27,12 @@ As such, if you wish to run the tests, it can be helpful to invoke the test runn ## 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 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/