# 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.

# Creates JSON with documentation from all drivers.
# Every driver can optionally provide a ${target_name}-driver-info.json in its folder.
# Documentation from this JSON file is aggregated into a global documentation file.
# If a driver does not supply this file, an entry in the global documentation file is still
# generated.
#
# Parameters
#   fuchsia_driver_doc_file
#     File containing a generated driver documentation entry.
#
#   testonly
#   visibility
template("create_all_drivers_doc") {
  all_doc_target = "${target_name}_all_doc"
  all_doc_output = "${target_gen_dir}/${target_name}_all_doc"
  generated_file(all_doc_target) {
    forward_variables_from(invoker,
                           [
                             "testonly",
                             "visibility",
                           ])
    visibility = [
      ":$target_name",
      ":create-all-drivers-doc",
      "//bundles:create_all_drivers_doc",
    ]
    outputs = [ all_doc_output ]
    deps = invoker.deps
    rebase = root_out_dir

    # File containing driver documentation.
    data_keys = [ "fuchsia_driver_doc_file" ]
    walk_keys = [ "driver_component_barrier" ]
  }

  action(target_name) {
    forward_variables_from(invoker, [ "testonly" ])
    deps = [
      ":${all_doc_target}",
      "//build/drivers:gen_create_all_drivers_doc",
    ]
    script =
        get_label_info("//build/drivers:gen_create_all_drivers_doc",
                       "target_out_dir") + "/gen_create_all_drivers_doc.pyz"
    areas_file = "//build/drivers/areas.txt"
    inputs = [
      all_doc_output,
      areas_file,
    ]
    metadata = {
      # Record metadata for the //tools/docsgen build API.
      generated_docset = [
        {
          name = "driversdoc"
          origin_files = [ rebase_path("$root_gen_dir/all_drivers_doc.yaml",
                                       root_build_dir) ]
          dest_folder = "sdk/drivers"
        },
      ]
    }
    outputs = [ "${target_gen_dir}/all_drivers_doc.yaml" ]
    depfile = "${target_gen_dir}/${target_name}.d"
    args = [
      "--areas_list",
      rebase_path(areas_file, root_build_dir),
      "--doc_list",
      rebase_path(all_doc_output, root_build_dir),
      "--output",
      rebase_path(outputs[0], root_build_dir),
      "--dep_file",
      rebase_path(depfile, root_build_dir),
    ]
  }
}
