Loading android/config.go +14 −10 Original line number Diff line number Diff line Loading @@ -897,27 +897,31 @@ func (c *config) ModulesLoadedByPrivilegedModules() []string { } // Expected format for apexJarValue = <apex name>:<jar name> func SplitApexJarPair(apexJarValue string) (string, string) { var apexJarPair []string = strings.SplitN(apexJarValue, ":", 2) if apexJarPair == nil || len(apexJarPair) != 2 { panic(fmt.Errorf("malformed apexJarValue: %q, expected format: <apex>:<jar>", apexJarValue)) func SplitApexJarPair(ctx PathContext, str string) (string, string) { pair := strings.SplitN(str, ":", 2) if len(pair) == 2 { return pair[0], pair[1] } else { reportPathErrorf(ctx, "malformed (apex, jar) pair: '%s', expected format: <apex>:<jar>", str) return "error-apex", "error-jar" } return apexJarPair[0], apexJarPair[1] } func GetJarsFromApexJarPairs(apexJarPairs []string) []string { func GetJarsFromApexJarPairs(ctx PathContext, apexJarPairs []string) []string { modules := make([]string, len(apexJarPairs)) for i, p := range apexJarPairs { _, jar := SplitApexJarPair(p) _, jar := SplitApexJarPair(ctx, p) modules[i] = jar } return modules } func (c *config) BootJars() []string { return append(GetJarsFromApexJarPairs(c.productVariables.BootJars), GetJarsFromApexJarPairs(c.productVariables.UpdatableBootJars)...) ctx := NullPathContext{Config{ config: c, }} return append(GetJarsFromApexJarPairs(ctx, c.productVariables.BootJars), GetJarsFromApexJarPairs(ctx, c.productVariables.UpdatableBootJars)...) } func (c *config) DexpreoptGlobalConfig(ctx PathContext) ([]byte, error) { Loading android/paths.go +8 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,14 @@ type PathGlobContext interface { var _ PathContext = SingletonContext(nil) var _ PathContext = ModuleContext(nil) // "Null" path context is a minimal path context for a given config. type NullPathContext struct { config Config } func (NullPathContext) AddNinjaFileDeps(...string) {} func (ctx NullPathContext) Config() Config { return ctx.config } type ModuleInstallPathContext interface { BaseModuleContext Loading dexpreopt/dexpreopt.go +6 −6 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ func GenerateDexpreoptRule(ctx android.PathContext, globalSoong *GlobalSoongConf if !dexpreoptDisabled(ctx, global, module) { // Don't preopt individual boot jars, they will be preopted together. if !contains(android.GetJarsFromApexJarPairs(global.BootJars), module.Name) { if !contains(android.GetJarsFromApexJarPairs(ctx, global.BootJars), module.Name) { appImage := (generateProfile || module.ForceCreateAppImage || global.DefaultAppImages) && !module.NoCreateAppImage Loading @@ -104,7 +104,7 @@ func dexpreoptDisabled(ctx android.PathContext, global *GlobalConfig, module *Mo // Don't preopt system server jars that are updatable. for _, p := range global.UpdatableSystemServerJars { if _, jar := android.SplitApexJarPair(p); jar == module.Name { if _, jar := android.SplitApexJarPair(ctx, p); jar == module.Name { return true } } Loading @@ -113,7 +113,7 @@ func dexpreoptDisabled(ctx android.PathContext, global *GlobalConfig, module *Mo // Also preopt system server jars since selinux prevents system server from loading anything from // /data. If we don't do this they will need to be extracted which is not favorable for RAM usage // or performance. If PreoptExtractedApk is true, we ignore the only preopt boot image options. if global.OnlyPreoptBootImageAndSystemServer && !contains(android.GetJarsFromApexJarPairs(global.BootJars), module.Name) && if global.OnlyPreoptBootImageAndSystemServer && !contains(android.GetJarsFromApexJarPairs(ctx, global.BootJars), module.Name) && !contains(global.SystemServerJars, module.Name) && !module.PreoptExtractedApk { return true } Loading Loading @@ -561,8 +561,8 @@ func makefileMatch(pattern, s string) bool { } // Expected format for apexJarValue = <apex name>:<jar name> func GetJarLocationFromApexJarPair(apexJarValue string) string { apex, jar := android.SplitApexJarPair(apexJarValue) func GetJarLocationFromApexJarPair(ctx android.PathContext, apexJarValue string) string { apex, jar := android.SplitApexJarPair(ctx, apexJarValue) return filepath.Join("/apex", apex, "javalib", jar+".jar") } Loading @@ -573,7 +573,7 @@ var nonUpdatableSystemServerJarsKey = android.NewOnceKey("nonUpdatableSystemServ func NonUpdatableSystemServerJars(ctx android.PathContext, global *GlobalConfig) []string { return ctx.Config().Once(nonUpdatableSystemServerJarsKey, func() interface{} { return android.RemoveListFromList(global.SystemServerJars, android.GetJarsFromApexJarPairs(global.UpdatableSystemServerJars)) android.GetJarsFromApexJarPairs(ctx, global.UpdatableSystemServerJars)) }).([]string) } Loading java/dexpreopt_bootjars.go +8 −8 Original line number Diff line number Diff line Loading @@ -109,11 +109,11 @@ func (image bootImageConfig) getAnyAndroidVariant() *bootImageVariant { return nil } func (image bootImageConfig) moduleName(idx int) string { func (image bootImageConfig) moduleName(ctx android.PathContext, idx int) string { // Dexpreopt on the boot class path produces multiple files. The first dex file // is converted into 'name'.art (to match the legacy assumption that 'name'.art // exists), and the rest are converted to 'name'-<jar>.art. _, m := android.SplitApexJarPair(image.modules[idx]) _, m := android.SplitApexJarPair(ctx, image.modules[idx]) name := image.stem if idx != 0 || image.extends != nil { name += "-" + stemOf(m) Loading @@ -121,9 +121,9 @@ func (image bootImageConfig) moduleName(idx int) string { return name } func (image bootImageConfig) firstModuleNameOrStem() string { func (image bootImageConfig) firstModuleNameOrStem(ctx android.PathContext) string { if len(image.modules) > 0 { return image.moduleName(0) return image.moduleName(ctx, 0) } else { return image.stem } Loading @@ -132,7 +132,7 @@ func (image bootImageConfig) firstModuleNameOrStem() string { func (image bootImageConfig) moduleFiles(ctx android.PathContext, dir android.OutputPath, exts ...string) android.OutputPaths { ret := make(android.OutputPaths, 0, len(image.modules)*len(exts)) for i := range image.modules { name := image.moduleName(i) name := image.moduleName(ctx, i) for _, ext := range exts { ret = append(ret, dir.Join(ctx, name+ext)) } Loading Loading @@ -261,7 +261,7 @@ func getBootImageJar(ctx android.SingletonContext, image *bootImageConfig, modul } name := ctx.ModuleName(module) index := android.IndexList(name, android.GetJarsFromApexJarPairs(image.modules)) index := android.IndexList(name, android.GetJarsFromApexJarPairs(ctx, image.modules)) if index == -1 { return -1, nil } Loading Loading @@ -314,7 +314,7 @@ func buildBootImage(ctx android.SingletonContext, image *bootImageConfig) *bootI // Ensure all modules were converted to paths for i := range bootDexJars { if bootDexJars[i] == nil { _, m := android.SplitApexJarPair(image.modules[i]) _, m := android.SplitApexJarPair(ctx, image.modules[i]) if ctx.Config().AllowMissingDependencies() { missingDeps = append(missingDeps, m) bootDexJars[i] = android.PathForOutput(ctx, "missing") Loading Loading @@ -614,7 +614,7 @@ func updatableBcpPackagesRule(ctx android.SingletonContext, image *bootImageConf return ctx.Config().Once(updatableBcpPackagesRuleKey, func() interface{} { global := dexpreopt.GetGlobalConfig(ctx) updatableModules := android.GetJarsFromApexJarPairs(global.UpdatableBootJars) updatableModules := android.GetJarsFromApexJarPairs(ctx, global.UpdatableBootJars) // Collect `permitted_packages` for updatable boot jars. var updatablePackages []string Loading java/dexpreopt_config.go +5 −5 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ func systemServerClasspath(ctx android.MakeVarsContext) []string { // 2) The jars that are from an updatable apex. for _, m := range global.UpdatableSystemServerJars { systemServerClasspathLocations = append(systemServerClasspathLocations, dexpreopt.GetJarLocationFromApexJarPair(m)) dexpreopt.GetJarLocationFromApexJarPair(ctx, m)) } if len(systemServerClasspathLocations) != len(global.SystemServerJars)+len(global.UpdatableSystemServerJars) { panic(fmt.Errorf("Wrong number of system server jars, got %d, expected %d", Loading Loading @@ -80,7 +80,7 @@ func stemOf(moduleName string) string { } func getDexLocation(ctx android.PathContext, target android.Target, module string) string { apex, jar := android.SplitApexJarPair(module) apex, jar := android.SplitApexJarPair(ctx, module) name := stemOf(jar) + ".jar" Loading Loading @@ -156,7 +156,7 @@ func genBootImageConfigs(ctx android.PathContext) map[string]*bootImageConfig { c.symbolsDir = deviceDir.Join(ctx, "dex_"+c.name+"jars_unstripped") // expands to <stem>.art for primary image and <stem>-<1st module>.art for extension imageName := c.firstModuleNameOrStem() + ".art" imageName := c.firstModuleNameOrStem(ctx) + ".art" // The path to bootclasspath dex files needs to be known at module // GenerateAndroidBuildAction time, before the bootclasspath modules have been compiled. Loading @@ -164,7 +164,7 @@ func genBootImageConfigs(ctx android.PathContext) map[string]*bootImageConfig { // TODO(b/143682396): use module dependencies instead inputDir := deviceDir.Join(ctx, "dex_"+c.name+"jars_input") for _, m := range c.modules { _, jar := android.SplitApexJarPair(m) _, jar := android.SplitApexJarPair(ctx, m) c.dexPaths = append(c.dexPaths, inputDir.Join(ctx, stemOf(jar)+".jar")) } c.dexPathsDeps = c.dexPaths Loading Loading @@ -215,7 +215,7 @@ func defaultBootclasspath(ctx android.PathContext) []string { updatableBootclasspath := make([]string, len(global.UpdatableBootJars)) for i, p := range global.UpdatableBootJars { updatableBootclasspath[i] = dexpreopt.GetJarLocationFromApexJarPair(p) updatableBootclasspath[i] = dexpreopt.GetJarLocationFromApexJarPair(ctx, p) } bootclasspath := append(copyOf(image.getAnyAndroidVariant().dexLocationsDeps), updatableBootclasspath...) Loading Loading
android/config.go +14 −10 Original line number Diff line number Diff line Loading @@ -897,27 +897,31 @@ func (c *config) ModulesLoadedByPrivilegedModules() []string { } // Expected format for apexJarValue = <apex name>:<jar name> func SplitApexJarPair(apexJarValue string) (string, string) { var apexJarPair []string = strings.SplitN(apexJarValue, ":", 2) if apexJarPair == nil || len(apexJarPair) != 2 { panic(fmt.Errorf("malformed apexJarValue: %q, expected format: <apex>:<jar>", apexJarValue)) func SplitApexJarPair(ctx PathContext, str string) (string, string) { pair := strings.SplitN(str, ":", 2) if len(pair) == 2 { return pair[0], pair[1] } else { reportPathErrorf(ctx, "malformed (apex, jar) pair: '%s', expected format: <apex>:<jar>", str) return "error-apex", "error-jar" } return apexJarPair[0], apexJarPair[1] } func GetJarsFromApexJarPairs(apexJarPairs []string) []string { func GetJarsFromApexJarPairs(ctx PathContext, apexJarPairs []string) []string { modules := make([]string, len(apexJarPairs)) for i, p := range apexJarPairs { _, jar := SplitApexJarPair(p) _, jar := SplitApexJarPair(ctx, p) modules[i] = jar } return modules } func (c *config) BootJars() []string { return append(GetJarsFromApexJarPairs(c.productVariables.BootJars), GetJarsFromApexJarPairs(c.productVariables.UpdatableBootJars)...) ctx := NullPathContext{Config{ config: c, }} return append(GetJarsFromApexJarPairs(ctx, c.productVariables.BootJars), GetJarsFromApexJarPairs(ctx, c.productVariables.UpdatableBootJars)...) } func (c *config) DexpreoptGlobalConfig(ctx PathContext) ([]byte, error) { Loading
android/paths.go +8 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,14 @@ type PathGlobContext interface { var _ PathContext = SingletonContext(nil) var _ PathContext = ModuleContext(nil) // "Null" path context is a minimal path context for a given config. type NullPathContext struct { config Config } func (NullPathContext) AddNinjaFileDeps(...string) {} func (ctx NullPathContext) Config() Config { return ctx.config } type ModuleInstallPathContext interface { BaseModuleContext Loading
dexpreopt/dexpreopt.go +6 −6 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ func GenerateDexpreoptRule(ctx android.PathContext, globalSoong *GlobalSoongConf if !dexpreoptDisabled(ctx, global, module) { // Don't preopt individual boot jars, they will be preopted together. if !contains(android.GetJarsFromApexJarPairs(global.BootJars), module.Name) { if !contains(android.GetJarsFromApexJarPairs(ctx, global.BootJars), module.Name) { appImage := (generateProfile || module.ForceCreateAppImage || global.DefaultAppImages) && !module.NoCreateAppImage Loading @@ -104,7 +104,7 @@ func dexpreoptDisabled(ctx android.PathContext, global *GlobalConfig, module *Mo // Don't preopt system server jars that are updatable. for _, p := range global.UpdatableSystemServerJars { if _, jar := android.SplitApexJarPair(p); jar == module.Name { if _, jar := android.SplitApexJarPair(ctx, p); jar == module.Name { return true } } Loading @@ -113,7 +113,7 @@ func dexpreoptDisabled(ctx android.PathContext, global *GlobalConfig, module *Mo // Also preopt system server jars since selinux prevents system server from loading anything from // /data. If we don't do this they will need to be extracted which is not favorable for RAM usage // or performance. If PreoptExtractedApk is true, we ignore the only preopt boot image options. if global.OnlyPreoptBootImageAndSystemServer && !contains(android.GetJarsFromApexJarPairs(global.BootJars), module.Name) && if global.OnlyPreoptBootImageAndSystemServer && !contains(android.GetJarsFromApexJarPairs(ctx, global.BootJars), module.Name) && !contains(global.SystemServerJars, module.Name) && !module.PreoptExtractedApk { return true } Loading Loading @@ -561,8 +561,8 @@ func makefileMatch(pattern, s string) bool { } // Expected format for apexJarValue = <apex name>:<jar name> func GetJarLocationFromApexJarPair(apexJarValue string) string { apex, jar := android.SplitApexJarPair(apexJarValue) func GetJarLocationFromApexJarPair(ctx android.PathContext, apexJarValue string) string { apex, jar := android.SplitApexJarPair(ctx, apexJarValue) return filepath.Join("/apex", apex, "javalib", jar+".jar") } Loading @@ -573,7 +573,7 @@ var nonUpdatableSystemServerJarsKey = android.NewOnceKey("nonUpdatableSystemServ func NonUpdatableSystemServerJars(ctx android.PathContext, global *GlobalConfig) []string { return ctx.Config().Once(nonUpdatableSystemServerJarsKey, func() interface{} { return android.RemoveListFromList(global.SystemServerJars, android.GetJarsFromApexJarPairs(global.UpdatableSystemServerJars)) android.GetJarsFromApexJarPairs(ctx, global.UpdatableSystemServerJars)) }).([]string) } Loading
java/dexpreopt_bootjars.go +8 −8 Original line number Diff line number Diff line Loading @@ -109,11 +109,11 @@ func (image bootImageConfig) getAnyAndroidVariant() *bootImageVariant { return nil } func (image bootImageConfig) moduleName(idx int) string { func (image bootImageConfig) moduleName(ctx android.PathContext, idx int) string { // Dexpreopt on the boot class path produces multiple files. The first dex file // is converted into 'name'.art (to match the legacy assumption that 'name'.art // exists), and the rest are converted to 'name'-<jar>.art. _, m := android.SplitApexJarPair(image.modules[idx]) _, m := android.SplitApexJarPair(ctx, image.modules[idx]) name := image.stem if idx != 0 || image.extends != nil { name += "-" + stemOf(m) Loading @@ -121,9 +121,9 @@ func (image bootImageConfig) moduleName(idx int) string { return name } func (image bootImageConfig) firstModuleNameOrStem() string { func (image bootImageConfig) firstModuleNameOrStem(ctx android.PathContext) string { if len(image.modules) > 0 { return image.moduleName(0) return image.moduleName(ctx, 0) } else { return image.stem } Loading @@ -132,7 +132,7 @@ func (image bootImageConfig) firstModuleNameOrStem() string { func (image bootImageConfig) moduleFiles(ctx android.PathContext, dir android.OutputPath, exts ...string) android.OutputPaths { ret := make(android.OutputPaths, 0, len(image.modules)*len(exts)) for i := range image.modules { name := image.moduleName(i) name := image.moduleName(ctx, i) for _, ext := range exts { ret = append(ret, dir.Join(ctx, name+ext)) } Loading Loading @@ -261,7 +261,7 @@ func getBootImageJar(ctx android.SingletonContext, image *bootImageConfig, modul } name := ctx.ModuleName(module) index := android.IndexList(name, android.GetJarsFromApexJarPairs(image.modules)) index := android.IndexList(name, android.GetJarsFromApexJarPairs(ctx, image.modules)) if index == -1 { return -1, nil } Loading Loading @@ -314,7 +314,7 @@ func buildBootImage(ctx android.SingletonContext, image *bootImageConfig) *bootI // Ensure all modules were converted to paths for i := range bootDexJars { if bootDexJars[i] == nil { _, m := android.SplitApexJarPair(image.modules[i]) _, m := android.SplitApexJarPair(ctx, image.modules[i]) if ctx.Config().AllowMissingDependencies() { missingDeps = append(missingDeps, m) bootDexJars[i] = android.PathForOutput(ctx, "missing") Loading Loading @@ -614,7 +614,7 @@ func updatableBcpPackagesRule(ctx android.SingletonContext, image *bootImageConf return ctx.Config().Once(updatableBcpPackagesRuleKey, func() interface{} { global := dexpreopt.GetGlobalConfig(ctx) updatableModules := android.GetJarsFromApexJarPairs(global.UpdatableBootJars) updatableModules := android.GetJarsFromApexJarPairs(ctx, global.UpdatableBootJars) // Collect `permitted_packages` for updatable boot jars. var updatablePackages []string Loading
java/dexpreopt_config.go +5 −5 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ func systemServerClasspath(ctx android.MakeVarsContext) []string { // 2) The jars that are from an updatable apex. for _, m := range global.UpdatableSystemServerJars { systemServerClasspathLocations = append(systemServerClasspathLocations, dexpreopt.GetJarLocationFromApexJarPair(m)) dexpreopt.GetJarLocationFromApexJarPair(ctx, m)) } if len(systemServerClasspathLocations) != len(global.SystemServerJars)+len(global.UpdatableSystemServerJars) { panic(fmt.Errorf("Wrong number of system server jars, got %d, expected %d", Loading Loading @@ -80,7 +80,7 @@ func stemOf(moduleName string) string { } func getDexLocation(ctx android.PathContext, target android.Target, module string) string { apex, jar := android.SplitApexJarPair(module) apex, jar := android.SplitApexJarPair(ctx, module) name := stemOf(jar) + ".jar" Loading Loading @@ -156,7 +156,7 @@ func genBootImageConfigs(ctx android.PathContext) map[string]*bootImageConfig { c.symbolsDir = deviceDir.Join(ctx, "dex_"+c.name+"jars_unstripped") // expands to <stem>.art for primary image and <stem>-<1st module>.art for extension imageName := c.firstModuleNameOrStem() + ".art" imageName := c.firstModuleNameOrStem(ctx) + ".art" // The path to bootclasspath dex files needs to be known at module // GenerateAndroidBuildAction time, before the bootclasspath modules have been compiled. Loading @@ -164,7 +164,7 @@ func genBootImageConfigs(ctx android.PathContext) map[string]*bootImageConfig { // TODO(b/143682396): use module dependencies instead inputDir := deviceDir.Join(ctx, "dex_"+c.name+"jars_input") for _, m := range c.modules { _, jar := android.SplitApexJarPair(m) _, jar := android.SplitApexJarPair(ctx, m) c.dexPaths = append(c.dexPaths, inputDir.Join(ctx, stemOf(jar)+".jar")) } c.dexPathsDeps = c.dexPaths Loading Loading @@ -215,7 +215,7 @@ func defaultBootclasspath(ctx android.PathContext) []string { updatableBootclasspath := make([]string, len(global.UpdatableBootJars)) for i, p := range global.UpdatableBootJars { updatableBootclasspath[i] = dexpreopt.GetJarLocationFromApexJarPair(p) updatableBootclasspath[i] = dexpreopt.GetJarLocationFromApexJarPair(ctx, p) } bootclasspath := append(copyOf(image.getAnyAndroidVariant().dexLocationsDeps), updatableBootclasspath...) Loading