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