Skip to content

Commit 78c822a

Browse files
nglevinswiple-rules-gardener
authored andcommitted
Migrate uses of ctx.fragments.apple.multi_arch_platform(...) to platform constraints.
PiperOrigin-RevId: 568558393
1 parent 27e3b07 commit 78c822a

23 files changed

+270
-123
lines changed

apple/BUILD

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,10 @@ bzl_library(
8383
srcs = ["cc_toolchain_forwarder.bzl"],
8484
deps = [
8585
":providers",
86-
"//apple/internal:providers",
86+
"//apple/internal:platform_support",
87+
"@bazel_skylib//lib:dicts",
8788
"@bazel_tools//tools/cpp:toolchain_utils",
89+
"@build_bazel_apple_support//lib:apple_support",
8890
],
8991
)
9092

apple/cc_toolchain_forwarder.bzl

Lines changed: 31 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -16,119 +16,47 @@
1616
A rule for handling the cc_toolchains and their constraints for a potential "fat" Mach-O binary.
1717
"""
1818

19-
load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain", "use_cpp_toolchain")
20-
load("@build_bazel_rules_apple//apple:providers.bzl", "ApplePlatformInfo")
21-
load("@build_bazel_rules_apple//apple/internal:providers.bzl", "new_appleplatforminfo")
19+
load(
20+
"@bazel_skylib//lib:dicts.bzl",
21+
"dicts",
22+
)
23+
load(
24+
"@bazel_tools//tools/cpp:toolchain_utils.bzl",
25+
"find_cpp_toolchain",
26+
"use_cpp_toolchain",
27+
)
28+
load(
29+
"@build_bazel_apple_support//lib:apple_support.bzl",
30+
"apple_support",
31+
)
32+
load(
33+
"@build_bazel_rules_apple//apple:providers.bzl",
34+
"ApplePlatformInfo",
35+
)
36+
load(
37+
"@build_bazel_rules_apple//apple/internal:platform_support.bzl",
38+
"platform_support",
39+
)
2240

2341
visibility("public")
2442

25-
def _target_os_from_rule_ctx(ctx):
26-
"""Returns a `String` representing the selected Apple OS."""
27-
ios_constraint = ctx.attr._ios_constraint[platform_common.ConstraintValueInfo]
28-
macos_constraint = ctx.attr._macos_constraint[platform_common.ConstraintValueInfo]
29-
tvos_constraint = ctx.attr._tvos_constraint[platform_common.ConstraintValueInfo]
30-
visionos_constraint = ctx.attr._visionos_constraint[platform_common.ConstraintValueInfo]
31-
watchos_constraint = ctx.attr._watchos_constraint[platform_common.ConstraintValueInfo]
32-
33-
if ctx.target_platform_has_constraint(ios_constraint):
34-
return str(apple_common.platform_type.ios)
35-
elif ctx.target_platform_has_constraint(macos_constraint):
36-
return str(apple_common.platform_type.macos)
37-
elif ctx.target_platform_has_constraint(tvos_constraint):
38-
return str(apple_common.platform_type.tvos)
39-
elif ctx.target_platform_has_constraint(visionos_constraint):
40-
return str(apple_common.platform_type.visionos)
41-
elif ctx.target_platform_has_constraint(watchos_constraint):
42-
return str(apple_common.platform_type.watchos)
43-
fail("ERROR: A valid Apple platform constraint could not be found from the resolved toolchain.")
44-
45-
def _target_arch_from_rule_ctx(ctx):
46-
"""Returns a `String` representing the selected target architecture or cpu type."""
47-
arm64_constraint = ctx.attr._arm64_constraint[platform_common.ConstraintValueInfo]
48-
arm64e_constraint = ctx.attr._arm64e_constraint[platform_common.ConstraintValueInfo]
49-
arm64_32_constraint = ctx.attr._arm64_32_constraint[platform_common.ConstraintValueInfo]
50-
armv7k_constraint = ctx.attr._armv7k_constraint[platform_common.ConstraintValueInfo]
51-
x86_64_constraint = ctx.attr._x86_64_constraint[platform_common.ConstraintValueInfo]
52-
53-
if ctx.target_platform_has_constraint(arm64_constraint):
54-
return "arm64"
55-
elif ctx.target_platform_has_constraint(arm64e_constraint):
56-
return "arm64e"
57-
elif ctx.target_platform_has_constraint(arm64_32_constraint):
58-
return "arm64_32"
59-
elif ctx.target_platform_has_constraint(armv7k_constraint):
60-
return "armv7k"
61-
elif ctx.target_platform_has_constraint(x86_64_constraint):
62-
return "x86_64"
63-
fail("ERROR: A valid Apple cpu constraint could not be found from the resolved toolchain.")
64-
65-
def _target_environment_from_rule_ctx(ctx):
66-
"""Returns a `String` representing the selected environment (e.g. "device", "simulator")."""
67-
device_constraint = ctx.attr._apple_device_constraint[platform_common.ConstraintValueInfo]
68-
simulator_constraint = ctx.attr._apple_simulator_constraint[platform_common.ConstraintValueInfo]
69-
70-
if ctx.target_platform_has_constraint(device_constraint):
71-
return "device"
72-
elif ctx.target_platform_has_constraint(simulator_constraint):
73-
return "simulator"
74-
fail("ERROR: A valid Apple environment (device, simulator) constraint could not be found from" +
75-
" the resolved toolchain.")
76-
7743
def _cc_toolchain_forwarder_impl(ctx):
7844
return [
7945
find_cpp_toolchain(ctx),
80-
new_appleplatforminfo(
81-
target_os = _target_os_from_rule_ctx(ctx),
82-
target_arch = _target_arch_from_rule_ctx(ctx),
83-
target_environment = _target_environment_from_rule_ctx(ctx),
84-
),
46+
platform_support.apple_platform_info_from_rule_ctx(ctx),
8547
]
8648

8749
cc_toolchain_forwarder = rule(
8850
implementation = _cc_toolchain_forwarder_impl,
89-
attrs = {
90-
# Legacy style toolchain assignment.
91-
"_cc_toolchain": attr.label(
92-
default = Label("@bazel_tools//tools/cpp:current_cc_toolchain"),
93-
),
94-
# The full list of possible constraints to be resolved are assigned here.
95-
"_ios_constraint": attr.label(
96-
default = Label("@platforms//os:ios"),
97-
),
98-
"_macos_constraint": attr.label(
99-
default = Label("@platforms//os:macos"),
100-
),
101-
"_tvos_constraint": attr.label(
102-
default = Label("@platforms//os:tvos"),
103-
),
104-
"_visionos_constraint": attr.label(
105-
default = Label("@platforms//os:visionos"),
106-
),
107-
"_watchos_constraint": attr.label(
108-
default = Label("@platforms//os:watchos"),
109-
),
110-
"_arm64_constraint": attr.label(
111-
default = Label("@platforms//cpu:arm64"),
112-
),
113-
"_arm64e_constraint": attr.label(
114-
default = Label("@platforms//cpu:arm64e"),
115-
),
116-
"_arm64_32_constraint": attr.label(
117-
default = Label("@platforms//cpu:arm64_32"),
118-
),
119-
"_armv7k_constraint": attr.label(
120-
default = Label("@platforms//cpu:armv7k"),
121-
),
122-
"_x86_64_constraint": attr.label(
123-
default = Label("@platforms//cpu:x86_64"),
124-
),
125-
"_apple_device_constraint": attr.label(
126-
default = Label("@build_bazel_apple_support//constraints:device"),
127-
),
128-
"_apple_simulator_constraint": attr.label(
129-
default = Label("@build_bazel_apple_support//constraints:simulator"),
130-
),
131-
},
51+
attrs = dicts.add(
52+
apple_support.platform_constraint_attrs(),
53+
{
54+
# Legacy style toolchain assignment.
55+
"_cc_toolchain": attr.label(
56+
default = Label("@bazel_tools//tools/cpp:current_cc_toolchain"),
57+
),
58+
},
59+
),
13260
doc = """
13361
Shared rule that returns CcToolchainInfo, plus a rules_apple defined provider based on querying
13462
ctx.target_platform_has_constraint(...) that covers all Apple cpu, platform, environment constraints

