xref: /aosp_15_r20/external/pigweed/pw_metric/BUILD.gn (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2020 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker#
3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker# the License at
6*61c4878aSAndroid Build Coastguard Worker#
7*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker#
9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker# the License.
14*61c4878aSAndroid Build Coastguard Worker
15*61c4878aSAndroid Build Coastguard Workerimport("//build_overrides/pigweed.gni")
16*61c4878aSAndroid Build Coastguard Worker
17*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_bloat/bloat.gni")
18*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/target_types.gni")
19*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_docgen/docs.gni")
20*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_protobuf_compiler/proto.gni")
21*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_third_party/nanopb/nanopb.gni")
22*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_unit_test/test.gni")
23*61c4878aSAndroid Build Coastguard Worker
24*61c4878aSAndroid Build Coastguard Workerconfig("default_config") {
25*61c4878aSAndroid Build Coastguard Worker  include_dirs = [ "public" ]
26*61c4878aSAndroid Build Coastguard Worker}
27*61c4878aSAndroid Build Coastguard Worker
28*61c4878aSAndroid Build Coastguard Workerpw_source_set("pw_metric") {
29*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":default_config" ]
30*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_metric/metric.h" ]
31*61c4878aSAndroid Build Coastguard Worker  sources = [ "metric.cc" ]
32*61c4878aSAndroid Build Coastguard Worker  public_deps = [
33*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_tokenizer:base64",
34*61c4878aSAndroid Build Coastguard Worker    dir_pw_assert,
35*61c4878aSAndroid Build Coastguard Worker    dir_pw_containers,
36*61c4878aSAndroid Build Coastguard Worker    dir_pw_log,
37*61c4878aSAndroid Build Coastguard Worker    dir_pw_tokenizer,
38*61c4878aSAndroid Build Coastguard Worker  ]
39*61c4878aSAndroid Build Coastguard Worker  deps = [ dir_pw_span ]
40*61c4878aSAndroid Build Coastguard Worker
41*61c4878aSAndroid Build Coastguard Worker  # TODO: b/259746255 - Remove this when everything compiles with -Wconversion.
42*61c4878aSAndroid Build Coastguard Worker  configs = [ "$dir_pw_build:conversion_warnings" ]
43*61c4878aSAndroid Build Coastguard Worker}
44*61c4878aSAndroid Build Coastguard Worker
45*61c4878aSAndroid Build Coastguard Worker# This gives access to the "PW_METRIC_GLOBAL()" macros, for globally-registered
46*61c4878aSAndroid Build Coastguard Worker# metric definitions.
47*61c4878aSAndroid Build Coastguard Workerpw_source_set("global") {
48*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":default_config" ]
49*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_metric/global.h" ]
50*61c4878aSAndroid Build Coastguard Worker  sources = [ "global.cc" ]
51*61c4878aSAndroid Build Coastguard Worker  public_deps = [
52*61c4878aSAndroid Build Coastguard Worker    ":pw_metric",
53*61c4878aSAndroid Build Coastguard Worker    dir_pw_tokenizer,
54*61c4878aSAndroid Build Coastguard Worker  ]
55*61c4878aSAndroid Build Coastguard Worker  deps = [ dir_pw_polyfill ]
56*61c4878aSAndroid Build Coastguard Worker}
57*61c4878aSAndroid Build Coastguard Worker
58*61c4878aSAndroid Build Coastguard Worker################################################################################
59*61c4878aSAndroid Build Coastguard Worker# Service
60*61c4878aSAndroid Build Coastguard Workerpw_proto_library("metric_service_proto") {
61*61c4878aSAndroid Build Coastguard Worker  sources = [ "pw_metric_proto/metric_service.proto" ]
62*61c4878aSAndroid Build Coastguard Worker  inputs = [
63*61c4878aSAndroid Build Coastguard Worker    "pw_metric_proto/metric_service.options",
64*61c4878aSAndroid Build Coastguard Worker    "pw_metric_proto/metric_service.pwpb_options",
65*61c4878aSAndroid Build Coastguard Worker  ]
66*61c4878aSAndroid Build Coastguard Worker}
67*61c4878aSAndroid Build Coastguard Worker
68*61c4878aSAndroid Build Coastguard Worker# TODO(keir): Consider moving the nanopb service into the nanopb/ directory
69*61c4878aSAndroid Build Coastguard Worker# instead of having it directly inside pw_metric/.
70*61c4878aSAndroid Build Coastguard Worker
71*61c4878aSAndroid Build Coastguard Worker# Common MetricWalker/MetricWriter used by RPC service.
72*61c4878aSAndroid Build Coastguard Workerpw_source_set("metric_walker") {
73*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
74*61c4878aSAndroid Build Coastguard Worker  public = [ "pw_metric_private/metric_walker.h" ]
75*61c4878aSAndroid Build Coastguard Worker  deps = [
76*61c4878aSAndroid Build Coastguard Worker    ":pw_metric",
77*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_assert:assert",
78*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_containers",
79*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_status",
80*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_tokenizer",
81*61c4878aSAndroid Build Coastguard Worker  ]
82*61c4878aSAndroid Build Coastguard Worker}
83*61c4878aSAndroid Build Coastguard Worker
84*61c4878aSAndroid Build Coastguard Workerif (dir_pw_third_party_nanopb != "") {
85*61c4878aSAndroid Build Coastguard Worker  pw_source_set("metric_service_nanopb") {
86*61c4878aSAndroid Build Coastguard Worker    public_configs = [ ":default_config" ]
87*61c4878aSAndroid Build Coastguard Worker    public_deps = [
88*61c4878aSAndroid Build Coastguard Worker      ":metric_service_proto.nanopb_rpc",
89*61c4878aSAndroid Build Coastguard Worker      ":pw_metric",
90*61c4878aSAndroid Build Coastguard Worker      dir_pw_span,
91*61c4878aSAndroid Build Coastguard Worker    ]
92*61c4878aSAndroid Build Coastguard Worker    public = [ "public/pw_metric/metric_service_nanopb.h" ]
93*61c4878aSAndroid Build Coastguard Worker    deps = [
94*61c4878aSAndroid Build Coastguard Worker      ":metric_service_proto.nanopb_rpc",
95*61c4878aSAndroid Build Coastguard Worker      ":metric_walker",
96*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_containers:vector",
97*61c4878aSAndroid Build Coastguard Worker      dir_pw_tokenizer,
98*61c4878aSAndroid Build Coastguard Worker    ]
99*61c4878aSAndroid Build Coastguard Worker    sources = [ "metric_service_nanopb.cc" ]
100*61c4878aSAndroid Build Coastguard Worker  }
101*61c4878aSAndroid Build Coastguard Worker
102*61c4878aSAndroid Build Coastguard Worker  pw_test("metric_service_nanopb_test") {
103*61c4878aSAndroid Build Coastguard Worker    deps = [
104*61c4878aSAndroid Build Coastguard Worker      ":global",
105*61c4878aSAndroid Build Coastguard Worker      ":metric_service_nanopb",
106*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_rpc/nanopb:test_method_context",
107*61c4878aSAndroid Build Coastguard Worker    ]
108*61c4878aSAndroid Build Coastguard Worker    sources = [ "metric_service_nanopb_test.cc" ]
109*61c4878aSAndroid Build Coastguard Worker  }
110*61c4878aSAndroid Build Coastguard Worker}
111*61c4878aSAndroid Build Coastguard Worker
112*61c4878aSAndroid Build Coastguard Workerpw_source_set("metric_service_pwpb") {
113*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":default_config" ]
114*61c4878aSAndroid Build Coastguard Worker  public_deps = [
115*61c4878aSAndroid Build Coastguard Worker    ":metric_service_proto.raw_rpc",
116*61c4878aSAndroid Build Coastguard Worker    ":metric_walker",
117*61c4878aSAndroid Build Coastguard Worker    ":pw_metric",
118*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_bytes",
119*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_containers",
120*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_rpc/raw:server_api",
121*61c4878aSAndroid Build Coastguard Worker  ]
122*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_metric/metric_service_pwpb.h" ]
123*61c4878aSAndroid Build Coastguard Worker  deps = [
124*61c4878aSAndroid Build Coastguard Worker    ":metric_service_proto.pwpb",
125*61c4878aSAndroid Build Coastguard Worker    ":metric_service_proto.raw_rpc",
126*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_assert",
127*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_containers:vector",
128*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_preprocessor",
129*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_span",
130*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_status",
131*61c4878aSAndroid Build Coastguard Worker  ]
132*61c4878aSAndroid Build Coastguard Worker  sources = [ "metric_service_pwpb.cc" ]
133*61c4878aSAndroid Build Coastguard Worker}
134*61c4878aSAndroid Build Coastguard Worker
135*61c4878aSAndroid Build Coastguard Workerpw_test("metric_service_pwpb_test") {
136*61c4878aSAndroid Build Coastguard Worker  deps = [
137*61c4878aSAndroid Build Coastguard Worker    ":global",
138*61c4878aSAndroid Build Coastguard Worker    ":metric_service_proto.pwpb",
139*61c4878aSAndroid Build Coastguard Worker    ":metric_service_pwpb",
140*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_rpc/pwpb:test_method_context",
141*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_rpc/raw:test_method_context",
142*61c4878aSAndroid Build Coastguard Worker  ]
143*61c4878aSAndroid Build Coastguard Worker  sources = [ "metric_service_pwpb_test.cc" ]
144*61c4878aSAndroid Build Coastguard Worker}
145*61c4878aSAndroid Build Coastguard Worker
146*61c4878aSAndroid Build Coastguard Worker################################################################################
147*61c4878aSAndroid Build Coastguard Worker
148*61c4878aSAndroid Build Coastguard Workerpw_test_group("tests") {
149*61c4878aSAndroid Build Coastguard Worker  tests = [
150*61c4878aSAndroid Build Coastguard Worker    ":metric_test",
151*61c4878aSAndroid Build Coastguard Worker    ":global_test",
152*61c4878aSAndroid Build Coastguard Worker    ":metric_service_pwpb_test",
153*61c4878aSAndroid Build Coastguard Worker  ]
154*61c4878aSAndroid Build Coastguard Worker  if (dir_pw_third_party_nanopb != "") {
155*61c4878aSAndroid Build Coastguard Worker    tests += [ ":metric_service_nanopb_test" ]
156*61c4878aSAndroid Build Coastguard Worker  }
157*61c4878aSAndroid Build Coastguard Worker}
158*61c4878aSAndroid Build Coastguard Worker
159*61c4878aSAndroid Build Coastguard Workerpw_test("metric_test") {
160*61c4878aSAndroid Build Coastguard Worker  sources = [ "metric_test.cc" ]
161*61c4878aSAndroid Build Coastguard Worker  deps = [ ":pw_metric" ]
162*61c4878aSAndroid Build Coastguard Worker}
163*61c4878aSAndroid Build Coastguard Worker
164*61c4878aSAndroid Build Coastguard Workerpw_test("global_test") {
165*61c4878aSAndroid Build Coastguard Worker  sources = [ "global_test.cc" ]
166*61c4878aSAndroid Build Coastguard Worker  deps = [ ":global" ]
167*61c4878aSAndroid Build Coastguard Worker
168*61c4878aSAndroid Build Coastguard Worker  # TODO: https://pwbug.dev/325509758 - Doesn't work on the Pico yet; has test
169*61c4878aSAndroid Build Coastguard Worker  # failures.
170*61c4878aSAndroid Build Coastguard Worker  if (pw_build_EXECUTABLE_TARGET_TYPE == "pico_executable") {
171*61c4878aSAndroid Build Coastguard Worker    enable_if = false
172*61c4878aSAndroid Build Coastguard Worker  }
173*61c4878aSAndroid Build Coastguard Worker}
174*61c4878aSAndroid Build Coastguard Worker
175*61c4878aSAndroid Build Coastguard Workerpw_size_diff("metric_size_report") {
176*61c4878aSAndroid Build Coastguard Worker  title = "Typical pw_metric use (no RPC service)"
177*61c4878aSAndroid Build Coastguard Worker
178*61c4878aSAndroid Build Coastguard Worker  binaries = [
179*61c4878aSAndroid Build Coastguard Worker    {
180*61c4878aSAndroid Build Coastguard Worker      target = "size_report:one_metric"
181*61c4878aSAndroid Build Coastguard Worker      base = "size_report:base"
182*61c4878aSAndroid Build Coastguard Worker      label = "1 metric and 1 group no dump or export"
183*61c4878aSAndroid Build Coastguard Worker    },
184*61c4878aSAndroid Build Coastguard Worker    {
185*61c4878aSAndroid Build Coastguard Worker      target = "size_report:dump"
186*61c4878aSAndroid Build Coastguard Worker      base = "size_report:base"
187*61c4878aSAndroid Build Coastguard Worker      label = "(+) dump group and metrics to log"
188*61c4878aSAndroid Build Coastguard Worker    },
189*61c4878aSAndroid Build Coastguard Worker    {
190*61c4878aSAndroid Build Coastguard Worker      target = "size_report:more_metrics"
191*61c4878aSAndroid Build Coastguard Worker      base = "size_report:dump"
192*61c4878aSAndroid Build Coastguard Worker      label = "(+) 1 group (+) 4 metrics"
193*61c4878aSAndroid Build Coastguard Worker    },
194*61c4878aSAndroid Build Coastguard Worker  ]
195*61c4878aSAndroid Build Coastguard Worker}
196*61c4878aSAndroid Build Coastguard Worker
197*61c4878aSAndroid Build Coastguard Workerpw_doc_group("docs") {
198*61c4878aSAndroid Build Coastguard Worker  sources = [ "docs.rst" ]
199*61c4878aSAndroid Build Coastguard Worker  report_deps = [ ":metric_size_report" ]
200*61c4878aSAndroid Build Coastguard Worker}
201