aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar kmb <kmb@google.com>2018-02-16 17:09:16 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-16 17:11:17 -0800
commit97c4a9e9acfab5796d3f8f1b55bc4306425166a2 (patch)
tree43f776dea615c18df396c6530a1e05847eca1ab1 /src/main
parentd18d3e2f83f9d582858a3edab7a450c60044028c (diff)
add flag to use incremental dexing by default for proguarded android binaries
RELNOTES: None. PiperOrigin-RevId: 186067158
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java26
2 files changed, 29 insertions, 5 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 1a354ad336..6026c40bb1 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
@@ -1140,12 +1140,10 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
if (override == TriState.NO) {
return false;
}
- if (isBinaryProguarded) {
- // Require explicit opt-in for proguarded binaries, but no need to check dexopts since we'll
- // be able to create dexbuilder actions with the appropriate flags as part of this rule.
- return override == TriState.YES;
- }
if (override == TriState.YES || config.useIncrementalDexing()) {
+ if (isBinaryProguarded) {
+ return override == TriState.YES || config.incrementalDexingAfterProguardByDefault();
+ }
Iterable<String> blacklistedDexopts =
DexArchiveAspect.blacklistedDexopts(ruleContext, dexopts);
if (Iterables.isEmpty(blacklistedDexopts)) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
index 661590a85e..b988dfa566 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
@@ -458,6 +458,17 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
)
public boolean incrementalDexingUseDexSharder;
+ @Option(
+ name = "experimental_incremental_dexing_after_proguard_by_default",
+ defaultValue = "false",
+ metadataTags = {OptionMetadataTag.EXPERIMENTAL},
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS},
+ help = "Whether to use incremental dexing for proguarded Android binaries by default. "
+ + "Use incremental_dexing attribute to override default for a particular android_binary."
+ )
+ public boolean incrementalDexingAfterProguardByDefault;
+
// TODO(b/31711689): Remove this flag when this optimization is proven to work globally.
@Option(
name = "experimental_android_assume_minsdkversion",
@@ -788,6 +799,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
host.incrementalDexing = incrementalDexing;
host.incrementalDexingShardsAfterProguard = incrementalDexingShardsAfterProguard;
host.incrementalDexingUseDexSharder = incrementalDexingUseDexSharder;
+ host.incrementalDexingAfterProguardByDefault = incrementalDexingAfterProguardByDefault;
host.assumeMinSdkVersion = assumeMinSdkVersion;
host.nonIncrementalPerTargetDexopts = nonIncrementalPerTargetDexopts;
host.dexoptsSupportedInIncrementalDexing = dexoptsSupportedInIncrementalDexing;
@@ -831,6 +843,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
private final boolean incrementalDexing;
private final int incrementalDexingShardsAfterProguard;
private final boolean incrementalDexingUseDexSharder;
+ private final boolean incrementalDexingAfterProguardByDefault;
private final boolean assumeMinSdkVersion;
private final ImmutableList<String> dexoptsSupportedInIncrementalDexing;
private final ImmutableList<String> targetDexoptsThatPreventIncrementalDexing;
@@ -864,6 +877,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
this.incrementalDexing = options.incrementalDexing;
this.incrementalDexingShardsAfterProguard = options.incrementalDexingShardsAfterProguard;
this.incrementalDexingUseDexSharder = options.incrementalDexingUseDexSharder;
+ this.incrementalDexingAfterProguardByDefault = options.incrementalDexingAfterProguardByDefault;
this.assumeMinSdkVersion = options.assumeMinSdkVersion;
this.dexoptsSupportedInIncrementalDexing =
ImmutableList.copyOf(options.dexoptsSupportedInIncrementalDexing);
@@ -896,6 +910,11 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
throw new InvalidConfigurationException(
"--experimental_incremental_dexing_after_proguard must be a positive number");
}
+ if (incrementalDexingAfterProguardByDefault && incrementalDexingShardsAfterProguard == 0) {
+ throw new InvalidConfigurationException(
+ "--experimental_incremental_dexing_after_proguard_by_default requires "
+ + "--experimental_incremental_dexing_after_proguard to be at least 1");
+ }
if (desugarJava8Libs && !desugarJava8) {
throw new InvalidConfigurationException(
"Java 8 library support requires --desugar_java8 to be enabled.");
@@ -911,6 +930,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
boolean incrementalDexing,
int incrementalDexingShardsAfterProguard,
boolean incrementalDexingUseDexSharder,
+ boolean incrementalDexingAfterProguardByDefault,
boolean assumeMinSdkVersion,
ImmutableList<String> dexoptsSupportedInIncrementalDexing,
ImmutableList<String> targetDexoptsThatPreventIncrementalDexing,
@@ -942,6 +962,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
this.incrementalDexing = incrementalDexing;
this.incrementalDexingShardsAfterProguard = incrementalDexingShardsAfterProguard;
this.incrementalDexingUseDexSharder = incrementalDexingUseDexSharder;
+ this.incrementalDexingAfterProguardByDefault = incrementalDexingAfterProguardByDefault;
this.assumeMinSdkVersion = assumeMinSdkVersion;
this.dexoptsSupportedInIncrementalDexing = dexoptsSupportedInIncrementalDexing;
this.targetDexoptsThatPreventIncrementalDexing = targetDexoptsThatPreventIncrementalDexing;
@@ -1001,6 +1022,11 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
return incrementalDexingUseDexSharder;
}
+ /** Whether to use incremental dexing to build proguarded binaries by default. */
+ public boolean incrementalDexingAfterProguardByDefault() {
+ return incrementalDexingAfterProguardByDefault;
+ }
+
/**
* Returns true if an -assumevalues should be generated for Proguard based on the minSdkVersion of
* the merged AndroidManifest.