Loading rust/androidmk.go +13 −13 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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 Loading @@ -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()) Loading Loading @@ -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" Loading Loading @@ -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() { Loading @@ -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 Loading @@ -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") }) Loading rust/bindgen.go +10 −19 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 != "" { Loading @@ -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) } Loading @@ -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) } Loading rust/rust.go +5 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) Loading Loading @@ -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()) } Loading @@ -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 { Loading rust/source_provider.go +34 −17 Original line number Diff line number Diff line Loading @@ -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") Loading @@ -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 } Loading
rust/androidmk.go +13 −13 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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 Loading @@ -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()) Loading Loading @@ -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" Loading Loading @@ -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() { Loading @@ -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 Loading @@ -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") }) Loading
rust/bindgen.go +10 −19 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 != "" { Loading @@ -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) } Loading @@ -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) } Loading
rust/rust.go +5 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) Loading Loading @@ -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()) } Loading @@ -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 { Loading
rust/source_provider.go +34 −17 Original line number Diff line number Diff line Loading @@ -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") Loading @@ -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 }