diff options
Diffstat (limited to 'android/filegroup.go')
-rw-r--r-- | android/filegroup.go | 74 |
1 files changed, 48 insertions, 26 deletions
diff --git a/android/filegroup.go b/android/filegroup.go index 50356d1c3..9e5769a82 100644 --- a/android/filegroup.go +++ b/android/filegroup.go @@ -18,6 +18,7 @@ import ( "strings" "android/soong/bazel" + "android/soong/bazel/cquery" "github.com/google/blueprint" ) @@ -101,6 +102,7 @@ type fileGroup struct { srcs Paths } +var _ MixedBuildBuildable = (*fileGroup)(nil) var _ SourceFileProducer = (*fileGroup)(nil) // filegroup contains a list of files that are referenced by other modules @@ -114,33 +116,21 @@ func FileGroupFactory() Module { return module } -func (fg *fileGroup) maybeGenerateBazelBuildActions(ctx ModuleContext) { - if !fg.MixedBuildsEnabled(ctx) { - return - } +var _ blueprint.JSONActionSupplier = (*fileGroup)(nil) - archVariant := ctx.Arch().String() - osVariant := ctx.Os() - if len(fg.Srcs()) == 1 && fg.Srcs()[0].Base() == fg.Name() { - // This will be a regular file target, not filegroup, in Bazel. - // See FilegroupBp2Build for more information. - archVariant = Common.String() - osVariant = CommonOS +func (fg *fileGroup) JSONActions() []blueprint.JSONAction { + ins := make([]string, 0, len(fg.srcs)) + outs := make([]string, 0, len(fg.srcs)) + for _, p := range fg.srcs { + ins = append(ins, p.String()) + outs = append(outs, p.Rel()) } - - bazelCtx := ctx.Config().BazelContext - filePaths, ok := bazelCtx.GetOutputFiles(fg.GetBazelLabel(ctx, fg), configKey{archVariant, osVariant}) - if !ok { - return - } - - bazelOuts := make(Paths, 0, len(filePaths)) - for _, p := range filePaths { - src := PathForBazelOut(ctx, p) - bazelOuts = append(bazelOuts, src) + return []blueprint.JSONAction{ + blueprint.JSONAction{ + Inputs: ins, + Outputs: outs, + }, } - - fg.srcs = bazelOuts } func (fg *fileGroup) GenerateAndroidBuildActions(ctx ModuleContext) { @@ -148,8 +138,6 @@ func (fg *fileGroup) GenerateAndroidBuildActions(ctx ModuleContext) { if fg.properties.Path != nil { fg.srcs = PathsWithModuleSrcSubDir(ctx, fg.srcs, String(fg.properties.Path)) } - - fg.maybeGenerateBazelBuildActions(ctx) } func (fg *fileGroup) Srcs() Paths { @@ -161,3 +149,37 @@ func (fg *fileGroup) MakeVars(ctx MakeVarsModuleContext) { ctx.StrictRaw(makeVar, strings.Join(fg.srcs.Strings(), " ")) } } + +func (fg *fileGroup) QueueBazelCall(ctx BaseModuleContext) { + bazelCtx := ctx.Config().BazelContext + + bazelCtx.QueueBazelRequest( + fg.GetBazelLabel(ctx, fg), + cquery.GetOutputFiles, + configKey{Common.String(), CommonOS}) +} + +func (fg *fileGroup) IsMixedBuildSupported(ctx BaseModuleContext) bool { + return true +} + +func (fg *fileGroup) ProcessBazelQueryResponse(ctx ModuleContext) { + fg.srcs = PathsForModuleSrcExcludes(ctx, fg.properties.Srcs, fg.properties.Exclude_srcs) + if fg.properties.Path != nil { + fg.srcs = PathsWithModuleSrcSubDir(ctx, fg.srcs, String(fg.properties.Path)) + } + + bazelCtx := ctx.Config().BazelContext + filePaths, err := bazelCtx.GetOutputFiles(fg.GetBazelLabel(ctx, fg), configKey{Common.String(), CommonOS}) + if err != nil { + ctx.ModuleErrorf(err.Error()) + return + } + + bazelOuts := make(Paths, 0, len(filePaths)) + for _, p := range filePaths { + bazelOuts = append(bazelOuts, PathForBazelOutRelative(ctx, ctx.ModuleDir(), p)) + } + + fg.srcs = bazelOuts +} |