# Copyright (C) 2022 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Utilities for rule implementations to interact with platform definitions.""" # Merge ARCH_CONSTRAINT_ATTRS with the rule attrs to use get_arch(ctx). ARCH_CONSTRAINT_ATTRS = { "_x86_constraint": attr.label(default = Label("//build/bazel/platforms/arch:x86")), "_x86_64_constraint": attr.label(default = Label("//build/bazel/platforms/arch:x86_64")), "_arm_constraint": attr.label(default = Label("//build/bazel/platforms/arch:arm")), "_arm64_constraint": attr.label(default = Label("//build/bazel/platforms/arch:arm64")), } # get_arch takes a rule context with ARCH_CONSTRAINT_ATTRS and returns the string representation # of the target platform by executing the target_platform_has_constraint boilerplate. def get_arch(ctx): if not hasattr(ctx.attr, "_x86_constraint") or \ not hasattr(ctx.attr, "_x86_64_constraint") or \ not hasattr(ctx.attr, "_arm_constraint") or \ not hasattr(ctx.attr, "_arm64_constraint"): fail("Could not get the target architecture of this rule due to missing constraint attrs.", "Have you merged ARCH_CONSTRAINT_ATTRS into this rule's attributes?") x86_constraint = ctx.attr._x86_constraint[platform_common.ConstraintValueInfo] x86_64_constraint = ctx.attr._x86_64_constraint[platform_common.ConstraintValueInfo] arm_constraint = ctx.attr._arm_constraint[platform_common.ConstraintValueInfo] arm64_constraint = ctx.attr._arm64_constraint[platform_common.ConstraintValueInfo] if ctx.target_platform_has_constraint(x86_constraint): return "x86" elif ctx.target_platform_has_constraint(x86_64_constraint): return "x86_64" elif ctx.target_platform_has_constraint(arm_constraint): return "arm" elif ctx.target_platform_has_constraint(arm64_constraint): return "arm64"