# 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/python/python_binary.gni")
import("//build/python/python_host_test.gni")

assert(is_host, "Only include assembly build scripts via the host toolchain")

python_binary("make_legacy_config") {
  main_source = "make_legacy_config.py"
  deps = [
    "//build/python/modules/assembly",
    "//build/python/modules/depfile",
    "//build/python/modules/serialization",
  ]
}

python_host_test("test_make_legacy_config") {
  main_source = "test_make_legacy_config.py"
  sources = [ "make_legacy_config.py" ]
  libraries = [
    "//build/python/modules/assembly",
    "//build/python/modules/serialization",
    "//build/python/tests/fast_copy_mock",
  ]
}

python_binary("assembly_input_bundle_tool") {
  main_source = "assembly_input_bundle_tool.py"
  deps = [
    "//build/python/modules/assembly",
    "//build/python/modules/depfile",
  ]
}

python_binary("compare_image_assembly_configs") {
  main_source = "compare_image_assembly_config_contents.py"
  deps = [
    "//build/python/modules/assembly",
    "//build/python/modules/depfile",
    "//build/python/modules/serialization",
  ]
}

# The standard `install_host_tools()` template doesn't work for this, because it
# assumes that all binaries are at `${root_build_dir}/<tool>`, and the
# `python_binary()` uses `$target_out_dir/<tool>`.  But the import is still
# needed to have `${host_tools_dir}` defined.
#
copy("assembly_input_bundle_tool_install") {
  deps = [ ":assembly_input_bundle_tool" ]
  outputs = [ "${host_tools_dir}/assembly_input_bundle_tool" ]
  sources = [ "${target_out_dir}/assembly_input_bundle_tool.pyz" ]
}

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