File: BUILD.gn

package info (click to toggle)
chromium 120.0.6099.224-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 6,112,112 kB
  • sloc: cpp: 32,907,025; ansic: 8,148,123; javascript: 3,679,536; python: 2,031,248; asm: 959,718; java: 804,675; xml: 617,256; sh: 111,417; objc: 100,835; perl: 88,443; cs: 53,032; makefile: 29,579; fortran: 24,137; php: 21,162; tcl: 21,147; sql: 20,809; ruby: 17,735; pascal: 12,864; yacc: 8,045; lisp: 3,388; lex: 1,323; ada: 727; awk: 329; jsp: 267; csh: 117; exp: 43; sed: 37
file content (115 lines) | stat: -rw-r--r-- 3,932 bytes parent folder | download
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
# Copyright 2017 The Chromium Authors
# 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/buildflag_header.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($v8_snapshot_toolchain)" ]
    if (!is_android) {
      data = [ "$root_out_dir/$v8_context_snapshot_filename" ]
    }
  }
}

buildflag_header("buildflags") {
  header = "buildflags.h"
  flags = [
    "USE_V8_CONTEXT_SNAPSHOT=$use_v8_context_snapshot",
    "V8_CONTEXT_SNAPSHOT_FILENAME=\"$v8_context_snapshot_filename\"",
  ]
}

if (use_v8_context_snapshot) {
  if (v8_snapshot_toolchain == current_toolchain) {
    action("generate_v8_context_snapshot") {
      script = "//build/gn_run_binary.py"

      output_file = "$root_build_dir/$v8_context_snapshot_filename"
      output_path = rebase_path(output_file, root_build_dir)

      args = [
        "./" + rebase_path(get_label_info(":v8_context_snapshot_generator",
                                          "root_out_dir") +
                               "/v8_context_snapshot_generator",
                           root_build_dir),
        "--output_file=$output_path",
      ]

      deps = [ ":v8_context_snapshot_generator" ]

      # TODO(sky): figure out why this doesn't work on android cross compile.
      # In the case of compiling for the snapshot `shlib_extension` is ".so"
      # (which is expected), but on disk ".cr.so" is generate, which ends up
      # causing gn to fail.
      if (is_component_build && target_os != "android") {
        # 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 ]
    }

    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",
      ]
    }
  }

  # 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 && !use_lld) {
      ldflags = [ "-Wl,-no_deduplicate" ]  # ld64.
    } else if (use_gold || use_lld) {
      ldflags = [ "-Wl,--icf=none" ]
    }
  }
}