Skip to content

Commit 601612a

Browse files
authored
chore(uv): Generate fewer targets for platform constraints (#727)
skylib's implementation of `config_setting_group` is a little wild, it generates chains of selects and alias targets. We don't really need to do that, we can just declare what we want directly. `bazel query //uv/private/constraints/platform:all | wc -l` drops from 12K to 5.3K. All the removed targets were private so feels like this should be fine. Also: before: <img width="1681" height="238" alt="image" src="https://github.com/user-attachments/assets/6f849dd8-bb39-4811-8bcf-e64ec7f94eac" /> after: <img width="1675" height="280" alt="image" src="https://github.com/user-attachments/assets/ec71aa2e-3bed-4ee0-949a-8d050258e79a" /> --- ### Changes are visible to end-users: no ### Test plan - Covered by existing test cases
1 parent e9e00eb commit 601612a

File tree

2 files changed

+46
-55
lines changed

2 files changed

+46
-55
lines changed

uv/private/constraints/platform/defs.bzl

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,23 +38,6 @@ def supported_platform(platform_tag):
3838
# Adapted from rules_python's config_settings.bzl
3939
MAJOR_MINOR_FLAG = Label("//uv/private/constraints/platform:platform_version")
4040

41-
def is_platform_version_at_least(name, version = None, visibility = None, **kwargs):
42-
version = version or name
43-
flag_name = "_{}_flag".format(name)
44-
native.config_setting(
45-
name = name,
46-
flag_values = {
47-
flag_name: "true",
48-
},
49-
visibility = visibility,
50-
)
51-
_platform_version_at_least(
52-
name = flag_name,
53-
at_least = version,
54-
visibility = ["//visibility:private"],
55-
**kwargs
56-
)
57-
5841
def _platform_version_at_least_impl(ctx):
5942
flag_value = ctx.attr._major_minor[BuildSettingInfo].value
6043

@@ -67,7 +50,7 @@ def _platform_version_at_least_impl(ctx):
6750
value = "true" if current >= at_least else "false"
6851
return [config_common.FeatureFlagInfo(value = value)]
6952

70-
_platform_version_at_least = rule(
53+
platform_version_at_least = rule(
7154
implementation = _platform_version_at_least_impl,
7255
attrs = {
7356
"at_least": attr.string(mandatory = True),

uv/private/constraints/platform/macro.bzl

Lines changed: 45 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
33
"""
44

5-
load("@bazel_skylib//lib:selects.bzl", "selects")
6-
load(":defs.bzl", "is_platform_version_at_least")
5+
load(":defs.bzl", "platform_version_at_least")
76

87
## These are defined but we're ignoring them for now.
98
# android_21_arm64_v8a
@@ -74,32 +73,39 @@ def generate_macos(visibility):
7473
# Go a bit out into the future there
7574
for major in range(10, 30):
7675
for minor in range(0, 20):
77-
name = "is_macos_at_least_{}_{}".format(major, minor)
78-
is_platform_version_at_least(
79-
name = name,
80-
version = "{}.{}".format(major, minor),
81-
visibility = ["//visibility:private"],
76+
major_minor = (major, minor)
77+
version_flag = "_is_macos_at_least_%s_%s_flat" % major_minor
78+
platform_version_at_least(
79+
name = version_flag,
80+
at_least = "%s.%s" % major_minor,
8281
)
8382

8483
for arch in arches:
85-
selects.config_setting_group(
86-
name = "macosx_{}_{}_{}".format(major, minor, arch),
87-
match_all = [
88-
name,
89-
":is_libsystem",
84+
native.config_setting(
85+
name = "macosx_%s_%s_%s" % (major, minor, arch),
86+
flag_values = {
87+
version_flag: "true",
88+
":platform_libc": "libsystem",
89+
},
90+
constraint_values = [
9091
"@platforms//os:osx",
91-
"@platforms//cpu:{}".format(platform_repo_name_mangling.get(arch, arch)),
92+
"@platforms//cpu:" + platform_repo_name_mangling.get(arch, arch),
9293
],
9394
visibility = visibility,
9495
)
9596

9697
for group, members in arch_groups.items():
97-
selects.config_setting_group(
98-
name = "macosx_{}_{}_{}".format(major, minor, group),
99-
match_any = [
100-
":macosx_{}_{}_{}".format(major, minor, it)
101-
for it in members
102-
],
98+
options = [
99+
":macosx_%s_%s_%s" % (major, minor, it)
100+
for it in members
101+
]
102+
103+
branches = {opt: opt for opt in options[:-1]}
104+
branches["//conditions:default"] = options[-1]
105+
106+
native.alias(
107+
name = "macosx_%s_%s_%s" % (major, minor, group),
108+
actual = select(branches),
103109
visibility = visibility,
104110
)
105111

@@ -136,19 +142,20 @@ def generate_manylinux(visibility):
136142
# glibc 1.X ran for not that long and was in the 90s
137143
for major in [2]:
138144
for minor in range(0, 51):
139-
name = "is_glibc_at_least_{}_{}".format(major, minor)
140-
is_platform_version_at_least(
141-
name = name,
142-
version = "{}.{}".format(major, minor),
143-
visibility = ["//visibility:private"],
145+
version_flag = "_is_glibc_at_least_{}_{}".format(major, minor)
146+
platform_version_at_least(
147+
name = version_flag,
148+
at_least = "{}.{}".format(major, minor),
144149
)
145150

146151
for arch in arches:
147-
selects.config_setting_group(
152+
native.config_setting(
148153
name = "manylinux_{}_{}_{}".format(major, minor, arch),
149-
match_all = [
150-
name,
151-
":is_glibc",
154+
flag_values = {
155+
version_flag: "true",
156+
":platform_libc": "glibc",
157+
},
158+
constraint_values = [
152159
"@platforms//os:linux",
153160
"@platforms//cpu:{}".format(platform_repo_name_mangling.get(arch, arch)),
154161
],
@@ -199,19 +206,20 @@ def generate_musllinux(visibility):
199206
[2, 1], # Hypothetical
200207
[2, 2], # Hypothetical
201208
]:
202-
name = "is_musl_at_least_{}_{}".format(major, minor)
203-
is_platform_version_at_least(
204-
name = name,
205-
version = "{}.{}".format(major, minor),
206-
visibility = ["//visibility:private"],
209+
version_flag = "_is_musl_at_least_{}_{}".format(major, minor)
210+
platform_version_at_least(
211+
name = version_flag,
212+
at_least = "{}.{}".format(major, minor),
207213
)
208214

209215
for arch in arches:
210-
selects.config_setting_group(
216+
native.config_setting(
211217
name = "musllinux_{}_{}_{}".format(major, minor, arch),
212-
match_all = [
213-
name,
214-
":is_musl",
218+
flag_values = {
219+
version_flag: "true",
220+
":platform_libc": "musl",
221+
},
222+
constraint_values = [
215223
"@platforms//os:linux",
216224
"@platforms//cpu:{}".format(platform_repo_name_mangling.get(arch, arch)),
217225
],

0 commit comments

Comments
 (0)