aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar jingwen <jingwen@google.com>2018-03-15 09:20:42 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-15 09:22:45 -0700
commitd1119fa583ff659a80828d1b67cc980b04f6b386 (patch)
treec7161ba3e0f88c9857eac4cae56d39416e8593af
parent6a0ac92a0938f141644411f12cb4e6e499684886 (diff)
Conditionally set the default crosstool based on the major revision by binding //external:android/crosstool to an alias in the NDK BUILD file.
This does not change existing behavior until r17 support is released. https://github.com/bazelbuild/bazel/issues/4742 RELNOTES: None. PiperOrigin-RevId: 189195669
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryRule.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_build_file_template.txt5
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/StlImpls.java14
4 files changed, 33 insertions, 18 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java
index bbdefada8a..cf61da68b9 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java
@@ -27,6 +27,8 @@ import com.google.devtools.build.lib.bazel.rules.android.ndkcrosstools.NdkPaths;
import com.google.devtools.build.lib.bazel.rules.android.ndkcrosstools.NdkRelease;
import com.google.devtools.build.lib.bazel.rules.android.ndkcrosstools.StlImpl;
import com.google.devtools.build.lib.bazel.rules.android.ndkcrosstools.StlImpls;
+import com.google.devtools.build.lib.bazel.rules.android.ndkcrosstools.StlImpls.GnuLibStdCppStlImpl;
+import com.google.devtools.build.lib.bazel.rules.android.ndkcrosstools.StlImpls.LibCppStlImpl;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue;
@@ -219,7 +221,9 @@ public class AndroidNdkRepositoryFunction extends AndroidRepositoryFunction {
throw new RepositoryFunctionException(new IOException(e), Transience.PERSISTENT);
}
- String buildFile = createBuildFile(ruleName, crosstoolsAndStls.build());
+ String defaultCrosstool = getDefaultCrosstool(ndkRelease.majorRevision);
+
+ String buildFile = createBuildFile(ruleName, defaultCrosstool, crosstoolsAndStls.build());
writeBuildFile(outputDirectory, buildFile);
return RepositoryDirectoryValue.builder().setPath(outputDirectory);
}
@@ -229,12 +233,18 @@ public class AndroidNdkRepositoryFunction extends AndroidRepositoryFunction {
return AndroidNdkRepositoryRule.class;
}
+ private static String getDefaultCrosstool(Integer majorRevision) {
+ // From NDK 17, libc++ replaces gnu-libstdc++ as the default STL.
+ return majorRevision <= 16 ? GnuLibStdCppStlImpl.NAME : LibCppStlImpl.NAME;
+ }
+
private static PathFragment getAndroidNdkHomeEnvironmentVar(
Path workspace, Map<String, String> env) {
return workspace.getRelative(PathFragment.create(env.get(PATH_ENV_VAR))).asFragment();
}
- private static String createBuildFile(String ruleName, List<CrosstoolStlPair> crosstools) {
+ private static String createBuildFile(
+ String ruleName, String defaultCrosstool, List<CrosstoolStlPair> crosstools) {
String buildFileTemplate = getTemplate("android_ndk_build_file_template.txt");
String ccToolchainSuiteTemplate = getTemplate("android_ndk_cc_toolchain_suite_template.txt");
@@ -286,6 +296,7 @@ public class AndroidNdkRepositoryFunction extends AndroidRepositoryFunction {
return buildFileTemplate
.replace("%ruleName%", ruleName)
+ .replace("%defaultCrosstool%", "//:toolchain-" + defaultCrosstool)
.replace("%ccToolchainSuites%", ccToolchainSuites)
.replace("%ccToolchainRules%", ccToolchainRules)
.replace("%stlFilegroups%", stlFilegroups)
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryRule.java
index c2a5be5f92..7d3088029c 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryRule.java
@@ -21,7 +21,6 @@ import com.google.common.base.Function;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
-import com.google.devtools.build.lib.bazel.rules.android.ndkcrosstools.StlImpls;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -38,16 +37,12 @@ public class AndroidNdkRepositoryRule implements RuleDefinition {
public static final String NAME = "android_ndk_repository";
private static final Function<? super Rule, Map<String, Label>> BINDINGS_FUNCTION =
- rule -> {
- String defaultToolchainName =
- AndroidNdkRepositoryFunction.createToolchainName(StlImpls.DEFAULT_STL_NAME);
-
- return ImmutableMap.of(
- "android/crosstool",
- Label.parseAbsoluteUnchecked("@" + rule.getName() + "//:" + defaultToolchainName),
- "android_ndk_for_testing",
- Label.parseAbsoluteUnchecked("@" + rule.getName() + "//:files"));
- };
+ rule ->
+ ImmutableMap.of(
+ "android/crosstool",
+ Label.parseAbsoluteUnchecked("@" + rule.getName() + "//:default_crosstool"),
+ "android_ndk_for_testing",
+ Label.parseAbsoluteUnchecked("@" + rule.getName() + "//:files"));
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_build_file_template.txt b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_build_file_template.txt
index eb2f818e0a..6612d27890 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_build_file_template.txt
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_build_file_template.txt
@@ -27,6 +27,11 @@ cc_library(
srcs = [],
)
+alias(
+ name = "default_crosstool",
+ actual = "%defaultCrosstool%",
+)
+
################################################################
# cc toolchain suite rules (one for each STL in the NDK)
################################################################
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/StlImpls.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/StlImpls.java
index 0508b7c7c5..dc651e5e18 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/StlImpls.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/StlImpls.java
@@ -24,14 +24,14 @@ import java.util.List;
*/
public final class StlImpls {
- public static final String DEFAULT_STL_NAME = "gnu-libstdcpp";
-
private StlImpls() {}
public static class GnuLibStdCppStlImpl extends StlImpl {
+ public static final String NAME = "gnu-libstdcpp";
+
public GnuLibStdCppStlImpl(NdkPaths ndkPaths) {
- super(DEFAULT_STL_NAME, ndkPaths);
+ super(NAME, ndkPaths);
}
@Override
@@ -44,8 +44,10 @@ public final class StlImpls {
public static class LibCppStlImpl extends StlImpl {
+ public static final String NAME = "libcpp";
+
public LibCppStlImpl(NdkPaths ndkPaths) {
- super("libcpp", ndkPaths);
+ super(NAME, ndkPaths);
}
@Override
@@ -58,8 +60,10 @@ public final class StlImpls {
public static class StlPortStlImpl extends StlImpl {
+ public static final String NAME = "stlport";
+
public StlPortStlImpl(NdkPaths ndkPaths) {
- super("stlport", ndkPaths);
+ super(NAME, ndkPaths);
}
@Override