diff options
Diffstat (limited to 'java/android_resources.go')
-rw-r--r-- | java/android_resources.go | 82 |
1 files changed, 32 insertions, 50 deletions
diff --git a/java/android_resources.go b/java/android_resources.go index 8c5908f69..038a260d9 100644 --- a/java/android_resources.go +++ b/java/android_resources.go @@ -21,14 +21,6 @@ import ( "android/soong/android" ) -func init() { - registerOverlayBuildComponents(android.InitRegistrationContext) -} - -func registerOverlayBuildComponents(ctx android.RegistrationContext) { - ctx.RegisterPreSingletonType("overlay", OverlaySingletonFactory) -} - var androidResourceIgnoreFilenames = []string{ ".svn", ".git", @@ -84,7 +76,38 @@ type globbedResourceDir struct { func overlayResourceGlob(ctx android.ModuleContext, a *aapt, dir android.Path) (res []globbedResourceDir, rroDirs []rroDir) { - overlayData := ctx.Config().Get(overlayDataKey).([]overlayGlobResult) + overlayData := ctx.Config().Once(overlayDataKey, func() interface{} { + var overlayData []overlayGlobResult + + appendOverlayData := func(overlayDirs []string, t overlayType) { + for i := range overlayDirs { + // Iterate backwards through the list of overlay directories so that the later, lower-priority + // directories in the list show up earlier in the command line to aapt2. + overlay := overlayDirs[len(overlayDirs)-1-i] + var result overlayGlobResult + result.dir = overlay + result.overlayType = t + + files, err := ctx.GlobWithDeps(filepath.Join(overlay, "**/*"), androidResourceIgnoreFilenames) + if err != nil { + ctx.ModuleErrorf("failed to glob resource dir %q: %s", overlay, err.Error()) + continue + } + var paths android.Paths + for _, f := range files { + if !strings.HasSuffix(f, "/") { + paths = append(paths, android.PathForSource(ctx, f)) + } + } + result.paths = android.PathsToDirectorySortedPaths(paths) + overlayData = append(overlayData, result) + } + } + + appendOverlayData(ctx.Config().DeviceResourceOverlays(), device) + appendOverlayData(ctx.Config().ProductResourceOverlays(), product) + return overlayData + }).([]overlayGlobResult) // Runtime resource overlays (RRO) may be turned on by the product config for some modules rroEnabled := a.IsRROEnforced(ctx) @@ -110,44 +133,3 @@ func overlayResourceGlob(ctx android.ModuleContext, a *aapt, dir android.Path) ( return res, rroDirs } - -func OverlaySingletonFactory() android.Singleton { - return overlaySingleton{} -} - -type overlaySingleton struct{} - -func (overlaySingleton) GenerateBuildActions(ctx android.SingletonContext) { - var overlayData []overlayGlobResult - - appendOverlayData := func(overlayDirs []string, t overlayType) { - for i := range overlayDirs { - // Iterate backwards through the list of overlay directories so that the later, lower-priority - // directories in the list show up earlier in the command line to aapt2. - overlay := overlayDirs[len(overlayDirs)-1-i] - var result overlayGlobResult - result.dir = overlay - result.overlayType = t - - files, err := ctx.GlobWithDeps(filepath.Join(overlay, "**/*"), androidResourceIgnoreFilenames) - if err != nil { - ctx.Errorf("failed to glob resource dir %q: %s", overlay, err.Error()) - continue - } - var paths android.Paths - for _, f := range files { - if !strings.HasSuffix(f, "/") { - paths = append(paths, android.PathForSource(ctx, f)) - } - } - result.paths = android.PathsToDirectorySortedPaths(paths) - overlayData = append(overlayData, result) - } - } - - appendOverlayData(ctx.Config().DeviceResourceOverlays(), device) - appendOverlayData(ctx.Config().ProductResourceOverlays(), product) - ctx.Config().Once(overlayDataKey, func() interface{} { - return overlayData - }) -} |