Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a57e56a6 authored by Ivan Lozano's avatar Ivan Lozano Committed by Gerrit Code Review
Browse files

Merge "Export Rust SourceProvider types and methods"

parents 95647739 c7767922
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -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")
	})
+10 −19
Original line number Diff line number Diff line
@@ -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)
	}
+5 −5
Original line number Diff line number Diff line
@@ -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 {
+34 −17
Original line number Diff line number Diff line
@@ -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
}