Declare ConfiguredJarList in specific fragment implementations.
Each specific classpath_fragment module knows what jars must be part of the corresponding classpaths.proto config. Note that bootclasspath_fragment does not implement classpath_fragment yet, thus all boot jars and all system server jars go into corresponding platform classpaths. Bug: 180105615 Test: m && launch_cvd; atest CtsClasspathsTestCases Change-Id: I6a8c7b0a5d17d62e790a441b8e2c5c1a816e7f30
This commit is contained in:
@@ -51,6 +51,10 @@ type classpathFragment interface {
|
||||
android.Module
|
||||
|
||||
classpathFragmentBase() *ClasspathFragmentBase
|
||||
|
||||
// ClasspathFragmentToConfiguredJarList returns android.ConfiguredJarList representation of all
|
||||
// the jars in this classpath fragment.
|
||||
ClasspathFragmentToConfiguredJarList(ctx android.ModuleContext) android.ConfiguredJarList
|
||||
}
|
||||
|
||||
// ClasspathFragmentBase is meant to be embedded in any module types that implement classpathFragment;
|
||||
@@ -84,24 +88,26 @@ type classpathJar struct {
|
||||
maxSdkVersion int32
|
||||
}
|
||||
|
||||
func (c *ClasspathFragmentBase) generateClasspathProtoBuildActions(ctx android.ModuleContext) {
|
||||
// Converts android.ConfiguredJarList into a list of classpathJars for each given classpathType.
|
||||
func configuredJarListToClasspathJars(ctx android.ModuleContext, configuredJars android.ConfiguredJarList, classpaths ...classpathType) []classpathJar {
|
||||
paths := configuredJars.DevicePaths(ctx.Config(), android.Android)
|
||||
jars := make([]classpathJar, 0, len(paths)*len(classpaths))
|
||||
for i := 0; i < len(paths); i++ {
|
||||
for _, classpathType := range classpaths {
|
||||
jars = append(jars, classpathJar{
|
||||
classpath: classpathType,
|
||||
path: paths[i],
|
||||
})
|
||||
}
|
||||
}
|
||||
return jars
|
||||
}
|
||||
|
||||
func (c *ClasspathFragmentBase) generateClasspathProtoBuildActions(ctx android.ModuleContext, jars []classpathJar) {
|
||||
outputFilename := ctx.ModuleName() + ".pb"
|
||||
c.outputFilepath = android.PathForModuleOut(ctx, outputFilename).OutputPath
|
||||
c.installDirPath = android.PathForModuleInstall(ctx, "etc", "classpaths")
|
||||
|
||||
var jars []classpathJar
|
||||
switch c.classpathType {
|
||||
case BOOTCLASSPATH:
|
||||
jars = appendClasspathJar(jars, BOOTCLASSPATH, defaultBootclasspath(ctx)...)
|
||||
jars = appendClasspathJar(jars, DEX2OATBOOTCLASSPATH, defaultBootImageConfig(ctx).getAnyAndroidVariant().dexLocationsDeps...)
|
||||
case SYSTEMSERVERCLASSPATH:
|
||||
jars = appendClasspathJar(jars, SYSTEMSERVERCLASSPATH, systemServerClasspath(ctx)...)
|
||||
default:
|
||||
// Only supported classpath fragments are BOOTCLASSPATH and SYSTEMSERVERCLASSPATH.
|
||||
// DEX2OATBOOTCLASSPATH is a special case of BOOTCLASSPATH and is auto-generated.
|
||||
panic(fmt.Errorf("found %v, expected either BOOTCLASSPATH or SYSTEMSERVERCLASSPATH", c.classpathType))
|
||||
}
|
||||
|
||||
generatedJson := android.PathForModuleOut(ctx, outputFilename+".json")
|
||||
writeClasspathsJson(ctx, generatedJson, jars)
|
||||
|
||||
@@ -137,19 +143,8 @@ func writeClasspathsJson(ctx android.ModuleContext, output android.WritablePath,
|
||||
android.WriteFileRule(ctx, output, content.String())
|
||||
}
|
||||
|
||||
func appendClasspathJar(slice []classpathJar, classpathType classpathType, paths ...string) (result []classpathJar) {
|
||||
result = append(result, slice...)
|
||||
for _, path := range paths {
|
||||
result = append(result, classpathJar{
|
||||
path: path,
|
||||
classpath: classpathType,
|
||||
})
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (c *ClasspathFragmentBase) androidMkEntries() []android.AndroidMkEntries {
|
||||
return []android.AndroidMkEntries{android.AndroidMkEntries{
|
||||
return []android.AndroidMkEntries{{
|
||||
Class: "ETC",
|
||||
OutputFile: android.OptionalPathForPath(c.outputFilepath),
|
||||
ExtraEntries: []android.AndroidMkExtraEntriesFunc{
|
||||
|
Reference in New Issue
Block a user