| # 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 = [ |
| "-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" ] |
| } |