diff options
author | Colin Cross <ccross@android.com> | 2024-02-29 18:46:46 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-02-29 18:46:46 +0000 |
commit | 5d55b668610cb9b78c10e8fc8cc10ad783dbd01a (patch) | |
tree | a7bf9d105d1f1925bed63a847aa44f9ad1a157cd | |
parent | 6c2cd902323b5ac62b58c40bb07ed0d3d85d56ad (diff) | |
parent | fd620b2b448bd68c7cb507cfbae0bae268dd0b5e (diff) | |
download | soong-5d55b668610cb9b78c10e8fc8cc10ad783dbd01a.tar.gz |
Merge changes I8d060594,I2b6a57ae into main
* changes:
Put extraCombinedJars after the compiled jars
Use RSP file for long classpaths
-rw-r--r-- | java/app_test.go | 4 | ||||
-rw-r--r-- | java/base.go | 8 | ||||
-rw-r--r-- | java/builder.go | 59 |
3 files changed, 57 insertions, 14 deletions
diff --git a/java/app_test.go b/java/app_test.go index 125c9716c..28bea0a2b 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -931,8 +931,8 @@ func TestAndroidResourceProcessor(t *testing.T) { "out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar", }, appCombined: []string{ - "out/soong/.intermediates/app/android_common/busybox/R.jar", "out/soong/.intermediates/app/android_common/javac/app.jar", + "out/soong/.intermediates/app/android_common/busybox/R.jar", "out/soong/.intermediates/direct/android_common/combined/direct.jar", "out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar", }, @@ -1037,8 +1037,8 @@ func TestAndroidResourceProcessor(t *testing.T) { "out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar", }, appCombined: []string{ - "out/soong/.intermediates/app/android_common/busybox/R.jar", "out/soong/.intermediates/app/android_common/javac/app.jar", + "out/soong/.intermediates/app/android_common/busybox/R.jar", "out/soong/.intermediates/direct/android_common/combined/direct.jar", "out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar", }, diff --git a/java/base.go b/java/base.go index 2b499e2a5..f11e30dc2 100644 --- a/java/base.go +++ b/java/base.go @@ -1307,7 +1307,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath } } - jars := append(android.Paths(nil), kotlinJars...) + jars := slices.Clone(kotlinJars) j.compiledSrcJars = srcJars @@ -1322,7 +1322,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath // allow for the use of annotation processors that do function correctly // with sharding enabled. See: b/77284273. } - extraJars := append(android.CopyOf(extraCombinedJars), kotlinHeaderJars...) + extraJars := append(slices.Clone(kotlinHeaderJars), extraCombinedJars...) headerJarFileWithoutDepsOrJarjar, j.headerJarFile, j.repackagedHeaderJarFile = j.compileJavaHeader(ctx, uniqueJavaFiles, srcJars, deps, flags, jarName, extraJars) if ctx.Failed() { @@ -1396,6 +1396,8 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath } } + jars = append(jars, extraCombinedJars...) + j.srcJarArgs, j.srcJarDeps = resourcePathsToJarArgs(srcFiles), srcFiles var includeSrcJar android.WritablePath @@ -1482,8 +1484,6 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath jars = append(jars, servicesJar) } - jars = append(android.CopyOf(extraCombinedJars), jars...) - // Combine the classes built from sources, any manifests, and any static libraries into // classes.jar. If there is only one input jar this step will be skipped. var outputFile android.OutputPath diff --git a/java/builder.go b/java/builder.go index 74a05f281..b07a622e4 100644 --- a/java/builder.go +++ b/java/builder.go @@ -212,6 +212,14 @@ var ( CommandDeps: []string{"${config.MergeZipsCmd}"}, }, "jarArgs") + combineJarRsp = pctx.AndroidStaticRule("combineJarRsp", + blueprint.RuleParams{ + Command: `${config.MergeZipsCmd} --ignore-duplicates -j $jarArgs $out @$out.rsp`, + CommandDeps: []string{"${config.MergeZipsCmd}"}, + Rspfile: "$out.rsp", + RspfileContent: "$in", + }, + "jarArgs") jarjar = pctx.AndroidStaticRule("jarjar", blueprint.RuleParams{ @@ -418,7 +426,7 @@ func emitXrefRule(ctx android.ModuleContext, xrefFile android.WritablePath, idx }) } -func turbineFlags(ctx android.ModuleContext, flags javaBuilderFlags) (string, android.Paths) { +func turbineFlags(ctx android.ModuleContext, flags javaBuilderFlags, dir string) (string, android.Paths) { var deps android.Paths classpath := flags.classpath @@ -443,13 +451,21 @@ func turbineFlags(ctx android.ModuleContext, flags javaBuilderFlags) (string, an deps = append(deps, classpath...) turbineFlags := bootClasspath + " " + classpath.FormTurbineClassPath("--classpath ") + const flagsLimit = 32 * 1024 + if len(turbineFlags) > flagsLimit { + flagsRspFile := android.PathForModuleOut(ctx, dir, "turbine-flags.rsp") + android.WriteFileRule(ctx, flagsRspFile, turbineFlags) + turbineFlags = "@" + flagsRspFile.String() + deps = append(deps, flagsRspFile) + } + return turbineFlags, deps } func TransformJavaToHeaderClasses(ctx android.ModuleContext, outputFile android.WritablePath, srcFiles, srcJars android.Paths, flags javaBuilderFlags) { - turbineFlags, deps := turbineFlags(ctx, flags) + turbineFlags, deps := turbineFlags(ctx, flags, "turbine") deps = append(deps, srcJars...) @@ -481,7 +497,7 @@ func TransformJavaToHeaderClasses(ctx android.ModuleContext, outputFile android. func TurbineApt(ctx android.ModuleContext, outputSrcJar, outputResJar android.WritablePath, srcFiles, srcJars android.Paths, flags javaBuilderFlags) { - turbineFlags, deps := turbineFlags(ctx, flags) + turbineFlags, deps := turbineFlags(ctx, flags, "kapt") deps = append(deps, srcJars...) @@ -534,14 +550,14 @@ func transformJavaToClasses(ctx android.ModuleContext, outputFile android.Writab deps = append(deps, srcJars...) - classpath := flags.classpath + javacClasspath := flags.classpath var bootClasspath string if flags.javaVersion.usesJavaModules() { var systemModuleDeps android.Paths bootClasspath, systemModuleDeps = flags.systemModules.FormJavaSystemModulesPath(ctx.Device()) deps = append(deps, systemModuleDeps...) - classpath = append(flags.java9Classpath, classpath...) + javacClasspath = append(flags.java9Classpath, javacClasspath...) } else { deps = append(deps, flags.bootClasspath...) if len(flags.bootClasspath) == 0 && ctx.Device() { @@ -553,7 +569,19 @@ func transformJavaToClasses(ctx android.ModuleContext, outputFile android.Writab } } - deps = append(deps, classpath...) + classpathArg := javacClasspath.FormJavaClassPath("-classpath") + + // Keep the command line under the MAX_ARG_STRLEN limit by putting the classpath argument into an rsp file + // if it is too long. + const classpathLimit = 64 * 1024 + if len(classpathArg) > classpathLimit { + classpathRspFile := outputFile.ReplaceExtension(ctx, "classpath") + android.WriteFileRule(ctx, classpathRspFile, classpathArg) + deps = append(deps, classpathRspFile) + classpathArg = "@" + classpathRspFile.String() + } + + deps = append(deps, javacClasspath...) deps = append(deps, flags.processorPath...) processor := "-proc:none" @@ -584,7 +612,7 @@ func transformJavaToClasses(ctx android.ModuleContext, outputFile android.Writab Args: map[string]string{ "javacFlags": flags.javacFlags, "bootClasspath": bootClasspath, - "classpath": classpath.FormJavaClassPath("-classpath"), + "classpath": classpathArg, "processorpath": flags.processorPath.FormJavaClassPath("-processorpath"), "processor": processor, "srcJars": strings.Join(srcJars.Strings(), " "), @@ -643,8 +671,23 @@ func TransformJarsToJar(ctx android.ModuleContext, outputFile android.WritablePa jarArgs = append(jarArgs, "-D") } + rule := combineJar + // Keep the command line under the MAX_ARG_STRLEN limit by putting the list of jars into an rsp file + // if it is too long. + const jarsLengthLimit = 64 * 1024 + jarsLength := 0 + for i, jar := range jars { + if i != 0 { + jarsLength += 1 + } + jarsLength += len(jar.String()) + } + if jarsLength > jarsLengthLimit { + rule = combineJarRsp + } + ctx.Build(pctx, android.BuildParams{ - Rule: combineJar, + Rule: rule, Description: desc, Output: outputFile, Inputs: jars, |