blob: 72fb2778132ebaa508d4aa04950be4dfc318c8f9 [file] [log] [blame]
# Copyright 2024 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/host.gni")
# Publishes a Python binary as a host tool for use with `fx`.
#
# Example:
#
# This installs `fx my-tool`:
# ```
# python_binary("main") {
# ...
# }
#
# install_python_tool("install") {
# name = "my-tool"
# binary = ":main"
# }
# ```
#
# Parameters
#
# name (required)
# Name of the resulting host tool. This is the name used to invoke the tool
# using `fx`.
# Type: string
#
# binary (required)
# The python_binary target to install.
# Type: target_name
#
# emit_tool_path (optional)
# If false, disable emitting a tool path for this binary.
# Type: boolean
# Default: true
template("install_python_tool") {
assert(defined(invoker.name), "`name` must be set to the desired output name")
assert(defined(invoker.binary),
"`binary` must be set to a python_binary to install")
outs = get_target_outputs(invoker.binary)
name = invoker.name
binary = invoker.binary
# Rename the resulting .pyz for the host tool
copy("${target_name}-copy") {
deps = [ binary ]
sources = [ outs[0] ]
outputs = [ "${root_out_dir}/${name}" ]
}
install_host_tools(target_name) {
deps = [ ":${target_name}-copy" ]
outputs = [ name ]
if (!defined(invoker.emit_tool_path)) {
emit_tool_path = true
} else {
emit_tool_path = invoker.emit_tool_path
}
_dep_outputs = get_target_outputs(deps[0])
rebased_output_file = rebase_path(_dep_outputs[0], root_build_dir)
metadata = {
if (emit_tool_path) {
tool_paths = [
{
cpu = current_cpu
label = get_label_info(":$target_name", "label_with_toolchain")
name = outputs[0]
os = current_os
path = rebased_output_file
},
]
}
}
}
}