| # Copyright 2017 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # Targets in ths file are to take a V8 context snapshot on build time. |
| # Created V8 context snapshot is used in |
| # third_party/WebKit/Source/bindings/core/v8/V8ContextSnapshot.{cpp|h}. |
| # to speedup creating a V8 context and setting up around it. |
| |
| import("//tools/v8_context_snapshot/v8_context_snapshot.gni") |
| |
| import("//build/config/c++/c++.gni") |
| import("//build/config/compiler/compiler.gni") |
| import("//v8/gni/snapshot_toolchain.gni") |
| |
| if (is_android) { |
| import("//build/config/android/rules.gni") |
| } |
| |
| group("v8_context_snapshot") { |
| if (use_v8_context_snapshot) { |
| public_deps = [ ":generate_v8_context_snapshot" ] |
| if (!is_android) { |
| data = [ "$root_out_dir/$v8_context_snapshot_filename" ] |
| } |
| } |
| } |
| |
| config("use_v8_context_snapshot") { |
| if (use_v8_context_snapshot) { |
| defines = [ |
| "USE_V8_CONTEXT_SNAPSHOT", |
| "V8_CONTEXT_SNAPSHOT_FILENAME=\"$v8_context_snapshot_filename\"", |
| ] |
| } |
| } |
| |
| if (use_v8_context_snapshot) { |
| if (is_android && enable_java_templates) { |
| android_assets("v8_context_snapshot_assets") { |
| deps = [ ":v8_context_snapshot" ] |
| renaming_sources = [ "$root_out_dir/$v8_context_snapshot_filename" ] |
| if (current_cpu == "arm" || current_cpu == "x86" || |
| current_cpu == "mipsel") { |
| renaming_destinations = [ "v8_context_snapshot_32.bin" ] |
| } else { |
| renaming_destinations = [ "v8_context_snapshot_64.bin" ] |
| } |
| disable_compression = true |
| } |
| } |
| |
| action("generate_v8_context_snapshot") { |
| script = "//build/gn_run_binary.py" |
| output_file = "$root_out_dir/$v8_context_snapshot_filename" |
| output_path = rebase_path(output_file, root_build_dir) |
| |
| args = [ |
| "./" + rebase_path( |
| get_label_info( |
| ":v8_context_snapshot_generator($v8_snapshot_toolchain)", |
| "root_out_dir") + "/v8_context_snapshot_generator", |
| root_build_dir), |
| "--output_file=$output_path", |
| ] |
| |
| deps = [ ":v8_context_snapshot_generator($v8_snapshot_toolchain)" ] |
| |
| if (is_component_build) { |
| # In the component build mode, the snapshot should be updated when any of |
| # the generator executable or the shared libraries get updated. Note that |
| # it's possible that some of the shared libraries are updated without |
| # having the executable updated. |
| inputs = [ |
| "$root_out_dir/${shlib_prefix}blink_core${shlib_extension}", |
| "$root_out_dir/${shlib_prefix}blink_modules${shlib_extension}", |
| "$root_out_dir/${shlib_prefix}blink_platform${shlib_extension}", |
| "$root_out_dir/${shlib_prefix}v8${shlib_extension}", |
| ] |
| |
| deps += [ |
| "//third_party/blink/renderer/bindings:v8_context_snapshot_influential_libs", |
| "//v8", |
| ] |
| } |
| |
| outputs = [ output_file ] |
| } |
| |
| # This config disables a link time optimization "ICF", which may merge |
| # different functions into one if the function signature and body of them are |
| # identical. |
| # |
| # ICF breaks 1:1 mappings of the external references for V8 snapshot, so we |
| # disable it while taking a V8 snapshot. |
| config("disable_icf") { |
| visibility = [ ":*" ] # Only targets in this file can depend on this. |
| if (is_win) { |
| ldflags = [ "/OPT:NOICF" ] # link.exe, but also lld-link.exe. |
| } else if (is_apple) { |
| ldflags = [ "-Wl,-no_deduplicate" ] # ld64, and ld64.lld. |
| } else if (use_gold || use_lld) { |
| ldflags = [ "-Wl,--icf=none" ] |
| } |
| } |
| |
| executable("v8_context_snapshot_generator") { |
| sources = [ "v8_context_snapshot_generator.cc" ] |
| |
| deps = [ |
| "//gin:gin", |
| "//mojo/core/embedder", |
| "//services/service_manager/public/cpp", |
| "//third_party/blink/public:blink", |
| "//v8", |
| ] |
| |
| configs += [ |
| "//v8:external_startup_data", |
| ":disable_icf", |
| ] |
| } |
| } |