aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-02-17 02:11:16 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2017-02-17 14:54:17 +0000
commitcbca207285f13945f6853357c8395f3c25ed4cac (patch)
tree930c9e6e22fdc97a4b2dd38117fd31abb7ce966b /src/main
parentae634640dcea09c10dba1f21daa4603221e5bcc9 (diff)
Guard incremental dexing of lite protos in android builds with flag
-- PiperOrigin-RevId: 147793223 MOS_MIGRATED_REVID=147793223
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java18
2 files changed, 34 insertions, 6 deletions
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 7833f5f66c..b57165e9fe 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
@@ -319,6 +319,18 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
help = "Kinds of binaries to incrementally dex if --incremental_dexing is true.")
public Set<AndroidBinaryType> incrementalDexingBinaries;
+ /**
+ * Whether to look for incrementally dex protos built with java_lite_proto_library. Once this
+ * option works, we'll flip the default value in a config file, then once it is proven that it
+ * works, remove it from Bazel and said config file.
+ */
+ @Option(
+ name = "experimental_incremental_dexing_for_lite_protos",
+ defaultValue = "false",
+ category = "experimental",
+ help = "Do not use.")
+ public boolean incrementalDexingForLiteProtos;
+
@Option(name = "non_incremental_per_target_dexopts",
converter = Converters.CommaSeparatedOptionListConverter.class,
defaultValue = "--no-locals",
@@ -423,6 +435,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
host.desugarJava8 = desugarJava8;
host.incrementalDexing = incrementalDexing;
host.incrementalDexingBinaries = incrementalDexingBinaries;
+ host.incrementalDexingForLiteProtos = incrementalDexingForLiteProtos;
host.nonIncrementalPerTargetDexopts = nonIncrementalPerTargetDexopts;
host.dexoptsSupportedInIncrementalDexing = dexoptsSupportedInIncrementalDexing;
host.manifestMerger = manifestMerger;
@@ -470,6 +483,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
private final boolean useJackForDexing;
private final boolean jackSanityChecks;
private final ImmutableSet<AndroidBinaryType> incrementalDexingBinaries;
+ private final boolean incrementalDexingForLiteProtos;
private final ImmutableList<String> dexoptsSupportedInIncrementalDexing;
private final ImmutableList<String> targetDexoptsThatPreventIncrementalDexing;
private final boolean desugarJava8;
@@ -494,6 +508,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
} else {
this.incrementalDexingBinaries = ImmutableSet.of();
}
+ this.incrementalDexingForLiteProtos = options.incrementalDexingForLiteProtos;
this.dexoptsSupportedInIncrementalDexing =
ImmutableList.copyOf(options.dexoptsSupportedInIncrementalDexing);
this.targetDexoptsThatPreventIncrementalDexing =
@@ -546,6 +561,13 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
}
/**
+ * Returns whether to look for Jars produced by {@code JavaLiteProtoAspect}.
+ */
+ public boolean incrementalDexingForLiteProtos() {
+ return incrementalDexingForLiteProtos;
+ }
+
+ /**
* dx flags supported in incremental dexing actions.
*/
public ImmutableList<String> getDexoptsSupportedInIncrementalDexing() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
index ebd734bb45..5ffd0fa70a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
@@ -104,10 +104,12 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu
private static final String ASPECT_DEXBUILDER_PREREQ = "$dex_archive_dexbuilder";
/** Aspect-only label for desugaring executable, to avoid name clashes with labels on rules. */
private static final String ASPECT_DESUGAR_PREREQ = "$aspect_desugar";
+ private static final ImmutableList<String> TRANSITIVE_ATTRIBUTES_EXCEPT_FOR_PROTOS =
+ ImmutableList.of("deps", "exports", "runtime_deps");
private static final ImmutableList<String> TRANSITIVE_ATTRIBUTES =
- ImmutableList.of("deps", "exports", "runtime_deps",
+ ImmutableList.<String>builder().addAll(TRANSITIVE_ATTRIBUTES_EXCEPT_FOR_PROTOS)
// To get from proto_library through proto_lang_toolchain rule to proto runtime library.
- JavaLiteProtoAspect.PROTO_TOOLCHAIN_ATTR, "runtime");
+ .add(JavaLiteProtoAspect.PROTO_TOOLCHAIN_ATTR, "runtime").build();
private final String toolsRepository;
@@ -215,14 +217,15 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu
}
AndroidRuntimeJarProvider.Builder desugaredJars = new AndroidRuntimeJarProvider.Builder()
.addTransitiveProviders(collectPrerequisites(ruleContext, AndroidRuntimeJarProvider.class));
- if (isProtoLibrary(ruleContext)) {
+ if (isProtoLibrary(ruleContext)
+ && getAndroidConfig(ruleContext).incrementalDexingForLiteProtos()) {
// TODO(b/33557068): Desugar protos if needed instead of assuming they don't need desugaring
result.addProvider(desugaredJars.build());
return Functions.identity();
}
JavaRuntimeJarProvider jarProvider = base.getProvider(JavaRuntimeJarProvider.class);
- if (jarProvider != null) {
+ if (jarProvider != null && !isProtoLibrary(ruleContext)) {
// These are all transitive hjars of dependencies and hjar of the jar itself
NestedSet<Artifact> compileTimeClasspath =
getJavaCompilationArgsProvider(base, ruleContext)
@@ -245,7 +248,8 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu
private static Iterable<Artifact> getProducedRuntimeJars(ConfiguredTarget base,
RuleContext ruleContext) {
- if (isProtoLibrary(ruleContext)) {
+ if (isProtoLibrary(ruleContext)
+ && getAndroidConfig(ruleContext).incrementalDexingForLiteProtos()) {
JavaCompilationArgsAspectProvider javaProtos =
base.getProvider(JavaCompilationArgsAspectProvider.class);
if (javaProtos != null && !ruleContext.getPrerequisites("srcs", Mode.TARGET).isEmpty()) {
@@ -285,8 +289,10 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu
private static <T extends TransitiveInfoProvider> IterablesChain<T> collectPrerequisites(
RuleContext ruleContext, Class<T> classType) {
+ ImmutableList<String> attrs = getAndroidConfig(ruleContext).incrementalDexingForLiteProtos()
+ ? TRANSITIVE_ATTRIBUTES : TRANSITIVE_ATTRIBUTES_EXCEPT_FOR_PROTOS;
IterablesChain.Builder<T> result = IterablesChain.builder();
- for (String attr : TRANSITIVE_ATTRIBUTES) {
+ for (String attr : attrs) {
if (ruleContext.attributes().getAttributeType(attr) != null) {
result.add(ruleContext.getPrerequisites(attr, Mode.TARGET, classType));
}