aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2022-03-22 16:28:15 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-03-22 16:28:15 +0000
commit0dc0e766641c851c43951e07c7ffcd62ef5c9283 (patch)
treef263cb5298893a240bbfd0decd47675e6d357879
parent0374a29a12ab47753f09b337d8a9fc73512735ac (diff)
parentf48067fa9ec1fa79fe6ae8dfcc60c5a1fa630b77 (diff)
downloadbazel-0dc0e766641c851c43951e07c7ffcd62ef5c9283.tar.gz
Merge "Support arch/cpu variant in mixed build" am: a449459e7e am: f48067fa9e
Original change: https://android-review.googlesource.com/c/platform/build/bazel/+/2032728 Change-Id: I8b2088256a5bd8e30b20406056efe01f22e5a7c6
-rw-r--r--platforms/BUILD.bazel61
-rw-r--r--platforms/product_variables/product_platform.bzl38
2 files changed, 43 insertions, 56 deletions
diff --git a/platforms/BUILD.bazel b/platforms/BUILD.bazel
index b1bbe5f3..24829e23 100644
--- a/platforms/BUILD.bazel
+++ b/platforms/BUILD.bazel
@@ -12,7 +12,14 @@
# These model after the arch and OS definitions in build/soong/android/arch.go.
load("@soong_injection//product_config:product_variables.bzl", "product_vars")
-load("//build/bazel/platforms:product_variables/product_platform.bzl", "android_platform", "android_variant_constraints", "product_variable_config")
+load("//build/bazel/platforms:product_variables/product_platform.bzl", "android_platform", "product_variable_config")
+load("//build/bazel/platforms/arch/variants:constants.bzl", "constants")
+load(
+ "//prebuilts/clang/host/linux-x86:cc_toolchain_constants.bzl",
+ "arch_to_variants",
+ "variant_constraints",
+ "variant_name",
+)
package(default_visibility = ["//visibility:public"])
@@ -99,40 +106,30 @@ android_platform(
product = ":android_target",
)
-# Android is the OS for target devices that run all of Android, including the Linux kernel
-# and the Bionic libc runtime.
-android_platform(
+alias(
name = "android_arm",
- constraint_values = [
- "//build/bazel/platforms/arch:arm",
- "//build/bazel/platforms/os:android",
- ] + android_variant_constraints("arm", "armv7-a-neon"), # default to armv7-a-neon
- product = ":android_target",
+ actual = ":android_arm_armv7-a-neon", # default to armv7-a-neon
)
-android_platform(
+alias(
name = "android_arm64",
- constraint_values = [
- "//build/bazel/platforms/arch:arm64",
- "//build/bazel/platforms/os:android",
- ] + android_variant_constraints("arm64", "armv8-a"), # default to armv8-a
- product = ":android_target",
+ actual = ":android_arm64_armv8-a", # default to armv8-a
)
-android_platform(
- name = "android_x86",
- constraint_values = [
- "//build/bazel/platforms/arch:x86",
- "//build/bazel/platforms/os:android",
- ] + android_variant_constraints("x86"),
- product = ":android_target",
-)
-
-android_platform(
- name = "android_x86_64",
- constraint_values = [
- "//build/bazel/platforms/arch:x86_64",
- "//build/bazel/platforms/os:android",
- ] + android_variant_constraints("x86_64"),
- product = ":android_target",
-)
+[
+ [
+ android_platform(
+ name = "android_" + arch + variant_name(variant),
+ constraint_values = [
+ "//build/bazel/platforms/arch:" + arch,
+ "//build/bazel/platforms/os:android",
+ ] + variant_constraints(
+ variant,
+ constants.AndroidArchToVariantToFeatures[arch],
+ ),
+ product = ":android_target",
+ )
+ for variant in variants
+ ]
+ for arch, variants in arch_to_variants.items()
+]
diff --git a/platforms/product_variables/product_platform.bzl b/platforms/product_variables/product_platform.bzl
index b04ae947..f2c6f91f 100644
--- a/platforms/product_variables/product_platform.bzl
+++ b/platforms/product_variables/product_platform.bzl
@@ -1,7 +1,7 @@
"""Parallels variable.go to provide variables and create a platform based on converted config."""
load("//build/bazel/product_variables:constants.bzl", "constants")
-load("//build/bazel/platforms/arch/variants:constants.bzl", _arch_constants = "constants")
+load("//prebuilts/clang/host/linux-x86:cc_toolchain_constants.bzl", "variant_name")
def _product_variables_providing_rule_impl(ctx):
return [
@@ -105,12 +105,9 @@ def product_variable_config(name, product_config_vars):
os = "android"
- native.platform(
+ native.alias(
name = name,
- constraint_values = constraints + [
- "//build/bazel/platforms/arch:" + arch,
- "//build/bazel/platforms/os:" + os,
- ] + android_variant_constraints(arch, arch_variant, cpu_variant),
+ actual = "{os}_{arch}{variant}".format(os = os, arch = arch, variant = _variant_name(arch, arch_variant, cpu_variant)),
)
arch = local_vars.get("DeviceSecondaryArch")
@@ -118,12 +115,9 @@ def product_variable_config(name, product_config_vars):
cpu_variant = local_vars.get("DeviceSecondaryCpuVariant")
if arch:
- native.platform(
+ native.alias(
name = name + "_secondary",
- constraint_values = constraints + [
- "//build/bazel/platforms/arch:" + arch,
- "//build/bazel/platforms/os:" + os,
- ] + android_variant_constraints(arch, arch_variant, cpu_variant),
+ actual = "{os}_{arch}{variant}".format(os = os, arch = arch, variant = _variant_name(arch, arch_variant, cpu_variant)),
)
product_variables_providing_rule(
@@ -134,20 +128,16 @@ def product_variable_config(name, product_config_vars):
def _is_variant_default(arch, variant):
return variant == None or variant in (arch, "generic")
-def android_variant_constraints(arch, arch_variant = None, cpu_variant = None):
- additional_constraints = []
- if not _is_variant_default(arch, arch_variant):
- additional_constraints.append("//build/bazel/platforms/arch/variants:" + arch_variant)
- else:
+def _variant_name(arch, arch_variant, cpu_variant):
+ if _is_variant_default(arch, arch_variant):
arch_variant = ""
-
- features = _arch_constants.AndroidArchToVariantToFeatures[arch].get(arch_variant, [])
- for feature in features:
- additional_constraints.append("//build/bazel/platforms/arch/variants:" + feature)
-
- if not _is_variant_default(arch, cpu_variant):
- additional_constraints.append("//build/bazel/platforms/arch/variants:" + cpu_variant)
- return additional_constraints
+ if _is_variant_default(arch, cpu_variant):
+ cpu_variant = ""
+ variant = struct(
+ arch_variant = arch_variant,
+ cpu_variant = cpu_variant,
+ )
+ return variant_name(variant)
def android_platform(name = None, constraint_values = [], product = None):
""" android_platform creates a platform with the specified constraint_values and product constraints."""