| # 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/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.bin", |
| ] |
| } |
| } |
| } |
| |
| config("use_v8_context_snapshot") { |
| if (use_v8_context_snapshot) { |
| defines = [ "USE_V8_CONTEXT_SNAPSHOT" ] |
| } |
| } |
| |
| if (use_v8_context_snapshot) { |
| if (is_android && enable_java_templates) { |
| android_assets("v8_context_snapshot_assets") { |
| deps = [ |
| ":v8_context_snapshot", |
| ] |
| sources = [ |
| "$root_out_dir/natives_blob.bin", |
| ] |
| renaming_sources = [ "$root_out_dir/v8_context_snapshot.bin" ] |
| 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.bin" |
| 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", |
| ] |
| |
| outputs = [ |
| output_file, |
| ] |
| |
| deps = [ |
| ":v8_context_snapshot_generator($v8_snapshot_toolchain)", |
| ] |
| } |
| |
| # 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 (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", |
| ] |
| } |
| } |