// Copyright 2022 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 multitree import ( "android/soong/android" "github.com/google/blueprint/proptools" ) type moduleExportProperty struct { // True if the module is exported to the other components in a multi-tree. // Any components in the multi-tree can import this module to use. Export *bool } type ExportableModuleBase struct { properties moduleExportProperty } type Exportable interface { // Properties for the exporable module. exportableModuleProps() *moduleExportProperty // Check if this module can be exported. // If this returns false, the module will not be exported regardless of the 'export' value. Exportable() bool // Returns 'true' if this module has 'export: true' // This module will not be exported if it returns 'false' to 'Exportable()' interface even if // it has 'export: true'. IsExported() bool // Map from tags to outputs. // Each module can tag their outputs for convenience. TaggedOutputs() map[string]android.Paths } type ExportableModule interface { android.Module android.OutputFileProducer Exportable } func InitExportableModule(module ExportableModule) { module.AddProperties(module.exportableModuleProps()) } func (m *ExportableModuleBase) exportableModuleProps() *moduleExportProperty { return &m.properties } func (m *ExportableModuleBase) IsExported() bool { return proptools.Bool(m.properties.Export) }