diff options
Diffstat (limited to 'fsgen/filesystem_creator.go')
-rw-r--r-- | fsgen/filesystem_creator.go | 113 |
1 files changed, 74 insertions, 39 deletions
diff --git a/fsgen/filesystem_creator.go b/fsgen/filesystem_creator.go index ed0c390ba..8acc74c27 100644 --- a/fsgen/filesystem_creator.go +++ b/fsgen/filesystem_creator.go @@ -43,36 +43,52 @@ func registerBuildComponents(ctx android.RegistrationContext) { func RegisterCollectFileSystemDepsMutators(ctx android.RegisterMutatorsContext) { ctx.BottomUp("fs_collect_deps", collectDepsMutator).MutatesGlobalState() + ctx.BottomUp("fs_set_deps", setDepsMutator) } var fsDepsMutex = sync.Mutex{} var collectFsDepsOnceKey = android.NewOnceKey("CollectFsDeps") var depCandidatesOnceKey = android.NewOnceKey("DepCandidates") +// List of partitions that the filesystem_creator module currently generates the partition +var soongGeneratedPartitions = []string{"system"} + +// Map of partition module name to its partition that may be generated by Soong. +// Note that it is not guaranteed that all modules returned by this function are successfully +// created. +func getAllSoongGeneratedPartitionNames(config android.Config) map[string]string { + ret := map[string]string{} + for _, partition := range soongGeneratedPartitions { + ret[generatedModuleNameForPartition(config, partition)] = partition + } + return ret +} + func collectDepsMutator(mctx android.BottomUpMutatorContext) { // These additional deps are added according to the cuttlefish system image bp. fsDeps := mctx.Config().Once(collectFsDepsOnceKey, func() interface{} { - deps := []string{ - "android_vintf_manifest", - "com.android.apex.cts.shim.v1_prebuilt", - "dex_bootjars", - "framework_compatibility_matrix.device.xml", - "idc_data", - "init.environ.rc-soong", - "keychars_data", - "keylayout_data", - "libclang_rt.asan", - "libcompiler_rt", - "libdmabufheap", - "libgsi", - "llndk.libraries.txt", - "logpersist.start", - "preloaded-classes", - "public.libraries.android.txt", - "update_engine_sideload", + deps := map[string][]string{ + "system": { + "com.android.apex.cts.shim.v1_prebuilt", + "dex_bootjars", + "framework_compatibility_matrix.device.xml", + "idc_data", + "init.environ.rc-soong", + "keychars_data", + "keylayout_data", + "libclang_rt.asan", + "libcompiler_rt", + "libdmabufheap", + "libgsi", + "llndk.libraries.txt", + "logpersist.start", + "preloaded-classes", + "public.libraries.android.txt", + "update_engine_sideload", + }, } return &deps - }).(*[]string) + }).(*map[string][]string) depCandidates := mctx.Config().Once(depCandidatesOnceKey, func() interface{} { partitionVars := mctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse @@ -82,10 +98,30 @@ func collectDepsMutator(mctx android.BottomUpMutatorContext) { m := mctx.Module() if slices.Contains(*depCandidates, m.Name()) { - if installInSystem(mctx, m) { - fsDepsMutex.Lock() - *fsDeps = append(*fsDeps, m.Name()) - fsDepsMutex.Unlock() + installPartition := getInstallPartition(m, mctx.DeviceConfig()) + fsDepsMutex.Lock() + if _, ok := (*fsDeps)[installPartition]; !ok { + (*fsDeps)[installPartition] = make([]string, 0) + } + if m.Enabled(mctx) { + (*fsDeps)[installPartition] = append((*fsDeps)[installPartition], m.Name()) + } + fsDepsMutex.Unlock() + } +} + +type depsStruct struct { + Deps []string +} + +func setDepsMutator(mctx android.BottomUpMutatorContext) { + fsDeps := mctx.Config().Get(collectFsDepsOnceKey).(*map[string][]string) + soongGeneratedPartitionMap := getAllSoongGeneratedPartitionNames(mctx.Config()) + m := mctx.Module() + if partition, ok := soongGeneratedPartitionMap[m.Name()]; ok { + deps := (*fsDeps)[partition] + if err := proptools.AppendMatchingProperties(m.GetProperties(), &depsStruct{Deps: deps}, nil); err != nil { + mctx.ModuleErrorf(err.Error()) } } } @@ -114,7 +150,7 @@ func filesystemCreatorFactory() android.Module { } func (f *filesystemCreator) createInternalModules(ctx android.LoadHookContext) { - for _, partitionType := range []string{"system"} { + for _, partitionType := range soongGeneratedPartitions { if f.createPartition(ctx, partitionType) { f.properties.Generated_partition_types = append(f.properties.Generated_partition_types, partitionType) } else { @@ -124,7 +160,7 @@ func (f *filesystemCreator) createInternalModules(ctx android.LoadHookContext) { f.createDeviceModule(ctx) } -func (f *filesystemCreator) generatedModuleName(cfg android.Config, suffix string) string { +func generatedModuleName(cfg android.Config, suffix string) string { prefix := "soong" if cfg.HasDeviceProduct() { prefix = cfg.DeviceProduct() @@ -132,21 +168,21 @@ func (f *filesystemCreator) generatedModuleName(cfg android.Config, suffix strin return fmt.Sprintf("%s_generated_%s", prefix, suffix) } -func (f *filesystemCreator) generatedModuleNameForPartition(cfg android.Config, partitionType string) string { - return f.generatedModuleName(cfg, fmt.Sprintf("%s_image", partitionType)) +func generatedModuleNameForPartition(cfg android.Config, partitionType string) string { + return generatedModuleName(cfg, fmt.Sprintf("%s_image", partitionType)) } func (f *filesystemCreator) createDeviceModule(ctx android.LoadHookContext) { baseProps := &struct { Name *string }{ - Name: proptools.StringPtr(f.generatedModuleName(ctx.Config(), "device")), + Name: proptools.StringPtr(generatedModuleName(ctx.Config(), "device")), } // Currently, only the system partition module is created. partitionProps := &filesystem.PartitionNameProperties{} if android.InList("system", f.properties.Generated_partition_types) { - partitionProps.System_partition_name = proptools.StringPtr(f.generatedModuleNameForPartition(ctx.Config(), "system")) + partitionProps.System_partition_name = proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), "system")) } ctx.CreateModule(filesystem.AndroidDeviceFactory, baseProps, partitionProps) @@ -158,7 +194,7 @@ func (f *filesystemCreator) createPartition(ctx android.LoadHookContext, partiti baseProps := &struct { Name *string }{ - Name: proptools.StringPtr(f.generatedModuleNameForPartition(ctx.Config(), partitionType)), + Name: proptools.StringPtr(generatedModuleNameForPartition(ctx.Config(), partitionType)), } fsProps := &filesystem.FilesystemProperties{} @@ -195,6 +231,8 @@ func (f *filesystemCreator) createPartition(ctx android.LoadHookContext, partiti fsProps.Gen_aconfig_flags_pb = proptools.BoolPtr(true) + fsProps.Is_auto_generated = proptools.BoolPtr(true) + // Identical to that of the generic_system_image fsProps.Fsverity.Inputs = []string{ "etc/boot-image.prof", @@ -229,7 +267,7 @@ func (f *filesystemCreator) createPartition(ctx android.LoadHookContext, partiti } func (f *filesystemCreator) createDiffTest(ctx android.ModuleContext, partitionType string) android.Path { - partitionModuleName := f.generatedModuleNameForPartition(ctx.Config(), partitionType) + partitionModuleName := generatedModuleNameForPartition(ctx.Config(), partitionType) systemImage := ctx.GetDirectDepWithTag(partitionModuleName, generatedFilesystemDepTag) filesystemInfo, ok := android.OtherModuleProvider(ctx, systemImage, filesystem.FilesystemProvider) if !ok { @@ -273,7 +311,7 @@ var generatedFilesystemDepTag systemImageDepTagType func (f *filesystemCreator) DepsMutator(ctx android.BottomUpMutatorContext) { for _, partitionType := range f.properties.Generated_partition_types { - ctx.AddDependency(ctx.Module(), generatedFilesystemDepTag, f.generatedModuleNameForPartition(ctx.Config(), partitionType)) + ctx.AddDependency(ctx.Module(), generatedFilesystemDepTag, generatedModuleNameForPartition(ctx.Config(), partitionType)) } } @@ -298,11 +336,8 @@ func (f *filesystemCreator) GenerateAndroidBuildActions(ctx android.ModuleContex ctx.Phony("soong_generated_filesystem_tests", diffTestFiles...) } -func installInSystem(ctx android.BottomUpMutatorContext, m android.Module) bool { - return m.PartitionTag(ctx.DeviceConfig()) == "system" && !m.InstallInData() && - !m.InstallInTestcases() && !m.InstallInSanitizerDir() && !m.InstallInVendorRamdisk() && - !m.InstallInDebugRamdisk() && !m.InstallInRecovery() && !m.InstallInOdm() && - !m.InstallInVendor() +func getInstallPartition(m android.Module, config android.DeviceConfig) string { + return m.PartitionTag(config) } // TODO: assemble baseProps and fsProps here @@ -312,9 +347,9 @@ func generateBpContent(ctx android.EarlyModuleContext, partitionType string) str return "" } - deps := ctx.Config().Get(collectFsDepsOnceKey).(*[]string) + deps := ctx.Config().Get(collectFsDepsOnceKey).(*map[string][]string) depProps := &android.PackagingProperties{ - Deps: android.NewSimpleConfigurable(android.SortedUniqueStrings(*deps)), + Deps: android.NewSimpleConfigurable(android.SortedUniqueStrings((*deps)[partitionType])), } result, err := proptools.RepackProperties([]interface{}{depProps}) |