# 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/testing/environments.gni")

# Local template for a library link config rule.
#
# Args:
#   lib_name: (string) the shared library base name.
template("_config") {
  config(target_name) {
    _dir = rebase_path(get_label_info(":lib($shlib_toolchain)", "root_out_dir"),
                       root_build_dir)
    _lib = "$_dir/link_stub/lib${invoker.lib_name}.so"

    rustflags = [
      # Use --no-as-needed to ensure libfake_clock.so is not dropped by
      # --as-needed analysis if it occurs later in the link arguments.
      "-Clink-args=--push-state",
      "-Clink-args=--no-as-needed",
      "-Clink-arg=$_lib",
      "-Clink-args=--pop-state",
    ]
  }
}

_config("rust-link-fake-time") {
  lib_name = "fake_clock"
}

_config("rust-link-fake-time-with-utc") {
  lib_name = "fake_clock_with_utc"
}

# Permits the client code to get the UTC clock.
config("allow_utc") {
  defines = [ "FAKE_CLOCK_ALLOW_UTC" ]
}

# Builds shared library with varying configurations.
#
# Args:
#   output_name: (string) Same as in regular shared_library_targets.
#   public_configs: list(label) Same as in regular shared_library targets.
template("_shared_library") {
  shared_library(target_name) {
    forward_variables_from(invoker,
                           [
                             "output_name",
                             "public_configs",
                           ])
    testonly = true
    sources = [ "fake_clock.cc" ]

    deps = [
      "//sdk/lib/component/incoming/cpp",
      "//sdk/lib/syslog/cpp",
      "//src/lib/fake-clock/fidl:fidl_cpp",
      "//src/lib/fake-clock/named-timer:named-timer-headers",
    ]
  }
}

_shared_library("lib") {
  output_name = "fake_clock"
  public_configs = [ "//src/lib/fake-clock/lib:rust-link-fake-time" ]
}

_shared_library("lib_with_utc") {
  output_name = "fake_clock_with_utc"
  public_configs = [
    "//src/lib/fake-clock/lib:rust-link-fake-time-with-utc",
    "//src/lib/fake-clock/lib:allow_utc",
  ]
}

executable("test_bin") {
  testonly = true
  output_name = "fake_clock_lib_test"
  sources = [ "fake_clock_test.cc" ]

  deps = [
    ":lib",
    "//sdk/lib/sys/cpp",
    "//src/lib/fake-clock/fidl:fidl_hlcpp",
    "//src/lib/fxl",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/loop_fixture",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

executable("death_bin") {
  testonly = true
  sources = [ "death_main.cc" ]

  deps = [
    ":lib",
    "//sdk/lib/sys/cpp",
    "//src/lib/fake-clock/fidl:fidl_hlcpp",
    "//src/lib/fxl",
    "//src/lib/testing/loop_fixture",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_test_component("death_component") {
  manifest = "meta/death.cml"
  deps = [ ":death_bin" ]
}

executable("death_test_bin") {
  testonly = true
  output_name = "fake_clock_lib_death_test"
  sources = [ "fake_clock_death_test.cc" ]

  deps = [
    ":lib_with_utc",
    "//sdk/lib/sys/cpp",
    "//src/lib/fake-clock/fidl:fidl_hlcpp",
    "//src/lib/fxl",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/loop_fixture",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

executable("nodeath_test_bin") {
  testonly = true
  output_name = "fake_clock_lib_nodeath_test"
  sources = [ "fake_clock_nodeath_test.cc" ]

  deps = [
    ":lib_with_utc",
    "//sdk/lib/sys/cpp",
    "//src/lib/fake-clock/fidl:fidl_hlcpp",
    "//src/lib/fxl",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/loop_fixture",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_unittest_component("death_test_component") {
  component_name = "fake_clock_lib_death_test"
  manifest = "meta/fake_clock_lib_death_test.cml"
  deps = [ ":death_test_bin" ]
}

# Same as above, except does not die.
fuchsia_unittest_component("nodeath_test_component") {
  component_name = "fake_clock_lib_nodeath_test"
  manifest = "meta/fake_clock_lib_nodeath_test.cml"
  deps = [ ":nodeath_test_bin" ]
}

fuchsia_unittest_component("test_component") {
  component_name = "fake_clock_lib_test"
  manifest = "meta/fake_clock_lib_test.cml"
  deps = [ ":test_bin" ]
}

fuchsia_test_package("fake_clock_lib_test") {
  test_components = [
    ":test_component",
    ":nodeath_test_component",
  ]
  deps = [ "//src/lib/fake-clock/svc" ]
  test_specs = {
    environments = [ emu_env ]
  }
}

fuchsia_test_package("fake_clock_lib_death_test") {
  test_components = [ ":death_test_component" ]
  deps = [
    ":death_component",
    "//src/lib/fake-clock/svc",
  ]
  test_specs = {
    environments = [ emu_env ]
    log_settings = {
      # It's a death test.
      max_severity = "FATAL"
    }
  }
}

group("tests") {
  testonly = true
  deps = [
    ":fake_clock_lib_death_test",
    ":fake_clock_lib_test",
  ]
}
