summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common.gypi15
-rwxr-xr-xconfigure18
-rw-r--r--node.gypi17
3 files changed, 43 insertions, 7 deletions
diff --git a/common.gypi b/common.gypi
index 9ae443398f..480a36cc8a 100644
--- a/common.gypi
+++ b/common.gypi
@@ -51,8 +51,8 @@
'obj_dir': '<(PRODUCT_DIR)/obj',
'v8_base': '<(PRODUCT_DIR)/obj/deps/v8/gypfiles/libv8_base.a',
}, {
- 'obj_dir%': '<(PRODUCT_DIR)/obj.target',
- 'v8_base%': '<(PRODUCT_DIR)/obj.target/deps/v8/gypfiles/libv8_base.a',
+ 'obj_dir%': '<(PRODUCT_DIR)/obj.target',
+ 'v8_base': '<(PRODUCT_DIR)/obj.target/deps/v8/gypfiles/libv8_base.a',
}],
['OS == "win"', {
'os_posix': 0,
@@ -63,10 +63,19 @@
'os_posix': 1,
'v8_postmortem_support%': 'true',
}],
- ['OS== "mac"', {
+ ['OS == "mac"', {
'obj_dir%': '<(PRODUCT_DIR)/obj.target',
'v8_base': '<(PRODUCT_DIR)/libv8_base.a',
}],
+ ['build_v8_with_gn == "true"', {
+ 'conditions': [
+ ['GENERATOR == "ninja"', {
+ 'v8_base': '<(PRODUCT_DIR)/obj/deps/v8/gypfiles/v8_monolith.gen/gn/obj/libv8_monolith.a',
+ }, {
+ 'v8_base': '<(PRODUCT_DIR)/obji.target/v8_monolith/geni/gn/obj/libv8_monolith.a',
+ }],
+ ],
+ }],
['openssl_fips != ""', {
'openssl_product': '<(STATIC_LIB_PREFIX)crypto<(STATIC_LIB_SUFFIX)',
}, {
diff --git a/configure b/configure
index e1843240ad..dbf1dfe321 100755
--- a/configure
+++ b/configure
@@ -55,6 +55,10 @@ sys.path.insert(0, 'tools')
import getmoduleversion
from gyp_node import run_gyp
+# imports in deps/v8/tools/node
+sys.path.insert(0, os.path.join('deps', 'v8', 'tools', 'node'))
+from fetch_deps import FetchDeps
+
# parse our options
parser = optparse.OptionParser()
@@ -548,6 +552,12 @@ parser.add_option('--without-bundled-v8',
help='do not use V8 includes from the bundled deps folder. ' +
'(This mode is not officially supported for regular applications)')
+parser.add_option('--build-v8-with-gn',
+ action='store_true',
+ dest='build_v8_with_gn',
+ default=False,
+ help='build V8 using GN instead of gyp')
+
# Create compile_commands.json in out/Debug and out/Release.
parser.add_option('-C',
action='store_true',
@@ -1060,6 +1070,14 @@ def configure_v8(o):
o['variables']['test_isolation_mode'] = 'noop' # Needed by d8.gyp.
if options.without_bundled_v8 and options.enable_d8:
raise Exception('--enable-d8 is incompatible with --without-bundled-v8.')
+ if options.without_bundled_v8 and options.build_v8_with_gn:
+ raise Exception(
+ '--build-v8-with-gn is incompatible with --without-bundled-v8.')
+ if options.build_v8_with_gn:
+ v8_path = os.path.join('deps', 'v8')
+ print('Fetching dependencies to build V8 with GN')
+ options.build_v8_with_gn = FetchDeps(v8_path)
+ o['variables']['build_v8_with_gn'] = b(options.build_v8_with_gn)
def configure_openssl(o):
diff --git a/node.gypi b/node.gypi
index 198425d2bd..e5417da015 100644
--- a/node.gypi
+++ b/node.gypi
@@ -59,9 +59,15 @@
'dependencies': [ 'deps/v8/gypfiles/d8.gyp:d8' ],
}],
[ 'node_use_bundled_v8=="true"', {
- 'dependencies': [
- 'deps/v8/gypfiles/v8.gyp:v8',
- 'deps/v8/gypfiles/v8.gyp:v8_libplatform'
+ 'conditions': [
+ [ 'build_v8_with_gn=="true"', {
+ 'dependencies': ['deps/v8/gypfiles/v8.gyp:v8_monolith'],
+ }, {
+ 'dependencies': [
+ 'deps/v8/gypfiles/v8.gyp:v8',
+ 'deps/v8/gypfiles/v8.gyp:v8_libplatform',
+ ],
+ }],
],
}],
[ 'node_use_v8_platform=="true"', {
@@ -111,7 +117,6 @@
'defines': [ 'NODE_NO_BROWSER_GLOBALS' ],
} ],
[ 'node_use_bundled_v8=="true" and v8_postmortem_support=="true"', {
- 'dependencies': [ 'deps/v8/gypfiles/v8.gyp:postmortem-metadata' ],
'conditions': [
# -force_load is not applicable for the static library
[ 'force_load=="true"', {
@@ -121,6 +126,10 @@
],
},
}],
+ # when building with GN, the v8_monolith target already includes postmortem metadata
+ [ 'build_v8_with_gn=="false"', {
+ 'dependencies': [ 'deps/v8/gypfiles/v8.gyp:postmortem-metadata' ],
+ }],
],
}],
[ 'node_shared_zlib=="false"', {