migrate --android_platforms #FLAG_CHANGE PiperOrigin-RevId: 949713985 Change-Id: I9eb51c959ca639fa2a6f94c345ca9cc15060c0f7
diff --git a/rules/android_platforms_transition.bzl b/rules/android_platforms_transition.bzl index 5bc4b98..59efb73 100644 --- a/rules/android_platforms_transition.bzl +++ b/rules/android_platforms_transition.bzl
@@ -22,10 +22,12 @@ visibility(PROJECT_VISIBILITY) +_ANDROID_PLATFORMS_SETTING = utils.ANDROID_PLATFORMS_SETTING + def _android_platforms_transition_impl(settings, attrs): new_settings = dict(settings) - android_platforms = utils.get_cls(settings, "android_platforms") + android_platforms = utils.get_android_platforms(settings) new_platforms = utils.get_cls(settings, "platforms") # Set the value of --platforms for this target and its dependencies. @@ -55,11 +57,13 @@ implementation = _android_platforms_transition_impl, inputs = [ "//command_line_option:android_platforms", + _ANDROID_PLATFORMS_SETTING, "//command_line_option:platforms", min_sdk_version.SETTING, ], outputs = [ "//command_line_option:android_platforms", + _ANDROID_PLATFORMS_SETTING, "//command_line_option:platforms", min_sdk_version.SETTING, ],
diff --git a/rules/android_split_transition.bzl b/rules/android_split_transition.bzl index fbb40b9..2eaf5eb 100644 --- a/rules/android_split_transition.bzl +++ b/rules/android_split_transition.bzl
@@ -32,6 +32,8 @@ visibility(PROJECT_VISIBILITY) +_ANDROID_PLATFORMS_SETTING = utils.ANDROID_PLATFORMS_SETTING + def _android_split_transition_impl(settings, attrs): settings = dict(settings) @@ -41,7 +43,7 @@ settings["//rules/flags:bytecode_transformer"] = getattr(attrs, "bytecode_transformer", None) # Always use `--android_platforms` when toolchain resolution is enabled. - platforms_to_split = utils.get_cls(settings, "android_platforms") + platforms_to_split = utils.get_android_platforms(settings) if not platforms_to_split: # If `--android_platforms` is unset, instead use only the first # value from `--platforms`. @@ -56,14 +58,14 @@ # we apply this transition to. In that case we end up applying this transition twice. # The second transition will fail. Since the transition clears out --android_platforms we can # use that as a signal to do nothing. - if not utils.get_cls(settings, "android_platforms"): + if not utils.get_android_platforms(settings): return None configs = _android_split_transition_impl(settings, attr) # Always pick the config based on the first value in --android_platforms # This ensures the choice is consistent with the android_platforms_transition - return configs[utils.get_cls(settings, "android_platforms")[0].name] + return configs[utils.get_android_platforms(settings)[0].name] def _handle_android_platforms(settings, platforms_to_split): """ @@ -80,6 +82,7 @@ # Disable fat APKs for the child configurations. split_options[utils.add_cls_prefix("android_platforms")] = [] + split_options[_ANDROID_PLATFORMS_SETTING] = [] # The cpu flag will be set by platform mapping if a mapping exists. split_options[utils.add_cls_prefix("platforms")] = [platform] @@ -98,6 +101,7 @@ "//command_line_option:Android configuration distinguisher", "//command_line_option:android_compiler", "//command_line_option:android_platforms", + _ANDROID_PLATFORMS_SETTING, "//command_line_option:compiler", "//command_line_option:dynamic_mode", "//command_line_option:platforms", @@ -108,6 +112,7 @@ "//command_line_option:Android configuration distinguisher", "//command_line_option:android_compiler", "//command_line_option:android_platforms", + _ANDROID_PLATFORMS_SETTING, "//command_line_option:compiler", "//command_line_option:dynamic_mode", "//command_line_option:platforms",
diff --git a/rules/utils.bzl b/rules/utils.bzl index d0f5b55..8a72620 100644 --- a/rules/utils.bzl +++ b/rules/utils.bzl
@@ -424,6 +424,8 @@ def get_android_sdk(ctx): return ctx.toolchains[ANDROID_SDK_TOOLCHAIN_TYPE].android_sdk_info +_ANDROID_PLATFORMS_SETTING = "//flags:android_platforms" + # Add command line setting prefix def _add_cls_prefix(name): return "//command_line_option:" + name @@ -432,6 +434,13 @@ def _get_cls(settings, name, default = None): return settings.get(_add_cls_prefix(name), default) +# Get android_platforms setting either from Starlark flag or native command_line_option +def _get_android_platforms(settings): + starlark_val = settings.get(_ANDROID_PLATFORMS_SETTING) + if starlark_val != None and len(starlark_val) > 0: + return [Label(p) if type(p) == "string" else p for p in starlark_val] + return _get_cls(settings, "android_platforms") + def _get_compilation_mode(ctx): """Retrieves the compilation mode from the context. @@ -465,6 +474,8 @@ list_or_depset_to_list = _list_or_depset_to_list, add_cls_prefix = _add_cls_prefix, get_cls = _get_cls, + get_android_platforms = _get_android_platforms, + ANDROID_PLATFORMS_SETTING = _ANDROID_PLATFORMS_SETTING, ) log = struct(
diff --git a/test/rules/android_binary/test.bzl b/test/rules/android_binary/test.bzl index 35439d0..e26438f 100644 --- a/test/rules/android_binary/test.bzl +++ b/test/rules/android_binary/test.bzl
@@ -65,6 +65,9 @@ "//test/rules/android_binary:fake_arm64-v8a_toolchain", "//test/rules/android_binary:fake_armeabi-v7a_toolchain", ], - "//command_line_option:android_platforms": "@@//:arm64-v8a,@@//:armeabi-v7a", + "//command_line_option:android_platforms": [ + "@@//:arm64-v8a", + "@@//:armeabi-v7a", + ], }, )