Merge "Disable IdentifierName" into main
diff --git a/android/variable.go b/android/variable.go
index baa2646..19f63e3 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -581,6 +581,11 @@
BoardAvbRollbackIndexLocation string `json:",omitempty"`
}
+type BoardSuperPartitionGroupProps struct {
+ GroupSize string `json:",omitempty"`
+ PartitionList []string `json:",omitempty"`
+}
+
type ChainedAvbPartitionProps struct {
Partitions []string `json:",omitempty"`
Key string `json:",omitempty"`
@@ -634,6 +639,18 @@
InternalBootconfig []string `json:",omitempty"`
InternalBootconfigFile string `json:",omitempty"`
+ // Super image stuff
+ ProductUseDynamicPartitions bool `json:",omitempty"`
+ ProductRetrofitDynamicPartitions bool `json:",omitempty"`
+ ProductBuildSuperPartition bool `json:",omitempty"`
+ BoardSuperPartitionSize string `json:",omitempty"`
+ BoardSuperPartitionMetadataDevice string `json:",omitempty"`
+ BoardSuperPartitionBlockDevices []string `json:",omitempty"`
+ BoardSuperPartitionGroups map[string]BoardSuperPartitionGroupProps `json:",omitempty"`
+ ProductVirtualAbOta bool `json:",omitempty"`
+ ProductVirtualAbOtaRetrofit bool `json:",omitempty"`
+ AbOtaUpdater bool `json:",omitempty"`
+
// Avb (android verified boot) stuff
BoardAvbEnable bool `json:",omitempty"`
BoardAvbAlgorithm string `json:",omitempty"`
diff --git a/filesystem/Android.bp b/filesystem/Android.bp
index bbb3ea7..127faa7 100644
--- a/filesystem/Android.bp
+++ b/filesystem/Android.bp
@@ -25,6 +25,7 @@
"fsverity_metadata.go",
"logical_partition.go",
"raw_binary.go",
+ "super_image.go",
"system_image.go",
"vbmeta.go",
"testing.go",
diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go
index b6b4cb7..b9cb076 100644
--- a/filesystem/filesystem.go
+++ b/filesystem/filesystem.go
@@ -130,9 +130,13 @@
// checks, and will be used in the future for API surface checks.
Partition_type *string
- // file_contexts file to make image. Currently, only ext4 is supported.
+ // file_contexts file to make image. Currently, only ext4 is supported. These file contexts
+ // will be compiled with sefcontext_compile
File_contexts *string `android:"path"`
+ // The selinux file contexts, after having already run them through sefcontext_compile
+ Precompiled_file_contexts *string `android:"path"`
+
// Base directory relative to root, to which deps are installed, e.g. "system". Default is "."
// (root).
Base_dir *string
@@ -453,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 {
@@ -679,8 +683,15 @@
addStr("avb_salt", f.salt())
}
- if proptools.String(f.properties.File_contexts) != "" {
+ if f.properties.File_contexts != nil && f.properties.Precompiled_file_contexts != nil {
+ ctx.ModuleErrorf("file_contexts and precompiled_file_contexts cannot both be set")
+ } else if f.properties.File_contexts != nil {
addPath("selinux_fc", f.buildFileContexts(ctx))
+ } else if f.properties.Precompiled_file_contexts != nil {
+ src := android.PathForModuleSrc(ctx, *f.properties.Precompiled_file_contexts)
+ if src != nil {
+ addPath("selinux_fc", src)
+ }
}
if timestamp := proptools.String(f.properties.Fake_timestamp); timestamp != "" {
addStr("timestamp", timestamp)
@@ -1012,7 +1023,7 @@
ctx.WalkDeps(func(child, parent android.Module) bool {
for _, ps := range android.OtherModuleProviderOrDefault(
ctx, child, android.InstallFilesProvider).PackagingSpecs {
- if _, ok := deps[ps.RelPathInPackage()]; ok {
+ if _, ok := deps[ps.RelPathInPackage()]; ok && ps.Partition() == f.PartitionType() {
modulesInPackageByModule[child] = true
modulesInPackageByName[child.Name()] = true
return true
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/filesystem/super_image.go b/filesystem/super_image.go
new file mode 100644
index 0000000..0f8f614
--- /dev/null
+++ b/filesystem/super_image.go
@@ -0,0 +1,236 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package filesystem
+
+import (
+ "fmt"
+ "path/filepath"
+ "strconv"
+ "strings"
+
+ "android/soong/android"
+ "github.com/google/blueprint"
+ "github.com/google/blueprint/proptools"
+)
+
+func init() {
+ android.RegisterModuleType("super_image", SuperImageFactory)
+}
+
+type superImage struct {
+ android.ModuleBase
+
+ properties SuperImageProperties
+ partitionProps SuperImagePartitionNameProperties
+
+ installDir android.InstallPath
+}
+
+type SuperImageProperties struct {
+ // the size of the super partition
+ Size *int64
+ // the block device where metadata for dynamic partitions is stored
+ Metadata_device *string
+ // the super partition block device list
+ Block_devices []string
+ // whether A/B updater is used
+ Ab_update *bool
+ // whether dynamic partitions is enabled on devices that were launched without this support
+ Retrofit *bool
+ // whether virtual A/B seamless update is enabled
+ Virtual_ab *bool
+ // whether retrofitting virtual A/B seamless update is enabled
+ Virtual_ab_retrofit *bool
+ // whether the output is a sparse image
+ Sparse *bool
+ // information about how partitions within the super partition are grouped together
+ Partition_groups []PartitionGroupsInfo
+ // whether dynamic partitions is used
+ Use_dynamic_partitions *bool
+}
+
+type PartitionGroupsInfo struct {
+ Name string
+ GroupSize string
+ PartitionList []string
+}
+
+type SuperImagePartitionNameProperties struct {
+ // Name of the System partition filesystem module
+ System_partition *string
+ // Name of the System_ext partition filesystem module
+ System_ext_partition *string
+ // Name of the System_dlkm partition filesystem module
+ System_dlkm_partition *string
+ // Name of the System_other partition filesystem module
+ System_other_partition *string
+ // Name of the Product partition filesystem module
+ Product_partition *string
+ // Name of the Vendor partition filesystem module
+ Vendor_partition *string
+ // Name of the Vendor_dlkm partition filesystem module
+ Vendor_dlkm_partition *string
+ // Name of the Odm partition filesystem module
+ Odm_partition *string
+ // Name of the Odm_dlkm partition filesystem module
+ Odm_dlkm_partition *string
+}
+
+func SuperImageFactory() android.Module {
+ module := &superImage{}
+ module.AddProperties(&module.properties, &module.partitionProps)
+ android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon)
+ return module
+}
+
+type superImageDepTagType struct {
+ blueprint.BaseDependencyTag
+}
+
+var superImageDepTag superImageDepTagType
+
+func (s *superImage) DepsMutator(ctx android.BottomUpMutatorContext) {
+ addDependencyIfDefined := func(dep *string) {
+ if dep != nil {
+ ctx.AddDependency(ctx.Module(), superImageDepTag, proptools.String(dep))
+ }
+ }
+
+ addDependencyIfDefined(s.partitionProps.System_partition)
+ addDependencyIfDefined(s.partitionProps.System_ext_partition)
+ addDependencyIfDefined(s.partitionProps.System_dlkm_partition)
+ addDependencyIfDefined(s.partitionProps.System_other_partition)
+ addDependencyIfDefined(s.partitionProps.Product_partition)
+ addDependencyIfDefined(s.partitionProps.Vendor_partition)
+ addDependencyIfDefined(s.partitionProps.Vendor_dlkm_partition)
+ addDependencyIfDefined(s.partitionProps.Odm_partition)
+ addDependencyIfDefined(s.partitionProps.Odm_dlkm_partition)
+}
+
+func (s *superImage) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+ miscInfo, deps := s.buildMiscInfo(ctx)
+ builder := android.NewRuleBuilder(pctx, ctx)
+ output := android.PathForModuleOut(ctx, s.installFileName())
+ lpMake := ctx.Config().HostToolPath(ctx, "lpmake")
+ lpMakeDir := filepath.Dir(lpMake.String())
+ deps = append(deps, lpMake)
+ builder.Command().Textf("PATH=%s:\\$PATH", lpMakeDir).
+ BuiltTool("build_super_image").
+ Text("-v").
+ Input(miscInfo).
+ Implicits(deps).
+ Output(output)
+ builder.Build("build_super_image", fmt.Sprintf("Creating super image %s", s.BaseModuleName()))
+ ctx.SetOutputFiles([]android.Path{output}, "")
+}
+
+func (s *superImage) installFileName() string {
+ return s.BaseModuleName() + ".img"
+}
+
+func (s *superImage) buildMiscInfo(ctx android.ModuleContext) (android.Path, android.Paths) {
+ var miscInfoString strings.Builder
+ addStr := func(name string, value string) {
+ miscInfoString.WriteString(name)
+ miscInfoString.WriteRune('=')
+ miscInfoString.WriteString(value)
+ miscInfoString.WriteRune('\n')
+ }
+
+ addStr("use_dynamic_partitions", strconv.FormatBool(proptools.Bool(s.properties.Use_dynamic_partitions)))
+ addStr("dynamic_partition_retrofit", strconv.FormatBool(proptools.Bool(s.properties.Retrofit)))
+ addStr("lpmake", "lpmake")
+ addStr("super_metadata_device", proptools.String(s.properties.Metadata_device))
+ if len(s.properties.Block_devices) > 0 {
+ addStr("super_block_devices", strings.Join(s.properties.Block_devices, " "))
+ }
+ addStr("super_super_device_size", strconv.Itoa(proptools.Int(s.properties.Size)))
+ var groups, partitionList []string
+ for _, groupInfo := range s.properties.Partition_groups {
+ groups = append(groups, groupInfo.Name)
+ partitionList = append(partitionList, groupInfo.PartitionList...)
+ addStr("super_"+groupInfo.Name+"_group_size", groupInfo.GroupSize)
+ addStr("super_"+groupInfo.Name+"_partition_list", strings.Join(groupInfo.PartitionList, " "))
+ }
+ addStr("super_partition_groups", strings.Join(groups, " "))
+ addStr("dynamic_partition_list", strings.Join(partitionList, " "))
+
+ addStr("virtual_ab", strconv.FormatBool(proptools.Bool(s.properties.Virtual_ab)))
+ addStr("virtual_ab_retrofit", strconv.FormatBool(proptools.Bool(s.properties.Virtual_ab_retrofit)))
+ addStr("ab_update", strconv.FormatBool(proptools.Bool(s.properties.Ab_update)))
+ addStr("build_non_sparse_super_partition", strconv.FormatBool(!proptools.Bool(s.properties.Sparse)))
+
+ partitionToImagePath := make(map[string]string)
+ nameToPartition := make(map[string]string)
+ var systemOtherPartitionNameNeeded string
+ addEntryToPartitionToName := func(p string, s *string) {
+ if proptools.String(s) != "" {
+ nameToPartition[*s] = p
+ }
+ }
+
+ // Build partitionToImagePath, because system partition may need system_other
+ // partition image path
+ for _, p := range partitionList {
+ if _, ok := nameToPartition[p]; ok {
+ continue
+ }
+ switch p {
+ case "system":
+ addEntryToPartitionToName(p, s.partitionProps.System_partition)
+ systemOtherPartitionNameNeeded = proptools.String(s.partitionProps.System_other_partition)
+ case "system_dlkm":
+ addEntryToPartitionToName(p, s.partitionProps.System_dlkm_partition)
+ case "system_ext":
+ addEntryToPartitionToName(p, s.partitionProps.System_ext_partition)
+ case "product":
+ addEntryToPartitionToName(p, s.partitionProps.Product_partition)
+ case "vendor":
+ addEntryToPartitionToName(p, s.partitionProps.Vendor_partition)
+ case "vendor_dlkm":
+ addEntryToPartitionToName(p, s.partitionProps.Vendor_dlkm_partition)
+ case "odm":
+ addEntryToPartitionToName(p, s.partitionProps.Odm_partition)
+ case "odm_dlkm":
+ addEntryToPartitionToName(p, s.partitionProps.Odm_dlkm_partition)
+ default:
+ ctx.ModuleErrorf("current partition %s not a super image supported partition", p)
+ }
+ }
+
+ var deps android.Paths
+ ctx.VisitDirectDeps(func(m android.Module) {
+ if p, ok := nameToPartition[m.Name()]; ok {
+ if output, ok := android.OtherModuleProvider(ctx, m, android.OutputFilesProvider); ok {
+ partitionToImagePath[p] = output.DefaultOutputFiles[0].String()
+ deps = append(deps, output.DefaultOutputFiles[0])
+ }
+ } else if systemOtherPartitionNameNeeded != "" && m.Name() == systemOtherPartitionNameNeeded {
+ if output, ok := android.OtherModuleProvider(ctx, m, android.OutputFilesProvider); ok {
+ partitionToImagePath["system_other"] = output.DefaultOutputFiles[0].String()
+ // TODO: add system_other to deps after it can be generated
+ // deps = append(deps, output.DefaultOutputFiles[0])
+ }
+ }
+ })
+
+ for _, p := range android.SortedKeys(partitionToImagePath) {
+ addStr(p+"_image", partitionToImagePath[p])
+ }
+
+ miscInfo := android.PathForModuleOut(ctx, "misc_info.txt")
+ android.WriteFileRule(ctx, miscInfo, miscInfoString.String())
+ return miscInfo, deps
+}
diff --git a/fsgen/Android.bp b/fsgen/Android.bp
index e8065f3..365d954 100644
--- a/fsgen/Android.bp
+++ b/fsgen/Android.bp
@@ -17,6 +17,7 @@
"filesystem_creator.go",
"fsgen_mutators.go",
"prebuilt_etc_modules_gen.go",
+ "super_img.go",
"util.go",
"vbmeta_partitions.go",
],
diff --git a/fsgen/filesystem_creator.go b/fsgen/filesystem_creator.go
index 6ded3aa..1378513 100644
--- a/fsgen/filesystem_creator.go
+++ b/fsgen/filesystem_creator.go
@@ -52,6 +52,7 @@
Boot_image string `blueprint:"mutated" android:"path_device_first"`
Vendor_boot_image string `blueprint:"mutated" android:"path_device_first"`
Init_boot_image string `blueprint:"mutated" android:"path_device_first"`
+ Super_image string `blueprint:"mutated" android:"path_device_first"`
}
type filesystemCreator struct {
@@ -158,6 +159,11 @@
f.properties.Vbmeta_partition_names = append(f.properties.Vbmeta_partition_names, x.partitionName)
}
+ if buildingSuperImage(partitionVars) {
+ createSuperImage(ctx, finalSoongGeneratedPartitions, partitionVars)
+ f.properties.Super_image = ":" + generatedModuleName(ctx.Config(), "super")
+ }
+
ctx.Config().Get(fsGenStateOnceKey).(*FsGenState).soongGeneratedPartitions = finalSoongGeneratedPartitions
f.createDeviceModule(ctx, finalSoongGeneratedPartitions, f.properties.Vbmeta_module_names)
}
@@ -322,7 +328,22 @@
Target: proptools.StringPtr("/data/cache"),
Name: proptools.StringPtr("cache"),
},
+ // For Treble Generic System Image (GSI), system-as-root GSI needs to work on
+ // both devices with and without /odm_dlkm partition. Those symlinks are for
+ // devices without /odm_dlkm partition. For devices with /odm_dlkm
+ // partition, mount odm_dlkm.img under /odm_dlkm will hide those symlinks.
+ // Note that /odm_dlkm/lib is omitted because odm DLKMs should be accessed
+ // via /odm/lib/modules directly. All of this also applies to the vendor_dlkm symlink
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/odm/odm_dlkm/etc"),
+ Name: proptools.StringPtr("odm_dlkm/etc"),
+ },
+ filesystem.SymlinkDefinition{
+ Target: proptools.StringPtr("/vendor/vendor_dlkm/etc"),
+ 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",
@@ -374,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"))
@@ -389,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":
@@ -432,6 +453,7 @@
Name: proptools.StringPtr("default.prop"),
},
}
+ fsProps.Base_dir = proptools.StringPtr("recovery")
}
}
@@ -771,26 +793,17 @@
fsProps.Partition_name = proptools.StringPtr(partitionType)
- if !strings.Contains(partitionType, "ramdisk") {
- fsProps.Base_dir = proptools.StringPtr(partitionType)
+ switch partitionType {
+ // The partitions that support file_contexts came from here:
+ // https://cs.android.com/android/platform/superproject/main/+/main:build/make/core/Makefile;l=2270;drc=ad7cfb56010cb22c3aa0e70cf71c804352553526
+ case "system", "userdata", "cache", "vendor", "product", "system_ext", "odm", "vendor_dlkm", "odm_dlkm", "system_dlkm", "oem":
+ fsProps.Precompiled_file_contexts = proptools.StringPtr(":file_contexts_bin_gen")
}
fsProps.Is_auto_generated = proptools.BoolPtr(true)
partitionSpecificFsProps(ctx, fsProps, partitionVars, partitionType)
- // system_image properties that are not set:
- // - filesystemProperties.Avb_hash_algorithm
- // - filesystemProperties.File_contexts
- // - filesystemProperties.Dirs
- // - filesystemProperties.Symlinks
- // - filesystemProperties.Fake_timestamp
- // - filesystemProperties.Uuid
- // - filesystemProperties.Mount_point
- // - filesystemProperties.Include_make_built_files
- // - filesystemProperties.Build_logtags
- // - systemImageProperties.Linker_config_src
-
return fsProps, true
}
@@ -998,6 +1011,14 @@
diffTestFiles = append(diffTestFiles, diffTestFile)
ctx.Phony("soong_generated_init_boot_filesystem_test", diffTestFile)
}
+ if f.properties.Super_image != "" {
+ diffTestFile := android.PathForModuleOut(ctx, "super_diff_test.txt")
+ soongSuperImg := android.PathForModuleSrc(ctx, f.properties.Super_image)
+ makeSuperImage := android.PathForArbitraryOutput(ctx, fmt.Sprintf("target/product/%s/super.img", ctx.Config().DeviceName()))
+ createDiffTest(ctx, diffTestFile, soongSuperImg, makeSuperImage)
+ diffTestFiles = append(diffTestFiles, diffTestFile)
+ ctx.Phony("soong_generated_super_filesystem_test", diffTestFile)
+ }
ctx.Phony("soong_generated_filesystem_tests", diffTestFiles...)
}
diff --git a/fsgen/super_img.go b/fsgen/super_img.go
new file mode 100644
index 0000000..8ee3bf2
--- /dev/null
+++ b/fsgen/super_img.go
@@ -0,0 +1,91 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package fsgen
+
+import (
+ "strconv"
+
+ "android/soong/android"
+ "android/soong/filesystem"
+ "github.com/google/blueprint/proptools"
+)
+
+func buildingSuperImage(partitionVars android.PartitionVariables) bool {
+ return partitionVars.ProductBuildSuperPartition
+}
+
+func createSuperImage(ctx android.LoadHookContext, partitions []string, partitionVars android.PartitionVariables) {
+ baseProps := &struct {
+ Name *string
+ }{
+ Name: proptools.StringPtr(generatedModuleName(ctx.Config(), "super")),
+ }
+
+ superImageProps := &filesystem.SuperImageProperties{
+ Metadata_device: proptools.StringPtr(partitionVars.BoardSuperPartitionMetadataDevice),
+ Block_devices: partitionVars.BoardSuperPartitionBlockDevices,
+ Ab_update: proptools.BoolPtr(partitionVars.AbOtaUpdater),
+ Retrofit: proptools.BoolPtr(partitionVars.ProductRetrofitDynamicPartitions),
+ Virtual_ab: proptools.BoolPtr(partitionVars.ProductVirtualAbOta),
+ Virtual_ab_retrofit: proptools.BoolPtr(partitionVars.ProductVirtualAbOtaRetrofit),
+ Use_dynamic_partitions: proptools.BoolPtr(partitionVars.ProductUseDynamicPartitions),
+ }
+ size, _ := strconv.ParseInt(partitionVars.BoardSuperPartitionSize, 10, 64)
+ superImageProps.Size = proptools.Int64Ptr(size)
+ sparse := !partitionVars.TargetUserimagesSparseExtDisabled && !partitionVars.TargetUserimagesSparseF2fsDisabled
+ superImageProps.Sparse = proptools.BoolPtr(sparse)
+
+ var partitionGroupsInfo []filesystem.PartitionGroupsInfo
+ for _, groupName := range android.SortedKeys(partitionVars.BoardSuperPartitionGroups) {
+ info := filesystem.PartitionGroupsInfo{
+ Name: groupName,
+ GroupSize: partitionVars.BoardSuperPartitionGroups[groupName].GroupSize,
+ PartitionList: partitionVars.BoardSuperPartitionGroups[groupName].PartitionList,
+ }
+ partitionGroupsInfo = append(partitionGroupsInfo, info)
+ }
+ superImageProps.Partition_groups = partitionGroupsInfo
+
+ partitionNameProps := &filesystem.SuperImagePartitionNameProperties{}
+ if android.InList("system", partitions) {
+ partitionNameProps.System_partition = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "system"))
+ }
+ if android.InList("system_ext", partitions) {
+ partitionNameProps.System_ext_partition = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "system_ext"))
+ }
+ if android.InList("system_dlkm", partitions) {
+ partitionNameProps.System_dlkm_partition = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "system_dlkm"))
+ }
+ if android.InList("system_other", partitions) {
+ partitionNameProps.System_other_partition = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "system_other"))
+ }
+ if android.InList("product", partitions) {
+ partitionNameProps.Product_partition = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "product"))
+ }
+ if android.InList("vendor", partitions) {
+ partitionNameProps.Vendor_partition = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "vendor"))
+ }
+ if android.InList("vendor_dlkm", partitions) {
+ partitionNameProps.Vendor_dlkm_partition = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "vendor_dlkm"))
+ }
+ if android.InList("odm", partitions) {
+ partitionNameProps.Odm_partition = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "odm"))
+ }
+ if android.InList("odm_dlkm", partitions) {
+ partitionNameProps.Odm_dlkm_partition = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "odm_dlkm"))
+ }
+
+ ctx.CreateModule(filesystem.SuperImageFactory, baseProps, superImageProps, partitionNameProps)
+}
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...).