From b2d82018906b15cf979ea74444c55d828a5b6ca7 Mon Sep 17 00:00:00 2001 From: dannark Date: Thu, 30 Nov 2017 14:42:45 -0800 Subject: Add rexopts attribute to android_binary. RELNOTES: None PiperOrigin-RevId: 177510583 --- .../google/devtools/build/lib/rules/android/AndroidBinary.java | 10 ++++++++++ .../devtools/build/lib/rules/android/AndroidRuleClasses.java | 1 + 2 files changed, 11 insertions(+) (limited to 'src/main/java/com/google/devtools/build/lib/rules') 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 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)) /* Additional command-line flags for the dx tool when generating classes.dex. Subject to "Make variable" substitution and -- cgit v1.2.3