Loading android/init.go +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ func init() { gob.Register(extraFilesZip{}) gob.Register(InstallPath{}) gob.Register(ModuleGenPath{}) gob.Register(ModuleObjPath{}) gob.Register(ModuleOutPath{}) gob.Register(OutputPath{}) gob.Register(PhonyPath{}) Loading android/module.go +3 −0 Original line number Diff line number Diff line Loading @@ -1822,6 +1822,8 @@ type CommonPropertiesProviderData struct { Enabled bool // Whether the module has been replaced by a prebuilt ReplacedByPrebuilt bool // The Target of artifacts that this module variant is responsible for creating. CompileTarget Target } var CommonPropertiesProviderKey = blueprint.NewProvider[CommonPropertiesProviderData]() Loading Loading @@ -2086,6 +2088,7 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) commonData := CommonPropertiesProviderData{ ReplacedByPrebuilt: m.commonProperties.ReplacedByPrebuilt, CompileTarget: m.commonProperties.CompileTarget, } if m.commonProperties.ForcedDisabled { commonData.Enabled = false Loading android/singleton.go +22 −1 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ type SingletonContext interface { VisitAllModulesBlueprint(visit func(blueprint.Module)) VisitAllModules(visit func(Module)) VisitAllModuleProxies(visit func(proxy ModuleProxy)) VisitAllModulesIf(pred func(Module) bool, visit func(Module)) VisitDirectDeps(module Module, visit func(Module)) Loading @@ -77,6 +78,8 @@ type SingletonContext interface { VisitAllModuleVariants(module Module, visit func(Module)) VisitAllModuleVariantProxies(module Module, visit func(proxy ModuleProxy)) PrimaryModule(module Module) Module FinalModule(module Module) Module Loading Loading @@ -193,7 +196,7 @@ func (s *singletonContextAdaptor) Eval(pctx PackageContext, ninjaStr string) (st } // visitAdaptor wraps a visit function that takes an android.Module parameter into // a function that takes an blueprint.Module parameter and only calls the visit function if the // a function that takes a blueprint.Module parameter and only calls the visit function if the // blueprint.Module is an android.Module. func visitAdaptor(visit func(Module)) func(blueprint.Module) { return func(module blueprint.Module) { Loading @@ -203,6 +206,16 @@ func visitAdaptor(visit func(Module)) func(blueprint.Module) { } } // visitProxyAdaptor wraps a visit function that takes an android.ModuleProxy parameter into // a function that takes a blueprint.ModuleProxy parameter. func visitProxyAdaptor(visit func(proxy ModuleProxy)) func(proxy blueprint.ModuleProxy) { return func(module blueprint.ModuleProxy) { visit(ModuleProxy{ module: module, }) } } // predAdaptor wraps a pred function that takes an android.Module parameter // into a function that takes an blueprint.Module parameter and only calls the visit function if the // blueprint.Module is an android.Module, otherwise returns false. Loading @@ -224,6 +237,10 @@ func (s *singletonContextAdaptor) VisitAllModules(visit func(Module)) { s.SingletonContext.VisitAllModules(visitAdaptor(visit)) } func (s *singletonContextAdaptor) VisitAllModuleProxies(visit func(proxy ModuleProxy)) { s.SingletonContext.VisitAllModuleProxies(visitProxyAdaptor(visit)) } func (s *singletonContextAdaptor) VisitAllModulesIf(pred func(Module) bool, visit func(Module)) { s.SingletonContext.VisitAllModulesIf(predAdaptor(pred), visitAdaptor(visit)) } Loading @@ -248,6 +265,10 @@ func (s *singletonContextAdaptor) VisitAllModuleVariants(module Module, visit fu s.SingletonContext.VisitAllModuleVariants(module, visitAdaptor(visit)) } func (s *singletonContextAdaptor) VisitAllModuleVariantProxies(module Module, visit func(proxy ModuleProxy)) { s.SingletonContext.VisitAllModuleVariantProxies(module, visitProxyAdaptor(visit)) } func (s *singletonContextAdaptor) PrimaryModule(module Module) Module { return s.SingletonContext.PrimaryModule(module).(Module) } Loading cc/cc.go +29 −20 Original line number Diff line number Diff line Loading @@ -45,6 +45,14 @@ type CcMakeVarsInfo struct { var CcMakeVarsInfoProvider = blueprint.NewProvider[*CcMakeVarsInfo]() type CcObjectInfo struct { objFiles android.Paths tidyFiles android.Paths kytheFiles android.Paths } var CcObjectInfoProvider = blueprint.NewProvider[CcObjectInfo]() func init() { RegisterCCBuildComponents(android.InitRegistrationContext) Loading Loading @@ -653,10 +661,6 @@ type installer interface { installInRoot() bool } type xref interface { XrefCcFiles() android.Paths } type overridable interface { overriddenModules() []string } Loading Loading @@ -905,12 +909,6 @@ type Module struct { staticAnalogue *StaticLibraryInfo makeLinkType string // Kythe (source file indexer) paths for this compilation module kytheFiles android.Paths // Object .o file output paths for this compilation module objFiles android.Paths // Tidy .tidy file output paths for this compilation module tidyFiles android.Paths // For apex variants, this is set as apex.min_sdk_version apexSdkVersion android.ApiLevel Loading Loading @@ -1478,10 +1476,6 @@ func InstallToBootstrap(name string, config android.Config) bool { return isBionic(name) } func (c *Module) XrefCcFiles() android.Paths { return c.kytheFiles } func (c *Module) isCfiAssemblySupportEnabled() bool { return c.sanitize != nil && Bool(c.sanitize.Properties.Sanitize.Config.Cfi_assembly_support) Loading Loading @@ -2053,9 +2047,6 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { if ctx.Failed() { return } c.kytheFiles = objs.kytheFiles c.objFiles = objs.objFiles c.tidyFiles = objs.tidyFiles } if c.linker != nil { Loading Loading @@ -2124,6 +2115,17 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { c.hasYacc = b.hasSrcExt(ctx, ".y") || b.hasSrcExt(ctx, ".yy") } ccObjectInfo := CcObjectInfo{ kytheFiles: objs.kytheFiles, } if !ctx.Config().KatiEnabled() || !android.ShouldSkipAndroidMkProcessing(ctx, c) { ccObjectInfo.objFiles = objs.objFiles ccObjectInfo.tidyFiles = objs.tidyFiles } if len(ccObjectInfo.kytheFiles)+len(ccObjectInfo.objFiles)+len(ccObjectInfo.tidyFiles) > 0 { android.SetProvider(ctx, CcObjectInfoProvider, ccObjectInfo) } c.setOutputFiles(ctx) if c.makeVarsInfo != nil { Loading @@ -2131,6 +2133,12 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { } } func setOutputFilesIfNotEmpty(ctx ModuleContext, files android.Paths, tag string) { if len(files) > 0 { ctx.SetOutputFiles(files, tag) } } func (c *Module) setOutputFiles(ctx ModuleContext) { if c.outputFile.Valid() { ctx.SetOutputFiles(android.Paths{c.outputFile.Path()}, "") Loading Loading @@ -4001,9 +4009,10 @@ type kytheExtractAllSingleton struct { func (ks *kytheExtractAllSingleton) GenerateBuildActions(ctx android.SingletonContext) { var xrefTargets android.Paths ctx.VisitAllModules(func(module android.Module) { if ccModule, ok := module.(xref); ok { xrefTargets = append(xrefTargets, ccModule.XrefCcFiles()...) ctx.VisitAllModuleProxies(func(module android.ModuleProxy) { files := android.OtherModuleProviderOrDefault(ctx, module, CcObjectInfoProvider).kytheFiles if len(files) > 0 { xrefTargets = append(xrefTargets, files...) } }) // TODO(asmundak): Perhaps emit a rule to output a warning if there were no xrefTargets Loading cc/tidy.go +5 −9 Original line number Diff line number Diff line Loading @@ -219,15 +219,11 @@ func collectTidyObjModuleTargets(ctx android.SingletonContext, module android.Mo subsetTidyFileGroups := make(map[string]android.Paths) // subset group name => tidy file Paths // (1) Collect all obj/tidy files into OS-specific groups. ctx.VisitAllModuleVariants(module, func(variant android.Module) { if ctx.Config().KatiEnabled() && android.ShouldSkipAndroidMkProcessing(ctx, variant) { return } if m, ok := variant.(*Module); ok { osName := variant.Target().Os.Name addToOSGroup(osName, m.objFiles, allObjFileGroups, subsetObjFileGroups) addToOSGroup(osName, m.tidyFiles, allTidyFileGroups, subsetTidyFileGroups) } ctx.VisitAllModuleVariantProxies(module, func(variant android.ModuleProxy) { osName := android.OtherModuleProviderOrDefault(ctx, variant, android.CommonPropertiesProviderKey).CompileTarget.Os.Name info := android.OtherModuleProviderOrDefault(ctx, variant, CcObjectInfoProvider) addToOSGroup(osName, info.objFiles, allObjFileGroups, subsetObjFileGroups) addToOSGroup(osName, info.tidyFiles, allTidyFileGroups, subsetTidyFileGroups) }) // (2) Add an all-OS group, with "" or "subset" name, to include all os-specific phony targets. Loading Loading
android/init.go +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ func init() { gob.Register(extraFilesZip{}) gob.Register(InstallPath{}) gob.Register(ModuleGenPath{}) gob.Register(ModuleObjPath{}) gob.Register(ModuleOutPath{}) gob.Register(OutputPath{}) gob.Register(PhonyPath{}) Loading
android/module.go +3 −0 Original line number Diff line number Diff line Loading @@ -1822,6 +1822,8 @@ type CommonPropertiesProviderData struct { Enabled bool // Whether the module has been replaced by a prebuilt ReplacedByPrebuilt bool // The Target of artifacts that this module variant is responsible for creating. CompileTarget Target } var CommonPropertiesProviderKey = blueprint.NewProvider[CommonPropertiesProviderData]() Loading Loading @@ -2086,6 +2088,7 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) commonData := CommonPropertiesProviderData{ ReplacedByPrebuilt: m.commonProperties.ReplacedByPrebuilt, CompileTarget: m.commonProperties.CompileTarget, } if m.commonProperties.ForcedDisabled { commonData.Enabled = false Loading
android/singleton.go +22 −1 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ type SingletonContext interface { VisitAllModulesBlueprint(visit func(blueprint.Module)) VisitAllModules(visit func(Module)) VisitAllModuleProxies(visit func(proxy ModuleProxy)) VisitAllModulesIf(pred func(Module) bool, visit func(Module)) VisitDirectDeps(module Module, visit func(Module)) Loading @@ -77,6 +78,8 @@ type SingletonContext interface { VisitAllModuleVariants(module Module, visit func(Module)) VisitAllModuleVariantProxies(module Module, visit func(proxy ModuleProxy)) PrimaryModule(module Module) Module FinalModule(module Module) Module Loading Loading @@ -193,7 +196,7 @@ func (s *singletonContextAdaptor) Eval(pctx PackageContext, ninjaStr string) (st } // visitAdaptor wraps a visit function that takes an android.Module parameter into // a function that takes an blueprint.Module parameter and only calls the visit function if the // a function that takes a blueprint.Module parameter and only calls the visit function if the // blueprint.Module is an android.Module. func visitAdaptor(visit func(Module)) func(blueprint.Module) { return func(module blueprint.Module) { Loading @@ -203,6 +206,16 @@ func visitAdaptor(visit func(Module)) func(blueprint.Module) { } } // visitProxyAdaptor wraps a visit function that takes an android.ModuleProxy parameter into // a function that takes a blueprint.ModuleProxy parameter. func visitProxyAdaptor(visit func(proxy ModuleProxy)) func(proxy blueprint.ModuleProxy) { return func(module blueprint.ModuleProxy) { visit(ModuleProxy{ module: module, }) } } // predAdaptor wraps a pred function that takes an android.Module parameter // into a function that takes an blueprint.Module parameter and only calls the visit function if the // blueprint.Module is an android.Module, otherwise returns false. Loading @@ -224,6 +237,10 @@ func (s *singletonContextAdaptor) VisitAllModules(visit func(Module)) { s.SingletonContext.VisitAllModules(visitAdaptor(visit)) } func (s *singletonContextAdaptor) VisitAllModuleProxies(visit func(proxy ModuleProxy)) { s.SingletonContext.VisitAllModuleProxies(visitProxyAdaptor(visit)) } func (s *singletonContextAdaptor) VisitAllModulesIf(pred func(Module) bool, visit func(Module)) { s.SingletonContext.VisitAllModulesIf(predAdaptor(pred), visitAdaptor(visit)) } Loading @@ -248,6 +265,10 @@ func (s *singletonContextAdaptor) VisitAllModuleVariants(module Module, visit fu s.SingletonContext.VisitAllModuleVariants(module, visitAdaptor(visit)) } func (s *singletonContextAdaptor) VisitAllModuleVariantProxies(module Module, visit func(proxy ModuleProxy)) { s.SingletonContext.VisitAllModuleVariantProxies(module, visitProxyAdaptor(visit)) } func (s *singletonContextAdaptor) PrimaryModule(module Module) Module { return s.SingletonContext.PrimaryModule(module).(Module) } Loading
cc/cc.go +29 −20 Original line number Diff line number Diff line Loading @@ -45,6 +45,14 @@ type CcMakeVarsInfo struct { var CcMakeVarsInfoProvider = blueprint.NewProvider[*CcMakeVarsInfo]() type CcObjectInfo struct { objFiles android.Paths tidyFiles android.Paths kytheFiles android.Paths } var CcObjectInfoProvider = blueprint.NewProvider[CcObjectInfo]() func init() { RegisterCCBuildComponents(android.InitRegistrationContext) Loading Loading @@ -653,10 +661,6 @@ type installer interface { installInRoot() bool } type xref interface { XrefCcFiles() android.Paths } type overridable interface { overriddenModules() []string } Loading Loading @@ -905,12 +909,6 @@ type Module struct { staticAnalogue *StaticLibraryInfo makeLinkType string // Kythe (source file indexer) paths for this compilation module kytheFiles android.Paths // Object .o file output paths for this compilation module objFiles android.Paths // Tidy .tidy file output paths for this compilation module tidyFiles android.Paths // For apex variants, this is set as apex.min_sdk_version apexSdkVersion android.ApiLevel Loading Loading @@ -1478,10 +1476,6 @@ func InstallToBootstrap(name string, config android.Config) bool { return isBionic(name) } func (c *Module) XrefCcFiles() android.Paths { return c.kytheFiles } func (c *Module) isCfiAssemblySupportEnabled() bool { return c.sanitize != nil && Bool(c.sanitize.Properties.Sanitize.Config.Cfi_assembly_support) Loading Loading @@ -2053,9 +2047,6 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { if ctx.Failed() { return } c.kytheFiles = objs.kytheFiles c.objFiles = objs.objFiles c.tidyFiles = objs.tidyFiles } if c.linker != nil { Loading Loading @@ -2124,6 +2115,17 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { c.hasYacc = b.hasSrcExt(ctx, ".y") || b.hasSrcExt(ctx, ".yy") } ccObjectInfo := CcObjectInfo{ kytheFiles: objs.kytheFiles, } if !ctx.Config().KatiEnabled() || !android.ShouldSkipAndroidMkProcessing(ctx, c) { ccObjectInfo.objFiles = objs.objFiles ccObjectInfo.tidyFiles = objs.tidyFiles } if len(ccObjectInfo.kytheFiles)+len(ccObjectInfo.objFiles)+len(ccObjectInfo.tidyFiles) > 0 { android.SetProvider(ctx, CcObjectInfoProvider, ccObjectInfo) } c.setOutputFiles(ctx) if c.makeVarsInfo != nil { Loading @@ -2131,6 +2133,12 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { } } func setOutputFilesIfNotEmpty(ctx ModuleContext, files android.Paths, tag string) { if len(files) > 0 { ctx.SetOutputFiles(files, tag) } } func (c *Module) setOutputFiles(ctx ModuleContext) { if c.outputFile.Valid() { ctx.SetOutputFiles(android.Paths{c.outputFile.Path()}, "") Loading Loading @@ -4001,9 +4009,10 @@ type kytheExtractAllSingleton struct { func (ks *kytheExtractAllSingleton) GenerateBuildActions(ctx android.SingletonContext) { var xrefTargets android.Paths ctx.VisitAllModules(func(module android.Module) { if ccModule, ok := module.(xref); ok { xrefTargets = append(xrefTargets, ccModule.XrefCcFiles()...) ctx.VisitAllModuleProxies(func(module android.ModuleProxy) { files := android.OtherModuleProviderOrDefault(ctx, module, CcObjectInfoProvider).kytheFiles if len(files) > 0 { xrefTargets = append(xrefTargets, files...) } }) // TODO(asmundak): Perhaps emit a rule to output a warning if there were no xrefTargets Loading
cc/tidy.go +5 −9 Original line number Diff line number Diff line Loading @@ -219,15 +219,11 @@ func collectTidyObjModuleTargets(ctx android.SingletonContext, module android.Mo subsetTidyFileGroups := make(map[string]android.Paths) // subset group name => tidy file Paths // (1) Collect all obj/tidy files into OS-specific groups. ctx.VisitAllModuleVariants(module, func(variant android.Module) { if ctx.Config().KatiEnabled() && android.ShouldSkipAndroidMkProcessing(ctx, variant) { return } if m, ok := variant.(*Module); ok { osName := variant.Target().Os.Name addToOSGroup(osName, m.objFiles, allObjFileGroups, subsetObjFileGroups) addToOSGroup(osName, m.tidyFiles, allTidyFileGroups, subsetTidyFileGroups) } ctx.VisitAllModuleVariantProxies(module, func(variant android.ModuleProxy) { osName := android.OtherModuleProviderOrDefault(ctx, variant, android.CommonPropertiesProviderKey).CompileTarget.Os.Name info := android.OtherModuleProviderOrDefault(ctx, variant, CcObjectInfoProvider) addToOSGroup(osName, info.objFiles, allObjFileGroups, subsetObjFileGroups) addToOSGroup(osName, info.tidyFiles, allTidyFileGroups, subsetTidyFileGroups) }) // (2) Add an all-OS group, with "" or "subset" name, to include all os-specific phony targets. Loading