|  | // Copyright 2024 Google Inc. All rights reserved. | 
|  | // | 
|  | // 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. | 
|  |  | 
|  | package android | 
|  |  | 
|  | // ArchModuleContext can be embedded in other contexts to provide information about the module set by | 
|  | // the archMutator. | 
|  | type ArchModuleContext interface { | 
|  | Target() Target | 
|  | TargetPrimary() bool | 
|  |  | 
|  | // The additional arch specific targets (e.g. 32/64 bit) that this module variant is | 
|  | // responsible for creating. | 
|  | MultiTargets() []Target | 
|  | Arch() Arch | 
|  | Os() OsType | 
|  | Host() bool | 
|  | Device() bool | 
|  | Darwin() bool | 
|  | Windows() bool | 
|  | PrimaryArch() bool | 
|  | } | 
|  |  | 
|  | type archModuleContext struct { | 
|  | // TODO: these should eventually go through a (possibly cached) provider like any other configuration instead | 
|  | //  of being special cased. | 
|  | ready         bool | 
|  | os            OsType | 
|  | target        Target | 
|  | targetPrimary bool | 
|  | multiTargets  []Target | 
|  | primaryArch   bool | 
|  | } | 
|  |  | 
|  | // ArchReady returns true if the arch mutator has run on the module. Before this returns | 
|  | // true, the module essentially doesn't have an arch and cannot make decisions based on | 
|  | // architecture. | 
|  | func (a *archModuleContext) ArchReady() bool { | 
|  | return a.ready | 
|  | } | 
|  |  | 
|  | func (a *archModuleContext) Target() Target { | 
|  | return a.target | 
|  | } | 
|  |  | 
|  | func (a *archModuleContext) TargetPrimary() bool { | 
|  | return a.targetPrimary | 
|  | } | 
|  |  | 
|  | func (a *archModuleContext) MultiTargets() []Target { | 
|  | return a.multiTargets | 
|  | } | 
|  |  | 
|  | func (a *archModuleContext) Arch() Arch { | 
|  | return a.target.Arch | 
|  | } | 
|  |  | 
|  | func (a *archModuleContext) Os() OsType { | 
|  | return a.os | 
|  | } | 
|  |  | 
|  | func (a *archModuleContext) Host() bool { | 
|  | return a.os.Class == Host | 
|  | } | 
|  |  | 
|  | func (a *archModuleContext) Device() bool { | 
|  | return a.os.Class == Device | 
|  | } | 
|  |  | 
|  | func (a *archModuleContext) Darwin() bool { | 
|  | return a.os == Darwin | 
|  | } | 
|  |  | 
|  | func (a *archModuleContext) Windows() bool { | 
|  | return a.os == Windows | 
|  | } | 
|  |  | 
|  | func (b *archModuleContext) PrimaryArch() bool { | 
|  | return b.primaryArch | 
|  | } |