From 36a02d401c227a4c91d7b2ba1ef34528a74c2934 Mon Sep 17 00:00:00 2001 From: Yang Guo Date: Thu, 11 Jan 2018 13:25:09 +0100 Subject: [PATCH] build: add option to build v8 with GN PR-URL: https://github.com/nodejs/node/pull/19201 Reviewed-By: Ali Ijaz Sheikh Reviewed-By: Myles Borins Reviewed-By: Matteo Collina Reviewed-By: Colin Ihrig --- common.gypi | 15 ++++++++++++--- configure | 18 ++++++++++++++++++ node.gypi | 17 +++++++++++++---- 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/common.gypi b/common.gypi index 9ae443398fdeae..480a36cc8a6446 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 e1843240adbf32..dbf1dfe3214ab5 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 198425d2bdee1a..e5417da015b6fc 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"', {