Turns out it was pretty easy to get pretty close, but I now see a bigger issue.
It looks like the reason this works normally is that the default is specified in the CROSSTOOL file by the identifier. What is the correct behavior here?
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 bffa529..2afe922 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
@@ -104,6 +104,12 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
help = "The Android target CPU.")
public String cpu;
+ @Option(name = "android_compiler",
+ defaultValue = "null",
+ category = "semantics",
+ help = "The Android target compiler.")
+ public String cppCompiler;
+
@Option(name = "strict_android_deps",
allowMultiple = false,
defaultValue = "default",
@@ -253,6 +259,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
private final StrictDepsMode strictDeps;
private final boolean legacyNativeSupport;
private final String cpu;
+ private final String cppCompiler;
private final boolean incrementalNativeLibs;
private final boolean fatApk;
private final ConfigurationDistinguisher configurationDistinguisher;
@@ -267,6 +274,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
this.strictDeps = options.strictDeps;
this.legacyNativeSupport = options.legacyNativeSupport;
this.cpu = options.cpu;
+ this.cppCompiler = options.cppCompiler;
this.fatApk = !options.realFatApkCpus().isEmpty();
this.configurationDistinguisher = options.configurationDistinguisher;
this.proguard = options.proguard;
@@ -279,6 +287,10 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
return cpu;
}
+ public String getCppCompiler() {
+ return cppCompiler;
+ }
+
public Label getSdk() {
return sdk;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index 7928a1b..f3b48ed 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -222,6 +222,7 @@ public final class AndroidRuleClasses {
// TODO(bazel-team): --android_cpu doesn't follow --cpu right now; it should.
splitOptions.get(AndroidConfiguration.Options.class).cpu = cpu;
splitOptions.get(BuildConfiguration.Options.class).cpu = cpu;
+ splitOptions.get(CppOptions.class).cppCompiler = androidOptions.cppCompiler;
setCrosstoolToAndroid(splitOptions, buildOptions);
result.add(splitOptions);
}