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

Commit 5197acb5 authored by Ivan Lozano's avatar Ivan Lozano Committed by Automerger Merge Worker
Browse files

Merge "Export Rust SourceProvider types and methods" am: a57e56a6

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1391156

Change-Id: Ia805d2355c4d66e5c7ddef793d614d2a0b8c0611
parents b3c97e2a a57e56a6
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
}