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