Merge "Specify correct install location for vendor_ramdisk prebuilt kernel module" into main
diff --git a/android/module.go b/android/module.go
index 3bf4f0c..2f6f613 100644
--- a/android/module.go
+++ b/android/module.go
@@ -1384,6 +1384,8 @@
}
} else if m.InstallInRamdisk() {
partition = "ramdisk"
+ } else if m.InstallInVendorRamdisk() {
+ partition = "vendor_ramdisk"
}
return partition
}
diff --git a/android/variable.go b/android/variable.go
index 5dd9b29..50d1fcd 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -660,6 +660,10 @@
BuildingOdmDlkmImage bool `json:",omitempty"`
OdmKernelModules []string `json:",omitempty"`
OdmKernelBlocklistFile string `json:",omitempty"`
+
+ VendorRamdiskKernelModules []string `json:",omitempty"`
+ VendorRamdiskKernelBlocklistFile string `json:",omitempty"`
+ VendorRamdiskKernelLoadModules []string `json:",omitempty"`
}
func boolPtr(v bool) *bool {
diff --git a/apex/apex.go b/apex/apex.go
index 0e40d7c..1fe475c 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -1755,7 +1755,13 @@
}
func (a *apexBundle) isCompressable() bool {
- return proptools.BoolDefault(a.overridableProperties.Compressible, false) && !a.testApex
+ if a.testApex {
+ return false
+ }
+ if a.payloadFsType == erofs {
+ return false
+ }
+ return proptools.Bool(a.overridableProperties.Compressible)
}
func (a *apexBundle) commonBuildActions(ctx android.ModuleContext) bool {
diff --git a/apex/apex_test.go b/apex/apex_test.go
index 6e92959..ce5edad 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -9094,6 +9094,33 @@
ensureContains(t, androidMk, "LOCAL_MODULE_STEM := myapex.capex\n")
}
+func TestCompressedApexIsDisabledWhenUsingErofs(t *testing.T) {
+ t.Parallel()
+ ctx := testApex(t, `
+ apex {
+ name: "myapex",
+ key: "myapex.key",
+ compressible: true,
+ updatable: false,
+ payload_fs_type: "erofs",
+ }
+ apex_key {
+ name: "myapex.key",
+ public_key: "testkey.avbpubkey",
+ private_key: "testkey.pem",
+ }
+ `,
+ android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
+ variables.CompressedApex = proptools.BoolPtr(true)
+ }),
+ )
+
+ compressRule := ctx.ModuleForTests("myapex", "android_common_myapex").MaybeRule("compressRule")
+ if compressRule.Rule != nil {
+ t.Error("erofs apex should not be compressed")
+ }
+}
+
func TestApexSet_ShouldRespectCompressedApexFlag(t *testing.T) {
t.Parallel()
for _, compressionEnabled := range []bool{true, false} {
diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go
index dadacae..019cc25 100644
--- a/filesystem/filesystem.go
+++ b/filesystem/filesystem.go
@@ -594,6 +594,13 @@
addStr("hash_seed", uuid)
}
+ // TODO(b/381120092): This should only be added if none of the size-related properties are set,
+ // but currently soong built partitions don't have size properties. Make code:
+ // https://cs.android.com/android/platform/superproject/main/+/main:build/make/core/Makefile;l=2262;drc=39cd33701c9278db0e7e481a090605f428d5b12d
+ // Make uses system_disable_sparse but disable_sparse has the same effect, and we shouldn't need
+ // to qualify it because each partition gets its own property file built.
+ addStr("disable_sparse", "true")
+
fst := f.fsType(ctx)
switch fst {
case erofsType:
diff --git a/fsgen/filesystem_creator.go b/fsgen/filesystem_creator.go
index e8b0a4f..556c4dc 100644
--- a/fsgen/filesystem_creator.go
+++ b/fsgen/filesystem_creator.go
@@ -222,9 +222,80 @@
"framework/oat/*/*", // framework/oat/{arch}
}
fsProps.Fsverity.Libs = []string{":framework-res{.export-package.apk}"}
+ // Most of the symlinks and directories listed here originate from create_root_structure.mk,
+ // but the handwritten generic system image also recreates them:
+ // https://cs.android.com/android/platform/superproject/main/+/main:build/make/target/product/generic/Android.bp;l=33;drc=db08311f1b6ef6cb0a4fbcc6263b89849360ce04
// TODO(b/377734331): only generate the symlinks if the relevant partitions exist
fsProps.Symlinks = []filesystem.SymlinkDefinition{
filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/system/bin/init"),
+ Name: proptools.StringPtr("init"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/system/etc"),
+ Name: proptools.StringPtr("etc"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/system/bin"),
+ Name: proptools.StringPtr("bin"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/data/user_de/0/com.android.shell/files/bugreports"),
+ Name: proptools.StringPtr("bugreports"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/sys/kernel/debug"),
+ Name: proptools.StringPtr("d"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/storage/self/primary"),
+ Name: proptools.StringPtr("sdcard"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/product/etc/security/adb_keys"),
+ Name: proptools.StringPtr("adb_keys"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/vendor/odm/app"),
+ Name: proptools.StringPtr("odm/app"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/vendor/odm/bin"),
+ Name: proptools.StringPtr("odm/bin"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/vendor/odm/etc"),
+ Name: proptools.StringPtr("odm/etc"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/vendor/odm/firmware"),
+ Name: proptools.StringPtr("odm/firmware"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/vendor/odm/framework"),
+ Name: proptools.StringPtr("odm/framework"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/vendor/odm/lib"),
+ Name: proptools.StringPtr("odm/lib"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/vendor/odm/lib64"),
+ Name: proptools.StringPtr("odm/lib64"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/vendor/odm/overlay"),
+ Name: proptools.StringPtr("odm/overlay"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/vendor/odm/priv-app"),
+ Name: proptools.StringPtr("odm/priv-app"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/vendor/odm/usr"),
+ Name: proptools.StringPtr("odm/usr"),
+ },
+ filesystem.SymlinkDefinition{
Target: proptools.StringPtr("/product"),
Name: proptools.StringPtr("system/product"),
},
@@ -240,7 +311,42 @@
Target: proptools.StringPtr("/system_dlkm/lib/modules"),
Name: proptools.StringPtr("system/lib/modules"),
},
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/data/cache"),
+ Name: proptools.StringPtr("cache"),
+ },
}
+ fsProps.Dirs = proptools.NewSimpleConfigurable([]string{
+ // From generic_rootdirs in build/make/target/product/generic/Android.bp
+ "acct",
+ "apex",
+ "bootstrap-apex",
+ "config",
+ "data",
+ "data_mirror",
+ "debug_ramdisk",
+ "dev",
+ "linkerconfig",
+ "metadata",
+ "mnt",
+ "odm",
+ "odm_dlkm",
+ "oem",
+ "postinstall",
+ "proc",
+ "second_stage_resources",
+ "storage",
+ "sys",
+ "system",
+ "system_dlkm",
+ "tmp",
+ "vendor",
+ "vendor_dlkm",
+
+ // from android_rootdirs in build/make/target/product/generic/Android.bp
+ "system_ext",
+ "product",
+ })
case "system_ext":
fsProps.Fsverity.Inputs = []string{
"framework/*",
@@ -321,7 +427,7 @@
}
}
- if android.InList(partitionType, dlkmPartitions) {
+ if android.InList(partitionType, append(dlkmPartitions, "vendor_ramdisk")) {
f.createPrebuiltKernelModules(ctx, partitionType)
}
@@ -398,6 +504,7 @@
System_dlkm_specific *bool
Vendor_dlkm_specific *bool
Odm_dlkm_specific *bool
+ Vendor_ramdisk *bool
Load_by_default *bool
Blocklist_file *string
}{
@@ -430,6 +537,12 @@
if blocklistFile := ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.OdmKernelBlocklistFile; blocklistFile != "" {
props.Blocklist_file = proptools.StringPtr(blocklistFile)
}
+ case "vendor_ramdisk":
+ props.Srcs = android.ExistentPathsForSources(ctx, ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.VendorRamdiskKernelModules).Strings()
+ props.Vendor_ramdisk = proptools.BoolPtr(true)
+ if blocklistFile := ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.VendorRamdiskKernelBlocklistFile; blocklistFile != "" {
+ props.Blocklist_file = proptools.StringPtr(blocklistFile)
+ }
default:
ctx.ModuleErrorf("DLKM is not supported for %s\n", partitionType)
}
diff --git a/fsgen/fsgen_mutators.go b/fsgen/fsgen_mutators.go
index 9472a50..0cc643e 100644
--- a/fsgen/fsgen_mutators.go
+++ b/fsgen/fsgen_mutators.go
@@ -95,15 +95,18 @@
fsDeps: map[string]*multilibDeps{
// These additional deps are added according to the cuttlefish system image bp.
"system": {
+ // keep-sorted start
"com.android.apex.cts.shim.v1_prebuilt": defaultDepCandidateProps(ctx.Config()),
"dex_bootjars": defaultDepCandidateProps(ctx.Config()),
"framework_compatibility_matrix.device.xml": defaultDepCandidateProps(ctx.Config()),
+ "init.environ.rc-soong": defaultDepCandidateProps(ctx.Config()),
"libcompiler_rt": defaultDepCandidateProps(ctx.Config()),
"libdmabufheap": defaultDepCandidateProps(ctx.Config()),
"libgsi": defaultDepCandidateProps(ctx.Config()),
"llndk.libraries.txt": defaultDepCandidateProps(ctx.Config()),
"logpersist.start": defaultDepCandidateProps(ctx.Config()),
"update_engine_sideload": defaultDepCandidateProps(ctx.Config()),
+ // keep-sorted end
},
"vendor": {
"fs_config_files_vendor": defaultDepCandidateProps(ctx.Config()),