Revert "Auto generate prebuilt_* modules from PRODUCT_COPY_FILES"

This reverts commit 235b13b93ebcb17c083aac383fc61b49fdea564d.

Reason for revert: Droidmonitor created revert due to build breakages in b/377373443. Will be verifying through ABTD before submission.

Change-Id: I910aac3738bebf85ee088e78b682b96d2a64042f
diff --git a/fsgen/filesystem_creator.go b/fsgen/filesystem_creator.go
index 858e900..001cac8 100644
--- a/fsgen/filesystem_creator.go
+++ b/fsgen/filesystem_creator.go
@@ -24,7 +24,6 @@
 	"sync"
 
 	"android/soong/android"
-	"android/soong/etc"
 	"android/soong/filesystem"
 
 	"github.com/google/blueprint"
@@ -102,299 +101,24 @@
 	}
 }
 
-type srcBaseFileInstallBaseFileTuple struct {
-	srcBaseFile     string
-	installBaseFile string
-}
-
-// prebuilt src files grouped by the install partitions.
-// Each groups are a mapping of the relative install path to the name of the files
-type prebuiltSrcGroupByInstallPartition struct {
-	system     map[string][]srcBaseFileInstallBaseFileTuple
-	system_ext map[string][]srcBaseFileInstallBaseFileTuple
-	product    map[string][]srcBaseFileInstallBaseFileTuple
-	vendor     map[string][]srcBaseFileInstallBaseFileTuple
-}
-
-func newPrebuiltSrcGroupByInstallPartition() *prebuiltSrcGroupByInstallPartition {
-	return &prebuiltSrcGroupByInstallPartition{
-		system:     map[string][]srcBaseFileInstallBaseFileTuple{},
-		system_ext: map[string][]srcBaseFileInstallBaseFileTuple{},
-		product:    map[string][]srcBaseFileInstallBaseFileTuple{},
-		vendor:     map[string][]srcBaseFileInstallBaseFileTuple{},
-	}
-}
-
-func isSubdirectory(parent, child string) bool {
-	rel, err := filepath.Rel(parent, child)
-	if err != nil {
-		return false
-	}
-	return !strings.HasPrefix(rel, "..")
-}
-
-func appendIfCorrectInstallPartition(partitionToInstallPathList []partitionToInstallPath, destPath, srcPath string, srcGroup *prebuiltSrcGroupByInstallPartition) {
-	for _, part := range partitionToInstallPathList {
-		partition := part.name
-		installPath := part.installPath
-
-		if isSubdirectory(installPath, destPath) {
-			relativeInstallPath, _ := filepath.Rel(installPath, destPath)
-			relativeInstallDir := filepath.Dir(relativeInstallPath)
-			var srcMap map[string][]srcBaseFileInstallBaseFileTuple
-			switch partition {
-			case "system":
-				srcMap = srcGroup.system
-			case "system_ext":
-				srcMap = srcGroup.system_ext
-			case "product":
-				srcMap = srcGroup.product
-			case "vendor":
-				srcMap = srcGroup.vendor
-			}
-			if srcMap != nil {
-				srcMap[relativeInstallDir] = append(srcMap[relativeInstallDir], srcBaseFileInstallBaseFileTuple{
-					srcBaseFile:     filepath.Base(srcPath),
-					installBaseFile: filepath.Base(destPath),
-				})
-			}
-			return
-		}
-	}
-}
-
-func uniqueExistingProductCopyFileMap(ctx android.LoadHookContext) map[string]string {
-	seen := make(map[string]bool)
-	filtered := make(map[string]string)
-
-	for src, dest := range ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse.ProductCopyFiles {
-		if _, ok := seen[dest]; !ok {
-			if optionalPath := android.ExistentPathForSource(ctx, src); optionalPath.Valid() {
-				seen[dest] = true
-				filtered[src] = dest
-			}
-		}
-	}
-
-	return filtered
-}
-
-type partitionToInstallPath struct {
-	name        string
-	installPath string
-}
-
-func processProductCopyFiles(ctx android.LoadHookContext) map[string]*prebuiltSrcGroupByInstallPartition {
-	// Filter out duplicate dest entries and non existing src entries
-	productCopyFileMap := uniqueExistingProductCopyFileMap(ctx)
-
-	// System is intentionally added at the last to consider the scenarios where
-	// non-system partitions are installed as part of the system partition
-	partitionToInstallPathList := []partitionToInstallPath{
-		{name: "vendor", installPath: ctx.DeviceConfig().VendorPath()},
-		{name: "product", installPath: ctx.DeviceConfig().ProductPath()},
-		{name: "system_ext", installPath: ctx.DeviceConfig().SystemExtPath()},
-		{name: "system", installPath: "system"},
-	}
-
-	groupedSources := map[string]*prebuiltSrcGroupByInstallPartition{}
-	for _, src := range android.SortedKeys(productCopyFileMap) {
-		dest := productCopyFileMap[src]
-		srcFileDir := filepath.Dir(src)
-		if _, ok := groupedSources[srcFileDir]; !ok {
-			groupedSources[srcFileDir] = newPrebuiltSrcGroupByInstallPartition()
-		}
-		appendIfCorrectInstallPartition(partitionToInstallPathList, dest, filepath.Base(src), groupedSources[srcFileDir])
-	}
-
-	return groupedSources
-}
-
-type prebuiltModuleProperties struct {
-	Name *string
-
-	Soc_specific        *bool
-	Product_specific    *bool
-	System_ext_specific *bool
-
-	Srcs []string
-	Dsts []string
-
-	No_full_install *bool
-
-	NamespaceExportedToMake bool
-
-	Visibility []string
-}
-
-// Split relative_install_path to a separate struct, because it is not supported for every
-// modules listed in [etcInstallPathToFactoryMap]
-type prebuiltSubdirProperties struct {
-	// If the base file name of the src and dst all match, dsts property does not need to be
-	// set, and only relative_install_path can be set.
-	Relative_install_path *string
-}
-
-var (
-	etcInstallPathToFactoryList = map[string]android.ModuleFactory{
-		"":                etc.PrebuiltRootFactory,
-		"avb":             etc.PrebuiltAvbFactory,
-		"bin":             etc.PrebuiltBinaryFactory,
-		"cacerts":         etc.PrebuiltEtcCaCertsFactory,
-		"dsp":             etc.PrebuiltDSPFactory,
-		"etc":             etc.PrebuiltEtcFactory,
-		"etc/dsp":         etc.PrebuiltDSPFactory,
-		"etc/firmware":    etc.PrebuiltFirmwareFactory,
-		"firmware":        etc.PrebuiltFirmwareFactory,
-		"fonts":           etc.PrebuiltFontFactory,
-		"framework":       etc.PrebuiltFrameworkFactory,
-		"lib":             etc.PrebuiltRenderScriptBitcodeFactory,
-		"lib64":           etc.PrebuiltRenderScriptBitcodeFactory,
-		"lib/rfsa":        etc.PrebuiltRFSAFactory,
-		"media":           etc.PrebuiltMediaFactory,
-		"odm":             etc.PrebuiltOdmFactory,
-		"overlay":         etc.PrebuiltOverlayFactory,
-		"priv-app":        etc.PrebuiltPrivAppFactory,
-		"res":             etc.PrebuiltResFactory,
-		"rfs":             etc.PrebuiltRfsFactory,
-		"tts":             etc.PrebuiltVoicepackFactory,
-		"usr/share":       etc.PrebuiltUserShareFactory,
-		"usr/hyphen-data": etc.PrebuiltUserHyphenDataFactory,
-		"usr/keylayout":   etc.PrebuiltUserKeyLayoutFactory,
-		"usr/keychars":    etc.PrebuiltUserKeyCharsFactory,
-		"usr/srec":        etc.PrebuiltUserSrecFactory,
-		"usr/idc":         etc.PrebuiltUserIdcFactory,
-		"wallpaper":       etc.PrebuiltWallpaperFactory,
-		"wlc_upt":         etc.PrebuiltWlcUptFactory,
-	}
-)
-
-func createPrebuiltEtcModule(ctx android.LoadHookContext, partition, srcDir, destDir string, destFiles []srcBaseFileInstallBaseFileTuple) string {
-	moduleProps := &prebuiltModuleProperties{}
-	propsList := []interface{}{moduleProps}
-
-	// generated module name follows the pattern:
-	// <install partition>-<src file path>-<relative install path from partition root>-<install file extension>
-	// Note that all path separators are replaced with "_" in the name
-	moduleName := partition
-	if !android.InList(srcDir, []string{"", "."}) {
-		moduleName += fmt.Sprintf("-%s", strings.ReplaceAll(srcDir, string(filepath.Separator), "_"))
-	}
-	if !android.InList(destDir, []string{"", "."}) {
-		moduleName += fmt.Sprintf("-%s", strings.ReplaceAll(destDir, string(filepath.Separator), "_"))
-	}
-	if len(destFiles) > 0 {
-		if ext := filepath.Ext(destFiles[0].srcBaseFile); ext != "" {
-			moduleName += fmt.Sprintf("-%s", strings.TrimPrefix(ext, "."))
-		}
-	}
-	moduleProps.Name = proptools.StringPtr(moduleName)
-
-	allCopyFileNamesUnchanged := true
-	var srcBaseFiles, installBaseFiles []string
-	for _, tuple := range destFiles {
-		if tuple.srcBaseFile != tuple.installBaseFile {
-			allCopyFileNamesUnchanged = false
-		}
-		srcBaseFiles = append(srcBaseFiles, tuple.srcBaseFile)
-		installBaseFiles = append(installBaseFiles, tuple.installBaseFile)
-	}
-
-	// Find out the most appropriate module type to generate
-	var etcInstallPathKey string
-	for _, etcInstallPath := range android.SortedKeys(etcInstallPathToFactoryList) {
-		// Do not break when found but iterate until the end to find a module with more
-		// specific install path
-		if strings.HasPrefix(destDir, etcInstallPath) {
-			etcInstallPathKey = etcInstallPath
-		}
-	}
-	destDir, _ = filepath.Rel(etcInstallPathKey, destDir)
-
-	// Set partition specific properties
-	switch partition {
-	case "system_ext":
-		moduleProps.System_ext_specific = proptools.BoolPtr(true)
-	case "product":
-		moduleProps.Product_specific = proptools.BoolPtr(true)
-	case "vendor":
-		moduleProps.Soc_specific = proptools.BoolPtr(true)
-	}
-
-	// Set appropriate srcs, dsts, and releative_install_path based on
-	// the source and install file names
-	if allCopyFileNamesUnchanged {
-		moduleProps.Srcs = srcBaseFiles
-
-		// Specify relative_install_path if it is not installed in the root directory of the
-		// partition
-		if !android.InList(destDir, []string{"", "."}) {
-			propsList = append(propsList, &prebuiltSubdirProperties{
-				Relative_install_path: proptools.StringPtr(destDir),
-			})
-		}
-	} else {
-		moduleProps.Srcs = srcBaseFiles
-		dsts := []string{}
-		for _, installBaseFile := range installBaseFiles {
-			dsts = append(dsts, filepath.Join(destDir, installBaseFile))
-		}
-		moduleProps.Dsts = dsts
-	}
-
-	moduleProps.No_full_install = proptools.BoolPtr(true)
-	moduleProps.NamespaceExportedToMake = true
-	moduleProps.Visibility = []string{"//visibility:public"}
-
-	ctx.CreateModuleInDirectory(etcInstallPathToFactoryList[etcInstallPathKey], srcDir, propsList...)
-
-	return moduleName
-}
-
-func createPrebuiltEtcModulesForPartition(ctx android.LoadHookContext, partition, srcDir string, destDirFilesMap map[string][]srcBaseFileInstallBaseFileTuple) (ret []string) {
-	for _, destDir := range android.SortedKeys(destDirFilesMap) {
-		ret = append(ret, createPrebuiltEtcModule(ctx, partition, srcDir, destDir, destDirFilesMap[destDir]))
-	}
-	return ret
-}
-
-// Creates prebuilt_* modules based on the install paths and returns the list of generated
-// module names
-func createPrebuiltEtcModules(ctx android.LoadHookContext) (ret []string) {
-	groupedSources := processProductCopyFiles(ctx)
-	for _, srcDir := range android.SortedKeys(groupedSources) {
-		groupedSource := groupedSources[srcDir]
-		ret = append(ret, createPrebuiltEtcModulesForPartition(ctx, "system", srcDir, groupedSource.system)...)
-		ret = append(ret, createPrebuiltEtcModulesForPartition(ctx, "system_ext", srcDir, groupedSource.system_ext)...)
-		ret = append(ret, createPrebuiltEtcModulesForPartition(ctx, "product", srcDir, groupedSource.product)...)
-		ret = append(ret, createPrebuiltEtcModulesForPartition(ctx, "vendor", srcDir, groupedSource.vendor)...)
-	}
-
-	return ret
-}
-
-func generatedPartitions(ctx android.LoadHookContext) []string {
-	generatedPartitions := []string{"system"}
-	if ctx.DeviceConfig().SystemExtPath() == "system_ext" {
-		generatedPartitions = append(generatedPartitions, "system_ext")
-	}
-	if ctx.DeviceConfig().BuildingVendorImage() && ctx.DeviceConfig().VendorPath() == "vendor" {
-		generatedPartitions = append(generatedPartitions, "vendor")
-	}
-	if ctx.DeviceConfig().BuildingProductImage() && ctx.DeviceConfig().ProductPath() == "product" {
-		generatedPartitions = append(generatedPartitions, "product")
-	}
-	if ctx.DeviceConfig().BuildingOdmImage() && ctx.DeviceConfig().OdmPath() == "odm" {
-		generatedPartitions = append(generatedPartitions, "odm")
-	}
-	return generatedPartitions
-}
-
-func createFsGenState(ctx android.LoadHookContext, generatedPrebuiltEtcModuleNames []string) *FsGenState {
+func createFsGenState(ctx android.LoadHookContext) *FsGenState {
 	return ctx.Config().Once(fsGenStateOnceKey, func() interface{} {
 		partitionVars := ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse
 		candidates := android.FirstUniqueStrings(android.Concat(partitionVars.ProductPackages, partitionVars.ProductPackagesDebug))
-		candidates = android.Concat(candidates, generatedPrebuiltEtcModuleNames)
+
+		generatedPartitions := []string{"system"}
+		if ctx.DeviceConfig().SystemExtPath() == "system_ext" {
+			generatedPartitions = append(generatedPartitions, "system_ext")
+		}
+		if ctx.DeviceConfig().BuildingVendorImage() && ctx.DeviceConfig().VendorPath() == "vendor" {
+			generatedPartitions = append(generatedPartitions, "vendor")
+		}
+		if ctx.DeviceConfig().BuildingProductImage() && ctx.DeviceConfig().ProductPath() == "product" {
+			generatedPartitions = append(generatedPartitions, "product")
+		}
+		if ctx.DeviceConfig().BuildingOdmImage() && ctx.DeviceConfig().OdmPath() == "odm" {
+			generatedPartitions = append(generatedPartitions, "odm")
+		}
 
 		return &FsGenState{
 			depCandidates: candidates,
@@ -404,14 +128,19 @@
 					"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()),
-					"libclang_rt.asan":                          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()),
+					"idc_data":                     defaultDepCandidateProps(ctx.Config()),
+					"init.environ.rc-soong":        defaultDepCandidateProps(ctx.Config()),
+					"keychars_data":                defaultDepCandidateProps(ctx.Config()),
+					"keylayout_data":               defaultDepCandidateProps(ctx.Config()),
+					"libclang_rt.asan":             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()),
+					"preloaded-classes":            defaultDepCandidateProps(ctx.Config()),
+					"public.libraries.android.txt": defaultDepCandidateProps(ctx.Config()),
+					"update_engine_sideload":       defaultDepCandidateProps(ctx.Config()),
 				},
 				"vendor": &map[string]*depCandidateProps{
 					"fs_config_files_vendor":                               defaultDepCandidateProps(ctx.Config()),
@@ -436,7 +165,7 @@
 					"com.android.vndk.v34": defaultDepCandidateProps(ctx.Config()),
 				},
 			},
-			soongGeneratedPartitions:  generatedPartitions(ctx),
+			soongGeneratedPartitions:  generatedPartitions,
 			fsDepsMutex:               sync.Mutex{},
 			moduleToInstallationProps: map[string]installationProperties{},
 		}
@@ -649,8 +378,7 @@
 	android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon)
 	module.AddProperties(&module.properties)
 	android.AddLoadHook(module, func(ctx android.LoadHookContext) {
-		generatedPrebuiltEtcModuleNames := createPrebuiltEtcModules(ctx)
-		createFsGenState(ctx, generatedPrebuiltEtcModuleNames)
+		createFsGenState(ctx)
 		module.createInternalModules(ctx)
 	})