diff options
author | 2017-07-15 03:45:41 +0200 | |
---|---|---|
committer | 2017-07-17 10:11:08 +0200 | |
commit | d448b64ac995efbedd5d0f61fa150f55d3992678 (patch) | |
tree | 9848ece8dccde423e4217208aca8f6e73bd35069 /src/main/java | |
parent | 4594b7fd6c2516341cdd6e57f9eaaf22cf691f95 (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')
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 --> */ |