@Override public List<BuildOptions> split(BuildOptions buildOptions) { AndroidConfiguration.Options androidOptions = buildOptions.get(AndroidConfiguration.Options.class); CppOptions cppOptions = buildOptions.get(CppOptions.class); Label androidCrosstoolTop = androidOptions.realAndroidCrosstoolTop(); if (androidOptions.realFatApkCpus().isEmpty() && (androidCrosstoolTop == null || androidCrosstoolTop.equals(cppOptions.crosstoolTop))) { return ImmutableList.of(); } if (androidOptions.realFatApkCpus().isEmpty()) { BuildOptions splitOptions = buildOptions.clone(); setCrosstoolToAndroid(splitOptions, buildOptions); return ImmutableList.of(splitOptions); } List<BuildOptions> result = new ArrayList<>(); for (String cpu : ImmutableSortedSet.copyOf(androidOptions.realFatApkCpus())) { BuildOptions splitOptions = buildOptions.clone(); // Disable fat APKs for the child configurations. splitOptions.get(AndroidConfiguration.Options.class).fatApkCpus = ImmutableList.of(); // Set the cpu & android_cpu. // 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; setCrosstoolToAndroid(splitOptions, buildOptions); result.add(splitOptions); } return result; }
private void setCrosstoolToAndroid(BuildOptions output, BuildOptions input) { AndroidConfiguration.Options inputAndroidOptions = input.get(AndroidConfiguration.Options.class); AndroidConfiguration.Options outputAndroidOptions = output.get(AndroidConfiguration.Options.class); CppOptions cppOptions = output.get(CppOptions.class); if (inputAndroidOptions.androidCrosstoolTop != null && !cppOptions.crosstoolTop.equals(inputAndroidOptions.androidCrosstoolTop)) { if (cppOptions.hostCrosstoolTop == null) { cppOptions.hostCrosstoolTop = cppOptions.crosstoolTop; } cppOptions.crosstoolTop = inputAndroidOptions.androidCrosstoolTop; } outputAndroidOptions.configurationDistinguisher = ConfigurationDistinguisher.ANDROID; }