Move all jar intermediates to subdirs

Make all the jar intermediates called modulename.jar, and put each
in a subdir for the tool that generated it.  This will simplify
using the jars as inputs to genrules and resources.

Test: java_test.go
Change-Id: If00e16bd7df5a4ba24ebc4b68c9ccf2cfda49544
This commit is contained in:
Colin Cross
2017-10-18 14:44:18 -07:00
parent 702e0f8ab0
commit 1ee2317555
3 changed files with 30 additions and 28 deletions

View File

@@ -160,7 +160,7 @@ func TransformKotlinToClasses(ctx android.ModuleContext, outputFile android.Writ
srcFiles android.Paths, srcJars classpath, srcFiles android.Paths, srcJars classpath,
flags javaBuilderFlags) { flags javaBuilderFlags) {
classDir := android.PathForModuleOut(ctx, "classes-kt") classDir := android.PathForModuleOut(ctx, "kotlinc", "classes")
inputs := append(android.Paths(nil), srcFiles...) inputs := append(android.Paths(nil), srcFiles...)
inputs = append(inputs, srcJars...) inputs = append(inputs, srcJars...)
@@ -184,7 +184,7 @@ func TransformJavaToClasses(ctx android.ModuleContext, outputFile android.Writab
flags javaBuilderFlags, deps android.Paths) { flags javaBuilderFlags, deps android.Paths) {
transformJavaToClasses(ctx, outputFile, srcFiles, srcJars, flags, deps, transformJavaToClasses(ctx, outputFile, srcFiles, srcJars, flags, deps,
"", "javac", javac) "javac", "javac", javac)
} }
func RunErrorProne(ctx android.ModuleContext, outputFile android.WritablePath, func RunErrorProne(ctx android.ModuleContext, outputFile android.WritablePath,
@@ -196,7 +196,7 @@ func RunErrorProne(ctx android.ModuleContext, outputFile android.WritablePath,
} }
transformJavaToClasses(ctx, outputFile, srcFiles, srcJars, flags, nil, transformJavaToClasses(ctx, outputFile, srcFiles, srcJars, flags, nil,
"-errorprone", "errorprone", errorprone) "errorprone", "errorprone", errorprone)
} }
// transformJavaToClasses takes source files and converts them to a jar containing .class files. // transformJavaToClasses takes source files and converts them to a jar containing .class files.
@@ -211,7 +211,7 @@ func RunErrorProne(ctx android.ModuleContext, outputFile android.WritablePath,
func transformJavaToClasses(ctx android.ModuleContext, outputFile android.WritablePath, func transformJavaToClasses(ctx android.ModuleContext, outputFile android.WritablePath,
srcFiles android.Paths, srcJars classpath, srcFiles android.Paths, srcJars classpath,
flags javaBuilderFlags, deps android.Paths, flags javaBuilderFlags, deps android.Paths,
intermediatesSuffix, desc string, rule blueprint.Rule) { intermediatesDir, desc string, rule blueprint.Rule) {
deps = append(deps, srcJars...) deps = append(deps, srcJars...)
@@ -237,8 +237,8 @@ func transformJavaToClasses(ctx android.ModuleContext, outputFile android.Writab
"bootClasspath": bootClasspath, "bootClasspath": bootClasspath,
"sourcepath": srcJars.JavaSourcepath(), "sourcepath": srcJars.JavaSourcepath(),
"classpath": flags.classpath.JavaClasspath(), "classpath": flags.classpath.JavaClasspath(),
"outDir": android.PathForModuleOut(ctx, "classes"+intermediatesSuffix).String(), "outDir": android.PathForModuleOut(ctx, intermediatesDir, "classes").String(),
"annoDir": android.PathForModuleOut(ctx, "anno"+intermediatesSuffix).String(), "annoDir": android.PathForModuleOut(ctx, intermediatesDir, "anno").String(),
"javaVersion": flags.javaVersion, "javaVersion": flags.javaVersion,
}, },
}) })
@@ -288,7 +288,7 @@ func TransformJarsToJar(ctx android.ModuleContext, outputFile android.WritablePa
func TransformDesugar(ctx android.ModuleContext, outputFile android.WritablePath, func TransformDesugar(ctx android.ModuleContext, outputFile android.WritablePath,
classesJar android.Path, flags javaBuilderFlags) { classesJar android.Path, flags javaBuilderFlags) {
dumpDir := android.PathForModuleOut(ctx, "desugar_dumped_classes") dumpDir := android.PathForModuleOut(ctx, "desugar", "classes")
javaFlags := "" javaFlags := ""
if ctx.AConfig().UseOpenJDK9() { if ctx.AConfig().UseOpenJDK9() {

View File

@@ -502,6 +502,8 @@ func (j *Module) compile(ctx android.ModuleContext) {
var jars android.Paths var jars android.Paths
jarName := ctx.ModuleName() + ".jar"
if srcFiles.HasExt(".kt") { if srcFiles.HasExt(".kt") {
// If there are kotlin files, compile them first but pass all the kotlin and java files // If there are kotlin files, compile them first but pass all the kotlin and java files
// kotlinc will use the java files to resolve types referenced by the kotlin files, but // kotlinc will use the java files to resolve types referenced by the kotlin files, but
@@ -515,7 +517,7 @@ func (j *Module) compile(ctx android.ModuleContext) {
flags.kotlincClasspath = append(flags.kotlincClasspath, deps.kotlinStdlib...) flags.kotlincClasspath = append(flags.kotlincClasspath, deps.kotlinStdlib...)
flags.kotlincClasspath = append(flags.kotlincClasspath, deps.classpath...) flags.kotlincClasspath = append(flags.kotlincClasspath, deps.classpath...)
kotlinJar := android.PathForModuleOut(ctx, "classes-kt.jar") kotlinJar := android.PathForModuleOut(ctx, "kotlin", jarName)
TransformKotlinToClasses(ctx, kotlinJar, srcFiles, srcJars, flags) TransformKotlinToClasses(ctx, kotlinJar, srcFiles, srcJars, flags)
if ctx.Failed() { if ctx.Failed() {
return return
@@ -536,13 +538,13 @@ func (j *Module) compile(ctx android.ModuleContext) {
// a rebuild when error-prone is turned off). // a rebuild when error-prone is turned off).
// TODO(ccross): Once we always compile with javac9 we may be able to conditionally // TODO(ccross): Once we always compile with javac9 we may be able to conditionally
// enable error-prone without affecting the output class files. // enable error-prone without affecting the output class files.
errorprone := android.PathForModuleOut(ctx, "classes-errorprone.list") errorprone := android.PathForModuleOut(ctx, "errorprone", jarName)
RunErrorProne(ctx, errorprone, javaSrcFiles, srcJars, flags) RunErrorProne(ctx, errorprone, javaSrcFiles, srcJars, flags)
extraJarDeps = append(extraJarDeps, errorprone) extraJarDeps = append(extraJarDeps, errorprone)
} }
// Compile java sources into .class files // Compile java sources into .class files
classes := android.PathForModuleOut(ctx, "classes-compiled.jar") classes := android.PathForModuleOut(ctx, "javac", jarName)
TransformJavaToClasses(ctx, classes, javaSrcFiles, srcJars, flags, extraJarDeps) TransformJavaToClasses(ctx, classes, javaSrcFiles, srcJars, flags, extraJarDeps)
if ctx.Failed() { if ctx.Failed() {
return return
@@ -570,7 +572,7 @@ func (j *Module) compile(ctx android.ModuleContext) {
} }
if len(resArgs) > 0 { if len(resArgs) > 0 {
resourceJar := android.PathForModuleOut(ctx, "res.jar") resourceJar := android.PathForModuleOut(ctx, "res", jarName)
TransformResourcesToJar(ctx, resourceJar, resArgs, resDeps) TransformResourcesToJar(ctx, resourceJar, resArgs, resDeps)
if ctx.Failed() { if ctx.Failed() {
return return
@@ -592,7 +594,7 @@ func (j *Module) compile(ctx android.ModuleContext) {
// Optimization: skip the combine step if there is nothing to do // Optimization: skip the combine step if there is nothing to do
outputFile = jars[0] outputFile = jars[0]
} else { } else {
combinedJar := android.PathForModuleOut(ctx, "classes.jar") combinedJar := android.PathForModuleOut(ctx, "combined", jarName)
TransformJarsToJar(ctx, combinedJar, jars, manifest, false) TransformJarsToJar(ctx, combinedJar, jars, manifest, false)
outputFile = combinedJar outputFile = combinedJar
} }
@@ -600,7 +602,7 @@ func (j *Module) compile(ctx android.ModuleContext) {
if j.properties.Jarjar_rules != nil { if j.properties.Jarjar_rules != nil {
jarjar_rules := android.PathForModuleSrc(ctx, *j.properties.Jarjar_rules) jarjar_rules := android.PathForModuleSrc(ctx, *j.properties.Jarjar_rules)
// Transform classes.jar into classes-jarjar.jar // Transform classes.jar into classes-jarjar.jar
jarjarFile := android.PathForModuleOut(ctx, "classes-jarjar.jar") jarjarFile := android.PathForModuleOut(ctx, "jarjar", jarName)
TransformJarJar(ctx, jarjarFile, outputFile, jarjar_rules) TransformJarJar(ctx, jarjarFile, outputFile, jarjar_rules)
outputFile = jarjarFile outputFile = jarjarFile
if ctx.Failed() { if ctx.Failed() {
@@ -658,17 +660,17 @@ func (j *Module) compile(ctx android.ModuleContext) {
flags.desugarFlags = strings.Join(desugarFlags, " ") flags.desugarFlags = strings.Join(desugarFlags, " ")
desugarJar := android.PathForModuleOut(ctx, "classes-desugar.jar") desugarJar := android.PathForModuleOut(ctx, "desugar", jarName)
TransformDesugar(ctx, desugarJar, outputFile, flags) TransformDesugar(ctx, desugarJar, outputFile, flags)
outputFile = desugarJar outputFile = desugarJar
if ctx.Failed() { if ctx.Failed() {
return return
} }
// Compile classes.jar into classes.dex and then javalib.jar // Compile classes.jar into classes.dex and then a dex jar
javalibJar := android.PathForModuleOut(ctx, "javalib.jar") dexJar := android.PathForModuleOut(ctx, "dex", jarName)
TransformClassesJarToDexJar(ctx, javalibJar, desugarJar, flags) TransformClassesJarToDexJar(ctx, dexJar, desugarJar, flags)
outputFile = javalibJar outputFile = dexJar
if ctx.Failed() { if ctx.Failed() {
return return
} }

View File

@@ -142,7 +142,7 @@ func moduleToPath(name string) string {
case strings.HasSuffix(name, ".jar"): case strings.HasSuffix(name, ".jar"):
return name return name
default: default:
return filepath.Join(buildDir, ".intermediates", name, "android_common", "classes-compiled.jar") return filepath.Join(buildDir, ".intermediates", name, "android_common", "javac", name+".jar")
} }
} }
@@ -173,8 +173,8 @@ func TestSimple(t *testing.T) {
t.Errorf(`foo inputs %v != ["a.java"]`, javac.Inputs) t.Errorf(`foo inputs %v != ["a.java"]`, javac.Inputs)
} }
bar := filepath.Join(buildDir, ".intermediates", "bar", "android_common", "classes-compiled.jar") bar := ctx.ModuleForTests("bar", "android_common").Rule("javac").Output.String()
baz := filepath.Join(buildDir, ".intermediates", "baz", "android_common", "classes-compiled.jar") baz := ctx.ModuleForTests("baz", "android_common").Rule("javac").Output.String()
if !strings.Contains(javac.Args["classpath"], bar) { if !strings.Contains(javac.Args["classpath"], bar) {
t.Errorf("foo classpath %v does not contain %q", javac.Args["classpath"], bar) t.Errorf("foo classpath %v does not contain %q", javac.Args["classpath"], bar)
@@ -465,12 +465,12 @@ func TestDefaults(t *testing.T) {
t.Errorf(`foo inputs %v != ["a.java"]`, javac.Inputs) t.Errorf(`foo inputs %v != ["a.java"]`, javac.Inputs)
} }
bar := filepath.Join(buildDir, ".intermediates", "bar", "android_common", "classes-compiled.jar") bar := ctx.ModuleForTests("bar", "android_common").Rule("javac").Output.String()
if !strings.Contains(javac.Args["classpath"], bar) { if !strings.Contains(javac.Args["classpath"], bar) {
t.Errorf("foo classpath %v does not contain %q", javac.Args["classpath"], bar) t.Errorf("foo classpath %v does not contain %q", javac.Args["classpath"], bar)
} }
baz := filepath.Join(buildDir, ".intermediates", "baz", "android_common", "classes-compiled.jar") baz := ctx.ModuleForTests("baz", "android_common").Rule("javac").Output.String()
if len(combineJar.Inputs) != 2 || combineJar.Inputs[1].String() != baz { if len(combineJar.Inputs) != 2 || combineJar.Inputs[1].String() != baz {
t.Errorf("foo combineJar inputs %v does not contain %q", combineJar.Inputs, baz) t.Errorf("foo combineJar inputs %v does not contain %q", combineJar.Inputs, baz)
} }
@@ -530,8 +530,8 @@ func TestResources(t *testing.T) {
} }
`+test.extra) `+test.extra)
foo := ctx.ModuleForTests("foo", "android_common").Output("classes.jar") foo := ctx.ModuleForTests("foo", "android_common").Output("combined/foo.jar")
fooRes := ctx.ModuleForTests("foo", "android_common").Output("res.jar") fooRes := ctx.ModuleForTests("foo", "android_common").Output("res/foo.jar")
if !inList(fooRes.Output.String(), foo.Inputs.Strings()) { if !inList(fooRes.Output.String(), foo.Inputs.Strings()) {
t.Errorf("foo combined jars %v does not contain %q", t.Errorf("foo combined jars %v does not contain %q",
@@ -563,7 +563,7 @@ func TestExcludeResources(t *testing.T) {
} }
`) `)
fooRes := ctx.ModuleForTests("foo", "android_common").Output("res.jar") fooRes := ctx.ModuleForTests("foo", "android_common").Output("res/foo.jar")
expected := "-C res -f res/a -f res/b" expected := "-C res -f res/a -f res/b"
if fooRes.Args["jarArgs"] != expected { if fooRes.Args["jarArgs"] != expected {
@@ -572,7 +572,7 @@ func TestExcludeResources(t *testing.T) {
} }
barRes := ctx.ModuleForTests("bar", "android_common").Output("res.jar") barRes := ctx.ModuleForTests("bar", "android_common").Output("res/bar.jar")
expected = "-C . -f res/a" expected = "-C . -f res/a"
if barRes.Args["jarArgs"] != expected { if barRes.Args["jarArgs"] != expected {
@@ -625,7 +625,7 @@ func TestKotlin(t *testing.T) {
kotlinc := ctx.ModuleForTests("foo", "android_common").Rule("kotlinc") kotlinc := ctx.ModuleForTests("foo", "android_common").Rule("kotlinc")
javac := ctx.ModuleForTests("foo", "android_common").Rule("javac") javac := ctx.ModuleForTests("foo", "android_common").Rule("javac")
jar := ctx.ModuleForTests("foo", "android_common").Output("classes.jar") jar := ctx.ModuleForTests("foo", "android_common").Output("combined/foo.jar")
if len(kotlinc.Inputs) != 2 || kotlinc.Inputs[0].String() != "a.java" || if len(kotlinc.Inputs) != 2 || kotlinc.Inputs[0].String() != "a.java" ||
kotlinc.Inputs[1].String() != "b.kt" { kotlinc.Inputs[1].String() != "b.kt" {