Merge "Do not emit FlaggedApi annotations in core-current-stubs-for-system-modules-no-annotations." into main
diff --git a/android/base_module_context.go b/android/base_module_context.go
index 1f89dea..06819d6 100644
--- a/android/base_module_context.go
+++ b/android/base_module_context.go
@@ -288,7 +288,7 @@
return b.bp.OtherModuleReverseDependencyVariantExists(name)
}
func (b *baseModuleContext) OtherModuleType(m blueprint.Module) string {
- return b.bp.OtherModuleType(m)
+ return b.bp.OtherModuleType(getWrappedModule(m))
}
func (b *baseModuleContext) otherModuleProvider(m blueprint.Module, provider blueprint.AnyProviderKey) (any, bool) {
diff --git a/android/module.go b/android/module.go
index d703c19..a9f6b94 100644
--- a/android/module.go
+++ b/android/module.go
@@ -1870,6 +1870,7 @@
CompileTarget Target
SkipAndroidMkProcessing bool
BaseModuleName string
+ CanHaveApexVariants bool
}
var CommonModuleInfoKey = blueprint.NewProvider[CommonModuleInfo]()
@@ -2145,6 +2146,8 @@
} else {
commonData.Enabled = m.commonProperties.Enabled.GetOrDefault(m.ConfigurableEvaluator(ctx), !m.Os().DefaultDisabled)
}
+ am, ok := m.module.(ApexModule)
+ commonData.CanHaveApexVariants = ok && am.CanHaveApexVariants()
SetProvider(ctx, CommonModuleInfoKey, commonData)
if p, ok := m.module.(PrebuiltInterface); ok && p.Prebuilt() != nil {
SetProvider(ctx, PrebuiltModuleProviderKey, PrebuiltModuleProviderData{})
diff --git a/apex/apex.go b/apex/apex.go
index f934134..5f700ee 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -1683,6 +1683,32 @@
})
}
+func (a *apexBundle) WalkPayloadDepsProxy(ctx android.BaseModuleContext,
+ do func(ctx android.BaseModuleContext, from, to android.ModuleProxy, externalDep bool) bool) {
+ ctx.WalkDepsProxy(func(child, parent android.ModuleProxy) bool {
+ if !android.OtherModuleProviderOrDefault(ctx, child, android.CommonModuleInfoKey).CanHaveApexVariants {
+ return false
+ }
+ // Filter-out unwanted depedendencies
+ depTag := ctx.OtherModuleDependencyTag(child)
+ if _, ok := depTag.(android.ExcludeFromApexContentsTag); ok {
+ return false
+ }
+ if dt, ok := depTag.(*dependencyTag); ok && !dt.payload {
+ return false
+ }
+ if depTag == android.RequiredDepTag {
+ return false
+ }
+
+ ai, _ := android.OtherModuleProvider(ctx, child, android.ApexInfoProvider)
+ externalDep := !android.InList(ctx.ModuleName(), ai.InApexVariants)
+
+ // Visit actually
+ return do(ctx, parent, child, externalDep)
+ })
+}
+
// filesystem type of the apex_payload.img inside the APEX. Currently, ext4 and f2fs are supported.
type fsType int
@@ -2576,21 +2602,19 @@
librariesDirectlyInApex[ctx.OtherModuleName(dep)] = true
})
- a.WalkPayloadDeps(ctx, func(ctx android.BaseModuleContext, from blueprint.Module, to android.ApexModule, externalDep bool) bool {
- if ccm, ok := to.(*cc.Module); ok {
- apexName := ctx.ModuleName()
- fromName := ctx.OtherModuleName(from)
- toName := ctx.OtherModuleName(to)
-
+ a.WalkPayloadDepsProxy(ctx, func(ctx android.BaseModuleContext, from, to android.ModuleProxy, externalDep bool) bool {
+ if ccInfo, ok := android.OtherModuleProvider(ctx, to, cc.CcInfoProvider); ok {
// If `to` is not actually in the same APEX as `from` then it does not need
// apex_available and neither do any of its dependencies.
- //
- // It is ok to call DepIsInSameApex() directly from within WalkPayloadDeps().
- if am, ok := from.(android.DepIsInSameApex); ok && !am.DepIsInSameApex(ctx, to) {
+ if externalDep {
// As soon as the dependency graph crosses the APEX boundary, don't go further.
return false
}
+ apexName := ctx.ModuleName()
+ fromName := ctx.OtherModuleName(from)
+ toName := ctx.OtherModuleName(to)
+
// The dynamic linker and crash_dump tool in the runtime APEX is the only
// exception to this rule. It can't make the static dependencies dynamic
// because it can't do the dynamic linking for itself.
@@ -2600,12 +2624,11 @@
return false
}
- isStubLibraryFromOtherApex := ccm.HasStubsVariants() && !librariesDirectlyInApex[toName]
+ isStubLibraryFromOtherApex := ccInfo.HasStubsVariants && !librariesDirectlyInApex[toName]
if isStubLibraryFromOtherApex && !externalDep {
ctx.ModuleErrorf("%q required by %q is a native library providing stub. "+
"It shouldn't be included in this APEX via static linking. Dependency path: %s", to.String(), fromName, ctx.GetPathString(false))
}
-
}
return true
})
diff --git a/cc/cc.go b/cc/cc.go
index 03f738f..4838a5f 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -53,6 +53,13 @@
var CcObjectInfoProvider = blueprint.NewProvider[CcObjectInfo]()
+// Common info about the cc module.
+type CcInfo struct {
+ HasStubsVariants bool
+}
+
+var CcInfoProvider = blueprint.NewProvider[CcInfo]()
+
type LinkableInfo struct {
// StaticExecutable returns true if this is a binary module with "static_executable: true".
StaticExecutable bool
@@ -2124,6 +2131,10 @@
StaticExecutable: c.StaticExecutable(),
})
+ android.SetProvider(ctx, CcInfoProvider, CcInfo{
+ HasStubsVariants: c.HasStubsVariants(),
+ })
+
c.setOutputFiles(ctx)
if c.makeVarsInfo != nil {
diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go
index 84384a5..b9cb076 100644
--- a/filesystem/filesystem.go
+++ b/filesystem/filesystem.go
@@ -457,7 +457,7 @@
}
func (f *filesystem) appendToEntry(ctx android.ModuleContext, installedFile android.Path) {
- partitionBaseDir := android.PathForModuleOut(ctx, "root", f.partitionName()).String() + "/"
+ partitionBaseDir := android.PathForModuleOut(ctx, "root", proptools.String(f.properties.Base_dir)).String() + "/"
relPath, inTargetPartition := strings.CutPrefix(installedFile.String(), partitionBaseDir)
if inTargetPartition {
diff --git a/filesystem/filesystem_test.go b/filesystem/filesystem_test.go
index 86496eb..0ed3870 100644
--- a/filesystem/filesystem_test.go
+++ b/filesystem/filesystem_test.go
@@ -244,7 +244,7 @@
`)
module := result.ModuleForTests("myfilesystem", "android_common").Module().(*systemImage)
- android.AssertDeepEquals(t, "entries should have foo only", []string{"components/foo"}, module.entries)
+ android.AssertDeepEquals(t, "entries should have foo and not bar", []string{"components/foo", "etc/linker.config.pb"}, module.entries)
}
func TestAvbGenVbmetaImage(t *testing.T) {
diff --git a/fsgen/filesystem_creator.go b/fsgen/filesystem_creator.go
index ec704d5..1378513 100644
--- a/fsgen/filesystem_creator.go
+++ b/fsgen/filesystem_creator.go
@@ -343,6 +343,7 @@
Name: proptools.StringPtr("vendor_dlkm/etc"),
},
}
+ fsProps.Base_dir = proptools.StringPtr("system")
fsProps.Dirs = proptools.NewSimpleConfigurable([]string{
// From generic_rootdirs in build/make/target/product/generic/Android.bp
"acct",
@@ -394,11 +395,11 @@
fsProps.Symlinks = []filesystem.SymlinkDefinition{
filesystem.SymlinkDefinition{
Target: proptools.StringPtr("/odm"),
- Name: proptools.StringPtr("vendor/odm"),
+ Name: proptools.StringPtr("odm"),
},
filesystem.SymlinkDefinition{
Target: proptools.StringPtr("/vendor_dlkm/lib/modules"),
- Name: proptools.StringPtr("vendor/lib/modules"),
+ Name: proptools.StringPtr("lib/modules"),
},
}
fsProps.Android_filesystem_deps.System = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "system"))
@@ -409,7 +410,7 @@
fsProps.Symlinks = []filesystem.SymlinkDefinition{
filesystem.SymlinkDefinition{
Target: proptools.StringPtr("/odm_dlkm/lib/modules"),
- Name: proptools.StringPtr("odm/lib/modules"),
+ Name: proptools.StringPtr("lib/modules"),
},
}
case "userdata":
@@ -452,6 +453,7 @@
Name: proptools.StringPtr("default.prop"),
},
}
+ fsProps.Base_dir = proptools.StringPtr("recovery")
}
}
@@ -798,10 +800,6 @@
fsProps.Precompiled_file_contexts = proptools.StringPtr(":file_contexts_bin_gen")
}
- if !strings.Contains(partitionType, "ramdisk") {
- fsProps.Base_dir = proptools.StringPtr(partitionType)
- }
-
fsProps.Is_auto_generated = proptools.BoolPtr(true)
partitionSpecificFsProps(ctx, fsProps, partitionVars, partitionType)
diff --git a/java/aar.go b/java/aar.go
index 1e5c95a..b668766 100644
--- a/java/aar.go
+++ b/java/aar.go
@@ -257,7 +257,7 @@
}
func (a *aapt) aapt2Flags(ctx android.ModuleContext, sdkContext android.SdkContext,
- manifestPath android.Path) (compileFlags, linkFlags []string, linkDeps android.Paths,
+ manifestPath android.Path, doNotIncludeAssetDirImplicitly bool) (compileFlags, linkFlags []string, linkDeps android.Paths,
resDirs, overlayDirs []globbedResourceDir, rroDirs []rroDir, resZips android.Paths) {
hasVersionCode := android.PrefixInList(a.aaptProperties.Aaptflags, "--version-code")
@@ -274,7 +274,12 @@
Paths: a.aaptProperties.Assets,
IncludeDirs: false,
})
- assetDirs := android.PathsWithOptionalDefaultForModuleSrc(ctx, a.aaptProperties.Asset_dirs, "assets")
+ var assetDirs android.Paths
+ if doNotIncludeAssetDirImplicitly {
+ assetDirs = android.PathsForModuleSrc(ctx, a.aaptProperties.Asset_dirs)
+ } else {
+ assetDirs = android.PathsWithOptionalDefaultForModuleSrc(ctx, a.aaptProperties.Asset_dirs, "assets")
+ }
resourceDirs := android.PathsWithOptionalDefaultForModuleSrc(ctx, a.aaptProperties.Resource_dirs.GetOrDefault(ctx, nil), "res")
resourceZips := android.PathsForModuleSrc(ctx, a.aaptProperties.Resource_zips)
@@ -494,7 +499,8 @@
a.mergedManifestFile = manifestPath
}
- compileFlags, linkFlags, linkDeps, resDirs, overlayDirs, rroDirs, resZips := a.aapt2Flags(ctx, opts.sdkContext, manifestPath)
+ // do not include assets in autogenerated RRO.
+ compileFlags, linkFlags, linkDeps, resDirs, overlayDirs, rroDirs, resZips := a.aapt2Flags(ctx, opts.sdkContext, manifestPath, opts.rroDirs != nil)
a.rroDirsDepSet = depset.NewBuilder[rroDir](depset.TOPOLOGICAL).
Direct(rroDirs...).
diff --git a/root.bp b/root.bp
index 8e621c4..ee208a0 100644
--- a/root.bp
+++ b/root.bp
@@ -8,4 +8,6 @@
// in internal first, and then aosp, create this variable that we can fill out in internal in the
// same topic as the errorprone update, then move the flag out of the variable after the update,
// then remove the variable.
-disable_identifiername_for_errorprone_update = []
+disable_identifiername_for_errorprone_update = [
+ "-Xep:IdentifierName:OFF",
+]