@@ -18,8 +18,11 @@ import("//build_overrides/googletest.gni")
18
18
import (" //build_overrides/pigweed.gni" )
19
19
20
20
import (" ${ chip_root } /build/chip/tests.gni" )
21
+ import (" ${ dir_pw_build } /python.gni" )
21
22
import (" ${ dir_pw_unit_test } /test.gni" )
22
23
24
+ # Need access to build options (specifically build_coverage)
25
+ import (" ${ build_root } /config/compiler/compiler.gni" )
23
26
assert (chip_build_tests )
24
27
25
28
declare_args () {
@@ -112,6 +115,26 @@ template("chip_test_suite") {
112
115
_test_output_dir = invoker .output_dir
113
116
}
114
117
118
+ if (use_coverage && is_clang ) {
119
+ # Generates clang coverage to "<TestName>.profraw" instead of "deafault.profraw"
120
+ _clang_coverage_setup = " ${ root_build_dir } /clang_static_coverage_config/${ _test_name } ClangCoverageConfig.cpp"
121
+ pw_python_action (" ${ _test_name } -clang-coverage" ) {
122
+ script = " ${ chip_root } /scripts/build/clang_coverage_wrapper.py"
123
+ outputs = [ _clang_coverage_setup ]
124
+ args = [
125
+ " --output" ,
126
+ rebase_path (_clang_coverage_setup ),
127
+ " --raw-profile-filename" ,
128
+ " coverage/${ _test_name } .profraw" ,
129
+ ]
130
+ }
131
+
132
+ source_set (" ${ _test_name } -clang-coverage-src" ) {
133
+ sources = [ _clang_coverage_setup ]
134
+ deps = [ " :${ _test_name } -clang-coverage" ]
135
+ }
136
+ }
137
+
115
138
pw_test (_test_name ) {
116
139
# Forward certain variables from the invoker.
117
140
forward_variables_from (invoker ,
@@ -125,6 +148,10 @@ template("chip_test_suite") {
125
148
# Link to the common lib for this suite so we get its `sources`.
126
149
public_deps += [ " :${ _suite_name } .lib" ]
127
150
151
+ if (use_coverage && is_clang ) {
152
+ public_deps += [ " :${ _test_name } -clang-coverage-src" ]
153
+ }
154
+
128
155
if (pw_unit_test_BACKEND == " $dir_pw_unit_test :googletest" ) {
129
156
test_main = " $dir_pigweed /third_party/googletest:gmock_main"
130
157
}
0 commit comments