diff options
Diffstat (limited to 'android/module.go')
-rw-r--r-- | android/module.go | 119 |
1 files changed, 70 insertions, 49 deletions
diff --git a/android/module.go b/android/module.go index 0f01f0477..5d68a87c9 100644 --- a/android/module.go +++ b/android/module.go @@ -87,8 +87,6 @@ type Module interface { ReplacedByPrebuilt() IsReplacedByPrebuilt() bool ExportedToMake() bool - InitRc() Paths - VintfFragments() Paths EffectiveLicenseKinds() []string EffectiveLicenseFiles() Paths @@ -837,10 +835,6 @@ type ModuleBase struct { noAddressSanitizer bool packagingSpecsDepSet *DepSet[PackagingSpec] - // katiInitRcInstalls and katiVintfInstalls track the install rules created by Soong that are - // allowed to have duplicates across modules and variants. - katiInitRcInstalls katiInstalls - katiVintfInstalls katiInstalls hooks hooks @@ -851,19 +845,9 @@ type ModuleBase struct { ruleParams map[blueprint.Rule]blueprint.RuleParams variables map[string]string - initRcPaths Paths - vintfFragmentsPaths Paths - - installedInitRcPaths InstallPaths - installedVintfFragmentsPaths InstallPaths - // Merged Aconfig files for all transitive deps. aconfigFilePaths Paths - // moduleInfoJSON can be filled out by GenerateAndroidBuildActions to write a JSON file that will - // be included in the final module-info.json produced by Make. - moduleInfoJSON *ModuleInfoJSON - // complianceMetadataInfo is for different module types to dump metadata. // See android.ModuleContext interface. complianceMetadataInfo *ComplianceMetadataInfo @@ -1584,18 +1568,6 @@ func (m *ModuleBase) VintfFragmentModuleNames(ctx ConfigAndErrorContext) []strin return m.base().commonProperties.Vintf_fragment_modules.GetOrDefault(m.ConfigurableEvaluator(ctx), nil) } -func (m *ModuleBase) InitRc() Paths { - return append(Paths{}, m.initRcPaths...) -} - -func (m *ModuleBase) VintfFragments() Paths { - return append(Paths{}, m.vintfFragmentsPaths...) -} - -func (m *ModuleBase) CompileMultilib() *string { - return m.base().commonProperties.Compile_multilib -} - func (m *ModuleBase) generateModuleTarget(ctx *moduleContext) { var allInstalledFiles InstallPaths var allCheckbuildFiles Paths @@ -1771,6 +1743,15 @@ type InstallFilesInfo struct { // The following fields are private before, make it private again once we have // better solution. TransitiveInstallFiles *DepSet[InstallPath] + // katiInitRcInstalls and katiVintfInstalls track the install rules created by Soong that are + // allowed to have duplicates across modules and variants. + KatiInitRcInstalls katiInstalls + KatiVintfInstalls katiInstalls + InitRcPaths Paths + VintfFragmentsPaths Paths + InstalledInitRcPaths InstallPaths + InstalledVintfFragmentsPaths InstallPaths + // The files to copy to the dist as explicitly specified in the .bp file. DistFiles TaggedDistFiles } @@ -1867,30 +1848,36 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) // so only a single rule is created for each init.rc or vintf fragment file. if !m.InVendorRamdisk() { - m.initRcPaths = PathsForModuleSrc(ctx, m.commonProperties.Init_rc) + ctx.initRcPaths = PathsForModuleSrc(ctx, m.commonProperties.Init_rc) rcDir := PathForModuleInstall(ctx, "etc", "init") - for _, src := range m.initRcPaths { + for _, src := range ctx.initRcPaths { installedInitRc := rcDir.Join(ctx, src.Base()) - m.katiInitRcInstalls = append(m.katiInitRcInstalls, katiInstall{ + ctx.katiInitRcInstalls = append(ctx.katiInitRcInstalls, katiInstall{ from: src, to: installedInitRc, }) ctx.PackageFile(rcDir, src.Base(), src) - m.installedInitRcPaths = append(m.installedInitRcPaths, installedInitRc) + ctx.installedInitRcPaths = append(ctx.installedInitRcPaths, installedInitRc) } + installFiles.InitRcPaths = ctx.initRcPaths + installFiles.KatiInitRcInstalls = ctx.katiInitRcInstalls + installFiles.InstalledInitRcPaths = ctx.installedInitRcPaths } - m.vintfFragmentsPaths = PathsForModuleSrc(ctx, m.commonProperties.Vintf_fragments.GetOrDefault(ctx, nil)) + ctx.vintfFragmentsPaths = PathsForModuleSrc(ctx, m.commonProperties.Vintf_fragments.GetOrDefault(ctx, nil)) vintfDir := PathForModuleInstall(ctx, "etc", "vintf", "manifest") - for _, src := range m.vintfFragmentsPaths { + for _, src := range ctx.vintfFragmentsPaths { installedVintfFragment := vintfDir.Join(ctx, src.Base()) - m.katiVintfInstalls = append(m.katiVintfInstalls, katiInstall{ + ctx.katiVintfInstalls = append(ctx.katiVintfInstalls, katiInstall{ from: src, to: installedVintfFragment, }) ctx.PackageFile(vintfDir, src.Base(), src) - m.installedVintfFragmentsPaths = append(m.installedVintfFragmentsPaths, installedVintfFragment) + ctx.installedVintfFragmentsPaths = append(ctx.installedVintfFragmentsPaths, installedVintfFragment) } + installFiles.VintfFragmentsPaths = ctx.vintfFragmentsPaths + installFiles.KatiVintfInstalls = ctx.katiVintfInstalls + installFiles.InstalledVintfFragmentsPaths = ctx.installedVintfFragmentsPaths } licensesPropertyFlattener(ctx) @@ -1956,6 +1943,13 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) if ctx.Failed() { return } + + if x, ok := m.module.(IDEInfo); ok { + var result IdeInfo + x.IDEInfo(ctx, &result) + result.BaseModuleName = x.BaseModuleName() + SetProvider(ctx, IdeInfoProviderKey, result) + } } if incrementalEnabled && cacheKey != nil { @@ -2001,12 +1995,12 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) SetProvider(ctx, InstallFilesProvider, installFiles) buildLicenseMetadata(ctx, ctx.licenseMetadataFile) - if m.moduleInfoJSON != nil { + if ctx.moduleInfoJSON != nil { var installed InstallPaths installed = append(installed, ctx.katiInstalls.InstallPaths()...) installed = append(installed, ctx.katiSymlinks.InstallPaths()...) - installed = append(installed, m.katiInitRcInstalls.InstallPaths()...) - installed = append(installed, m.katiVintfInstalls.InstallPaths()...) + installed = append(installed, ctx.katiInitRcInstalls.InstallPaths()...) + installed = append(installed, ctx.katiVintfInstalls.InstallPaths()...) installedStrings := installed.Strings() var targetRequired, hostRequired []string @@ -2021,28 +2015,28 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) data = append(data, d.ToRelativeInstallPath()) } - if m.moduleInfoJSON.Uninstallable { + if ctx.moduleInfoJSON.Uninstallable { installedStrings = nil - if len(m.moduleInfoJSON.CompatibilitySuites) == 1 && m.moduleInfoJSON.CompatibilitySuites[0] == "null-suite" { - m.moduleInfoJSON.CompatibilitySuites = nil - m.moduleInfoJSON.TestConfig = nil - m.moduleInfoJSON.AutoTestConfig = nil + if len(ctx.moduleInfoJSON.CompatibilitySuites) == 1 && ctx.moduleInfoJSON.CompatibilitySuites[0] == "null-suite" { + ctx.moduleInfoJSON.CompatibilitySuites = nil + ctx.moduleInfoJSON.TestConfig = nil + ctx.moduleInfoJSON.AutoTestConfig = nil data = nil } } - m.moduleInfoJSON.core = CoreModuleInfoJSON{ - RegisterName: m.moduleInfoRegisterName(ctx, m.moduleInfoJSON.SubName), + ctx.moduleInfoJSON.core = CoreModuleInfoJSON{ + RegisterName: m.moduleInfoRegisterName(ctx, ctx.moduleInfoJSON.SubName), Path: []string{ctx.ModuleDir()}, Installed: installedStrings, - ModuleName: m.BaseModuleName() + m.moduleInfoJSON.SubName, + ModuleName: m.BaseModuleName() + ctx.moduleInfoJSON.SubName, SupportedVariants: []string{m.moduleInfoVariant(ctx)}, TargetDependencies: targetRequired, HostDependencies: hostRequired, Data: data, Required: m.RequiredModuleNames(ctx), } - SetProvider(ctx, ModuleInfoJSONProvider, m.moduleInfoJSON) + SetProvider(ctx, ModuleInfoJSONProvider, ctx.moduleInfoJSON) } m.buildParams = ctx.buildParams @@ -2741,7 +2735,7 @@ func (c *buildTargetSingleton) GenerateBuildActions(ctx SingletonContext) { // Collect information for opening IDE project files in java/jdeps.go. type IDEInfo interface { - IDEInfo(ideInfo *IdeInfo) + IDEInfo(ctx BaseModuleContext, ideInfo *IdeInfo) BaseModuleName() string } @@ -2753,7 +2747,9 @@ type IDECustomizedModuleName interface { IDECustomizedModuleName() string } +// Collect information for opening IDE project files in java/jdeps.go. type IdeInfo struct { + BaseModuleName string `json:"-"` Deps []string `json:"dependencies,omitempty"` Srcs []string `json:"srcs,omitempty"` Aidl_include_dirs []string `json:"aidl_include_dirs,omitempty"` @@ -2767,6 +2763,31 @@ type IdeInfo struct { Libs []string `json:"libs,omitempty"` } +// Merge merges two IdeInfos and produces a new one, leaving the origional unchanged +func (i IdeInfo) Merge(other IdeInfo) IdeInfo { + return IdeInfo{ + Deps: mergeStringLists(i.Deps, other.Deps), + Srcs: mergeStringLists(i.Srcs, other.Srcs), + Aidl_include_dirs: mergeStringLists(i.Aidl_include_dirs, other.Aidl_include_dirs), + Jarjar_rules: mergeStringLists(i.Jarjar_rules, other.Jarjar_rules), + Jars: mergeStringLists(i.Jars, other.Jars), + Classes: mergeStringLists(i.Classes, other.Classes), + Installed_paths: mergeStringLists(i.Installed_paths, other.Installed_paths), + SrcJars: mergeStringLists(i.SrcJars, other.SrcJars), + Paths: mergeStringLists(i.Paths, other.Paths), + Static_libs: mergeStringLists(i.Static_libs, other.Static_libs), + Libs: mergeStringLists(i.Libs, other.Libs), + } +} + +// mergeStringLists appends the two string lists together and returns a new string list, +// leaving the originals unchanged. Duplicate strings will be deduplicated. +func mergeStringLists(a, b []string) []string { + return FirstUniqueStrings(Concat(a, b)) +} + +var IdeInfoProviderKey = blueprint.NewProvider[IdeInfo]() + func CheckBlueprintSyntax(ctx BaseModuleContext, filename string, contents string) []error { bpctx := ctx.blueprintBaseModuleContext() return blueprint.CheckBlueprintSyntax(bpctx.ModuleFactories(), filename, contents) |