| # Copyright 2020 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/sdk/sdk_atom.gni") | 
 | import("//build/sdk/sdk_atom_alias.gni") | 
 |  | 
 | # Defines a host tool in the SDK. | 
 | # | 
 | # Parameters | 
 | #   category (required) | 
 | #     Publication level of the executable in SDKs. | 
 | #     See //build/sdk/sdk_atom.gni. | 
 | # | 
 | #   sdk_name (optional) | 
 | #     Name of the library in the SDK. | 
 | # | 
 | #   binary (optional) | 
 | #     Path to the tool binary. Defaults to "$root_out_dir/$output_name". | 
 | # | 
 | #   output_name (optional) | 
 | #     The tool's name. Inferred from target_name by default. | 
 | # | 
 | #   sdk_deps (optional) | 
 | #     List of labels representing elements that should be added to SDKs | 
 | #     alongside the present binary. | 
 | #     Labels in the list must represent SDK-ready targets. | 
 | # | 
 | #   deps, etc. | 
 | #     Usual GN meaning. | 
 | template("sdk_host_tool") { | 
 |   assert(defined(invoker.category), "Must define an SDK category") | 
 |  | 
 |   output_name = target_name | 
 |   if (defined(invoker.output_name)) { | 
 |     output_name = invoker.output_name | 
 |   } | 
 |  | 
 |   sdk_name = output_name | 
 |   if (defined(invoker.sdk_name)) { | 
 |     sdk_name = invoker.sdk_name | 
 |   } | 
 |  | 
 |   binary = "$root_out_dir/$output_name" | 
 |   if (defined(invoker.binary)) { | 
 |     binary = invoker.binary | 
 |   } | 
 |  | 
 |   gn_deps = [] | 
 |   if (defined(invoker.deps)) { | 
 |     gn_deps += invoker.deps | 
 |   } | 
 |  | 
 |   file_base = "tools/$output_name" | 
 |  | 
 |   _legacy_tool_diff = sdk_legacy_tool_allowlist | 
 |   _legacy_tool_diff += [ output_name ] | 
 |   _legacy_tool_diff -= [ output_name ] | 
 |   is_legacy_tool = _legacy_tool_diff != sdk_legacy_tool_allowlist | 
 |  | 
 |   # TODO(fxbug.dev/42999): remove extra atom | 
 |   if (is_legacy_tool && current_cpu == host_cpu) { | 
 |     sdk_atom("${target_name}_legacy") { | 
 |       id = "sdk://$file_base" | 
 |  | 
 |       category = invoker.category | 
 |  | 
 |       meta = { | 
 |         dest = "$file_base-meta.json" | 
 |         schema = "host_tool" | 
 |         value = { | 
 |           type = "host_tool" | 
 |           name = output_name | 
 |           root = "tools" | 
 |           files = [ file_base ] | 
 |         } | 
 |       } | 
 |  | 
 |       files = [ | 
 |         { | 
 |           source = binary | 
 |           dest = file_base | 
 |         }, | 
 |       ] | 
 |  | 
 |       if (defined(invoker.sdk_deps)) { | 
 |         deps = invoker.sdk_deps | 
 |       } | 
 |  | 
 |       non_sdk_deps = gn_deps | 
 |     } | 
 |   } else { | 
 |     # TODO(fxbug.dev/42999): dummy target to soften transition. | 
 |     # Remove once all petal dependents are removed. | 
 |     _non_legacy_name = ":" + target_name | 
 |     sdk_atom_alias("${target_name}_legacy") { | 
 |       atom = _non_legacy_name | 
 |     } | 
 |   } | 
 |  | 
 |   if (host_os == "linux" || host_os == "mac") { | 
 |     file_base = "tools/$current_cpu/$sdk_name" | 
 |   } | 
 |  | 
 |   sdk_atom(target_name) { | 
 |     id = "sdk://$file_base" | 
 |  | 
 |     category = invoker.category | 
 |  | 
 |     meta = { | 
 |       dest = "$file_base-meta.json" | 
 |       schema = "host_tool" | 
 |       value = { | 
 |         type = "host_tool" | 
 |         name = output_name | 
 |         root = "tools" | 
 |         files = [ file_base ] | 
 |       } | 
 |     } | 
 |  | 
 |     files = [ | 
 |       { | 
 |         source = binary | 
 |         dest = file_base | 
 |       }, | 
 |     ] | 
 |  | 
 |     if (defined(invoker.sdk_deps)) { | 
 |       deps = invoker.sdk_deps | 
 |     } | 
 |  | 
 |     non_sdk_deps = invoker.deps | 
 |   } | 
 | } |