• Home
  • Raw
  • Download

Lines Matching +full:s390x +full:- +full:rules

1 -include config.mk
10 STAGINGSERVER ?= node-www
12 OSTYPE := $(shell uname -s | tr '[:upper:]' '[:lower:]')
16 ARCHTYPE := $(shell uname -m | tr '[:upper:]' '[:lower:]')
17 COVTESTS ?= test-cov
20 GNUMAKEFLAGS += --no-print-directory
27 PARALLEL_ARGS = -j $(JOBS)
33 TAP_V8 := --junitout $(PWD)/v8-tap.xml
34 TAP_V8_INTL := --junitout $(PWD)/v8-intl-tap.xml
35 TAP_V8_BENCHMARKS := --junitout $(PWD)/v8-benchmarks-tap.xml
42 TAP_V8_JSON := $(PWD)/v8-tap.json
43 TAP_V8_INTL_JSON := $(PWD)/v8-intl-tap.json
44 TAP_V8_BENCHMARKS_JSON := $(PWD)/v8-benchmarks-tap.json
47 # failed. We use --slow-tests-cutoff to ensure that all tests are present
49 TAP_V8 := --json-test-results $(TAP_V8_JSON) --slow-tests-cutoff 1000000
50 TAP_V8_INTL := --json-test-results $(TAP_V8_INTL_JSON) --slow-tests-cutoff 1000000
51 TAP_V8_BENCHMARKS := --json-test-results $(TAP_V8_BENCHMARKS_JSON) --slow-tests-cutoff 1000000
55 $(PYTHON) tools/v8-json-to-junit.py < $(1) > $(1:.json=.xml)
67 NO_BIN_OVERRIDE_PATH=$(subst $() $(),:,$(filter-out $(OVERRIDE_BIN_DIR),$(subst :, ,$(PATH))))
70 GCOV = xcrun llvm-cov gcov
76 EXEEXT := $(shell $(PYTHON) -c \
82 NPM ?= ./deps/npm/bin/npm-cli.js
85 BUILD_DOWNLOAD_FLAGS ?= --download=all
86 BUILD_INTL_FLAGS ?= --with-intl=full-icu
93 # Use -e to double check in case it's a broken link
95 available-node = \
96 if [ -x $(PWD)/$(NODE) ] && [ -e $(PWD)/$(NODE) ]; then \
98 elif [ -x `command -v node` ] && [ -e `command -v node` ] && [ `command -v node` ]; then \
99 `command -v node` $(1); \
107 # just the debug build, run `make -C out BUILDTYPE=Debug` instead.
118 @grep -E '^[[:alnum:]._-]+:.*?## .*$$' Makefile | sort | \
119 awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'
125 # The -r/-L check stops it recreating the link if it is already in place,
126 # otherwise $(NODE_EXE) being a .PHONY target means it is always re-run.
128 # and recreated which can break the addons build when running test-ci
129 # See comments on the build-addons target for some more info
134 $(MAKE) -C out BUILDTYPE=${build_type} V=$(V)
135 if [ ! -r $@ ] || [ ! -L $@ ]; then \
136 ln -fs out/${build_type}/$(NODE_EXE) $@; fi
141 NINJA_ARGS := $(NINJA_ARGS) -v
144 NINJA_ARGS := $(NINJA_ARGS) -j$(JOBS)
146 NINJA_ARGS := $(NINJA_ARGS) $(filter -j%,$(MAKEFLAGS))
149 $(NINJA) -C out/Release $(NINJA_ARGS)
150 if [ ! -r $@ ] || [ ! -L $@ ]; then ln -fs out/Release/$(NODE_EXE) $@; fi
153 $(NINJA) -C out/Debug $(NINJA_ARGS)
154 if [ ! -r $@ ] || [ ! -L $@ ]; then ln -fs out/Debug/$(NODE_EXE) $@; fi
163 CONFIG_FLAGS += --debug
166 .PHONY: with-code-cache
167 .PHONY: test-code-cache
168 with-code-cache test-code-cache:
176 $(PYTHON) tools/gyp_node.py -f make
178 # node_version.h is listed because the N-API version is taken from there
181 @if [ -x config.status ]; then \
199 $(RM) -r out/Makefile $(NODE_EXE) $(NODE_G_EXE) out/$(BUILDTYPE)/$(NODE_EXE) \
201 @if [ -d out ]; then $(FIND) out/ -name '*.o' -o -name '*.a' -o -name '*.d' | xargs $(RM) -r; fi
202 $(RM) -r node_modules
203 @if [ -d deps/icu ]; then echo deleting deps/icu; $(RM) -r deps/icu; fi
206 $(MAKE) test-addons-clean
207 $(MAKE) bench-addons-clean
213 $(RM) -r test/tmp*
214 $(RM) -r test/.tmp*
219 $(RM) -r out
222 $(RM) -r $(NODE_EXE) $(NODE_G_EXE)
223 $(RM) -r node_modules
224 $(RM) -r deps/icu
225 $(RM) -r deps/icu4c*.tgz deps/icu4c*.zip deps/icu-tmp
231 .PHONY: coverage-clean
232 .NOTPARALLEL: coverage-clean
233 # Remove files generated by running coverage, put the non-instrumented lib back
235 coverage-clean:
236 $(RM) -r node_modules
237 $(RM) -r gcovr
238 $(RM) -r coverage/tmp
239 $(FIND) out/$(BUILDTYPE)/obj.target \( -name "*.gcda" -o -name "*.gcno" \) \
240 -type f -exec $(RM) {} \;
245 # in conjunction with configure --coverage.
246 # Related CI job: node-test-commit-linux-coverage-daily
247 coverage: coverage-test ## Run the tests and generate a coverage report.
249 .PHONY: coverage-build
250 coverage-build: all
251 -$(MAKE) coverage-build-js
252 if [ ! -d gcovr ]; then $(PYTHON) -m pip install -t gcovr gcovr==4.2; fi
255 .PHONY: coverage-build-js
256 coverage-build-js:
257 mkdir -p node_modules
258 if [ ! -d node_modules/c8 ]; then \
259 $(NODE) ./deps/npm install c8 --no-save --no-package-lock;\
262 .PHONY: coverage-test
263 coverage-test: coverage-build
264 $(FIND) out/$(BUILDTYPE)/obj.target -name "*.gcda" -type f -exec $(RM) {} \;
265 -NODE_V8_COVERAGE=coverage/tmp \
266 TEST_CI_ARGS="$(TEST_CI_ARGS) --type=coverage" $(MAKE) $(COVTESTS)
267 $(MAKE) coverage-report-js
268 -(cd out && PYTHONPATH=../gcovr $(PYTHON) -m gcovr \
269 --gcov-exclude='.*\b(deps|usr|out|cctest|embedding)\b' -v \
270 -r ../src/ --object-directory Release/obj.target \
271 --html --html-details -o ../coverage/cxxcoverage.html \
272 --gcov-executable="$(GCOV)")
274 @grep -B1 Lines coverage/index.html | head -n1 \
277 @grep -A3 Lines coverage/cxxcoverage.html | grep style \
280 .PHONY: coverage-report-js
281 coverage-report-js:
282 -$(MAKE) coverage-build-js
288 @out/$(BUILDTYPE)/$@ --gtest_filter=$(GTEST_FILTER)
289 @out/$(BUILDTYPE)/embedtest "require('./test/embedding/test-embedding.js')"
291 .PHONY: list-gtests
292 list-gtests:
296 @out/$(BUILDTYPE)/cctest --gtest_list_tests
299 # Related CI job: node-test-commit-v8-linux
300 # Rebuilds deps/v8 as a git tree, pulls its third-party dependencies, and
304 tools/make-v8.sh $(V8_ARCH).$(BUILDTYPE_LOWER) $(V8_BUILD_OPTIONS)
307 jstest: build-addons build-js-native-api-tests build-node-api-tests ## Runs addon tests and JS tests
308 $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) \
310 --skip-tests=$(CI_SKIP_TESTS) \
316 @$(PYTHON) -m unittest discover -s ./test/tools
318 .PHONY: coverage-run-js
319 coverage-run-js:
320 $(RM) -r coverage/tmp
321 -NODE_V8_COVERAGE=coverage/tmp CI_SKIP_TESTS=$(COV_SKIP_TESTS) \
322 TEST_CI_ARGS="$(TEST_CI_ARGS) --type=coverage" $(MAKE) jstest
323 $(MAKE) coverage-report-js
326 # This does not run tests of third-party libraries inside deps.
328 $(MAKE) -s tooltest
329 $(MAKE) -s test-doc
330 $(MAKE) -s build-addons
331 $(MAKE) -s build-js-native-api-tests
332 $(MAKE) -s build-node-api-tests
333 $(MAKE) -s cctest
334 $(MAKE) -s jstest
336 .PHONY: test-only
337 test-only: all ## For a quick test, does not run linter or build docs.
338 $(MAKE) build-addons
339 $(MAKE) build-js-native-api-tests
340 $(MAKE) build-node-api-tests
345 # Used by `make coverage-test`
346 .PHONY: test-cov
347 test-cov: all
348 $(MAKE) build-addons
349 $(MAKE) build-js-native-api-tests
350 $(MAKE) build-node-api-tests
354 .PHONY: test-parallel
355 test-parallel: all
356 $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) parallel
358 .PHONY: test-valgrind
359 test-valgrind: all
360 …$(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) --valgrind sequential parallel …
362 .PHONY: test-check-deopts
363 test-check-deopts: all
364 …$(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) --check-deopts parallel sequent…
366 DOCBUILDSTAMP_PREREQS = tools/doc/addon-verify.mjs doc/api/addons.md
375 node_use_openssl = $(call available-node,"-p" \
381 $(RM) -r test/addons/??_*/; \
382 [ -x $(NODE) ] && $(NODE) $< || node $< ; \
383 [ $$? -eq 0 ] && touch $@; \
387 $(filter-out test/addons/??_*/binding.gyp, \
391 $(filter-out test/addons/??_*/*.cc, $(wildcard test/addons/*/*.cc)) \
392 $(filter-out test/addons/??_*/*.h, $(wildcard test/addons/*/*.h))
395 deps/npm/node_modules/node-gyp/package.json tools/build-addons.mjs \
401 npm_config_python="$(PYTHON)" $(NODE) "$$PWD/tools/build-addons.mjs" \
402 "$$PWD/deps/npm/node_modules/node-gyp/bin/node-gyp.js" \
407 # Implicitly depends on $(NODE_EXE), see the build-addons rule for rationale.
408 # Depends on node-gyp package.json so that build-addons is (re)executed when
409 # node-gyp is updated as part of an npm update.
415 .PHONY: build-addons
422 build-addons: | $(NODE_EXE) test/addons/.buildstamp
425 $(filter-out test/js-native-api/??_*/binding.gyp, \
426 $(wildcard test/js-native-api/*/binding.gyp))
429 $(filter-out test/js-native-api/??_*/*.c, $(wildcard test/js-native-api/*/*.c)) \
430 $(filter-out test/js-native-api/??_*/*.cc, $(wildcard test/js-native-api/*/*.cc)) \
431 $(filter-out test/js-native-api/??_*/*.h, $(wildcard test/js-native-api/*/*.h))
433 # Implicitly depends on $(NODE_EXE), see the build-js-native-api-tests rule for rationale.
434 test/js-native-api/.buildstamp: $(ADDONS_PREREQS) \
438 @$(call run_build_addons,"$$PWD/test/js-native-api",$@)
440 .PHONY: build-js-native-api-tests
446 # TODO(bnoordhuis) Force rebuild after gyp or node-gyp update.
447 build-js-native-api-tests: | $(NODE_EXE) test/js-native-api/.buildstamp
450 $(filter-out test/node-api/??_*/binding.gyp, \
451 $(wildcard test/node-api/*/binding.gyp))
454 $(filter-out test/node-api/??_*/*.c, $(wildcard test/node-api/*/*.c)) \
455 $(filter-out test/node-api/??_*/*.cc, $(wildcard test/node-api/*/*.cc)) \
456 $(filter-out test/node-api/??_*/*.h, $(wildcard test/node-api/*/*.h))
458 # Implicitly depends on $(NODE_EXE), see the build-node-api-tests rule for rationale.
459 test/node-api/.buildstamp: $(ADDONS_PREREQS) \
463 @$(call run_build_addons,"$$PWD/test/node-api",$@)
465 .PHONY: build-node-api-tests
471 # TODO(bnoordhuis) Force rebuild after gyp or node-gyp update.
472 build-node-api-tests: | $(NODE_EXE) test/node-api/.buildstamp
485 .PHONY: clear-stalled
486 clear-stalled:
488 ps awwx | grep Release/node | grep -v grep | cat
489 @PS_OUT=`ps awwx | grep Release/node | grep -v grep | awk '{print $$1}'`; \
491 echo $${PS_OUT} | xargs kill -9; \
494 .PHONY: test-build
495 test-build: | all build-addons build-js-native-api-tests build-node-api-tests
497 .PHONY: test-build-js-native-api
498 test-build-js-native-api: all build-js-native-api-tests
500 .PHONY: test-build-node-api
501 test-build-node-api: all build-node-api-tests
503 .PHONY: test-all
504 test-all: test-build ## Run default tests with both Debug and Release builds.
505 $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=debug,release
507 .PHONY: test-all-valgrind
508 test-all-valgrind: test-build
509 $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=debug,release --valgrind
511 .PHONY: test-all-suites
512 test-all-suites: | clear-stalled test-build bench-addons-build doc-only ## Run all test suites.
513 $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) test/*
516 NATIVE_SUITES ?= addons js-native-api node-api
526 .PHONY: test-ci-native
528 # Related CI job: node-test-commit-arm-fanned
529 test-ci-native: LOGLEVEL := info
530 test-ci-native: | benchmark/napi/.buildstamp test/addons/.buildstamp test/js-native-api/.buildstamp…
531 $(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \
532 --mode=$(BUILDTYPE_LOWER) --flaky-tests=$(FLAKY_TESTS) \
535 .PHONY: test-ci-js
537 # Related CI job: node-test-commit-arm-fanned
538 test-ci-js: | clear-stalled
539 $(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \
540 --mode=$(BUILDTYPE_LOWER) --flaky-tests=$(FLAKY_TESTS) \
543 ps awwx | grep Release/node | grep -v grep | cat
544 @PS_OUT=`ps awwx | grep Release/node | grep -v grep | awk '{print $$1}'`; \
546 echo $${PS_OUT} | xargs kill -9; exit 1; \
549 .PHONY: test-ci
550 # Related CI jobs: most CI tests, excluding node-test-commit-arm-fanned
551 test-ci: LOGLEVEL := info
552 test-ci: | clear-stalled bench-addons-build build-addons build-js-native-api-tests build-node-api-t…
553 out/Release/cctest --gtest_output=xml:out/junit/cctest.xml
554 $(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \
555 --mode=$(BUILDTYPE_LOWER) --flaky-tests=$(FLAKY_TESTS) \
557 out/Release/embedtest 'require("./test/embedding/test-embedding.js")'
559 ps awwx | grep Release/node | grep -v grep | cat
560 @PS_OUT=`ps awwx | grep Release/node | grep -v grep | awk '{print $$1}'`; \
562 echo $${PS_OUT} | xargs kill -9; exit 1; \
565 .PHONY: build-ci
567 # Related CI jobs: most CI tests, excluding node-test-commit-arm-fanned
568 build-ci:
569 $(PYTHON) ./configure --verbose $(CONFIG_FLAGS)
572 .PHONY: run-ci
574 # - node-test-commit-arm-fanned (Raspberry Pis), where the binaries are
575 # cross-compiled, then transferred elsewhere to run different subsets
576 # of tests. See `test-ci-native` and `test-ci-js`.
577 # - node-test-commit-linux-coverage: where the build and the tests need
580 # Using -j1 as the sub target in `test-ci` already have internal parallelism.
582 run-ci: build-ci
583 $(MAKE) test-ci -j1
585 .PHONY: test-release
586 test-release: test-build
587 $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER)
589 .PHONY: test-debug
590 test-debug: test-build
591 $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=debug
593 .PHONY: test-message
594 test-message: test-build
597 .PHONY: test-wpt
598 test-wpt: all
601 .PHONY: test-wpt-report
602 test-wpt-report:
603 $(RM) -r out/wpt
604 mkdir -p out/wpt
605 WPT_REPORT=1 $(PYTHON) tools/test.py --shell $(NODE) $(PARALLEL_ARGS) wpt
607 .PHONY: test-simple
608 test-simple: | cctest # Depends on 'all'.
611 .PHONY: test-pummel
612 test-pummel: all
615 .PHONY: test-internet
616 test-internet: all
619 .PHONY: test-benchmark
620 test-benchmark: | bench-addons-build
623 .PHONY: test-tick-processor
624 test-tick-processor: all
625 $(PYTHON) tools/test.py $(PARALLEL_ARGS) tick-processor
627 .PHONY: test-hash-seed
629 test-hash-seed: all
630 $(NODE) test/pummel/test-hash-seed.js
632 .PHONY: test-doc
633 test-doc: doc-only lint-md ## Builds, lints, and verifies the docs.
635 echo "Skipping test-doc (no crypto)"; \
640 .PHONY: test-doc-ci
641 test-doc-ci: doc-only
642 $(PYTHON) tools/test.py --shell $(NODE) $(TEST_CI_ARGS) $(PARALLEL_ARGS) doctool
644 .PHONY: test-known-issues
645 test-known-issues: all
648 # Related CI job: node-test-npm
649 .PHONY: test-npm
650 test-npm: $(NODE_EXE) ## Run the npm test suite on deps/npm.
651 $(NODE) tools/test-npm-package --install --logfile=test-npm.tap deps/npm test
653 .PHONY: test-npm-publish
654 test-npm-publish: $(NODE_EXE)
657 .PHONY: test-js-native-api
658 test-js-native-api: test-build-js-native-api
659 $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) js-native-api
661 .PHONY: test-js-native-api-clean
662 .NOTPARALLEL: test-js-native-api-clean
663 test-js-native-api-clean:
664 $(RM) -r test/js-native-api/*/build
665 $(RM) test/js-native-api/.buildstamp
667 .PHONY: test-node-api
668 test-node-api: test-build-node-api
669 $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) node-api
671 .PHONY: test-node-api-clean
672 .NOTPARALLEL: test-node-api-clean
673 test-node-api-clean:
674 $(RM) -r test/node-api/*/build
675 $(RM) test/node-api/.buildstamp
677 .PHONY: test-addons
678 test-addons: test-build test-js-native-api test-node-api
679 $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) addons
681 .PHONY: test-addons-clean
682 .NOTPARALLEL: test-addons-clean
683 test-addons-clean:
684 $(RM) -r test/addons/??_*/
685 $(RM) -r test/addons/*/build
687 $(MAKE) test-js-native-api-clean
688 $(MAKE) test-node-api-clean
690 .PHONY: test-async-hooks
691 test-async-hooks:
692 $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) async-hooks
694 .PHONY: test-with-async-hooks
695 test-with-async-hooks:
696 $(MAKE) build-addons
697 $(MAKE) build-js-native-api-tests
698 $(MAKE) build-node-api-tests
700 NODE_TEST_WITH_ASYNC_HOOKS=1 $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) \
705 .PHONY: test-v8
706 .PHONY: test-v8-all
707 .PHONY: test-v8-benchmarks
708 .PHONY: test-v8-intl
709 .PHONY: test-v8-updates
710 ifneq ("","$(wildcard deps/v8/tools/run-tests.py)")
711 # Related CI job: node-test-commit-v8-linux
712 test-v8: v8 ## Runs the V8 test suite on deps/v8.
714 $(PYTHON) deps/v8/tools/run-tests.py --gn --arch=$(V8_ARCH) $(V8_TEST_OPTIONS) \
719 $(MAKE) test-hash-seed
721 test-v8-intl: v8
723 $(PYTHON) deps/v8/tools/run-tests.py --gn --arch=$(V8_ARCH) \
728 test-v8-benchmarks: v8
730 $(PYTHON) deps/v8/tools/run-tests.py --gn --arch=$(V8_ARCH) \
735 test-v8-updates:
736 $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) v8-updates
738 test-v8-all: test-v8 test-v8-intl test-v8-benchmarks test-v8-updates
741 test-v8 test-v8-intl test-v8-benchmarks test-v8-all:
757 cd tools/doc && $(call available-node,$(run-npm-ci)) \
760 .PHONY: doc-only
761 doc-only: tools/doc/node_modules \
764 echo "Skipping doc-only (no crypto)"; \
770 doc: $(NODE_EXE) doc-only
773 mkdir -p $@
778 mkdir -p $@
779 cp -r doc/api out/doc
783 mkdir -p $@
784 if [ -d doc/api/assets ]; then cp -r doc/api/assets out/doc/api; fi;
791 run-npm-ci = $(PWD)/$(NPM) ci
794 VERSIONS_DATA = out/previous-doc-versions.json
795 gen-api = tools/doc/generate.mjs --node-version=$(FULLVERSION) \
796 --apilinks=$(LINK_DATA) $< --output-directory=out/doc/api \
797 --versions-file=$(VERSIONS_DATA)
798 gen-apilink = tools/doc/apilinks.mjs $(LINK_DATA) $(wildcard lib/*.js)
801 $(call available-node, $(gen-apilink))
805 $(call available-node, tools/doc/versions.mjs $@)
807 node_use_icu = $(call available-node,"-p" "typeof Intl === 'object'")
815 $(call available-node, $(gen-api)) \
821 echo "Skipping HTML single-page doc generation (no ICU)"; \
823 $(call available-node, tools/doc/allhtml.mjs) \
828 echo "Skipping JSON single-file generation (no ICU)"; \
830 $(call available-node, tools/doc/alljson.mjs) \
838 $(call available-node, tools/doc/stability.mjs) \
843 @$(PYTHON) -mwebbrowser file://$(abspath $<)
847 @$(PYTHON) -m http.server 8000 --bind 127.0.0.1 --directory out/doc/api
852 $(RM) -r out/doc
859 # For nightly builds, you must set DISTTYPE to "nightly", "next-nightly" or
860 # "custom". For the nightly and next-nightly case, you need to set DATESTRING
883 ifneq ($(DISTTYPE),next-nightly)
884 $(error DISTTYPE is not release, custom, nightly or next-nightly)
885 endif # ifneq ($(DISTTYPE),next-nightly)
889 FULLVERSION=$(VERSION)-$(TAG)
893 RELEASE=$(shell sed -ne 's/\#define NODE_VERSION_IS_RELEASE \([01]\)/\1/p' src/node_version.h)
900 UNAME_M=$(shell uname -m)
913 ifeq ($(findstring s390x,$(UNAME_M)),s390x)
914 DESTCPU ?= s390x
919 ifeq ($(findstring OS/390,$(shell uname -s)),OS/390)
920 DESTCPU ?= s390x
931 ifeq ($(findstring powerpc,$(shell uname -p)),powerpc)
968 ifeq ($(DESTCPU),s390x)
969 ARCH=s390x
985 # pass the proper v8 arch name to $V8_ARCH based on user-specified $DESTCPU.
993 # enforce "x86" over "ia32" as the generally accepted way of referring to 32-bit intel
1001 TARNAME=node-$(FULLVERSION)
1003 # Custom user-specified variation, use it directly
1005 BINARYNAME=$(TARNAME)-$(PLATFORM)-$(ARCH)-$(VARIATION)
1007 BINARYNAME=$(TARNAME)-$(PLATFORM)-$(ARCH)
1011 HAS_XZ ?= $(shell command -v xz > /dev/null 2>&1; [ $$? -eq 0 ] && echo 1 || echo 0)
1014 XZ = $(shell [ $(HAS_XZ) -eq 1 ] && [ $(SKIP_XZ) -eq 0 ] && echo 1 || echo 0)
1019 .PHONY: check-xz
1021 check-xz:
1025 check-xz:
1027 check-xz:
1032 .PHONY: release-only
1033 release-only: check-xz
1034 @if [ "$(DISTTYPE)" = "release" ] && `grep -q REPLACEME doc/api/*.md`; then \
1036 REPLACEMES="$(shell grep -l REPLACEME doc/api/*.md)" ; \
1041 `grep -q DEP...X doc/api/deprecations.md`; then \
1045 @if [ "$(shell git status --porcelain | egrep -v '^\?\? ')" = "" ]; then \
1052 git status --porcelain | egrep -v '^\?\?' >&2 ; \
1065 @if [ "$(RELEASE)" = "0" ] || [ -f "$(CHANGELOG)" ]; then \
1075 $(PKG): release-only
1077 # ease of compiling fat-binaries for both macOS architectures.
1086 $(RM) -r $(MACOSOUTDIR)
1087 mkdir -p $(MACOSOUTDIR)/installer/productbuild
1088 cat tools/macos-installer/productbuild/distribution.xml.tmpl \
1089 | sed -E "s/\\{nodeversion\\}/$(FULLVERSION)/g" \
1090 | sed -E "s/\\{npmversion\\}/$(NPMVERSION)/g" \
1093 @for dirname in tools/macos-installer/productbuild/Resources/*/; do \
1095 mkdir -p $(MACOSOUTDIR)/installer/productbuild/Resources/$$lang ; \
1098 | sed -E "s/\\{nodeversion\\}/$(FULLVERSION)/g" \
1099 | sed -E "s/\\{npmversion\\}/$(NPMVERSION)/g" \
1102 | sed -E "s/\\{nodeversion\\}/$(FULLVERSION)/g" \
1103 | sed -E "s/\\{npmversion\\}/$(NPMVERSION)/g" \
1106 CC_host="cc -arch x86_64" CXX_host="c++ -arch x86_64" \
1107 CC_target="cc -arch x86_64" CXX_target="c++ -arch x86_64" \
1108 CC="cc -arch x86_64" CXX="c++ -arch x86_64" $(PYTHON) ./configure \
1109 --dest-cpu=x86_64 \
1110 --tag=$(TAG) \
1111 --release-urlbase=$(RELEASE_URLBASE) \
1113 arch -x86_64 $(MAKE) install V=$(V) DESTDIR=$(MACOSOUTDIR)/dist/x64/node
1115 tools/osx-codesign.sh
1117 --dest-cpu=arm64 \
1118 --tag=$(TAG) \
1119 --release-urlbase=$(RELEASE_URLBASE) \
1123 tools/osx-codesign.sh
1126 -output $(MACOSOUTDIR)/dist/node/usr/local/bin/node \
1127 -create
1128 mkdir -p $(MACOSOUTDIR)/dist/npm/usr/local/lib/node_modules
1129 mkdir -p $(MACOSOUTDIR)/pkgs
1137 pkgbuild --version $(FULLVERSION) \
1138 --identifier org.nodejs.node.pkg \
1139 --root $(MACOSOUTDIR)/dist/node $(MACOSOUTDIR)/pkgs/node-$(FULLVERSION).pkg
1140 pkgbuild --version $(NPMVERSION) \
1141 --identifier org.nodejs.npm.pkg \
1142 --root $(MACOSOUTDIR)/dist/npm \
1143 --scripts ./tools/macos-installer/pkgbuild/npm/scripts \
1144 $(MACOSOUTDIR)/pkgs/npm-$(NPMVERSION).pkg
1145 productbuild --distribution $(MACOSOUTDIR)/installer/productbuild/distribution.xml \
1146 --resources $(MACOSOUTDIR)/installer/productbuild/Resources \
1147 --package-path $(MACOSOUTDIR)/pkgs ./$(PKG)
1148 SIGN="$(PRODUCTSIGN_CERT)" PKG="$(PKG)" sh tools/osx-productsign.sh
1149 sh tools/osx-notarize.sh $(FULLVERSION)
1155 .PHONY: corepack-update
1156 corepack-update:
1157 mkdir -p /tmp/node-corepack
1158 curl -qLo /tmp/node-corepack/package.tgz "$$(npm view corepack dist.tarball)"
1160 rm -rf deps/corepack && mkdir deps/corepack
1161 cd deps/corepack && tar xf /tmp/node-corepack/package.tgz --strip-components=1
1164 node deps/corepack/dist/corepack.js --version
1166 .PHONY: pkg-upload
1168 pkg-upload: pkg
1169 ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)"
1171 scp -p $(TARNAME).pkg $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME).pkg
1174 $(TARBALL): release-only doc-only
1175 git checkout-index -a -f --prefix=$(TARNAME)/
1176 mkdir -p $(TARNAME)/doc/api
1178 cp -r out/doc/api/* $(TARNAME)/doc/api/
1179 $(RM) -r $(TARNAME)/.editorconfig
1180 $(RM) -r $(TARNAME)/.git*
1181 $(RM) -r $(TARNAME)/.mailmap
1182 $(RM) -r $(TARNAME)/deps/openssl/openssl/demos
1183 $(RM) -r $(TARNAME)/deps/openssl/openssl/doc
1184 $(RM) -r $(TARNAME)/deps/openssl/openssl/test
1185 $(RM) -r $(TARNAME)/deps/uv/docs
1186 $(RM) -r $(TARNAME)/deps/uv/samples
1187 $(RM) -r $(TARNAME)/deps/uv/test
1188 $(RM) -r $(TARNAME)/deps/v8/samples
1189 $(RM) -r $(TARNAME)/deps/v8/tools/profviz
1190 $(RM) -r $(TARNAME)/deps/v8/tools/run-tests.py
1191 $(RM) -r $(TARNAME)/doc/images # too big
1192 $(RM) -r $(TARNAME)/test*.tap
1193 $(RM) -r $(TARNAME)/tools/cpplint.py
1194 $(RM) -r $(TARNAME)/tools/eslint-rules
1195 $(RM) -r $(TARNAME)/tools/license-builder.sh
1196 $(RM) -r $(TARNAME)/tools/node_modules
1197 $(RM) -r $(TARNAME)/tools/osx-*
1198 $(RM) -r $(TARNAME)/tools/osx-pkg.pmdoc
1199 find $(TARNAME)/deps/v8/test/* -type d ! -regex '.*/test/torque$$' | xargs $(RM) -r
1200 find $(TARNAME)/deps/v8/test -type f ! -regex '.*/test/torque/.*' | xargs $(RM)
1201 find $(TARNAME)/deps/zlib/contrib/* -type d ! -regex '.*/contrib/optimizations$$' | xargs $(RM) -r
1202 find $(TARNAME)/ -name ".eslint*" -maxdepth 2 | xargs $(RM)
1203 find $(TARNAME)/ -type l | xargs $(RM)
1204 tar -cf $(TARNAME).tar $(TARNAME)
1205 $(RM) -r $(TARNAME)
1206 gzip -c -f -9 $(TARNAME).tar > $(TARNAME).tar.gz
1208 xz -c -f -$(XZ_COMPRESSION) $(TARNAME).tar > $(TARNAME).tar.xz
1215 .PHONY: tar-upload
1217 tar-upload: tar
1218 ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)"
1220 scp -p $(TARNAME).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME).tar.gz
1224 scp -p $(TARNAME).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME).tar.xz
1228 .PHONY: doc-upload
1230 doc-upload: doc
1231 ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/docs/"
1232 chmod -R ug=rw-x+X,o=r+X out/doc/
1233 scp -pr out/doc/* $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/docs/
1236 .PHONY: $(TARBALL)-headers
1237 $(TARBALL)-headers: release-only
1239 --prefix=/ \
1240 --dest-cpu=$(DESTCPU) \
1241 --tag=$(TAG) \
1242 --release-urlbase=$(RELEASE_URLBASE) \
1245 find $(TARNAME)/ -type l | xargs $(RM)
1246 tar -cf $(TARNAME)-headers.tar $(TARNAME)
1247 $(RM) -r $(TARNAME)
1248 gzip -c -f -9 $(TARNAME)-headers.tar > $(TARNAME)-headers.tar.gz
1250 xz -c -f -$(XZ_COMPRESSION) $(TARNAME)-headers.tar > $(TARNAME)-headers.tar.xz
1252 $(RM) $(TARNAME)-headers.tar
1254 .PHONY: tar-headers
1255 tar-headers: $(TARBALL)-headers ## Build the node header tarball.
1257 .PHONY: tar-headers-upload
1258 tar-headers-upload: tar-headers
1259 ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)"
1260 chmod 664 $(TARNAME)-headers.tar.gz
1261 …scp -p $(TARNAME)-headers.tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-
1262 ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-headers.tar.gz.done"
1264 chmod 664 $(TARNAME)-headers.tar.xz
1265 …scp -p $(TARNAME)-headers.tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-
1266 ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-headers.tar.xz.done"
1269 $(BINARYTAR): release-only
1270 $(RM) -r $(BINARYNAME)
1271 $(RM) -r out/deps out/Release
1273 --prefix=/ \
1274 --dest-cpu=$(DESTCPU) \
1275 --tag=$(TAG) \
1276 --release-urlbase=$(RELEASE_URLBASE) \
1287 SIGN="$(CODESIGN_CERT)" PKGDIR="$(BINARYNAME)" sh tools/osx-codesign.sh
1289 tar -cf $(BINARYNAME).tar $(BINARYNAME)
1290 $(RM) -r $(BINARYNAME)
1291 gzip -c -f -9 $(BINARYNAME).tar > $(BINARYNAME).tar.gz
1293 xz -c -f -$(XZ_COMPRESSION) $(BINARYNAME).tar > $(BINARYNAME).tar.xz
1301 .PHONY: binary-upload
1303 binary-upload: binary
1304 ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)"
1305 chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
1306 …scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$…
1307 …ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.…
1309 chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
1310 …scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$…
1311 …ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.…
1314 .PHONY: bench-all
1316 bench bench-all: bench-addons-build
1320 .PHONY: bench-addons-build
1321 bench-addons-build: | $(NODE_EXE) benchmark/napi/.buildstamp
1323 .PHONY: bench-addons-clean
1324 .NOTPARALLEL: bench-addons-clean
1325 bench-addons-clean:
1326 $(RM) -r benchmark/napi/*/build
1329 .PHONY: lint-md-rollup
1330 lint-md-rollup:
1332 cd tools/lint-md && npm ci && npm run build
1334 .PHONY: lint-md-clean
1335 .NOTPARALLEL: lint-md-clean
1336 lint-md-clean:
1337 $(RM) -r tools/lint-md/node_modules
1340 .PHONY: lint-md-build
1341 lint-md-build:
1342 $(warning Deprecated no-op target 'lint-md-build')
1347 LINT_MD_NEWER = -newer tools/.mdlintstamp
1351 LINT_MD_FILES = $(shell $(FIND) $(LINT_MD_TARGETS) -type f \
1352 ! -path '*node_modules*' ! -path 'test/fixtures/*' -name '*.md' \
1354 run-lint-md = tools/lint-md/lint-md.mjs $(LINT_MD_FILES)
1358 @$(call available-node,$(run-lint-md))
1361 .PHONY: lint-md
1363 lint-md: lint-js-doc | tools/.mdlintstamp
1365 run-format-md = tools/lint-md/lint-md.mjs --format $(LINT_MD_FILES)
1366 .PHONY: format-md
1368 format-md:
1369 @$(call available-node,$(run-format-md))
1375 run-lint-js = tools/node_modules/eslint/bin/eslint.js --cache \
1376 --max-warnings=0 --report-unused-disable-directives $(LINT_JS_TARGETS)
1377 run-lint-js-fix = $(run-lint-js) --fix
1379 .PHONY: lint-js-fix
1380 lint-js-fix:
1381 @$(call available-node,$(run-lint-js-fix))
1383 .PHONY: lint-js
1384 .PHONY: lint-js-doc
1385 # Note that on the CI `lint-js-ci` is run instead.
1387 lint-js-doc: LINT_JS_TARGETS=doc
1388 lint-js lint-js-doc:
1393 $(call available-node,$(run-lint-js)) \
1396 jslint: lint-js
1397 $(warning Please use lint-js instead of jslint)
1399 run-lint-js-ci = tools/node_modules/eslint/bin/eslint.js \
1400 --max-warnings=0 --report-unused-disable-directives -f tap \
1401 -o test-eslint.tap $(LINT_JS_TARGETS)
1403 .PHONY: lint-js-ci
1405 lint-js-ci:
1407 @$(call available-node,$(run-lint-js-ci))
1409 jslint-ci: lint-js-ci
1410 $(warning Please use lint-js-ci instead of jslint-ci)
1420 LINT_CPP_FILES = $(filter-out $(LINT_CPP_EXCLUDE), $(wildcard \
1435 test/js-native-api/*/*.cc \
1436 test/node-api/*/*.cc \
1450 test/js-native-api/*/*.c \
1451 test/js-native-api/*/*.h \
1452 test/node-api/*/*.c \
1453 test/node-api/*/*.h \
1458 ADDON_DOC_LINT_FLAGS=-whitespace/ending_newline,-build/header_guard
1460 .PHONY: format-cpp-build
1461 format-cpp-build:
1462 cd tools/clang-format && $(call available-node,$(run-npm-ci))
1464 .PHONY: format-cpp-clean
1465 .NOTPARALLEL: format-cpp-clean
1466 format-cpp-clean:
1467 $(RM) -r tools/clang-format/node_modules
1470 .PHONY: format-cpp
1472 # $ make format-cpp
1474 # $ CLANG_FORMAT_START=`git rev-parse HEAD~1` make format-cpp
1476 # $ CLANG_FORMAT_START=main make format-cpp
1477 format-cpp: ## Format C++ diff from $CLANG_FORMAT_START to current changes
1478 ifneq ("","$(wildcard tools/clang-format/node_modules/)")
1480 @$(PYTHON) tools/clang-format/node_modules/.bin/git-clang-format \
1481 --binary=tools/clang-format/node_modules/.bin/clang-format \
1482 --style=file \
1483 $(CLANG_FORMAT_START) -- \
1487 $(info To install (requires internet access) run: $$ make format-cpp-build)
1493 CPPLINT_QUIET = --quiet
1495 .PHONY: lint-cpp
1497 lint-cpp: tools/.cpplintstamp
1505 .PHONY: lint-addon-docs
1506 lint-addon-docs: tools/.doclintstamp
1510 @$(PYTHON) tools/cpplint.py $(CPPLINT_QUIET) --filter=$(ADDON_DOC_LINT_FLAGS) \
1514 cpplint: lint-cpp
1515 $(warning Please use lint-cpp instead of cpplint)
1517 .PHONY: lint-py-build
1518 # python -m pip install ruff
1519 # Try with '--system' if it fails without; the system may have set '--user'
1520 lint-py-build:
1521 $(info Pip installing ruff on $(shell $(PYTHON) --version)...)
1522 $(PYTHON) -m pip install --upgrade --target tools/pip/site-packages ruff==0.0.272 || \
1523 $(PYTHON) -m pip install --upgrade --system --target tools/pip/site-packages ruff==0.0.272
1525 .PHONY: lint-py
1526 ifneq ("","$(wildcard tools/pip/site-packages/ruff)")
1528 lint-py:
1529 tools/pip/site-packages/bin/ruff --version
1530 tools/pip/site-packages/bin/ruff .
1532 lint-py:
1534 $(warning Run 'make lint-py-build')
1537 .PHONY: lint-yaml-build
1538 # python -m pip install yamllint
1539 # Try with '--system' if it fails without; the system may have set '--user'
1540 lint-yaml-build:
1541 $(info Pip installing yamllint on $(shell $(PYTHON) --version)...)
1542 $(PYTHON) -m pip install --upgrade -t tools/pip/site-packages yamllint || \
1543 $(PYTHON) -m pip install --upgrade --system -t tools/pip/site-packages yamllint
1545 .PHONY: lint-yaml
1547 lint-yaml:
1548 @if [ -d "tools/pip/site-packages/yamllint" ]; then \
1549 PYTHONPATH=tools/pip $(PYTHON) -m yamllint .; \
1552 echo "Run 'make lint-yaml-build'"; \
1556 .PHONY: lint-ci
1560 $(MAKE) lint-js || EXIT_STATUS=$$? ; \
1561 $(MAKE) lint-cpp || EXIT_STATUS=$$? ; \
1562 $(MAKE) lint-addon-docs || EXIT_STATUS=$$? ; \
1563 $(MAKE) lint-md || EXIT_STATUS=$$? ; \
1564 $(MAKE) lint-yaml || EXIT_STATUS=$$? ; \
1568 # Related CI job: node-test-linter
1569 lint-ci: lint-js-ci lint-cpp lint-py lint-md lint-addon-docs lint-yaml-build lint-yaml
1570 …@if ! ( grep -IEqrs "$(CONFLICT_RE)" --exclude="error-message.js" --exclude="merge-conflict.json" …
1571 && ! ( $(FIND) . -maxdepth 1 -type f | xargs grep -IEqs "$(CONFLICT_RE)" ); then \
1579 lint lint-ci:
1584 .PHONY: lint-clean
1585 lint-clean:
1589 HAS_DOCKER ?= $(shell command -v docker > /dev/null 2>&1; [ $$? -eq 0 ] && echo 1 || echo 0)
1591 .PHONY: gen-openssl
1593 DOCKER_COMMAND ?= docker run -it -v $(PWD):/node
1595 GIT_WORKTREE_COMMON = $(shell git rev-parse --git-common-dir)
1596 DOCKER_COMMAND += $(if $(IS_IN_WORKTREE), -v $(GIT_WORKTREE_COMMON):$(GIT_WORKTREE_COMMON))
1597 gen-openssl: ## Generate platform dependent openssl files (requires docker)
1598 docker build -t node-openssl-builder deps/openssl/config/
1599 $(DOCKER_COMMAND) node-openssl-builder make -C deps/openssl/config
1601 gen-openssl: