# 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/host.gni")
import("//build/rust/rustc_binary.gni")
import("//build/sdk/sdk_host_tool.gni")
import("//src/sys/build/components.gni")

rustc_binary("cmc") {
  name = "cmc"
  with_unit_tests = true
  edition = "2018"

  deps = [
    "//sdk/fidl/fuchsia.data:fuchsia.data-rustc",
    "//sdk/fidl/fuchsia.io2:fuchsia.io2-rustc",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
    "//src/lib/directed_graph",
    "//src/lib/fidl/rust/fidl",
    "//src/sys/lib/cm_json",
    "//src/sys/lib/cm_types",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:clap",
    "//third_party/rust_crates:json5format",
    "//third_party/rust_crates:lazy_static",
    "//third_party/rust_crates:maplit",
    "//third_party/rust_crates:regex",
    "//third_party/rust_crates:serde",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:serde_json5",
    "//third_party/rust_crates:structopt",
    "//third_party/rust_crates:tempfile",
    "//third_party/rust_crates:thiserror",
    "//third_party/rust_crates:valico",
    "//tools/lib/cml",
  ]

  non_rust_deps = [ ":cmc_test_schemas" ]

  test_deps = [ "//third_party/rust_crates:matches" ]

  sources = [
    "src/compile.rs",
    "src/format.rs",
    "src/include.rs",
    "src/main.rs",
    "src/merge.rs",
    "src/opts.rs",
    "src/util.rs",
    "src/validate.rs",
  ]

  inputs = [
    "test_block_dev.json",
    "test_block_shell_feature.json",
  ]
}

sdk_host_tool("cmc_sdk") {
  category = "partner"
  output_name = "cmc"
  deps = [ ":cmc" ]
}

source_set("cmc_test_schemas") {
  inputs = [
    "test_block_dev.json",
    "test_block_shell_feature.json",
  ]
}

rustc_binary("cmc_integration_test_bin") {
  name = "cmc_integration_test"
  edition = "2018"
  source_root = "tests/integration_test.rs"
  deps = [
    "//sdk/fidl/fuchsia.data:fuchsia.data-rustc",
    "//sdk/fidl/fuchsia.io2:fuchsia.io2-rustc",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
    "//src/lib/fidl/rust/fidl",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:thiserror",
  ]

  sources = [ "tests/integration_test.rs" ]
}

fuchsia_component("example_component") {
  testonly = true
  component_name = "example"
  manifest = "meta/example.cml"
}

fuchsia_component("cmc_integration_test_component") {
  testonly = true
  component_name = "cmc_integration_test"
  manifest = "meta/cmc_integration_test.cmx"
  deps = [ ":cmc_integration_test_bin" ]
}

fuchsia_test_package("cmc_integration_test") {
  test_components = [ ":cmc_integration_test_component" ]
  deps = [ ":example_component" ]
}

install_host_tools("install") {
  deps = [ ":cmc" ]

  outputs = [ "cmc" ]
}

group("tests") {
  testonly = true

  deps = [
    ":cmc_integration_test",
    ":cmc_test($host_toolchain)",
  ]
}
