From 849df36c5ad31ebe8791c4228321c38c6d0ae56c Mon Sep 17 00:00:00 2001 From: cushon Date: Mon, 14 May 2018 01:51:45 -0700 Subject: Use the local JDK as the default target javabase and continue to use the embedded JDK as the default host_javabase. PiperOrigin-RevId: 196471714 --- .../devtools/build/lib/analysis/BlazeDirectories.java | 17 ++++++++++++++++- .../devtools/build/lib/bazel/rules/java/jdk.WORKSPACE | 6 ++++++ .../devtools/build/lib/packages/WorkspaceFactory.java | 14 ++++++++++++-- .../google/devtools/build/lib/runtime/BlazeRuntime.java | 8 +++++++- .../build/lib/runtime/BlazeServerStartupOptions.java | 12 ++++++++++++ .../build/lib/skyframe/WorkspaceFileFunction.java | 3 ++- .../lib/skyframe/packages/AbstractPackageLoader.java | 5 ++++- .../serialization/testutils/FakeDirectories.java | 5 ++++- 8 files changed, 63 insertions(+), 7 deletions(-) (limited to 'src/main/java/com/google/devtools') diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java index 02d7a2f8a1..c2e9721b2c 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java @@ -52,6 +52,11 @@ public final class BlazeDirectories { private final ServerDirectories serverDirectories; /** Workspace root and server CWD. */ private final Path workspace; + /** + * The root of the user's local JDK install, to be used as the default target javabase and as a + * fall-back host_javabase. This is not the embedded JDK. + */ + private final Path defaultSystemJavabase; /** The root of all build actions. */ private final Path execRoot; @@ -62,9 +67,14 @@ public final class BlazeDirectories { private final String productName; @AutoCodec.Instantiator - public BlazeDirectories(ServerDirectories serverDirectories, Path workspace, String productName) { + public BlazeDirectories( + ServerDirectories serverDirectories, + Path workspace, + Path defaultSystemJavabase, + String productName) { this.serverDirectories = serverDirectories; this.workspace = workspace; + this.defaultSystemJavabase = defaultSystemJavabase; this.productName = productName; Path outputBase = serverDirectories.getOutputBase(); Path execRootBase = outputBase.getChild("execroot"); @@ -99,6 +109,11 @@ public final class BlazeDirectories { return workspace; } + /** Returns the root of the user's local JDK install (not the embedded JDK). */ + public Path getLocalJavabase() { + return defaultSystemJavabase; + } + /** Returns if the workspace directory is a valid workspace. */ public boolean inWorkspace() { return this.workspace != null; diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE index 7963114996..631fdfd841 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE @@ -2,6 +2,12 @@ new_local_repository( name = "local_jdk", + path = DEFAULT_SYSTEM_JAVABASE, + build_file = __embedded_dir__ + "/jdk.BUILD", +) + +new_local_repository( + name = "embedded_jdk", path = DEFAULT_SERVER_JAVABASE, build_file = __embedded_dir__ + "/jdk.BUILD", ) diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java index 73358746d9..5d55d31012 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java +++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java @@ -71,12 +71,14 @@ public class WorkspaceFactory { "__embedded_dir__", // serializable so optional "__workspace_dir__", // serializable so optional "DEFAULT_SERVER_JAVABASE", // serializable so optional + "DEFAULT_SYSTEM_JAVABASE", // serializable so optional PackageFactory.PKG_CONTEXT); private final Package.Builder builder; private final Path installDir; private final Path workspaceDir; + private final Path defaultSystemJavabaseDir; private final Mutability mutability; private final boolean allowOverride; @@ -107,7 +109,7 @@ public class WorkspaceFactory { RuleClassProvider ruleClassProvider, ImmutableList environmentExtensions, Mutability mutability) { - this(builder, ruleClassProvider, environmentExtensions, mutability, true, null, null); + this(builder, ruleClassProvider, environmentExtensions, mutability, true, null, null, null); } // TODO(bazel-team): document installDir @@ -118,6 +120,7 @@ public class WorkspaceFactory { * @param mutability the Mutability for the current evaluation context * @param installDir the install directory * @param workspaceDir the workspace directory + * @param defaultSystemJavabaseDir the local JDK directory */ public WorkspaceFactory( Package.Builder builder, @@ -126,11 +129,13 @@ public class WorkspaceFactory { Mutability mutability, boolean allowOverride, @Nullable Path installDir, - @Nullable Path workspaceDir) { + @Nullable Path workspaceDir, + @Nullable Path defaultSystemJavabaseDir) { this.builder = builder; this.mutability = mutability; this.installDir = installDir; this.workspaceDir = workspaceDir; + this.defaultSystemJavabaseDir = defaultSystemJavabaseDir; this.allowOverride = allowOverride; this.environmentExtensions = environmentExtensions; this.ruleFactory = new RuleFactory(ruleClassProvider, AttributeContainer::new); @@ -534,6 +539,11 @@ public class WorkspaceFactory { javaHome = javaHome.getParentFile(); } workspaceEnv.update("DEFAULT_SERVER_JAVABASE", javaHome.toString()); + workspaceEnv.update( + "DEFAULT_SYSTEM_JAVABASE", + defaultSystemJavabaseDir != null + ? defaultSystemJavabaseDir.toString() + : javaHome.toString()); for (EnvironmentExtension extension : environmentExtensions) { extension.updateWorkspace(workspaceEnv); diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java index 064f020e2a..cdad1e53b4 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java @@ -1016,6 +1016,7 @@ public final class BlazeRuntime { String productName = startupOptions.productName.toLowerCase(Locale.US); PathFragment workspaceDirectory = startupOptions.workspaceDirectory; + PathFragment defaultSystemJavabase = startupOptions.defaultSystemJavabase; PathFragment outputUserRoot = startupOptions.outputUserRoot; PathFragment installBase = startupOptions.installBase; PathFragment outputBase = startupOptions.outputBase; @@ -1060,6 +1061,10 @@ public final class BlazeRuntime { if (!workspaceDirectory.equals(PathFragment.EMPTY_FRAGMENT)) { workspaceDirectoryPath = fs.getPath(workspaceDirectory); } + Path defaultSystemJavabasePath = null; + if (!defaultSystemJavabase.equals(PathFragment.EMPTY_FRAGMENT)) { + defaultSystemJavabasePath = fs.getPath(defaultSystemJavabase); + } ServerDirectories serverDirectories = new ServerDirectories( @@ -1097,7 +1102,8 @@ public final class BlazeRuntime { BlazeRuntime runtime = runtimeBuilder.build(); BlazeDirectories directories = - new BlazeDirectories(serverDirectories, workspaceDirectoryPath, productName); + new BlazeDirectories( + serverDirectories, workspaceDirectoryPath, defaultSystemJavabasePath, productName); BinTools binTools; try { binTools = BinTools.forProduction(directories); diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java index e5a8069a88..a5b81be80b 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java @@ -176,6 +176,18 @@ public class BlazeServerStartupOptions extends OptionsBase { ) public PathFragment workspaceDirectory; + @Option( + name = "default_system_javabase", + defaultValue = "", // NOTE: only for documentation, value is always passed by the client. + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = {OptionEffectTag.CHANGES_INPUTS, OptionEffectTag.LOSES_INCREMENTAL_STATE}, + metadataTags = {OptionMetadataTag.HIDDEN}, + converter = OptionsUtils.PathFragmentConverter.class, + help = + "The root of the user's local JDK install, to be used as the default target javabase" + + " and as a fall-back host_javabase. This is not the embedded JDK.") + public PathFragment defaultSystemJavabase; + @Option( name = "max_idle_secs", // NOTE: default value only used for documentation, value is always passed by the client when diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java index 945ecfe559..a82a9a7f38 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java @@ -99,7 +99,8 @@ public class WorkspaceFileFunction implements SkyFunction { mutability, key.getIndex() == 0, directories.getEmbeddedBinariesRoot(), - directories.getWorkspace()); + directories.getWorkspace(), + directories.getLocalJavabase()); if (key.getIndex() > 0) { WorkspaceFileValue prevValue = (WorkspaceFileValue) env.getValue( WorkspaceFileValue.key(key.getPath(), key.getIndex() - 1)); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java index d71830427d..7ca43d003b 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java @@ -147,7 +147,10 @@ public abstract class AbstractPackageLoader implements PackageLoader { Path devNull = workspaceDir.getFileSystem().getPath("/dev/null"); directories = new BlazeDirectories( - new ServerDirectories(installBase, outputBase, devNull), workspaceDir, "blaze"); + new ServerDirectories(installBase, outputBase, devNull), + workspaceDir, + /* defaultSystemJavabase= */ null, + "blaze"); this.pkgLocator = new PathPackageLocator( diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/FakeDirectories.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/FakeDirectories.java index dfece60f3c..8d67d99d4c 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/FakeDirectories.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/FakeDirectories.java @@ -30,7 +30,10 @@ public class FakeDirectories { public static final BlazeDirectories BLAZE_DIRECTORIES = new BlazeDirectories( - SERVER_DIRECTORIES, OUTPUT_BASE.getRelative("execroot/io_bazel"), "bazel"); + SERVER_DIRECTORIES, + OUTPUT_BASE.getRelative("execroot/io_bazel"), + /* defaultSystemJavabase= */ null, + "bazel"); private FakeDirectories() {} } -- cgit v1.2.3