diff options
4 files changed, 25 insertions, 7 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 662efcfd06..4a76c10303 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 @@ -857,8 +857,9 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { private static ProguardOutput createEmptyProguardAction(RuleContext ruleContext, Artifact proguardOutputJar, Artifact deployJarArtifact) throws InterruptedException { - ImmutableList.Builder<Artifact> failures = - ImmutableList.<Artifact>builder().add(proguardOutputJar); + ImmutableList.Builder<Artifact> failures = ImmutableList.<Artifact>builder() + .add(proguardOutputJar) + .add(ruleContext.getImplicitOutputArtifact(JavaSemantics.JAVA_BINARY_PROGUARD_CONFIG)); if (ruleContext.attributes().get("proguard_generate_mapping", Type.BOOLEAN)) { failures.add(ruleContext.getImplicitOutputArtifact(JavaSemantics.JAVA_BINARY_PROGUARD_MAP)); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java index e0f7a61783..159f00d523 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java @@ -281,6 +281,7 @@ public final class AndroidRuleClasses { if (hasProguardSpecs) { functions.add(AndroidRuleClasses.ANDROID_BINARY_PROGUARD_JAR); + functions.add(JavaSemantics.JAVA_BINARY_PROGUARD_CONFIG); if (mapping) { functions.add(JavaSemantics.JAVA_BINARY_PROGUARD_MAP); } 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 96cff5445d..cd54d70f9d 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,8 @@ public interface JavaSemantics { fromTemplates("%{name}_deploy.jar.unstripped"); SafeImplicitOutputsFunction JAVA_BINARY_PROGUARD_MAP = fromTemplates("%{name}_proguard.map"); + SafeImplicitOutputsFunction JAVA_BINARY_PROGUARD_CONFIG = + fromTemplates("%{name}_proguard.config"); SafeImplicitOutputsFunction JAVA_BINARY_DEPLOY_SOURCE_JAR = fromTemplates("%{name}_deploy-src.jar"); 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 3dbdc860af..0ac94586be 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 @@ -257,6 +257,9 @@ public abstract class ProguardHelper { proguardOutputMap = null; } + Artifact proguardConfigOutput = + ruleContext.getImplicitOutputArtifact(JavaSemantics.JAVA_BINARY_PROGUARD_CONFIG); + if (optimizationPasses == null) { // Run proguard as a single step. Builder builder = makeBuilder( @@ -266,7 +269,8 @@ public abstract class ProguardHelper { proguardMapping, libraryJars, proguardOutputJar, - proguardOutputMap) + proguardOutputMap, + proguardConfigOutput) .setProgressMessage("Trimming binary with Proguard") .addOutput(proguardOutputJar); @@ -284,7 +288,8 @@ public abstract class ProguardHelper { proguardMapping, libraryJars, proguardOutputJar, - /* proguardOutputMap */ null) + /* proguardOutputMap */ null, + /* proguardConfigOutput */ null) .setProgressMessage("Trimming binary with Proguard: Verification/Shrinking Pass") .addArgument("-runtype INITIAL") .addArgument("-nextstageoutput") @@ -302,7 +307,8 @@ public abstract class ProguardHelper { proguardMapping, libraryJars, proguardOutputJar, - /* proguardOutputMap */ null) + /* proguardOutputMap */ null, + /* proguardConfigOutput */ null) .setProgressMessage("Trimming binary with Proguard: Optimization Pass " + (i + 1)) .addArgument("-runtype OPTIMIZATION") .addArgument("-laststageoutput") @@ -320,7 +326,8 @@ public abstract class ProguardHelper { proguardMapping, libraryJars, proguardOutputJar, - proguardOutputMap) + proguardOutputMap, + proguardConfigOutput) .setProgressMessage("Trimming binary with Proguard: Obfuscation and Final Ouput Pass") .addArgument("-runtype FINAL") .addArgument("-laststageoutput") @@ -340,7 +347,8 @@ public abstract class ProguardHelper { @Nullable Artifact proguardMapping, Iterable<Artifact> libraryJars, Artifact proguardOutputJar, - @Nullable Artifact proguardOutputMap) { + @Nullable Artifact proguardOutputMap, + @Nullable Artifact proguardConfigOutput) { Builder builder = new SpawnAction.Builder() .addInputs(libraryJars) @@ -380,6 +388,12 @@ public abstract class ProguardHelper { .addOutputArgument(proguardOutputMap); } + if (proguardConfigOutput != null) { + builder + .addArgument("-printconfiguration") + .addOutputArgument(proguardConfigOutput); + } + return builder; } |