# Copyright 2023 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")

group("fuchsia-sdk-run") {
  deps = [
    ":fuchsia-sdk-run-bin",
    ":host-tool",
  ]
}

rustc_binary("fuchsia-sdk-run-bin") {
  edition = "2021"
  output_name = "fuchsia-sdk-run"
  with_unit_tests = true

  deps = [
    "//src/developer/ffx/command:lib",
    "//src/developer/ffx/config:lib",
    "//src/developer/ffx/config/domain:lib",
    "//src/lib/fuchsia",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:camino",
    "//third_party/rust_crates:tracing",
  ]

  test_deps = [ ":sdk_exported" ]

  sources = [ "src/main.rs" ]
}

install_host_tools("host-tool") {
  deps = [ ":fuchsia-sdk-run-bin" ]
  outputs = [ "fuchsia-sdk-run" ]
}

host_test_data("sdk_exported") {
  sources = [ get_label_info("//sdk:core($default_toolchain)", "root_out_dir") +
              "/sdk/exported/core" ]
  deps = [ "//sdk:core($default_toolchain)" ]
}

sdk_host_tool("fuchsia-sdk-run_sdk") {
  category = "partner"
  output_name = "fuchsia-sdk-run"
  deps = [ ":fuchsia-sdk-run-bin" ]
}

group("tests") {
  testonly = true
  deps = [ ":fuchsia-sdk-run-bin_test" ]
}
