mirror of
https://fuchsia.googlesource.com/third_party/pigweed.googlesource.com/pigweed/pigweed
synced 2024-09-20 22:00:58 +00:00
127 lines
4.1 KiB
Plaintext
127 lines
4.1 KiB
Plaintext
|
# Copyright 2021 The Pigweed Authors
|
||
|
#
|
||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||
|
# use this file except in compliance with the License. You may obtain a copy of
|
||
|
# the License at
|
||
|
#
|
||
|
# https://www.apache.org/licenses/LICENSE-2.0
|
||
|
#
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||
|
# License for the specific language governing permissions and limitations under
|
||
|
# the License.
|
||
|
|
||
|
import("//build_overrides/pigweed.gni")
|
||
|
|
||
|
import("$dir_pw_build/python.gni")
|
||
|
import("$dir_pw_build/python_action.gni")
|
||
|
import("$dir_pw_build/zip.gni")
|
||
|
|
||
|
# Builds a directory containing a collection of Python wheels.
|
||
|
#
|
||
|
# Given one or more pw_python_package targets, this target will build their
|
||
|
# .wheel sub-targets along with the .wheel sub-targets of all dependencies,
|
||
|
# direct and indirect, as understood by GN. The resulting .whl files will be
|
||
|
# collected into a single directory called 'python_wheels'.
|
||
|
#
|
||
|
# Args:
|
||
|
# packages: A list of pw_python_package targets whose wheels should be
|
||
|
# included; their dependencies will be pulled in as wheels also.
|
||
|
template("pw_python_wheels") {
|
||
|
_outer_name = target_name
|
||
|
_wheel_paths_path = "${target_gen_dir}/${target_name}_wheel_paths.txt"
|
||
|
|
||
|
_deps = []
|
||
|
if (defined(invoker.deps)) {
|
||
|
_deps = invoker.deps
|
||
|
}
|
||
|
|
||
|
_packages = []
|
||
|
foreach(_pkg, invoker.packages) {
|
||
|
_pkg_name = get_label_info(_pkg, "label_no_toolchain")
|
||
|
_pkg_toolchain = get_label_info(_pkg, "toolchain")
|
||
|
_packages += [ "${_pkg_name}.wheel(${_pkg_toolchain})" ]
|
||
|
}
|
||
|
|
||
|
# Build a list of relative paths containing all the wheels we depend on.
|
||
|
generated_file("${target_name}._wheel_paths") {
|
||
|
data_keys = [ "pw_python_package_wheels" ]
|
||
|
rebase = root_build_dir
|
||
|
deps = _packages
|
||
|
outputs = [ _wheel_paths_path ]
|
||
|
}
|
||
|
|
||
|
pw_python_action(target_name) {
|
||
|
deps = _deps + [ ":${_outer_name}._wheel_paths" ]
|
||
|
module = "pw_build.collect_wheels"
|
||
|
|
||
|
args = [
|
||
|
"--prefix",
|
||
|
rebase_path(root_build_dir),
|
||
|
"--suffix",
|
||
|
rebase_path(_wheel_paths_path),
|
||
|
"--out_dir",
|
||
|
rebase_path("${target_out_dir}/python_wheels"),
|
||
|
]
|
||
|
|
||
|
stamp = true
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Builds a .zip containing Python wheels and setup scripts.
|
||
|
#
|
||
|
# The resulting .zip archive will contain a directory with Python wheels for
|
||
|
# all pw_python_package targets listed in 'packages', plus wheels for any
|
||
|
# pw_python_package targets those packages depend on, directly or indirectly,
|
||
|
# as understood by GN.
|
||
|
#
|
||
|
# In addition to Python wheels, the resulting .zip will also contain simple
|
||
|
# setup scripts for Linux, MacOS, and Windows that take care of creating a
|
||
|
# Python venv and installing all the included wheels into it, and a README.md
|
||
|
# file with setup and usage instructions.
|
||
|
#
|
||
|
# Args:
|
||
|
# packages: A list of pw_python_package targets whose wheels should be
|
||
|
# included; their dependencies will be pulled in as wheels also.
|
||
|
# inputs: An optional list of extra files to include in the generated .zip,
|
||
|
# formatted the same was as the 'inputs' argument to pw_zip targets.
|
||
|
# dirs: An optional list of directories to include in the generated .zip,
|
||
|
# formatted the same way as the 'dirs' argument to pw_zip targets.
|
||
|
template("pw_python_zip_with_setup") {
|
||
|
_outer_name = target_name
|
||
|
_zip_path = "${target_out_dir}/${target_name}.zip"
|
||
|
_deps = []
|
||
|
if (defined(invoker.deps)) {
|
||
|
_deps = invoker.deps
|
||
|
}
|
||
|
_inputs = []
|
||
|
if (defined(invoker.inputs)) {
|
||
|
_inputs = invoker.inputs
|
||
|
}
|
||
|
_dirs = []
|
||
|
if (defined(invoker.dirs)) {
|
||
|
_dirs = invoker.dirs
|
||
|
}
|
||
|
|
||
|
pw_python_wheels("${target_name}.wheels") {
|
||
|
packages = invoker.packages
|
||
|
deps = _deps
|
||
|
}
|
||
|
|
||
|
pw_zip("${target_name}") {
|
||
|
inputs = _inputs + [
|
||
|
"$dir_pw_build/python_dist/setup.bat > /${target_name}/",
|
||
|
"$dir_pw_build/python_dist/setup.sh > /${target_name}/",
|
||
|
]
|
||
|
|
||
|
dirs =
|
||
|
_dirs +
|
||
|
[ "${target_out_dir}/python_wheels/ > /${target_name}/python_wheels/" ]
|
||
|
|
||
|
output = _zip_path
|
||
|
|
||
|
deps = [ ":${_outer_name}.wheels" ]
|
||
|
}
|
||
|
}
|