aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar dannark <dannark@google.com>2017-11-30 14:42:45 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-11-30 14:44:58 -0800
commitb2d82018906b15cf979ea74444c55d828a5b6ca7 (patch)
treee3328fae547a428e6804d792344eabb26e650e21 /src/main
parenta497af13e48b097f1a28ec70150bdc7132e3b0d8 (diff)
Add rexopts attribute to android_binary.
RELNOTES: None PiperOrigin-RevId: 177510583
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java1
2 files changed, 11 insertions, 0 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 68edd38d20..d806620b12 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
@@ -166,6 +166,11 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
ruleContext.throwWithAttributeError("rex_package_map",
"'rex_package_map' can only be used when 'proguard_specs' is also set");
}
+ if (ruleContext.attributes().isAttributeValueExplicitlySpecified("rexopts")
+ && !ruleContext.attributes().get("rewrite_dexes_with_rex", Type.BOOLEAN)) {
+ ruleContext.throwWithAttributeError(
+ "rexopts", "'rexopts' can only be used when 'rewrite_dexes_with_rex' is also set");
+ }
if (ruleContext.attributes().isAttributeValueExplicitlySpecified("resources")
&& DataBinding.isEnabled(ruleContext)) {
ruleContext.throwWithRuleError("Data binding doesn't work with the \"resources\" attribute. "
@@ -520,6 +525,11 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
|| getMultidexMode(ruleContext) == MultidexMode.LEGACY) {
commandLine.add("--keep-main-dex");
}
+ // Pass rexopts to rex as a list of strings without validation
+ if (ruleContext.attributes().isAttributeValueExplicitlySpecified("rexopts")) {
+ List<String> rexopts = ruleContext.getExpander().withDataLocations().tokenized("rexopts");
+ commandLine.addAll(rexopts);
+ }
rexActionBuilder.addCommandLine(commandLine.build());
ruleContext.registerAction(rexActionBuilder.build(ruleContext));
} else {
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 efb39edca6..bc28f84e6f 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
@@ -790,6 +790,7 @@ public final class AndroidRuleClasses {
.cfg(HOST)
.exec()
.value(env.getToolsLabel("//tools/android:rex_wrapper")))
+ .add(attr("rexopts", STRING_LIST))
/* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(dexopts) -->
Additional command-line flags for the dx tool when generating classes.dex.
Subject to <a href="${link make-variables}">"Make variable"</a> substitution and