diff --git a/android/module.go b/android/module.go index 2a8837b32..66859fa56 100644 --- a/android/module.go +++ b/android/module.go @@ -108,6 +108,7 @@ type ModuleContext interface { ModuleSubDir() string + VisitDirectDepsBlueprint(visit func(blueprint.Module)) VisitDirectDeps(visit func(Module)) VisitDirectDepsIf(pred func(Module) bool, visit func(Module)) VisitDepsDepthFirst(visit func(Module)) @@ -686,6 +687,10 @@ func (a *androidModuleContext) validateAndroidModule(module blueprint.Module) Mo return aModule } +func (a *androidModuleContext) VisitDirectDepsBlueprint(visit func(blueprint.Module)) { + a.ModuleContext.VisitDirectDeps(visit) +} + func (a *androidModuleContext) VisitDirectDeps(visit func(Module)) { a.ModuleContext.VisitDirectDeps(func(module blueprint.Module) { if aModule := a.validateAndroidModule(module); aModule != nil { diff --git a/genrule/genrule.go b/genrule/genrule.go index c5b7e1d34..c142c53e0 100644 --- a/genrule/genrule.go +++ b/genrule/genrule.go @@ -158,7 +158,7 @@ func (g *Module) GenerateAndroidBuildActions(ctx android.ModuleContext) { tools := map[string]android.Path{} if len(g.properties.Tools) > 0 { - ctx.VisitDirectDeps(func(module android.Module) { + ctx.VisitDirectDepsBlueprint(func(module blueprint.Module) { switch ctx.OtherModuleDependencyTag(module) { case android.SourceDepTag: // Nothing to do @@ -167,6 +167,14 @@ func (g *Module) GenerateAndroidBuildActions(ctx android.ModuleContext) { var path android.OptionalPath if t, ok := module.(HostToolProvider); ok { + if !t.(android.Module).Enabled() { + if ctx.AConfig().AllowMissingDependencies() { + ctx.AddMissingDependencies([]string{tool}) + } else { + ctx.ModuleErrorf("depends on disabled module %q", tool) + } + break + } path = t.HostToolPath() } else if t, ok := module.(bootstrap.GoBinaryTool); ok { if s, err := filepath.Rel(android.PathForOutput(ctx).String(), t.InstallPath()); err == nil { diff --git a/java/builder.go b/java/builder.go index 45e59a426..d2e02fde1 100644 --- a/java/builder.go +++ b/java/builder.go @@ -186,7 +186,7 @@ type javaBuilderFlags struct { kotlincFlags string kotlincClasspath classpath - protoFlags string + protoFlags []string protoOutFlag string } diff --git a/java/config/config.go b/java/config/config.go index d4994a1c9..3cd284157 100644 --- a/java/config/config.go +++ b/java/config/config.go @@ -70,7 +70,7 @@ func init() { pctx.SourcePathVariable("JrtFsJar", "${JavaHome}/lib/jrt-fs.jar") pctx.SourcePathVariable("Ziptime", "prebuilts/build-tools/${hostPrebuiltTag}/bin/ziptime") - pctx.SourcePathVariable("ExtractSrcJarsCmd", "build/soong/scripts/extract-src-jars.sh") + pctx.SourcePathVariable("ExtractSrcJarsCmd", "build/soong/scripts/extract-srcjars.sh") pctx.SourcePathVariable("JarArgsCmd", "build/soong/scripts/jar-args.sh") pctx.HostBinToolVariable("SoongZipCmd", "soong_zip") pctx.HostBinToolVariable("MergeZipsCmd", "merge_zips") diff --git a/java/config/makevars.go b/java/config/makevars.go index 96fa92b6f..dabf2e722 100644 --- a/java/config/makevars.go +++ b/java/config/makevars.go @@ -61,4 +61,5 @@ func makeVarsProvider(ctx android.MakeVarsContext) { } ctx.Strict("SOONG_JAVAC_WRAPPER", "${SoongJavacWrapper}") + ctx.Strict("EXTRACT_SRCJARS", "${ExtractSrcJarsCmd}") } diff --git a/java/gen.go b/java/gen.go index 8fa199e14..b5973ec77 100644 --- a/java/gen.go +++ b/java/gen.go @@ -42,7 +42,7 @@ var ( logtags = pctx.AndroidStaticRule("logtags", blueprint.RuleParams{ - Command: "$logtagsCmd -o $out $in $allLogtagsFile", + Command: "$logtagsCmd -o $out $in", CommandDeps: []string{"$logtagsCmd"}, }) @@ -85,7 +85,7 @@ func genLogtags(ctx android.ModuleContext, logtagsFile android.Path) android.Pat } func (j *Module) genSources(ctx android.ModuleContext, srcFiles android.Paths, - flags javaBuilderFlags) (android.Paths, android.Paths) { + flags javaBuilderFlags) android.Paths { var protoFiles android.Paths outSrcFiles := make(android.Paths, 0, len(srcFiles)) @@ -106,17 +106,15 @@ func (j *Module) genSources(ctx android.ModuleContext, srcFiles android.Paths, } } - var outSrcJars android.Paths - if len(protoFiles) > 0 { - protoSrcJar := android.PathForModuleGen(ctx, "proto.src.jar") + protoSrcJar := android.PathForModuleGen(ctx, "proto.srcjar") genProto(ctx, protoSrcJar, protoFiles, flags.protoFlags, flags.protoOutFlag, "") - outSrcJars = append(outSrcJars, protoSrcJar) + outSrcFiles = append(outSrcFiles, protoSrcJar) } - return outSrcFiles, outSrcJars + return outSrcFiles } func LogtagsSingleton() blueprint.Singleton { diff --git a/java/java.go b/java/java.go index 432e816e5..b2bd2b0a4 100644 --- a/java/java.go +++ b/java/java.go @@ -136,12 +136,17 @@ type CompilerDeviceProperties struct { // if not blank, set to the version of the sdk to compile against Sdk_version *string - // directories to pass to aidl tool - Aidl_includes []string + Aidl struct { + // Top level directories to pass to aidl tool + Include_dirs []string - // directories that should be added as include directories - // for any aidl sources of modules that depend on this module - Export_aidl_include_dirs []string + // Directories rooted at the Android.bp file to pass to aidl tool + Local_include_dirs []string + + // directories that should be added as include directories for any aidl sources of modules + // that depend on this module, as well as to aidl for this module. + Export_include_dirs []string + } // If true, export a copy of the module as a -hostdex module for host testing. Hostdex *bool @@ -377,7 +382,11 @@ func (j *Module) hasSrcExt(ext string) bool { func (j *Module) aidlFlags(ctx android.ModuleContext, aidlPreprocess android.OptionalPath, aidlIncludeDirs android.Paths) []string { - localAidlIncludes := android.PathsForModuleSrc(ctx, j.deviceProperties.Aidl_includes) + aidlIncludes := android.PathsForModuleSrc(ctx, j.deviceProperties.Aidl.Local_include_dirs) + aidlIncludes = append(aidlIncludes, + android.PathsForModuleSrc(ctx, j.deviceProperties.Aidl.Export_include_dirs)...) + aidlIncludes = append(aidlIncludes, + android.PathsForSource(ctx, j.deviceProperties.Aidl.Include_dirs)...) var flags []string if aidlPreprocess.Valid() { @@ -387,7 +396,7 @@ func (j *Module) aidlFlags(ctx android.ModuleContext, aidlPreprocess android.Opt } flags = append(flags, android.JoinWithPrefix(j.exportAidlIncludeDirs.Strings(), "-I")) - flags = append(flags, android.JoinWithPrefix(localAidlIncludes.Strings(), "-I")) + flags = append(flags, android.JoinWithPrefix(aidlIncludes.Strings(), "-I")) flags = append(flags, "-I"+android.PathForModuleSrc(ctx).String()) if src := android.ExistentPathForSource(ctx, "", ctx.ModuleDir(), "src"); src.Valid() { flags = append(flags, "-I"+src.String()) @@ -528,7 +537,7 @@ func (j *Module) collectBuilderFlags(ctx android.ModuleContext, deps deps) javaB func (j *Module) compile(ctx android.ModuleContext) { - j.exportAidlIncludeDirs = android.PathsForModuleSrc(ctx, j.deviceProperties.Export_aidl_include_dirs) + j.exportAidlIncludeDirs = android.PathsForModuleSrc(ctx, j.deviceProperties.Aidl.Export_include_dirs) deps := j.collectDeps(ctx) flags := j.collectBuilderFlags(ctx, deps) @@ -541,8 +550,9 @@ func (j *Module) compile(ctx android.ModuleContext) { flags = protoFlags(ctx, &j.protoProperties, flags) } - var srcJars android.Paths - srcFiles, srcJars = j.genSources(ctx, srcFiles, flags) + srcFiles = j.genSources(ctx, srcFiles, flags) + + srcJars := srcFiles.FilterByExt(".srcjar") srcJars = append(srcJars, deps.srcJars...) srcJars = append(srcJars, j.ExtraSrcJars...) diff --git a/java/proto.go b/java/proto.go index 1077fd69b..17f02a3b2 100644 --- a/java/proto.go +++ b/java/proto.go @@ -15,6 +15,8 @@ package java import ( + "strings" + "github.com/google/blueprint" "github.com/google/blueprint/proptools" @@ -39,7 +41,7 @@ var ( ) func genProto(ctx android.ModuleContext, outputSrcJar android.WritablePath, - protoFiles android.Paths, protoFlags string, protoOut, protoOutFlags string) { + protoFiles android.Paths, protoFlags []string, protoOut, protoOutFlags string) { ctx.Build(pctx, android.BuildParams{ Rule: proto, @@ -50,7 +52,7 @@ func genProto(ctx android.ModuleContext, outputSrcJar android.WritablePath, "outDir": android.ProtoDir(ctx).String(), "protoOut": protoOut, "protoOutFlags": protoOutFlags, - "protoFlags": protoFlags, + "protoFlags": strings.Join(protoFlags, " "), }, }) } @@ -61,10 +63,6 @@ func protoDeps(ctx android.BottomUpMutatorContext, p *android.ProtoProperties) { ctx.AddDependency(ctx.Module(), staticLibTag, "libprotobuf-java-micro") case "nano": ctx.AddDependency(ctx.Module(), staticLibTag, "libprotobuf-java-nano") - case "stream": - // TODO(ccross): add dependency on protoc-gen-java-stream binary - ctx.PropertyErrorf("proto.type", `"stream" not supported yet`) - // No library for stream protobufs case "lite", "": ctx.AddDependency(ctx.Module(), staticLibTag, "libprotobuf-java-lite") case "full": @@ -85,13 +83,14 @@ func protoFlags(ctx android.ModuleContext, p *android.ProtoProperties, flags jav flags.protoOutFlag = "--javamicro_out" case "nano": flags.protoOutFlag = "--javanano_out" - case "stream": - flags.protoOutFlag = "--javastream_out" case "lite", "full", "": flags.protoOutFlag = "--java_out" default: ctx.PropertyErrorf("proto.type", "unknown proto type %q", proptools.String(p.Proto.Type)) } + + flags.protoFlags = android.ProtoFlags(ctx, p) + return flags } diff --git a/scripts/extract-src-jars.sh b/scripts/extract-srcjars.sh similarity index 100% rename from scripts/extract-src-jars.sh rename to scripts/extract-srcjars.sh