# Copyright 2021 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/zircon/tools.gni")
import("//src/developer/ffx/build/ffx_plugin.gni")
import("//src/developer/ffx/build/ffx_tool.gni")

assert(is_host)

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

ffx_plugin("ffx_assembly") {
  version = "0.1.0"
  edition = "2021"
  with_unit_tests = true
  args_with_unit_tests = true

  args_sources = [ "src/args.rs" ]
  sources = [
    "src/base_package.rs",
    "src/blobfs.rs",
    "src/compiled_package.rs",
    "src/extra_hash_descriptor.rs",
    "src/fvm.rs",
    "src/fxfs.rs",
    "src/lib.rs",
    "src/operations.rs",
    "src/operations/board.rs",
    "src/operations/create_system.rs",
    "src/operations/create_update.rs",
    "src/operations/product.rs",
    "src/operations/product/assembly_builder.rs",
    "src/operations/size_check.rs",
    "src/operations/size_check/breakdown.rs",
    "src/operations/size_check/common.rs",
    "src/operations/size_check/diff.rs",
    "src/operations/size_check/package.rs",
    "src/operations/size_check/product.rs",
    "src/operations/size_check/visualization.rs",
    "src/subpackage_blobs_package.rs",
    "src/vbmeta.rs",
    "src/vfs.rs",
    "src/zbi.rs",
  ]
  inputs = [
    "src/operations/size_check/index.html",
    "src/operations/size_check/D3BlobTreeMap.js",
    "//scripts/third_party/d3_v3/d3.js",
    "//scripts/third_party/d3_v3/LICENSE",
  ]
  args_deps = [
    "//src/lib/assembly/images_config",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:camino",
  ]
  deps = [
    "//src/developer/ffx/lib/errors:lib",
    "//src/developer/ffx/lib/fho:lib",
    "//src/developer/ffx/lib/pbms:lib",
    "//src/lib/assembly/assembly_manifest",
    "//src/lib/assembly/base_package",
    "//src/lib/assembly/blob_size",
    "//src/lib/assembly/blobfs",
    "//src/lib/assembly/components",
    "//src/lib/assembly/config_capabilities",
    "//src/lib/assembly/config_data",
    "//src/lib/assembly/config_schema",
    "//src/lib/assembly/domain_config",
    "//src/lib/assembly/driver_manifest",
    "//src/lib/assembly/file_relative_path",
    "//src/lib/assembly/fvm",
    "//src/lib/assembly/fxfs",
    "//src/lib/assembly/images_config",
    "//src/lib/assembly/named_file_map",
    "//src/lib/assembly/package_copy",
    "//src/lib/assembly/package_list",
    "//src/lib/assembly/package_utils",
    "//src/lib/assembly/partitions_config",
    "//src/lib/assembly/platform_configuration",
    "//src/lib/assembly/shell_commands",
    "//src/lib/assembly/structured_config",
    "//src/lib/assembly/subpackage_blobs_package",
    "//src/lib/assembly/tool",
    "//src/lib/assembly/update_package",
    "//src/lib/assembly/update_packages_manifest",
    "//src/lib/assembly/util",
    "//src/lib/assembly/validate_product",
    "//src/lib/assembly/vbmeta",
    "//src/lib/assembly/zbi",
    "//src/lib/fuchsia-url",
    "//src/lib/gcs",
    "//src/lib/structured_ui",
    "//src/lib/utf8_path",
    "//src/sys/pkg/lib/epoch",
    "//src/sys/pkg/lib/fuchsia-hash",
    "//src/sys/pkg/lib/fuchsia-merkle",
    "//src/sys/pkg/lib/fuchsia-pkg",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:camino",
    "//third_party/rust_crates:hex",
    "//third_party/rust_crates:itertools",
    "//third_party/rust_crates:serde",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:serde_json5",
    "//third_party/rust_crates:textwrap",
    "//third_party/rust_crates:tracing",
    "//third_party/rust_crates:url",
  ]
  test_deps = [
    "//src/lib/assembly/test_keys",
    "//src/lib/assembly/test_util",
    "//src/lib/fuchsia-async",
    "//src/storage/blobfs/tools:blobfs",
    "//src/sys/pkg/lib/far/rust:fuchsia-archive",
    "//third_party/rust_crates:assert_matches",
    "//third_party/rust_crates:camino",
    "//third_party/rust_crates:pretty_assertions",
    "//third_party/rust_crates:regex",
    "//third_party/rust_crates:tempfile",
  ]
  configs = [ "//build/config/rust/lints:clippy_warn_all" ]
}

ffx_tool("ffx_assembly_tool") {
  edition = "2021"
  output_name = "ffx-assembly"
  deps = [
    ":ffx_assembly",
    "//src/developer/ffx/lib/fho:lib",
    "//src/lib/fuchsia-async",
  ]
  sources = [ "src/main.rs" ]

  sdk_target_name = "sdk"
  sdk_category = "partner"

  # We avoid instrumenting assembly for certain builds as this negatively impacts performance.
  exclude_toolchain_tags = [
    "asan",
    "coverage",
    "profile",
  ]
}

group("assembly") {
  public_deps = [
    ":ffx_assembly_tool",
    ":ffx_assembly_tool_host_tool",
  ]
}

group("bin") {
  public_deps = [ ":ffx_assembly_tool_versioned" ]
}
