From d17262581e4b66218584adb8b1c3ed23edb9307e Mon Sep 17 00:00:00 2001 From: Refael Ackermann Date: Thu, 4 Oct 2018 17:18:32 -0400 Subject: [PATCH] deps: V8 sync gypfiles with 7.1 enable v8_enable_embedded_builtins reorder conditions proccessing for `run_mksnapshot` --- common.gypi | 43 +++- deps/v8/gypfiles/features.gypi | 27 +++ deps/v8/gypfiles/v8-monolithic.gyp | 3 +- deps/v8/gypfiles/v8.gyp | 270 +++++++++++++-------- deps/v8/gypfiles/v8_external_snapshot.gypi | 87 ++++--- 5 files changed, 286 insertions(+), 144 deletions(-) diff --git a/common.gypi b/common.gypi index a56397ce202cbb..39c09183753b17 100644 --- a/common.gypi +++ b/common.gypi @@ -28,29 +28,56 @@ 'openssl_fips%': '', - # Default to -O0 for debug builds. - 'v8_optimized_debug%': 0, + # Some STL containers (e.g. std::vector) do not preserve ABI compatibility + # between debug and non-debug mode. + 'disable_glibcxx_debug': 1, + + # Don't use ICU data file (icudtl.dat) from V8, we use our own. + 'icu_use_data_file_flag%': 0, # Reset this number to 0 on major V8 upgrades. # Increment by one for each non-official patch applied to deps/v8. 'v8_embedder_string': '-node.0', + ##### V8 defaults for Node.js ##### + + # Old time default, now explicitly stated. + 'v8_use_snapshot': 'true', + + # Refs: https://github.com/nodejs/node/issues/23122 + # Refs: https://github.com/nodejs/node/issues/23167 + # Enable compiler warnings when using V8_DEPRECATED apis. + 'v8_deprecation_warnings': 1, + # Enable compiler warnings when using V8_DEPRECATE_SOON apis. + 'v8_imminent_deprecation_warnings': 1, + + # Default to -O0 for debug builds. + 'v8_optimized_debug': 0, + # Enable disassembler for `--print-code` v8 options 'v8_enable_disassembler': 1, # Don't bake anything extra into the snapshot. - 'v8_use_external_startup_data%': 0, + 'v8_use_external_startup_data': 0, + + # https://github.com/nodejs/node/pull/22920/files#r222779926 + 'v8_enable_handle_zapping': 0, # Disable V8 untrusted code mitigations. # See https://github.com/v8/v8/wiki/Untrusted-code-mitigations 'v8_untrusted_code_mitigations': 'false', - # Some STL containers (e.g. std::vector) do not preserve ABI compatibility - # between debug and non-debug mode. - 'disable_glibcxx_debug': 1, + # Still WIP in V8 7.1 + 'v8_enable_pointer_compression': 'false', - # Don't use ICU data file (icudtl.dat) from V8, we use our own. - 'icu_use_data_file_flag%': 0, + # New in V8 7.1 + 'v8_enable_embedded_builtins': 'true', + + # This is more of a V8 dev setting + # https://github.com/nodejs/node/pull/22920/files#r222779926 + 'v8_enable_fast_mksnapshot': 0, + + ##### end V8 defaults ##### 'conditions': [ ['GENERATOR=="ninja"', { diff --git a/deps/v8/gypfiles/features.gypi b/deps/v8/gypfiles/features.gypi index 35a078e8af2fd2..a38e5fa9720da8 100644 --- a/deps/v8/gypfiles/features.gypi +++ b/deps/v8/gypfiles/features.gypi @@ -104,7 +104,25 @@ 'v8_untrusted_code_mitigations%': 'true', 'v8_enable_handle_zapping%': 1, + + 'v8_enable_pointer_compression%': 'false', + + 'v8_enable_embedded_builtins%': 'true', + + 'v8_perf_prof_unwinding_info%': 0, + + 'v8_enable_fast_mksnapshot%': 0, }, + + 'conditions': [ + # V8's predicate inverted since we default to 'true' and set 'false' for unsupported cases. + # v8_use_snapshot && v8_current_cpu != "x86" && !is_aix && ( !is_win || is_clang) + ['not (v8_use_snapshot=="true" and v8_target_arch !="ia32" and OS!="aix" and (OS!="win" or clang==1))', { + 'variables': { + 'v8_enable_embedded_builtins': 'false', + } + }], + ], 'target_defaults': { 'conditions': [ ['v8_embedder_string!=""', { @@ -167,6 +185,15 @@ ['v8_enable_handle_zapping==1', { 'defines': ['ENABLE_HANDLE_ZAPPING',], }], + ['v8_enable_pointer_compression=="true"', { + 'defines': ['V8_COMPRESS_POINTERS',], + }], + ['v8_enable_embedded_builtins=="true"', { + 'defines': [ + 'V8_EMBEDDED_BUILTINS', + 'V8_EMBEDDED_BYTECODE_HANDLERS', + ], + }], ], # conditions 'defines': [ 'V8_GYP_BUILD', diff --git a/deps/v8/gypfiles/v8-monolithic.gyp b/deps/v8/gypfiles/v8-monolithic.gyp index b5ca0ad150b7a6..b46b4ce678a058 100644 --- a/deps/v8/gypfiles/v8-monolithic.gyp +++ b/deps/v8/gypfiles/v8-monolithic.gyp @@ -7,8 +7,7 @@ 'v8_code': 1, 'v8_random_seed%': 314159265, 'v8_vector_stores%': 0, - 'embed_script%': "", - 'warmup_script%': "", + 'v8_embed_script%': "", 'v8_extra_library_files%': [], 'v8_experimental_extra_library_files%': [], 'mksnapshot_exec': '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)mksnapshot<(EXECUTABLE_SUFFIX)', diff --git a/deps/v8/gypfiles/v8.gyp b/deps/v8/gypfiles/v8.gyp index c07bd8e4753529..93c9a4cfa12236 100644 --- a/deps/v8/gypfiles/v8.gyp +++ b/deps/v8/gypfiles/v8.gyp @@ -12,6 +12,47 @@ 'v8_experimental_extra_library_files%': [], 'mksnapshot_exec': '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)mksnapshot<(EXECUTABLE_SUFFIX)', 'v8_os_page_size%': 0, + 'generate_bytecode_builtins_list_output' : '<(SHARED_INTERMEDIATE_DIR)/builtins-generated/bytecodes-builtins-list.h', + 'torque_files': [ + "../src/builtins/base.tq", + "../src/builtins/array.tq", + "../src/builtins/array-copywithin.tq", + "../src/builtins/array-foreach.tq", + "../src/builtins/array-lastindexof.tq", + "../src/builtins/array-reverse.tq", + "../src/builtins/array-splice.tq", + "../src/builtins/array-unshift.tq", + "../src/builtins/typed-array.tq", + "../src/builtins/data-view.tq", + "../test/torque/test-torque.tq", + "../third_party/v8/builtins/array-sort.tq", + ], + 'torque_modules': [ + "base", + "array", + "typed-array", + "data-view", + "test", + ], + # Since there is no foreach in GYP we manualy unroll the following: + # foreach(module, torque_modules) { + # outputs += [ + # "$target_gen_dir/torque-generated/builtins-$module-from-dsl-gen.cc", + # "$target_gen_dir/torque-generated/builtins-$module-from-dsl-gen.h", + # ] + # } + 'torque_outputs': [ + '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-base-from-dsl-gen.cc', + '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-base-from-dsl-gen.h', + '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-array-from-dsl-gen.cc', + '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-array-from-dsl-gen.h', + '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-typed-array-from-dsl-gen.cc', + '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-typed-array-from-dsl-gen.h', + '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-data-view-from-dsl-gen.cc', + '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-data-view-from-dsl-gen.h', + '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-test-from-dsl-gen.cc', + '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-test-from-dsl-gen.h', + ], 'torque_generated_pure_headers': [ '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtin-definitions-from-dsl.h', ], @@ -77,6 +118,7 @@ 'v8_dump_build_config_args': [ '<(PRODUCT_DIR)/v8_build_config.json', 'dcheck_always_on=<(dcheck_always_on)', + 'is_android=<(is_android)', 'is_asan=<(asan)', 'is_cfi=<(cfi_vptr)', 'is_component_build=<(component)', @@ -161,6 +203,7 @@ ], 'sources': [ '../src/setup-isolate-full.cc', + '<(generate_bytecode_builtins_list_output)', '<@(torque_generated_pure_headers)', ], 'conditions': [ @@ -259,14 +302,7 @@ '../src/interpreter/interpreter-generator.h', '../src/interpreter/interpreter-intrinsics-generator.cc', '../src/interpreter/interpreter-intrinsics-generator.h', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-array-from-dsl-gen.cc', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-array-from-dsl-gen.h', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-base-from-dsl-gen.cc', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-base-from-dsl-gen.h', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-typed-array-from-dsl-gen.cc', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-typed-array-from-dsl-gen.h', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-data-view-from-dsl-gen.cc', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-data-view-from-dsl-gen.h', + '<@(torque_outputs)', '<@(torque_generated_pure_headers)', ], 'conditions': [ @@ -369,47 +405,63 @@ '..', '<(DEPTH)', ], - 'variables': { - 'mksnapshot_flags': [ '--turbo_instruction_scheduling', ], - 'conditional_snapshot_outputs': [ ], - 'conditional_inputs': [ ], - 'conditions': [ - ['v8_random_seed != 0', { - 'mksnapshot_flags': ['--random-seed', '<(v8_random_seed)'], - }], - ['v8_os_page_size != 0', { - 'mksnapshot_flags': ['--v8_os_page_size', '<(v8_os_page_size)'], - }], - ['v8_use_external_startup_data !=0 ', { - 'conditional_snapshot_outputs': [ '<(INTERMEDIATE_DIR)/snapshot_blob.bin', ], - 'mksnapshot_flags': [ '--startup_blob', '<(INTERMEDIATE_DIR)/snapshot_blob.bin', ] - }, { - 'conditional_snapshot_outputs': [ "<(INTERMEDIATE_DIR)/snapshot.cc" ], - 'mksnapshot_flags': [ '--startup_src', '<(INTERMEDIATE_DIR)/snapshot.cc', ] - }], - ['v8_embed_script != ""', { - 'conditional_inputs': [ '<(v8_embed_script)' ], - 'mksnapshot_flags': [ '<(v8_embed_script)' ], - }], - ], - }, 'sources': [ '<(SHARED_INTERMEDIATE_DIR)/experimental-extras-libraries.cc', '<(SHARED_INTERMEDIATE_DIR)/extras-libraries.cc', '<(SHARED_INTERMEDIATE_DIR)/libraries.cc', '../src/setup-isolate-deserialize.cc', - '../src/snapshot/embedded-empty.cc', ], 'actions': [ { 'action_name': 'run_mksnapshot', - 'message': 'generating: >@(conditional_snapshot_outputs)', + 'message': 'generating: >@(_outputs)', + 'variables': { + 'mksnapshot_flags': [ '--turbo_instruction_scheduling', ], + }, + 'conditions': [ + ['v8_enable_embedded_builtins == "true"', { + # In this case we use `embedded_variant "Default"` + # and `suffix = ''` for the template `embedded${suffix}.cc`. + 'outputs': [ '<(INTERMEDIATE_DIR)/embedded.cc' ], + 'variables': { + 'mksnapshot_flags': [ + '--embedded_src', '<(INTERMEDIATE_DIR)/embedded.cc', + '--embedded_variant', 'Default', + ], + }, + }, { + 'outputs': [ '../src/snapshot/embedded-empty.cc' ] + }], + ['v8_random_seed != 0', { + 'variables': { + 'mksnapshot_flags': [ '--random-seed', '<(v8_random_seed)' ], + }, + }], + ['v8_os_page_size != 0', { + 'variables': { + 'mksnapshot_flags': [ '--v8_os_page_size', '<(v8_os_page_size)' ], + }, + }], + ['v8_use_external_startup_data !=0 ', { + 'outputs': [ '<(INTERMEDIATE_DIR)/snapshot_blob.bin', ], + 'variables': { + 'mksnapshot_flags': [ '--startup_blob', '<(INTERMEDIATE_DIR)/snapshot_blob.bin', ], + }, + }, { + 'outputs': [ "<(INTERMEDIATE_DIR)/snapshot.cc" ], + 'variables': { + 'mksnapshot_flags': [ '--startup_src', '<(INTERMEDIATE_DIR)/snapshot.cc', ], + }, + }], + ['v8_embed_script != ""', { + 'inputs': [ '<(v8_embed_script)' ], + 'variables': { + 'mksnapshot_flags': [ '<(v8_embed_script)' ], + }, + }], + ], 'inputs': [ '<(mksnapshot_exec)', - '>@(conditional_inputs)', - ], - 'outputs': [ - '>@(conditional_snapshot_outputs)', ], 'process_outputs_as_sources': 1, 'action': [ @@ -467,7 +519,9 @@ 'dependencies': [ 'v8_libbase', 'v8_libsampler', - 'v8_torque#host', + # Code generators + 'torque#host', + 'generate_bytecode_builtins_list#host', ], 'direct_dependent_settings': { 'include_dirs': ['<(SHARED_INTERMEDIATE_DIR)'], @@ -1586,6 +1640,7 @@ '../src/zone/zone-segment.h', '../src/zone/zone.cc', '../src/zone/zone.h', + '<(generate_bytecode_builtins_list_output)', '<@(torque_generated_pure_headers)', ], 'conditions': [ @@ -1966,6 +2021,23 @@ ], }], ], + 'actions': [ + { + 'action_name': 'run_torque_action', + 'inputs': [ # Order matters. + '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)torque<(EXECUTABLE_SUFFIX)', + '<@(torque_files)', + ], + 'outputs': [ + '<@(torque_outputs)', + '<@(torque_generated_pure_headers)', + ], + 'action': [ + '<@(_inputs)', + '-o', '<(SHARED_INTERMEDIATE_DIR)/torque-generated' + ], + }, + ], }, # v8_base { 'target_name': 'v8_libbase', @@ -2581,31 +2653,18 @@ ], }, # js2c { - 'target_name': 'torque', - 'type': 'executable', + 'target_name': 'torque_base', + 'type': '<(component)', 'toolsets': ['host'], - 'dependencies': ['v8_libbase'], + 'dependencies': ['v8_libbase#host'], 'defines!': [ '_HAS_EXCEPTIONS=0', 'BUILDING_V8_SHARED=1', ], - # This is defined trough `configurations` for GYP+ninja compatibility - 'configurations': { - 'Debug': { - 'msvs_settings': { - 'VCCLCompilerTool': { - 'RuntimeTypeInfo': 'true', - 'ExceptionHandling': 1, - }, - } - }, - 'Release': { - 'msvs_settings': { - 'VCCLCompilerTool': { - 'RuntimeTypeInfo': 'true', - 'ExceptionHandling': 1, - }, - } + 'msvs_settings': { + 'VCCLCompilerTool': { + 'RuntimeTypeInfo': 'true', + 'ExceptionHandling': 1, }, }, 'sources': [ @@ -2636,7 +2695,6 @@ '../src/torque/source-positions.h', '../src/torque/torque-parser.cc', '../src/torque/torque-parser.h', - '../src/torque/torque.cc', '../src/torque/type-oracle.cc', '../src/torque/type-oracle.h', '../src/torque/types.cc', @@ -2646,43 +2704,24 @@ ], }, # torque_base { - 'target_name': 'v8_torque', - 'type': 'none', + 'target_name': 'torque', + 'type': 'executable', 'toolsets': ['host'], - 'dependencies': ['torque#host'], - 'direct_dependent_settings': { - 'include_dirs+': ['<(SHARED_INTERMEDIATE_DIR)'], - }, - 'actions': [ - { - 'action_name': 'run_torque', - 'inputs': [ # Order matters. - '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)torque<(EXECUTABLE_SUFFIX)', - '../src/builtins/base.tq', - '../src/builtins/array.tq', - '../src/builtins/array-copywithin.tq', - '../src/builtins/array-foreach.tq', - '../src/builtins/array-lastindexof.tq', - '../src/builtins/array-reverse.tq', - '../src/builtins/array-splice.tq', - '../src/builtins/array-unshift.tq', - '../src/builtins/typed-array.tq', - '../src/builtins/data-view.tq', - '../third_party/v8/builtins/array-sort.tq', - ], - 'outputs': [ - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtin-definitions-from-dsl.h', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-array-from-dsl-gen.cc', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-array-from-dsl-gen.h', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-base-from-dsl-gen.cc', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-base-from-dsl-gen.h', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-typed-array-from-dsl-gen.cc', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-typed-array-from-dsl-gen.h', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-data-view-from-dsl-gen.cc', - '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-data-view-from-dsl-gen.h', - ], - 'action': ['<@(_inputs)', '-o', '<(SHARED_INTERMEDIATE_DIR)/torque-generated'], + 'dependencies': ['torque_base'], + 'defines!': [ + '_HAS_EXCEPTIONS=0', + 'BUILDING_V8_SHARED=1', + ], + # This is defined trough `configurations` for GYP+ninja compatibility + 'msvs_settings': { + 'VCCLCompilerTool': { + 'RuntimeTypeInfo': 'true', + 'ExceptionHandling': 1, }, + }, + 'include_dirs': ['..'], + 'sources': [ + "../src/torque/torque.cc", ], }, # torque { @@ -2773,6 +2812,47 @@ }], ], }, # mksnapshot + { + 'target_name': 'bytecode_builtins_list_generator', + 'type': 'executable', + 'toolsets': ['host'], + 'dependencies': [ + "v8_libbase#host" + ], + 'include_dirs': [".."], + 'sources': [ + "../src/builtins/generate-bytecodes-builtins-list.cc", + "../src/interpreter/bytecode-operands.cc", + "../src/interpreter/bytecode-operands.h", + "../src/interpreter/bytecodes.cc", + "../src/interpreter/bytecodes.h", + ], + }, # bytecode_builtins_list_generator + { + 'target_name': 'generate_bytecode_builtins_list', + 'type': 'none', + 'toolsets': ['host'], + 'dependencies': [ + "bytecode_builtins_list_generator", + ], + 'actions': [ + { + 'action_name': 'generate_bytecode_builtins_list_action', + 'inputs': [ + '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)bytecode_builtins_list_generator<(EXECUTABLE_SUFFIX)', + ], + 'outputs': [ + '<(generate_bytecode_builtins_list_output)', + ], + 'action': [ + 'python', + '../tools/run.py', + '<@(_inputs)', + '<@(_outputs)', + ], + }, + ], + }, # generate_bytecode_builtins_list { 'includes': [ 'v8_external_snapshot.gypi' ], }, # v8_external_snapshot diff --git a/deps/v8/gypfiles/v8_external_snapshot.gypi b/deps/v8/gypfiles/v8_external_snapshot.gypi index 0a1d7ad5a4b802..8c08e5e32b8c32 100644 --- a/deps/v8/gypfiles/v8_external_snapshot.gypi +++ b/deps/v8/gypfiles/v8_external_snapshot.gypi @@ -3,7 +3,7 @@ 'target_name': 'v8_external_snapshot', 'type': 'static_library', 'conditions': [ - [ 'v8_use_external_startup_data==1', { + ['v8_use_external_startup_data==1', { 'conditions': [ ['want_separate_host_toolset==1', { 'toolsets': ['host', 'target'], @@ -11,14 +11,14 @@ 'mksnapshot#host', 'js2c#host', 'natives_blob', - ]}, { - 'toolsets': ['target'], - 'dependencies': [ - 'mksnapshot', - 'js2c', - 'natives_blob', - ], - }], + ]}, { + 'toolsets': ['target'], + 'dependencies': [ + 'mksnapshot', + 'js2c', + 'natives_blob', + ], + }], ['component=="shared_library"', { 'defines': [ 'BUILDING_V8_SHARED', @@ -33,7 +33,7 @@ 'dependencies': [ 'v8_base', ], - 'include_dirs+': [ + 'include_dirs': [ '..', '<(DEPTH)', ], @@ -42,6 +42,7 @@ '../src/snapshot/embedded-empty.cc', '../src/snapshot/natives-external.cc', '../src/snapshot/snapshot-external.cc', + '<(embedded_builtins_snapshot_src)', ], 'actions': [ { @@ -61,17 +62,23 @@ ['v8_os_page_size!=0', { 'mksnapshot_flags': ['--v8_os_page_size', '<(v8_os_page_size)'], }], + ['v8_enable_embedded_builtins="true"', { + # 'embedded_builtins_snapshot_src': [ "$target_gen_dir/embedded${suffix}.cc" ], + # 'mksnapshot_flags': ["--embedded_src", "$target_gen_dir/embedded${suffix}.cc",], + # if (invoker.embedded_variant != "") { + # args += [ + # "--embedded_variant", + # invoker.embedded_variant, + # ] + # } + }, + ], ], }, 'conditions': [ - ['embed_script!=""', { + ['v8_embed_script!=""', { 'inputs': [ - '<(embed_script)', - ], - }], - ['warmup_script!=""', { - 'inputs': [ - '<(warmup_script)', + '<(v8_embed_script)', ], }], ['want_separate_host_toolset==1', { @@ -79,6 +86,7 @@ ['_toolset=="host"', { 'outputs': [ '<(PRODUCT_DIR)/snapshot_blob_host.bin', + '<(embedded_builtins_snapshot_src)' ], 'action': [ '<(mksnapshot_exec)', @@ -88,30 +96,31 @@ '<(warmup_script)', ], }, { - 'outputs': [ - '<(PRODUCT_DIR)/snapshot_blob.bin', - ], - 'action': [ - '<(mksnapshot_exec)', - '<@(mksnapshot_flags)', - '--startup_blob', '<(PRODUCT_DIR)/snapshot_blob.bin', - '<(embed_script)', - '<(warmup_script)', - ], - }], + 'outputs': [ + '<(PRODUCT_DIR)/snapshot_blob.bin', + ], + 'action': [ + '<(mksnapshot_exec)', + '<@(mksnapshot_flags)', + '--startup_blob', '<(PRODUCT_DIR)/snapshot_blob.bin', + '<(embed_script)', + '<(warmup_script)', + ], + }], ], }, { - 'outputs': [ - '<(PRODUCT_DIR)/snapshot_blob.bin', - ], - 'action': [ - '<(mksnapshot_exec)', - '<@(mksnapshot_flags)', - '--startup_blob', '<(PRODUCT_DIR)/snapshot_blob.bin', - '<(embed_script)', - '<(warmup_script)', - ], - }], + 'outputs': [ + '<(PRODUCT_DIR)/snapshot_blob.bin', + '<(embedded_builtins_snapshot_src)' + ], + 'action': [ + '<(mksnapshot_exec)', + '<@(mksnapshot_flags)', + '--startup_blob', '<(PRODUCT_DIR)/snapshot_blob.bin', + '<(embed_script)', + '<(warmup_script)', + ], + }], ], }, ],