Skip to content

Commit

Permalink
Added android_compiler flag.
Browse files Browse the repository at this point in the history
Added a flag which allows the user to specify the android compiler.
This commit also disconnects the android compiler from the main
--compiler flag.  Changing the --compiler flag won't change the
compiler used by the android rules.

--
Change-Id: I788d3a353a1cc304e1c015b9dd283258e6e172d4
Reviewed-on: https://bazel-review.googlesource.com/2112
MOS_MIGRATED_REVID=105203751
  • Loading branch information
AustinSchuh authored and lberki committed Oct 12, 2015
1 parent c74ee37 commit fe24ff7
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,14 @@ public static class Options extends FragmentOptions {
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",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,63 +168,64 @@ public Label getDefault(Rule rule, BuildConfiguration configuration) {

public static final SplitTransition<BuildOptions> ANDROID_SPLIT_TRANSITION =
new SplitTransition<BuildOptions>() {
@Override
public boolean defaultsToSelf() {
return true;
}

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;
@Override
public boolean defaultsToSelf() {
return true;
}
cppOptions.crosstoolTop = inputAndroidOptions.androidCrosstoolTop;
}

outputAndroidOptions.configurationDistinguisher = ConfigurationDistinguisher.ANDROID;
}
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;
}

@Override
public List<BuildOptions> split(BuildOptions buildOptions) {
AndroidConfiguration.Options androidOptions =
buildOptions.get(AndroidConfiguration.Options.class);
CppOptions cppOptions = buildOptions.get(CppOptions.class);
Label androidCrosstoolTop = androidOptions.androidCrosstoolTop;
if (androidOptions.realFatApkCpus().isEmpty()
&& (androidCrosstoolTop == null
|| androidCrosstoolTop.equals(cppOptions.crosstoolTop))) {
return ImmutableList.of();
}
outputAndroidOptions.configurationDistinguisher = ConfigurationDistinguisher.ANDROID;
}

if (androidOptions.realFatApkCpus().isEmpty()) {
BuildOptions splitOptions = buildOptions.clone();
setCrosstoolToAndroid(splitOptions, buildOptions);
return ImmutableList.of(splitOptions);
}
@Override
public List<BuildOptions> split(BuildOptions buildOptions) {
AndroidConfiguration.Options androidOptions =
buildOptions.get(AndroidConfiguration.Options.class);
CppOptions cppOptions = buildOptions.get(CppOptions.class);
Label androidCrosstoolTop = androidOptions.androidCrosstoolTop;
if (androidOptions.realFatApkCpus().isEmpty()
&& (androidCrosstoolTop == null
|| androidCrosstoolTop.equals(cppOptions.crosstoolTop))) {
return ImmutableList.of();
}

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;
}
};
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;
splitOptions.get(CppOptions.class).cppCompiler = androidOptions.cppCompiler;
setCrosstoolToAndroid(splitOptions, buildOptions);
result.add(splitOptions);
}
return result;
}
};

public static final FileType ANDROID_IDL = FileType.of(".aidl");

Expand Down

0 comments on commit fe24ff7

Please sign in to comment.