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 cflags: [ 25 "-Wno-deprecated-declarations", 26 "-Wthread-safety", 27 ], 28 tidy: true, 29 tidy_flags: [ 30 // Only check our headers 31 "-header-filter=^packages/modules/StatsD/statsd", 32 ], 33 34 tidy_checks: [ 35 "android-*", 36 "bugprone-*", 37 "cert-*", 38 "clang-analyzer-security*", 39 "google-*", 40 "misc-*", 41 "performance-*", 42 "-bugprone-narrowing-conversions", // lots of unsigned -> int conversions 43 "-cert-err34-c", 44 "-cert-msc30-c", // warning: rand() has limited randomness; use C++11 random library 45 "-cert-msc50-cpp", // warning: rand() has limited randomness; use C++11 random library 46 ], 47 tidy_checks_as_errors: [ 48 "android-*", 49 "bugprone-*", 50 "cert-*", 51 "clang-analyzer-security*", 52 "google-*", 53 "misc-*", 54 "performance-*", 55 ], 56 srcs: [ 57 "src/active_config_list.proto", 58 "src/anomaly/AlarmMonitor.cpp", 59 "src/anomaly/AlarmTracker.cpp", 60 "src/anomaly/AnomalyTracker.cpp", 61 "src/anomaly/DurationAnomalyTracker.cpp", 62 "src/anomaly/subscriber_util.cpp", 63 "src/condition/CombinationConditionTracker.cpp", 64 "src/condition/condition_util.cpp", 65 "src/condition/ConditionWizard.cpp", 66 "src/condition/SimpleConditionTracker.cpp", 67 "src/config/ConfigKey.cpp", 68 "src/config/ConfigListener.cpp", 69 "src/config/ConfigManager.cpp", 70 "src/experiment_ids.proto", 71 "src/external/Perfetto.cpp", 72 "src/external/PullResultReceiver.cpp", 73 "src/external/puller_util.cpp", 74 "src/external/StatsCallbackPuller.cpp", 75 "src/external/StatsPuller.cpp", 76 "src/external/StatsPullerManager.cpp", 77 "src/external/TrainInfoPuller.cpp", 78 "src/external/Uprobestats.cpp", 79 "src/FieldValue.cpp", 80 "src/flags/FlagProvider.cpp", 81 "src/guardrail/StatsdStats.cpp", 82 "src/hash.cpp", 83 "src/HashableDimensionKey.cpp", 84 "src/logd/LogEvent.cpp", 85 "src/logd/LogEventQueue.cpp", 86 "src/logd/logevent_util.cpp", 87 "src/matchers/CombinationAtomMatchingTracker.cpp", 88 "src/matchers/EventMatcherWizard.cpp", 89 "src/matchers/matcher_util.cpp", 90 "src/matchers/SimpleAtomMatchingTracker.cpp", 91 "src/metadata_util.cpp", 92 "src/metrics/CountMetricProducer.cpp", 93 "src/metrics/duration_helper/MaxDurationTracker.cpp", 94 "src/metrics/duration_helper/OringDurationTracker.cpp", 95 "src/metrics/DurationMetricProducer.cpp", 96 "src/metrics/EventMetricProducer.cpp", 97 "src/metrics/RestrictedEventMetricProducer.cpp", 98 "src/metrics/GaugeMetricProducer.cpp", 99 "src/metrics/KllMetricProducer.cpp", 100 "src/metrics/MetricProducer.cpp", 101 "src/metrics/MetricsManager.cpp", 102 "src/metrics/ValueMetricProducer.cpp", 103 "src/metrics/parsing_utils/config_update_utils.cpp", 104 "src/metrics/parsing_utils/metrics_manager_util.cpp", 105 "src/metrics/NumericValueMetricProducer.cpp", 106 "src/packages/UidMap.cpp", 107 "src/shell/shell_config.proto", 108 "src/shell/ShellSubscriber.cpp", 109 "src/shell/ShellSubscriberClient.cpp", 110 "src/socket/StatsSocketListener.cpp", 111 "src/state/StateManager.cpp", 112 "src/state/StateTracker.cpp", 113 "src/stats_log_util.cpp", 114 "src/stats_policy_config.proto", 115 "src/statscompanion_util.cpp", 116 "src/statsd_config.proto", 117 "src/statsd_metadata.proto", 118 "src/guardrail/stats_log_enums.proto", 119 "src/StatsLogProcessor.cpp", 120 "src/StatsService.cpp", 121 "src/storage/StorageManager.cpp", 122 "src/subscriber/IncidentdReporter.cpp", 123 "src/subscriber/SubscriberReporter.cpp", 124 "src/uid_data.proto", 125 "src/utils/MultiConditionTrigger.cpp", 126 "src/utils/DbUtils.cpp", 127 "src/utils/Regex.cpp", 128 "src/utils/RestrictedPolicyManager.cpp", 129 "src/utils/ShardOffsetProvider.cpp", 130 ], 131 132 local_include_dirs: [ 133 "src", 134 ], 135 136 static_libs: [ 137 "libbase", 138 "libcutils", 139 "libkll", 140 "libmodules-utils-build", 141 "libprotoutil", 142 "libstatslog_statsd", 143 "libsysutils", 144 "libutils", 145 "server_configurable_flags", 146 "statsd-aidl-ndk", 147 "libsqlite_static_noicu", 148 ], 149 shared_libs: [ 150 "libbinder_ndk", 151 "libincident", 152 "liblog", 153 "libstatssocket", 154 ], 155 header_libs: [ 156 "libgtest_prod_headers", 157 ], 158} 159 160genrule { 161 name: "statslog_statsd.h", 162 tools: ["stats-log-api-gen"], 163 cmd: "$(location stats-log-api-gen) " + 164 "--header $(genDir)/statslog_statsd.h " + 165 "--module statsd " + 166 "--namespace android,os,statsd,util", 167 out: [ 168 "statslog_statsd.h", 169 ], 170} 171 172genrule { 173 name: "statslog_statsd.cpp", 174 tools: ["stats-log-api-gen"], 175 cmd: "$(location stats-log-api-gen) " + 176 "--cpp $(genDir)/statslog_statsd.cpp " + 177 "--module statsd " + 178 "--namespace android,os,statsd,util " + 179 "--importHeader statslog_statsd.h", 180 out: [ 181 "statslog_statsd.cpp", 182 ], 183} 184 185genrule { 186 name: "statslog_statsdtest.h", 187 tools: ["stats-log-api-gen"], 188 cmd: "$(location stats-log-api-gen) " + 189 "--header $(genDir)/statslog_statsdtest.h " + 190 "--module statsdtest " + 191 "--namespace android,os,statsd,util", 192 out: [ 193 "statslog_statsdtest.h", 194 ], 195} 196 197genrule { 198 name: "statslog_statsdtest.cpp", 199 tools: ["stats-log-api-gen"], 200 cmd: "$(location stats-log-api-gen) " + 201 "--cpp $(genDir)/statslog_statsdtest.cpp " + 202 "--module statsdtest " + 203 "--namespace android,os,statsd,util " + 204 "--importHeader statslog_statsdtest.h", 205 out: [ 206 "statslog_statsdtest.cpp", 207 ], 208} 209 210cc_library_static { 211 name: "libstatslog_statsdtest", 212 generated_sources: ["statslog_statsdtest.cpp"], 213 generated_headers: ["statslog_statsdtest.h"], 214 export_generated_headers: ["statslog_statsdtest.h"], 215 shared_libs: [ 216 "libstatssocket", 217 "libstatspull", 218 ], 219} 220 221cc_library_static { 222 name: "libstatslog_statsd", 223 generated_sources: ["statslog_statsd.cpp"], 224 generated_headers: ["statslog_statsd.h"], 225 export_generated_headers: ["statslog_statsd.h"], 226 apex_available: [ 227 "com.android.os.statsd", 228 "test_com.android.os.statsd", 229 ], 230 min_sdk_version: "30", 231 shared_libs: [ 232 "libstatssocket", 233 "libstatspull", 234 ], 235 export_shared_lib_headers: [ 236 "libstatspull", 237 ], 238} 239 240// ========= 241// statsd 242// ========= 243 244cc_binary { 245 name: "statsd", 246 defaults: ["statsd_defaults"], 247 248 srcs: ["src/main.cpp"], 249 250 cflags: [ 251 "-Wall", 252 "-Wextra", 253 "-Werror", 254 "-Wno-unused-parameter", 255 // optimize for size (protobuf glop can get big) 256 "-Os", 257 // "-g", 258 // "-O0", 259 ], 260 261 proto: { 262 type: "lite", 263 static: true, 264 }, 265 stl: "libc++_static", 266 267 apex_available: [ 268 "com.android.os.statsd", 269 "test_com.android.os.statsd", 270 ], 271 min_sdk_version: "30", 272} 273 274cc_defaults { 275 name: "statsd_test_defaults", 276 defaults: ["statsd_defaults"], 277 srcs: [ 278 // atom_field_options.proto needs field_options.proto, but that is 279 // not included in libprotobuf-cpp-lite, so compile it here. 280 ":libprotobuf-internal-protos", 281 ":libstats_internal_protos", 282 283 "src/shell/shell_data.proto", 284 "src/stats_log.proto", 285 ], 286 cflags: [ 287 "-Wall", 288 "-Werror", 289 "-Wno-enum-compare", 290 "-Wno-missing-field-initializers", 291 "-Wno-unused-function", 292 "-Wno-unused-parameter", 293 "-Wno-unused-variable", 294 ], 295 static_libs: [ 296 "libgmock", 297 "libstatslog_statsdtest", 298 ], 299 proto: { 300 type: "lite", 301 include_dirs: [ 302 "external/protobuf/src", 303 "frameworks/proto_logging/stats", 304 ], 305 static: true, 306 }, 307} 308 309cc_library_static { 310 name: "libstats_test_utils", 311 defaults: ["statsd_test_defaults"], 312 srcs: [ 313 "tests/metrics/metrics_test_helper.cpp", 314 "tests/statsd_test_util.cpp", 315 ], 316 tidy_timeout_srcs: [ 317 "tests/statsd_test_util.cpp", 318 ], 319} 320 321// ============== 322// statsd_test 323// ============== 324 325cc_test { 326 name: "statsd_test", 327 defaults: ["statsd_test_defaults"], 328 test_suites: [ 329 "device-tests", 330 "mts-statsd", 331 ], 332 test_config: "statsd_test.xml", 333 334 //TODO(b/153588990): Remove when the build system properly separates 335 //32bit and 64bit architectures. 336 compile_multilib: "both", 337 multilib: { 338 lib64: { 339 suffix: "64", 340 }, 341 lib32: { 342 suffix: "32", 343 }, 344 }, 345 346 require_root: true, 347 348 tidy_timeout_srcs: [ 349 "tests/condition/SimpleConditionTracker_test.cpp", 350 "tests/ConfigManager_test.cpp", 351 "tests/e2e/Anomaly_count_e2e_test.cpp", 352 "tests/e2e/Anomaly_duration_sum_e2e_test.cpp", 353 "tests/e2e/ConfigUpdate_e2e_ab_test.cpp", 354 "tests/e2e/ConfigUpdate_e2e_test.cpp", 355 "tests/e2e/CountMetric_e2e_test.cpp", 356 "tests/e2e/DurationMetric_e2e_test.cpp", 357 "tests/e2e/GaugeMetric_e2e_pull_test.cpp", 358 "tests/e2e/MetricActivation_e2e_test.cpp", 359 "tests/e2e/PartialBucket_e2e_test.cpp", 360 "tests/e2e/ValueMetric_pull_e2e_test.cpp", 361 "tests/e2e/WakelockDuration_e2e_test.cpp", 362 "tests/external/puller_util_test.cpp", 363 "tests/external/StatsPuller_test.cpp", 364 "tests/FieldValue_test.cpp", 365 "tests/guardrail/StatsdStats_test.cpp", 366 "tests/LogEvent_test.cpp", 367 "tests/metrics/CountMetricProducer_test.cpp", 368 "tests/metrics/DurationMetricProducer_test.cpp", 369 "tests/metrics/EventMetricProducer_test.cpp", 370 "tests/metrics/GaugeMetricProducer_test.cpp", 371 "tests/metrics/KllMetricProducer_test.cpp", 372 "tests/metrics/MaxDurationTracker_test.cpp", 373 "tests/metrics/NumericValueMetricProducer_test.cpp", 374 "tests/metrics/OringDurationTracker_test.cpp", 375 "tests/metrics/RestrictedEventMetricProducer_test.cpp", 376 "tests/MetricsManager_test.cpp", 377 "tests/metrics/parsing_utils/config_update_utils_test.cpp", 378 "tests/metrics/parsing_utils/metrics_manager_util_test.cpp", 379 "tests/state/StateTracker_test.cpp", 380 "tests/StatsLogProcessor_test.cpp", 381 "tests/UidMap_test.cpp", 382 ], 383 384 srcs: [ 385 "tests/AlarmMonitor_test.cpp", 386 "tests/anomaly/AlarmTracker_test.cpp", 387 "tests/anomaly/AnomalyTracker_test.cpp", 388 "tests/condition/CombinationConditionTracker_test.cpp", 389 "tests/condition/ConditionTimer_test.cpp", 390 "tests/condition/SimpleConditionTracker_test.cpp", 391 "tests/ConfigManager_test.cpp", 392 "tests/e2e/Alarm_e2e_test.cpp", 393 "tests/e2e/Anomaly_count_e2e_test.cpp", 394 "tests/e2e/Anomaly_duration_sum_e2e_test.cpp", 395 "tests/e2e/Attribution_e2e_test.cpp", 396 "tests/e2e/ConfigTtl_e2e_test.cpp", 397 "tests/e2e/ConfigUpdate_e2e_ab_test.cpp", 398 "tests/e2e/ConfigUpdate_e2e_test.cpp", 399 "tests/e2e/CountMetric_e2e_test.cpp", 400 "tests/e2e/DurationMetric_e2e_test.cpp", 401 "tests/e2e/EventMetric_e2e_test.cpp", 402 "tests/e2e/GaugeMetric_e2e_pull_test.cpp", 403 "tests/e2e/GaugeMetric_e2e_push_test.cpp", 404 "tests/e2e/KllMetric_e2e_test.cpp", 405 "tests/e2e/MetricActivation_e2e_test.cpp", 406 "tests/e2e/MetricConditionLink_e2e_test.cpp", 407 "tests/e2e/PartialBucket_e2e_test.cpp", 408 "tests/e2e/RestrictedConfig_e2e_test.cpp", 409 "tests/e2e/RestrictedEventMetric_e2e_test.cpp", 410 "tests/e2e/StringReplace_e2e_test.cpp", 411 "tests/e2e/ValueMetric_pull_e2e_test.cpp", 412 "tests/e2e/WakelockDuration_e2e_test.cpp", 413 "tests/external/puller_util_test.cpp", 414 "tests/external/StatsCallbackPuller_test.cpp", 415 "tests/external/StatsPuller_test.cpp", 416 "tests/external/StatsPullerManager_test.cpp", 417 "tests/FieldValue_test.cpp", 418 "tests/flags/FlagProvider_test.cpp", 419 "tests/guardrail/StatsdStats_test.cpp", 420 "tests/HashableDimensionKey_test.cpp", 421 "tests/indexed_priority_queue_test.cpp", 422 "tests/log_event/LogEventQueue_test.cpp", 423 "tests/LogEntryMatcher_test.cpp", 424 "tests/LogEvent_test.cpp", 425 "tests/metadata_util_test.cpp", 426 "tests/metrics/CountMetricProducer_test.cpp", 427 "tests/metrics/DurationMetricProducer_test.cpp", 428 "tests/metrics/EventMetricProducer_test.cpp", 429 "tests/metrics/GaugeMetricProducer_test.cpp", 430 "tests/metrics/KllMetricProducer_test.cpp", 431 "tests/metrics/MaxDurationTracker_test.cpp", 432 "tests/metrics/OringDurationTracker_test.cpp", 433 "tests/metrics/NumericValueMetricProducer_test.cpp", 434 "tests/metrics/RestrictedEventMetricProducer_test.cpp", 435 "tests/metrics/parsing_utils/config_update_utils_test.cpp", 436 "tests/metrics/parsing_utils/metrics_manager_util_test.cpp", 437 "tests/subscriber/SubscriberReporter_test.cpp", 438 "tests/DataCorruptionReason_test.cpp", 439 "tests/LogEventFilter_test.cpp", 440 "tests/MetricsManager_test.cpp", 441 "tests/shell/ShellSubscriber_test.cpp", 442 "tests/state/StateTracker_test.cpp", 443 "tests/statsd_test_util_test.cpp", 444 "tests/SocketListener_test.cpp", 445 "tests/StatsLogProcessor_test.cpp", 446 "tests/StatsService_test.cpp", 447 "tests/storage/StorageManager_test.cpp", 448 "tests/UidMap_test.cpp", 449 "tests/utils/MultiConditionTrigger_test.cpp", 450 "tests/utils/DbUtils_test.cpp", 451 ], 452 453 static_libs: [ 454 "libstatsgtestmatchers", 455 "libstats_test_utils", 456 ], 457 458 min_sdk_version: "30", 459 test_for: ["com.android.os.statsd"], 460} 461 462//############################# 463// statsd micro benchmark 464//############################# 465 466cc_benchmark { 467 name: "statsd_benchmark", 468 defaults: ["statsd_test_defaults"], 469 470 srcs: [ 471 "benchmark/data_structures_benchmark.cpp", 472 "benchmark/db_benchmark.cpp", 473 "benchmark/duration_metric_benchmark.cpp", 474 "benchmark/filter_value_benchmark.cpp", 475 "benchmark/get_dimensions_for_condition_benchmark.cpp", 476 "benchmark/hello_world_benchmark.cpp", 477 "benchmark/log_event_benchmark.cpp", 478 "benchmark/log_event_filter_benchmark.cpp", 479 "benchmark/main.cpp", 480 "benchmark/on_log_event_benchmark.cpp", 481 "benchmark/stats_write_benchmark.cpp", 482 "benchmark/loss_info_container_benchmark.cpp", 483 "benchmark/string_transform_benchmark.cpp", 484 "benchmark/value_metric_benchmark.cpp", 485 ], 486 487 cflags: [ 488 // Bug: http://b/29823425 Disable -Wvarargs for Clang update to r271374 489 "-Wno-varargs", 490 ], 491 492 static_libs: [ 493 "libgtest", 494 "libstats_test_utils", 495 ], 496 497 test_for: ["com.android.os.statsd"], 498} 499 500// ==== java proto device library (for test only) ============================== 501java_library { 502 name: "statsdprotolite", 503 sdk_version: "core_current", 504 proto: { 505 type: "lite", 506 include_dirs: [ 507 "external/protobuf/src", 508 "frameworks/proto_logging/stats", 509 ], 510 }, 511 512 srcs: [ 513 ":libstats_atoms_proto", 514 "src/shell/shell_config.proto", 515 "src/shell/shell_data.proto", 516 "src/stats_log.proto", 517 "src/statsd_config.proto", 518 "src/guardrail/stats_log_enums.proto", 519 ], 520 521 static_libs: [ 522 "platformprotoslite", 523 ], 524 // Protos have lots of MissingOverride and similar. 525 errorprone: { 526 javacflags: ["-XepDisableAllChecks"], 527 }, 528} 529 530java_library { 531 name: "statsdprotonano", 532 sdk_version: "9", 533 proto: { 534 type: "nano", 535 output_params: ["store_unknown_fields=true"], 536 include_dirs: [ 537 "external/protobuf/src", 538 "frameworks/proto_logging/stats", 539 ], 540 }, 541 srcs: [ 542 ":libstats_atoms_proto", 543 "src/shell/shell_config.proto", 544 "src/shell/shell_data.proto", 545 "src/stats_log.proto", 546 "src/statsd_config.proto", 547 "src/guardrail/stats_log_enums.proto", 548 ], 549 static_libs: [ 550 "platformprotosnano", 551 ], 552 // Protos have lots of MissingOverride and similar. 553 errorprone: { 554 javacflags: ["-XepDisableAllChecks"], 555 }, 556} 557 558// Filegroup for statsd config proto definition. 559filegroup { 560 name: "libstats_config_protos", 561 srcs: ["src/statsd_config.proto"], 562} 563 564// Filegroup for statsd report protos. 565filegroup { 566 name: "libstats_log_protos", 567 srcs: [ 568 "src/stats_log.proto", 569 "src/guardrail/stats_log_enums.proto", 570 ], 571} 572 573// Filegroup for all statsd protos 574filegroup { 575 name: "statsd_internal_protos", 576 srcs: [ 577 "src/active_config_list.proto", 578 "src/experiment_ids.proto", 579 "src/shell/shell_config.proto", 580 "src/shell/shell_data.proto", 581 "src/statsd_config.proto", 582 "src/statsd_metadata.proto", 583 "src/stats_log.proto", 584 "src/uid_data.proto", 585 "src/guardrail/stats_log_enums.proto", 586 ], 587} 588 589cc_fuzz { 590 name: "statsd_service_fuzzer", 591 defaults: [ 592 "statsd_defaults", 593 "service_fuzzer_defaults", 594 "fuzzer_disable_leaks", 595 ], 596 srcs: [ 597 "fuzzers/statsd_service_fuzzer.cpp", 598 ], 599 shared_libs: [ 600 "libstatssocket", 601 "libvndksupport", 602 ], 603 cflags: [ 604 "-Wall", 605 "-Wextra", 606 "-Werror", 607 "-Wno-unused-parameter", 608 ], 609 fuzz_config: { 610 triage_assignee: "waghpawan@google.com", 611 cc: [ 612 "singhtejinder@google.com", 613 "sharaienko@google.com", 614 ], 615 }, 616 proto: { 617 type: "lite", 618 static: true, 619 }, 620} 621 622cc_fuzz { 623 name: "statsd_fuzzer", 624 defaults: [ 625 "statsd_defaults", 626 ], 627 srcs: [ 628 "fuzzers/statsd_socket_data_fuzzer.cpp", 629 ], 630 shared_libs: [ 631 "libstatssocket", 632 ], 633 cflags: [ 634 "-Wall", 635 "-Wextra", 636 "-Werror", 637 "-Wno-unused-parameter", 638 ], 639 fuzz_config: { 640 cc: [ 641 "singhtejinder@google.com", 642 "sharaienko@google.com", 643 ], 644 }, 645 proto: { 646 type: "lite", 647 static: true, 648 }, 649} 650 651// Filegroup for subscription protos. 652filegroup { 653 name: "libstats_subscription_protos", 654 srcs: [ 655 ":libstats_internal_protos", 656 ":libstats_config_protos", 657 "src/shell/shell_config.proto", 658 "src/shell/shell_data.proto", 659 ], 660} 661