|  | # 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" ] | 
|  | } | 
|  | } | 
|  | } |