8000 BEGIN_PUBLIC · coderabbit-test/bazel@87ef521 · GitHub
[go: up one dir, main page]

Skip to content

Commit 87ef521

Browse files
zhaoqxu97copybara-github
authored andcommitted
BEGIN_PUBLIC
Expose CreateTemplatedMergerActions method to Starlark END_PUBLIC PiperOrigin-RevId: 554579309 Change-Id: I0cfb447259f3209e519caa08c5468866eacf65fa
1 parent d175f08 commit 87ef521

File tree

5 files changed

+96
-16
lines changed

5 files changed

+96
-16
lines changed

src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1666,7 +1666,11 @@ private static void createIncrementalDexingActions(
16661666
} else {
16671667
SpecialArtifact shardsToMerge =
16681668
createSharderAction(ruleContext, dexArchives, mainDexList, dexopts, inclusionFilterJar);
1669-
Artifact multidexShards = createTemplatedMergerActions(ruleContext, shardsToMerge, dexopts);
1669+
SpecialArtifact multidexShards =
1670+
ruleContext.getTreeArtifact(
1671+
ruleContext.getUniqueDirectory("dexfiles"), ruleContext.getBinOrGenfilesDirectory());
1672+
FilesToRunProvider dexMerger = ruleContext.getExecutablePrerequisite("$dexmerger");
1673+
createTemplatedMergerActions(ruleContext, multidexShards, shardsToMerge, dexopts, dexMerger);
16701674
// TODO(b/69431301): avoid this action and give the files to apk build action directly
16711675
createZipMergeAction(ruleContext, multidexShards, classesDex);
16721676
}
@@ -1790,18 +1794,17 @@ private static SpecialArtifact createSharderAction(
17901794

17911795
/**
17921796
* Sets up a monodex {@code $dexmerger} actions for each dex archive in the given tree artifact
1793-
* and returns the output tree artifact.
1794-
*
1795-
* @return Tree artifact containing zips with final dex files named for inclusion in an APK.
1797+
* and puts the outputs in a tree artifact.
17961798
*/
1797-
private static Artifact createTemplatedMergerActions(
1798-
RuleContext ruleContext, SpecialArtifact inputTree, Collection<String> dexopts) {
1799-
SpecialArtifact outputTree =
1800-
ruleContext.getTreeArtifact(
1801-
ruleContext.getUniqueDirectory("dexfiles"), ruleContext.getBinOrGenfilesDirectory());
1799+
public static void createTemplatedMergerActions(
1800+
RuleContext ruleContext,
1801+
SpecialArtifact outputTree,
1802+
SpecialArtifact inputTree,
1803+
List<String> dexopts,
1804+
FilesToRunProvider executable) {
18021805
SpawnActionTemplate.Builder dexmerger =
18031806
new SpawnActionTemplate.Builder(inputTree, outputTree)
1804-
.setExecutable(ruleContext.getExecutablePrerequisite("$dexmerger"))
1807+
.setExecutable(executable)
18051808
.setMnemonics("DexShardsToMerge", "DexMerger")
18061809
.setOutputPathMapper(
18071810
(OutputPathMapper & Serializable) TreeFileArtifact::getParentRelativePath);
@@ -1817,8 +1820,6 @@ private static Artifact createTemplatedMergerActions(
18171820
dexopts, Predicates.not(Predicates.equalTo(DX_MINIMAL_MAIN_DEX_OPTION)))));
18181821
dexmerger.setCommandLineTemplate(commandLine.build());
18191822
ruleContext.registerAction(dexmerger.build(ruleContext.getActionOwner()));
1820-
1821-
return outputTree;
18221823
}
18231824

