diff options
author | 2017-09-29 21:32:25 +0200 | |
---|---|---|
committer | 2017-10-02 10:31:36 +0200 | |
commit | 6ff77f8f7b6b1617b1c20e4c63d1b597a95813d4 (patch) | |
tree | 546a47678f05199fd29ea82b72990e9ab9405ecd /src/main | |
parent | ae32398146a05ecbe60966b0fe16e409e7b3e3ae (diff) |
Use intermediate compiled resource symbols for linking rather than static resource library APK's.
RELNOTES: none
PiperOrigin-RevId: 170517806
Diffstat (limited to 'src/main')
5 files changed, 63 insertions, 13 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java index 43778e21a9..74d30bc033 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java @@ -15,7 +15,6 @@ package com.google.devtools.build.lib.rules.android; import com.google.common.base.Preconditions; import com.google.common.base.Strings; -import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType; @@ -160,16 +159,8 @@ public class AndroidResourceValidatorActionBuilder { builder.addExecPath("--aapt2", sdk.getAapt2().getExecutable()); - FluentIterable<Artifact> libraries = - FluentIterable.from(resourceDeps.getResources()).transform( - ResourceContainer::getStaticLibrary).append(sdk.getAndroidJar()); - - builder - .add("--libraries") - .addExecPaths( - VectorArg.join(context.getConfiguration().getHostPathSeparator()) - .each(libraries.toList())); - inputs.addAll(libraries); + builder.add("--libraries").addExecPath(sdk.getAndroidJar()); + inputs.add(sdk.getAndroidJar()); builder.addExecPath("--compiled", compiledSymbols); inputs.add(compiledSymbols); @@ -183,6 +174,15 @@ public class AndroidResourceValidatorActionBuilder { builder.add("--packageForR", customJavaPackage); } + if (!resourceDeps.getTransitiveCompiledSymbols().isEmpty()) { + builder + .addExecPaths( + "--compiledDep", + VectorArg.join(context.getConfiguration().getHostPathSeparator()) + .each(resourceDeps.getTransitiveCompiledSymbols())); + inputs.addAll(resourceDeps.getTransitiveCompiledSymbols()); + } + builder.addExecPath("--sourceJarOut", aapt2SourceJarOut); outs.add(aapt2SourceJarOut); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java index 297c8d9760..cb59ea4302 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java @@ -44,7 +44,7 @@ public class AndroidResourcesProcessorBuilder { .includeManifest() .includeAapt2RTxt() .includeSymbolsBin() - .includeStaticLibrary() + .includeCompiledSymbols() .withSeparator(SeparatorType.COLON_COMMA) .toArgConverter(); @@ -268,7 +268,7 @@ public class AndroidResourcesProcessorBuilder { .addTransitive(dependencies.getTransitiveManifests()) .addTransitive(dependencies.getTransitiveAapt2RTxt()) .addTransitive(dependencies.getTransitiveSymbolsBin()) - .addTransitive(dependencies.getTransitiveStaticLib()); + .addTransitive(dependencies.getTransitiveCompiledSymbols()); } configureCommonFlags(outs, inputs, builder); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProvider.java index d152872aa7..0768ebdee3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProvider.java @@ -33,6 +33,7 @@ public abstract class AndroidResourcesProvider implements TransitiveInfoProvider NestedSet<Artifact> transitiveManifests, NestedSet<Artifact> transitiveAapt2RTxt, NestedSet<Artifact> transitiveSymbolsBin, + NestedSet<Artifact> transitiveCompiledSymbols, NestedSet<Artifact> transitiveStaticLib, NestedSet<Artifact> transitiveRTxt, boolean isResourcesOnly) { @@ -44,6 +45,7 @@ public abstract class AndroidResourcesProvider implements TransitiveInfoProvider transitiveManifests, transitiveAapt2RTxt, transitiveSymbolsBin, + transitiveCompiledSymbols, transitiveStaticLib, transitiveRTxt, isResourcesOnly); @@ -66,6 +68,8 @@ public abstract class AndroidResourcesProvider implements TransitiveInfoProvider public abstract NestedSet<Artifact> getTransitiveSymbolsBin(); + public abstract NestedSet<Artifact> getTransitiveCompiledSymbols(); + public abstract NestedSet<Artifact> getTransitiveStaticLib(); public abstract NestedSet<Artifact> getTransitiveRTxt(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java index 22037439d4..e09de1a1b1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java @@ -48,6 +48,7 @@ public class ResourceContainerConverter { private boolean includeManifest; private boolean includeRTxt; private boolean includeSymbolsBin; + private boolean includeCompiledSymbols; private boolean includeStaticLibrary; private boolean includeAapt2RTxt; private SeparatorType separatorType; @@ -98,6 +99,11 @@ public class ResourceContainerConverter { return this; } + Builder includeCompiledSymbols() { + includeCompiledSymbols = true; + return this; + } + Builder withSeparator(SeparatorType type) { separatorType = type; return this; @@ -152,6 +158,12 @@ public class ResourceContainerConverter { ? "" : container.getStaticLibrary().getExecPathString()); } + if (includeCompiledSymbols) { + cmdPieces.add( + container.getCompiledSymbols() == null + ? "" + : container.getCompiledSymbols().getExecPathString()); + } if (includeSymbolsBin) { cmdPieces.add( container.getSymbols() == null ? "" : container.getSymbols().getExecPathString()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java index f260e24e01..652759d522 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java @@ -57,6 +57,8 @@ public final class ResourceDependencies { private final NestedSet<Artifact> transitiveSymbolsBin; + private final NestedSet<Artifact> transitiveCompiledSymbols; + private final NestedSet<Artifact> transitiveStaticLib; private final NestedSet<Artifact> transitiveRTxt; @@ -75,6 +77,7 @@ public final class ResourceDependencies { NestedSetBuilder<Artifact> transitiveManifests = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> transitiveAapt2RTxt = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> transitiveSymbolsBin = NestedSetBuilder.naiveLinkOrder(); + NestedSetBuilder<Artifact> transitiveCompiledSymbols = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> transitiveStaticLib = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> transitiveRTxt = NestedSetBuilder.naiveLinkOrder(); extractFromAttributes( @@ -86,6 +89,7 @@ public final class ResourceDependencies { transitiveManifests, transitiveAapt2RTxt, transitiveSymbolsBin, + transitiveCompiledSymbols, transitiveStaticLib, transitiveRTxt); return new ResourceDependencies( @@ -96,6 +100,7 @@ public final class ResourceDependencies { transitiveManifests.build(), transitiveAapt2RTxt.build(), transitiveSymbolsBin.build(), + transitiveCompiledSymbols.build(), transitiveStaticLib.build(), transitiveRTxt.build()); } @@ -107,6 +112,7 @@ public final class ResourceDependencies { NestedSetBuilder<Artifact> transitiveManifests = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> transitiveAapt2RTxt = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> transitiveSymbolsBin = NestedSetBuilder.naiveLinkOrder(); + NestedSetBuilder<Artifact> transitiveCompiledSymbols = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> transitiveStaticLib = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> transitiveRTxt = NestedSetBuilder.naiveLinkOrder(); extractFromAttributes( @@ -118,6 +124,7 @@ public final class ResourceDependencies { transitiveManifests, transitiveAapt2RTxt, transitiveSymbolsBin, + transitiveCompiledSymbols, transitiveStaticLib, transitiveRTxt); return new ResourceDependencies( @@ -128,6 +135,7 @@ public final class ResourceDependencies { transitiveManifests.build(), transitiveAapt2RTxt.build(), transitiveSymbolsBin.build(), + transitiveCompiledSymbols.build(), transitiveStaticLib.build(), transitiveRTxt.build()); } @@ -140,6 +148,7 @@ public final class ResourceDependencies { NestedSetBuilder<Artifact> transitiveManifests = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> transitiveAapt2RTxt = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> transitiveSymbolsBin = NestedSetBuilder.naiveLinkOrder(); + NestedSetBuilder<Artifact> transitiveCompiledSymbols = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> transitiveStaticLib = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> transitiveRTxt = NestedSetBuilder.naiveLinkOrder(); if (hasResourceAttribute(ruleContext)) { @@ -152,6 +161,7 @@ public final class ResourceDependencies { transitiveManifests, transitiveAapt2RTxt, transitiveSymbolsBin, + transitiveCompiledSymbols, transitiveStaticLib, transitiveRTxt); } @@ -167,6 +177,7 @@ public final class ResourceDependencies { transitiveManifests, transitiveAapt2RTxt, transitiveSymbolsBin, + transitiveCompiledSymbols, transitiveStaticLib, transitiveRTxt); } else { @@ -182,6 +193,7 @@ public final class ResourceDependencies { transitiveManifests, transitiveAapt2RTxt, transitiveSymbolsBin, + transitiveCompiledSymbols, transitiveStaticLib, transitiveRTxt); } @@ -193,6 +205,7 @@ public final class ResourceDependencies { transitiveManifests.build(), transitiveAapt2RTxt.build(), transitiveSymbolsBin.build(), + transitiveCompiledSymbols.build(), transitiveStaticLib.build(), transitiveRTxt.build()); } @@ -206,6 +219,7 @@ public final class ResourceDependencies { NestedSetBuilder<Artifact> transitiveManifests, NestedSetBuilder<Artifact> transitiveAapt2RTxt, NestedSetBuilder<Artifact> transitiveSymbolsBin, + NestedSetBuilder<Artifact> transitiveCompiledSymbols, NestedSetBuilder<Artifact> transitiveStaticLib, NestedSetBuilder<Artifact> transitiveRTxt) { AttributeMap attributes = ruleContext.attributes(); @@ -221,6 +235,7 @@ public final class ResourceDependencies { transitiveManifests.addTransitive(resources.getTransitiveManifests()); transitiveAapt2RTxt.addTransitive(resources.getTransitiveAapt2RTxt()); transitiveSymbolsBin.addTransitive(resources.getTransitiveSymbolsBin()); + transitiveCompiledSymbols.addTransitive(resources.getTransitiveCompiledSymbols()); transitiveStaticLib.addTransitive(resources.getTransitiveStaticLib()); transitiveRTxt.addTransitive(resources.getTransitiveRTxt()); } @@ -260,6 +275,7 @@ public final class ResourceDependencies { NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER), NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER), NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER), + NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER), NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER)); } @@ -271,6 +287,7 @@ public final class ResourceDependencies { NestedSet<Artifact> transitiveManifests, NestedSet<Artifact> transitiveAapt2RTxt, NestedSet<Artifact> transitiveSymbolsBin, + NestedSet<Artifact> transitiveCompiledSymbols, NestedSet<Artifact> transitiveStaticLib, NestedSet<Artifact> transitiveRTxt) { this.neverlink = neverlink; @@ -280,6 +297,7 @@ public final class ResourceDependencies { this.transitiveManifests = transitiveManifests; this.transitiveAapt2RTxt = transitiveAapt2RTxt; this.transitiveSymbolsBin = transitiveSymbolsBin; + this.transitiveCompiledSymbols = transitiveCompiledSymbols; this.transitiveStaticLib = transitiveStaticLib; this.transitiveRTxt = transitiveRTxt; } @@ -297,6 +315,7 @@ public final class ResourceDependencies { transitiveManifests, transitiveAapt2RTxt, transitiveSymbolsBin, + transitiveCompiledSymbols, transitiveStaticLib, transitiveRTxt); } @@ -339,6 +358,11 @@ public final class ResourceDependencies { if (newDirectResource.getSymbols() != null) { transitiveSymbolsBin.add(newDirectResource.getSymbols()); } + NestedSetBuilder<Artifact> transitiveCompiledSymbols = NestedSetBuilder.naiveLinkOrder(); + transitiveCompiledSymbols.addTransitive(this.transitiveCompiledSymbols); + if (newDirectResource.getCompiledSymbols() != null) { + transitiveCompiledSymbols.add(newDirectResource.getCompiledSymbols()); + } NestedSetBuilder<Artifact> transitiveStaticLib = NestedSetBuilder.naiveLinkOrder(); transitiveStaticLib.addTransitive(this.transitiveStaticLib); if (newDirectResource.getStaticLibrary() != null) { @@ -360,6 +384,7 @@ public final class ResourceDependencies { transitiveManifests.build(), transitiveAapt2RTxt.build(), transitiveSymbolsBin.build(), + transitiveCompiledSymbols.build(), transitiveStaticLib.build(), transitiveRTxt.build(), isResourcesOnly); @@ -390,6 +415,7 @@ public final class ResourceDependencies { transitiveManifests, transitiveAapt2RTxt, transitiveSymbolsBin, + transitiveCompiledSymbols, transitiveStaticLib, transitiveRTxt, isResourcesOnly); @@ -427,6 +453,14 @@ public final class ResourceDependencies { return transitiveSymbolsBin; } + /** + * @return The transitive closure of compiled symbols. + * Compiled symbols are zip files containing the compiled resource output of aapt2 compile + */ + public NestedSet<Artifact> getTransitiveCompiledSymbols() { + return transitiveCompiledSymbols; + } + public NestedSet<Artifact> getTransitiveStaticLib() { return transitiveStaticLib; } |