| # Copyright 2021 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. | |
| # Template used internally by python_action() and others below | |
| # Uses the same parameters as their callers, with the addition of: | |
| # | |
| # Parameters: | |
| # target_type: Inner target type to invoke (e.g. "action") | |
| # | |
| template("_python_action") { | |
| assert( | |
| defined(invoker.binary_label), | |
| "The label of the python_binary() to use to perform the action must be specified.") | |
| # force the binary_label into the host toolchain | |
| binary_label_no_toolchain = | |
| get_label_info(invoker.binary_label, "label_no_toolchain") | |
| binary_label = "${binary_label_no_toolchain}(${host_toolchain})" | |
| binary_label_name = get_label_info(binary_label, "name") | |
| binary_tool_output_dir = get_label_info(binary_label, "target_out_dir") | |
| binary_tool_output_name = "${binary_tool_output_dir}/${binary_label_name}.pyz" | |
| target(invoker.target_type, target_name) { | |
| forward_variables_from(invoker, | |
| "*", | |
| [ | |
| "assert_no_deps", | |
| "deps", | |
| "binary_label", | |
| "script", | |
| "target_type", | |
| ]) | |
| script = binary_tool_output_name | |
| deps = [ binary_label ] | |
| if (defined(invoker.deps)) { | |
| deps += invoker.deps | |
| } | |
| } | |
| } | |
| # Declares an action() that uses a python_binary() target as its script | |
| # | |
| # This sets up the python module search path using the GN paths specified, and | |
| # otherwise is the same as an action(), forwarding all other parameters to the | |
| # action(). | |
| # | |
| # Parameters | |
| # | |
| # * binary_label | |
| # - Required: Label (without toolchain), to python_binary() target that is | |
| # to be executed by the action. | |
| # - Type: label_no_toolchain | |
| # | |
| # See action() for others, except for `script`. | |
| # | |
| template("python_action") { | |
| _python_action(target_name) { | |
| forward_variables_from(invoker, "*", [ "target_type" ]) | |
| target_type = "action" | |
| } | |
| } | |
| # Declares an action_foreach() that uses a python_binary() target as its script | |
| # | |
| # This sets up the python module search path using the GN paths specified, and | |
| # otherwise is the same as an action_foreach(), forwarding all other parameters | |
| # to the action_foreach(). python_action_foreach() is to action_foreach() as | |
| # python_action() is to action(). | |
| # | |
| # Parameters | |
| # | |
| # * binary_label | |
| # - Required: Label (without toolchain), to python_binary() target that is | |
| # to be executed by the action. | |
| # - Type: label_no_toolchain | |
| # | |
| # See action_foreach() for others, except for `script`. | |
| # | |
| template("python_action_foreach") { | |
| _python_action(target_name) { | |
| forward_variables_from(invoker, "*", [ "target_type" ]) | |
| target_type = "action_foreach" | |
| } | |
| } | |
| # Declares an hermetic_inputs_action() that uses a python_binary for the script | |
| # | |
| # This is useful if the action's command is not hermetic, which is allowed for | |
| # those that generate hermetic input files. See documentation for action() and | |
| # hermetic_inputs_action() in //build/config/BUILDCONFIG.gn for more details. | |
| # | |
| # This sets up the python module search path using the GN paths specified, and | |
| # otherwise is the same as an action(), forwarding all invoker vars to the | |
| # action() | |
| # | |
| # Parameters: | |
| # | |
| # binary_label | |
| # [label] Label (without host toolchain), to python binary that is to be | |
| # executed by the action. | |
| # | |
| # all others are passed to hermetic_inputs_action() as expected, | |
| # | |
| template("python_hermetic_inputs_action") { | |
| _python_action(target_name) { | |
| forward_variables_from(invoker, "*") | |
| target_type = "hermetic_inputs_action" | |
| } | |
| } |