xref: /aosp_15_r20/build/bazel/platforms/arch/variants/constants.bzl (revision 7594170e27e0732bc44b93d1440d87a54b6ffe7c)
1*7594170eSAndroid Build Coastguard Worker"""Constants for arch/cpu variants/features."""
2*7594170eSAndroid Build Coastguard Worker
3*7594170eSAndroid Build Coastguard Worker# Copyright (C) 2022 The Android Open Source Project
4*7594170eSAndroid Build Coastguard Worker#
5*7594170eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
6*7594170eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*7594170eSAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*7594170eSAndroid Build Coastguard Worker#
9*7594170eSAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
10*7594170eSAndroid Build Coastguard Worker#
11*7594170eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*7594170eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
13*7594170eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*7594170eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*7594170eSAndroid Build Coastguard Worker# limitations under the License.
16*7594170eSAndroid Build Coastguard Worker
17*7594170eSAndroid Build Coastguard Workerload(
18*7594170eSAndroid Build Coastguard Worker    "@soong_injection//product_config:arch_configuration.bzl",
19*7594170eSAndroid Build Coastguard Worker    _aml_arches = "aml_arches",
20*7594170eSAndroid Build Coastguard Worker    _android_arch_feature_for_arch_variant = "android_arch_feature_for_arch_variants",
21*7594170eSAndroid Build Coastguard Worker    _arch_to_cpu_variants = "arch_to_cpu_variants",
22*7594170eSAndroid Build Coastguard Worker    _arch_to_features = "arch_to_features",
23*7594170eSAndroid Build Coastguard Worker    _arch_to_variants = "arch_to_variants",
24*7594170eSAndroid Build Coastguard Worker    _ndk_arches = "ndk_arches",
25*7594170eSAndroid Build Coastguard Worker)
26*7594170eSAndroid Build Coastguard Worker
27*7594170eSAndroid Build Coastguard Workerdef _flatten_string_list_dict_to_set(string_list_dict):
28*7594170eSAndroid Build Coastguard Worker    ret = {}
29*7594170eSAndroid Build Coastguard Worker    for l in string_list_dict.values():
30*7594170eSAndroid Build Coastguard Worker        for i in l:
31*7594170eSAndroid Build Coastguard Worker            ret[i] = True
32*7594170eSAndroid Build Coastguard Worker    return ret
33*7594170eSAndroid Build Coastguard Worker
34*7594170eSAndroid Build Coastguard Worker_arch_variants = _flatten_string_list_dict_to_set(_arch_to_variants)
35*7594170eSAndroid Build Coastguard Worker_cpu_variants = _flatten_string_list_dict_to_set(_arch_to_cpu_variants)
36*7594170eSAndroid Build Coastguard Worker_arch_features = _flatten_string_list_dict_to_set(_arch_to_features)
37*7594170eSAndroid Build Coastguard Worker
38*7594170eSAndroid Build Coastguard Workerconstants = struct(
39*7594170eSAndroid Build Coastguard Worker    AvailableArchVariants = _arch_variants,
40*7594170eSAndroid Build Coastguard Worker    AvailableCpuVariants = _cpu_variants,
41*7594170eSAndroid Build Coastguard Worker    AvailableArchFeatures = _arch_features,
42*7594170eSAndroid Build Coastguard Worker    ArchToVariants = _arch_to_variants,
43*7594170eSAndroid Build Coastguard Worker    CpuToVariants = _arch_to_cpu_variants,
44*7594170eSAndroid Build Coastguard Worker    ArchToFeatures = _arch_to_features,
45*7594170eSAndroid Build Coastguard Worker    AndroidArchToVariantToFeatures = _android_arch_feature_for_arch_variant,
46*7594170eSAndroid Build Coastguard Worker    aml_arches = _aml_arches,
47*7594170eSAndroid Build Coastguard Worker    ndk_arches = _ndk_arches,
48*7594170eSAndroid Build Coastguard Worker)
49*7594170eSAndroid Build Coastguard Worker
50*7594170eSAndroid Build Coastguard Workerdef power_set(items, *, include_empty = True):
51*7594170eSAndroid Build Coastguard Worker    """Calculates the power set of the given items."""
52*7594170eSAndroid Build Coastguard Worker
53*7594170eSAndroid Build Coastguard Worker    def _exp(x, y):
54*7594170eSAndroid Build Coastguard Worker        result = 1
55*7594170eSAndroid Build Coastguard Worker        for _ in range(y):
56*7594170eSAndroid Build Coastguard Worker            result *= x
57*7594170eSAndroid Build Coastguard Worker        return result
58*7594170eSAndroid Build Coastguard Worker
59*7594170eSAndroid Build Coastguard Worker    power_set = []
60*7594170eSAndroid Build Coastguard Worker    n = len(items)
61*7594170eSAndroid Build Coastguard Worker    for i in range(0 if include_empty else 1, _exp(2, n)):
62*7594170eSAndroid Build Coastguard Worker        combination = []
63*7594170eSAndroid Build Coastguard Worker        for j in range(n):
64*7594170eSAndroid Build Coastguard Worker            if (i >> j) % 2 == 1:
65*7594170eSAndroid Build Coastguard Worker                combination.append(items[j])
66*7594170eSAndroid Build Coastguard Worker        power_set.append(combination)
67*7594170eSAndroid Build Coastguard Worker    return power_set
68*7594170eSAndroid Build Coastguard Worker
69*7594170eSAndroid Build Coastguard Workerarch_variant_to_constraints = {
70*7594170eSAndroid Build Coastguard Worker    "arm": "//build/bazel_common_rules/platforms/arch:arm",
71*7594170eSAndroid Build Coastguard Worker    "arm64": "//build/bazel_common_rules/platforms/arch:arm64",
72*7594170eSAndroid Build Coastguard Worker    "x86": "//build/bazel_common_rules/platforms/arch:x86",
73*7594170eSAndroid Build Coastguard Worker    "x86_64": "//build/bazel_common_rules/platforms/arch:x86_64",
74*7594170eSAndroid Build Coastguard Worker    "riscv64": "//build/bazel_common_rules/platforms/arch:riscv64",
75*7594170eSAndroid Build Coastguard Worker    "android": "//build/bazel_common_rules/platforms/os:android",
76*7594170eSAndroid Build Coastguard Worker    "darwin": "//build/bazel_common_rules/platforms/os:darwin",
77*7594170eSAndroid Build Coastguard Worker    "linux": "//build/bazel_common_rules/platforms/os:linux",
78*7594170eSAndroid Build Coastguard Worker    "linux_bionic": "//build/bazel_common_rules/platforms/os:linux_bionic",
79*7594170eSAndroid Build Coastguard Worker    "linux_glibc": "//build/bazel_common_rules/platforms/os:linux_glibc",
80*7594170eSAndroid Build Coastguard Worker    "linux_musl": "//build/bazel_common_rules/platforms/os:linux_musl",
81*7594170eSAndroid Build Coastguard Worker    "windows": "//build/bazel_common_rules/platforms/os:windows",
82*7594170eSAndroid Build Coastguard Worker}
83