Merge "Do not define Avb_algorithm for autogen vendor boot partition" into main
diff --git a/aconfig/exported_java_aconfig_library.go b/aconfig/exported_java_aconfig_library.go
index a64cac8..f7e6dcf 100644
--- a/aconfig/exported_java_aconfig_library.go
+++ b/aconfig/exported_java_aconfig_library.go
@@ -16,6 +16,7 @@
import (
"android/soong/android"
+ "strconv"
)
func ExportedJavaDeclarationsLibraryFactory() android.Singleton {
@@ -37,6 +38,16 @@
cacheFiles = append(cacheFiles, decl.IntermediateCacheOutputPath)
})
+ var newExported bool
+ if useNewExported, ok := ctx.Config().GetBuildFlag("RELEASE_ACONFIG_NEW_EXPORTED"); ok {
+ newExported = useNewExported == "true"
+ }
+
+ var newStorage bool
+ if useNewStorage, ok := ctx.Config().GetBuildFlag("RELEASE_READ_FROM_NEW_STORAGE"); ok {
+ newStorage = useNewStorage == "true"
+ }
+
// Generate build action for aconfig
this.intermediatePath = android.PathForIntermediates(ctx, "exported_java_aconfig_library.jar")
ctx.Build(pctx, android.BuildParams{
@@ -45,7 +56,9 @@
Output: this.intermediatePath,
Description: "exported_java_aconfig_library",
Args: map[string]string{
- "cache_files": android.JoinPathsWithPrefix(cacheFiles, " "),
+ "cache_files": android.JoinPathsWithPrefix(cacheFiles, " "),
+ "use_new_storage": strconv.FormatBool(newStorage),
+ "use_new_exported": strconv.FormatBool(newExported),
},
})
ctx.Phony("exported_java_aconfig_library", this.intermediatePath)
diff --git a/aconfig/init.go b/aconfig/init.go
index 21903e2..ab6ee46 100644
--- a/aconfig/init.go
+++ b/aconfig/init.go
@@ -91,7 +91,12 @@
Command: `rm -rf ${out}.tmp` +
`&& for cache in ${cache_files}; do ` +
` if [ -n "$$(${aconfig} dump-cache --dedup --cache $$cache --filter=is_exported:true --format='{fully_qualified_name}')" ]; then ` +
- ` ${aconfig} create-java-lib --cache $$cache --mode=exported --out ${out}.tmp; ` +
+ ` ${aconfig} create-java-lib` +
+ ` --cache $$cache` +
+ ` --mode=exported` +
+ ` --allow-instrumentation ${use_new_storage}` +
+ ` --new-exported ${use_new_exported}` +
+ ` --out ${out}.tmp; ` +
` fi ` +
`done` +
`&& $soong_zip -write_if_changed -jar -o ${out} -C ${out}.tmp -D ${out}.tmp` +
@@ -100,7 +105,7 @@
"$aconfig",
"$soong_zip",
},
- }, "cache_files")
+ }, "cache_files", "use_new_storage", "use_new_exported")
)
func init() {
diff --git a/android/module.go b/android/module.go
index 72dba04..b8f2cae 100644
--- a/android/module.go
+++ b/android/module.go
@@ -1049,7 +1049,7 @@
hostTargets = append(hostTargets, ctx.Config().BuildOSCommonTarget)
if ctx.Device() {
- for _, depName := range ctx.Module().RequiredModuleNames(ctx) {
+ for _, depName := range append(ctx.Module().RequiredModuleNames(ctx), ctx.Module().VintfFragmentModuleNames(ctx)...) {
for _, target := range deviceTargets {
addDep(target, depName)
}
@@ -1062,7 +1062,7 @@
}
if ctx.Host() {
- for _, depName := range ctx.Module().RequiredModuleNames(ctx) {
+ for _, depName := range append(ctx.Module().RequiredModuleNames(ctx), ctx.Module().VintfFragmentModuleNames(ctx)...) {
for _, target := range hostTargets {
// When a host module requires another host module, don't make a
// dependency if they have different OSes (i.e. hostcross).
diff --git a/android/recovery_build_prop.go b/android/recovery_build_prop.go
index 91d1904..ac7d2ec 100644
--- a/android/recovery_build_prop.go
+++ b/android/recovery_build_prop.go
@@ -83,8 +83,10 @@
r.properties.Product_build_prop,
r.properties.System_ext_build_prop,
} {
- if buildPropPath := PathForModuleSrc(ctx, proptools.String(buildProp)); buildPropPath != nil {
- buildProps = append(buildProps, buildPropPath)
+ if buildProp != nil {
+ if buildPropPath := PathForModuleSrc(ctx, proptools.String(buildProp)); buildPropPath != nil {
+ buildProps = append(buildProps, buildPropPath)
+ }
}
}
return buildProps
diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go
index 57b361b..5845d59 100644
--- a/filesystem/filesystem.go
+++ b/filesystem/filesystem.go
@@ -155,6 +155,11 @@
// Directories to be created under root. e.g. /dev, /proc, etc.
Dirs proptools.Configurable[[]string]
+ // List of filesystem modules to include in creating the partition. The root directory of
+ // the provided filesystem modules are included in creating the partition.
+ // This is only supported for cpio and compressed cpio filesystem types.
+ Include_files_of []string
+
// Symbolic links to be created under root with "ln -sf <target> <name>".
Symlinks []SymlinkDefinition
@@ -286,6 +291,8 @@
var interPartitionDependencyTag = interPartitionDepTag{}
+var interPartitionInstallDependencyTag = interPartitionDepTag{}
+
var _ android.ExcludeFromVisibilityEnforcementTag = (*depTagWithVisibilityEnforcementBypass)(nil)
func (t depTagWithVisibilityEnforcementBypass) ExcludeFromVisibilityEnforcement() {}
@@ -317,6 +324,9 @@
for _, partition := range f.properties.Import_aconfig_flags_from {
ctx.AddDependency(ctx.Module(), importAconfigDependencyTag, partition)
}
+ for _, partition := range f.properties.Include_files_of {
+ ctx.AddDependency(ctx.Module(), interPartitionInstallDependencyTag, partition)
+ }
}
type fsType int
@@ -416,7 +426,12 @@
if f.filesystemBuilder.ShouldUseVintfFragmentModuleOnly() {
f.validateVintfFragments(ctx)
}
- var rootDir android.Path
+
+ if len(f.properties.Include_files_of) > 0 && !android.InList(f.fsType(ctx), []fsType{compressedCpioType, cpioType}) {
+ ctx.PropertyErrorf("include_files_of", "include_files_of is only supported for cpio and compressed cpio filesystem types.")
+ }
+
+ var rootDir android.OutputPath
switch f.fsType(ctx) {
case ext4Type, erofsType, f2fsType:
f.output, rootDir = f.buildImageUsingBuildImage(ctx)
@@ -432,6 +447,10 @@
ctx.InstallFile(f.installDir, f.installFileName(), f.output)
ctx.SetOutputFiles([]android.Path{f.output}, "")
+ if f.partitionName() == "recovery" {
+ rootDir = rootDir.Join(ctx, "root")
+ }
+
fileListFile := android.PathForModuleOut(ctx, "fileList")
android.WriteFileRule(ctx, fileListFile, f.installedFilesList())
@@ -585,7 +604,7 @@
return f.partitionName()
}
-func (f *filesystem) buildImageUsingBuildImage(ctx android.ModuleContext) (android.Path, android.Path) {
+func (f *filesystem) buildImageUsingBuildImage(ctx android.ModuleContext) (android.Path, android.OutputPath) {
rootDir := android.PathForModuleOut(ctx, f.rootDirString()).OutputPath
rebasedDir := rootDir
if f.properties.Base_dir != nil {
@@ -798,7 +817,20 @@
}
}
-func (f *filesystem) buildCpioImage(ctx android.ModuleContext, compressed bool) (android.Path, android.Path) {
+func includeFilesRootDir(ctx android.ModuleContext) (rootDirs android.Paths, partitions android.Paths) {
+ ctx.VisitDirectDepsWithTag(interPartitionInstallDependencyTag, func(m android.Module) {
+ if fsProvider, ok := android.OtherModuleProvider(ctx, m, FilesystemProvider); ok {
+ rootDirs = append(rootDirs, fsProvider.RootDir)
+ partitions = append(partitions, fsProvider.Output)
+ } else {
+ ctx.PropertyErrorf("include_files_of", "only filesystem modules can be listed in "+
+ "include_files_of but %s is not a filesystem module", m.Name())
+ }
+ })
+ return rootDirs, partitions
+}
+
+func (f *filesystem) buildCpioImage(ctx android.ModuleContext, compressed bool) (android.Path, android.OutputPath) {
if proptools.Bool(f.properties.Use_avb) {
ctx.PropertyErrorf("use_avb", "signing compresed cpio image using avbtool is not supported."+
"Consider adding this to bootimg module and signing the entire boot image.")
@@ -830,10 +862,18 @@
f.filesystemBuilder.BuildLinkerConfigFile(ctx, builder, rebasedDir)
f.copyFilesToProductOut(ctx, builder, rebasedDir)
+ rootDirs, partitions := includeFilesRootDir(ctx)
+
output := android.PathForModuleOut(ctx, f.installFileName())
cmd := builder.Command().
BuiltTool("mkbootfs").
Text(rootDir.String()) // input directory
+
+ for i := range len(rootDirs) {
+ cmd.Text(rootDirs[i].String())
+ }
+ cmd.Implicits(partitions)
+
if nodeList := f.properties.Dev_nodes_description_file; nodeList != nil {
cmd.FlagWithInput("-n ", android.PathForModuleSrc(ctx, proptools.String(nodeList)))
}
diff --git a/fsgen/filesystem_creator.go b/fsgen/filesystem_creator.go
index 0868561..a2840b5 100644
--- a/fsgen/filesystem_creator.go
+++ b/fsgen/filesystem_creator.go
@@ -78,7 +78,7 @@
return module
}
-func generatedPartitions(ctx android.LoadHookContext) []string {
+func generatedPartitions(ctx android.EarlyModuleContext) []string {
partitionVars := ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse
generatedPartitions := []string{"system"}
if ctx.DeviceConfig().SystemExtPath() == "system_ext" {
@@ -339,22 +339,7 @@
}
case "recovery":
dirs := append(commonPartitionDirs, []string{
- "odm_file_contexts",
- "odm_property_contexts",
- "plat_file_contexts",
- "plat_property_contexts",
- "plat_service_contexts",
- "product_file_contexts",
- "product_property_contexts",
- "product_service_contexts",
"sdcard",
- "sepolicy",
- "system_ext_file_contexts",
- "system_ext_property_contexts",
- "system_ext_service_contexts",
- "vendor_file_contexts",
- "vendor_property_contexts",
- "vendor_service_contexts",
}...)
dirsWithRoot := make([]string, len(dirs))
@@ -373,6 +358,10 @@
fsProps.Security_patch = proptools.StringPtr(partitionVars.VendorDlkmSecurityPatch)
case "odm_dlkm":
fsProps.Security_patch = proptools.StringPtr(partitionVars.OdmDlkmSecurityPatch)
+ case "vendor_ramdisk":
+ if android.InList("recovery", generatedPartitions(ctx)) {
+ fsProps.Include_files_of = []string{generatedModuleNameForPartition(ctx.Config(), "recovery")}
+ }
}
}
diff --git a/fsgen/fsgen_mutators.go b/fsgen/fsgen_mutators.go
index de0a1cb..9327669 100644
--- a/fsgen/fsgen_mutators.go
+++ b/fsgen/fsgen_mutators.go
@@ -150,7 +150,23 @@
},
"ramdisk": {},
"vendor_ramdisk": {},
- "recovery": {},
+ "recovery": {
+ "sepolicy.recovery": defaultDepCandidateProps(ctx.Config()),
+ "plat_file_contexts.recovery": defaultDepCandidateProps(ctx.Config()),
+ "plat_service_contexts.recovery": defaultDepCandidateProps(ctx.Config()),
+ "plat_property_contexts.recovery": defaultDepCandidateProps(ctx.Config()),
+ "system_ext_file_contexts.recovery": defaultDepCandidateProps(ctx.Config()),
+ "system_ext_service_contexts.recovery": defaultDepCandidateProps(ctx.Config()),
+ "system_ext_property_contexts.recovery": defaultDepCandidateProps(ctx.Config()),
+ "vendor_file_contexts.recovery": defaultDepCandidateProps(ctx.Config()),
+ "vendor_service_contexts.recovery": defaultDepCandidateProps(ctx.Config()),
+ "vendor_property_contexts.recovery": defaultDepCandidateProps(ctx.Config()),
+ "odm_file_contexts.recovery": defaultDepCandidateProps(ctx.Config()),
+ "odm_property_contexts.recovery": defaultDepCandidateProps(ctx.Config()),
+ "product_file_contexts.recovery": defaultDepCandidateProps(ctx.Config()),
+ "product_service_contexts.recovery": defaultDepCandidateProps(ctx.Config()),
+ "product_property_contexts.recovery": defaultDepCandidateProps(ctx.Config()),
+ },
},
fsDepsMutex: sync.Mutex{},
moduleToInstallationProps: map[string]installationProperties{},
diff --git a/java/robolectric.go b/java/robolectric.go
index 5f46267..3b2c656 100644
--- a/java/robolectric.go
+++ b/java/robolectric.go
@@ -41,6 +41,7 @@
}
const robolectricCurrentLib = "Robolectric_all-target"
+const clearcutJunitLib = "ClearcutJunitListenerAar"
const robolectricPrebuiltLibPattern = "platform-robolectric-%s-prebuilt"
var (
@@ -106,6 +107,8 @@
ctx.PropertyErrorf("instrumentation_for", "missing required instrumented module")
}
+ ctx.AddVariationDependencies(nil, staticLibTag, clearcutJunitLib)
+
if v := String(r.robolectricProperties.Robolectric_prebuilt_version); v != "" {
ctx.AddVariationDependencies(nil, staticLibTag, fmt.Sprintf(robolectricPrebuiltLibPattern, v))
} else if !proptools.BoolDefault(r.robolectricProperties.Strict_mode, true) {
diff --git a/java/robolectric_test.go b/java/robolectric_test.go
index 4775bac..a2474e8 100644
--- a/java/robolectric_test.go
+++ b/java/robolectric_test.go
@@ -44,6 +44,12 @@
java_library {
name: "junitxml",
srcs: ["JUnitXml.java"]
+
+ }
+
+ java_library {
+ name: "ClearcutJunitListenerAar",
+ srcs: ["Runtime.java"]
}
java_library_host {
diff --git a/kernel/prebuilt_kernel_modules.go b/kernel/prebuilt_kernel_modules.go
index ec7a971..1225da0 100644
--- a/kernel/prebuilt_kernel_modules.go
+++ b/kernel/prebuilt_kernel_modules.go
@@ -247,6 +247,8 @@
return modulesDir.Join(ctx, "vendor", "lib", "modules")
} else if ctx.InstallInOdmDlkm() {
return modulesDir.Join(ctx, "odm", "lib", "modules")
+ } else if ctx.InstallInVendorRamdisk() {
+ return modulesDir.Join(ctx, "lib", "modules")
} else {
// not an android dlkm module.
return modulesDir
@@ -309,8 +311,8 @@
builder.Build("depmod", fmt.Sprintf("depmod %s", ctx.ModuleName()))
finalModulesDep := modulesDep
- // Add a leading slash to paths in modules.dep of android dlkm
- if ctx.InstallInSystemDlkm() || ctx.InstallInVendorDlkm() || ctx.InstallInOdmDlkm() {
+ // Add a leading slash to paths in modules.dep of android dlkm and vendor ramdisk
+ if ctx.InstallInSystemDlkm() || ctx.InstallInVendorDlkm() || ctx.InstallInOdmDlkm() || ctx.InstallInVendorRamdisk() {
finalModulesDep = modulesDep.ReplaceExtension(ctx, "intermediates")
ctx.Build(pctx, android.BuildParams{
Rule: addLeadingSlashToPaths,