[sdk] New template for prebuilt host binaries.
Test: verified that a local instance was correctly included in SDK archives.
Bug: DX-209
Change-Id: I97ae4ec3a93f7d93ce0a401945e525cf8a1b8268
diff --git a/cpp/sdk_executable.gni b/cpp/sdk_executable.gni
index eb9fcd5..85b1840 100644
--- a/cpp/sdk_executable.gni
+++ b/cpp/sdk_executable.gni
@@ -10,7 +10,7 @@
# allow the resulting binary to be included in an SDK.
#
# category (required)
-# Publication level of the library in SDKs.
+# Publication level of the executable in SDKs.
# See //build/sdk/sdk_atom.gni.
#
# sdk_deps (optional)
diff --git a/sdk/sdk_prebuilt_executable.gni b/sdk/sdk_prebuilt_executable.gni
new file mode 100644
index 0000000..5cd8933
--- /dev/null
+++ b/sdk/sdk_prebuilt_executable.gni
@@ -0,0 +1,66 @@
+# 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/sdk/sdk_atom.gni")
+
+# A prebuilt host executable which can be bundled in an SDK.
+#
+# prebuilt (required)
+# Label of the prebuilt executable.
+#
+# category (required)
+# Publication level of the executable in SDKs.
+# See //build/sdk/sdk_atom.gni.
+#
+# 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.
+
+template("sdk_prebuilt_executable") {
+ assert(defined(invoker.category), "Must define an SDK category")
+ assert(defined(invoker.prebuilt), "Must set the path")
+ if (is_fuchsia) {
+ assert(false, "Only valid for host tools")
+ }
+
+ main_target_name = target_name
+
+ group(main_target_name) {
+ # No-op target, only used to abide by naming conventions.
+ }
+
+ tool_name = get_path_info(invoker.prebuilt, "file")
+ file_base = "tools/$tool_name"
+
+ sdk_atom("${target_name}_sdk") {
+ id = "sdk://tools/$tool_name"
+
+ category = invoker.category
+
+ meta = {
+ dest = "$file_base-meta.json"
+ schema = "host_tool"
+ value = {
+ type = "host_tool"
+ name = tool_name
+ root = "tools"
+ files = [ file_base ]
+ }
+ }
+
+ files = [
+ {
+ source = invoker.prebuilt
+ dest = file_base
+ },
+ ]
+
+ if (defined(invoker.sdk_deps)) {
+ deps = invoker.sdk_deps
+ }
+
+ non_sdk_deps = [ ":$main_target_name" ]
+ }
+}