diff options
author | satayev <satayev@google.com> | 2021-05-06 23:38:10 +0100 |
---|---|---|
committer | satayev <satayev@google.com> | 2021-05-07 16:31:07 +0100 |
commit | 013485bd832075821f01a2a737b14647baab3835 (patch) | |
tree | 33bd84e0f78ab7fa2407abec670969642372b2c2 /java/classpath_fragment.go | |
parent | 95e9c5bbfa8a1a46433183830a2429ac83979d33 (diff) |
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
Diffstat (limited to 'java/classpath_fragment.go')
-rw-r--r-- | java/classpath_fragment.go | 47 |
1 files changed, 21 insertions, 26 deletions
diff --git a/java/classpath_fragment.go b/java/classpath_fragment.go index 00e95913b..2e0582390 100644 --- a/java/classpath_fragment.go +++ b/java/classpath_fragment.go @@ -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{ |