aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar cushon <cushon@google.com>2017-07-15 03:45:41 +0200
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-07-17 10:11:08 +0200
commitd448b64ac995efbedd5d0f61fa150f55d3992678 (patch)
tree9848ece8dccde423e4217208aca8f6e73bd35069 /src/main/java/com/google/devtools/build/lib
parent4594b7fd6c2516341cdd6e57f9eaaf22cf691f95 (diff)
Add a java_toolchain.tools attribute
for configuring additional Java compilation tools, which are added as inputs to javac and turbine actions and available for jvm_opts location expansion. PiperOrigin-RevId: 162036912
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java27
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java37
6 files changed, 65 insertions, 27 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java
index e6cdecf6d4..dc2672bfcf 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java
@@ -205,6 +205,7 @@ public final class JavaCompilationHelper {
builder.setSourcePathEntries(attributes.getSourcePath());
builder.setExtdirInputs(getExtdirInputs());
builder.setLangtoolsJar(javaToolchain.getJavac());
+ builder.setToolsJars(javaToolchain.getTools());
builder.setJavaBuilderJar(javaToolchain.getJavaBuilder());
builder.setOutputJar(classJar);
builder.setManifestProtoOutput(manifestProtoOutput);
@@ -393,6 +394,7 @@ public final class JavaCompilationHelper {
.addAll(additionalJavaBaseInputs)
.build());
builder.setJavacJar(javaToolchain.getJavac());
+ builder.setToolsJars(javaToolchain.getTools());
builder.build(javaToolchain);
artifactBuilder.setCompileTimeDependencies(headerDeps);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
index 0fbe097fcf..12c99a38ea 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
@@ -414,7 +414,6 @@ public final class JavaCompileAction extends SpawnAction {
private static CustomMultiArgv spawnCommandLineBase(
final PathFragment javaExecutable,
final Artifact javaBuilderJar,
- final Artifact langtoolsJar,
final ImmutableList<Artifact> instrumentationJars,
final ImmutableList<String> javaBuilderJvmFlags,
final String javaBuilderMainClass,
@@ -422,7 +421,6 @@ public final class JavaCompileAction extends SpawnAction {
return new CustomMultiArgv() {
@Override
public Iterable<String> argv() {
- checkNotNull(langtoolsJar);
checkNotNull(javaBuilderJar);
CustomCommandLine.Builder builder =
@@ -502,6 +500,7 @@ public final class JavaCompileAction extends SpawnAction {
private ImmutableList<Artifact> extdirInputs = ImmutableList.of();
private Artifact javaBuilderJar;
private Artifact langtoolsJar;
+ private NestedSet<Artifact> toolsJars = NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER);
private ImmutableList<Artifact> instrumentationJars = ImmutableList.of();
private PathFragment sourceGenDirectory;
private PathFragment tempDirectory;
@@ -590,14 +589,14 @@ public final class JavaCompileAction extends SpawnAction {
paramFileContents, ParameterFile.ParameterFileType.UNQUOTED, ISO_8859_1);
analysisEnvironment.registerAction(parameterFileWriteAction);
- CustomMultiArgv spawnCommandLineBase = spawnCommandLineBase(
- javaExecutable,
- javaBuilderJar,
- langtoolsJar,
- instrumentationJars,
- javacJvmOpts,
- semantics.getJavaBuilderMainClass(),
- pathSeparator);
+ CustomMultiArgv spawnCommandLineBase =
+ spawnCommandLineBase(
+ javaExecutable,
+ javaBuilderJar,
+ instrumentationJars,
+ javacJvmOpts,
+ semantics.getJavaBuilderMainClass(),
+ pathSeparator);
// The actual params-file-based command line executed for a compile action.
CommandLine javaBuilderCommandLine = CustomCommandLine.builder()
@@ -608,6 +607,7 @@ public final class JavaCompileAction extends SpawnAction {
NestedSet<Artifact> tools =
NestedSetBuilder.<Artifact>stableOrder()
.add(langtoolsJar)
+ .addTransitive(toolsJars)
.add(javaBuilderJar)
.addAll(instrumentationJars)
.build();
@@ -943,6 +943,13 @@ public final class JavaCompileAction extends SpawnAction {
return this;
}
+ /** Sets the tools jars. */
+ public Builder setToolsJars(NestedSet<Artifact> toolsJars) {
+ checkNotNull(toolsJars, "toolsJars must not be null");
+ this.toolsJars = toolsJars;
+ return this;
+ }
+
public Builder setJavaBuilderJar(Artifact javaBuilderJar) {
this.javaBuilderJar = javaBuilderJar;
return this;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java
index 046149453f..25fff15b9e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java
@@ -188,6 +188,7 @@ public class JavaHeaderCompileAction extends SpawnAction {
private NestedSet<Artifact> javabaseInputs;
private Artifact javacJar;
+ private NestedSet<Artifact> toolsJars = NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER);
public Builder(RuleContext ruleContext) {
this.ruleContext = ruleContext;
@@ -318,6 +319,14 @@ public class JavaHeaderCompileAction extends SpawnAction {
this.javacJar = javacJar;
return this;
}
+
+ /** Sets the tools jars. */
+ public Builder setToolsJars(NestedSet<Artifact> toolsJars) {
+ checkNotNull(toolsJars, "toolsJars must not be null");
+ this.toolsJars = toolsJars;
+ return this;
+ }
+
/** Builds and registers the {@link JavaHeaderCompileAction} for a header compilation. */
public void build(JavaToolchainProvider javaToolchain) {
ruleContext.registerAction(buildInternal(javaToolchain));
@@ -349,7 +358,12 @@ public class JavaHeaderCompileAction extends SpawnAction {
// javac-turbine.
boolean requiresAnnotationProcessing = !processorNames.isEmpty();
- Iterable<Artifact> tools = ImmutableList.of(javacJar, javaToolchain.getHeaderCompiler());
+ NestedSet<Artifact> tools =
+ NestedSetBuilder.<Artifact>stableOrder()
+ .add(javacJar)
+ .add(javaToolchain.getHeaderCompiler())
+ .addTransitive(toolsJars)
+ .build();
ImmutableList<Artifact> outputs = ImmutableList.of(outputJar, outputDepsProto);
NestedSet<Artifact> baseInputs =
NestedSetBuilder.<Artifact>stableOrder()
@@ -357,7 +371,7 @@ public class JavaHeaderCompileAction extends SpawnAction {
.addAll(bootclasspathEntries)
.addAll(sourceJars)
.addAll(sourceFiles)
- .addAll(tools)
+ .addTransitive(tools)
.build();
boolean noFallback =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java
index a2068f6375..65169ab536 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java
@@ -72,6 +72,8 @@ public final class JavaToolchain implements RuleConfiguredTargetFactory {
ImmutableListMultimap<String, String> compatibleJavacOptions =
getCompatibleJavacOptions(ruleContext);
+ NestedSet<Artifact> tools = PrerequisiteArtifacts.nestedSet(ruleContext, "tools", Mode.HOST);
+
TransitiveInfoCollection javacDep = ruleContext.getPrerequisite("javac", Mode.HOST);
List<String> jvmOpts = getJvmOpts(
ruleContext,
@@ -98,6 +100,7 @@ public final class JavaToolchain implements RuleConfiguredTargetFactory {
extclasspath,
configuration.getDefaultJavacFlags(),
javac,
+ tools,
javabuilder,
headerCompiler,
forciblyDisableHeaderCompilation,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
index 3d621a3715..cbb0159c07 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
@@ -46,6 +46,7 @@ public abstract class JavaToolchainProvider implements TransitiveInfoProvider {
NestedSet<Artifact> extclasspath,
List<String> defaultJavacFlags,
Artifact javac,
+ NestedSet<Artifact> tools,
Artifact javaBuilder,
@Nullable Artifact headerCompiler,
boolean forciblyDisableHeaderCompilation,
@@ -65,6 +66,7 @@ public abstract class JavaToolchainProvider implements TransitiveInfoProvider {
extclasspath,
data.getEncoding(),
javac,
+ tools,
javaBuilder,
headerCompiler,
forciblyDisableHeaderCompilation,
@@ -107,6 +109,9 @@ public abstract class JavaToolchainProvider implements TransitiveInfoProvider {
/** Returns the {@link Artifact} of the javac jar */
public abstract Artifact getJavac();
+ /** Returns the {@link Artifact}s of compilation tools. */
+ public abstract NestedSet<Artifact> getTools();
+
/** Returns the {@link Artifact} of the JavaBuilder deploy jar */
public abstract Artifact getJavaBuilder();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
index 5fabbdf6bd..4068aa4671 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
@@ -98,11 +98,16 @@ public final class JavaToolchainRule implements RuleDefinition {
/* <!-- #BLAZE_RULE(java_toolchain).ATTRIBUTE(javac) -->
Label of the javac jar.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
- .add(attr("javac", LABEL_LIST)
- .mandatory()
- .cfg(HOST)
- .singleArtifact()
- .allowedFileTypes(FileTypeSet.ANY_FILE))
+ .add(
+ attr("javac", LABEL_LIST)
+ .mandatory()
+ .cfg(HOST)
+ .singleArtifact()
+ .allowedFileTypes(FileTypeSet.ANY_FILE))
+ /* <!-- #BLAZE_RULE(java_toolchain).ATTRIBUTE(tools) -->
+ Labels of tools available for label-expansion in jvm_opts.
+ <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+ .add(attr("tools", LABEL_LIST).cfg(HOST).allowedFileTypes(FileTypeSet.ANY_FILE))
/* <!-- #BLAZE_RULE(java_toolchain).ATTRIBUTE(javabuilder) -->
Label of the JavaBuilder deploy jar.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
@@ -146,11 +151,12 @@ public final class JavaToolchainRule implements RuleDefinition {
Label of a resource jar containing timezone data. If set, the timezone data is added as an
implicitly runtime dependency of all java_binary rules.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
- .add(attr("timezone_data", LABEL)
- .cfg(HOST)
- .singleArtifact()
- .allowedFileTypes(FileTypeSet.ANY_FILE)
- .exec())
+ .add(
+ attr("timezone_data", LABEL)
+ .cfg(HOST)
+ .singleArtifact()
+ .allowedFileTypes(FileTypeSet.ANY_FILE)
+ .exec())
/* <!-- #BLAZE_RULE(java_toolchain).ATTRIBUTE(ijar) -->
Label of the ijar executable.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
@@ -172,11 +178,12 @@ public final class JavaToolchainRule implements RuleDefinition {
/* <!-- #BLAZE_RULE(java_toolchain).ATTRIBUTE(oneversion) -->
Label of the one-version enforcement binary.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
- .add(attr("oneversion", LABEL)
- .cfg(HOST)
- .singleArtifact()
- .allowedFileTypes(FileTypeSet.ANY_FILE)
- .exec())
+ .add(
+ attr("oneversion", LABEL)
+ .cfg(HOST)
+ .singleArtifact()
+ .allowedFileTypes(FileTypeSet.ANY_FILE)
+ .exec())
/* <!-- #BLAZE_RULE(java_toolchain).ATTRIBUTE(oneversion_whitelist) -->
Label of the one-version whitelist.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */