# 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/assembly/assembly_input_bundle.gni")
import("//build/assembly/product_assembly_configuration.gni")
import("//build/python/python_action.gni")
import("//build/security.gni")

if (is_fuchsia) {
  group("assembly") {
    deps = [ "scripts:assembly_input_bundle_tool_install($host_toolchain)" ]
  }

  python_action("validate_product_defs") {
    binary_label = "//build/assembly/scripts:product_def_gn_arg_validator"
    outputs = [ "$target_out_dir/$target_name.txt" ]
    depfile = outputs[0] + ".d"
    args = [
      "--output",
      rebase_path(outputs[0], root_build_dir),
      "--depfile",
      rebase_path(depfile, root_build_dir),
      "--source-root",
      rebase_path("//", root_build_dir),
    ]
  }

  product_assembly_configuration("default_product_config") {
    platform = {
      build_type = "eng"
      feature_set_level = "bootstrap"
      storage = {
        filesystems = {
          volume = {
            fvm = {
              data = {
              }
              blob = {
              }
            }
          }
        }
      }
    }
    product = {
    }
  }
}

if (is_host) {
  group("host_tests") {
    testonly = true
    deps = [ "scripts:tests($host_toolchain)" ]
  }
}
