Merge "Export Rust SourceProvider types and methods"

This commit is contained in:
Ivan Lozano
2020-08-10 12:11:16 +00:00
committed by Gerrit Code Review
4 changed files with 62 additions and 54 deletions

View File

@@ -26,18 +26,18 @@ import (
type AndroidMkContext interface {
Name() string
Target() android.Target
subAndroidMk(*android.AndroidMkData, interface{})
SubAndroidMk(*android.AndroidMkData, interface{})
}
type subAndroidMkProvider interface {
type SubAndroidMkProvider interface {
AndroidMk(AndroidMkContext, *android.AndroidMkData)
}
func (mod *Module) subAndroidMk(data *android.AndroidMkData, obj interface{}) {
func (mod *Module) SubAndroidMk(data *android.AndroidMkData, obj interface{}) {
if mod.subAndroidMkOnce == nil {
mod.subAndroidMkOnce = make(map[subAndroidMkProvider]bool)
mod.subAndroidMkOnce = make(map[SubAndroidMkProvider]bool)
}
if androidmk, ok := obj.(subAndroidMkProvider); ok {
if androidmk, ok := obj.(SubAndroidMkProvider); ok {
if !mod.subAndroidMkOnce[androidmk] {
mod.subAndroidMkOnce[androidmk] = true
androidmk.AndroidMk(mod, data)
@@ -77,10 +77,10 @@ func (mod *Module) AndroidMk() android.AndroidMkData {
}
if mod.compiler != nil && !mod.compiler.Disabled() {
mod.subAndroidMk(&ret, mod.compiler)
mod.SubAndroidMk(&ret, mod.compiler)
} else if mod.sourceProvider != nil {
// If the compiler is disabled, this is a SourceProvider.
mod.subAndroidMk(&ret, mod.sourceProvider)
mod.SubAndroidMk(&ret, mod.sourceProvider)
}
ret.SubName += mod.Properties.SubName
@@ -88,7 +88,7 @@ func (mod *Module) AndroidMk() android.AndroidMkData {
}
func (binary *binaryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
ctx.subAndroidMk(ret, binary.baseCompiler)
ctx.SubAndroidMk(ret, binary.baseCompiler)
if binary.distFile.Valid() {
ret.DistFiles = android.MakeDefaultDistFiles(binary.distFile.Path())
@@ -122,7 +122,7 @@ func (test *testDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidM
}
func (library *libraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
ctx.subAndroidMk(ret, library.baseCompiler)
ctx.SubAndroidMk(ret, library.baseCompiler)
if library.rlib() {
ret.Class = "RLIB_LIBRARIES"
@@ -150,7 +150,7 @@ func (library *libraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.An
}
func (procMacro *procMacroDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
ctx.subAndroidMk(ret, procMacro.baseCompiler)
ctx.SubAndroidMk(ret, procMacro.baseCompiler)
ret.Class = "PROC_MACRO_LIBRARIES"
if procMacro.distFile.Valid() {
@@ -159,8 +159,8 @@ func (procMacro *procMacroDecorator) AndroidMk(ctx AndroidMkContext, ret *androi
}
func (sourceProvider *baseSourceProvider) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
outFile := sourceProvider.outputFile
func (sourceProvider *BaseSourceProvider) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
outFile := sourceProvider.OutputFile
ret.Class = "ETC"
ret.OutputFile = android.OptionalPathForPath(outFile)
ret.SubName += sourceProvider.subName
@@ -173,7 +173,7 @@ func (sourceProvider *baseSourceProvider) AndroidMk(ctx AndroidMkContext, ret *a
}
func (bindgen *bindgenDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
ctx.subAndroidMk(ret, bindgen.baseSourceProvider)
ctx.SubAndroidMk(ret, bindgen.BaseSourceProvider)
ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) {
fmt.Fprintln(w, "LOCAL_UNINSTALLABLE_MODULE := true")
})

View File

@@ -87,12 +87,12 @@ type BindgenProperties struct {
}
type bindgenDecorator struct {
*baseSourceProvider
*BaseSourceProvider
Properties BindgenProperties
}
func (b *bindgenDecorator) generateSource(ctx android.ModuleContext, deps PathDeps) android.Path {
func (b *bindgenDecorator) GenerateSource(ctx android.ModuleContext, deps PathDeps) android.Path {
ccToolchain := ccConfig.FindToolchain(ctx.Os(), ctx.Arch())
var cflags []string
@@ -137,7 +137,7 @@ func (b *bindgenDecorator) generateSource(ctx android.ModuleContext, deps PathDe
ctx.PropertyErrorf("wrapper_src", "invalid path to wrapper source")
}
outputFile := android.PathForModuleOut(ctx, b.baseSourceProvider.getStem(ctx)+".rs")
outputFile := android.PathForModuleOut(ctx, b.BaseSourceProvider.getStem(ctx)+".rs")
var cmd, cmdDesc string
if b.Properties.Custom_bindgen != "" {
@@ -161,12 +161,12 @@ func (b *bindgenDecorator) generateSource(ctx android.ModuleContext, deps PathDe
},
})
b.baseSourceProvider.outputFile = outputFile
b.BaseSourceProvider.OutputFile = outputFile
return outputFile
}
func (b *bindgenDecorator) sourceProviderProps() []interface{} {
return append(b.baseSourceProvider.sourceProviderProps(),
func (b *bindgenDecorator) SourceProviderProps() []interface{} {
return append(b.BaseSourceProvider.SourceProviderProps(),
&b.Properties)
}
@@ -184,27 +184,18 @@ func RustBindgenHostFactory() android.Module {
}
func NewRustBindgen(hod android.HostOrDeviceSupported) (*Module, *bindgenDecorator) {
module := newModule(hod, android.MultilibBoth)
bindgen := &bindgenDecorator{
baseSourceProvider: NewSourceProvider(),
BaseSourceProvider: NewSourceProvider(),
Properties: BindgenProperties{},
}
_, library := NewRustLibrary(hod)
library.BuildOnlyRust()
library.setNoLint()
library.sourceProvider = bindgen
module.sourceProvider = bindgen
module.compiler = library
module.setClippy(false)
module := NewSourceProviderModule(hod, bindgen, false)
return module, bindgen
}
func (b *bindgenDecorator) sourceProviderDeps(ctx DepsContext, deps Deps) Deps {
deps = b.baseSourceProvider.sourceProviderDeps(ctx, deps)
func (b *bindgenDecorator) SourceProviderDeps(ctx DepsContext, deps Deps) Deps {
deps = b.BaseSourceProvider.SourceProviderDeps(ctx, deps)
if ctx.toolchain().Bionic() {
deps = bionicDeps(deps)
}

View File

@@ -83,7 +83,7 @@ type Module struct {
clippy *clippy
cachedToolchain config.Toolchain
sourceProvider SourceProvider
subAndroidMkOnce map[subAndroidMkProvider]bool
subAndroidMkOnce map[SubAndroidMkProvider]bool
outputFile android.OptionalPath
generatedFile android.OptionalPath
@@ -537,7 +537,7 @@ func (mod *Module) Init() android.Module {
mod.AddProperties(mod.clippy.props()...)
}
if mod.sourceProvider != nil {
mod.AddProperties(mod.sourceProvider.sourceProviderProps()...)
mod.AddProperties(mod.sourceProvider.SourceProviderProps()...)
}
android.InitAndroidArchModule(mod, mod.hod, mod.multilib)
@@ -671,10 +671,10 @@ func (mod *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
flags, deps = mod.clippy.flags(ctx, flags, deps)
}
// SourceProvider needs to call generateSource() before compiler calls compile() so it can provide the source.
// SourceProvider needs to call GenerateSource() before compiler calls compile() so it can provide the source.
// TODO(b/162588681) This shouldn't have to run for every variant.
if mod.sourceProvider != nil {
generatedFile := mod.sourceProvider.generateSource(ctx, deps)
generatedFile := mod.sourceProvider.GenerateSource(ctx, deps)
mod.generatedFile = android.OptionalPathForPath(generatedFile)
mod.sourceProvider.setSubName(ctx.ModuleSubDir())
}
@@ -696,7 +696,7 @@ func (mod *Module) deps(ctx DepsContext) Deps {
deps = mod.compiler.compilerDeps(ctx, deps)
}
if mod.sourceProvider != nil {
deps = mod.sourceProvider.sourceProviderDeps(ctx, deps)
deps = mod.sourceProvider.SourceProviderDeps(ctx, deps)
}
if mod.coverage != nil {

View File

@@ -27,43 +27,60 @@ type SourceProviderProperties struct {
Crate_name string `android:"arch_variant"`
}
type baseSourceProvider struct {
type BaseSourceProvider struct {
Properties SourceProviderProperties
outputFile android.Path
subAndroidMkOnce map[subAndroidMkProvider]bool
OutputFile android.Path
subAndroidMkOnce map[SubAndroidMkProvider]bool
subName string
}
var _ SourceProvider = (*baseSourceProvider)(nil)
var _ SourceProvider = (*BaseSourceProvider)(nil)
type SourceProvider interface {
generateSource(ctx android.ModuleContext, deps PathDeps) android.Path
GenerateSource(ctx android.ModuleContext, deps PathDeps) android.Path
Srcs() android.Paths
sourceProviderProps() []interface{}
sourceProviderDeps(ctx DepsContext, deps Deps) Deps
SourceProviderProps() []interface{}
SourceProviderDeps(ctx DepsContext, deps Deps) Deps
setSubName(subName string)
}
func (sp *baseSourceProvider) Srcs() android.Paths {
return android.Paths{sp.outputFile}
func (sp *BaseSourceProvider) Srcs() android.Paths {
return android.Paths{sp.OutputFile}
}
func (sp *baseSourceProvider) generateSource(ctx android.ModuleContext, deps PathDeps) android.Path {
panic("baseSourceProviderModule does not implement generateSource()")
func (sp *BaseSourceProvider) GenerateSource(ctx android.ModuleContext, deps PathDeps) android.Path {
panic("BaseSourceProviderModule does not implement GenerateSource()")
}
func (sp *baseSourceProvider) sourceProviderProps() []interface{} {
func (sp *BaseSourceProvider) SourceProviderProps() []interface{} {
return []interface{}{&sp.Properties}
}
func NewSourceProvider() *baseSourceProvider {
return &baseSourceProvider{
func NewSourceProvider() *BaseSourceProvider {
return &BaseSourceProvider{
Properties: SourceProviderProperties{},
}
}
func (sp *baseSourceProvider) getStem(ctx android.ModuleContext) string {
func NewSourceProviderModule(hod android.HostOrDeviceSupported, sourceProvider SourceProvider, enableLints bool) *Module {
_, library := NewRustLibrary(hod)
library.BuildOnlyRust()
library.sourceProvider = sourceProvider
module := newModule(hod, android.MultilibBoth)
module.sourceProvider = sourceProvider
module.compiler = library
if !enableLints {
library.setNoLint()
module.setClippy(false)
}
return module
}
func (sp *BaseSourceProvider) getStem(ctx android.ModuleContext) string {
if String(sp.Properties.Source_stem) == "" {
ctx.PropertyErrorf("source_stem",
"source_stem property is undefined but required for rust_bindgen modules")
@@ -71,10 +88,10 @@ func (sp *baseSourceProvider) getStem(ctx android.ModuleContext) string {
return String(sp.Properties.Source_stem)
}
func (sp *baseSourceProvider) sourceProviderDeps(ctx DepsContext, deps Deps) Deps {
func (sp *BaseSourceProvider) SourceProviderDeps(ctx DepsContext, deps Deps) Deps {
return deps
}
func (sp *baseSourceProvider) setSubName(subName string) {
func (sp *BaseSourceProvider) setSubName(subName string) {
sp.subName = subName
}