Merge "Divorce disting from androidmk" into main
diff --git a/aconfig/exported_java_aconfig_library.go b/aconfig/exported_java_aconfig_library.go
index 63d824a..ffb2a0c 100644
--- a/aconfig/exported_java_aconfig_library.go
+++ b/aconfig/exported_java_aconfig_library.go
@@ -15,8 +15,9 @@
package aconfig
import (
- "android/soong/android"
"strconv"
+
+ "android/soong/android"
)
func ExportedJavaDeclarationsLibraryFactory() android.Singleton {
@@ -30,7 +31,7 @@
func (this *exportedJavaDeclarationsLibrarySingleton) GenerateBuildActions(ctx android.SingletonContext) {
// Find all of the aconfig_declarations modules
var cacheFiles android.Paths
- ctx.VisitAllModules(func(module android.Module) {
+ ctx.VisitAllModuleProxies(func(module android.ModuleProxy) {
decl, ok := android.OtherModuleProvider(ctx, module, android.AconfigDeclarationsProviderKey)
if !ok {
return
diff --git a/android/all_teams.go b/android/all_teams.go
index 3b20107..8b55ade 100644
--- a/android/all_teams.go
+++ b/android/all_teams.go
@@ -78,19 +78,19 @@
t.teams = make(map[string]teamProperties)
t.teams_for_mods = make(map[string]moduleTeamAndTestInfo)
- ctx.VisitAllModules(func(module Module) {
+ ctx.VisitAllModuleProxies(func(module ModuleProxy) {
bpFile := ctx.BlueprintFile(module)
// Package Modules and Team Modules are stored in a map so we can look them up by name for
// modules without a team.
- if pack, ok := module.(*packageModule); ok {
+ if pack, ok := OtherModuleProvider(ctx, module, PackageInfoProvider); ok {
// Packages don't have names, use the blueprint file as the key. we can't get qualifiedModuleId in t context.
pkgKey := bpFile
- t.packages[pkgKey] = pack.properties
+ t.packages[pkgKey] = pack.Properties
return
}
- if team, ok := module.(*teamModule); ok {
- t.teams[team.Name()] = team.properties
+ if team, ok := OtherModuleProvider(ctx, module, TeamInfoProvider); ok {
+ t.teams[module.Name()] = team.Properties
return
}
@@ -116,7 +116,7 @@
testOnly: testModInfo.TestOnly,
topLevelTestTarget: testModInfo.TopLevelTarget,
kind: ctx.ModuleType(module),
- teamName: module.base().Team(),
+ teamName: OtherModuleProviderOrDefault(ctx, module, CommonModuleInfoKey).Team,
}
t.teams_for_mods[module.Name()] = entry
diff --git a/android/apex.go b/android/apex.go
index 91fa2c7..4e92f44 100644
--- a/android/apex.go
+++ b/android/apex.go
@@ -646,6 +646,13 @@
FullListPath() Path
}
+type ApexBundleDepsData struct {
+ Updatable bool
+ FlatListPath Path
+}
+
+var ApexBundleDepsDataProvider = blueprint.NewProvider[ApexBundleDepsData]()
+
func (d *ApexBundleDepsInfo) FlatListPath() Path {
return d.flatListPath
}
diff --git a/android/filegroup.go b/android/filegroup.go
index 47102b9..4fad52a 100644
--- a/android/filegroup.go
+++ b/android/filegroup.go
@@ -131,10 +131,11 @@
return append(Paths{}, fg.srcs...)
}
-func (fg *fileGroup) MakeVars(ctx MakeVarsModuleContext) {
+func (fg *fileGroup) MakeVars(_ MakeVarsModuleContext) []ModuleMakeVarsValue {
if makeVar := String(fg.properties.Export_to_make_var); makeVar != "" {
- ctx.StrictRaw(makeVar, strings.Join(fg.srcs.Strings(), " "))
+ return []ModuleMakeVarsValue{{makeVar, strings.Join(fg.srcs.Strings(), " ")}}
}
+ return nil
}
// Defaults
diff --git a/android/logtags.go b/android/logtags.go
index abc37f9..88d36ec 100644
--- a/android/logtags.go
+++ b/android/logtags.go
@@ -42,8 +42,8 @@
func (l *logtagsSingleton) GenerateBuildActions(ctx SingletonContext) {
var allLogtags Paths
- ctx.VisitAllModules(func(module Module) {
- if !module.ExportedToMake() {
+ ctx.VisitAllModuleProxies(func(module ModuleProxy) {
+ if !OtherModuleProviderOrDefault(ctx, module, CommonModuleInfoKey).ExportedToMake {
return
}
if logtagsInfo, ok := OtherModuleProvider(ctx, module, LogtagsProviderKey); ok {
diff --git a/android/makevars.go b/android/makevars.go
index 2931d0b..692b27e 100644
--- a/android/makevars.go
+++ b/android/makevars.go
@@ -84,6 +84,7 @@
Errorf(format string, args ...interface{})
VisitAllModules(visit func(Module))
+ VisitAllModuleProxies(visit func(proxy ModuleProxy))
VisitAllModulesIf(pred func(Module) bool, visit func(Module))
// Verify the make variable matches the Soong version, fail the build
@@ -108,7 +109,7 @@
// MakeVarsModuleContext contains the set of functions available for modules
// implementing the ModuleMakeVarsProvider interface.
type MakeVarsModuleContext interface {
- BaseMakeVarsContext
+ Config() Config
}
var _ PathContext = MakeVarsContext(nil)
@@ -150,14 +151,21 @@
return func(ctx MakeVarsContext) { singleton.MakeVars(ctx) }
}
+type ModuleMakeVarsValue struct {
+ // Make variable name.
+ Name string
+ // Make variable value.
+ Value string
+}
+
// ModuleMakeVarsProvider is a Module with an extra method to provide extra values to be exported to Make.
type ModuleMakeVarsProvider interface {
- Module
-
// MakeVars uses a MakeVarsModuleContext to provide extra values to be exported to Make.
- MakeVars(ctx MakeVarsModuleContext)
+ MakeVars(ctx MakeVarsModuleContext) []ModuleMakeVarsValue
}
+var ModuleMakeVarsInfoProvider = blueprint.NewProvider[[]ModuleMakeVarsValue]()
+
// /////////////////////////////////////////////////////////////////////////////
func makeVarsSingletonFunc() Singleton {
@@ -250,19 +258,24 @@
dists = append(dists, singletonDists.dists...)
singletonDists.lock.Unlock()
- ctx.VisitAllModules(func(m Module) {
- if provider, ok := m.(ModuleMakeVarsProvider); ok && m.Enabled(ctx) {
+ ctx.VisitAllModuleProxies(func(m ModuleProxy) {
+ commonInfo, _ := OtherModuleProvider(ctx, m, CommonModuleInfoKey)
+ if provider, ok := OtherModuleProvider(ctx, m, ModuleMakeVarsInfoProvider); ok &&
+ commonInfo.Enabled {
mctx := &makeVarsContext{
SingletonContext: ctx,
}
-
- provider.MakeVars(mctx)
+ for _, val := range provider {
+ if val.Name != "" {
+ mctx.StrictRaw(val.Name, val.Value)
+ }
+ }
vars = append(vars, mctx.vars...)
phonies = append(phonies, mctx.phonies...)
}
- if m.ExportedToMake() {
+ if commonInfo.ExportedToMake {
info := OtherModuleProviderOrDefault(ctx, m, InstallFilesProvider)
katiInstalls = append(katiInstalls, info.KatiInstalls...)
katiInitRcInstalls = append(katiInitRcInstalls, info.KatiInitRcInstalls...)
diff --git a/android/module.go b/android/module.go
index c243d75..622399b 100644
--- a/android/module.go
+++ b/android/module.go
@@ -1936,6 +1936,8 @@
TargetRequiredModuleNames []string
VintfFragmentModuleNames []string
Dists []Dist
+ ExportedToMake bool
+ Team string
}
type ApiLevelOrPlatform struct {
@@ -2295,6 +2297,8 @@
TargetRequiredModuleNames: m.module.TargetRequiredModuleNames(),
VintfFragmentModuleNames: m.module.VintfFragmentModuleNames(ctx),
Dists: m.Dists(),
+ ExportedToMake: m.ExportedToMake(),
+ Team: m.Team(),
}
if mm, ok := m.module.(interface {
MinSdkVersion(ctx EarlyModuleContext) ApiLevel
@@ -2365,6 +2369,10 @@
GeneratedDeps: s.GeneratedDeps(),
})
}
+
+ if v, ok := m.module.(ModuleMakeVarsProvider); m.Enabled(ctx) && ok {
+ SetProvider(ctx, ModuleMakeVarsInfoProvider, v.MakeVars(ctx))
+ }
}
func SetJarJarPrefixHandler(handler func(ModuleContext)) {
@@ -2881,6 +2889,8 @@
// OutputFileForModule returns the output file paths with the given tag. On error, including if the
// module produced zero or multiple paths, it reports errors to the ctx and returns nil.
+// TODO(b/397766191): Change the signature to take ModuleProxy
+// Please only access the module's internal data through providers.
func OutputFileForModule(ctx PathContext, module Module, tag string) Path {
paths, err := outputFilesForModule(ctx, module, tag)
if err != nil {
@@ -2921,6 +2931,8 @@
EqualModules(m1, m2 Module) bool
}
+// TODO(b/397766191): Change the signature to take ModuleProxy
+// Please only access the module's internal data through providers.
func outputFilesForModule(ctx PathContext, module Module, tag string) (Paths, error) {
outputFilesFromProvider, err := outputFilesForModuleFromProvider(ctx, module, tag)
if outputFilesFromProvider != nil || err != OutputFilesProviderNotSet {
@@ -3078,7 +3090,7 @@
modulesInDir := make(map[string]Paths)
- ctx.VisitAllModules(func(module Module) {
+ ctx.VisitAllModuleProxies(func(module ModuleProxy) {
info := OtherModuleProviderOrDefault(ctx, module, FinalModuleBuildTargetsProvider)
if info.CheckbuildTarget != nil {
diff --git a/android/neverallow.go b/android/neverallow.go
index 70af2ac..14dc6d2 100644
--- a/android/neverallow.go
+++ b/android/neverallow.go
@@ -298,33 +298,29 @@
WithoutMatcher("visibility", InAllowedList([]string{"//trusty/vendor/google/aosp/scripts", "//trusty/vendor/google/proprietary/scripts"})).Because(reason),
NeverAllow().
ModuleType("genrule").
- // TODO: remove the 4 below targets once new targets are submitted
- Without("name", "trusty-arm64.lk.elf.gen").
- Without("name", "trusty-arm64-virt-test-debug.lk.elf.gen").
- Without("name", "trusty-x86_64.lk.elf.gen").
- Without("name", "trusty-x86_64-test.lk.elf.gen").
- // trusty vm target names moving forward
- Without("name", "trusty-test_vm-arm64.elf.gen").
- Without("name", "trusty-test_vm-x86.elf.gen").
- Without("name", "trusty-security_vm-arm64.elf.gen").
- Without("name", "trusty-security_vm-x86.elf.gen").
- Without("name", "trusty-widevine_vm-arm64.elf.gen").
- Without("name", "trusty-widevine_vm-x86.elf.gen").
+ // Trusty TEE target names
+ Without("name", "trusty_tee_package_goog").
+ Without("name", "trusty_tee_package").
+ // Trusty vm target names
+ Without("name", "trusty_test_vm_arm64.bin").
+ Without("name", "trusty_test_vm_x86_64.elf").
+ Without("name", "trusty_security_vm_arm64.bin").
+ Without("name", "trusty_security_vm_x86_64.elf").
+ Without("name", "trusty_widevine_vm_arm64.bin").
+ Without("name", "trusty_widevine_vm_x86_64.elf").
WithMatcher("dir_srcs", isSetMatcherInstance).Because(reason),
NeverAllow().
ModuleType("genrule").
- // TODO: remove the 4 below targets once new targets are submitted
- Without("name", "trusty-arm64.lk.elf.gen").
- Without("name", "trusty-arm64-virt-test-debug.lk.elf.gen").
- Without("name", "trusty-x86_64.lk.elf.gen").
- Without("name", "trusty-x86_64-test.lk.elf.gen").
- // trusty vm target names moving forward
- Without("name", "trusty-test_vm-arm64.elf.gen").
- Without("name", "trusty-test_vm-x86.elf.gen").
- Without("name", "trusty-security_vm-arm64.elf.gen").
- Without("name", "trusty-security_vm-x86.elf.gen").
- Without("name", "trusty-widevine_vm-arm64.elf.gen").
- Without("name", "trusty-widevine_vm-x86.elf.gen").
+ // Trusty TEE target names
+ Without("name", "trusty_tee_package_goog").
+ Without("name", "trusty_tee_package").
+ // Trusty vm target names
+ Without("name", "trusty_test_vm_arm64.bin").
+ Without("name", "trusty_test_vm_x86_64.elf").
+ Without("name", "trusty_security_vm_arm64.bin").
+ Without("name", "trusty_security_vm_x86_64.elf").
+ Without("name", "trusty_widevine_vm_arm64.bin").
+ Without("name", "trusty_widevine_vm_x86_64.elf").
With("keep_gendir", "true").Because(reason),
}
}
diff --git a/android/package.go b/android/package.go
index 385326e..42f17b1 100644
--- a/android/package.go
+++ b/android/package.go
@@ -38,6 +38,12 @@
Default_team *string `android:"path"`
}
+type PackageInfo struct {
+ Properties packageProperties
+}
+
+var PackageInfoProvider = blueprint.NewProvider[PackageInfo]()
+
type packageModule struct {
ModuleBase
@@ -60,6 +66,10 @@
Enabled: true,
PrimaryLicensesProperty: p.primaryLicensesProperty,
})
+
+ ctx.SetProvider(PackageInfoProvider, PackageInfo{
+ Properties: p.properties,
+ })
}
func (p *packageModule) qualifiedModuleId(ctx BaseModuleContext) qualifiedModuleName {
diff --git a/android/paths.go b/android/paths.go
index 1c0321c..a944c48 100644
--- a/android/paths.go
+++ b/android/paths.go
@@ -229,6 +229,8 @@
}
}
+// TODO(b/397766191): Change the signature to take ModuleProxy
+// Please only access the module's internal data through providers.
func pathContextName(ctx PathContext, module blueprint.Module) string {
if x, ok := ctx.(interface{ ModuleName(blueprint.Module) string }); ok {
return x.ModuleName(module)
diff --git a/android/phony.go b/android/phony.go
index 7bdd9d3..99ff0aa 100644
--- a/android/phony.go
+++ b/android/phony.go
@@ -55,7 +55,7 @@
func (p *phonySingleton) GenerateBuildActions(ctx SingletonContext) {
p.phonyMap = getSingletonPhonyMap(ctx.Config())
- ctx.VisitAllModules(func(m Module) {
+ ctx.VisitAllModuleProxies(func(m ModuleProxy) {
if info, ok := OtherModuleProvider(ctx, m, ModulePhonyProvider); ok {
for k, v := range info.Phonies {
p.phonyMap[k] = append(p.phonyMap[k], v...)
diff --git a/android/prebuilt_build_tool.go b/android/prebuilt_build_tool.go
index 17b3230..7773bf8 100644
--- a/android/prebuilt_build_tool.go
+++ b/android/prebuilt_build_tool.go
@@ -84,13 +84,12 @@
t.toolPath = OptionalPathForPath(installedPath)
}
-func (t *prebuiltBuildTool) MakeVars(ctx MakeVarsModuleContext) {
- if makeVar := String(t.properties.Export_to_make_var); makeVar != "" {
- if t.Target().Os != ctx.Config().BuildOS {
- return
- }
- ctx.StrictRaw(makeVar, t.toolPath.String())
+func (t *prebuiltBuildTool) MakeVars(ctx MakeVarsModuleContext) []ModuleMakeVarsValue {
+ if makeVar := String(t.properties.Export_to_make_var); makeVar != "" &&
+ t.Target().Os == ctx.Config().BuildOS {
+ return []ModuleMakeVarsValue{{makeVar, t.toolPath.String()}}
}
+ return nil
}
func (t *prebuiltBuildTool) HostToolPath() OptionalPath {
diff --git a/android/singleton.go b/android/singleton.go
index a03ea74..96b1022 100644
--- a/android/singleton.go
+++ b/android/singleton.go
@@ -290,6 +290,10 @@
return s.SingletonContext.ModuleType(getWrappedModule(module))
}
+func (s *singletonContextAdaptor) BlueprintFile(module blueprint.Module) string {
+ return s.SingletonContext.BlueprintFile(getWrappedModule(module))
+}
+
func (s *singletonContextAdaptor) VisitAllModulesBlueprint(visit func(blueprint.Module)) {
s.SingletonContext.VisitAllModules(visit)
}
diff --git a/android/team.go b/android/team.go
index c273dc6..ad37f28 100644
--- a/android/team.go
+++ b/android/team.go
@@ -32,6 +32,12 @@
Trendy_team_id *string `json:"trendy_team_id"`
}
+type TeamInfo struct {
+ Properties teamProperties
+}
+
+var TeamInfoProvider = blueprint.NewProvider[TeamInfo]()
+
type teamModule struct {
ModuleBase
DefaultableModuleBase
@@ -48,7 +54,11 @@
// Real work is done for the module that depends on us.
// If needed, the team can serialize the config to json/proto file as well.
-func (t *teamModule) GenerateAndroidBuildActions(ctx ModuleContext) {}
+func (t *teamModule) GenerateAndroidBuildActions(ctx ModuleContext) {
+ SetProvider(ctx, TeamInfoProvider, TeamInfo{
+ Properties: t.properties,
+ })
+}
func (t *teamModule) TrendyTeamId(ctx ModuleContext) string {
return *t.properties.Trendy_team_id
diff --git a/apex/apex.go b/apex/apex.go
index 6e4685b..4dd3d4c 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -2258,6 +2258,11 @@
a.enforcePartitionTagOnApexSystemServerJar(ctx)
a.verifyNativeImplementationLibs(ctx)
+
+ android.SetProvider(ctx, android.ApexBundleDepsDataProvider, android.ApexBundleDepsData{
+ FlatListPath: a.FlatListPath(),
+ Updatable: a.Updatable(),
+ })
}
// Set prebuiltInfoProvider. This will be used by `apex_prebuiltinfo_singleton` to print out a metadata file
diff --git a/apex/apex_singleton.go b/apex/apex_singleton.go
index a8bd984..dabec49 100644
--- a/apex/apex_singleton.go
+++ b/apex/apex_singleton.go
@@ -90,11 +90,11 @@
func (s *apexDepsInfoSingleton) GenerateBuildActions(ctx android.SingletonContext) {
updatableFlatLists := android.Paths{}
- ctx.VisitAllModules(func(module android.Module) {
- if binaryInfo, ok := module.(android.ApexBundleDepsInfoIntf); ok {
+ ctx.VisitAllModuleProxies(func(module android.ModuleProxy) {
+ if binaryInfo, ok := android.OtherModuleProvider(ctx, module, android.ApexBundleDepsDataProvider); ok {
apexInfo, _ := android.OtherModuleProvider(ctx, module, android.ApexInfoProvider)
- if path := binaryInfo.FlatListPath(); path != nil {
- if binaryInfo.Updatable() || apexInfo.Updatable {
+ if path := binaryInfo.FlatListPath; path != nil {
+ if binaryInfo.Updatable || apexInfo.Updatable {
if strings.HasPrefix(module.String(), "com.android.") {
updatableFlatLists = append(updatableFlatLists, path)
}
@@ -160,11 +160,11 @@
func (a *apexPrebuiltInfo) GenerateBuildActions(ctx android.SingletonContext) {
prebuiltInfos := []android.PrebuiltInfo{}
- ctx.VisitAllModules(func(m android.Module) {
+ ctx.VisitAllModuleProxies(func(m android.ModuleProxy) {
prebuiltInfo, exists := android.OtherModuleProvider(ctx, m, android.PrebuiltInfoProvider)
// Use prebuiltInfoProvider to filter out non apex soong modules.
// Use HideFromMake to filter out the unselected variants of a specific apex.
- if exists && !m.IsHideFromMake() {
+ if exists && !android.OtherModuleProviderOrDefault(ctx, m, android.CommonModuleInfoKey).HideFromMake {
prebuiltInfos = append(prebuiltInfos, prebuiltInfo)
}
})
diff --git a/cc/cc.go b/cc/cc.go
index 4b314cd..868d18a 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -93,6 +93,9 @@
type LibraryDecoratorInfo struct {
ExportIncludeDirs []string
InjectBsslHash bool
+ // Location of the static library in the sysroot. Empty if the library is
+ // not included in the NDK.
+ NdkSysrootPath android.Path
}
type SnapshotInfo struct {
@@ -104,14 +107,27 @@
}
type BenchmarkDecoratorInfo struct{}
-type StubDecoratorInfo struct{}
+type StubDecoratorInfo struct {
+ AbiDumpPath android.OutputPath
+ HasAbiDump bool
+ AbiDiffPaths android.Paths
+ InstallPath android.Path
+}
-type ObjectLinkerInfo struct{}
+type ObjectLinkerInfo struct {
+ // Location of the object in the sysroot. Empty if the object is not
+ // included in the NDK.
+ NdkSysrootPath android.Path
+}
type LibraryInfo struct {
BuildStubs bool
}
+type InstallerInfo struct {
+ StubDecoratorInfo *StubDecoratorInfo
+}
+
// Common info about the cc module.
type CcInfo struct {
IsPrebuilt bool
@@ -122,6 +138,7 @@
LinkerInfo *LinkerInfo
SnapshotInfo *SnapshotInfo
LibraryInfo *LibraryInfo
+ InstallerInfo *InstallerInfo
}
var CcInfoProvider = blueprint.NewProvider[*CcInfo]()
@@ -2338,6 +2355,7 @@
case *libraryDecorator:
ccInfo.LinkerInfo.LibraryDecoratorInfo = &LibraryDecoratorInfo{
InjectBsslHash: Bool(c.linker.(*libraryDecorator).Properties.Inject_bssl_hash),
+ NdkSysrootPath: c.linker.(*libraryDecorator).ndkSysrootPath,
}
case *testBinary:
ccInfo.LinkerInfo.TestBinaryInfo = &TestBinaryInfo{
@@ -2346,7 +2364,9 @@
case *benchmarkDecorator:
ccInfo.LinkerInfo.BenchmarkDecoratorInfo = &BenchmarkDecoratorInfo{}
case *objectLinker:
- ccInfo.LinkerInfo.ObjectLinkerInfo = &ObjectLinkerInfo{}
+ ccInfo.LinkerInfo.ObjectLinkerInfo = &ObjectLinkerInfo{
+ NdkSysrootPath: c.linker.(*objectLinker).ndkSysrootPath,
+ }
case *stubDecorator:
ccInfo.LinkerInfo.StubDecoratorInfo = &StubDecoratorInfo{}
}
@@ -2366,6 +2386,17 @@
BuildStubs: c.library.BuildStubs(),
}
}
+ if c.installer != nil {
+ ccInfo.InstallerInfo = &InstallerInfo{}
+ if installer, ok := c.installer.(*stubDecorator); ok {
+ ccInfo.InstallerInfo.StubDecoratorInfo = &StubDecoratorInfo{
+ HasAbiDump: installer.hasAbiDump,
+ AbiDumpPath: installer.abiDumpPath,
+ AbiDiffPaths: installer.abiDiffPaths,
+ InstallPath: installer.installPath,
+ }
+ }
+ }
android.SetProvider(ctx, CcInfoProvider, &ccInfo)
c.setOutputFiles(ctx)
diff --git a/cc/ndk_abi.go b/cc/ndk_abi.go
index 2706261..a9f26a4 100644
--- a/cc/ndk_abi.go
+++ b/cc/ndk_abi.go
@@ -39,15 +39,15 @@
func (n *ndkAbiDumpSingleton) GenerateBuildActions(ctx android.SingletonContext) {
var depPaths android.Paths
- ctx.VisitAllModules(func(module android.Module) {
- if !module.Enabled(ctx) {
+ ctx.VisitAllModuleProxies(func(module android.ModuleProxy) {
+ if !android.OtherModuleProviderOrDefault(ctx, module, android.CommonModuleInfoKey).Enabled {
return
}
- if m, ok := module.(*Module); ok {
- if installer, ok := m.installer.(*stubDecorator); ok {
- if installer.hasAbiDump {
- depPaths = append(depPaths, installer.abiDumpPath)
+ if ccInfo, ok := android.OtherModuleProvider(ctx, module, CcInfoProvider); ok {
+ if ccInfo.InstallerInfo != nil && ccInfo.InstallerInfo.StubDecoratorInfo != nil {
+ if ccInfo.InstallerInfo.StubDecoratorInfo.HasAbiDump {
+ depPaths = append(depPaths, ccInfo.InstallerInfo.StubDecoratorInfo.AbiDumpPath)
}
}
}
@@ -77,14 +77,14 @@
func (n *ndkAbiDiffSingleton) GenerateBuildActions(ctx android.SingletonContext) {
var depPaths android.Paths
- ctx.VisitAllModules(func(module android.Module) {
- if m, ok := module.(android.Module); ok && !m.Enabled(ctx) {
+ ctx.VisitAllModuleProxies(func(module android.ModuleProxy) {
+ if !android.OtherModuleProviderOrDefault(ctx, module, android.CommonModuleInfoKey).Enabled {
return
}
- if m, ok := module.(*Module); ok {
- if installer, ok := m.installer.(*stubDecorator); ok {
- depPaths = append(depPaths, installer.abiDiffPaths...)
+ if ccInfo, ok := android.OtherModuleProvider(ctx, module, CcInfoProvider); ok {
+ if ccInfo.InstallerInfo != nil && ccInfo.InstallerInfo.StubDecoratorInfo != nil {
+ depPaths = append(depPaths, ccInfo.InstallerInfo.StubDecoratorInfo.AbiDiffPaths...)
}
}
})
diff --git a/cc/ndk_headers.go b/cc/ndk_headers.go
index 7481954..6e26d4c 100644
--- a/cc/ndk_headers.go
+++ b/cc/ndk_headers.go
@@ -80,6 +80,20 @@
licensePath android.Path
}
+type NdkHeaderInfo struct {
+ SrcPaths android.Paths
+ InstallPaths android.Paths
+ LicensePath android.Path
+ // Set to true if the headers installed by this module should skip
+ // verification. This step ensures that each header is self-contained (can
+ // be #included alone) and is valid C. This should not be disabled except in
+ // rare cases. Outside bionic and external, if you're using this option
+ // you've probably made a mistake.
+ SkipVerification bool
+}
+
+var NdkHeaderInfoProvider = blueprint.NewProvider[NdkHeaderInfo]()
+
func getHeaderInstallDir(ctx android.ModuleContext, header android.Path, from string,
to string) android.OutputPath {
// Output path is the sysroot base + "usr/include" + to directory + directory component
@@ -135,6 +149,13 @@
if len(m.installPaths) == 0 {
ctx.ModuleErrorf("srcs %q matched zero files", m.properties.Srcs)
}
+
+ android.SetProvider(ctx, NdkHeaderInfoProvider, NdkHeaderInfo{
+ SrcPaths: m.srcPaths,
+ InstallPaths: m.installPaths,
+ LicensePath: m.licensePath,
+ SkipVerification: Bool(m.properties.Skip_verification),
+ })
}
// ndk_headers installs the sets of ndk headers defined in the srcs property
@@ -203,6 +224,8 @@
licensePath android.Path
}
+var NdkPreprocessedHeaderInfoProvider = blueprint.NewProvider[NdkHeaderInfo]()
+
func (m *preprocessedHeadersModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
if String(m.properties.License) == "" {
ctx.PropertyErrorf("license", "field is required")
@@ -231,6 +254,13 @@
if len(m.installPaths) == 0 {
ctx.ModuleErrorf("srcs %q matched zero files", m.properties.Srcs)
}
+
+ android.SetProvider(ctx, NdkPreprocessedHeaderInfoProvider, NdkHeaderInfo{
+ SrcPaths: m.srcPaths,
+ InstallPaths: m.installPaths,
+ LicensePath: m.licensePath,
+ SkipVerification: Bool(m.properties.Skip_verification),
+ })
}
// preprocessed_ndk_headers preprocesses all the ndk headers listed in the srcs
diff --git a/cc/ndk_sysroot.go b/cc/ndk_sysroot.go
index a5f014b..34f6195 100644
--- a/cc/ndk_sysroot.go
+++ b/cc/ndk_sysroot.go
@@ -53,11 +53,12 @@
// TODO(danalbert): Write `ndk_static_library` rule.
import (
- "android/soong/android"
"fmt"
"path/filepath"
"strings"
+ "android/soong/android"
+
"github.com/google/blueprint"
)
@@ -209,57 +210,61 @@
var headerCCompatVerificationTimestampPaths android.Paths
var installPaths android.Paths
var licensePaths android.Paths
- ctx.VisitAllModules(func(module android.Module) {
- if m, ok := module.(android.Module); ok && !m.Enabled(ctx) {
+ ctx.VisitAllModuleProxies(func(module android.ModuleProxy) {
+
+ if !android.OtherModuleProviderOrDefault(ctx, module, android.CommonModuleInfoKey).Enabled {
return
}
- if m, ok := module.(*headerModule); ok {
- headerSrcPaths = append(headerSrcPaths, m.srcPaths...)
- headerInstallPaths = append(headerInstallPaths, m.installPaths...)
- if !Bool(m.properties.Skip_verification) {
- for i, installPath := range m.installPaths {
+ if m, ok := android.OtherModuleProvider(ctx, module, NdkHeaderInfoProvider); ok {
+ headerSrcPaths = append(headerSrcPaths, m.SrcPaths...)
+ headerInstallPaths = append(headerInstallPaths, m.InstallPaths...)
+ if !m.SkipVerification {
+ for i, installPath := range m.InstallPaths {
headersToVerify = append(headersToVerify, srcDestPair{
- src: m.srcPaths[i],
+ src: m.SrcPaths[i],
dest: installPath,
})
}
}
- installPaths = append(installPaths, m.installPaths...)
- licensePaths = append(licensePaths, m.licensePath)
+ installPaths = append(installPaths, m.InstallPaths...)
+ licensePaths = append(licensePaths, m.LicensePath)
}
- if m, ok := module.(*preprocessedHeadersModule); ok {
- headerSrcPaths = append(headerSrcPaths, m.srcPaths...)
- headerInstallPaths = append(headerInstallPaths, m.installPaths...)
- if !Bool(m.properties.Skip_verification) {
- for i, installPath := range m.installPaths {
+ if m, ok := android.OtherModuleProvider(ctx, module, NdkPreprocessedHeaderInfoProvider); ok {
+ headerSrcPaths = append(headerSrcPaths, m.SrcPaths...)
+ headerInstallPaths = append(headerInstallPaths, m.InstallPaths...)
+ if !m.SkipVerification {
+ for i, installPath := range m.InstallPaths {
headersToVerify = append(headersToVerify, srcDestPair{
- src: m.srcPaths[i],
+ src: m.SrcPaths[i],
dest: installPath,
})
}
}
- installPaths = append(installPaths, m.installPaths...)
- licensePaths = append(licensePaths, m.licensePath)
+ installPaths = append(installPaths, m.InstallPaths...)
+ licensePaths = append(licensePaths, m.LicensePath)
}
- if m, ok := module.(*Module); ok {
- if installer, ok := m.installer.(*stubDecorator); ok && m.library.BuildStubs() {
- installPaths = append(installPaths, installer.installPath)
+ if ccInfo, ok := android.OtherModuleProvider(ctx, module, CcInfoProvider); ok {
+ if installer := ccInfo.InstallerInfo; installer != nil && installer.StubDecoratorInfo != nil &&
+ ccInfo.LibraryInfo != nil && ccInfo.LibraryInfo.BuildStubs {
+ installPaths = append(installPaths, installer.StubDecoratorInfo.InstallPath)
}
- if library, ok := m.linker.(*libraryDecorator); ok {
- if library.ndkSysrootPath != nil {
- staticLibInstallPaths = append(
- staticLibInstallPaths, library.ndkSysrootPath)
+ if ccInfo.LinkerInfo != nil {
+ if library := ccInfo.LinkerInfo.LibraryDecoratorInfo; library != nil {
+ if library.NdkSysrootPath != nil {
+ staticLibInstallPaths = append(
+ staticLibInstallPaths, library.NdkSysrootPath)
+ }
}
- }
- if object, ok := m.linker.(*objectLinker); ok {
- if object.ndkSysrootPath != nil {
- staticLibInstallPaths = append(
- staticLibInstallPaths, object.ndkSysrootPath)
+ if object := ccInfo.LinkerInfo.ObjectLinkerInfo; object != nil {
+ if object.NdkSysrootPath != nil {
+ staticLibInstallPaths = append(
+ staticLibInstallPaths, object.NdkSysrootPath)
+ }
}
}
}
diff --git a/dexpreopt/Android.bp b/dexpreopt/Android.bp
index 679d066..ea3f52b 100644
--- a/dexpreopt/Android.bp
+++ b/dexpreopt/Android.bp
@@ -9,6 +9,7 @@
"class_loader_context.go",
"config.go",
"dexpreopt.go",
+ "system_server_zip.go",
"testing.go",
],
testSrcs: [
diff --git a/dexpreopt/system_server_zip.go b/dexpreopt/system_server_zip.go
new file mode 100644
index 0000000..cef847b
--- /dev/null
+++ b/dexpreopt/system_server_zip.go
@@ -0,0 +1,49 @@
+package dexpreopt
+
+import "android/soong/android"
+
+func init() {
+ android.InitRegistrationContext.RegisterSingletonType("system_server_zip_singleton", systemServerZipSingletonFactory)
+}
+
+func systemServerZipSingletonFactory() android.Singleton {
+ return &systemServerZipSingleton{}
+}
+
+type systemServerZipSingleton struct{}
+
+func (s *systemServerZipSingleton) GenerateBuildActions(ctx android.SingletonContext) {
+ global := GetGlobalConfig(ctx)
+ if global.DisablePreopt || global.OnlyPreoptArtBootImage {
+ return
+ }
+
+ systemServerDexjarsDir := android.PathForOutput(ctx, SystemServerDexjarsDir)
+
+ out := android.PathForOutput(ctx, "system_server.zip")
+ builder := android.NewRuleBuilder(pctx, ctx)
+ cmd := builder.Command().BuiltTool("soong_zip").
+ FlagWithOutput("-o ", out).
+ FlagWithArg("-C ", systemServerDexjarsDir.String())
+
+ for i := 0; i < global.SystemServerJars.Len(); i++ {
+ jar := global.SystemServerJars.Jar(i) + ".jar"
+ cmd.FlagWithInput("-f ", systemServerDexjarsDir.Join(ctx, jar))
+ }
+ for i := 0; i < global.StandaloneSystemServerJars.Len(); i++ {
+ jar := global.StandaloneSystemServerJars.Jar(i) + ".jar"
+ cmd.FlagWithInput("-f ", systemServerDexjarsDir.Join(ctx, jar))
+ }
+ for i := 0; i < global.ApexSystemServerJars.Len(); i++ {
+ jar := global.ApexSystemServerJars.Jar(i) + ".jar"
+ cmd.FlagWithInput("-f ", systemServerDexjarsDir.Join(ctx, jar))
+ }
+ for i := 0; i < global.ApexStandaloneSystemServerJars.Len(); i++ {
+ jar := global.ApexStandaloneSystemServerJars.Jar(i) + ".jar"
+ cmd.FlagWithInput("-f ", systemServerDexjarsDir.Join(ctx, jar))
+ }
+
+ builder.Build("system_server_zip", "building system_server.zip")
+
+ ctx.DistForGoal("droidcore", out)
+}
diff --git a/filesystem/android_device.go b/filesystem/android_device.go
index fef4aeb..178c716 100644
--- a/filesystem/android_device.go
+++ b/filesystem/android_device.go
@@ -325,10 +325,11 @@
}
}
-func (a *androidDevice) MakeVars(ctx android.MakeVarsModuleContext) {
+func (a *androidDevice) MakeVars(_ android.MakeVarsModuleContext) []android.ModuleMakeVarsValue {
if proptools.Bool(a.deviceProps.Main_device) {
- ctx.StrictRaw("SOONG_ONLY_ALL_IMAGES_ZIP", a.allImagesZip.String())
+ return []android.ModuleMakeVarsValue{{"SOONG_ONLY_ALL_IMAGES_ZIP", a.allImagesZip.String()}}
}
+ return nil
}
func (a *androidDevice) buildProguardZips(ctx android.ModuleContext, allInstalledModules []android.Module) {
diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go
index 28eb36d..d4ea6a3 100644
--- a/filesystem/filesystem.go
+++ b/filesystem/filesystem.go
@@ -1525,10 +1525,11 @@
})
}
-func (f *filesystem) MakeVars(ctx android.MakeVarsModuleContext) {
+func (f *filesystem) MakeVars(ctx android.MakeVarsModuleContext) []android.ModuleMakeVarsValue {
if f.Name() == ctx.Config().SoongDefinedSystemImage() {
- ctx.StrictRaw("SOONG_DEFINED_SYSTEM_IMAGE_PATH", f.output.String())
+ return []android.ModuleMakeVarsValue{{"SOONG_DEFINED_SYSTEM_IMAGE_PATH", f.output.String()}}
}
+ return nil
}
func setCommonFilesystemInfo(ctx android.ModuleContext, m Filesystem) {
diff --git a/java/aar.go b/java/aar.go
index 976e4fc..0e27cb8 100644
--- a/java/aar.go
+++ b/java/aar.go
@@ -945,6 +945,12 @@
var AndroidLibraryInfoProvider = blueprint.NewProvider[AndroidLibraryInfo]()
+type AARImportInfo struct {
+ // Empty for now
+}
+
+var AARImportInfoProvider = blueprint.NewProvider[AARImportInfo]()
+
type AndroidLibrary struct {
Library
aapt
@@ -1571,6 +1577,8 @@
JniPackages: a.jniPackages,
})
+ android.SetProvider(ctx, AARImportInfoProvider, AARImportInfo{})
+
ctx.SetOutputFiles([]android.Path{a.implementationAndResourcesJarFile}, "")
ctx.SetOutputFiles([]android.Path{a.aarPath}, ".aar")
diff --git a/java/app.go b/java/app.go
index 17548e7..827b235 100644
--- a/java/app.go
+++ b/java/app.go
@@ -1124,6 +1124,11 @@
android.SetProvider(ctx, JavaInfoProvider, javaInfo)
}
+ android.SetProvider(ctx, android.ApexBundleDepsDataProvider, android.ApexBundleDepsData{
+ FlatListPath: a.FlatListPath(),
+ Updatable: a.Updatable(),
+ })
+
moduleInfoJSON := ctx.ModuleInfoJSON()
moduleInfoJSON.Class = []string{"APPS"}
if !a.embeddedJniLibs {
diff --git a/java/java.go b/java/java.go
index b18c561..38361bf 100644
--- a/java/java.go
+++ b/java/java.go
@@ -432,6 +432,9 @@
DexJarBuildPath OptionalDexJarPath
DexpreopterInfo *DexpreopterInfo
+
+ XrefJavaFiles android.Paths
+ XrefKotlinFiles android.Paths
}
var JavaInfoProvider = blueprint.NewProvider[*JavaInfo]()
@@ -3649,10 +3652,10 @@
func (ks *kytheExtractJavaSingleton) GenerateBuildActions(ctx android.SingletonContext) {
var xrefTargets android.Paths
var xrefKotlinTargets android.Paths
- ctx.VisitAllModules(func(module android.Module) {
- if javaModule, ok := module.(xref); ok {
- xrefTargets = append(xrefTargets, javaModule.XrefJavaFiles()...)
- xrefKotlinTargets = append(xrefKotlinTargets, javaModule.XrefKotlinFiles()...)
+ ctx.VisitAllModuleProxies(func(module android.ModuleProxy) {
+ if javaInfo, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok {
+ xrefTargets = append(xrefTargets, javaInfo.XrefJavaFiles...)
+ xrefKotlinTargets = append(xrefKotlinTargets, javaInfo.XrefKotlinFiles...)
}
})
// TODO(asmundak): perhaps emit a rule to output a warning if there were no xrefTargets
@@ -3853,4 +3856,9 @@
ApexSystemServerDexJars: di.ApexSystemServerDexJars(),
}
}
+
+ if xr, ok := module.(xref); ok {
+ javaInfo.XrefJavaFiles = xr.XrefJavaFiles()
+ javaInfo.XrefKotlinFiles = xr.XrefKotlinFiles()
+ }
}
diff --git a/java/lint.go b/java/lint.go
index 66f7f85..c31dfd0 100644
--- a/java/lint.go
+++ b/java/lint.go
@@ -595,12 +595,12 @@
l.copyLintDependencies(ctx)
}
-func findModuleOrErr(ctx android.SingletonContext, moduleName string) android.Module {
- var res android.Module
- ctx.VisitAllModules(func(m android.Module) {
+func findModuleOrErr(ctx android.SingletonContext, moduleName string) *android.ModuleProxy {
+ var res *android.ModuleProxy
+ ctx.VisitAllModuleProxies(func(m android.ModuleProxy) {
if ctx.ModuleName(m) == moduleName {
if res == nil {
- res = m
+ res = &m
} else {
ctx.Errorf("lint: multiple %s modules found: %s and %s", moduleName,
ctx.ModuleSubDir(m), ctx.ModuleSubDir(res))
@@ -635,13 +635,13 @@
ctx.Build(pctx, android.BuildParams{
Rule: android.CpIfChanged,
- Input: android.OutputFileForModule(ctx, sdkAnnotations, ""),
+ Input: android.OutputFileForModule(ctx, *sdkAnnotations, ""),
Output: copiedLintDatabaseFilesPath(ctx, files.annotationCopiedName),
})
ctx.Build(pctx, android.BuildParams{
Rule: android.CpIfChanged,
- Input: android.OutputFileForModule(ctx, apiVersionsDb, ".api_versions.xml"),
+ Input: android.OutputFileForModule(ctx, *apiVersionsDb, ".api_versions.xml"),
Output: copiedLintDatabaseFilesPath(ctx, files.apiVersionsCopiedName),
})
}
@@ -658,12 +658,13 @@
var outputs []*LintInfo
var dirs []string
- ctx.VisitAllModules(func(m android.Module) {
- if ctx.Config().KatiEnabled() && !m.ExportedToMake() {
+ ctx.VisitAllModuleProxies(func(m android.ModuleProxy) {
+ commonInfo, _ := android.OtherModuleProvider(ctx, m, android.CommonModuleInfoKey)
+ if ctx.Config().KatiEnabled() && !commonInfo.ExportedToMake {
return
}
- if apex, ok := m.(android.ApexModule); ok && apex.NotAvailableForPlatform() {
+ if commonInfo.IsApexModule && commonInfo.NotAvailableForPlatform {
apexInfo, _ := android.OtherModuleProvider(ctx, m, android.ApexInfoProvider)
if apexInfo.IsForPlatform() {
// There are stray platform variants of modules in apexes that are not available for
diff --git a/java/platform_compat_config.go b/java/platform_compat_config.go
index 363521a..ab4f8f8 100644
--- a/java/platform_compat_config.go
+++ b/java/platform_compat_config.go
@@ -99,6 +99,14 @@
includeInMergedXml() bool
}
+type PlatformCompatConfigMetadataInfo struct {
+ CompatConfigMetadata android.Path
+ // Whether to include it in the "merged" XML (merged_compat_config.xml) or not.
+ IncludeInMergedXml bool
+}
+
+var PlatformCompatConfigMetadataInfoProvider = blueprint.NewProvider[PlatformCompatConfigMetadataInfo]()
+
type PlatformCompatConfigIntf interface {
android.Module
@@ -136,6 +144,11 @@
CompatConfig: p.CompatConfig(),
SubDir: p.SubDir(),
})
+
+ android.SetProvider(ctx, PlatformCompatConfigMetadataInfoProvider, PlatformCompatConfigMetadataInfo{
+ CompatConfigMetadata: p.compatConfigMetadata(),
+ IncludeInMergedXml: p.includeInMergedXml(),
+ })
}
func (p *platformCompatConfig) AndroidMkEntries() []android.AndroidMkEntries {
@@ -238,6 +251,11 @@
func (module *prebuiltCompatConfigModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
module.metadataFile = module.prebuilt.SingleSourcePath(ctx)
+
+ android.SetProvider(ctx, PlatformCompatConfigMetadataInfoProvider, PlatformCompatConfigMetadataInfo{
+ CompatConfigMetadata: module.compatConfigMetadata(),
+ IncludeInMergedXml: module.includeInMergedXml(),
+ })
}
// A prebuilt version of platform_compat_config that provides the metadata.
@@ -258,18 +276,18 @@
var compatConfigMetadata android.Paths
- ctx.VisitAllModules(func(module android.Module) {
- if !module.Enabled(ctx) {
+ ctx.VisitAllModuleProxies(func(module android.ModuleProxy) {
+ if !android.OtherModuleProviderOrDefault(ctx, module, android.CommonModuleInfoKey).Enabled {
return
}
- if c, ok := module.(platformCompatConfigMetadataProvider); ok {
- if !android.IsModulePreferred(module) {
+ if c, ok := android.OtherModuleProvider(ctx, module, PlatformCompatConfigMetadataInfoProvider); ok {
+ if !android.IsModulePreferredProxy(ctx, module) {
return
}
- if !c.includeInMergedXml() {
+ if !c.IncludeInMergedXml {
return
}
- metadata := c.compatConfigMetadata()
+ metadata := c.CompatConfigMetadata
compatConfigMetadata = append(compatConfigMetadata, metadata)
}
})
diff --git a/java/sdk.go b/java/sdk.go
index 8510959..ab1c653 100644
--- a/java/sdk.go
+++ b/java/sdk.go
@@ -274,7 +274,7 @@
func createFrameworkAidl(stubsModules []string, path android.WritablePath, ctx android.SingletonContext) *android.RuleBuilder {
stubsJars := make([]android.Paths, len(stubsModules))
- ctx.VisitAllModules(func(module android.Module) {
+ ctx.VisitAllModuleProxies(func(module android.ModuleProxy) {
// Collect dex jar paths for the modules listed above.
if j, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok {
name := ctx.ModuleName(module)
diff --git a/java/support_libraries.go b/java/support_libraries.go
index c483fc1..f76eb11 100644
--- a/java/support_libraries.go
+++ b/java/support_libraries.go
@@ -28,7 +28,7 @@
func supportLibrariesMakeVarsProvider(ctx android.MakeVarsContext) {
var supportAars, supportJars []string
- ctx.VisitAllModules(func(module android.Module) {
+ ctx.VisitAllModuleProxies(func(module android.ModuleProxy) {
dir := ctx.ModuleDir(module)
switch {
case strings.HasPrefix(dir, "prebuilts/sdk/current/extras"),
@@ -47,11 +47,16 @@
return
}
- switch module.(type) {
- case *AndroidLibrary, *AARImport:
+ _, isAndroidLibrary := android.OtherModuleProvider(ctx, module, AndroidLibraryInfoProvider)
+ _, isAARImport := android.OtherModuleProvider(ctx, module, AARImportInfoProvider)
+ if isAndroidLibrary || isAARImport {
supportAars = append(supportAars, name)
- case *Library, *Import:
- supportJars = append(supportJars, name)
+ } else {
+ _, isJavaLibrary := android.OtherModuleProvider(ctx, module, JavaLibraryInfoProvider)
+ _, isJavaPlugin := android.OtherModuleProvider(ctx, module, JavaPluginInfoProvider)
+ if isJavaLibrary && !isJavaPlugin {
+ supportJars = append(supportJars, name)
+ }
}
})
diff --git a/rust/rust.go b/rust/rust.go
index 4eebda3..d8a0444 100644
--- a/rust/rust.go
+++ b/rust/rust.go
@@ -60,6 +60,7 @@
CompilerInfo *CompilerInfo
SnapshotInfo *cc.SnapshotInfo
SourceProviderInfo *SourceProviderInfo
+ XrefRustFiles android.Paths
}
var RustInfoProvider = blueprint.NewProvider[*RustInfo]()
@@ -1171,6 +1172,7 @@
AndroidMkSuffix: mod.AndroidMkSuffix(),
RustSubName: mod.Properties.RustSubName,
TransitiveAndroidMkSharedLibs: mod.transitiveAndroidMkSharedLibs,
+ XrefRustFiles: mod.XrefRustFiles(),
}
if mod.compiler != nil {
rustInfo.CompilerInfo = &CompilerInfo{
@@ -2236,9 +2238,9 @@
func (k kytheExtractRustSingleton) GenerateBuildActions(ctx android.SingletonContext) {
var xrefTargets android.Paths
- ctx.VisitAllModules(func(module android.Module) {
- if rustModule, ok := module.(xref); ok {
- xrefTargets = append(xrefTargets, rustModule.XrefRustFiles()...)
+ ctx.VisitAllModuleProxies(func(module android.ModuleProxy) {
+ if rustModule, ok := android.OtherModuleProvider(ctx, module, RustInfoProvider); ok {
+ xrefTargets = append(xrefTargets, rustModule.XrefRustFiles...)
}
})
if len(xrefTargets) > 0 {