aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar cushon <cushon@google.com>2018-05-11 10:11:44 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-11 10:13:52 -0700
commit4926eaf573589d063544b48462544b556c5b408e (patch)
tree9e06dfdaf25386469390d3d75bddd38a11e2fd25
parentcfc64a3910ed7c144763f4156a9b4979c5f15d96 (diff)
Allow java_toolchain.header_compiler to be an arbitrary executable
RELNOTES: Allow java_toolchain.header_compiler to be an arbitrary executable PiperOrigin-RevId: 196270007
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java52
-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.java10
3 files changed, 44 insertions, 21 deletions
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 bf3c2988ae..0c29b59382 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
@@ -38,6 +38,7 @@ import com.google.devtools.build.lib.actions.ParamFileInfo;
import com.google.devtools.build.lib.actions.ParameterFile;
import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType;
import com.google.devtools.build.lib.actions.ResourceSet;
+import com.google.devtools.build.lib.actions.RunfilesSupplier;
import com.google.devtools.build.lib.actions.Spawn;
import com.google.devtools.build.lib.actions.SpawnActionContext;
import com.google.devtools.build.lib.actions.SpawnResult;
@@ -114,7 +115,8 @@ public class JavaHeaderCompileAction extends SpawnAction {
CommandLines commandLines,
CommandLine directCommandLine,
CommandLineLimits commandLineLimits,
- CharSequence progressMessage) {
+ CharSequence progressMessage,
+ RunfilesSupplier runfilesSupplier) {
super(
owner,
tools,
@@ -127,8 +129,12 @@ public class JavaHeaderCompileAction extends SpawnAction {
false,
// TODO(#3320): This is missing the config's action environment.
JavaCompileAction.UTF8_ACTION_ENVIRONMENT,
+ /* executionInfo= */ ImmutableMap.of(),
progressMessage,
- "Turbine");
+ runfilesSupplier,
+ "Turbine",
+ /* executeUnconditionally= */ false,
+ /* extraActionInfoSupplier= */ null);
this.directInputs = checkNotNull(directInputs);
this.directCommandLine = checkNotNull(directCommandLine);
}
@@ -372,7 +378,7 @@ public class JavaHeaderCompileAction extends SpawnAction {
NestedSet<Artifact> tools =
NestedSetBuilder.<Artifact>stableOrder()
.add(javacJar)
- .add(javaToolchain.getHeaderCompiler())
+ .addTransitive(javaToolchain.getHeaderCompiler().getFilesToRun())
.addTransitive(toolsJars)
.build();
ImmutableList<Artifact> outputs = ImmutableList.of(outputJar, outputDepsProto);
@@ -409,17 +415,23 @@ public class JavaHeaderCompileAction extends SpawnAction {
if (noFallback) {
commandLine.add("--nojavac_fallback");
}
+ Artifact headerCompiler = javaToolchain.getHeaderCompiler().getExecutable();
+ // The header compiler is either a jar file that needs to be executed using
+ // `java -jar <path>`, or an executable that can be run directly.
+ if (!headerCompiler.getExtension().equals("jar")) {
+ builder.setExecutable(headerCompiler);
+ builder.addTool(javaToolchain.getHeaderCompiler());
+ } else {
+ builder.setJarExecutable(
+ hostJavabase.javaBinaryExecPath(), headerCompiler, javaToolchain.getJvmOptions());
+ }
ruleContext.registerAction(
builder
- .addTools(tools)
+ .addTransitiveTools(tools)
.addTransitiveInputs(baseInputs)
.addTransitiveInputs(classpath)
.addOutputs(outputs)
.addCommandLine(commandLine.build(), paramFileInfo)
- .setJarExecutable(
- hostJavabase.javaBinaryExecPath(),
- javaToolchain.getHeaderCompiler(),
- javaToolchain.getJvmOptions())
.setMnemonic("Turbine")
.setProgressMessage(getProgressMessage())
.build(ruleContext));
@@ -482,8 +494,12 @@ public class JavaHeaderCompileAction extends SpawnAction {
false,
// TODO(b/63280599): This is missing the config's action environment.
JavaCompileAction.UTF8_ACTION_ENVIRONMENT,
+ /* executionInfo= */ ImmutableMap.of(),
getProgressMessageWithAnnotationProcessors(),
- "JavacTurbine"));
+ javaToolchain.getHeaderCompiler().getRunfilesSupplier(),
+ "JavacTurbine",
+ /* executeUnconditionally= */ false,
+ /* extraActionInfoSupplier= */ null));
return;
}
@@ -510,7 +526,8 @@ public class JavaHeaderCompileAction extends SpawnAction {
commandLines,
directCommandLine,
ruleContext.getConfiguration().getCommandLineLimits(),
- getProgressMessage()));
+ getProgressMessage(),
+ javaToolchain.getHeaderCompiler().getRunfilesSupplier()));
}
private LazyString getProgressMessageWithAnnotationProcessors() {
@@ -540,11 +557,16 @@ public class JavaHeaderCompileAction extends SpawnAction {
private CustomCommandLine.Builder getBaseArgs(
JavaToolchainProvider javaToolchain, JavaRuntimeInfo hostJavabase) {
- return CustomCommandLine.builder()
- .addPath(hostJavabase.javaBinaryExecPath())
- .add("-Xverify:none")
- .addAll(javaToolchain.getJvmOptions())
- .addExecPath("-jar", javaToolchain.getHeaderCompiler());
+ Artifact headerCompiler = javaToolchain.getHeaderCompiler().getExecutable();
+ if (!headerCompiler.getExtension().equals("jar")) {
+ return CustomCommandLine.builder().addExecPath(headerCompiler);
+ } else {
+ return CustomCommandLine.builder()
+ .addPath(hostJavabase.javaBinaryExecPath())
+ .add("-Xverify:none")
+ .addAll(javaToolchain.getJvmOptions())
+ .addExecPath("-jar", headerCompiler);
+ }
}
/**
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 c571948e46..736b01da92 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
@@ -65,7 +65,8 @@ public class JavaToolchain implements RuleConfiguredTargetFactory {
Artifact javac = ruleContext.getPrerequisiteArtifact("javac", Mode.HOST);
FilesToRunProvider javabuilder =
ruleContext.getExecutablePrerequisite("javabuilder", Mode.HOST);
- Artifact headerCompiler = ruleContext.getPrerequisiteArtifact("header_compiler", Mode.HOST);
+ FilesToRunProvider headerCompiler =
+ ruleContext.getExecutablePrerequisite("header_compiler", Mode.HOST);
boolean forciblyDisableHeaderCompilation =
ruleContext.attributes().get("forcibly_disable_header_compilation", Type.BOOLEAN);
Artifact singleJar = ruleContext.getPrerequisiteArtifact("singlejar", Mode.HOST);
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 a3962818ff..2938c4e5d6 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
@@ -76,7 +76,7 @@ public class JavaToolchainProvider extends ToolchainInfo {
Artifact javac,
NestedSet<Artifact> tools,
FilesToRunProvider javaBuilder,
- @Nullable Artifact headerCompiler,
+ @Nullable FilesToRunProvider headerCompiler,
boolean forciblyDisableHeaderCompilation,
Artifact singleJar,
@Nullable Artifact oneVersion,
@@ -120,7 +120,7 @@ public class JavaToolchainProvider extends ToolchainInfo {
private final Artifact javac;
private final NestedSet<Artifact> tools;
private final FilesToRunProvider javaBuilder;
- @Nullable private final Artifact headerCompiler;
+ @Nullable private final FilesToRunProvider headerCompiler;
private final boolean forciblyDisableHeaderCompilation;
private final Artifact singleJar;
@Nullable private final Artifact oneVersion;
@@ -144,7 +144,7 @@ public class JavaToolchainProvider extends ToolchainInfo {
Artifact javac,
NestedSet<Artifact> tools,
FilesToRunProvider javaBuilder,
- @Nullable Artifact headerCompiler,
+ @Nullable FilesToRunProvider headerCompiler,
boolean forciblyDisableHeaderCompilation,
Artifact singleJar,
@Nullable Artifact oneVersion,
@@ -214,9 +214,9 @@ public class JavaToolchainProvider extends ToolchainInfo {
return javaBuilder;
}
- /** @return the {@link Artifact} of the Header Compiler deploy jar */
+ /** @return the {@link FilesToRunProvider} of the Header Compiler deploy jar */
@Nullable
- public Artifact getHeaderCompiler() {
+ public FilesToRunProvider getHeaderCompiler() {
return headerCompiler;
}