diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
3 files changed, 62 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index daf7d5b086..ae6b9ad159 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -960,7 +960,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { optMode == JavaOptimizationMode.LEGACY ? "without proguard_specs" : "in optimization mode " + optMode))); - return new ProguardOutput(deployJarArtifact, null, null, null); + return new ProguardOutput(deployJarArtifact, null, null, null, null, null); } private static ResourceApk shrinkResources( 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 c2f5e7c69b..edbea1c954 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 @@ -70,6 +70,10 @@ public interface JavaSemantics { fromTemplates("%{name}_proguard.map"); SafeImplicitOutputsFunction JAVA_BINARY_PROGUARD_PROTO_MAP = fromTemplates("%{name}_proguard.pbmap"); + SafeImplicitOutputsFunction JAVA_BINARY_PROGUARD_SEEDS = + fromTemplates("%{name}_proguard.seeds"); + SafeImplicitOutputsFunction JAVA_BINARY_PROGUARD_USAGE = + fromTemplates("%{name}_proguard.usage"); SafeImplicitOutputsFunction JAVA_BINARY_PROGUARD_CONFIG = fromTemplates("%{name}_proguard.config"); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java index e4daee2693..565da35671 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java @@ -32,7 +32,6 @@ import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.rules.java.JavaConfiguration.JavaOptimizationMode; import com.google.devtools.build.lib.syntax.Type; - import javax.annotation.Nullable; /** @@ -53,15 +52,21 @@ public abstract class ProguardHelper { private final Artifact outputJar; @Nullable private final Artifact mapping; @Nullable private final Artifact protoMapping; + @Nullable private final Artifact seeds; + @Nullable private final Artifact usage; private final Artifact config; public ProguardOutput(Artifact outputJar, @Nullable Artifact mapping, @Nullable Artifact protoMapping, + @Nullable Artifact seeds, + @Nullable Artifact usage, Artifact config) { this.outputJar = checkNotNull(outputJar); this.mapping = mapping; this.protoMapping = protoMapping; + this.seeds = seeds; + this.usage = usage; this.config = config; } @@ -79,6 +84,16 @@ public abstract class ProguardHelper { return protoMapping; } + @Nullable + public Artifact getSeeds() { + return seeds; + } + + @Nullable + public Artifact getUsage() { + return usage; + } + public Artifact getConfig() { return config; } @@ -92,6 +107,12 @@ public abstract class ProguardHelper { if (protoMapping != null) { filesBuilder.add(protoMapping); } + if (seeds != null) { + filesBuilder.add(seeds); + } + if (usage != null) { + filesBuilder.add(usage); + } if (config != null) { filesBuilder.add(config); } @@ -264,11 +285,22 @@ public abstract class ProguardHelper { proguardOutputProtoMap = semantics.getProtoMapping(ruleContext); } + Artifact proguardOutputSeeds = + ruleContext.getImplicitOutputArtifact(JavaSemantics.JAVA_BINARY_PROGUARD_SEEDS); + + Artifact proguardOutputUsage = + ruleContext.getImplicitOutputArtifact(JavaSemantics.JAVA_BINARY_PROGUARD_USAGE); + Artifact proguardConfigOutput = ruleContext.getImplicitOutputArtifact(JavaSemantics.JAVA_BINARY_PROGUARD_CONFIG); return new ProguardOutput( - outputJar, proguardOutputMap, proguardOutputProtoMap, proguardConfigOutput); + outputJar, + proguardOutputMap, + proguardOutputProtoMap, + proguardOutputSeeds, + proguardOutputUsage, + proguardConfigOutput); } /** @@ -303,7 +335,7 @@ public abstract class ProguardHelper { Preconditions.checkArgument(optMode != JavaOptimizationMode.LEGACY || !proguardSpecs.isEmpty()); ProguardOutput output = getProguardOutputs(proguardOutputJar, ruleContext, semantics); - + if (optimizationPasses == null) { // Run proguard as a single step. Builder builder = makeBuilder( @@ -315,6 +347,8 @@ public abstract class ProguardHelper { output.getOutputJar(), output.getMapping(), output.getProtoMapping(), + output.getSeeds(), + output.getUsage(), output.getConfig()) .setProgressMessage("Trimming binary with Proguard") .addOutput(proguardOutputJar); @@ -334,6 +368,8 @@ public abstract class ProguardHelper { output.getOutputJar(), /* proguardOutputMap */ null, /* proguardOutputProtoMap */ null, + /* proguardOutputSeeds */ null, + /* proguardOutputUsage */ null, /* proguardConfigOutput */ null) .setProgressMessage("Trimming binary with Proguard: Verification/Shrinking Pass") .addArgument("-runtype INITIAL") @@ -354,6 +390,8 @@ public abstract class ProguardHelper { output.getOutputJar(), /* proguardOutputMap */ null, /* proguardOutputProtoMap */ null, + /* proguardOutputSeeds */ null, + /* proguardOutputUsage */ null, /* proguardConfigOutput */ null) .setProgressMessage("Trimming binary with Proguard: Optimization Pass " + (i + 1)) .addArgument("-runtype OPTIMIZATION") @@ -374,6 +412,8 @@ public abstract class ProguardHelper { output.getOutputJar(), output.getMapping(), output.getProtoMapping(), + output.getSeeds(), + output.getUsage(), output.getConfig()) .setProgressMessage("Trimming binary with Proguard: Obfuscation and Final Ouput Pass") .addArgument("-runtype FINAL") @@ -396,6 +436,8 @@ public abstract class ProguardHelper { Artifact proguardOutputJar, @Nullable Artifact proguardOutputMap, @Nullable Artifact proguardOutputProtoMap, + @Nullable Artifact proguardOutputSeeds, + @Nullable Artifact proguardOutputUsage, @Nullable Artifact proguardConfigOutput) { Builder builder = new SpawnAction.Builder() @@ -442,6 +484,18 @@ public abstract class ProguardHelper { .addOutputArgument(proguardOutputProtoMap); } + if (proguardOutputSeeds != null) { + builder + .addArgument("-printseeds") + .addOutputArgument(proguardOutputSeeds); + } + + if (proguardOutputUsage != null) { + builder + .addArgument("-printusage") + .addOutputArgument(proguardOutputUsage); + } + if (proguardConfigOutput != null) { builder .addArgument("-printconfiguration") |