From f05fe97df6bd0fb37c0f7338365fa8782fa9c725 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Fri, 10 Apr 2015 17:45:20 -0700 Subject: [PATCH] Add logtags source file support Add support for converting logtags files to source files. Each .logtags file is converted to a .java file, but only after all .logtags files have been combined into a merged text file by the logtagsSingleton. Change-Id: I375d82874029bd26a7c528e46add2a638ba123f9 --- cmd/soong_build/main.go | 1 + java/gen.go | 64 ++++++++++++++++++++++++++++++++++++++++- java/java.go | 10 ++++++- 3 files changed, 73 insertions(+), 2 deletions(-) diff --git a/cmd/soong_build/main.go b/cmd/soong_build/main.go index a1a4ce051..83205ba41 100644 --- a/cmd/soong_build/main.go +++ b/cmd/soong_build/main.go @@ -76,6 +76,7 @@ func main() { // Singletons ctx.RegisterSingletonType("checkbuild", common.CheckbuildSingleton) ctx.RegisterSingletonType("env", common.EnvSingleton) + ctx.RegisterSingletonType("logtags", java.LogtagsSingleton) configuration, err := common.NewConfig(srcDir) if err != nil { diff --git a/java/gen.go b/java/gen.go index 0b84d44b8..dd86f66f0 100644 --- a/java/gen.go +++ b/java/gen.go @@ -32,7 +32,13 @@ func init() { pctx.VariableFunc("aidlCmd", func(c interface{}) (string, error) { return c.(common.Config).HostBinTool("aidl") }) + pctx.StaticVariable("logtagsCmd", "${srcDir}/build/tools/java-event-log-tags.py") + pctx.StaticVariable("mergeLogtagsCmd", "${srcDir}/build/tools/merge-event-log-tags.py") pctx.VariableConfigMethod("srcDir", common.Config.SrcDir) + + pctx.VariableFunc("allLogtagsFile", func(c interface{}) (string, error) { + return filepath.Join(c.(common.Config).IntermediatesDir(), "all-event-log-tags.txt"), nil + }) } var ( @@ -42,6 +48,18 @@ var ( Description: "aidl $out", }, "depFile", "aidlFlags") + + logtags = pctx.StaticRule("logtags", + blueprint.RuleParams{ + Command: "$logtagsCmd -o $out $in $allLogtagsFile", + Description: "logtags $out", + }) + + mergeLogtags = pctx.StaticRule("mergeLogtags", + blueprint.RuleParams{ + Command: "$mergeLogtagsCmd -o $out $in", + Description: "merge logtags $out", + }) ) func genAidl(ctx common.AndroidModuleContext, aidlFile, aidlFlags string) string { @@ -64,7 +82,22 @@ func genAidl(ctx common.AndroidModuleContext, aidlFile, aidlFlags string) string return javaFile } -func genSources(ctx common.AndroidModuleContext, srcFiles []string, +func genLogtags(ctx common.AndroidModuleContext, logtagsFile string) string { + javaFile := strings.TrimPrefix(logtagsFile, common.ModuleSrcDir(ctx)) + javaFile = filepath.Join(common.ModuleGenDir(ctx), javaFile) + javaFile = pathtools.ReplaceExtension(javaFile, "java") + + ctx.Build(pctx, blueprint.BuildParams{ + Rule: logtags, + Outputs: []string{javaFile}, + Inputs: []string{logtagsFile}, + Implicits: []string{"$logtagsCmd"}, + }) + + return javaFile +} + +func (j *javaBase) genSources(ctx common.AndroidModuleContext, srcFiles []string, flags javaBuilderFlags) []string { for i, srcFile := range srcFiles { @@ -72,8 +105,37 @@ func genSources(ctx common.AndroidModuleContext, srcFiles []string, case ".aidl": javaFile := genAidl(ctx, srcFile, flags.aidlFlags) srcFiles[i] = javaFile + case ".logtags": + j.logtagsSrcs = append(j.logtagsSrcs, srcFile) + javaFile := genLogtags(ctx, srcFile) + srcFiles[i] = javaFile } } return srcFiles } + +func LogtagsSingleton() blueprint.Singleton { + return &logtagsSingleton{} +} + +type logtagsProducer interface { + logtags() []string +} + +type logtagsSingleton struct{} + +func (l *logtagsSingleton) GenerateBuildActions(ctx blueprint.SingletonContext) { + var allLogtags []string + ctx.VisitAllModules(func(module blueprint.Module) { + if logtags, ok := module.(logtagsProducer); ok { + allLogtags = append(allLogtags, logtags.logtags()...) + } + }) + + ctx.Build(pctx, blueprint.BuildParams{ + Rule: mergeLogtags, + Outputs: []string{"$allLogtagsFile"}, + Inputs: allLogtags, + }) +} diff --git a/java/java.go b/java/java.go index 7f6b13463..a23ca9a64 100644 --- a/java/java.go +++ b/java/java.go @@ -106,6 +106,8 @@ type javaBase struct { exportAidlIncludeDirs []string + logtagsSrcs []string + // installed file for binary dependency installFile string } @@ -255,7 +257,7 @@ func (j *javaBase) GenerateJavaBuildActions(ctx common.AndroidModuleContext) { srcFiles := common.ExpandSources(ctx, j.properties.Srcs) - srcFiles = genSources(ctx, srcFiles, flags) + srcFiles = j.genSources(ctx, srcFiles, flags) if len(srcFiles) > 0 { // Compile java sources into .class files @@ -360,6 +362,12 @@ func (j *javaBase) AidlPreprocessed() string { return "" } +var _ logtagsProducer = (*javaBase)(nil) + +func (j *javaBase) logtags() []string { + return j.logtagsSrcs +} + // // Java libraries (.jar file) //