blob: 31ac4a8fdf577d515a84d6f9c5a018499c9261c7 [file] [log] [blame]
# 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,
)