# 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/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/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
}

# TODO(https://fxbug.dev/108880) delete the HLCPP goldens once no longer needed
cpp_config_client_lib_source("cpp_elf_hlcpp_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-hlcpp"
  testonly = true
}

cpp_config_client_lib_source("cpp_driver_config_lib") {
  manifest_outputs = get_target_outputs(":config_manifest")
  compiled_manifest = manifest_outputs[0]
  fidl_library_name = "my.config.lib"
  deps = [ ":config_manifest" ]
  flavor = "driver"
  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")
cpp_elf_hlcpp_lib_outputs = get_target_outputs(":cpp_elf_hlcpp_config_lib")
cpp_driver_lib_outputs = get_target_outputs(":cpp_driver_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]
    },

    # TODO(https://fxbug.dev/108880) delete the HLCPP goldens once no longer needed
    {
      golden = "goldens/config.cc.elf.hlcpp.golden"
      candidate = cpp_elf_hlcpp_lib_outputs[0]
    },
    {
      golden = "goldens/config.h.elf.hlcpp.golden"
      candidate = cpp_elf_hlcpp_lib_outputs[1]
    },
    {
      golden = "goldens/config.cc.driver.golden"
      candidate = cpp_driver_lib_outputs[0]
    },
    {
      golden = "goldens/config.h.driver.golden"
      candidate = cpp_driver_lib_outputs[1]
    },
    {
      golden = "goldens/dumped_values.json.golden"
      candidate = _dumped_values
    },
  ]
  deps = [
    ":cpp_driver_config_lib",
    ":cpp_elf_config_lib",
    ":cpp_elf_hlcpp_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" ]
  }
}