18241825
private static void createZipMergeAction(

src/main/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkCommon.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,24 @@
1414
package com.google.devtools.build.lib.rules.android;
1515

1616
import com.google.devtools.build.lib.actions.Artifact;
17+
import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact;
18+
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
1719
import com.google.devtools.build.lib.analysis.config.transitions.StarlarkExposedRuleTransitionFactory;
20+
import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo;
21+
import com.google.devtools.build.lib.analysis.starlark.StarlarkRuleContext;
1822
import com.google.devtools.build.lib.packages.Info;
1923
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
2024
import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider;
2125
import com.google.devtools.build.lib.rules.java.JavaInfo;
2226
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidSplitTransitionApi;
2327
import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidStarlarkCommonApi;
28+
import net.starlark.java.eval.EvalException;
29+
import net.starlark.java.eval.Sequence;
2430

2531
/** Common utilities for Starlark rules related to Android. */
26-
public class AndroidStarlarkCommon implements AndroidStarlarkCommonApi<Artifact, JavaInfo> {
32+
public class AndroidStarlarkCommon
33+
implements AndroidStarlarkCommonApi<
34+
Artifact, JavaInfo, FilesToRunProvider, ConstraintValueInfo, StarlarkRuleContext> {
2735

2836
@Override
2937
public AndroidDeviceBrokerInfo createDeviceBrokerInfo(String deviceBrokerType) {
@@ -70,4 +78,20 @@ public JavaInfo enableImplicitSourcelessDepsExportsCompatibility(Info javaInfo,
7078
JavaCompilationArgsProvider.builder().addExports(args, type).build()));
7179
return builder.setNeverlink(neverlink).build();
7280
}
81+
82+
@Override
83+
public void createDexMergerActions(
84+
StarlarkRuleContext starlarkRuleContext,
85+
Artifact output,
86+
Artifact input,
87+
Sequence<?> dexopts, // <String> expected.
88+
FilesToRunProvider dexmerger)
89+
throws EvalException, RuleErrorException {
90+
AndroidBinary.createTemplatedMergerActions(
91+
starlarkRuleContext.getRuleContext(),
92+
(SpecialArtifact) output,
93+
(SpecialArtifact) input,
94+
Sequence.cast(dexopts, String.class, "dexopts"),
95+
dexmerger);
96+
}
7397
}

src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBootstrap.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@ public class AndroidBootstrap implements Bootstrap {
3737
PackageIdentifier.createUnchecked("rules_android", ""),
3838
PackageIdentifier.createUnchecked("", "tools/build_defs/android"));
3939

40-
private final AndroidStarlarkCommonApi<?, ?> androidCommon;
40+
private final AndroidStarlarkCommonApi<?, ?, ?, ?, ?> androidCommon;
4141
private final ImmutableMap<String, Object> providers;
4242

4343
public AndroidBootstrap(
44-
AndroidStarlarkCommonApi<?, ?> androidCommon,
44+
AndroidStarlarkCommonApi<?, ?, ?, ?, ?> androidCommon,
4545
ApkInfoApiProvider apkInfoProvider,
4646
AndroidInstrumentationInfoApiProvider<?> androidInstrumentationInfoProvider,
4747
AndroidDeviceBrokerInfoApiProvider androidDeviceBrokerInfoProvider,

src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkCommonApi.java

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,17 @@
1818
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
1919
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
2020
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
21+
import com.google.devtools.build.lib.starlarkbuildapi.FilesToRunProviderApi;
22+
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
2123
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaInfoApi;
24+
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
2225
import javax.annotation.Nullable;
2326
import net.starlark.java.annot.Param;
27+
import net.starlark.java.annot.ParamType;
2428
import net.starlark.java.annot.StarlarkBuiltin;
2529
import net.starlark.java.annot.StarlarkMethod;
30+
import net.starlark.java.eval.EvalException;
31+
import net.starlark.java.eval.Sequence;
2632
import net.starlark.java.eval.StarlarkValue;
2733

2834
/** Common utilities for Starlark rules related to Android. */
@@ -34,7 +40,11 @@
3440
+ "Common utilities and functionality related to Android rules.",
3541
documented = false)
3642
public interface AndroidStarlarkCommonApi<
37-
FileT extends FileApi, JavaInfoT extends JavaInfoApi<?, ?, ?>>
43+
FileT extends FileApi,
44+
JavaInfoT extends JavaInfoApi<?, ?, ?>,
45+
FilesToRunProviderT extends FilesToRunProviderApi<FileT>,
46+
ConstraintValueT extends ConstraintValueInfoApi,
47+
StarlarkRuleContextT extends StarlarkRuleContextApi<ConstraintValueT>>
3848
extends StarlarkValue {
3949

4050
@StarlarkMethod(
@@ -102,4 +112,48 @@ public interface AndroidStarlarkCommonApi<
102112
})
103113
JavaInfoT enableImplicitSourcelessDepsExportsCompatibility(Info javaInfo, boolean neverlink)
104114
throws RuleErrorException;
115+
116+
@StarlarkMethod(
117+
name = "create_dex_merger_actions",
118+
doc =
119+
"Creates a list of DexMerger actions to be run in parallel, each action taking one shard"
120+
+ " from the input directory, merging all the dex archives inside the shard to a"
121+
+ " single dexarchive under the output directory.",
122+
documented = false,
123+
enableOnlyWithFlag = BuildLanguageOptions.EXPERIMENTAL_ENABLE_ANDROID_MIGRATION_APIS,
124+
parameters = {
125+
@Param(name = "ctx", doc = "The rule context.", positional = true, named = false),
126+
@Param(
127+
name = "output",
128+
doc = "The output directory.",
129+
positional = false,
130+
named = true,
131+
allowedTypes = {@ParamType(type = FileApi.class)}),
132+
@Param(
133+
name = "input",
134+
doc = "The input directory.",
135+
positional = false,
136+
named = true,
137+
allowedTypes = {@ParamType(type = FileApi.class)}),
138+
@Param(
139+
name = "dexopts",
140+
doc = "A list of additional command-line flags for the dx tool. Optional",
141+
positional = false,
142+
named = true,
143+
allowedTypes = {@ParamType(type = Sequence.class, generic1 = String.class)},
144+
defaultValue = "[]"),
145+
@Param(
146+
name = "dexmerger",
147+
doc = "A FilesToRunProvider to be used for dex merging.",
148+
positional = false,
149+
named = true,
150+
allowedTypes = {@ParamType(type = FilesToRunProviderApi.class)})
151+
})
152+
void createDexMergerActions(
153+
StarlarkRuleContextT starlarkRuleContext,
154+
FileT output,
155+
FileT input,
156+
Sequence<?> dexopts, // <String> expected.
157+
FilesToRunProviderT dexmerger)
158+
throws EvalException, RuleErrorException;
105159
}

src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ java_library(
3333
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
3434
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp",
3535
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java",
36+
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
3637
"//src/main/java/net/starlark/java/annot",
3738
"//src/main/java/net/starlark/java/eval",
3839
"//third_party:guava",

0 commit comments

Comments
 (0)
0