| # Copyright 2024 The Bazel Authors. All rights reserved. |
| # |
| # 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 |
| # |
| # http://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. |
| |
| """Create toolchain alias targets.""" |
| |
| load("@rules_python//python:versions.bzl", "PLATFORMS") |
| |
| def toolchain_aliases(*, name, platforms, visibility = None, native = native): |
| """Create toolchain aliases for the python toolchains. |
| |
| Args: |
| name: {type}`str` The name of the current repository. |
| platforms: {type}`platforms` The list of platforms that are supported |
| for the current toolchain repository. |
| visibility: {type}`list[Target] | None` The visibility of the aliases. |
| native: The native struct used in the macro, useful for testing. |
| """ |
| for platform in PLATFORMS.keys(): |
| if platform not in platforms: |
| continue |
| |
| native.config_setting( |
| name = platform, |
| flag_values = PLATFORMS[platform].flag_values, |
| constraint_values = PLATFORMS[platform].compatible_with, |
| visibility = ["//visibility:private"], |
| ) |
| |
| prefix = name |
| for name in [ |
| "files", |
| "includes", |
| "libpython", |
| "py3_runtime", |
| "python_headers", |
| "python_runtimes", |
| ]: |
| native.alias( |
| name = name, |
| actual = select({ |
| ":" + platform: "@{}_{}//:{}".format(prefix, platform, name) |
| for platform in platforms |
| }), |
| visibility = visibility, |
| ) |
| |
| native.alias( |
| name = "python3", |
| actual = select({ |
| ":" + platform: "@{}_{}//:{}".format(prefix, platform, "python.exe" if "windows" in platform else "bin/python3") |
| for platform in platforms |
| }), |
| visibility = visibility, |
| ) |
| native.alias( |
| name = "pip", |
| actual = select({ |
| ":" + platform: "@{}_{}//:python_runtimes".format(prefix, platform) |
| for platform in platforms |
| if "windows" not in platform |
| }), |
| visibility = visibility, |
| ) |