java: add one-off build logic for frameworks/base

framework.jar needs to compile against R.java and Manifest.java from
framework-res.apk.  Rather than complicating the Blueprints properties
with values that will only be used once, add one-off logic to
collectDeps to extract the rJarSpec out of the framework-res module.

Change-Id: I1195b1b5e07badc583703479382ceba35300b8fd
This commit is contained in:
Colin Cross 2015-04-13 14:02:52 -07:00
parent 276284f577
commit e7a9f3f7ed
2 changed files with 15 additions and 7 deletions

View file

@ -111,19 +111,23 @@ func (j jarSpec) soongJarArgs() string {
return "-C " + j.dir + " -l " + j.fileList return "-C " + j.dir + " -l " + j.fileList
} }
func TransformJavaToClasses(ctx common.AndroidModuleContext, srcFiles []string, func TransformJavaToClasses(ctx common.AndroidModuleContext, srcFiles []string, srcFileLists []string,
flags javaBuilderFlags, deps []string) jarSpec { flags javaBuilderFlags, deps []string) jarSpec {
classDir := filepath.Join(common.ModuleOutDir(ctx), "classes") classDir := filepath.Join(common.ModuleOutDir(ctx), "classes")
classFileList := filepath.Join(common.ModuleOutDir(ctx), "classes.list") classFileList := filepath.Join(common.ModuleOutDir(ctx), "classes.list")
javacFlags := flags.javacFlags + common.JoinWithPrefix(srcFileLists, "@")
deps = append(deps, srcFileLists...)
ctx.Build(pctx, blueprint.BuildParams{ ctx.Build(pctx, blueprint.BuildParams{
Rule: javac, Rule: javac,
Outputs: []string{classFileList}, Outputs: []string{classFileList},
Inputs: srcFiles, Inputs: srcFiles,
Implicits: deps, Implicits: deps,
Args: map[string]string{ Args: map[string]string{
"javacFlags": flags.javacFlags, "javacFlags": javacFlags,
"bootClasspath": flags.bootClasspath, "bootClasspath": flags.bootClasspath,
"classpath": flags.classpath, "classpath": flags.classpath,
"outDir": classDir, "outDir": classDir,

View file

@ -31,7 +31,6 @@ import (
// TODO: // TODO:
// Autogenerated files: // Autogenerated files:
// AIDL
// Proto // Proto
// Renderscript // Renderscript
// Post-jar passes: // Post-jar passes:
@ -192,7 +191,7 @@ func (j *javaBase) aidlFlags(ctx common.AndroidModuleContext, aidlPreprocess str
func (j *javaBase) collectDeps(ctx common.AndroidModuleContext) (classpath []string, func (j *javaBase) collectDeps(ctx common.AndroidModuleContext) (classpath []string,
bootClasspath string, classJarSpecs, resourceJarSpecs []jarSpec, aidlPreprocess string, bootClasspath string, classJarSpecs, resourceJarSpecs []jarSpec, aidlPreprocess string,
aidlIncludeDirs []string) { aidlIncludeDirs []string, srcFileLists []string) {
ctx.VisitDirectDeps(func(module blueprint.Module) { ctx.VisitDirectDeps(func(module blueprint.Module) {
otherName := ctx.OtherModuleName(module) otherName := ctx.OtherModuleName(module)
@ -205,6 +204,10 @@ func (j *javaBase) collectDeps(ctx common.AndroidModuleContext) (classpath []str
classpath = append(classpath, javaDep.ClasspathFile()) classpath = append(classpath, javaDep.ClasspathFile())
classJarSpecs = append(classJarSpecs, javaDep.ClassJarSpecs()...) classJarSpecs = append(classJarSpecs, javaDep.ClassJarSpecs()...)
resourceJarSpecs = append(resourceJarSpecs, javaDep.ResourceJarSpecs()...) resourceJarSpecs = append(resourceJarSpecs, javaDep.ResourceJarSpecs()...)
} else if ctx.ModuleName() == "framework" && otherName == "framework-res" {
// framework.jar has a one-off dependency on the R.java and Manifest.java files
// generated by framework-res.apk
srcFileLists = append(srcFileLists, module.(*javaBase).module.(*AndroidApp).rJarSpec.fileList)
} else { } else {
panic(fmt.Errorf("unknown dependency %q for %q", otherName, ctx.ModuleName())) panic(fmt.Errorf("unknown dependency %q for %q", otherName, ctx.ModuleName()))
} }
@ -224,7 +227,8 @@ func (j *javaBase) collectDeps(ctx common.AndroidModuleContext) (classpath []str
} }
}) })
return classpath, bootClasspath, classJarSpecs, resourceJarSpecs, aidlPreprocess, aidlIncludeDirs return classpath, bootClasspath, classJarSpecs, resourceJarSpecs, aidlPreprocess,
aidlIncludeDirs, srcFileLists
} }
func (j *javaBase) GenerateAndroidBuildActions(ctx common.AndroidModuleContext) { func (j *javaBase) GenerateAndroidBuildActions(ctx common.AndroidModuleContext) {
@ -237,7 +241,7 @@ func (j *javaBase) GenerateJavaBuildActions(ctx common.AndroidModuleContext) {
common.ModuleSrcDir(ctx)) common.ModuleSrcDir(ctx))
classpath, bootClasspath, classJarSpecs, resourceJarSpecs, aidlPreprocess, classpath, bootClasspath, classJarSpecs, resourceJarSpecs, aidlPreprocess,
aidlIncludeDirs := j.collectDeps(ctx) aidlIncludeDirs, srcFileLists := j.collectDeps(ctx)
var flags javaBuilderFlags var flags javaBuilderFlags
@ -271,7 +275,7 @@ func (j *javaBase) GenerateJavaBuildActions(ctx common.AndroidModuleContext) {
if len(srcFiles) > 0 { if len(srcFiles) > 0 {
// Compile java sources into .class files // Compile java sources into .class files
classes := TransformJavaToClasses(ctx, srcFiles, flags, javacDeps) classes := TransformJavaToClasses(ctx, srcFiles, srcFileLists, flags, javacDeps)
if ctx.Failed() { if ctx.Failed() {
return return
} }