From 88e862ba82a3a62a25bab558915e4290b7686f1a Mon Sep 17 00:00:00 2001 From: Stefan Budeanu Date: Wed, 29 Jun 2016 16:03:18 -0400 Subject: [PATCH] build: windows sharedlib support Added "dll" option to vcbuild.bat Insure that Unix SO name is not used on Windows (i.e. produce a .dll file) Insure that Node and its V8 dependency link against the Visual C++ Runtime dynamically. Requires backported V8 patch, see PR 7802. Ref: https://github.com/nodejs/node/pull/7802 PR-URL: https://github.com/nodejs/node/pull/7487 Reviewed-By: Alexis Campailla Reviewed-By: Michael Dawson --- common.gypi | 31 +++++++++++++++++++++++++++++-- configure | 1 + node.gyp | 3 ++- vcbuild.bat | 3 +++ 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/common.gypi b/common.gypi index 5eea907a0ef1e2..ee31349eb02b09 100644 --- a/common.gypi +++ b/common.gypi @@ -12,6 +12,7 @@ 'python%': 'python', 'node_shared%': 'false', + 'force_dynamic_crt%': 0, 'node_use_v8_platform%': 'true', 'node_use_bundled_v8%': 'true', 'node_module_version%': '', @@ -78,11 +79,24 @@ ['OS == "android"', { 'cflags': [ '-fPIE' ], 'ldflags': [ '-fPIE', '-pie' ] + }], + ['node_shared=="true"', { + 'msvs_settings': { + 'VCCLCompilerTool': { + 'RuntimeLibrary': 3, # MultiThreadedDebugDLL (/MDd) + } + } + }], + ['node_shared=="false"', { + 'msvs_settings': { + 'VCCLCompilerTool': { + 'RuntimeLibrary': 1 # MultiThreadedDebug (/MTd) + } + } }] ], 'msvs_settings': { 'VCCLCompilerTool': { - 'RuntimeLibrary': 1, # static debug 'Optimization': 0, # /Od, no optimization 'MinimalRebuild': 'false', 'OmitFramePointers': 'false', @@ -115,11 +129,24 @@ ['OS == "android"', { 'cflags': [ '-fPIE' ], 'ldflags': [ '-fPIE', '-pie' ] + }], + ['node_shared=="true"', { + 'msvs_settings': { + 'VCCLCompilerTool': { + 'RuntimeLibrary': 2 # MultiThreadedDLL (/MD) + } + } + }], + ['node_shared=="false"', { + 'msvs_settings': { + 'VCCLCompilerTool': { + 'RuntimeLibrary': 0 # MultiThreaded (/MT) + } + } }] ], 'msvs_settings': { 'VCCLCompilerTool': { - 'RuntimeLibrary': 0, # static release 'Optimization': 3, # /Ox, full optimization 'FavorSizeOrSpeed': 1, # /Ot, favour speed over size 'InlineFunctionExpansion': 2, # /Ob2, inline anything eligible diff --git a/configure b/configure index b23bfc36a282d0..c117486f99bcc8 100755 --- a/configure +++ b/configure @@ -889,6 +889,7 @@ def configure_v8(o): o['variables']['v8_use_snapshot'] = 'false' if options.without_snapshot else 'true' o['variables']['node_use_v8_platform'] = b(not options.without_v8_platform) o['variables']['node_use_bundled_v8'] = b(not options.without_bundled_v8) + o['variables']['force_dynamic_crt'] = 1 if options.shared else 0 o['variables']['node_enable_d8'] = b(options.enable_d8) if options.enable_d8: o['variables']['test_isolation_mode'] = 'noop' # Needed by d8.gyp. diff --git a/node.gyp b/node.gyp index 1f7fe54880f4d2..88b880d7438843 100644 --- a/node.gyp +++ b/node.gyp @@ -9,6 +9,7 @@ 'node_use_v8_platform%': 'true', 'node_use_bundled_v8%': 'true', 'node_shared%': 'false', + 'force_dynamic_crt%': 0, 'node_module_version%': '', 'node_shared_zlib%': 'false', 'node_shared_http_parser%': 'false', @@ -247,7 +248,7 @@ 'NODE_SHARED_MODE', ], 'conditions': [ - [ 'node_module_version!=""', { + [ 'node_module_version!="" and OS!="win"', { 'product_extension': 'so.<(node_module_version)', }] ], diff --git a/vcbuild.bat b/vcbuild.bat index f95cfca8b390a9..fd0fa3c78e04c1 100644 --- a/vcbuild.bat +++ b/vcbuild.bat @@ -38,6 +38,7 @@ set build_release= set enable_vtune_arg= set configure_flags= set build_addons= +set dll= :next-arg if "%1"=="" goto args-done @@ -79,6 +80,7 @@ if /i "%1"=="without-intl" set i18n_arg=%1&goto arg-ok if /i "%1"=="download-all" set download_arg="--download=all"&goto arg-ok if /i "%1"=="ignore-flaky" set test_args=%test_args% --flaky-tests=dontcare&goto arg-ok if /i "%1"=="enable-vtune" set enable_vtune_arg=1&goto arg-ok +if /i "%1"=="dll" set dll=1&goto arg-ok echo Warning: ignoring invalid command line option `%1`. @@ -108,6 +110,7 @@ if defined noperfctr set configure_flags=%configure_flags% --without-perfctr& se if defined release_urlbase set release_urlbase_arg=--release-urlbase=%release_urlbase% if defined download_arg set configure_flags=%configure_flags% %download_arg% if defined enable_vtune_arg set configure_flags=%configure_flags% --enable-vtune-profiling +if defined dll set configure_flags=%configure_flags% --shared if "%i18n_arg%"=="full-icu" set configure_flags=%configure_flags% --with-intl=full-icu if "%i18n_arg%"=="small-icu" set configure_flags=%configure_flags% --with-intl=small-icu