Merge "Use both module name and stem name to filter updatable boot jars" am: 276fd424ad
am: 31620af91d
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1748051 Change-Id: Ib0f336f1ee599d2cb8ed03af3caec2fb953a4878
This commit is contained in:
commit
59480e327e
3 changed files with 28 additions and 23 deletions
|
@ -532,27 +532,18 @@ func (b *BootclasspathFragmentModule) configuredJars(ctx android.ModuleContext)
|
||||||
|
|
||||||
global := dexpreopt.GetGlobalConfig(ctx)
|
global := dexpreopt.GetGlobalConfig(ctx)
|
||||||
|
|
||||||
// Convert content names to their appropriate stems, in case a test library is overriding an actual boot jar
|
possibleUpdatableModules := gatherPossibleUpdatableModuleNamesAndStems(ctx, b.properties.Contents, bootclasspathFragmentContentDepTag)
|
||||||
var stems []string
|
|
||||||
for _, name := range b.properties.Contents {
|
|
||||||
dep := ctx.GetDirectDepWithTag(name, bootclasspathFragmentContentDepTag)
|
|
||||||
if m, ok := dep.(ModuleWithStem); ok {
|
|
||||||
stems = append(stems, m.Stem())
|
|
||||||
} else {
|
|
||||||
ctx.PropertyErrorf("contents", "%v is not a ModuleWithStem", name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only create configs for updatable boot jars. Non-updatable boot jars must be part of the
|
// Only create configs for updatable boot jars. Non-updatable boot jars must be part of the
|
||||||
// platform_bootclasspath's classpath proto config to guarantee that they come before any
|
// platform_bootclasspath's classpath proto config to guarantee that they come before any
|
||||||
// updatable jars at runtime.
|
// updatable jars at runtime.
|
||||||
jars := global.UpdatableBootJars.Filter(stems)
|
jars := global.UpdatableBootJars.Filter(possibleUpdatableModules)
|
||||||
|
|
||||||
// TODO(satayev): for apex_test we want to include all contents unconditionally to classpaths
|
// TODO(satayev): for apex_test we want to include all contents unconditionally to classpaths
|
||||||
// config. However, any test specific jars would not be present in UpdatableBootJars. Instead,
|
// config. However, any test specific jars would not be present in UpdatableBootJars. Instead,
|
||||||
// we should check if we are creating a config for apex_test via ApexInfo and amend the values.
|
// we should check if we are creating a config for apex_test via ApexInfo and amend the values.
|
||||||
// This is an exception to support end-to-end test for SdkExtensions, until such support exists.
|
// This is an exception to support end-to-end test for SdkExtensions, until such support exists.
|
||||||
if android.InList("test_framework-sdkextensions", stems) {
|
if android.InList("test_framework-sdkextensions", possibleUpdatableModules) {
|
||||||
jars = jars.Append("com.android.sdkext", "test_framework-sdkextensions")
|
jars = jars.Append("com.android.sdkext", "test_framework-sdkextensions")
|
||||||
}
|
}
|
||||||
return jars
|
return jars
|
||||||
|
|
|
@ -91,6 +91,29 @@ type classpathJar struct {
|
||||||
maxSdkVersion int32
|
maxSdkVersion int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// gatherPossibleUpdatableModuleNamesAndStems returns a set of module and stem names from the
|
||||||
|
// supplied contents that may be in the updatable boot jars.
|
||||||
|
//
|
||||||
|
// The module names are included because sometimes the stem is set to just change the name of
|
||||||
|
// the installed file and it expects the configuration to still use the actual module name.
|
||||||
|
//
|
||||||
|
// The stem names are included because sometimes the stem is set to change the effective name of the
|
||||||
|
// module that is used in the configuration as well,e .g. when a test library is overriding an
|
||||||
|
// actual boot jar
|
||||||
|
func gatherPossibleUpdatableModuleNamesAndStems(ctx android.ModuleContext, contents []string, tag blueprint.DependencyTag) []string {
|
||||||
|
set := map[string]struct{}{}
|
||||||
|
for _, name := range contents {
|
||||||
|
dep := ctx.GetDirectDepWithTag(name, tag)
|
||||||
|
set[name] = struct{}{}
|
||||||
|
if m, ok := dep.(ModuleWithStem); ok {
|
||||||
|
set[m.Stem()] = struct{}{}
|
||||||
|
} else {
|
||||||
|
ctx.PropertyErrorf("contents", "%v is not a ModuleWithStem", name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return android.SortedStringKeys(set)
|
||||||
|
}
|
||||||
|
|
||||||
// Converts android.ConfiguredJarList into a list of classpathJars for each given classpathType.
|
// Converts android.ConfiguredJarList into a list of classpathJars for each given classpathType.
|
||||||
func configuredJarListToClasspathJars(ctx android.ModuleContext, configuredJars android.ConfiguredJarList, classpaths ...classpathType) []classpathJar {
|
func configuredJarListToClasspathJars(ctx android.ModuleContext, configuredJars android.ConfiguredJarList, classpaths ...classpathType) []classpathJar {
|
||||||
paths := configuredJars.DevicePaths(ctx.Config(), android.Android)
|
paths := configuredJars.DevicePaths(ctx.Config(), android.Android)
|
||||||
|
|
|
@ -106,21 +106,12 @@ func (s *SystemServerClasspathModule) GenerateAndroidBuildActions(ctx android.Mo
|
||||||
func (s *SystemServerClasspathModule) configuredJars(ctx android.ModuleContext) android.ConfiguredJarList {
|
func (s *SystemServerClasspathModule) configuredJars(ctx android.ModuleContext) android.ConfiguredJarList {
|
||||||
global := dexpreopt.GetGlobalConfig(ctx)
|
global := dexpreopt.GetGlobalConfig(ctx)
|
||||||
|
|
||||||
// Convert content names to their appropriate stems, in case a test library is overriding an actual boot jar
|
possibleUpdatableModules := gatherPossibleUpdatableModuleNamesAndStems(ctx, s.properties.Contents, systemServerClasspathFragmentContentDepTag)
|
||||||
var stems []string
|
|
||||||
for _, name := range s.properties.Contents {
|
|
||||||
dep := ctx.GetDirectDepWithTag(name, systemServerClasspathFragmentContentDepTag)
|
|
||||||
if m, ok := dep.(ModuleWithStem); ok {
|
|
||||||
stems = append(stems, m.Stem())
|
|
||||||
} else {
|
|
||||||
ctx.PropertyErrorf("contents", "%v is not a ModuleWithStem", name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only create configs for updatable boot jars. Non-updatable system server jars must be part of the
|
// Only create configs for updatable boot jars. Non-updatable system server jars must be part of the
|
||||||
// platform_systemserverclasspath's classpath proto config to guarantee that they come before any
|
// platform_systemserverclasspath's classpath proto config to guarantee that they come before any
|
||||||
// updatable jars at runtime.
|
// updatable jars at runtime.
|
||||||
return global.UpdatableSystemServerJars.Filter(stems)
|
return global.UpdatableSystemServerJars.Filter(possibleUpdatableModules)
|
||||||
}
|
}
|
||||||
|
|
||||||
type systemServerClasspathFragmentContentDependencyTag struct {
|
type systemServerClasspathFragmentContentDependencyTag struct {
|
||||||
|
|
Loading…
Reference in a new issue