aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xscripts/bootstrap/bootstrap.sh2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java29
-rwxr-xr-xsrc/test/shell/integration/java_integration_test.sh10
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"