@@ -72,6 +72,22 @@ _IOS_ARCH_TO_64_BIT_WATCHOS = {
7272 "arm64" : "arm64_32" ,
7373}
7474
75+ _IOS_PLATFORM_TO_ENV_ARCH = {
76+ Label ("@build_bazel_apple_support//platforms:ios_arm64" ): "arm64" ,
77+ Label ("@build_bazel_apple_support//platforms:ios_arm64e" ): "arm64e" ,
78+ Label ("@build_bazel_apple_support//platforms:ios_sim_arm64" ): "sim_arm64" ,
79+ Label ("@build_bazel_apple_support//platforms:ios_x86_64" ): "x86_64" ,
80+ }
81+
82+ _WATCHOS_PLATFORM_TO_ENV_ARCH = {
83+ Label ("@build_bazel_apple_support//platforms:watchos_arm64_32" ): "arm64_32" ,
84+ Label ("@build_bazel_apple_support//platforms:watchos_arm64" ): "arm64" ,
85+ Label ("@build_bazel_apple_support//platforms:watchos_armv7k" ): "armv7k" ,
86+ Label ("@build_bazel_apple_support//platforms:watchos_device_arm64" ): "device_arm64" ,
87+ Label ("@build_bazel_apple_support//platforms:watchos_device_arm64e" ): "device_arm64e" ,
88+ Label ("@build_bazel_apple_support//platforms:watchos_x86_64" ): "x86_64" ,
89+ }
90+
7591# Set the default architecture for all platforms as 64-bit Intel.
7692# TODO(b/246375874): Consider changing the default when a build is invoked from an Apple Silicon
7793# Mac. The --host_cpu command line option is not guaranteed to reflect the actual host device that
@@ -95,26 +111,11 @@ def _platform_specific_cpu_setting_name(platform_type):
95111 fail ("ERROR: Unknown platform type: {}" .format (platform_type ))
96112 return flag
97113
98- def _environment_arch_from_cpu (* , cpu_value , platform_prefix ):
99- """Returns a specific platform's environment arch if found from the `--cpu` command line option.
100-
101- Args:
102- cpu_value: String found from an incoming `--cpu` value.
103- platform_prefix: The platform prefix to search for within the incoming `--cpu` string.
104-
105- Returns:
106- The value following the platform_prefix if it was found in the incoming `--cpu` value, which
107- is expected to be a valid environment arch, or `None`.
108- """
109- if cpu_value .startswith (platform_prefix ):
110- return cpu_value [len (platform_prefix ):]
111- return None
112-
113- def _watchos_environment_archs_from_ios (* , cpu_value , minimum_os_version , settings ):
114+ def _watchos_environment_archs_from_ios (* , platform , minimum_os_version , settings ):
114115 """Returns a set of watchOS environment archs based on incoming iOS archs.
115116
116117 Args:
117- cpu_value: String found from an incoming `--cpu` value .
118+ platform: Value of the `--platforms` flag .
118119 minimum_os_version: A string coming directly from a rule's `minimum_os_version` attribute.
119120 settings: A dictionary whose set of keys is defined by the inputs parameter, typically from
120121 the settings argument found on the implementation function of the current Starlark
@@ -127,10 +128,7 @@ def _watchos_environment_archs_from_ios(*, cpu_value, minimum_os_version, settin
127128 environment_archs = []
128129 ios_archs = settings [_platform_specific_cpu_setting_name ("ios" )]
129130 if not ios_archs :
130- ios_arch = _environment_arch_from_cpu (
131- cpu_value = cpu_value ,
132- platform_prefix = "ios_" ,
133- )
131+ ios_arch = _IOS_PLATFORM_TO_ENV_ARCH .get (platform , None )
134132 if ios_arch :
135133 ios_archs = [ios_arch ]
136134 if ios_archs :
@@ -162,27 +160,22 @@ def _environment_archs(platform_type, minimum_os_version, settings):
162160 """
163161 environment_archs = settings [_platform_specific_cpu_setting_name (platform_type )]
164162 if not environment_archs :
165- cpu_value = settings ["//command_line_option:cpu" ]
163+ platform = settings ["//command_line_option:platforms" ][ 0 ]
166164 if platform_type == "ios" :
167- # Legacy handling to interpret the --cpu as an iOS environment arch.
168- ios_arch = _environment_arch_from_cpu (
169- cpu_value = cpu_value ,
170- platform_prefix = "ios_" ,
171- )
165+ # Get the iOS environment arch based on the --platforms flag.
166+ ios_arch = _IOS_PLATFORM_TO_ENV_ARCH .get (platform , None )
172167 if ios_arch :
173168 environment_archs = [ios_arch ]
174169 if platform_type == "watchos" :
175- # Interpret the --cpu as a watchOS environment arch; often will be set by a transition.
176- watchos_arch = _environment_arch_from_cpu (
177- cpu_value = cpu_value ,
178- platform_prefix = "watchos_" ,
179- )
170+ # Use --platforms to determine the watchOS environment arch; often will be set by
171+ # a transition.
172+ watchos_arch = _WATCHOS_PLATFORM_TO_ENV_ARCH .get (platform , None )
180173 if watchos_arch :
181174 environment_archs = [watchos_arch ]
182175 else :
183176 # If not found, generate watchOS archs via incoming iOS environment arch(s).
184177 environment_archs = _watchos_environment_archs_from_ios (
185- cpu_value = cpu_value ,
178+ platform = platform ,
186179 minimum_os_version = minimum_os_version ,
187180 settings = settings ,
188181 )
@@ -219,55 +212,40 @@ def _cpu_string(*, environment_arch, platform_type, settings = {}):
219212 ios_cpus = settings ["//command_line_option:ios_multi_cpus" ]
220213 if ios_cpus :
221214 return "ios_{}" .format (ios_cpus [0 ])
222- cpu_value = settings ["//command_line_option:cpu" ]
223- if cpu_value .startswith ("ios_" ):
224- return cpu_value
225- if cpu_value == "darwin_arm64" :
226- return "ios_sim_arm64"
215+ env_arch = _IOS_PLATFORM_TO_ENV_ARCH .get (
216+ settings ["//command_line_option:platforms" ][0 ],
217+ None ,
218+ )
219+ if env_arch :
220+ return "ios_{}" .format (env_arch )
227221 return "ios_x86_64"
228- if platform_type == "visionos" :
229- if environment_arch :
230- return "visionos_{}" .format (environment_arch )
231- visionos_cpus = settings ["//command_line_option:visionos_cpus" ]
232- if visionos_cpus :
233- return "visionos_{}" .format (visionos_cpus [0 ])
234- cpu_value = settings ["//command_line_option:cpu" ]
235- if cpu_value .startswith ("visionos_" ):
236- return cpu_value
237- return "visionos_sim_arm64"
238222 if platform_type == "macos" :
239223 if environment_arch :
240224 return "darwin_{}" .format (environment_arch )
241225 macos_cpus = settings ["//command_line_option:macos_cpus" ]
242226 if macos_cpus :
243227 return "darwin_{}" .format (macos_cpus [0 ])
244- cpu_value = settings ["//command_line_option:cpu" ]
245- if cpu_value .startswith ("darwin_" ):
246- return cpu_value
247228 return "darwin_x86_64"
248229 if platform_type == "tvos" :
249230 if environment_arch :
250231 return "tvos_{}" .format (environment_arch )
251232 tvos_cpus = settings ["//command_line_option:tvos_cpus" ]
252233 if tvos_cpus :
253234 return "tvos_{}" .format (tvos_cpus [0 ])
254- cpu_value = settings ["//command_line_option:cpu" ]
255- if cpu_value .startswith ("tvos_" ):
256- return cpu_value
257- if cpu_value == "darwin_arm64" :
258- return "tvos_sim_arm64"
259235 return "tvos_x86_64"
236+ if platform_type == "visionos" :
237+ if environment_arch :
238+ return "visionos_{}" .format (environment_arch )
239+ visionos_cpus = settings ["//command_line_option:visionos_cpus" ]
240+ if visionos_cpus :
241+ return "visionos_{}" .format (visionos_cpus [0 ])
242+ return "visionos_sim_arm64"
260243 if platform_type == "watchos" :
261244 if environment_arch :
262245 return "watchos_{}" .format (environment_arch )
263246 watchos_cpus = settings ["//command_line_option:watchos_cpus" ]
264247 if watchos_cpus :
265248 return "watchos_{}" .format (watchos_cpus [0 ])
266- cpu_value = settings ["//command_line_option:cpu" ]
267- if cpu_value .startswith ("watchos_" ):
268- return cpu_value
269- if cpu_value == "darwin_arm64" :
270- return "watchos_arm64"
271249 return "watchos_x86_64"
272250
273251 fail ("ERROR: Unknown platform type: {}" .format (platform_type ))
@@ -492,7 +470,7 @@ _apple_rule_common_transition_inputs = [
492470 build_settings_labels .use_tree_artifacts_outputs ,
493471] + _CPU_TO_DEFAULT_PLATFORM_FLAG .values ()
494472_apple_rule_base_transition_inputs = _apple_rule_common_transition_inputs + [
495- "//command_line_option:cpu " ,
473+ "//command_line_option:platforms " ,
496474 "//command_line_option:ios_multi_cpus" ,
497475 "//command_line_option:macos_cpus" ,
498476 "//command_line_option:tvos_cpus" ,
@@ -502,9 +480,6 @@ _apple_platforms_rule_base_transition_inputs = _apple_rule_base_transition_input
502480 "//command_line_option:apple_platforms" ,
503481 "//command_line_option:incompatible_enable_apple_toolchain_resolution" ,
504482]
505- _apple_platform_transition_inputs = _apple_platforms_rule_base_transition_inputs + [
506- "//command_line_option:platforms" ,
507- ]
508483_apple_rule_base_transition_outputs = [
509484 build_settings_labels .building_apple_bundle ,
510485 build_settings_labels .use_tree_artifacts_outputs ,
@@ -748,7 +723,7 @@ def _apple_platform_split_transition_impl(settings, attr):
748723
749724_apple_platform_split_transition = transition (
750725 implementation = _apple_platform_split_transition_impl ,
751- inputs = _apple_platform_transition_inputs ,
726+ inputs = _apple_platforms_rule_base_transition_inputs ,
752727 outputs = _apple_rule_base_transition_outputs ,
753728)
754729
0 commit comments