Source code
Revision control
Copy as Markdown
Other Tools
# 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("//chromium/build/buildflag_header.gni")
import("//chromium/build/config/coverage/coverage.gni")
import("//chromium/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 += [ "//chromium/build/config/clang:compiler_profile" ]
}
}
cflags = [
"-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",
]
# 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/40175589): Remove this flag.
cflags += [ "-fno-use-cxa-atexit" ]
}
}
}
buildflag_header("buildflags") {
header = "buildflags.h"
flags = [ "USE_JAVASCRIPT_COVERAGE=$use_javascript_coverage" ]
}