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