5eb7ee9fad
This change contains a prototype implementation for multitree. Several interfaces and modules are added. 1. Imported/Exported Modules implementing Exportable interface can export artifacts to other components. "imported_filegroup" modules can import generated artifacts from other exported modules. 2. Multitree metadata It contains information about imported/exported modules in each component, and can be generated via "m update-meta". 3. cc library stub It's based on prototype stub libraries. It uses imported/exported mechanism to expose a C API, with a map.txt file and header files. Bug: 230448564 Test: m Change-Id: Id7ff7618e2c630c5617a564d8b23b60a1cc9c8e8
67 lines
1.9 KiB
Go
67 lines
1.9 KiB
Go
// 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)
|
|
}
|