aboutsummaryrefslogtreecommitdiff
path: root/build/config/coverage/BUILD.gn
blob: 2939e37f48b77c9b4c3e6364bab7bf4bdc138fd7 (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
# 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.

import("//build/buildflag_header.gni")
import("//build/config/coverage/coverage.gni")
import("//build/config/rust.gni")

config("default_coverage") {
  if (use_clang_coverage) {
    configs = []
    ldflags = []
    rustflags = []
    if (!is_win) {
      ldflags += [ "-fprofile-instr-generate" ]
    } else {
      # Windows directly calls link.exe instead of the compiler driver when
      # linking, and embeds the path to the profile runtime library as
      # dependent library into each object file.
      #
      # However... some build targets have no C++ object file (they have Rust
      # instead), and thus the linker ends up not pulling in the profile
      # library. So we add an edge to it directly.
      if (toolchain_has_rust) {
        configs += [ "//build/config/clang:compiler_profile" ]
      }
    }

    cflags = [
      # LINT.IfChange
      "-fprofile-instr-generate",
      "-fcoverage-mapping",
      "-mllvm",
      "-runtime-counter-relocation=true",

      # Following experimental flags removes unused header functions from the
      # coverage mapping data embedded in the test binaries, and the reduction
      # of binary size enables building Chrome's large unit test targets on
      # MacOS. Please refer to crbug.com/796290 for more details.
      "-mllvm",
      "-limited-coverage-experimental=true",

      # LINT.ThenChange(
      #     /build/config/siso/clang_code_coverage_wrapper.star,
      #     /build/toolchain/clang_code_coverage_wrapper.py,
      # )
    ]

    # Rust coverage is gated on using the Chromium-built Rust toolchain as it
    # needs to have a compatible LLVM version with the C++ compiler and the LLVM
    # tools that will be used to process the coverage output. This is because
    # the coverage file format is not stable.
    if (use_chromium_rust_toolchain) {
      rustflags += [
        "-Cinstrument-coverage",
        "-Cllvm-args=-runtime-counter-relocation",
      ]
    }

    if (is_linux || is_chromeos) {
      # TODO(crbug.com/1194301): Remove this flag.
      cflags += [ "-fno-use-cxa-atexit" ]
    }
  }
}

buildflag_header("buildflags") {
  header = "buildflags.h"
  flags = [ "USE_JAVASCRIPT_COVERAGE=$use_javascript_coverage" ]
}