blob: 06704378fcf194142f377c11afcf14ab6e4262f4 [file] [log] [blame]
# 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/compiled_action.gni")
import("//build/sdk/sdk_atom.gni")
template("zx_host_tool") {
# NOTE: |is_linux| is required because some //vendor/ targets depend on
# //zircon/tools/zbi(//build/toolchain:linux_x64), and that toolchain
# doesn't set `is_host` to true.
if (is_host || is_linux) {
executable(target_name) {
forward_variables_from(invoker,
"*",
[
"target_name",
"testonly",
])
forward_variables_from(invoker, [ "testonly" ])
if (!defined(deps)) {
deps = []
}
deps += [ "//build:deprecated_zx_wrapper_allowlist" ]
}
# Uncomment the below to generate the allowlist
#print("\"" + get_label_info(":$target_name", "dir") + "/*\",")
output_dir = root_out_dir
if (defined(invoker.output_dir)) {
output_dir = invoker.output_dir
}
output_name = target_name
if (defined(invoker.output_name)) {
output_name = invoker.output_name
}
output_extension = ""
if (current_os == "win") {
output_extension = "exe"
}
if (defined(invoker.output_extension)) {
output_extension = invoker.output_extension
}
output_file = "$output_dir/$output_name"
if (output_extension != "") {
output_file += ".$output_extension"
}
tool_name = target_name
file_base = "tools/$tool_name"
tool_src = output_file
# NOTE: Don't create SDK atoms for testonly host tools, this is
# necessary to deal with //zircon/system/ulib/hwreg/test/asm
forward_variables_from(invoker, [ "testonly" ])
if (!defined(testonly)) {
testonly = false
}
# TODO(fxbug.dev/42999): remove extra atom
if (current_cpu == host_cpu && !testonly) {
sdk_atom("${target_name}_sdk_legacy") {
id = "sdk://$file_base"
category = "partner"
meta = {
dest = "$file_base-meta.json"
schema = "host_tool"
value = {
type = "host_tool"
name = tool_name
root = "tools"
files = [ file_base ]
}
}
files = [
{
source = tool_src
dest = file_base
},
]
non_sdk_deps = [ ":${tool_name}" ]
}
}
if (host_os == "linux" || host_os == "mac") {
file_base = "tools/$current_cpu/$tool_name"
}
sdk_atom("${tool_name}_sdk") {
id = "sdk://$file_base"
category = "partner"
meta = {
dest = "$file_base-meta.json"
schema = "host_tool"
value = {
type = "host_tool"
name = tool_name
root = "tools"
files = [ file_base ]
}
}
files = [
{
source = tool_src
dest = file_base
},
]
non_sdk_deps = [ ":${tool_name}" ]
}
} else {
# Not on host, don't compile anything.
not_needed(invoker, "*")
not_needed([ "target_name" ])
}
}
set_defaults("zx_host_tool") {
configs = default_executable_configs
}
template("zx_host_tool_action") {
assert(defined(invoker.tool), "tool must be defined for $target_name")
compiled_action(target_name) {
tool = invoker.tool
forward_variables_from(invoker, "*", [ "tool" ])
}
}
template("zx_host_tool_action_foreach") {
assert(defined(invoker.tool), "tool must be defined for $target_name")
compiled_action_foreach(target_name) {
tool = invoker.tool
forward_variables_from(invoker, "*", [ "tool" ])
}
}