diff options
Diffstat (limited to 'src')
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. |