diff options
author | Googler <noreply@google.com> | 2016-11-01 22:09:27 +0000 |
---|---|---|
committer | Laszlo Csomor <laszlocsomor@google.com> | 2016-11-02 08:29:58 +0000 |
commit | 9ab28cbb989306be774bb73b083961b18d4de07d (patch) | |
tree | 6d125bca4b5e5bd843be1a8321aa07efdea82f89 /src/main/java/com/google/devtools | |
parent | 0c6e4cdab3c38f8751fb3b944ccaa53866e4c032 (diff) |
Add support for Rex package map
--
MOS_MIGRATED_REVID=137877037
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java | 25 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java | 8 |
2 files changed, 32 insertions, 1 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 af68930c66..9a40b22f97 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 @@ -151,6 +151,21 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { "'proguard_apply_mapping' can only be used when 'proguard_specs' is also set"); } + if (ruleContext.attributes().isAttributeValueExplicitlySpecified("rex_package_map") + && !ruleContext.attributes().get("rewrite_dexes_with_rex", Type.BOOLEAN)) { + ruleContext.throwWithAttributeError( + "rex_package_map", + "'rex_package_map' can only be used when 'rewrite_dexes_with_rex' is also set"); + } + + if (ruleContext.attributes().isAttributeValueExplicitlySpecified("rex_package_map") + && ruleContext.attributes() + .get(ProguardHelper.PROGUARD_SPECS, BuildType.LABEL_LIST) + .isEmpty()) { + ruleContext.throwWithAttributeError("rex_package_map", + "'rex_package_map' can only be used when 'proguard_specs' is also set"); + } + // TODO(bazel-team): Find a way to simplify this code. // treeKeys() means that the resulting map sorts the entries by key, which is necessary to // ensure determinism. @@ -462,11 +477,19 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { .addOutputArgument(finalDexes); if (proguardOutput.getMapping() != null) { finalProguardMap = getDxArtifact(ruleContext, "rexed_proguard.map"); + Artifact finalRexPackageMap = getDxArtifact(ruleContext, "rex_output_package.map"); rexActionBuilder .addArgument("--proguard_input_map") .addInputArgument(proguardOutput.getMapping()) .addArgument("--proguard_output_map") - .addOutputArgument(finalProguardMap); + .addOutputArgument(finalProguardMap) + .addArgument("--rex_output_package_map") + .addOutputArgument(finalRexPackageMap); + if (ruleContext.attributes().isAttributeValueExplicitlySpecified("rex_package_map")) { + Artifact rexPackageMap = + ruleContext.getPrerequisiteArtifact("rex_package_map", Mode.TARGET); + rexActionBuilder.addArgument("--rex_input_package_map").addInputArgument(rexPackageMap); + } } else { finalProguardMap = proguardOutput.getMapping(); } 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 0efb3dc191..e1156fa866 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 @@ -783,6 +783,14 @@ public final class AndroidRuleClasses { .undocumented("No-op, soon to be removed")) .add(attr(":extra_proguard_specs", LABEL_LIST).value(JavaSemantics.EXTRA_PROGUARD_SPECS)) .add(attr("rewrite_dexes_with_rex", BOOLEAN).value(false).undocumented("experimental")) + /* + File to be used as a package map for Rex tool that keeps the assignment of classes to + dex files of a multi-dex application stable over time. + Can only be used when <code>proguard_specs</code> is also specified. When + <code>proguard_specs</code> is specified, but a package map isn't or there were changes, + Rex suggests an updated package map that can be saved and reused for subsequent builds. + */ + .add(attr("rex_package_map", LABEL).legacyAllowAnyFileType().undocumented("experimental")) .advertiseProvider(JavaCompilationArgsProvider.class) .build(); } |