diff options
5 files changed, 31 insertions, 47 deletions
diff --git a/scripts/bootstrap/bootstrap.sh b/scripts/bootstrap/bootstrap.sh index eeac8d1d20..3f8ba74da2 100755 --- a/scripts/bootstrap/bootstrap.sh +++ b/scripts/bootstrap/bootstrap.sh @@ -58,7 +58,6 @@ if [ -z "${BAZEL-}" ]; then shift run_bazel_jar $command \ ${_BAZEL_ARGS} --verbose_failures \ - "--javabase=${JAVA_HOME}" "--host_javabase=${JAVA_HOME}" \ --javacopt="-g -source ${JAVA_VERSION} -target ${JAVA_VERSION}" "${@}" } else @@ -67,7 +66,6 @@ else shift ${BAZEL} --bazelrc=${BAZELRC} ${BAZEL_DIR_STARTUP_OPTIONS} $command \ ${_BAZEL_ARGS} --verbose_failures \ - "--javabase=${JAVA_HOME}" "--host_javabase=${JAVA_HOME}" \ --javacopt="-g -source ${JAVA_VERSION} -target ${JAVA_VERSION}" "${@}" } fi diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java index bed8b35806..b32e2435c2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java @@ -531,12 +531,14 @@ public class JavaBinary implements RuleConfiguredTargetFactory { javaRuntime = javabaseTarget.get(JavaRuntimeInfo.PROVIDER); builder.addTransitiveArtifacts(javaRuntime.javaBaseInputs()); - // Add symlinks to the C++ runtime libraries under a path that can be built - // into the Java binary without having to embed the crosstool, gcc, and grte - // version information contained within the libraries' package paths. - for (Artifact lib : dynamicRuntimeActionInputs) { - PathFragment path = CPP_RUNTIMES.getRelative(lib.getExecPath().getBaseName()); - builder.addSymlink(path, lib); + if (!javaRuntime.javaHome().isAbsolute()) { + // Add symlinks to the C++ runtime libraries under a path that can be built + // into the Java binary without having to embed the crosstool, gcc, and grte + // version information contained within the libraries' package paths. + for (Artifact lib : dynamicRuntimeActionInputs) { + PathFragment path = CPP_RUNTIMES.getRelative(lib.getExecPath().getBaseName()); + builder.addSymlink(path, lib); + } } } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java index dfc01bd953..21b9ef4965 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java @@ -21,7 +21,6 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelLis import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelMapConverter; import com.google.devtools.build.lib.analysis.config.BuildConfiguration.StrictDepsConverter; import com.google.devtools.build.lib.analysis.config.BuildConfiguration.StrictDepsMode; -import com.google.devtools.build.lib.analysis.config.DefaultsPackage; import com.google.devtools.build.lib.analysis.config.FragmentOptions; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.rules.java.JavaConfiguration.JavaClasspathMode; @@ -34,7 +33,6 @@ import com.google.devtools.common.options.OptionEffectTag; import com.google.devtools.common.options.OptionMetadataTag; import com.google.devtools.common.options.TriState; import java.util.HashMap; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -72,6 +70,7 @@ public class JavaOptions extends FragmentOptions { name = "javabase", defaultValue = "@bazel_tools//tools/jdk:jdk", category = "version", + converter = LabelConverter.class, documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, effectTags = {OptionEffectTag.UNKNOWN}, help = @@ -79,7 +78,7 @@ public class JavaOptions extends FragmentOptions { + "java_runtime_suite which will be used to execute " + "external Java commands." ) - public String javaBase; + public Label javaBase; @Option( name = "java_toolchain", @@ -106,6 +105,7 @@ public class JavaOptions extends FragmentOptions { @Option( name = "host_javabase", defaultValue = "@bazel_tools//tools/jdk:jdk", + converter = LabelConverter.class, category = "version", documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, effectTags = {OptionEffectTag.UNKNOWN}, @@ -113,7 +113,7 @@ public class JavaOptions extends FragmentOptions { "JAVABASE used for the host JDK. This is the java_runtime_suite which is used to execute " + "tools during a build." ) - public String hostJavaBase; + public Label hostJavaBase; @Option( name = "javacopt", @@ -519,15 +519,6 @@ public class JavaOptions extends FragmentOptions { public boolean jplPropagateCcLinkParamsStore; @Option( - name = "experimental_disable_absolute_javabase", - defaultValue = "false", - documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, - effectTags = {OptionEffectTag.AFFECTS_OUTPUTS, OptionEffectTag.LOADING_AND_ANALYSIS}, - metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE} - ) - public boolean disableAbsoluteJavabase; - - @Option( name = "experimental_enable_jvm_configuration_make_variables", defaultValue = "true", documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, @@ -559,7 +550,6 @@ public class JavaOptions extends FragmentOptions { public FragmentOptions getHost() { JavaOptions host = (JavaOptions) getDefault(); - host.disableAbsoluteJavabase = disableAbsoluteJavabase; host.javaBase = hostJavaBase; host.jvmOpts = ImmutableList.of("-XX:ErrorFile=/dev/stderr"); @@ -589,11 +579,8 @@ public class JavaOptions extends FragmentOptions { @Override public Map<String, Set<Label>> getDefaultsLabels(BuildConfiguration.Options commonOptions) { - Set<Label> jdkLabels = new LinkedHashSet<>(); - DefaultsPackage.parseAndAdd(jdkLabels, javaBase); - DefaultsPackage.parseAndAdd(jdkLabels, hostJavaBase); Map<String, Set<Label>> result = new HashMap<>(); - result.put("JDK", jdkLabels); + result.put("JDK", ImmutableSet.of(javaBase, hostJavaBase)); result.put("JAVA_TOOLCHAIN", ImmutableSet.of(javaToolchain)); return result; diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java b/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java index a43088ce9c..b2d00e83f5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java @@ -24,7 +24,6 @@ import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactor import com.google.devtools.build.lib.analysis.config.FragmentOptions; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.NoSuchPackageException; @@ -57,20 +56,11 @@ public final class JvmConfigurationLoader implements ConfigurationFragmentFactor // TODO(bazel-team): Instead of returning null here, add another method to the interface. return null; } - String javaHome = javaOptions.javaBase; - String cpu = buildOptions.get(BuildConfiguration.Options.class).cpu; - - try { - return createFromJavaRuntimeSuite(env, javaHome, cpu, javaOptions.enableMakeVariables); - } catch (LabelSyntaxException e) { - // Try again with legacy - } - if (javaOptions.disableAbsoluteJavabase) { - throw new InvalidConfigurationException("Absolute --javabase is disabled"); - } + String cpu = buildOptions.get(BuildConfiguration.Options.class).cpu; - return createFromAbsoluteJavabase(javaHome, javaOptions.enableMakeVariables); + return createFromJavaRuntimeSuite(env, javaOptions.javaBase, cpu, + javaOptions.enableMakeVariables); } @Override @@ -85,15 +75,14 @@ public final class JvmConfigurationLoader implements ConfigurationFragmentFactor @Nullable private static Jvm createFromJavaRuntimeSuite( - ConfigurationEnvironment lookup, String javaHome, String cpu, boolean enableMakeVariables) - throws InvalidConfigurationException, LabelSyntaxException, InterruptedException { + ConfigurationEnvironment lookup, Label javaBase, String cpu, boolean enableMakeVariables) + throws InvalidConfigurationException, InterruptedException { try { - Label label = Label.parseAbsolute(javaHome); - label = RedirectChaser.followRedirects(lookup, label, "jdk"); - if (label == null) { + javaBase = RedirectChaser.followRedirects(lookup, javaBase, "jdk"); + if (javaBase == null) { return null; } - Target javaHomeTarget = lookup.getTarget(label); + Target javaHomeTarget = lookup.getTarget(javaBase); if (javaHomeTarget instanceof Rule) { if (!((Rule) javaHomeTarget).getRuleClass().equals("java_runtime_suite")) { throw new InvalidConfigurationException( @@ -104,7 +93,7 @@ public final class JvmConfigurationLoader implements ConfigurationFragmentFactor return createFromRuntimeSuite(lookup, (Rule) javaHomeTarget, cpu, enableMakeVariables); } throw new InvalidConfigurationException( - "No JVM target found under " + javaHome + " that would work for " + cpu); + "No JVM target found under " + javaBase + " that would work for " + cpu); } catch (NoSuchThingException e) { lookup.getEventHandler().handle(Event.error(e.getMessage())); throw new InvalidConfigurationException(e.getMessage(), e); diff --git a/src/test/shell/integration/java_integration_test.sh b/src/test/shell/integration/java_integration_test.sh index 82e0bb3efb..984eca739d 100755 --- a/src/test/shell/integration/java_integration_test.sh +++ b/src/test/shell/integration/java_integration_test.sh @@ -251,9 +251,17 @@ function assert_singlejar_works() { local -r javabase="${BAZEL_RUNFILES}/${runfiles_relative_javabase}" fi + mkdir -p "$pkg/jvm" + cat > "$pkg/jvm/BUILD" <<EOF +package(default_visibility=["//visibility:public"]) +java_runtime_suite(name='suite', default=':runtime') +java_runtime(name='runtime', java_home='$javabase') +EOF + + # Set javabase to an absolute path. bazel build //$pkg/java/hello:hello //$pkg/java/hello:hello_deploy.jar \ - "$stamp_arg" --javabase="$javabase" "$embed_label" >&"$TEST_log" \ + "$stamp_arg" --javabase="//$pkg/jvm:suite" "$embed_label" >&"$TEST_log" \ || fail "Build failed" mkdir $pkg/ugly/ || fail "mkdir failed" |