aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2015-08-21 19:50:36 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-08-24 14:02:31 +0000
commitb9f89e6542c7bed311d4167adae076be5472bbd6 (patch)
tree0e7a490da088f164392a3d0b9015bd22ee4cf443 /src
parentc466e6b3c429cd58ebaa0af16e7c2fcb615f973b (diff)
Add the implicit output of unstripped binary for Launcher-enabled java_binary.
Use stripped launcher when Fission is enabled. -- MOS_MIGRATED_REVID=101244628
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java29
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java41
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java6
5 files changed, 77 insertions, 33 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
index 94321471c1..6bb7fcd192 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
@@ -283,7 +283,7 @@ public class BazelJavaSemantics implements JavaSemantics {
Iterable<Artifact> buildInfoFiles, ImmutableList<Artifact> resources,
Iterable<Artifact> classpath, boolean includeBuildData,
Compression compression, Artifact launcher) {
- return DeployArchiveBuilder.defaultSingleJarCommandLine(output, mainClass, manifestLines,
+ return DeployArchiveBuilder.defaultSingleJarCommandLine(output, mainClass, manifestLines,
buildInfoFiles, resources, classpath, includeBuildData, compression, launcher).build();
}
@@ -296,10 +296,10 @@ public class BazelJavaSemantics implements JavaSemantics {
@Override
public Artifact getLauncher(RuleContext ruleContext, JavaCommon common,
DeployArchiveBuilder deployArchiveBuilder, Runfiles.Builder runfilesBuilder,
- List<String> jvmFlags, JavaTargetAttributes.Builder attributesBuilder) {
+ List<String> jvmFlags, JavaTargetAttributes.Builder attributesBuilder, boolean shouldStrip) {
return JavaHelper.launcherArtifactForTarget(this, ruleContext);
}
-
+
@Override
public void addDependenciesForRunfiles(RuleContext ruleContext, Runfiles.Builder builder) {
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
index ad50ad4131..1dde2a44fd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
@@ -266,7 +266,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
// Create the stripped binary, but don't add it to filesToBuild; it's only built when requested.
Artifact strippedFile = ruleContext.getImplicitOutputArtifact(
CppRuleClasses.CC_BINARY_STRIPPED);
- createStripAction(ruleContext, cppConfiguration, executable, strippedFile);
+ CppHelper.createStripAction(ruleContext, cppConfiguration, executable, strippedFile);
DwoArtifactsCollector dwoArtifacts =
collectTransitiveDwoArtifacts(ruleContext, ccCompilationOutputs, linkStaticness);
@@ -331,33 +331,6 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
}
/**
- * Creates an action to strip an executable.
- */
- private static void createStripAction(RuleContext context,
- CppConfiguration cppConfiguration, Artifact input, Artifact output) {
- context.registerAction(new SpawnAction.Builder()
- .addInput(input)
- .addTransitiveInputs(CppHelper.getToolchain(context).getStrip())
- .addOutput(output)
- .useDefaultShellEnvironment()
- .setExecutable(cppConfiguration.getStripExecutable())
- .addArguments("-S", "-p", "-o", output.getExecPathString())
- .addArguments("-R", ".gnu.switches.text.quote_paths")
- .addArguments("-R", ".gnu.switches.text.bracket_paths")
- .addArguments("-R", ".gnu.switches.text.system_paths")
- .addArguments("-R", ".gnu.switches.text.cpp_defines")
- .addArguments("-R", ".gnu.switches.text.cpp_includes")
- .addArguments("-R", ".gnu.switches.text.cl_args")
- .addArguments("-R", ".gnu.switches.text.lipo_info")
- .addArguments("-R", ".gnu.switches.text.annotation")
- .addArguments(cppConfiguration.getStripOpts())
- .addArgument(input.getExecPathString())
- .setProgressMessage("Stripping " + output.prettyPrint() + " for " + context.getLabel())
- .setMnemonic("CcStrip")
- .build(context));
- }
-
- /**
* Given 'temps', traverse this target and its dependencies and collect up all
* the object files, libraries, linker options, linkstamps attributes and linker scripts.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index 0ad2a332dd..0a628f333a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -28,6 +28,7 @@ import com.google.devtools.build.lib.analysis.FileProvider;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
+import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.packages.RuleErrorConsumer;
@@ -524,4 +525,31 @@ public class CppHelper {
return parent.replaceName(parent.getBaseName() + "-lipodata")
.getChild(configuration.getGenfilesFragment().getBaseName());
}
+
+ /**
+ * Creates an action to strip an executable.
+ */
+ public static void createStripAction(RuleContext context,
+ CppConfiguration cppConfiguration, Artifact input, Artifact output) {
+ context.registerAction(new SpawnAction.Builder()
+ .addInput(input)
+ .addTransitiveInputs(CppHelper.getToolchain(context).getStrip())
+ .addOutput(output)
+ .useDefaultShellEnvironment()
+ .setExecutable(cppConfiguration.getStripExecutable())
+ .addArguments("-S", "-p", "-o", output.getExecPathString())
+ .addArguments("-R", ".gnu.switches.text.quote_paths")
+ .addArguments("-R", ".gnu.switches.text.bracket_paths")
+ .addArguments("-R", ".gnu.switches.text.system_paths")
+ .addArguments("-R", ".gnu.switches.text.cpp_defines")
+ .addArguments("-R", ".gnu.switches.text.cpp_includes")
+ .addArguments("-R", ".gnu.switches.text.cl_args")
+ .addArguments("-R", ".gnu.switches.text.lipo_info")
+ .addArguments("-R", ".gnu.switches.text.annotation")
+ .addArguments(cppConfiguration.getStripOpts())
+ .addArgument(input.getExecPathString())
+ .setProgressMessage("Stripping " + output.prettyPrint() + " for " + context.getLabel())
+ .setMnemonic("CcStrip")
+ .build(context));
+ }
}
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 206043e5c1..63a2320ce7 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
@@ -29,10 +29,12 @@ import com.google.devtools.build.lib.analysis.Runfiles;
import com.google.devtools.build.lib.analysis.RunfilesProvider;
import com.google.devtools.build.lib.analysis.RunfilesSupport;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
+import com.google.devtools.build.lib.analysis.actions.FileWriteAction;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
+import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
import com.google.devtools.build.lib.rules.cpp.CppHelper;
import com.google.devtools.build.lib.rules.cpp.LinkerInput;
import com.google.devtools.build.lib.rules.java.JavaCompilationArgs.ClasspathType;
@@ -103,8 +105,21 @@ public class JavaBinary implements RuleConfiguredTargetFactory {
ImmutableList<Artifact> srcJars = ImmutableList.of(srcJar);
+ CppConfiguration cppConfiguration = ruleContext.getConfiguration().getFragment(
+ CppConfiguration.class);
+ boolean stripAsDefault = cppConfiguration.useFission();
Artifact launcher = semantics.getLauncher(ruleContext, common, deployArchiveBuilder,
- runfilesBuilder, jvmFlags, attributesBuilder);
+ runfilesBuilder, jvmFlags, attributesBuilder, stripAsDefault);
+
+ DeployArchiveBuilder unstrippedDeployArchiveBuilder = null;
+ Artifact unstrippedLauncher = null;
+ if (stripAsDefault) {
+ unstrippedDeployArchiveBuilder = new DeployArchiveBuilder(semantics, ruleContext);
+ unstrippedLauncher = semantics.getLauncher(ruleContext, common,
+ unstrippedDeployArchiveBuilder, runfilesBuilder, jvmFlags, attributesBuilder,
+ false /* shouldStrip */);
+ }
+
JavaCompilationArtifacts.Builder javaArtifactsBuilder = new JavaCompilationArtifacts.Builder();
Artifact instrumentationMetadata =
helper.createInstrumentationMetadata(classJar, javaArtifactsBuilder);
@@ -217,6 +232,9 @@ public class JavaBinary implements RuleConfiguredTargetFactory {
Artifact deployJar =
ruleContext.getImplicitOutputArtifact(JavaSemantics.JAVA_BINARY_DEPLOY_JAR);
+ Artifact unstrippedDeployJar =
+ ruleContext.getImplicitOutputArtifact(JavaSemantics.JAVA_UNSTRIPPED_BINARY_DEPLOY_JAR);
+
deployArchiveBuilder
.setOutputJar(deployJar)
.setJavaStartClass(mainClass)
@@ -231,6 +249,27 @@ public class JavaBinary implements RuleConfiguredTargetFactory {
deployArchiveBuilder.build();
+ if (stripAsDefault) {
+ unstrippedDeployArchiveBuilder
+ .setOutputJar(unstrippedDeployJar)
+ .setJavaStartClass(mainClass)
+ .setDeployManifestLines(deployManifestLines)
+ .setAttributes(attributes)
+ .addRuntimeJars(common.getJavaCompilationArtifacts().getRuntimeJars())
+ .setIncludeBuildData(true)
+ .setRunfilesMiddleman(
+ runfilesSupport == null ? null : runfilesSupport.getRunfilesMiddleman())
+ .setCompression(COMPRESSED)
+ .setLauncher(unstrippedLauncher);
+
+ unstrippedDeployArchiveBuilder.build();
+ } else {
+ // Write an empty file as the name_deploy.jar.unstripped when the default output jar is not
+ // stripped.
+ ruleContext.registerAction(
+ new FileWriteAction(ruleContext.getActionOwner(), unstrippedDeployJar, "", false));
+ }
+
common.addTransitiveInfoProviders(builder, filesToBuild, classJar);
return builder
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java
index 010e3b90d6..f025762b1a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java
@@ -67,6 +67,10 @@ public interface JavaSemantics {
public static final SafeImplicitOutputsFunction JAVA_BINARY_DEPLOY_JAR =
fromTemplates("%{name}_deploy.jar");
+
+ public static final SafeImplicitOutputsFunction JAVA_UNSTRIPPED_BINARY_DEPLOY_JAR =
+ fromTemplates("%{name}_deploy.jar.unstripped");
+
public static final SafeImplicitOutputsFunction JAVA_BINARY_DEPLOY_SOURCE_JAR =
fromTemplates("%{name}_deploy-src.jar");
@@ -329,7 +333,7 @@ public interface JavaSemantics {
*/
Artifact getLauncher(final RuleContext ruleContext, final JavaCommon common,
DeployArchiveBuilder deployArchiveBuilder, Runfiles.Builder runfilesBuilder,
- List<String> jvmFlags, JavaTargetAttributes.Builder attributesBuilder);
+ List<String> jvmFlags, JavaTargetAttributes.Builder attributesBuilder, boolean shouldStrip);
/**
* Add extra dependencies for runfiles of a Java binary.