1# Copyright 2020 The Pigweed Authors 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4# use this file except in compliance with the License. You may obtain a copy of 5# the License at 6# 7# https://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12# License for the specific language governing permissions and limitations under 13# the License. 14 15import("//build_overrides/pigweed.gni") 16 17import("$dir_pw_bloat/bloat.gni") 18import("$dir_pw_build/target_types.gni") 19import("$dir_pw_docgen/docs.gni") 20import("$dir_pw_protobuf_compiler/proto.gni") 21import("$dir_pw_third_party/nanopb/nanopb.gni") 22import("$dir_pw_unit_test/test.gni") 23 24config("default_config") { 25 include_dirs = [ "public" ] 26} 27 28pw_source_set("pw_metric") { 29 public_configs = [ ":default_config" ] 30 public = [ "public/pw_metric/metric.h" ] 31 sources = [ "metric.cc" ] 32 public_deps = [ 33 "$dir_pw_tokenizer:base64", 34 dir_pw_assert, 35 dir_pw_containers, 36 dir_pw_log, 37 dir_pw_tokenizer, 38 ] 39} 40 41# This gives access to the "PW_METRIC_GLOBAL()" macros, for globally-registered 42# metric definitions. 43pw_source_set("global") { 44 public_configs = [ ":default_config" ] 45 public = [ "public/pw_metric/global.h" ] 46 sources = [ "global.cc" ] 47 public_deps = [ 48 ":pw_metric", 49 dir_pw_tokenizer, 50 ] 51} 52 53################################################################################ 54# Service 55pw_proto_library("metric_service_proto") { 56 sources = [ "pw_metric_proto/metric_service.proto" ] 57 inputs = [ "pw_metric_proto/metric_service.options" ] 58} 59 60# TODO(keir): Consider moving the nanopb service into the nanopb/ directory 61# instead of having it directly inside pw_metric/. 62if (dir_pw_third_party_nanopb != "") { 63 pw_source_set("metric_service_nanopb") { 64 public_configs = [ ":default_config" ] 65 public_deps = [ 66 ":metric_service_proto.nanopb_rpc", 67 ":pw_metric", 68 ] 69 public = [ "public/pw_metric/metric_service_nanopb.h" ] 70 deps = [ 71 ":metric_service_proto.nanopb_rpc", 72 "$dir_pw_containers:vector", 73 dir_pw_tokenizer, 74 ] 75 sources = [ "metric_service_nanopb.cc" ] 76 } 77 78 pw_test("metric_service_nanopb_test") { 79 deps = [ 80 ":global", 81 ":metric_service_nanopb", 82 "$dir_pw_rpc/nanopb:test_method_context", 83 ] 84 sources = [ "metric_service_nanopb_test.cc" ] 85 } 86} 87 88################################################################################ 89 90pw_test_group("tests") { 91 tests = [ 92 ":metric_test", 93 ":global_test", 94 ] 95 if (dir_pw_third_party_nanopb != "") { 96 tests += [ ":metric_service_nanopb_test" ] 97 } 98} 99 100pw_test("metric_test") { 101 sources = [ "metric_test.cc" ] 102 deps = [ ":pw_metric" ] 103} 104 105pw_test("global_test") { 106 sources = [ "global_test.cc" ] 107 deps = [ ":global" ] 108} 109 110pw_size_report("metric_size_report") { 111 title = "Typical pw_metric use (no RPC service)" 112 113 # To see all the symbols, uncomment the following: 114 # Note: The size report RST table won't be generated when full_report = true. 115 #full_report = true 116 117 binaries = [ 118 { 119 target = "size_report:one_metric" 120 base = "size_report:base" 121 label = "1 metric and 1 group no dump or export" 122 }, 123 { 124 target = "size_report:dump" 125 base = "size_report:base" 126 label = "(+) dump group and metrics to log" 127 }, 128 { 129 target = "size_report:more_metrics" 130 base = "size_report:dump" 131 label = "(+) 1 group (+) 4 metrics" 132 }, 133 ] 134} 135 136pw_doc_group("docs") { 137 sources = [ "docs.rst" ] 138 report_deps = [ ":metric_size_report" ] 139} 140