# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/components.gni")
import("//build/config.gni")
import("//build/rust/rustc_library.gni")
import("//build/toolchain/variant_shared_library_redirect.gni")
import("//src/diagnostics/sampler/build/config_generator.gni")

# Library containing core logic for sampler,
# library launched by generic diagnostics Launcher
# to bundle multiple products together and save space.
rustc_library("lib") {
  name = "sampler"
  edition = "2018"
  with_unit_tests = true

  deps = [
    "//sdk/fidl/fuchsia.cobalt:fuchsia.cobalt-rustc",
    "//sdk/fidl/fuchsia.diagnostics:fuchsia.diagnostics-rustc",
    "//sdk/fidl/fuchsia.hardware.power.statecontrol:fuchsia.hardware.power.statecontrol-rustc",
    "//sdk/fidl/fuchsia.metrics:fuchsia.metrics-rustc",
    "//src/diagnostics/control:controller-rustc",
    "//src/lib/diagnostics/data/rust",
    "//src/lib/diagnostics/hierarchy/rust",
    "//src/lib/diagnostics/inspect/derive",
    "//src/lib/diagnostics/inspect/rust",
    "//src/lib/diagnostics/reader/rust",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/syslog/rust:syslog-listener",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:chrono",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:itertools",
    "//third_party/rust_crates:lazy_static",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:matches",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:serde",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:serde_json5",
    "//third_party/rust_crates:tempfile",
    "//third_party/rust_crates:thiserror",
  ]

  sources = [
    "src/config.rs",
    "src/diagnostics.rs",
    "src/executor.rs",
    "src/lib.rs",
  ]
}

# Test package for the unit test from the
# lapis library.
fuchsia_unittest_package("sampler-tests") {
  deps = [ ":lib_test" ]
  manifest = "meta/sampler_lib_test.cml"
}

# Custom build rule responsible for generating them
# default config-data the production Lapis service uses
# as well as the resource rule used by the configuration
# verification test.
lapis_configuration("production_lapis") {
  configs = [
    "config/archivist.json",
    "config/bthost.json",
    "config/ftl.json",
    "config/fvm.json",
    "config/sysmem.json",
    "config/system-update-committer.json",
    "config/connectivity-wlan.json",
  ]
}

# Rules defining the V1 and V2 Lapis components.
fuchsia_component("sampler-component") {
  component_name = "sampler"
  deps = [
    ":production_lapis_config_data",
    "//src/diagnostics/launcher:bin",
  ]
  manifest = "meta/sampler.cml"
}

variant_shared_library_redirect("sampler_lib") {
  library = ":lib"
}

fuchsia_component("sampler-v1") {
  component_name = "sampler"
  manifest = "meta/sampler.cmx"
  deps = [
    ":sampler_lib",
    "//src/diagnostics/launcher:bin",
  ]
}

fuchsia_package("sampler") {
  deps = [ ":sampler-component" ]
}

group("tests") {
  testonly = true
  deps = [
    ":sampler-tests",
    "tests:sampler-integration-tests",
  ]
}
