summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Ostrovsky <david.ostrovsky@gmail.com>2018-09-25 10:10:43 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-09-25 10:10:43 +0000
commite1f6585b1db51519c566f07b463f27fd68aebc2f (patch)
tree22e51e1e08277c142b2d9727d349abb51b03c0e0
parent2d35882d954cd0e75f45e08af58d26cc92d2a0b7 (diff)
parentf55b69f5c95df676f38d286cf3772939007892a9 (diff)
Merge "Bazel: Add support for Java 10"
-rw-r--r--BUILD41
-rw-r--r--Documentation/dev-bazel.txt26
-rw-r--r--tools/bzl/junit.bzl17
-rwxr-xr-xtools/eclipse/project.py12
4 files changed, 86 insertions, 10 deletions
diff --git a/BUILD b/BUILD
index 4bba5a5cf7..d924417c08 100644
--- a/BUILD
+++ b/BUILD
@@ -2,6 +2,10 @@ package(default_visibility = ["//visibility:public"])
load("//tools/bzl:genrule2.bzl", "genrule2")
load("//tools/bzl:pkg_war.bzl", "pkg_war")
+load(
+ "@bazel_tools//tools/jdk:default_java_toolchain.bzl",
+ "default_java_toolchain",
+)
config_setting(
name = "java9",
@@ -10,6 +14,43 @@ config_setting(
},
)
+config_setting(
+ name = "java10",
+ values = {
+ "java_toolchain": ":toolchain_vanilla",
+ },
+)
+
+# TODO(davido): Switch to consuming it from @bazel_tool//tools/jdk:absolute_javabase
+# when new Bazel version is released with this change included:
+# https://github.com/bazelbuild/bazel/issues/6012
+# https://github.com/bazelbuild/bazel/commit/0173bdbf7bdd1874379d4dd3eb70d5321e0f1816
+# As the interim use a hack that works around it by putting the variable reference
+# behind a select
+config_setting(
+ name = "use_absolute_javabase",
+ values = {"define": "USE_ABSOLUTE_JAVABASE=true"},
+)
+
+java_runtime(
+ name = "absolute_javabase",
+ java_home = select({
+ ":use_absolute_javabase": "$(ABSOLUTE_JAVABASE)",
+ "//conditions:default": "",
+ }),
+ visibility = ["//visibility:public"],
+)
+
+# TODO(davido): Switch to consuming it from @bazel_tool//tools/jdk:toolchain_vanilla
+# when my change is included in released Bazel version:
+# https://github.com/bazelbuild/bazel/commit/0bef68e054eccecd690e5d9f46db8a0c4b2d887a
+default_java_toolchain(
+ name = "toolchain_vanilla",
+ forcibly_disable_header_compilation = True,
+ javabuilder = ["@bazel_tools//tools/jdk:VanillaJavaBuilder_deploy.jar"],
+ jvm_opts = [],
+)
+
genrule(
name = "gen_version",
outs = ["version.txt"],
diff --git a/Documentation/dev-bazel.txt b/Documentation/dev-bazel.txt
index 6331581fc7..0ecc82075c 100644
--- a/Documentation/dev-bazel.txt
+++ b/Documentation/dev-bazel.txt
@@ -6,7 +6,7 @@
To build Gerrit from source, you need:
* A Linux or macOS system (Windows is not supported at this time)
-* A JDK for Java 8
+* A JDK for Java 8|9|10
* Python 2 or 3
* Node.js
* link:https://www.bazel.io/versions/master/docs/install.html[Bazel]
@@ -14,6 +14,30 @@ To build Gerrit from source, you need:
* zip, unzip
* gcc
+[[Java 10 support]]
+Java 10 is supported through vanilla java toolchain
+link:https://docs.bazel.build/versions/master/toolchains.html[Bazel option].
+To build Gerrit with Java 10, specify vanilla java toolchain and provide
+path to Java 10 home:
+
+```
+ $ bazel build --host_javabase=:absolute_javabase \
+ --define=ABSOLUTE_JAVABASE=<path-to-java-10> \
+ --define=USE_ABSOLUTE_JAVABASE=true \
+ --host_java_toolchain=//:toolchain_vanilla \
+ --java_toolchain=//:toolchain_vanilla \
+ :release
+```
+
+Note that the following options must be added to `container.javaOptions`
+in `$gerrit_site/etc/gerrit.config` to run Gerrit with Java 10:
+
+```
+[container]
+ javaOptions = --add-modules java.activation
+ javaOptions = --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED
+```
+
[[Java 9 support]]
Java 9 is supported through alternative java toolchain
link:https://docs.bazel.build/versions/master/toolchains.html[Bazel option].
diff --git a/tools/bzl/junit.bzl b/tools/bzl/junit.bzl
index d711356b40..08d50457f9 100644
--- a/tools/bzl/junit.bzl
+++ b/tools/bzl/junit.bzl
@@ -64,6 +64,14 @@ _GenSuite = rule(
implementation = _impl,
)
+POST_JDK8_OPTS = [
+ # Enforce JDK 8 compatibility on Java 9, see
+ # https://docs.oracle.com/javase/9/intl/internationalization-enhancements-jdk-9.htm#JSINT-GUID-AF5AECA7-07C1-4E7D-BC10-BC7E73DC6C7F
+ "-Djava.locale.providers=COMPAT,CLDR,SPI",
+ "--add-modules java.activation",
+ "--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED",
+]
+
def junit_tests(name, srcs, **kwargs):
s_name = name + "TestSuite"
_GenSuite(
@@ -73,13 +81,8 @@ def junit_tests(name, srcs, **kwargs):
)
jvm_flags = kwargs.get("jvm_flags", [])
jvm_flags = jvm_flags + select({
- "//:java9": [
- # Enforce JDK 8 compatibility on Java 9, see
- # https://docs.oracle.com/javase/9/intl/internationalization-enhancements-jdk-9.htm#JSINT-GUID-AF5AECA7-07C1-4E7D-BC10-BC7E73DC6C7F
- "-Djava.locale.providers=COMPAT,CLDR,SPI",
- "--add-modules java.activation",
- "--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED",
- ],
+ "//:java9": POST_JDK8_OPTS,
+ "//:java10": POST_JDK8_OPTS,
"//conditions:default": [],
})
native.java_test(
diff --git a/tools/eclipse/project.py b/tools/eclipse/project.py
index 64d837a2b4..e515a3a27c 100755
--- a/tools/eclipse/project.py
+++ b/tools/eclipse/project.py
@@ -53,21 +53,29 @@ opts.add_option('--name', help='name of the generated project',
opts.add_option('-b', '--batch', action='store_true',
dest='batch', help='Bazel batch option')
opts.add_option('-j', '--java', action='store',
- dest='java', help='Post Java 8 support (9|10|11|...)')
+ dest='java', help='Post Java 8 support (9)')
+opts.add_option('-e', '--edge_java', action='store',
+ dest='edge_java', help='Post Java 9 support (10|11|...)')
args, _ = opts.parse_args()
batch_option = '--batch' if args.batch else None
custom_java = args.java
+edge_java = args.edge_java
def _build_bazel_cmd(*args):
+ build = False
cmd = ['bazel']
if batch_option:
cmd.append('--batch')
for arg in args:
+ if arg == "build":
+ build = True
cmd.append(arg)
- if custom_java:
+ if custom_java and not edge_java:
cmd.append('--host_java_toolchain=@bazel_tools//tools/jdk:toolchain_java%s' % custom_java)
cmd.append('--java_toolchain=@bazel_tools//tools/jdk:toolchain_java%s' % custom_java)
+ if edge_java and build:
+ cmd.append(edge_java)
return cmd