# Copyright 2018 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/compiled_action.gni")
import("//build/host.gni")
import("//build/python/python_binary.gni")
import("//build/rust/rustc_binary.gni")
import("//build/sdk/sdk_host_tool.gni")
import("//build/testing/golden_files.gni")
import("//tools/cmc/build/cml.gni")
import("//tools/configc/build/config.gni")

if (is_host) {
  rustc_binary("configc") {
    edition = "2021"
    name = "configc"

    deps = [
      "//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl_rust",
      "//src/lib/assembly/validate_product",
      "//src/lib/fidl/rust/fidl",
      "//src/sys/lib/cm_rust",
      "//src/sys/lib/cm_types",
      "//src/sys/lib/config_encoder",
      "//src/sys/pkg/lib/fuchsia-pkg",
      "//third_party/rust_crates:anyhow",
      "//third_party/rust_crates:argh",
      "//third_party/rust_crates:camino",
      "//third_party/rust_crates:serde_json",
      "//third_party/rust_crates:serde_json5",
      "//tools/lib/config_client",
      "//tools/lib/config_value_file",
    ]

    sources = [
      "src/client_cpp.rs",
      "src/client_fidl.rs",
      "src/client_rust.rs",
      "src/common.rs",
      "src/cvf.rs",
      "src/cvm.rs",
      "src/dump_values.rs",
      "src/main.rs",
      "src/validate_package.rs",
    ]
  }

  sdk_host_tool("configc_sdk") {
    category = "partner"
    output_name = "configc"

    # depending on :configc doesn't work, need one of the gen'd targets
    deps = [ ":configc.actual" ]
  }

  install_host_tools("install") {
    deps = [ ":configc" ]
    outputs = [ "configc" ]
  }

  python_binary("validate_config_wrapper") {
    main_source = "build/validate_config.py"
    sources = []
  }
}

# Config Library Golden Tests
cm("config_manifest") {
  manifest = "goldens/config_manifest.cml"
  output_name = "config_manifest.cm"
  config_values_package_path = "goldens/config_values.json5"
}

fidl_config_client_lib_source("fidl_config_lib") {
  manifest_outputs = get_target_outputs(":config_manifest")
  compiled_manifest = manifest_outputs[0]
  name = "my.config.lib"
  deps = [ ":config_manifest" ]
  testonly = true
}

rust_config_client_lib_source("rust_config_lib") {
  manifest_outputs = get_target_outputs(":config_manifest")
  compiled_manifest = manifest_outputs[0]
  fidl_library_name = "my.config.lib"
  deps = [ ":config_manifest" ]
  testonly = true
}

cpp_config_client_lib_source("cpp_elf_config_lib") {
  manifest_outputs = get_target_outputs(":config_manifest")
  compiled_manifest = manifest_outputs[0]
  fidl_library_name = "my.config.lib"
  deps = [ ":config_manifest" ]
  flavor = "elf"
  testonly = true
}

_cm = get_target_outputs(":config_manifest")
_cm = _cm[0]
cvf("example_values") {
  cm = _cm
  value_file = "goldens/config_values.json5"
  deps = [ ":config_manifest" ]
}

_cvf = get_target_outputs(":example_values")
_cvf = _cvf[0]
_dumped_values = "$target_out_dir/dumped_values.json"
dump_structured_config("dump_example_values") {
  cm = _cm
  cvf = _cvf
  output = _dumped_values
  deps = [
    ":config_manifest",
    ":example_values",
  ]
}

fidl_lib_outputs = get_target_outputs(":fidl_config_lib")
rust_lib_outputs = get_target_outputs(":rust_config_lib")
cpp_elf_lib_outputs = get_target_outputs(":cpp_elf_config_lib")

golden_files("golden_tests") {
  testonly = true
  comparisons = [
    {
      golden = "goldens/config.fidl.golden"
      candidate = fidl_lib_outputs[0]
    },
    {
      golden = "goldens/config.rs.golden"
      candidate = rust_lib_outputs[0]
    },
    {
      golden = "goldens/config.cc.elf.golden"
      candidate = cpp_elf_lib_outputs[0]
    },
    {
      golden = "goldens/config.h.elf.golden"
      candidate = cpp_elf_lib_outputs[1]
    },
    {
      golden = "goldens/dumped_values.json.golden"
      candidate = _dumped_values
    },
  ]
  deps = [
    ":cpp_elf_config_lib",
    ":dump_example_values",
    ":fidl_config_lib",
    ":rust_config_lib",
  ]
}

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

if (is_host) {
  group("host_tests") {
    testonly = true
    deps = [ "tests:fail_validate_without_config" ]
  }
}
