aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java24
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;
}