apple/internal/BUILD

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,7 @@ bzl_library(
338338
"//apple/internal/utils:clang_rt_dylibs",
339339
"@bazel_skylib//lib:collections",
340340
"@bazel_tools//tools/cpp:toolchain_utils",
341+
"@build_bazel_apple_support//lib:apple_support",
341342
"@build_bazel_rules_swift//swift:providers",
342343
],
343344
)
@@ -371,8 +372,10 @@ bzl_library(
371372
":resource_actions",
372373
":rule_attrs",
373374
":rule_support",
375+
":transition_support",
374376
"//apple:providers",
375377
"@bazel_skylib//lib:dicts",
378+
"@build_bazel_apple_support//lib:apple_support",
376379
],
377380
)
378381

@@ -406,6 +409,7 @@ bzl_library(
406409
"//apple/internal/aspects:framework_provider_aspect",
407410
"//apple/internal/aspects:resource_aspect",
408411
"//apple/internal/utils:clang_rt_dylibs",
412+
"@build_bazel_apple_support//lib:apple_support",
409413
],
410414
)
411415

@@ -460,6 +464,9 @@ bzl_library(
460464
visibility = [
461465
"//apple:__subpackages__",
462466
],
467+
deps = [
468+
"//apple/internal:providers",
469+
],
463470
)
464471

