diff options
| author | 2017-11-30 15:50:39 -0800 | |
|---|---|---|
| committer | 2017-12-11 16:05:51 -0800 | |
| commit | 9f319118e14989a0c9d3a3779eba1750bee7e002 (patch) | |
| tree | fed9e703de5aaeaa456b4caf63d0e29b8059c838 /java/java.go | |
| parent | d4c03092cd04e1c2963e5cbf3fd6b79c6fe2d330 (diff) | |
Add USE_D8_DESUGAR option in build/soong
Add an option to use D8's desugar instead of the standalone version.
USE_D8_DESUGAR=true m would trigger DCHECK in dex2oat unless
https://android-review.googlesource.com/c/platform/art/+/562595 is
patched in as well.
Bug: 69329508
Test: m && USE_D8_DESUGAR=false m
Change-Id: I864d88e257a2ba0b7f19aa5cced537301950e963
Diffstat (limited to 'java/java.go')
| -rw-r--r-- | java/java.go | 63 |
1 files changed, 52 insertions, 11 deletions
diff --git a/java/java.go b/java/java.go index c2b039e88..e9f833194 100644 --- a/java/java.go +++ b/java/java.go @@ -671,6 +671,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path // Store the list of .java files that was passed to javac j.compiledJavaSrcs = uniqueSrcFiles j.compiledSrcJars = srcJars + fullD8 := ctx.AConfig().IsEnvTrue("USE_D8_DESUGAR") enable_sharding := false if ctx.Device() && !ctx.Config().IsEnvFalse("TURBINE_ENABLED") { @@ -793,7 +794,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path j.headerJarFile = j.implementationJarFile } - if ctx.Device() && j.installable() { + if !fullD8 && ctx.Device() && j.installable() { outputFile = j.desugar(ctx, flags, outputFile, jarName) } @@ -808,7 +809,11 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path } if ctx.Device() && j.installable() { - outputFile = j.compileDex(ctx, flags, outputFile, jarName) + if fullD8 { + outputFile = j.compileDexFullD8(ctx, flags, outputFile, jarName) + } else { + outputFile = j.compileDex(ctx, flags, outputFile, jarName) + } if ctx.Failed() { return } @@ -896,15 +901,6 @@ func (j *Module) compileDex(ctx android.ModuleContext, flags javaBuilderFlags, classesJar android.Path, jarName string) android.Path { dxFlags := j.deviceProperties.Dxflags - if false /* emma enabled */ { - // If you instrument class files that have local variable debug information in - // them emma does not correctly maintain the local variable table. - // This will cause an error when you try to convert the class files for Android. - // The workaround here is to build different dex file here based on emma switch - // then later copy into classes.dex. When emma is on, dx is run with --no-locals - // option to remove local variable information - dxFlags = append(dxFlags, "--no-locals") - } if ctx.Config().Getenv("NO_OPTIMIZE_DX") != "" { dxFlags = append(dxFlags, "--no-optimize") @@ -930,6 +926,51 @@ func (j *Module) compileDex(ctx android.ModuleContext, flags javaBuilderFlags, return javalibJar } +func (j *Module) compileDexFullD8(ctx android.ModuleContext, flags javaBuilderFlags, + classesJar android.Path, jarName string) android.Path { + + // Translate all the DX flags to D8 ones until all the build files have been migrated + // to D8 flags. See: b/69377755 + var dxFlags []string + for _, x := range j.deviceProperties.Dxflags { + if x == "--core-library" { + continue + } + if x == "--dex" { + continue + } + if x == "--multi-dex" { + continue + } + if x == "--no-locals" { + dxFlags = append(dxFlags, "--release") + continue + } + dxFlags = append(dxFlags, x) + } + + if ctx.AConfig().Getenv("NO_OPTIMIZE_DX") != "" { + dxFlags = append(dxFlags, "--debug") + } + + if ctx.AConfig().Getenv("GENERATE_DEX_DEBUG") != "" { + dxFlags = append(dxFlags, + "--debug", + "--verbose") + } + + dxFlags = append(dxFlags, "--min-api "+j.minSdkVersionNumber(ctx)) + + flags.dxFlags = strings.Join(dxFlags, " ") + + // Compile classes.jar into classes.dex and then javalib.jar + javalibJar := android.PathForModuleOut(ctx, "dex", jarName) + TransformClassesJarToDexJar(ctx, javalibJar, classesJar, flags) + + j.dexJarFile = javalibJar + return javalibJar +} + // Returns a sdk version as a string that is guaranteed to be a parseable as a number. For // modules targeting an unreleased SDK (meaning it does not yet have a number) it returns "10000". func (j *Module) minSdkVersionNumber(ctx android.ModuleContext) string { |