summaryrefslogtreecommitdiff
path: root/chromium/tools/v8_context_snapshot/BUILD.gn
blob: b9254d95d95553a02d74742d8f3dcb944f70ac93 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# 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/edk",
      "//services/service_manager/public/cpp",
      "//third_party/blink/public:blink",
      "//v8",
    ]

    if (is_linux && (is_component_build || using_sanitizer) &&
        use_custom_libcxx) {
      deps += [ "//buildtools/third_party/libc++:libc++" ]
    }

    configs += [
      "//v8:external_startup_data",
      ":disable_icf",
    ]
  }
}