465472
bzl_library(
@@ -671,6 +678,7 @@ bzl_library(
671678
"//apple/internal/aspects:resource_aspect",
672679
"//apple/internal/utils:clang_rt_dylibs",
673680
"@bazel_tools//tools/cpp:toolchain_utils",
681+
"@build_bazel_apple_support//lib:apple_support",
674682
"@build_bazel_rules_swift//swift:providers",
675683
],
676684
)
@@ -702,6 +710,7 @@ bzl_library(
702710
":transition_support",
703711
"//apple/internal/aspects:resource_aspect",
704712
"//apple/internal/utils:clang_rt_dylibs",
713+
"@build_bazel_apple_support//lib:apple_support",
705714
],
706715
)
707716

@@ -734,6 +743,7 @@ bzl_library(
734743
"//apple/internal/aspects:resource_aspect",
735744
"//apple/internal/utils:clang_rt_dylibs",
736745
"@bazel_skylib//lib:sets",
746+
"@build_bazel_apple_support//lib:apple_support",
737747
],
738748
)
739749

apple/internal/aspects/resource_aspect.bzl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414

1515
"""Implementation of the resource propagation aspect."""
1616

17+
load(
18+
"@bazel_skylib//lib:dicts.bzl",
19+
"dicts",
20+
)
1721
load(
1822
"@bazel_skylib//lib:partial.bzl",
1923
"partial",
@@ -72,6 +76,7 @@ def _platform_prerequisites_for_aspect(target, aspect_ctx):
7276
# rule_descriptor.
7377
return platform_support.platform_prerequisites(
7478
apple_fragment = apple_fragment,
79+
apple_platform_info = platform_support.apple_platform_info_from_rule_ctx(aspect_ctx),
7580
build_settings = apple_xplat_toolchain_info.build_settings,
7681
config_vars = aspect_ctx.var,
7782
device_families = None,
@@ -314,7 +319,10 @@ def _apple_resource_aspect_impl(target, ctx):
314319
apple_resource_aspect = aspect(
315320
implementation = _apple_resource_aspect_impl,
316321
attr_aspects = ["data", "deps", "private_deps", "resources", "structured_resources"],
317-
attrs = apple_support.action_required_attrs(),
322+
attrs = dicts.add(
323+
apple_support.action_required_attrs(),
324+
apple_support.platform_constraint_attrs(),
325+
),
318326
exec_groups = apple_toolchain_utils.use_apple_exec_group_toolchain(),
319327
fragments = ["apple", "cpp"],
320328
doc = """Aspect that collects and propagates resource information to be bundled by a top-level

apple/internal/environment_plist.bzl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def _environment_plist_impl(ctx):
4747
# processing.
4848
platform_prerequisites = platform_support.platform_prerequisites(
4949
apple_fragment = ctx.fragments.apple,
50+
apple_platform_info = platform_support.apple_platform_info_from_rule_ctx(ctx),
5051
build_settings = None,
5152
config_vars = ctx.var,
5253
device_families = None,
@@ -78,6 +79,7 @@ def _environment_plist_impl(ctx):
7879

7980
environment_plist = rule(
8081
attrs = dicts.add(
82+
apple_support.platform_constraint_attrs(),
8183
rule_attrs.common_tool_attrs(),
8284
{
8385
"platform_type": attr.string(

apple/internal/ios_rules.bzl

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616

1717
load("@bazel_skylib//lib:collections.bzl", "collections")
1818
load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain")
19+
load(
20+
"@build_bazel_apple_support//lib:apple_support.bzl",
21+
"apple_support",
22+
)
1923
load(
2024
"@build_bazel_rules_apple//apple:providers.bzl",
2125
"AppleBundleInfo",
@@ -167,6 +171,7 @@ def _ios_application_impl(ctx):
167171
label = ctx.label
168172
platform_prerequisites = platform_support.platform_prerequisites(
169173
apple_fragment = ctx.fragments.apple,
174+
apple_platform_info = platform_support.apple_platform_info_from_rule_ctx(ctx),
170175
build_settings = apple_xplat_toolchain_info.build_settings,
171176
config_vars = ctx.var,
172177
cpp_fragment = ctx.fragments.cpp,
@@ -518,6 +523,7 @@ def _ios_app_clip_impl(ctx):
518523
label = ctx.label
519524
platform_prerequisites = platform_support.platform_prerequisites(
520525
apple_fragment = ctx.fragments.apple,
526+
apple_platform_info = platform_support.apple_platform_info_from_rule_ctx(ctx),
521527
build_settings = apple_xplat_toolchain_info.build_settings,
522528
config_vars = ctx.var,
523529
cpp_fragment = ctx.fragments.cpp,
@@ -810,6 +816,7 @@ def _ios_framework_impl(ctx):
810816
label = ctx.label
811817
platform_prerequisites = platform_support.platform_prerequisites(
812818
apple_fragment = ctx.fragments.apple,
819+
apple_platform_info = platform_support.apple_platform_info_from_rule_ctx(ctx),
813820
build_settings = apple_xplat_toolchain_info.build_settings,
814821
config_vars = ctx.var,
815822
cpp_fragment = ctx.fragments.cpp,
@@ -1058,6 +1065,7 @@ def _ios_extension_impl(ctx):
10581065

10591066
platform_prerequisites = platform_support.platform_prerequisites(
10601067
apple_fragment = ctx.fragments.apple,
1068+
apple_platform_info = platform_support.apple_platform_info_from_rule_ctx(ctx),
10611069
build_settings = apple_xplat_toolchain_info.build_settings,
10621070
config_vars = ctx.var,
10631071
cpp_fragment = ctx.fragments.cpp,
@@ -1333,6 +1341,7 @@ def _ios_static_framework_impl(ctx):
13331341
)
13341342
platform_prerequisites = platform_support.platform_prerequisites(
13351343
apple_fragment = ctx.fragments.apple,
1344+
apple_platform_info = platform_support.apple_platform_info_from_rule_ctx(ctx),
13361345
build_settings = apple_xplat_toolchain_info.build_settings,
13371346
config_vars = ctx.var,
13381347
cpp_fragment = ctx.fragments.cpp,
@@ -1471,6 +1480,7 @@ def _ios_imessage_application_impl(ctx):
14711480
label = ctx.label
14721481
platform_prerequisites = platform_support.platform_prerequisites(
14731482
apple_fragment = ctx.fragments.apple,
1483+
apple_platform_info = platform_support.apple_platform_info_from_rule_ctx(ctx),
14741484
build_settings = apple_xplat_toolchain_info.build_settings,
14751485
config_vars = ctx.var,
14761486
cpp_fragment = ctx.fragments.cpp,
@@ -1675,6 +1685,7 @@ def _ios_imessage_extension_impl(ctx):
16751685
label = ctx.label
16761686
platform_prerequisites = platform_support.platform_prerequisites(
16771687
apple_fragment = ctx.fragments.apple,
1688+
apple_platform_info = platform_support.apple_platform_info_from_rule_ctx(ctx),
16781689
build_settings = apple_xplat_toolchain_info.build_settings,
16791690
config_vars = ctx.var,
16801691
cpp_fragment = ctx.fragments.cpp,
@@ -1900,6 +1911,7 @@ ios_application = rule_factory.create_apple_rule(
19001911
is_executable = True,
19011912
predeclared_outputs = {"archive": "%{name}.ipa"},
19021913
attrs = [
1914+
apple_support.platform_constraint_attrs(),
19031915
rule_attrs.app_icon_attrs(
19041916
icon_extension = ".appiconset",
19051917
icon_parent_extension = ".xcassets",
@@ -2010,6 +2022,7 @@ ios_app_clip = rule_factory.create_apple_rule(
20102022
is_executable = True,
20112023
predeclared_outputs = {"archive": "%{name}.ipa"},
20122024
attrs = [
2025+
apple_support.platform_constraint_attrs(),
20132026
rule_attrs.app_icon_attrs(
20142027
icon_extension = ".appiconset",
20152028
icon_parent_extension = ".xcassets",
@@ -2066,6 +2079,7 @@ ios_extension = rule_factory.create_apple_rule(
20662079
implementation = _ios_extension_impl,
20672080
predeclared_outputs = {"archive": "%{name}.zip"},
20682081
attrs = [
2082+
apple_support.platform_constraint_attrs(),
20692083
rule_attrs.app_icon_attrs(
20702084
icon_extension = ".appiconset",
20712085
icon_parent_extension = ".xcassets",
@@ -2136,6 +2150,7 @@ ios_framework = rule_factory.create_apple_rule(
21362150
implementation = _ios_framework_impl,
21372151
predeclared_outputs = {"archive": "%{name}.zip"},
21382152
attrs = [
2153+
apple_support.platform_constraint_attrs(),
21392154
rule_attrs.binary_linking_attrs(
21402155
deps_cfg = transition_support.apple_platform_split_transition,
21412156
extra_deps_aspects = [
@@ -2194,6 +2209,7 @@ ios_static_framework = rule_factory.create_apple_rule(
21942209
implementation = _ios_static_framework_impl,
21952210
predeclared_outputs = {"archive": "%{name}.zip"},
21962211
attrs = [
2212+
apple_support.platform_constraint_attrs(),
21972213
rule_attrs.binary_linking_attrs(
21982214
deps_cfg = _STATIC_FRAMEWORK_DEPS_CFG,
21992215
extra_deps_aspects = [
@@ -2253,6 +2269,7 @@ ios_imessage_application = rule_factory.create_apple_rule(
22532269
implementation = _ios_imessage_application_impl,
22542270
predeclared_outputs = {"archive": "%{name}.ipa"},
22552271
attrs = [
2272+
apple_support.platform_constraint_attrs(),
22562273
rule_attrs.app_icon_attrs(
22572274
icon_extension = ".appiconset",
22582275
icon_parent_extension = ".xcassets",
@@ -2289,6 +2306,7 @@ ios_imessage_extension = rule_factory.create_apple_rule(
22892306
implementation = _ios_imessage_extension_impl,
22902307
predeclared_outputs = {"archive": "%{name}.zip"},
22912308
attrs = [
2309+
apple_support.platform_constraint_attrs(),
22922310
rule_attrs.app_icon_attrs(
22932311
icon_extension = ".appiconset",
22942312
icon_parent_extension = ".xcassets",

0 commit comments

Comments
 (0)