aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-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