# 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/components.gni")
import("//build/host.gni")
import("//build/rust/rustc_binary.gni")
import("//build/sdk/sdk_host_tool.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:strsim",
    "//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/features.rs",
    "src/format.rs",
    "src/include.rs",
    "src/main.rs",
    "src/merge.rs",
    "src/opts.rs",
    "src/reference.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
  check_references = false
  unstable_features = [ "services" ]
  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)",
  ]
}
