diff options
author | 2017-04-07 22:43:24 +0000 | |
---|---|---|
committer | 2017-04-10 11:48:31 +0200 | |
commit | 97cd8f2eab921f36ff28d8e78f024ef75c02e962 (patch) | |
tree | 352704cb533559c9c4c728f6cbcd552132f14a94 | |
parent | 3fd4054146c81ca96425c1bfa4b26644c63b4a54 (diff) |
Make Bazel use existing NDK13 crosstool for NDK14.
The only difference in the crosstool is the clang version. See the full NDK14 changelog here:
https://github.com/android-ndk/ndk/wiki/Changelog-r14
Fixes https://github.com/bazelbuild/bazel/issues/2655.
RELNOTES: Bazel now supports Android NDK14.
PiperOrigin-RevId: 152552865
7 files changed, 38 insertions, 28 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstools.java index fab8dfbbce..64a55d1df3 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstools.java @@ -37,7 +37,10 @@ public final class AndroidNdkCrosstools { "10", new NdkMajorRevisionR10(), "11", new NdkMajorRevisionR11(), "12", new NdkMajorRevisionR12(), - "13", new NdkMajorRevisionR13()); + "13", new NdkMajorRevisionR13("3.8.256229"), + // The only difference between the NDK13 and NDK14 CROSSTOOLs is the version of clang in + // built-in includes paths, so we can reuse everything else. + "14", new NdkMajorRevisionR13("3.8.275480")); public static final Map.Entry<String, NdkMajorRevision> LATEST_KNOWN_REVISION = Iterables.getLast(KNOWN_NDK_MAJOR_REVISIONS.entrySet()); @@ -83,4 +86,4 @@ public final class AndroidNdkCrosstools { public static boolean isKnownNDKRevision(NdkRelease ndkRelease) { return KNOWN_NDK_MAJOR_REVISIONS.containsKey(ndkRelease.majorRevision); } -}
\ No newline at end of file +} diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/AndroidNdkCrosstoolsR13.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/AndroidNdkCrosstoolsR13.java index 08d2d8ed9d..9cb91f2e5a 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/AndroidNdkCrosstoolsR13.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/AndroidNdkCrosstoolsR13.java @@ -27,8 +27,6 @@ import java.util.Map.Entry; /** Generates a CrosstoolRelease proto for the Android NDK. */ final class AndroidNdkCrosstoolsR13 { - /** {@code ./ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --version} */ - static final String CLANG_VERSION = "3.8.256229"; /** * Creates a CrosstoolRelease proto for the Android NDK, given the API level to use and the @@ -40,23 +38,25 @@ final class AndroidNdkCrosstoolsR13 { * * @return A CrosstoolRelease for the Android NDK. */ - static CrosstoolRelease create(NdkPaths ndkPaths, StlImpl stlImpl, String hostPlatform) { + static CrosstoolRelease create( + NdkPaths ndkPaths, StlImpl stlImpl, String hostPlatform, String clangVersion) { return CrosstoolRelease.newBuilder() .setMajorVersion("android") .setMinorVersion("") .setDefaultTargetCpu("armeabi") .addAllDefaultToolchain(getDefaultCpuToolchains(stlImpl)) - .addAllToolchain(createToolchains(ndkPaths, stlImpl, hostPlatform)) + .addAllToolchain(createToolchains(ndkPaths, stlImpl, hostPlatform, clangVersion)) .build(); } private static ImmutableList<CToolchain> createToolchains( - NdkPaths ndkPaths, StlImpl stlImpl, String hostPlatform) { + NdkPaths ndkPaths, StlImpl stlImpl, String hostPlatform, String clangVersion) { List<CToolchain.Builder> toolchainBuilders = new ArrayList<>(); - toolchainBuilders.addAll(new ArmCrosstools(ndkPaths, stlImpl).createCrosstools()); - toolchainBuilders.addAll(new MipsCrosstools(ndkPaths, stlImpl).createCrosstools()); - toolchainBuilders.addAll(new X86Crosstools(ndkPaths, stlImpl).createCrosstools()); + toolchainBuilders.addAll(new ArmCrosstools(ndkPaths, stlImpl, clangVersion).createCrosstools()); + toolchainBuilders.addAll( + new MipsCrosstools(ndkPaths, stlImpl, clangVersion).createCrosstools()); + toolchainBuilders.addAll(new X86Crosstools(ndkPaths, stlImpl, clangVersion).createCrosstools()); ImmutableList.Builder<CToolchain> toolchains = new ImmutableList.Builder<>(); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/ArmCrosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/ArmCrosstools.java index a9782b4294..6578cc4f3e 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/ArmCrosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/ArmCrosstools.java @@ -29,10 +29,12 @@ import java.util.List; final class ArmCrosstools { private final NdkPaths ndkPaths; private final StlImpl stlImpl; + private final String clangVersion; - ArmCrosstools(NdkPaths ndkPaths, StlImpl stlImpl) { + ArmCrosstools(NdkPaths ndkPaths, StlImpl stlImpl, String clangVersion) { this.ndkPaths = ndkPaths; this.stlImpl = stlImpl; + this.clangVersion = clangVersion; } ImmutableList<CToolchain.Builder> createCrosstools() { @@ -56,8 +58,7 @@ final class ArmCrosstools { .setCompiler("clang3.8") .addAllToolPath(ndkPaths.createClangToolpaths(toolchainName, targetPlatform, null)) .addCxxBuiltinIncludeDirectory( - ndkPaths.createClangToolchainBuiltinIncludeDirectory( - AndroidNdkCrosstoolsR13.CLANG_VERSION)) + ndkPaths.createClangToolchainBuiltinIncludeDirectory(clangVersion)) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm64")) // Compiler flags @@ -139,8 +140,7 @@ final class ArmCrosstools { .setCompiler("clang3.8") .addAllToolPath(ndkPaths.createClangToolpaths(toolchainName, targetPlatform, null)) .addCxxBuiltinIncludeDirectory( - ndkPaths.createClangToolchainBuiltinIncludeDirectory( - AndroidNdkCrosstoolsR13.CLANG_VERSION)) + ndkPaths.createClangToolchainBuiltinIncludeDirectory(clangVersion)) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm")) // Compiler flags diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/MipsCrosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/MipsCrosstools.java index e3c387ebf6..d0fda6b305 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/MipsCrosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/MipsCrosstools.java @@ -29,10 +29,12 @@ import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.Compi final class MipsCrosstools { private final NdkPaths ndkPaths; private final StlImpl stlImpl; + private final String clangVersion; - MipsCrosstools(NdkPaths ndkPaths, StlImpl stlImpl) { + MipsCrosstools(NdkPaths ndkPaths, StlImpl stlImpl, String clangVersion) { this.ndkPaths = ndkPaths; this.stlImpl = stlImpl; + this.clangVersion = clangVersion; } ImmutableList<CToolchain.Builder> createCrosstools() { @@ -87,8 +89,7 @@ final class MipsCrosstools { return CToolchain.newBuilder() .setCompiler("clang3.8") .addCxxBuiltinIncludeDirectory( - ndkPaths.createClangToolchainBuiltinIncludeDirectory( - AndroidNdkCrosstoolsR13.CLANG_VERSION)) + ndkPaths.createClangToolchainBuiltinIncludeDirectory(clangVersion)) // Compiler flags .addCompilerFlag("-gcc-toolchain") diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/NdkMajorRevisionR13.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/NdkMajorRevisionR13.java index dff1a4ad07..6aaa4caec8 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/NdkMajorRevisionR13.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/NdkMajorRevisionR13.java @@ -23,10 +23,16 @@ import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.Cross /** Logic specific to Android NDK R13. */ public class NdkMajorRevisionR13 implements NdkMajorRevision { + private final String clangVersion; + + public NdkMajorRevisionR13(String clangVersion) { + this.clangVersion = clangVersion; + } + @Override public CrosstoolRelease crosstoolRelease( NdkPaths ndkPaths, StlImpl stlImpl, String hostPlatform) { - return AndroidNdkCrosstoolsR13.create(ndkPaths, stlImpl, hostPlatform); + return AndroidNdkCrosstoolsR13.create(ndkPaths, stlImpl, hostPlatform, clangVersion); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/X86Crosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/X86Crosstools.java index 6fb1d8fb6a..a577ad260f 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/X86Crosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/X86Crosstools.java @@ -28,10 +28,12 @@ import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.Compi final class X86Crosstools { private final NdkPaths ndkPaths; private final StlImpl stlImpl; + private final String clangVersion; - X86Crosstools(NdkPaths ndkPaths, StlImpl stlImpl) { + X86Crosstools(NdkPaths ndkPaths, StlImpl stlImpl, String clangVersion) { this.ndkPaths = ndkPaths; this.stlImpl = stlImpl; + this.clangVersion = clangVersion; } ImmutableList<CToolchain.Builder> createCrosstools() { @@ -70,8 +72,7 @@ final class X86Crosstools { .setCompiler("clang3.8") .addCxxBuiltinIncludeDirectory( - ndkPaths.createClangToolchainBuiltinIncludeDirectory( - AndroidNdkCrosstoolsR13.CLANG_VERSION)) + ndkPaths.createClangToolchainBuiltinIncludeDirectory(clangVersion)) // Compiler flags .addCompilerFlag("-gcc-toolchain") @@ -107,7 +108,6 @@ final class X86Crosstools { .setMode(CompilationMode.DBG) .addCompilerFlag("-O0") .addCompilerFlag("-g")) - .setTargetSystemName("x86-linux-android"); } } diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java index 6fc9fbf831..3c6ad91d61 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java @@ -97,7 +97,7 @@ public class AndroidNdkRepositoryTest extends BuildViewTestCase { eventCollector, "The revision of the Android NDK referenced by android_ndk_repository rule 'androidndk' " + "could not be determined (the revision string found is 'not a valid release string')." - + " Defaulting to revision 13."); + + " Defaulting to revision 14."); } @Test @@ -123,7 +123,7 @@ public class AndroidNdkRepositoryTest extends BuildViewTestCase { eventCollector, "The revision of the Android NDK referenced by android_ndk_repository rule 'androidndk' " + "could not be determined (the revision string found is 'invalid package revision'). " - + "Defaulting to revision 13."); + + "Defaulting to revision 14."); } @Test @@ -140,14 +140,14 @@ public class AndroidNdkRepositoryTest extends BuildViewTestCase { scratch.overwriteFile( "/ndk/source.properties", "Pkg.Desc = Android NDK", - "Pkg.Revision = 14.0.3675639-beta2"); + "Pkg.Revision = 15.0.3675639-beta2"); invalidatePackages(); assertThat(getConfiguredTarget("@androidndk//:files")).isNotNull(); MoreAsserts.assertContainsEvent( eventCollector, "The major revision of the Android NDK referenced by android_ndk_repository rule " - + "'androidndk' is 14. The major revisions supported by Bazel are [10, 11, 12, 13]. " - + "Defaulting to revision 13."); + + "'androidndk' is 15. The major revisions supported by Bazel are [10, 11, 12, 13, 14]." + + " Defaulting to revision 14."); } } |