# 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, )