Skip to content

Commit

Permalink
Support both java8 and java9.
Browse files Browse the repository at this point in the history
Change-Id: Icc47e634a01b73acec827a354098e225915c5495
  • Loading branch information
hhclam committed Dec 5, 2017
1 parent 9ac1f28 commit 64212c8
Show file tree
Hide file tree
Showing 8 changed files with 98 additions and 9 deletions.
2 changes: 2 additions & 0 deletions src/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -159,8 +159,10 @@ py_binary(
"//src/main/native:embedded_tools",
"//src/main/protobuf:srcs",
"//src/java_tools/buildjar:JavaBuilderDeploy",
"//src/java_tools/buildjar:JavaBuilderNoJavacDeploy",
"//src/java_tools/buildjar:VanillaJavaBuilder_deploy.jar",
"//src/java_tools/buildjar/java/com/google/devtools/build/buildjar/genclass:GenClass_deploy.jar",
"//src/java_tools/buildjar:dummy",
"//src/java_tools/junitrunner/java/com/google/testing/junit/runner:Runner_deploy.jar",
"//src/java_tools/junitrunner/java/com/google/testing/junit/runner:ExperimentalRunner_deploy.jar",
"//src/java_tools/junitrunner/java/com/google/testing/coverage:embedded_tools",
Expand Down
1 change: 1 addition & 0 deletions src/create_embedded_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
('*tools/jdk/BUILD*', lambda x: 'tools/jdk/BUILD'),
('*tools/platforms/platforms.BUILD', lambda x: 'platforms/BUILD'),
('*tools/platforms/*', lambda x: 'platforms/' + os.path.basename(x)),
('*dummy.jar', lambda x: 'tools/jdk/' + os.path.basename(x)),
('*JavaBuilder*_deploy.jar', lambda x: 'tools/jdk/' + os.path.basename(x)),
('*JacocoCoverage*_deploy.jar',
lambda x: 'tools/jdk/JacocoCoverage_deploy.jar'),
Expand Down
15 changes: 15 additions & 0 deletions src/java_tools/buildjar/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,27 @@ java_binary(
runtime_deps = ["//src/java_tools/buildjar/java/com/google/devtools/build/buildjar:vanilla_java_builder"],
)

java_library(
name = "dummy",
)

filegroup(
name = "JavaBuilderDeploy",
srcs = [":JavaBuilder_deploy.jar"],
tags = ["manual"],
)

genrule(
name = "JavaBuilderNoJavacDeploy",
srcs = [":JavaBuilder_deploy.jar"],
outs = ["JavaBuilderNoJavac_deploy.jar"],
# Strip away the known classes from javac.jar.
cmd =
"cp $< $@ && chmod u+w $@ && zip $@ " +
"-d jdk/\* com/sun/\* > /dev/null",
tags = ["manual"],
)

filegroup(
name = "bootstrap_deploy.jar",
srcs = ["//src/java_tools/buildjar/java/com/google/devtools/build/buildjar:bootstrap_deploy.jar"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public final class OptionsParser {

private String ruleKind;
private String targetLabel;

private boolean testOnly;

/**
Expand Down Expand Up @@ -203,6 +203,15 @@ private void processCommandlineArgs(Deque<String> argQueue) throws InvalidComman
case "--testonly":
testOnly = true;
break;
// Java 9 new options that begins with --.
// Only the ones that are useful for modifying JDK internal modules are listed here.
// They are needed for compiling code that uses JDK internals.
case "--patch-module":
case "--add-exports":
case "--add-modules":
javacOpts.add(arg);
collectFlagArguments(javacOpts, argQueue, "--");
break;
default:
throw new InvalidCommandLineException("unknown option : '" + arg + "'");
}
Expand Down
21 changes: 14 additions & 7 deletions src/main/cpp/blaze.cc
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,11 @@ static vector<string> GetArgumentArray() {
globals->options->AddJVMArgumentPrefix(
blaze_util::Dirname(blaze_util::Dirname(globals->jvm_path)), &result);

if (CheckJavaVersionIsAtLeast(globals->jvm_version, "9.0")) {
result.push_back("--illegal-access=warn");
// Suppress Java 9 illegal access warning.
result.push_back("--add-opens=java.base/java.nio=ALL-UNNAMED");
}
result.push_back("-XX:+HeapDumpOnOutOfMemoryError");
string heap_crash_path = globals->options->output_base;
result.push_back("-XX:HeapDumpPath=" + blaze::PathAsJvmFlag(heap_crash_path));
Expand Down Expand Up @@ -561,17 +566,18 @@ static void GoToWorkspace(const WorkspaceLayout *workspace_layout) {
}

// Check the java version if a java version specification is bundled. On
// success, returns the executable path of the java command.
// success, outputs java executable path and the current jvm version.
static void VerifyJavaVersionAndSetJvm() {
string exe = globals->options->GetJvm();

string version_spec_file = blaze_util::JoinPath(
GetEmbeddedBinariesRoot(globals->options->install_base), "java.version");
string version_spec = "";
string version_spec;
string jvm_version;
if (blaze_util::ReadFile(version_spec_file, &version_spec)) {
blaze_util::StripWhitespace(&version_spec);
// A version specification is given, get version of java.
string jvm_version = GetJvmVersion(exe);
jvm_version = GetJvmVersion(exe);

// Compare that jvm_version is found and at least the one specified.
if (jvm_version.empty()) {
Expand All @@ -588,11 +594,12 @@ static void VerifyJavaVersionAndSetJvm() {
}

globals->jvm_path = exe;
globals->jvm_version = jvm_version;
}

// Starts the Blaze server.
static int StartServer(const WorkspaceLayout *workspace_layout,
BlazeServerStartup **server_startup) {
BlazeServerStartup **server_startup) {
vector<string> jvm_args_vector = GetArgumentArray();
string argument_string = GetArgumentString(jvm_args_vector);
string server_dir =
Expand Down Expand Up @@ -711,8 +718,8 @@ static void SetRestartReasonIfNotSet(RestartReason restart_reason) {
}

// Starts up a new server and connects to it. Exits if it didn't work out.
static void StartServerAndConnect(const WorkspaceLayout *workspace_layout,
BlazeServer *server) {
static void StartServerAndConnect(
const WorkspaceLayout *workspace_layout, BlazeServer *server) {
string server_dir =
blaze_util::JoinPath(globals->options->output_base, "server");

Expand Down Expand Up @@ -1123,7 +1130,7 @@ static void CancelServer() { blaze_server->Cancel(); }
// Performs all I/O for a single client request to the server, and
// shuts down the client (by exit or signal).
static ATTRIBUTE_NORETURN void SendServerRequest(
const WorkspaceLayout *workspace_layout, BlazeServer *server) {
const WorkspaceLayout *workspace_layout, BlazeServer *server) {
while (true) {
if (!server->Connected()) {
StartServerAndConnect(workspace_layout, server);
Expand Down
3 changes: 3 additions & 0 deletions src/main/cpp/global_variables.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ struct GlobalVariables {
// The path of the JVM executable that should be used to launch Blaze.
std::string jvm_path;

// Version of the JVM.
std::string jvm_version;

// TODO(laszlocsomor) 2016-11-28: move pid_t usage out of here and whereever
// else it appears. Find some way to not have to declare a pid_t here, either
// by making PID handling platform-independent or some other idea.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -497,7 +497,12 @@ private void addWorkspaceFunctions(Environment workspaceEnv, StoredEventHandler
workspaceEnv.update("__workspace_dir__", workspaceDir.getPathString());
}
File jreDirectory = new File(System.getProperty("java.home"));
workspaceEnv.update("DEFAULT_SERVER_JAVABASE", jreDirectory.getParentFile().toString());
if (jreDirectory.getName().toLowerCase() == "jre") {
workspaceEnv.update("DEFAULT_SERVER_JAVABASE", jreDirectory.getParentFile().toString());
} else {
// Mostly this is running on JDK 9 which does not have jre/ directory.
workspaceEnv.update("DEFAULT_SERVER_JAVABASE", jreDirectory.toString());
}

for (EnvironmentExtension extension : environmentExtensions) {
extension.updateWorkspace(workspaceEnv);
Expand Down
47 changes: 47 additions & 0 deletions tools/jdk/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,21 @@ filegroup(
srcs = ["//tools/jdk:JavaBuilder_deploy.jar"],
)

filegroup(
name = "javabuilder_nojavac",
srcs = ["//tools/jdk:JavaBuilderNoJavac_deploy.jar"],
)

filegroup(
name = "vanillajavabuilder",
srcs = ["//tools/jdk:VanillaJavaBuilder_deploy.jar"],
)

filegroup(
name = "dummy",
srcs = ["//tools/jdk:libdummy.jar"],
)

BOOTCLASS_JARS = [
"rt.jar",
"resources.jar",
Expand Down Expand Up @@ -195,6 +205,43 @@ java_toolchain(
target_version = "8",
)

java_toolchain(
name = "jdk9",
bootclasspath = [],
compatible_javacopts = {
# Restrict protos to Java 7 so that they are compatible with Android.
"proto": [
"-source",
"7",
"-target",
"7",
"-XDallowBetterNullChecks=false",
],
},
encoding = "UTF-8",
extclasspath = [":extclasspath"],
forcibly_disable_header_compilation = 1,
genclass = ["@bazel_tools//tools/jdk:genclass"],
header_compiler = ["@bazel_tools//tools/jdk:turbine"],
ijar = ["@bazel_tools//tools/jdk:ijar"],
javabuilder = ["@bazel_tools//tools/jdk:javabuilder_nojavac"],
javac = ["@bazel_tools//tools/jdk:dummy"],
javac_supports_workers = 1,
jvm_opts = [
"--add-opens=java.base/java.nio=ALL-UNNAMED",
"-XX:+TieredCompilation",
"-XX:TieredStopAtLevel=1",
],
misc = [
"-XDskipDuplicateBridges=true",
"-g",
"-parameters",
],
singlejar = ["@bazel_tools//tools/jdk:singlejar"],
source_version = "9",
target_version = "9",
)

filegroup(
name = "srcs",
srcs = [
Expand Down

0 comments on commit 64212c8

Please sign in to comment.