From 25df3c10f4a54d04e0391d6b9673059f6a7918bd Mon Sep 17 00:00:00 2001 From: Refael Ackermann Date: Sat, 6 Apr 2019 14:22:45 -0400 Subject: [PATCH] build,win: put all compilation artifacts into `out` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add symlink from Release to out\Release for backward compat PR-URL: https://github.com/nodejs/node/pull/27149 Reviewed-By: Ben Noordhuis Reviewed-By: Richard Lau Reviewed-By: Tobias Nießen --- .gitignore | 10 +++------- common.gypi | 7 +++++++ configure.py | 2 +- node.gyp | 25 +++++++++++++++++++++++++ node.gypi | 24 ++++-------------------- vcbuild.bat | 19 +++++++++++-------- 6 files changed, 51 insertions(+), 36 deletions(-) diff --git a/.gitignore b/.gitignore index 86664b41461a8e..7e263948622716 100644 --- a/.gitignore +++ b/.gitignore @@ -41,23 +41,19 @@ coverage/ /out -# various stuff that VC++ produces/uses -Debug/ -!**/node_modules/debug/ -Release/ -!**/node_modules/**/release +# various stuff that VC++ produces/uses and is not in /out +/Debug/ +/Release/ !doc/blog/** *.sln !nodemsi.sln *.suo -*.vcproj *.vcxproj !custom_actions.vcxproj *.vcxproj.user *.vcxproj.filters UpgradeLog*.XML _UpgradeReport_Files/ -ipch/ *.sdf *.opensdf *.VC.db diff --git a/common.gypi b/common.gypi index 11b5d3b7aeb11d..8676d28ca53303 100644 --- a/common.gypi +++ b/common.gypi @@ -1,5 +1,6 @@ { 'variables': { + 'configuring_node%': 0, 'asan%': 0, 'werror': '', # Turn off -Werror in V8 build. 'visibility%': 'hidden', # V8's visibility setting @@ -280,6 +281,12 @@ 'msvs_cygwin_shell': 0, # prevent actions from trying to use cygwin 'conditions': [ + [ 'configuring_node', { + 'msvs_configuration_attributes': { + 'OutputDirectory': '<(DEPTH)/out/$(Configuration)/', + 'IntermediateDirectory': '$(OutDir)obj/$(ProjectName)/' + }, + }], [ 'target_arch=="x64"', { 'msvs_configuration_platform': 'x64', }], diff --git a/configure.py b/configure.py index c23af2487314b0..d78a1caf64a1d2 100755 --- a/configure.py +++ b/configure.py @@ -1625,7 +1625,7 @@ def make_bin_override(): write('config.mk', do_not_edit + config) -gyp_args = ['--no-parallel'] +gyp_args = ['--no-parallel', '-Dconfiguring_node=1'] if options.use_ninja: gyp_args += ['-f', 'ninja'] diff --git a/node.gyp b/node.gyp index 2ad76020f5784c..9d6d0dd7cbb695 100644 --- a/node.gyp +++ b/node.gyp @@ -251,6 +251,31 @@ ], }, + 'target_defaults': { + # Putting these explicitly here so not to depend on `common.gypi`. + # `common.gypi` need to be more general because it is used to build userland native addons. + # Refs: https://github.com/nodejs/node-gyp/issues/1118 + 'cflags': [ '-Wall', '-Wextra', '-Wno-unused-parameter', ], + 'xcode_settings': { + 'WARNING_CFLAGS': [ + '-Wall', + '-Wendif-labels', + '-W', + '-Wno-unused-parameter', + '-Werror=undefined-inline', + ], + }, + + # Relevant only for x86. + # Refs: https://github.com/nodejs/node/pull/25852 + # Refs: https://docs.microsoft.com/en-us/cpp/build/reference/safeseh-image-has-safe-exception-handlers + 'msvs_settings': { + 'VCLinkerTool': { + 'ImageHasSafeExceptionHandlers': 'false', + }, + }, + }, + 'targets': [ { 'target_name': '<(node_core_target_name)', diff --git a/node.gypi b/node.gypi index b53ccfd6bebbd8..d6c4c2669834bf 100644 --- a/node.gypi +++ b/node.gypi @@ -24,36 +24,20 @@ }, 'force_load%': '<(force_load)', }, - # Putting these explicitly here so not to be dependant on common.gypi. - 'cflags': [ '-Wall', '-Wextra', '-Wno-unused-parameter', ], - 'xcode_settings': { - 'WARNING_CFLAGS': [ - '-Wall', - '-Wendif-labels', - '-W', - '-Wno-unused-parameter', - '-Werror=undefined-inline', - ], - }, - # Relevant only for x86. - # Refs: https://docs.microsoft.com/en-us/cpp/build/reference/safeseh-image-has-safe-exception-handlers - 'msvs_settings': { - 'VCLinkerTool': { - 'ImageHasSafeExceptionHandlers': 'false', - }, - }, + 'conditions': [ [ 'clang==1', { 'cflags': [ '-Werror=undefined-inline', ] }], - [ 'node_shared=="false"', { + [ 'node_shared=="false" and "<(_type)"=="executable"', { 'msvs_settings': { 'VCManifestTool': { 'EmbedManifest': 'true', 'AdditionalManifestFiles': 'src/res/node.exe.extra.manifest' } }, - }, { + }], + [ 'node_shared=="true"', { 'defines': [ 'NODE_SHARED_MODE', ], diff --git a/vcbuild.bat b/vcbuild.bat index 3128bc5db4a482..73405b46ed6516 100644 --- a/vcbuild.bat +++ b/vcbuild.bat @@ -211,7 +211,7 @@ if not "%target%"=="Clean" goto skip-clean rmdir /Q /S "%~dp0%config%\%TARGET_NAME%" > nul 2> nul :skip-clean -if defined noprojgen if defined nobuild if not defined sign if not defined msi goto licensertf +if defined noprojgen if defined nobuild goto :after-build @rem Set environment for msbuild @@ -301,7 +301,7 @@ where /R . /T *.gyp? >> .gyp_configure_stamp :msbuild @rem Skip build if requested. -if defined nobuild goto sign +if defined nobuild goto :after-build @rem Build the sln with msbuild. set "msbcpu=/m:2" @@ -319,10 +319,13 @@ if defined msbuild_args set "extra_msbuild_args=%extra_msbuild_args% %msbuild_ar msbuild node.sln %msbcpu% /t:%target% /p:Configuration=%config% /p:Platform=%msbplatform% /clp:NoItemAndPropertyList;Verbosity=minimal /nologo %extra_msbuild_args% if errorlevel 1 ( if not defined project_generated echo Building Node with reused solution failed. To regenerate project files use "vcbuild projgen" - goto exit + exit /B 1 ) if "%target%" == "Clean" goto exit +:after-build +if EXIST out\%config% mklink /D %config% out\%config% + :sign @rem Skip signing unless the `sign` option was specified. if not defined sign goto licensertf @@ -334,7 +337,7 @@ if errorlevel 1 echo Failed to sign exe&goto exit @rem Skip license.rtf generation if not requested. if not defined licensertf goto stage_package -%config%\node.exe tools\license2rtf.js < LICENSE > %config%\license.rtf +%node_exe% tools\license2rtf.js < LICENSE > %config%\license.rtf if errorlevel 1 echo Failed to generate license.rtf&goto exit :stage_package @@ -553,7 +556,7 @@ goto node-tests :node-test-inspect set USE_EMBEDDED_NODE_INSPECT=1 -%config%\node tools\test-npm-package.js --install deps\node-inspect test +%node_exe% tools\test-npm-package.js --install deps\node-inspect test goto node-tests :node-tests @@ -635,12 +638,12 @@ if defined lint_js_ci goto lint-js-ci if not defined lint_js goto lint-md-build if not exist tools\node_modules\eslint goto no-lint echo running lint-js -%config%\node tools\node_modules\eslint\bin\eslint.js --cache --report-unused-disable-directives --rule "linebreak-style: 0" --ext=.js,.mjs,.md .eslintrc.js benchmark doc lib test tools +%node_exe% tools\node_modules\eslint\bin\eslint.js --cache --report-unused-disable-directives --rule "linebreak-style: 0" --ext=.js,.mjs,.md .eslintrc.js benchmark doc lib test tools goto lint-md-build :lint-js-ci echo running lint-js-ci -%config%\node tools\lint-js.js -J -f tap -o test-eslint.tap benchmark doc lib test tools +%node_exe% tools\lint-js.js -J -f tap -o test-eslint.tap benchmark doc lib test tools goto lint-md-build :no-lint @@ -663,7 +666,7 @@ for /D %%D IN (doc\*) do ( set "lint_md_files="%%F" !lint_md_files!" ) ) -%config%\node tools\lint-md.js -q -f %lint_md_files% +%node_exe% tools\lint-md.js -q -f %lint_md_files% ENDLOCAL goto exit