Skip to content

Commit

Permalink
Bazel: Fix toolchain vanilla to not hard code java 8
Browse files Browse the repository at this point in the history
The main feature of toolchain_vanilla definition is to support newer
Java language versions that the embedded JDK, e.g.: at the time of this
change, toolchain_java could be used to support building with JDK 13 and
produce byte code major version 57, using the combination of absolute
javabase and toolchain_vanilla:

  $ bazel build --define=ABSOLUTE_JAVABASE=/use/local/bin/jdk-13 \
    --javabase=@bazel_tools//tools/jdk:absolute_javabase \
    --host_javabase=@bazel_tools//tools/jdk:absolute_javabase \
    --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_vanilla \
    --java_toolchain=@bazel_tools//tools/jdk:toolchain_vanilla \
  :gerrit

Unfortunately, [1] sets source and target language levels to Java 8 to
restore backwards compatibility, to fix a regression, that was
introduced during upgrade of remote JDK version to Java 11, in: [2].

This change restores the neutrality of toolchain_vanilla declaration by
unsetting source and target language level versions. So that the bazel
invocation in the example above produces byte code major version 57
(Java 13), and not 52 (Java 8) as it is the case before this change.

Also add a TODO, to remove the workaround, when this issue is fixed:
[3].

[1] bazelbuild/bazel@6ef6d87
[2] bazelbuild/bazel@bad5a2b
[3] bazelbuild/bazel#9415

Bug: Issue 11571
Change-Id: I721067202de744883bc8c74bb4106ad08f19c66d
  • Loading branch information
davido committed Sep 22, 2019
1 parent 7f7cb6e commit aee1f80
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 6 deletions.
12 changes: 6 additions & 6 deletions Documentation/dev-bazel.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ provide the path to JDK home:
$ bazel build \
--define=ABSOLUTE_JAVABASE=<path-to-java-12> \
--host_javabase=@bazel_tools//tools/jdk:absolute_javabase \
--host_java_toolchain=@bazel_tools//tools/jdk:toolchain_vanilla \
--java_toolchain=@bazel_tools//tools/jdk:toolchain_vanilla \
--host_java_toolchain=//tools:toolchain_vanilla \
--java_toolchain=//tools:toolchain_vanilla \
:release
```

Expand All @@ -56,8 +56,8 @@ bazel test runs the test using the target javabase:
--define=ABSOLUTE_JAVABASE=<path-to-java-12> \
--javabase=@bazel_tools//tools/jdk:absolute_javabase \
--host_javabase=@bazel_tools//tools/jdk:absolute_javabase \
--host_java_toolchain=@bazel_tools//tools/jdk:toolchain_vanilla \
--java_toolchain=@bazel_tools//tools/jdk:toolchain_vanilla \
--host_java_toolchain=//tools:toolchain_vanilla \
--java_toolchain=//tools:toolchain_vanilla \
//...
```

Expand All @@ -69,8 +69,8 @@ $ cat << EOF > ~/.bazelrc
> build --define=ABSOLUTE_JAVABASE=<path-to-java-12>
> build --javabase=@bazel_tools//tools/jdk:absolute_javabase
> build --host_javabase=@bazel_tools//tools/jdk:absolute_javabase
> build --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_vanilla
> build --java_toolchain=@bazel_tools//tools/jdk:toolchain_vanilla
> build --host_java_toolchain=//tools:toolchain_vanilla
> build --java_toolchain=//tools:toolchain_vanilla
> EOF
```

Expand Down
13 changes: 13 additions & 0 deletions tools/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,19 @@ py_binary(
visibility = ["//visibility:public"],
)

# TODO(davido): Remove this workaround and switch to using toolchain_vanilla
# from this Bazel package again: @bazel_tools//tools/jdk:toolchain_vanilla,
# when this issue is fixed: https://github.com/bazelbuild/bazel/issues/9415.
default_java_toolchain(
name = "toolchain_vanilla",
forcibly_disable_header_compilation = True,
javabuilder = ["@bazel_tools//tools/jdk:vanillajavabuilder"],
jvm_opts = [],
source_version = "",
target_version = "",
visibility = ["//visibility:public"],
)

default_java_toolchain(
name = "error_prone_warnings_toolchain",
bootclasspath = ["@bazel_tools//tools/jdk:platformclasspath.jar"],
Expand Down

0 comments on commit aee1f80

Please sign in to comment.