diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 121 |
1 files changed, 61 insertions, 60 deletions
@@ -47,6 +47,7 @@ EXEEXT := $(shell $(PYTHON) -c \ "import sys; print('.exe' if sys.platform == 'win32' else '')") NODE_EXE = node$(EXEEXT) +OUTPUT_DIR ?= out NODE ?= ./$(NODE_EXE) NODE_G_EXE = node_g$(EXEEXT) NPM ?= ./deps/npm/bin/npm-cli.js @@ -74,9 +75,9 @@ available-node = \ .PHONY: all # BUILDTYPE=Debug builds both release and debug builds. If you want to compile -# just the debug build, run `make -C out BUILDTYPE=Debug` instead. +# just the debug build, run `make -C $(OUTPUT_DIR) BUILDTYPE=Debug` instead. ifeq ($(BUILDTYPE),Release) -all: $(NODE_EXE) ## Default target, builds node in out/Release/node. +all: $(NODE_EXE) ## Default target, builds node in $(OUTPUT_DIR)/Release/node. else all: $(NODE_EXE) $(NODE_G_EXE) endif @@ -88,7 +89,7 @@ help: ## Print help for targets with comments. @grep -E '^[a-zA-Z0-9._-]+:.*?## .*$$' Makefile | sort | \ awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}' -# The .PHONY is needed to ensure that we recursively use the out/Makefile +# The .PHONY is needed to ensure that we recursively use the $(OUTPUT_DIR)/Makefile # to check for changes. .PHONY: $(NODE_EXE) $(NODE_G_EXE) @@ -100,10 +101,10 @@ help: ## Print help for targets with comments. ifeq ($(BUILD_WITH), make) $(NODE_EXE): build_type:=Release $(NODE_G_EXE): build_type:=Debug -$(NODE_EXE) $(NODE_G_EXE): config.gypi out/Makefile - $(MAKE) -C out BUILDTYPE=${build_type} V=$(V) $(PARALLEL_ARGS) +$(NODE_EXE) $(NODE_G_EXE): config.gypi $(OUTPUT_DIR)/Makefile + $(MAKE) -C $(OUTPUT_DIR) BUILDTYPE=${build_type} V=$(V) $(PARALLEL_ARGS) if [ ! -r $@ -o ! -L $@ ]; then \ - ln -fs out/${build_type}/$(NODE_EXE) $@; fi + ln -fs $(OUTPUT_DIR)/${build_type}/$(NODE_EXE) $@; fi else ifeq ($(BUILD_WITH), ninja) ifeq ($(V),1) @@ -114,13 +115,13 @@ ifdef 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_EXE): config.gypi $(OUTPUT_DIR)/Release/build.ninja + ninja -C $(OUTPUT_DIR)/Release $(NINJA_ARGS) + if [ ! -r $@ -o ! -L $@ ]; then ln -fs $(OUTPUT_DIR)/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 +$(NODE_G_EXE): config.gypi $(OUTPUT_DIR)/Debug/build.ninja + ninja -C $(OUTPUT_DIR)/Debug $(NINJA_ARGS) + if [ ! -r $@ -o ! -L $@ ]; then ln -fs $(OUTPUT_DIR)/Debug/$(NODE_EXE) $@; fi else $(NODE_EXE) $(NODE_G_EXE): $(warning This Makefile currently only supports building with 'make' or 'ninja') @@ -137,7 +138,7 @@ endif with-code-cache test-code-cache: $(warning '$@' target is a noop) -out/Makefile: config.gypi common.gypi node.gyp \ +$(OUTPUT_DIR)/Makefile: config.gypi common.gypi node.gyp \ deps/uv/uv.gyp deps/llhttp/llhttp.gyp deps/zlib/zlib.gyp \ tools/v8_gypfiles/toolchain.gypi tools/v8_gypfiles/features.gypi \ tools/v8_gypfiles/inspector.gypi tools/v8_gypfiles/v8.gyp @@ -163,9 +164,9 @@ uninstall: ## Uninstalls node from $PREFIX (default=/usr/local). .PHONY: clean clean: ## Remove build artifacts. - $(RM) -r out/Makefile $(NODE_EXE) $(NODE_G_EXE) out/$(BUILDTYPE)/$(NODE_EXE) \ - out/$(BUILDTYPE)/node.exp - @if [ -d out ]; then $(FIND) out/ -name '*.o' -o -name '*.a' -o -name '*.d' | xargs $(RM) -r; fi + $(RM) -r $(OUTPUT_DIR)/Makefile $(NODE_EXE) $(NODE_G_EXE) $(OUTPUT_DIR)/$(BUILDTYPE)/$(NODE_EXE) \ + $(OUTPUT_DIR)/$(BUILDTYPE)/node.exp + @if [ -d $(OUTPUT_DIR) ]; then $(FIND) $(OUTPUT_DIR)/ -name '*.o' -o -name '*.a' -o -name '*.d' | xargs $(RM) -r; fi $(RM) -r node_modules @if [ -d deps/icu ]; then echo deleting deps/icu; $(RM) -r deps/icu; fi $(RM) test.tap @@ -181,7 +182,7 @@ testclean: .PHONY: distclean distclean: - $(RM) -r out + $(RM) -r $(OUTPUT_DIR) $(RM) config.gypi icu_config.gypi config_fips.gypi $(RM) config.mk $(RM) -r $(NODE_EXE) $(NODE_G_EXE) @@ -200,7 +201,7 @@ coverage-clean: $(RM) -r node_modules $(RM) -r gcovr build $(RM) -r coverage/tmp - $(FIND) out/$(BUILDTYPE)/obj.target \( -name "*.gcda" -o -name "*.gcno" \) \ + $(FIND) $(OUTPUT_DIR)/$(BUILDTYPE)/obj.target \( -name "*.gcda" -o -name "*.gcno" \) \ -type f -exec $(RM) {} \; .PHONY: coverage @@ -232,15 +233,15 @@ coverage-build-js: .PHONY: coverage-test coverage-test: coverage-build - $(RM) out/$(BUILDTYPE)/obj.target/node/src/*.gcda - $(RM) out/$(BUILDTYPE)/obj.target/node/src/*/*.gcda - $(RM) out/$(BUILDTYPE)/obj.target/node_lib/src/*.gcda - $(RM) out/$(BUILDTYPE)/obj.target/node_lib/src/*/*.gcda + $(RM) $(OUTPUT_DIR)/$(BUILDTYPE)/obj.target/node/src/*.gcda + $(RM) $(OUTPUT_DIR)/$(BUILDTYPE)/obj.target/node/src/*/*.gcda + $(RM) $(OUTPUT_DIR)/$(BUILDTYPE)/obj.target/node_lib/src/*.gcda + $(RM) $(OUTPUT_DIR)/$(BUILDTYPE)/obj.target/node_lib/src/*/*.gcda -NODE_V8_COVERAGE=coverage/tmp \ TEST_CI_ARGS="$(TEST_CI_ARGS) --type=coverage" $(MAKE) $(COVTESTS) $(MAKE) coverage-report-js - -(cd out && "../gcovr/scripts/gcovr" \ - --gcov-exclude='.*\b(deps|usr|out|cctest|embedding)\b' -v \ + -(cd $(OUTPUT_DIR) && "../gcovr/scripts/gcovr" \ + --gcov-exclude='.*\b(deps|usr|$(OUTPUT_DIR)|cctest|embedding)\b' -v \ -r Release/obj.target --html --html-detail -o ../coverage/cxxcoverage.html \ --gcov-executable="$(GCOV)") @echo -n "Javascript coverage %: " @@ -258,15 +259,15 @@ coverage-report-js: .PHONY: cctest # Runs the C++ tests using the built `cctest` executable. cctest: all - @out/$(BUILDTYPE)/$@ --gtest_filter=$(GTEST_FILTER) - @out/$(BUILDTYPE)/embedtest "require('./test/embedding/test-embedding.js')" + @$(OUTPUT_DIR)/$(BUILDTYPE)/$@ --gtest_filter=$(GTEST_FILTER) + @$(OUTPUT_DIR)/$(BUILDTYPE)/embedtest "require('./test/embedding/test-embedding.js')" .PHONY: list-gtests list-gtests: -ifeq (,$(wildcard out/$(BUILDTYPE)/cctest)) +ifeq (,$(wildcard $(OUTPUT_DIR)/$(BUILDTYPE)/cctest)) $(error Please run 'make cctest' first) endif - @out/$(BUILDTYPE)/cctest --gtest_list_tests + @$(OUTPUT_DIR)/$(BUILDTYPE)/cctest --gtest_list_tests .PHONY: v8 # Related CI job: node-test-commit-v8-linux @@ -334,7 +335,7 @@ test-check-deopts: all DOCBUILDSTAMP_PREREQS = tools/doc/addon-verify.js doc/api/addons.md ifeq ($(OSTYPE),aix) -DOCBUILDSTAMP_PREREQS := $(DOCBUILDSTAMP_PREREQS) out/$(BUILDTYPE)/node.exp +DOCBUILDSTAMP_PREREQS := $(DOCBUILDSTAMP_PREREQS) $(OUTPUT_DIR)/$(BUILDTYPE)/node.exp endif node_use_openssl = $(call available-node,"-p" \ @@ -511,11 +512,11 @@ test-ci-js: | clear-stalled # Related CI jobs: most CI tests, excluding node-test-commit-arm-fanned test-ci: LOGLEVEL := info test-ci: | clear-stalled bench-addons-build build-addons build-js-native-api-tests build-node-api-tests doc-only - out/Release/cctest --gtest_output=xml:out/junit/cctest.xml + $(OUTPUT_DIR)/Release/cctest --gtest_output=xml:$(OUTPUT_DIR)/junit/cctest.xml $(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \ --mode=$(BUILDTYPE_LOWER) --flaky-tests=$(FLAKY_TESTS) \ $(TEST_CI_ARGS) $(CI_JS_SUITES) $(CI_NATIVE_SUITES) $(CI_DOC) - out/Release/embedtest 'require("./test/embedding/test-embedding.js")' + $(OUTPUT_DIR)/Release/embedtest 'require("./test/embedding/test-embedding.js")' $(info Clean up any leftover processes, error if found.) ps awwx | grep Release/node | grep -v grep | cat @PS_OUT=`ps awwx | grep Release/node | grep -v grep | awk '{print $$1}'`; \ @@ -676,12 +677,12 @@ test-v8 test-v8-intl test-v8-benchmarks test-v8-all: $(warning Use the git repo instead: $$ git clone https://github.com/nodejs/node.git) endif -apidoc_dirs = out/doc out/doc/api out/doc/api/assets +apidoc_dirs = $(OUTPUT_DIR)/doc $(OUTPUT_DIR)/doc/api $(OUTPUT_DIR)/doc/api/assets apidoc_sources = $(wildcard doc/api/*.md) -apidocs_html = $(addprefix out/,$(apidoc_sources:.md=.html)) -apidocs_json = $(addprefix out/,$(apidoc_sources:.md=.json)) +apidocs_html = $(addprefix $(OUTPUT_DIR)/,$(apidoc_sources:.md=.html)) +apidocs_json = $(addprefix $(OUTPUT_DIR)/,$(apidoc_sources:.md=.json)) -apiassets = $(subst api_assets,api/assets,$(addprefix out/,$(wildcard doc/api_assets/*))) +apiassets = $(subst api_assets,api/assets,$(addprefix $(OUTPUT_DIR)/,$(wildcard doc/api_assets/*))) tools/doc/node_modules: tools/doc/package.json @if [ "$(shell $(node_use_openssl))" != "true" ]; then \ @@ -696,70 +697,70 @@ doc-only: tools/doc/node_modules \ @if [ "$(shell $(node_use_openssl))" != "true" ]; then \ echo "Skipping doc-only (no crypto)"; \ else \ - $(MAKE) out/doc/api/all.html out/doc/api/all.json; \ + $(MAKE) $(OUTPUT_DIR)/doc/api/all.html $(OUTPUT_DIR)/doc/api/all.json; \ fi .PHONY: doc doc: $(NODE_EXE) doc-only -out/doc: +$(OUTPUT_DIR)/doc: mkdir -p $@ # If it's a source tarball, doc/api already contains the generated docs. # Just copy everything under doc/api over. -out/doc/api: doc/api +$(OUTPUT_DIR)/doc/api: doc/api mkdir -p $@ - cp -r doc/api out/doc + cp -r doc/api $(OUTPUT_DIR)/doc # If it's a source tarball, assets are already in doc/api/assets -out/doc/api/assets: +$(OUTPUT_DIR)/doc/api/assets: mkdir -p $@ - if [ -d doc/api/assets ]; then cp -r doc/api/assets out/doc/api; fi; + if [ -d doc/api/assets ]; then cp -r doc/api/assets $(OUTPUT_DIR)/doc/api; fi; # If it's not a source tarball, we need to copy assets from doc/api_assets -out/doc/api/assets/%: doc/api_assets/% | out/doc/api/assets - @cp $< $@ ; $(RM) out/doc/api/assets/README.md +$(OUTPUT_DIR)/doc/api/assets/%: doc/api_assets/% | $(OUTPUT_DIR)/doc/api/assets + @cp $< $@ ; $(RM) $(OUTPUT_DIR)/doc/api/assets/README.md run-npm-ci = $(PWD)/$(NPM) ci -LINK_DATA = out/doc/apilinks.json -VERSIONS_DATA = out/previous-doc-versions.json +LINK_DATA = $(OUTPUT_DIR)/doc/apilinks.json +VERSIONS_DATA = $(OUTPUT_DIR)/previous-doc-versions.json gen-api = tools/doc/generate.js --node-version=$(FULLVERSION) \ - --apilinks=$(LINK_DATA) $< --output-directory=out/doc/api \ + --apilinks=$(LINK_DATA) $< --output-directory=$(OUTPUT_DIR)/doc/api \ --versions-file=$(VERSIONS_DATA) gen-apilink = tools/doc/apilinks.js $(LINK_DATA) $(wildcard lib/*.js) -$(LINK_DATA): $(wildcard lib/*.js) tools/doc/apilinks.js | out/doc +$(LINK_DATA): $(wildcard lib/*.js) tools/doc/apilinks.js | $(OUTPUT_DIR)/doc $(call available-node, $(gen-apilink)) # Regenerate previous versions data if the current version changes $(VERSIONS_DATA): CHANGELOG.md src/node_version.h tools/doc/versions.js $(call available-node, tools/doc/versions.js $@) -out/doc/api/%.json out/doc/api/%.html: doc/api/%.md tools/doc/generate.js \ +$(OUTPUT_DIR)/doc/api/%.json o$(OUTPUT_DIR)ut/doc/api/%.html: doc/api/%.md tools/doc/generate.js \ tools/doc/markdown.js tools/doc/html.js tools/doc/json.js \ - tools/doc/apilinks.js $(VERSIONS_DATA) | $(LINK_DATA) out/doc/api + tools/doc/apilinks.js $(VERSIONS_DATA) | $(LINK_DATA) $(OUTPUT_DIR)/doc/api $(call available-node, $(gen-api)) -out/doc/api/all.html: $(apidocs_html) tools/doc/allhtml.js \ - tools/doc/apilinks.js | out/doc/api +$(OUTPUT_DIR)/doc/api/all.html: $(apidocs_html) tools/doc/allhtml.js \ + tools/doc/apilinks.js | $(OUTPUT_DIR)/doc/api $(call available-node, tools/doc/allhtml.js) -out/doc/api/all.json: $(apidocs_json) tools/doc/alljson.js | out/doc/api +$(OUTPUT_DIR)/doc/api/all.json: $(apidocs_json) tools/doc/alljson.js | $(OUTPUT_DIR)/doc/api $(call available-node, tools/doc/alljson.js) .PHONY: docopen -docopen: out/doc/api/all.html +docopen: $(OUTPUT_DIR)/doc/api/all.html @$(PYTHON) -mwebbrowser file://$(abspath $<) .PHONY: docserve docserve: $(apidocs_html) $(apiassets) - @$(PYTHON) -m http.server 8000 --bind 127.0.0.1 --directory out/doc/api + @$(PYTHON) -m http.server 8000 --bind 127.0.0.1 --directory $(OUTPUT_DIR)/doc/api .PHONY: docclean docclean: - $(RM) -r out/doc + $(RM) -r $(OUTPUT_DIR)/doc $(RM) "$(VERSIONS_DATA)" RAWVER=$(shell $(PYTHON) tools/getnodeversion.py) @@ -904,7 +905,7 @@ SKIP_XZ ?= 0 XZ = $(shell [ $(HAS_XZ) -eq 1 -a $(SKIP_XZ) -eq 0 ] && echo 1 || echo 0) XZ_COMPRESSION ?= 9e PKG=$(TARNAME).pkg -MACOSOUTDIR=out/macos +MACOSOUTDIR=$(OUTPUT_DIR)/macos ifeq ($(SKIP_XZ), 1) check-xz: @@ -1019,7 +1020,7 @@ $(TARBALL): release-only doc-only git checkout-index -a -f --prefix=$(TARNAME)/ mkdir -p $(TARNAME)/doc/api cp doc/node.1 $(TARNAME)/doc/node.1 - cp -r out/doc/api/* $(TARNAME)/doc/api/ + cp -r $(OUTPUT_DIR)/doc/api/* $(TARNAME)/doc/api/ $(RM) -r $(TARNAME)/.editorconfig $(RM) -r $(TARNAME)/.git* $(RM) -r $(TARNAME)/.mailmap @@ -1071,8 +1072,8 @@ endif # Note: this is strictly for release builds on release machines only. doc-upload: doc ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/docs/" - chmod -R ug=rw-x+X,o=r+X out/doc/ - scp -pr out/doc/* $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/docs/ + chmod -R ug=rw-x+X,o=r+X $(OUTPUT_DIR)/doc/ + scp -pr $(OUTPUT_DIR)/doc/* $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/docs/ ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/docs.done" .PHONY: $(TARBALL)-headers @@ -1108,7 +1109,7 @@ endif $(BINARYTAR): release-only $(RM) -r $(BINARYNAME) - $(RM) -r out/deps out/Release + $(RM) -r $(OUTPUT_DIR)/deps $(OUTPUT_DIR)/Release $(PYTHON) ./configure \ --prefix=/ \ --dest-cpu=$(DESTCPU) \ |