Add cc_genrule

cc_genrule is the same as a normal genrule, but can depend on other cc
modules (like cc_object).

Test: mmma external/minijail
Change-Id: I8df87665c7bdc76ce89c92755c054f967a818e57
This commit is contained in:
Dan Willemsen
2017-09-13 18:37:08 -07:00
parent 0c16293821
commit 3e5bdf29ba
5 changed files with 109 additions and 30 deletions

View File

@@ -28,8 +28,8 @@ import (
)
func init() {
android.RegisterModuleType("gensrcs", GenSrcsFactory)
android.RegisterModuleType("genrule", GenRuleFactory)
android.RegisterModuleType("gensrcs", genSrcsFactory)
android.RegisterModuleType("genrule", genRuleFactory)
}
var (
@@ -90,9 +90,13 @@ type generatorProperties struct {
Srcs []string
}
type generator struct {
type Module struct {
android.ModuleBase
// For other packages to make their own genrules with extra
// properties
Extra interface{}
properties generatorProperties
tasks taskFunc
@@ -112,21 +116,21 @@ type generateTask struct {
out android.WritablePaths
}
func (g *generator) GeneratedSourceFiles() android.Paths {
func (g *Module) GeneratedSourceFiles() android.Paths {
return g.outputFiles
}
func (g *generator) Srcs() android.Paths {
func (g *Module) Srcs() android.Paths {
return g.outputFiles
}
func (g *generator) GeneratedHeaderDirs() android.Paths {
func (g *Module) GeneratedHeaderDirs() android.Paths {
return g.exportedIncludeDirs
}
func (g *generator) DepsMutator(ctx android.BottomUpMutatorContext) {
func (g *Module) DepsMutator(ctx android.BottomUpMutatorContext) {
android.ExtractSourcesDeps(ctx, g.properties.Srcs)
if g, ok := ctx.Module().(*generator); ok {
if g, ok := ctx.Module().(*Module); ok {
if len(g.properties.Tools) > 0 {
ctx.AddFarVariationDependencies([]blueprint.Variation{
{"arch", ctx.AConfig().BuildOsVariant},
@@ -135,7 +139,7 @@ func (g *generator) DepsMutator(ctx android.BottomUpMutatorContext) {
}
}
func (g *generator) GenerateAndroidBuildActions(ctx android.ModuleContext) {
func (g *Module) GenerateAndroidBuildActions(ctx android.ModuleContext) {
if len(g.properties.Tools) == 0 && len(g.properties.Tool_files) == 0 {
ctx.ModuleErrorf("at least one `tools` or `tool_files` is required")
return
@@ -275,7 +279,7 @@ func (g *generator) GenerateAndroidBuildActions(ctx android.ModuleContext) {
}
}
func (g *generator) generateSourceFile(ctx android.ModuleContext, task generateTask) {
func (g *Module) generateSourceFile(ctx android.ModuleContext, task generateTask) {
desc := "generate"
if len(task.out) == 1 {
desc += " " + task.out[0].Base()
@@ -299,20 +303,18 @@ func (g *generator) generateSourceFile(ctx android.ModuleContext, task generateT
}
}
func generatorFactory(tasks taskFunc, props ...interface{}) android.Module {
module := &generator{
func generatorFactory(tasks taskFunc, props ...interface{}) *Module {
module := &Module{
tasks: tasks,
}
module.AddProperties(props...)
module.AddProperties(&module.properties)
android.InitAndroidModule(module)
return module
}
func GenSrcsFactory() android.Module {
func NewGenSrcs() *Module {
properties := &genSrcsProperties{}
tasks := func(ctx android.ModuleContext, srcFiles android.Paths) []generateTask {
@@ -329,12 +331,18 @@ func GenSrcsFactory() android.Module {
return generatorFactory(tasks, properties)
}
func genSrcsFactory() android.Module {
m := NewGenSrcs()
android.InitAndroidModule(m)
return m
}
type genSrcsProperties struct {
// extension that will be substituted for each output file
Output_extension string
}
func GenRuleFactory() android.Module {
func NewGenRule() *Module {
properties := &genRuleProperties{}
tasks := func(ctx android.ModuleContext, srcFiles android.Paths) []generateTask {
@@ -353,6 +361,12 @@ func GenRuleFactory() android.Module {
return generatorFactory(tasks, properties)
}
func genRuleFactory() android.Module {
m := NewGenRule()
android.InitAndroidModule(m)
return m
}
type genRuleProperties struct {
// names of the output files that will be generated
Out []string