mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
124 lines
3.6 KiB
Plaintext
124 lines
3.6 KiB
Plaintext
# Copyright 2013 The Flutter 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("//flutter/tools/python/python3_action.gni")
|
|
|
|
# Defines a Python binary.
|
|
#
|
|
# Example
|
|
#
|
|
# ```
|
|
# python_binary("main") {
|
|
# main_source = "main.py"
|
|
# main_callable = "main"
|
|
# sources = [
|
|
# "foo.py",
|
|
# "bar.py",
|
|
# ]
|
|
# output_name = "main.pyz"
|
|
# deps = [ "//path/to/lib" ]
|
|
# }
|
|
# ```
|
|
#
|
|
# Parameters
|
|
#
|
|
# main_source (required)
|
|
# Source file including the entry callable for this binary.
|
|
# This file will typically contain
|
|
# ```
|
|
# if __name__ == "__main__":
|
|
# main()
|
|
# ```
|
|
# Type: path
|
|
#
|
|
# main_callable (optional)
|
|
# Main callable, which serves as the entry point of the output zip archive.
|
|
# In the example above, this is "main".
|
|
# Type: string
|
|
# Default: main
|
|
#
|
|
# output_name (optional)
|
|
# Name of the output Python zip archive, must have .pyz as extension.
|
|
# Type: string
|
|
# Default: ${target_name}.pyz
|
|
#
|
|
# sources
|
|
# deps
|
|
# visibility
|
|
# testonly
|
|
template("python_binary") {
|
|
assert(defined(invoker.main_source), "main_source is required")
|
|
|
|
_library_infos_target = "${target_name}_library_infos"
|
|
_library_infos_json = "${target_gen_dir}/${target_name}_library_infos.json"
|
|
generated_file(_library_infos_target) {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"testonly",
|
|
"deps",
|
|
])
|
|
visibility = [ ":*" ]
|
|
|
|
outputs = [ _library_infos_json ]
|
|
output_conversion = "json"
|
|
data_keys = [ "library_info" ]
|
|
walk_keys = [ "library_info_barrier" ]
|
|
}
|
|
|
|
# action(target_name) {
|
|
python3_action(target_name) {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"testonly",
|
|
"visibility",
|
|
])
|
|
|
|
sources = [ invoker.main_source ]
|
|
if (defined(invoker.sources)) {
|
|
sources += invoker.sources
|
|
}
|
|
inputs = [ _library_infos_json ]
|
|
deps = [ ":${_library_infos_target}" ]
|
|
|
|
# Output must be a .pyz, so our build knows to use a vendored Python
|
|
# interpreter to run them.
|
|
#
|
|
# Output a single .pyz file makes the output deterministic, otherwise we'd
|
|
# have to list out all the library sources that will be copied to output
|
|
# directory, which is not possible because they are not known until the
|
|
# generated JSON file is parsed at build time.
|
|
_output = "${target_out_dir}/${target_name}.pyz"
|
|
if (defined(invoker.output_name)) {
|
|
assert(get_path_info(invoker.output_name, "extension") == "pyz",
|
|
"output_name must have .pyz as extension")
|
|
_output = "${target_out_dir}/${invoker.output_name}"
|
|
}
|
|
outputs = [ _output ]
|
|
|
|
_main_callable = "main"
|
|
if (defined(invoker.main_callable)) {
|
|
_main_callable = invoker.main_callable
|
|
}
|
|
|
|
script = "//flutter/tools/fuchsia/python/package_python_binary.py"
|
|
depfile = "${target_out_dir}/${target_name}.d"
|
|
args = [ "--sources" ] + rebase_path(sources, root_build_dir) + [
|
|
"--target_name",
|
|
target_name,
|
|
"--main_source",
|
|
rebase_path(invoker.main_source, root_build_dir),
|
|
"--main_callable",
|
|
_main_callable,
|
|
"--library_infos",
|
|
rebase_path(_library_infos_json, root_build_dir),
|
|
"--depfile",
|
|
rebase_path(depfile, root_build_dir),
|
|
"--gen_dir",
|
|
rebase_path(target_gen_dir, root_build_dir),
|
|
"--output",
|
|
rebase_path(_output, root_build_dir),
|
|
]
|
|
}
|
|
}
|