From 22a5a0578534ab7b3b3c9207b1eaebb10512f226 Mon Sep 17 00:00:00 2001 From: Refael Ackermann Date: Tue, 30 Apr 2019 17:59:00 -0400 Subject: [PATCH] build: delegate building from Makefile to ninja PR-URL: https://github.com/nodejs/node/pull/27504 Refs: https://mobile.twitter.com/refack/status/1118484079077482498 Reviewed-By: Sam Roberts Reviewed-By: Ujjwal Sharma --- Makefile | 25 +++++++++++++++++++++++++ configure.py | 20 ++++++++++++++++---- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index d41bf1601fb599..5834df883b0c23 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,7 @@ GTEST_FILTER ?= "*" GNUMAKEFLAGS += --no-print-directory GCOV ?= gcov PWD = $(CURDIR) +BUILD_WITH ?= make ifdef JOBS PARALLEL_ARGS = -j $(JOBS) @@ -95,6 +96,7 @@ help: ## Print help for targets with comments. # Without the check there is a race condition between the link being deleted # and recreated which can break the addons build when running test-ci # See comments on the build-addons target for some more info +ifeq ($(BUILD_WITH), make) $(NODE_EXE): config.gypi out/Makefile $(MAKE) -C out BUILDTYPE=Release V=$(V) if [ ! -r $@ -o ! -L $@ ]; then ln -fs out/Release/$(NODE_EXE) $@; fi @@ -102,6 +104,29 @@ $(NODE_EXE): config.gypi out/Makefile $(NODE_G_EXE): config.gypi out/Makefile $(MAKE) -C out BUILDTYPE=Debug V=$(V) if [ ! -r $@ -o ! -L $@ ]; then ln -fs out/Debug/$(NODE_EXE) $@; fi +else +ifeq ($(BUILD_WITH), ninja) +ifeq ($(V),1) + NINJA_ARGS := $(NINJA_ARGS) -v +endif +ifdef JOBS + NINJA_ARGS := $(NINJA_ARGS) -j$(JOBS) +else + NINJA_ARGS := $(NINJA_ARGS) $(filter -j%,$(MAKEFLAGS)) +endif +$(NODE_EXE): config.gypi out/Release/build.ninja + ninja -C out/Release $(NINJA_ARGS) + if [ ! -r $@ -o ! -L $@ ]; then ln -fs out/Release/$(NODE_EXE) $@; fi + +$(NODE_G_EXE): config.gypi out/Debug/build.ninja + ninja -C out/Debug $(NINJA_ARGS) + if [ ! -r $@ -o ! -L $@ ]; then ln -fs out/Debug/$(NODE_EXE) $@; fi +else +$(NODE_EXE) $(NODE_G_EXE): + echo This Makefile currently only supports building with 'make' or 'ninja' +endif +endif + ifeq ($(BUILDTYPE),Debug) CONFIG_FLAGS += --debug diff --git a/configure.py b/configure.py index 1dd6da6d2b997a..15ea5687cf1cd8 100755 --- a/configure.py +++ b/configure.py @@ -1627,23 +1627,35 @@ def make_bin_override(): ' '.join([pipes.quote(arg) for arg in original_argv]) + '\n') os.chmod('config.status', 0o775) + config = { 'BUILDTYPE': 'Debug' if options.debug else 'Release', - 'PYTHON': sys.executable, 'NODE_TARGET_TYPE': variables['node_target_type'], } +# Not needed for trivial case. Useless when it's a win32 path. +if sys.executable != 'python' and ':\\' not in sys.executable: + config['PYTHON'] = sys.executable + if options.prefix: config['PREFIX'] = options.prefix -config = '\n'.join(['='.join(item) for item in config.items()]) + '\n' +if options.use_ninja: + config['BUILD_WITH'] = 'ninja' + +config_lines = ['='.join((k,v)) for k,v in config.items()] +# Add a blank string to get a blank line at the end. +config_lines += [''] +config_str = '\n'.join(config_lines) # On Windows there's no reason to search for a different python binary. bin_override = None if sys.platform == 'win32' else make_bin_override() if bin_override: - config = 'export PATH:=' + bin_override + ':$(PATH)\n' + config + config_str = 'export PATH:=' + bin_override + ':$(PATH)\n' + config_str + +write('config.mk', do_not_edit + config_str) + -write('config.mk', do_not_edit + config) gyp_args = ['--no-parallel', '-Dconfiguring_node=1']