1// 2// Copyright (C) 2017 The Android Open Source Project 3// 4// Licensed under the Apache License, Version 2.0 (the "License"); 5// you may not use this file except in compliance with the License. 6// You may obtain a copy of the License at 7// 8// http://www.apache.org/licenses/LICENSE-2.0 9// 10// Unless required by applicable law or agreed to in writing, software 11// distributed under the License is distributed on an "AS IS" BASIS, 12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13// See the License for the specific language governing permissions and 14// limitations under the License. 15// 16 17package { 18 default_applicable_licenses: ["Android-Apache-2.0"], 19} 20 21cc_defaults { 22 name: "statsd_defaults", 23 24 srcs: [ 25 "src/active_config_list.proto", 26 "src/anomaly/AlarmMonitor.cpp", 27 "src/anomaly/AlarmTracker.cpp", 28 "src/anomaly/AnomalyTracker.cpp", 29 "src/anomaly/DurationAnomalyTracker.cpp", 30 "src/anomaly/subscriber_util.cpp", 31 "src/condition/CombinationConditionTracker.cpp", 32 "src/condition/condition_util.cpp", 33 "src/condition/ConditionWizard.cpp", 34 "src/condition/SimpleConditionTracker.cpp", 35 "src/config/ConfigKey.cpp", 36 "src/config/ConfigListener.cpp", 37 "src/config/ConfigManager.cpp", 38 "src/experiment_ids.proto", 39 "src/external/Perfetto.cpp", 40 "src/external/PullResultReceiver.cpp", 41 "src/external/puller_util.cpp", 42 "src/external/StatsCallbackPuller.cpp", 43 "src/external/StatsPuller.cpp", 44 "src/external/StatsPullerManager.cpp", 45 "src/external/TrainInfoPuller.cpp", 46 "src/FieldValue.cpp", 47 "src/flags/FlagProvider.cpp", 48 "src/guardrail/StatsdStats.cpp", 49 "src/hash.cpp", 50 "src/HashableDimensionKey.cpp", 51 "src/logd/LogEvent.cpp", 52 "src/logd/LogEventQueue.cpp", 53 "src/matchers/CombinationAtomMatchingTracker.cpp", 54 "src/matchers/EventMatcherWizard.cpp", 55 "src/matchers/matcher_util.cpp", 56 "src/matchers/SimpleAtomMatchingTracker.cpp", 57 "src/metadata_util.cpp", 58 "src/metrics/CountMetricProducer.cpp", 59 "src/metrics/duration_helper/MaxDurationTracker.cpp", 60 "src/metrics/duration_helper/OringDurationTracker.cpp", 61 "src/metrics/DurationMetricProducer.cpp", 62 "src/metrics/EventMetricProducer.cpp", 63 "src/metrics/GaugeMetricProducer.cpp", 64 "src/metrics/KllMetricProducer.cpp", 65 "src/metrics/MetricProducer.cpp", 66 "src/metrics/MetricsManager.cpp", 67 "src/metrics/ValueMetricProducer.cpp", 68 "src/metrics/parsing_utils/config_update_utils.cpp", 69 "src/metrics/parsing_utils/metrics_manager_util.cpp", 70 "src/metrics/NumericValueMetricProducer.cpp", 71 "src/packages/UidMap.cpp", 72 "src/shell/shell_config.proto", 73 "src/shell/ShellSubscriber.cpp", 74 "src/socket/StatsSocketListener.cpp", 75 "src/state/StateManager.cpp", 76 "src/state/StateTracker.cpp", 77 "src/stats_log_util.cpp", 78 "src/statscompanion_util.cpp", 79 "src/statsd_config.proto", 80 "src/statsd_metadata.proto", 81 "src/StatsLogProcessor.cpp", 82 "src/StatsService.cpp", 83 "src/storage/StorageManager.cpp", 84 "src/subscriber/IncidentdReporter.cpp", 85 "src/subscriber/SubscriberReporter.cpp", 86 "src/uid_data.proto", 87 "src/utils/MultiConditionTrigger.cpp", 88 ], 89 90 local_include_dirs: [ 91 "src", 92 ], 93 94 static_libs: [ 95 "libbase", 96 "libcutils", 97 "libkll", 98 "libmodules-utils-build", 99 "libprotoutil", 100 "libstatslog_statsd", 101 "libsysutils", 102 "libutils", 103 "server_configurable_flags", 104 "statsd-aidl-ndk", 105 ], 106 shared_libs: [ 107 "libbinder_ndk", 108 "libincident", 109 "liblog", 110 ], 111 header_libs: [ 112 "libgtest_prod_headers", 113 ], 114} 115 116genrule { 117 name: "statslog_statsd.h", 118 tools: ["stats-log-api-gen"], 119 cmd: "$(location stats-log-api-gen) --header $(genDir)/statslog_statsd.h --module statsd --namespace android,os,statsd,util", 120 out: [ 121 "statslog_statsd.h", 122 ], 123} 124 125genrule { 126 name: "statslog_statsd.cpp", 127 tools: ["stats-log-api-gen"], 128 cmd: "$(location stats-log-api-gen) --cpp $(genDir)/statslog_statsd.cpp --module statsd --namespace android,os,statsd,util --importHeader statslog_statsd.h", 129 out: [ 130 "statslog_statsd.cpp", 131 ], 132} 133 134genrule { 135 name: "statslog_statsdtest.h", 136 tools: ["stats-log-api-gen"], 137 cmd: "$(location stats-log-api-gen) --header $(genDir)/statslog_statsdtest.h --module statsdtest --namespace android,os,statsd,util", 138 out: [ 139 "statslog_statsdtest.h", 140 ], 141} 142 143genrule { 144 name: "statslog_statsdtest.cpp", 145 tools: ["stats-log-api-gen"], 146 cmd: "$(location stats-log-api-gen) --cpp $(genDir)/statslog_statsdtest.cpp --module statsdtest --namespace android,os,statsd,util --importHeader statslog_statsdtest.h", 147 out: [ 148 "statslog_statsdtest.cpp", 149 ], 150} 151 152cc_library_static { 153 name: "libstatslog_statsdtest", 154 generated_sources: ["statslog_statsdtest.cpp"], 155 generated_headers: ["statslog_statsdtest.h"], 156 export_generated_headers: ["statslog_statsdtest.h"], 157 shared_libs: [ 158 "libstatssocket", 159 "libstatspull", 160 ], 161} 162 163cc_library_static { 164 name: "libstatslog_statsd", 165 generated_sources: ["statslog_statsd.cpp"], 166 generated_headers: ["statslog_statsd.h"], 167 export_generated_headers: ["statslog_statsd.h"], 168 apex_available: [ 169 "com.android.os.statsd", 170 "test_com.android.os.statsd", 171 ], 172 min_sdk_version: "30", 173 shared_libs: [ 174 "libstatssocket", 175 "libstatspull", 176 ], 177 export_shared_lib_headers: [ 178 "libstatspull", 179 ], 180} 181 182// ========= 183// statsd 184// ========= 185 186cc_binary { 187 name: "statsd", 188 defaults: ["statsd_defaults"], 189 190 srcs: ["src/main.cpp"], 191 192 cflags: [ 193 "-Wall", 194 "-Wextra", 195 "-Werror", 196 "-Wno-unused-parameter", 197 // optimize for size (protobuf glop can get big) 198 "-Os", 199 // "-g", 200 // "-O0", 201 ], 202 203 product_variables: { 204 eng: { 205 // Enable sanitizer ONLY on eng builds 206 //sanitize: { 207 // address: true, 208 //}, 209 }, 210 }, 211 212 proto: { 213 type: "lite", 214 static: true, 215 }, 216 stl: "libc++_static", 217 218 shared_libs: [ 219 "libstatssocket", 220 ], 221 222 apex_available: [ 223 "com.android.os.statsd", 224 "test_com.android.os.statsd", 225 ], 226 min_sdk_version: "30", 227 228 sanitize: { 229 memtag_heap: true, 230 }, 231} 232 233// ============== 234// statsd_test 235// ============== 236 237cc_test { 238 name: "statsd_test", 239 defaults: ["statsd_defaults"], 240 test_suites: ["device-tests", "mts-statsd"], 241 test_config: "statsd_test.xml", 242 243 //TODO(b/153588990): Remove when the build system properly separates 244 //32bit and 64bit architectures. 245 compile_multilib: "both", 246 multilib: { 247 lib64: { 248 suffix: "64", 249 }, 250 lib32: { 251 suffix: "32", 252 }, 253 }, 254 255 cflags: [ 256 "-Wall", 257 "-Werror", 258 "-Wno-enum-compare", 259 "-Wno-missing-field-initializers", 260 "-Wno-unused-function", 261 "-Wno-unused-parameter", 262 "-Wno-unused-variable", 263 ], 264 265 require_root: true, 266 267 srcs: [ 268 // atom_field_options.proto needs field_options.proto, but that is 269 // not included in libprotobuf-cpp-lite, so compile it here. 270 ":libprotobuf-internal-protos", 271 ":libstats_internal_protos", 272 273 "src/shell/shell_data.proto", 274 "src/stats_log.proto", 275 "tests/AlarmMonitor_test.cpp", 276 "tests/anomaly/AlarmTracker_test.cpp", 277 "tests/anomaly/AnomalyTracker_test.cpp", 278 "tests/condition/CombinationConditionTracker_test.cpp", 279 "tests/condition/ConditionTimer_test.cpp", 280 "tests/condition/SimpleConditionTracker_test.cpp", 281 "tests/ConfigManager_test.cpp", 282 "tests/e2e/Alarm_e2e_test.cpp", 283 "tests/e2e/Anomaly_count_e2e_test.cpp", 284 "tests/e2e/Anomaly_duration_sum_e2e_test.cpp", 285 "tests/e2e/Attribution_e2e_test.cpp", 286 "tests/e2e/ConfigTtl_e2e_test.cpp", 287 "tests/e2e/ConfigUpdate_e2e_ab_test.cpp", 288 "tests/e2e/ConfigUpdate_e2e_test.cpp", 289 "tests/e2e/CountMetric_e2e_test.cpp", 290 "tests/e2e/DurationMetric_e2e_test.cpp", 291 "tests/e2e/EventMetric_e2e_test.cpp", 292 "tests/e2e/GaugeMetric_e2e_pull_test.cpp", 293 "tests/e2e/GaugeMetric_e2e_push_test.cpp", 294 "tests/e2e/KllMetric_e2e_test.cpp", 295 "tests/e2e/MetricActivation_e2e_test.cpp", 296 "tests/e2e/MetricConditionLink_e2e_test.cpp", 297 "tests/e2e/PartialBucket_e2e_test.cpp", 298 "tests/e2e/ValueMetric_pull_e2e_test.cpp", 299 "tests/e2e/WakelockDuration_e2e_test.cpp", 300 "tests/external/puller_util_test.cpp", 301 "tests/external/StatsCallbackPuller_test.cpp", 302 "tests/external/StatsPuller_test.cpp", 303 "tests/external/StatsPullerManager_test.cpp", 304 "tests/FieldValue_test.cpp", 305 "tests/flags/FlagProvider_test.cpp", 306 "tests/guardrail/StatsdStats_test.cpp", 307 "tests/HashableDimensionKey_test.cpp", 308 "tests/indexed_priority_queue_test.cpp", 309 "tests/log_event/LogEventQueue_test.cpp", 310 "tests/LogEntryMatcher_test.cpp", 311 "tests/LogEvent_test.cpp", 312 "tests/metadata_util_test.cpp", 313 "tests/metrics/CountMetricProducer_test.cpp", 314 "tests/metrics/DurationMetricProducer_test.cpp", 315 "tests/metrics/EventMetricProducer_test.cpp", 316 "tests/metrics/GaugeMetricProducer_test.cpp", 317 "tests/metrics/KllMetricProducer_test.cpp", 318 "tests/metrics/MaxDurationTracker_test.cpp", 319 "tests/metrics/metrics_test_helper.cpp", 320 "tests/metrics/OringDurationTracker_test.cpp", 321 "tests/metrics/NumericValueMetricProducer_test.cpp", 322 "tests/metrics/parsing_utils/config_update_utils_test.cpp", 323 "tests/metrics/parsing_utils/metrics_manager_util_test.cpp", 324 "tests/subscriber/SubscriberReporter_test.cpp", 325 "tests/MetricsManager_test.cpp", 326 "tests/shell/ShellSubscriber_test.cpp", 327 "tests/state/StateTracker_test.cpp", 328 "tests/statsd_test_util.cpp", 329 "tests/StatsLogProcessor_test.cpp", 330 "tests/StatsService_test.cpp", 331 "tests/storage/StorageManager_test.cpp", 332 "tests/UidMap_test.cpp", 333 "tests/utils/MultiConditionTrigger_test.cpp", 334 ], 335 336 static_libs: [ 337 "libgmock", 338 "libplatformprotos", 339 "libstatslog_statsdtest", 340 "libstatssocket_private", 341 ], 342 343 proto: { 344 type: "lite", 345 include_dirs: [ 346 "external/protobuf/src", 347 "frameworks/proto_logging/stats", 348 ], 349 }, 350 351} 352 353//############################# 354// statsd micro benchmark 355//############################# 356 357cc_benchmark { 358 name: "statsd_benchmark", 359 defaults: ["statsd_defaults"], 360 361 srcs: [ 362 // atom_field_options.proto needs field_options.proto, but that is 363 // not included in libprotobuf-cpp-lite, so compile it here. 364 ":libprotobuf-internal-protos", 365 ":libstats_internal_protos", 366 367 "benchmark/duration_metric_benchmark.cpp", 368 "benchmark/filter_value_benchmark.cpp", 369 "benchmark/get_dimensions_for_condition_benchmark.cpp", 370 "benchmark/hello_world_benchmark.cpp", 371 "benchmark/log_event_benchmark.cpp", 372 "benchmark/main.cpp", 373 "benchmark/metric_util.cpp", 374 "benchmark/stats_write_benchmark.cpp", 375 "src/stats_log.proto", 376 ], 377 378 proto: { 379 type: "lite", 380 include_dirs: [ 381 "external/protobuf/src", 382 "frameworks/proto_logging/stats", 383 ], 384 }, 385 386 cflags: [ 387 "-Wall", 388 "-Werror", 389 "-Wno-unused-parameter", 390 "-Wno-unused-variable", 391 "-Wno-unused-function", 392 393 // Bug: http://b/29823425 Disable -Wvarargs for Clang update to r271374 394 "-Wno-varargs", 395 ], 396 397 static_libs: [ 398 "libplatformprotos", 399 "libstatssocket_private", 400 ], 401 402 shared_libs: [ 403 "libprotobuf-cpp-lite", 404 "libstatslog", 405 ], 406 407 header_libs: [ 408 "libgtest_prod_headers", 409 ], 410} 411 412// ==== java proto device library (for test only) ============================== 413java_library { 414 name: "statsdprotolite", 415 sdk_version: "core_current", 416 proto: { 417 type: "lite", 418 include_dirs: [ 419 "external/protobuf/src", 420 "frameworks/proto_logging/stats", 421 ], 422 }, 423 424 srcs: [ 425 ":libstats_atoms_proto", 426 "src/shell/shell_config.proto", 427 "src/shell/shell_data.proto", 428 "src/stats_log.proto", 429 "src/statsd_config.proto", 430 ], 431 432 static_libs: [ 433 "platformprotoslite", 434 ], 435 // Protos have lots of MissingOverride and similar. 436 errorprone: { 437 javacflags: ["-XepDisableAllChecks"], 438 }, 439} 440 441java_library { 442 name: "statsdprotonano", 443 sdk_version: "9", 444 proto: { 445 type: "nano", 446 output_params: ["store_unknown_fields=true"], 447 include_dirs: [ 448 "external/protobuf/src", 449 "frameworks/proto_logging/stats", 450 ], 451 }, 452 srcs: [ 453 ":libstats_atoms_proto", 454 "src/shell/shell_config.proto", 455 "src/shell/shell_data.proto", 456 "src/stats_log.proto", 457 "src/statsd_config.proto", 458 ], 459 static_libs: [ 460 "platformprotosnano", 461 ], 462 // Protos have lots of MissingOverride and similar. 463 errorprone: { 464 javacflags: ["-XepDisableAllChecks"], 465 }, 466} 467 468// Filegroup for statsd config proto definition. 469filegroup { 470 name: "statsd-config-proto-def", 471 srcs: ["src/statsd_config.proto"], 472} 473 474// Filegroup for all statsd protos 475filegroup { 476 name: "statsd_internal_protos", 477 srcs: [ 478 "src/active_config_list.proto", 479 "src/experiment_ids.proto", 480 "src/shell/shell_config.proto", 481 "src/shell/shell_data.proto", 482 "src/statsd_config.proto", 483 "src/statsd_metadata.proto", 484 "src/stats_log.proto", 485 "src/uid_data.proto", 486 ], 487} 488