# Copyright 2019 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_binary.gni")

timekeeper_deps = [
  "//sdk/fidl/fuchsia.hardware.rtc:fuchsia.hardware.rtc-rustc",
  "//sdk/fidl/fuchsia.time:fuchsia.time-rustc",
  "//sdk/fidl/fuchsia.time.external:fuchsia.time.external-rustc",
  "//src/lib/async-utils",
  "//src/lib/cobalt/rust:fuchsia-cobalt",
  "//src/lib/diagnostics/inspect/derive",
  "//src/lib/diagnostics/inspect/runtime/rust",
  "//src/lib/diagnostics/inspect/rust",
  "//src/lib/fdio/rust:fdio",
  "//src/lib/fidl/rust/fidl",
  "//src/lib/fuchsia",
  "//src/lib/fuchsia-async",
  "//src/lib/fuchsia-component",
  "//src/lib/zircon/rust:fuchsia-zircon",
  "//src/sys/time/lib/inspect-writable",
  "//src/sys/time/lib/time-util",
  "//src/sys/time/lib/time_metrics_registry",
  "//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:parking_lot",
  "//third_party/rust_crates:thiserror",
  "//third_party/rust_crates:tracing",
]

timekeeper_sources = [
  "src/clock_manager.rs",
  "src/diagnostics/cobalt.rs",
  "src/diagnostics/composite.rs",
  "src/diagnostics/fake.rs",
  "src/diagnostics/inspect.rs",
  "src/diagnostics/mod.rs",
  "src/enums.rs",
  "src/estimator/frequency.rs",
  "src/estimator/kalman_filter.rs",
  "src/estimator/mod.rs",
  "src/main.rs",
  "src/rtc.rs",
  "src/time_source.rs",
  "src/time_source_manager.rs",
]

rustc_binary("bin") {
  name = "timekeeper"
  edition = "2021"
  with_unit_tests = true

  deps = timekeeper_deps

  sources = timekeeper_sources

  test_deps = [
    "//sdk/fidl/fuchsia.cobalt:fuchsia.cobalt-rustc",
    "//sdk/fidl/fuchsia.hardware.network:fuchsia.hardware.network-rustc",
    "//sdk/fidl/fuchsia.net:fuchsia.net-rustc",
    "//src/connectivity/lib/net-declare",
    "//src/lib/fuchsia",
    "//src/lib/test_util",
  ]
}

rustc_binary("bin_with_fake_time") {
  name = "timekeeper_fake_time"
  edition = "2021"
  with_unit_tests = false
  testonly = true

  deps = timekeeper_deps

  sources = timekeeper_sources

  non_rust_deps = [ "//src/lib/fake-clock/lib" ]
}

fuchsia_component("service") {
  component_name = "timekeeper"
  manifest = "meta/service.cmx"
  deps = [
    ":bin",
    ":timekeeper_config",
  ]
}

fuchsia_package("timekeeper") {
  deps = [ ":service" ]
}

config_data("timekeeper_config") {
  for_pkg = "sysmgr"
  outputs = [ "timekeeper.config" ]
  sources = [ "service.config" ]
}

resource("testdata") {
  sources = [
    "test/end-of-unix-time",
    "test/y2k",
  ]
  outputs = [ "data/{{source_file_part}}" ]
}

fuchsia_unittest_package("timekeeper-tests") {
  manifest = "meta/unittests.cml"
  deps = [
    ":bin_test",
    ":testdata",
    "//src/connectivity/network/dns:component",
    "//src/connectivity/network/netstack:component",
  ]
  test_specs = {
    environments = [ nuc_env ]
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

group("tests") {
  testonly = true
  deps = [ ":timekeeper-tests" ]
}
