# Copyright 2019 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/compiled_action.gni")
import("config.gni")

# Aggregates multiple SDKs into a single archive.
#
# Parameters
#
#   deps (required)
#     List of labels representing SDKs to merge.
#     A label may point to an `sdk` or a `merged_sdk` instance.

template("merged_sdk") {
  assert(defined(invoker.deps), "Must define a 'deps' parameter")
  assert(invoker.deps != [], "'deps' may not be empty")

  if (!build_sdk_archives) {
    # This template is a no-op if SDK archives are not emitted.
    group(target_name) {
      deps = invoker.deps
    }
  } else {
    index = 0
    latest_archive = ""
    latest_step = ""
    foreach(dep, invoker.deps) {
      gen_dir = get_label_info(dep, "target_gen_dir")
      name = get_label_info(dep, "name")
      dep_archive = "$gen_dir/$name.tar.gz"

      if (index == 0) {
        latest_archive = dep_archive
      } else {
        merged_archive = "$target_gen_dir/$target_name.$index.tar.gz"
        step = "${target_name}_merge_${index}"

        compiled_action(step) {
          forward_variables_from(invoker, [ "testonly" ])

          tool = "//build/sdk/tools/merge:merge_sdk"

          inputs = [
            dep_archive,
            latest_archive,
          ]

          outputs = [ merged_archive ]

          args = [
            "--base-archive",
            rebase_path(latest_archive),
            "--complement-archive",
            rebase_path(dep_archive),
            "--output-archive",
            rebase_path(merged_archive),
          ]

          if (index == 1) {
            public_deps = invoker.deps
          } else {
            public_deps = [ ":$latest_step" ]
          }
        }

        latest_archive = merged_archive
        latest_step = step
      }

      index = index + 1
    }

    copy(target_name) {
      forward_variables_from(invoker, [ "testonly" ])

      sources = [ latest_archive ]

      outputs = [ "$target_gen_dir/$target_name.tar.gz" ]

      public_deps = [ ":$latest_step" ]
    }
  }
}
