diff options
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java | 22 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java | 18 |
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)); } |