Merge changes If00e16bd,Id5b2ec3f
* changes: Move all jar intermediates to subdirs Use full relative paths to get module outputs in tests
This commit is contained in:
@@ -199,9 +199,9 @@ func PathsForSource(ctx PathContext, paths []string) Paths {
|
|||||||
if pathConfig(ctx).AllowMissingDependencies() {
|
if pathConfig(ctx).AllowMissingDependencies() {
|
||||||
if modCtx, ok := ctx.(ModuleContext); ok {
|
if modCtx, ok := ctx.(ModuleContext); ok {
|
||||||
ret := make(Paths, 0, len(paths))
|
ret := make(Paths, 0, len(paths))
|
||||||
intermediates := filepath.Join(modCtx.ModuleDir(), modCtx.ModuleName(), modCtx.ModuleSubDir(), "missing")
|
intermediates := pathForModule(modCtx).withRel("missing")
|
||||||
for _, path := range paths {
|
for _, path := range paths {
|
||||||
p := ExistentPathForSource(ctx, intermediates, path)
|
p := ExistentPathForSource(ctx, intermediates.String(), path)
|
||||||
if p.Valid() {
|
if p.Valid() {
|
||||||
ret = append(ret, p.Path())
|
ret = append(ret, p.Path())
|
||||||
} else {
|
} else {
|
||||||
@@ -572,6 +572,12 @@ type OutputPath struct {
|
|||||||
basePath
|
basePath
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p OutputPath) withRel(rel string) OutputPath {
|
||||||
|
p.basePath.path = filepath.Join(p.basePath.path, rel)
|
||||||
|
p.basePath.rel = rel
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
var _ Path = OutputPath{}
|
var _ Path = OutputPath{}
|
||||||
|
|
||||||
// PathForOutput joins the provided paths and returns an OutputPath that is
|
// PathForOutput joins the provided paths and returns an OutputPath that is
|
||||||
@@ -666,6 +672,10 @@ type ModuleOutPath struct {
|
|||||||
|
|
||||||
var _ Path = ModuleOutPath{}
|
var _ Path = ModuleOutPath{}
|
||||||
|
|
||||||
|
func pathForModule(ctx ModuleContext) OutputPath {
|
||||||
|
return PathForOutput(ctx, ".intermediates", ctx.ModuleDir(), ctx.ModuleName(), ctx.ModuleSubDir())
|
||||||
|
}
|
||||||
|
|
||||||
// PathForVndkRefDump returns an OptionalPath representing the path of the reference
|
// PathForVndkRefDump returns an OptionalPath representing the path of the reference
|
||||||
// abi dump for the given module. This is not guaranteed to be valid.
|
// abi dump for the given module. This is not guaranteed to be valid.
|
||||||
func PathForVndkRefAbiDump(ctx ModuleContext, version, fileName string, vndkOrNdk, isSourceDump bool) OptionalPath {
|
func PathForVndkRefAbiDump(ctx ModuleContext, version, fileName string, vndkOrNdk, isSourceDump bool) OptionalPath {
|
||||||
@@ -694,14 +704,15 @@ func PathForVndkRefAbiDump(ctx ModuleContext, version, fileName string, vndkOrNd
|
|||||||
// output directory.
|
// output directory.
|
||||||
func PathForModuleOut(ctx ModuleContext, paths ...string) ModuleOutPath {
|
func PathForModuleOut(ctx ModuleContext, paths ...string) ModuleOutPath {
|
||||||
p := validatePath(ctx, paths...)
|
p := validatePath(ctx, paths...)
|
||||||
return ModuleOutPath{PathForOutput(ctx, ".intermediates", ctx.ModuleDir(), ctx.ModuleName(), ctx.ModuleSubDir(), p)}
|
return ModuleOutPath{
|
||||||
|
OutputPath: pathForModule(ctx).withRel(p),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ModuleGenPath is a Path representing the 'gen' directory in a module's output
|
// ModuleGenPath is a Path representing the 'gen' directory in a module's output
|
||||||
// directory. Mainly used for generated sources.
|
// directory. Mainly used for generated sources.
|
||||||
type ModuleGenPath struct {
|
type ModuleGenPath struct {
|
||||||
ModuleOutPath
|
ModuleOutPath
|
||||||
path string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ Path = ModuleGenPath{}
|
var _ Path = ModuleGenPath{}
|
||||||
@@ -713,8 +724,9 @@ var _ objPathProvider = ModuleGenPath{}
|
|||||||
func PathForModuleGen(ctx ModuleContext, paths ...string) ModuleGenPath {
|
func PathForModuleGen(ctx ModuleContext, paths ...string) ModuleGenPath {
|
||||||
p := validatePath(ctx, paths...)
|
p := validatePath(ctx, paths...)
|
||||||
return ModuleGenPath{
|
return ModuleGenPath{
|
||||||
PathForModuleOut(ctx, "gen", p),
|
ModuleOutPath: ModuleOutPath{
|
||||||
p,
|
OutputPath: pathForModule(ctx).withRel("gen").withRel(p),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -102,7 +102,7 @@ func (m TestingModule) Output(file string) ModuleBuildParams {
|
|||||||
outputs = append(outputs, p.Output)
|
outputs = append(outputs, p.Output)
|
||||||
}
|
}
|
||||||
for _, f := range outputs {
|
for _, f := range outputs {
|
||||||
if f.Base() == file {
|
if f.Rel() == file {
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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() {
|
||||||
|
24
java/java.go
24
java/java.go
@@ -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
|
||||||
}
|
}
|
||||||
|
@@ -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" {
|
||||||
|
Reference in New Issue
Block a user