aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2018-01-02 18:14:25 -0800
committerColin Cross <ccross@android.com>2018-01-02 18:23:43 -0800
commit7fdd2b788c760ea48e20f330ea5860d6a14c625c (patch)
treeb839058822c02d9e560419b255e3942a175073a4 /java
parentee6143cde25cbe41df754337de89d608ca890bb1 (diff)
downloadandroid_build_soong-7fdd2b788c760ea48e20f330ea5860d6a14c625c.tar.gz
android_build_soong-7fdd2b788c760ea48e20f330ea5860d6a14c625c.tar.bz2
android_build_soong-7fdd2b788c760ea48e20f330ea5860d6a14c625c.zip
Pass OpenJDK 8's bootclasspath for host tools targeting <= 1.8.
Follow the Make change in I9b6081edfdd2c3e9a450ae8a39c4e32c3d2cda92 to explicitly pass the OpenJDK 8 bootclasspath when targeting <= 1.8. Bug: 70862583 Test: java_test.go Test: javap -c -p out/soong/.intermediates/external/guava/guava/linux_glibc_common/javac/classes/com/google/common/hash/AbstractStreamingHashFunction\$AbstractStreamingHasher.class | grep ByteBuffer.flip shows java/nio/Buffer return type in signature. Change-Id: Ief66bbf6e3a4220b3afb2e02009bd0157d4c7fae
Diffstat (limited to 'java')
-rw-r--r--java/java.go23
-rw-r--r--java/java_test.go29
2 files changed, 43 insertions, 9 deletions
diff --git a/java/java.go b/java/java.go
index dbf202a0..8159af85 100644
--- a/java/java.go
+++ b/java/java.go
@@ -597,6 +597,29 @@ func (j *Module) collectBuilderFlags(ctx android.ModuleContext, deps deps) javaB
// classpath
flags.bootClasspath.AddPaths(deps.bootClasspath)
flags.classpath.AddPaths(deps.classpath)
+
+ if len(flags.bootClasspath) == 0 && ctx.Host() && !ctx.Config().TargetOpenJDK9() &&
+ !Bool(j.properties.No_standard_libs) &&
+ inList(flags.javaVersion, []string{"1.6", "1.7", "1.8"}) {
+ // Give host-side tools a version of OpenJDK's standard libraries
+ // close to what they're targeting. As of Dec 2017, AOSP is only
+ // bundling OpenJDK 8 and 9, so nothing < 8 is available.
+ //
+ // When building with OpenJDK 8, the following should have no
+ // effect since those jars would be available by default.
+ //
+ // When building with OpenJDK 9 but targeting a version < 1.8,
+ // putting them on the bootclasspath means that:
+ // a) code can't (accidentally) refer to OpenJDK 9 specific APIs
+ // b) references to existing APIs are not reinterpreted in an
+ // OpenJDK 9-specific way, eg. calls to subclasses of
+ // java.nio.Buffer as in http://b/70862583
+ java8Home := ctx.Config().Getenv("ANDROID_JAVA8_HOME")
+ flags.bootClasspath = append(flags.bootClasspath,
+ android.PathForSource(ctx, java8Home, "jre/lib/jce.jar"),
+ android.PathForSource(ctx, java8Home, "jre/lib/rt.jar"))
+ }
+
// systemModules
if deps.systemModules != nil {
flags.systemModules = append(flags.systemModules, deps.systemModules)
diff --git a/java/java_test.go b/java/java_test.go
index 84fe9030..6e14a706 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -53,6 +53,12 @@ func TestMain(m *testing.M) {
}
func testConfig(env map[string]string) android.Config {
+ if env == nil {
+ env = make(map[string]string)
+ }
+ if env["ANDROID_JAVA8_HOME"] == "" {
+ env["ANDROID_JAVA8_HOME"] = "jdk8"
+ }
return android.TestArchConfig(buildDir, env)
}
@@ -150,6 +156,9 @@ func testContext(config android.Config, bp string,
"build/target/product/security/testkey": nil,
"build/soong/scripts/jar-wrapper.sh": nil,
+
+ "jdk8/jre/lib/jce.jar": nil,
+ "jdk8/jre/lib/rt.jar": nil,
}
for k, v := range fs {
@@ -364,11 +373,12 @@ var classpathTestcases = []struct {
},
{
- name: "host default",
- moduleType: "java_library_host",
- properties: ``,
- host: android.Host,
- classpath: []string{},
+ name: "host default",
+ moduleType: "java_library_host",
+ properties: ``,
+ host: android.Host,
+ bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"},
+ classpath: []string{},
},
{
name: "host nostdlib",
@@ -379,10 +389,11 @@ var classpathTestcases = []struct {
},
{
- name: "host supported default",
- host: android.Host,
- properties: `host_supported: true,`,
- classpath: []string{},
+ name: "host supported default",
+ host: android.Host,
+ properties: `host_supported: true,`,
+ classpath: []string{},
+ bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"},
},
{
name: "host supported nostdlib",