diff options
-rw-r--r-- | platforms/BUILD.bazel | 61 | ||||
-rw-r--r-- | platforms/product_variables/product_platform.bzl | 38 |
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.""" |