Prepend header jar for sharded javac compilation am: 3d56ed5605 am: 5336a09b91 am: 287985d4c4 am: 7e793651f5

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1897430

Change-Id: I2fa30b976234021f8cc20c662d9470a7e4d4e889
This commit is contained in:
Colin Cross
2021-11-20 02:46:18 +00:00
committed by Automerger Merge Worker
2 changed files with 14 additions and 12 deletions

View File

@@ -1066,7 +1066,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
j.compiledSrcJars = srcJars j.compiledSrcJars = srcJars
enableSharding := false enableSharding := false
var headerJarFileWithoutJarjar android.Path var headerJarFileWithoutDepsOrJarjar android.Path
if ctx.Device() && !ctx.Config().IsEnvFalse("TURBINE_ENABLED") && !deps.disableTurbine { if ctx.Device() && !ctx.Config().IsEnvFalse("TURBINE_ENABLED") && !deps.disableTurbine {
if j.properties.Javac_shard_size != nil && *(j.properties.Javac_shard_size) > 0 { if j.properties.Javac_shard_size != nil && *(j.properties.Javac_shard_size) > 0 {
enableSharding = true enableSharding = true
@@ -1076,7 +1076,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
// allow for the use of annotation processors that do function correctly // allow for the use of annotation processors that do function correctly
// with sharding enabled. See: b/77284273. // with sharding enabled. See: b/77284273.
} }
headerJarFileWithoutJarjar, j.headerJarFile = headerJarFileWithoutDepsOrJarjar, j.headerJarFile =
j.compileJavaHeader(ctx, uniqueSrcFiles, srcJars, deps, flags, jarName, kotlinJars) j.compileJavaHeader(ctx, uniqueSrcFiles, srcJars, deps, flags, jarName, kotlinJars)
if ctx.Failed() { if ctx.Failed() {
return return
@@ -1105,7 +1105,9 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
} }
if enableSharding { if enableSharding {
flags.classpath = append(flags.classpath, headerJarFileWithoutJarjar) if headerJarFileWithoutDepsOrJarjar != nil {
flags.classpath = append(classpath{headerJarFileWithoutDepsOrJarjar}, flags.classpath...)
}
shardSize := int(*(j.properties.Javac_shard_size)) shardSize := int(*(j.properties.Javac_shard_size))
var shardSrcs []android.Paths var shardSrcs []android.Paths
if len(uniqueSrcFiles) > 0 { if len(uniqueSrcFiles) > 0 {
@@ -1508,7 +1510,7 @@ func CheckKotlincFlags(ctx android.ModuleContext, flags []string) {
func (j *Module) compileJavaHeader(ctx android.ModuleContext, srcFiles, srcJars android.Paths, func (j *Module) compileJavaHeader(ctx android.ModuleContext, srcFiles, srcJars android.Paths,
deps deps, flags javaBuilderFlags, jarName string, deps deps, flags javaBuilderFlags, jarName string,
extraJars android.Paths) (headerJar, jarjarHeaderJar android.Path) { extraJars android.Paths) (headerJar, jarjarAndDepsHeaderJar android.Path) {
var jars android.Paths var jars android.Paths
if len(srcFiles) > 0 || len(srcJars) > 0 { if len(srcFiles) > 0 || len(srcJars) > 0 {
@@ -1519,6 +1521,7 @@ func (j *Module) compileJavaHeader(ctx android.ModuleContext, srcFiles, srcJars
return nil, nil return nil, nil
} }
jars = append(jars, turbineJar) jars = append(jars, turbineJar)
headerJar = turbineJar
} }
jars = append(jars, extraJars...) jars = append(jars, extraJars...)
@@ -1532,20 +1535,19 @@ func (j *Module) compileJavaHeader(ctx android.ModuleContext, srcFiles, srcJars
combinedJar := android.PathForModuleOut(ctx, "turbine-combined", jarName) combinedJar := android.PathForModuleOut(ctx, "turbine-combined", jarName)
TransformJarsToJar(ctx, combinedJar, "for turbine", jars, android.OptionalPath{}, TransformJarsToJar(ctx, combinedJar, "for turbine", jars, android.OptionalPath{},
false, nil, []string{"META-INF/TRANSITIVE"}) false, nil, []string{"META-INF/TRANSITIVE"})
headerJar = combinedJar jarjarAndDepsHeaderJar = combinedJar
jarjarHeaderJar = combinedJar
if j.expandJarjarRules != nil { if j.expandJarjarRules != nil {
// Transform classes.jar into classes-jarjar.jar // Transform classes.jar into classes-jarjar.jar
jarjarFile := android.PathForModuleOut(ctx, "turbine-jarjar", jarName) jarjarFile := android.PathForModuleOut(ctx, "turbine-jarjar", jarName)
TransformJarJar(ctx, jarjarFile, headerJar, j.expandJarjarRules) TransformJarJar(ctx, jarjarFile, jarjarAndDepsHeaderJar, j.expandJarjarRules)
jarjarHeaderJar = jarjarFile jarjarAndDepsHeaderJar = jarjarFile
if ctx.Failed() { if ctx.Failed() {
return nil, nil return nil, nil
} }
} }
return headerJar, jarjarHeaderJar return headerJar, jarjarAndDepsHeaderJar
} }
func (j *Module) instrument(ctx android.ModuleContext, flags javaBuilderFlags, func (j *Module) instrument(ctx android.ModuleContext, flags javaBuilderFlags,

View File

@@ -988,11 +988,11 @@ func TestSharding(t *testing.T) {
} }
`) `)
barHeaderJar := filepath.Join("out", "soong", ".intermediates", "bar", "android_common", "turbine-combined", "bar.jar") barHeaderJar := filepath.Join("out", "soong", ".intermediates", "bar", "android_common", "turbine", "bar.jar")
for i := 0; i < 3; i++ { for i := 0; i < 3; i++ {
barJavac := ctx.ModuleForTests("bar", "android_common").Description("javac" + strconv.Itoa(i)) barJavac := ctx.ModuleForTests("bar", "android_common").Description("javac" + strconv.Itoa(i))
if !strings.Contains(barJavac.Args["classpath"], barHeaderJar) { if !strings.HasPrefix(barJavac.Args["classpath"], "-classpath "+barHeaderJar+":") {
t.Errorf("bar javac classpath %v does not contain %q", barJavac.Args["classpath"], barHeaderJar) t.Errorf("bar javac classpath %v does start with %q", barJavac.Args["classpath"], barHeaderJar)
} }
} }
} }