1313// limitations under the License.
1414package com .google .devtools .build .lib .rules .android ;
1515
16+
1617import com .google .common .collect .ImmutableList ;
1718import com .google .common .collect .ImmutableMap ;
1819import com .google .common .collect .ImmutableSet ;
3334import com .google .devtools .build .lib .analysis .TransitiveInfoCollection ;
3435import com .google .devtools .build .lib .analysis .actions .CustomCommandLine ;
3536import com .google .devtools .build .lib .analysis .actions .SpawnAction ;
37+ import com .google .devtools .build .lib .analysis .config .BuildConfigurationValue ;
38+ import com .google .devtools .build .lib .analysis .platform .ConstraintValueInfo ;
3639import com .google .devtools .build .lib .collect .nestedset .NestedSet ;
3740import com .google .devtools .build .lib .collect .nestedset .NestedSetBuilder ;
41+ import com .google .devtools .build .lib .packages .RuleClass .ConfiguredTargetFactory .RuleErrorException ;
3842import com .google .devtools .build .lib .rules .android .databinding .DataBinding ;
3943import com .google .devtools .build .lib .rules .android .databinding .DataBindingV2Provider ;
4044import com .google .devtools .build .lib .rules .java .ImportDepsCheckActionBuilder ;
5458import com .google .devtools .build .lib .starlarkbuildapi .android .DataBindingV2ProviderApi ;
5559import com .google .devtools .build .lib .vfs .PathFragment ;
5660import java .util .List ;
61+ import java .util .Map ;
5762import javax .annotation .Nullable ;
5863
5964/**
@@ -466,7 +471,48 @@ private static SpawnAction createAarJarsMergingActions(
466471 }
467472
468473 private static SpawnAction createAarNativeLibsFilterActions (
469- RuleContext ruleContext , Artifact aar , Artifact outputZip ) {
474+ RuleContext ruleContext , Artifact aar , Artifact outputZip ) throws RuleErrorException {
475+
476+ BuildConfigurationValue configuration = ruleContext .getConfiguration ();
477+
478+ String cpu = null ;
479+ AndroidConfiguration androidConfiguration =
480+ configuration .getFragment (AndroidConfiguration .class );
481+
482+ if (androidConfiguration .incompatibleUseToolchainResolution ()) {
483+
484+ // Maps a CPU name as used in an AAR to the corresponding CPU constraint.
485+ ImmutableMap <String , ConstraintValueInfo > aarCpuToConstraint =
486+ ImmutableMap .of (
487+ "arm64-v8a" ,
488+ ruleContext .getPrerequisite ("$constraint_arm64" , ConstraintValueInfo .PROVIDER ),
489+ "armeabi-v7a" ,
490+ ruleContext .getPrerequisite ("$constraint_armv7" , ConstraintValueInfo .PROVIDER ),
491+ "x86" , ruleContext .getPrerequisite ("$constraint_x86" , ConstraintValueInfo .PROVIDER ),
492+ "x86_64" ,
493+ ruleContext .getPrerequisite ("$constraint_x86_64" , ConstraintValueInfo .PROVIDER ));
494+
495+ for (Map .Entry <String , ConstraintValueInfo > e : aarCpuToConstraint .entrySet ()) {
496+ if (ruleContext .targetPlatformHasConstraint (e .getValue ())) {
497+ cpu = e .getKey ();
498+ break ;
499+ }
500+ }
501+
502+ if (cpu == null ) {
503+ throw ruleContext .throwWithRuleError (
504+ String .format (
505+ "Target platform %s does not match one of the applicable CPU constraints for"
506+ + " aar_import %s. Applicable CPU constraints are listed in"
507+ + " https://blog.bazel.build/2023/11/15/android-platforms.html" ,
508+ ruleContext .getToolchainContexts ().getTargetPlatform ().label (),
509+ ruleContext .getLabel ()));
510+ }
511+
512+ } else {
513+ cpu = configuration .getCpu ();
514+ }
515+
470516 SpawnAction .Builder actionBuilder = new SpawnAction .Builder ();
471517 ParamFileInfo paramFileInfo = getParamFileInfo (ruleContext );
472518 modifyExecutionInfo (ruleContext , actionBuilder );
@@ -481,7 +527,7 @@ private static SpawnAction createAarNativeLibsFilterActions(
481527 .addCommandLine (
482528 CustomCommandLine .builder ()
483529 .addExecPath ("--input_aar" , aar )
484- .add ("--cpu" , ruleContext . getConfiguration (). getCpu () )
530+ .add ("--cpu" , cpu )
485531 .addExecPath ("--output_zip" , outputZip )
486532 .build (),
487533 paramFileInfo )
0 commit comments