From b6ea0d33d3ab72922c8fb3ec1ff0e437af09584d Mon Sep 17 00:00:00 2001 From: Adam Michael Date: Fri, 10 Mar 2017 02:40:21 +0000 Subject: Add the appropriate cxx_builtin_include_directory entries for clang to the Android NDK crosstool created by android_ndk_repository. Also, stop setting -isystem for the builtin include directories in the clang toolchains. Previously, we were incorrectly setting cxx_builtin_include_directory for clang toolchains to the gcc include directories. We were also setting -isystem on these directories, so when an Android build attempted to include an NDK header (like arm_neon.h), clang got gcc's version of that header. A followup change will stop setting -isystem for gcc. Fixes https://github.com/bazelbuild/bazel/issues/2601. Note that I intentionally did not attempt to fix the bug for NDK10. NDK10 is very old, defaults to GCC and contains two separate clang/LLVMs. As such, it would be more complicated to get right and test properly. Also adds an integration test that attempts to compile an NDK header with clang. This change does not entirely fix Tensorflow's Android sample app build with NDK13 (the motivation for https://github.com/bazelbuild/bazel/issues/2601), however I believe that the remaining fixes are on Tensorflow's side. E.g. setting -Wno-c++11-narrowing in copts. -- PiperOrigin-RevId: 149719100 MOS_MIGRATED_REVID=149719100 --- .../rules/android/ndkcrosstools/NdkPaths.java | 33 ++++++++++++-- .../android/ndkcrosstools/r10e/ArmCrosstools.java | 8 ++-- .../android/ndkcrosstools/r10e/MipsCrosstools.java | 6 +-- .../android/ndkcrosstools/r10e/X86Crosstools.java | 8 ++-- .../ndkcrosstools/r11/AndroidNdkCrosstoolsR11.java | 3 ++ .../android/ndkcrosstools/r11/ArmCrosstools.java | 40 ++++++++-------- .../android/ndkcrosstools/r11/MipsCrosstools.java | 53 +++++++++++----------- .../android/ndkcrosstools/r11/X86Crosstools.java | 20 ++++---- .../ndkcrosstools/r12/AndroidNdkCrosstoolsR12.java | 3 ++ .../android/ndkcrosstools/r12/ArmCrosstools.java | 9 ++-- .../android/ndkcrosstools/r12/MipsCrosstools.java | 25 +++++----- .../android/ndkcrosstools/r12/X86Crosstools.java | 10 ++-- .../ndkcrosstools/r13/AndroidNdkCrosstoolsR13.java | 3 ++ .../android/ndkcrosstools/r13/ArmCrosstools.java | 8 +++- .../android/ndkcrosstools/r13/MipsCrosstools.java | 8 ++-- .../android/ndkcrosstools/r13/X86Crosstools.java | 6 ++- 16 files changed, 145 insertions(+), 98 deletions(-) (limited to 'src/main') diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/NdkPaths.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/NdkPaths.java index 9b40e85c5a..c5f58b3378 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/NdkPaths.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/NdkPaths.java @@ -115,18 +115,27 @@ public class NdkPaths { .replace("%hostPlatform%", hostPlatform); } - public void addToolchainIncludePaths( + /** + * Adds {@code cxx_builtin_include_directory} to the toolchain and also sets -isystem for that + * directory. Note that setting -isystem should be entirely unnecessary since builtin include + * directories are on the compiler search path by default by definition. This should be cleaned + * up (b/36091573). + * + *

Note also that this method is only for gcc include paths. The clang include paths follow a + * different path template and are not separated by architecture. + */ + public void addGccToolchainIncludePaths( List toolchains, String toolchainName, String targetPlatform, String gccVersion) { for (CToolchain.Builder toolchain : toolchains) { - addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, gccVersion); + addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, gccVersion); } } - public void addToolchainIncludePaths( + public void addGccToolchainIncludePaths( CToolchain.Builder toolchain, String toolchainName, String targetPlatform, @@ -141,6 +150,24 @@ public class NdkPaths { toolchain.addUnfilteredCxxFlag(includePath); } } + + /** + * Gets the clang NDK builtin includes directories that exist in the NDK. These directories are + * always searched for header files by clang and should be added to the CROSSTOOL in the + * cxx_builtin_include_directories list. + * + *

You can see the list of directories and the order that they are searched in by running + * {@code clang -E -x c++ - -v < /dev/null}. Note that the same command works for {@code gcc}. + */ + public String createClangToolchainBuiltinIncludeDirectory(String clangVersion) { + String clangBuiltinIncludeDirectoryPathTemplate = + "external/%repositoryName%/ndk/toolchains/llvm/prebuilt/%hostPlatform%/lib64/clang/" + + "%clangVersion%/include"; + return clangBuiltinIncludeDirectoryPathTemplate + .replace("%repositoryName%", repositoryName) + .replace("%hostPlatform%", hostPlatform) + .replace("%clangVersion%", clangVersion); + } private ImmutableList createToolchainIncludePaths( String toolchainName, String targetPlatform, String gccVersion) { diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/ArmCrosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/ArmCrosstools.java index 386fd5adb7..80662e0220 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/ArmCrosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/ArmCrosstools.java @@ -126,7 +126,7 @@ class ArmCrosstools { .addCompilerFlag("-fno-omit-frame-pointer") .addCompilerFlag("-fno-strict-aliasing")); - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9"); + ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9"); stlImpl.addStlImpl(toolchain, "4.9"); return toolchain; } @@ -186,7 +186,7 @@ class ArmCrosstools { .addCompilerFlag("-fno-omit-frame-pointer") .addCompilerFlag("-fno-strict-aliasing")); - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9"); + ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9"); stlImpl.addStlImpl(toolchain, "4.9"); return toolchain; } @@ -309,7 +309,7 @@ class ArmCrosstools { .addCompilerFlag("-fno-strict-aliasing")); } - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, gccVersion); + ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, gccVersion); return toolchain; } @@ -442,7 +442,7 @@ class ArmCrosstools { .addCompilerFlag("-fno-strict-aliasing")); } - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.8"); + ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.8"); return toolchain; } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/MipsCrosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/MipsCrosstools.java index d3efc9a6a1..798b5ca41e 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/MipsCrosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/MipsCrosstools.java @@ -81,7 +81,7 @@ class MipsCrosstools { } List toolchains = toolchainsListBuilder.build(); - ndkPaths.addToolchainIncludePaths( + ndkPaths.addGccToolchainIncludePaths( toolchains, "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9"); stlImpl.addStlImpl(toolchains, "4.9"); return toolchains; @@ -114,7 +114,7 @@ class MipsCrosstools { .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips")); - ndkPaths.addToolchainIncludePaths( + ndkPaths.addGccToolchainIncludePaths( mipsClang, "mipsel-linux-android-4.8", "mipsel-linux-android", "4.8"); stlImpl.addStlImpl(mipsClang, "4.8"); toolchainsListBuilder.add(mipsClang); @@ -138,7 +138,7 @@ class MipsCrosstools { .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips")); - ndkPaths.addToolchainIncludePaths( + ndkPaths.addGccToolchainIncludePaths( toolchain, "mipsel-linux-android-" + gccVersion, "mipsel-linux-android", gccVersion); stlImpl.addStlImpl(toolchain, gccVersion); return toolchain; diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/X86Crosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/X86Crosstools.java index dd77ac8264..3e94da74f8 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/X86Crosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/X86Crosstools.java @@ -64,7 +64,7 @@ class X86Crosstools { .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86")); - ndkPaths.addToolchainIncludePaths(x86Clang, "x86-4.8", "i686-linux-android", "4.8"); + ndkPaths.addGccToolchainIncludePaths(x86Clang, "x86-4.8", "i686-linux-android", "4.8"); stlImpl.addStlImpl(x86Clang, "4.8"); toolchains.add(x86Clang); } @@ -85,7 +85,7 @@ class X86Crosstools { .addCompilerFlag("-fstack-protector-strong"); - ndkPaths.addToolchainIncludePaths(x8664, "x86_64-4.9", "x86_64-linux-android", "4.9"); + ndkPaths.addGccToolchainIncludePaths(x8664, "x86_64-4.9", "x86_64-linux-android", "4.9"); stlImpl.addStlImpl(x8664, "4.9"); toolchains.add(x8664); @@ -102,7 +102,7 @@ class X86Crosstools { .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86_64")); - ndkPaths.addToolchainIncludePaths(x8664Clang, "x86_64-4.9", "x86_64-linux-android", "4.9"); + ndkPaths.addGccToolchainIncludePaths(x8664Clang, "x86_64-4.9", "x86_64-linux-android", "4.9"); stlImpl.addStlImpl(x8664Clang, "4.9"); toolchains.add(x8664Clang); } @@ -132,7 +132,7 @@ class X86Crosstools { .addCompilerFlag(stackProtrectorFlag); - ndkPaths.addToolchainIncludePaths( + ndkPaths.addGccToolchainIncludePaths( toolchain, "x86-" + gccVersion, "i686-linux-android", gccVersion); stlImpl.addStlImpl(toolchain, gccVersion); return toolchain; diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/AndroidNdkCrosstoolsR11.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/AndroidNdkCrosstoolsR11.java index 5efc26d504..65ec516aac 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/AndroidNdkCrosstoolsR11.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/AndroidNdkCrosstoolsR11.java @@ -29,6 +29,9 @@ import java.util.Map.Entry; * Generates a CrosstoolRelease proto for the Android NDK. */ final class AndroidNdkCrosstoolsR11 { + /** {@code ./ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --version} */ + static final String CLANG_VERSION = "3.8.243773"; + private AndroidNdkCrosstoolsR11() {} /** diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/ArmCrosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/ArmCrosstools.java index 28f727a2a7..cfbf2254eb 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/ArmCrosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/ArmCrosstools.java @@ -110,7 +110,7 @@ class ArmCrosstools { .addCompilerFlag("-fno-omit-frame-pointer") .addCompilerFlag("-fno-strict-aliasing")); - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9"); + ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9"); stlImpl.addStlImpl(toolchain, "4.9"); return toolchain; } @@ -169,7 +169,6 @@ class ArmCrosstools { .addCompilerFlag("-fno-omit-frame-pointer") .addCompilerFlag("-fno-strict-aliasing")); - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9"); stlImpl.addStlImpl(toolchain, "4.9"); return toolchain; } @@ -186,13 +185,13 @@ class ArmCrosstools { .addCompilerFlag("-march=armv5te") .addCompilerFlag("-mtune=xscale") .addCompilerFlag("-msoft-float"), - + createBaseArmeabiToolchain(thumb, excludedTools) .setToolchainIdentifier( createArmeabiName("arm-linux-androideabi-4.9-v7a", thumb)) .setTargetCpu(createArmeabiCpuName("armeabi-v7a", thumb)) - .addCompilerFlag("-march=armv7-a") + .addCompilerFlag("-march=armv7-a") .addCompilerFlag("-mfpu=vfpv3-d16") .addCompilerFlag("-mfloat-abi=softfp") @@ -203,12 +202,12 @@ class ArmCrosstools { .setToolchainIdentifier( createArmeabiName("arm-linux-androideabi-4.9-v7a-hard", thumb)) .setTargetCpu(createArmeabiCpuName("armeabi-v7a-hard", thumb)) - - .addCompilerFlag("-march=armv7-a") + + .addCompilerFlag("-march=armv7-a") .addCompilerFlag("-mfpu=vfpv3-d16") .addCompilerFlag("-mhard-float") .addCompilerFlag("-D_NDK_MATH_NO_SOFTFP=1") - + .addLinkerFlag("-march=armv7-a") .addLinkerFlag("-Wl,--fix-cortex-a8") .addLinkerFlag("-Wl,--no-warn-mismatch") @@ -287,7 +286,7 @@ class ArmCrosstools { .addCompilerFlag("-fno-strict-aliasing")); } - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9"); + ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9"); return toolchain; } @@ -297,13 +296,13 @@ class ArmCrosstools { createBaseArmeabiClangToolchain(thumb) .setToolchainIdentifier(createArmeabiName("arm-linux-androideabi-clang3.8", thumb)) .setTargetCpu(createArmeabiCpuName("armeabi", thumb)) - + .addCompilerFlag("-target") .addCompilerFlag("armv5te-none-linux-androideabi") // LLVM_TRIPLE .addCompilerFlag("-march=armv5te") .addCompilerFlag("-mtune=xscale") .addCompilerFlag("-msoft-float") - + .addLinkerFlag("-target") // LLVM_TRIPLE .addLinkerFlag("armv5te-none-linux-androideabi"), @@ -311,29 +310,29 @@ class ArmCrosstools { createBaseArmeabiClangToolchain(thumb) .setToolchainIdentifier(createArmeabiName("arm-linux-androideabi-clang3.8-v7a", thumb)) .setTargetCpu(createArmeabiCpuName("armeabi-v7a", thumb)) - + .addCompilerFlag("-target") .addCompilerFlag("armv7-none-linux-androideabi") // LLVM_TRIPLE - .addCompilerFlag("-march=armv7-a") + .addCompilerFlag("-march=armv7-a") .addCompilerFlag("-mfloat-abi=softfp") .addCompilerFlag("-mfpu=vfpv3-d16") - + .addLinkerFlag("-target") .addLinkerFlag("armv7-none-linux-androideabi") // LLVM_TRIPLE .addLinkerFlag("-Wl,--fix-cortex-a8"), - + createBaseArmeabiClangToolchain(thumb) .setToolchainIdentifier( createArmeabiName("arm-linux-androideabi-clang3.8-v7a-hard", thumb)) .setTargetCpu(createArmeabiCpuName("armeabi-v7a-hard", thumb)) - + .addCompilerFlag("-target") .addCompilerFlag("armv7-none-linux-androideabi") // LLVM_TRIPLE - .addCompilerFlag("-march=armv7-a") + .addCompilerFlag("-march=armv7-a") .addCompilerFlag("-mfpu=vfpv3-d16") .addCompilerFlag("-mhard-float") .addCompilerFlag("-D_NDK_MATH_NO_SOFTFP=1") - + .addLinkerFlag("-target") .addLinkerFlag("armv7-none-linux-androideabi") // LLVM_TRIPLE .addLinkerFlag("-Wl,--fix-cortex-a8") @@ -355,7 +354,9 @@ class ArmCrosstools { .setCompiler("clang3.8") .addAllToolPath(ndkPaths.createClangToolpaths(toolchainName, targetPlatform, null)) - + .addCxxBuiltinIncludeDirectory( + ndkPaths.createClangToolchainBuiltinIncludeDirectory( + AndroidNdkCrosstoolsR11.CLANG_VERSION)) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm")) // Compiler flags @@ -411,7 +412,6 @@ class ArmCrosstools { .addCompilerFlag("-fno-strict-aliasing")); } - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.8"); return toolchain; } @@ -422,4 +422,4 @@ class ArmCrosstools { private static String createArmeabiCpuName(String base, boolean thumb) { return base + (thumb ? "-thumb" : ""); } -} \ No newline at end of file +} diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/MipsCrosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/MipsCrosstools.java index 8b00c0b499..29e969dc96 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/MipsCrosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/MipsCrosstools.java @@ -48,10 +48,7 @@ class MipsCrosstools { } private List createMips64Toolchains() { - - ImmutableList.Builder toolchainsListBuilder = ImmutableList.builder(); - - toolchainsListBuilder.add(createBaseMipsToolchain() + CToolchain.Builder mips64Gcc = createBaseMipsToolchain() .setToolchainIdentifier("mips64el-linux-android-4.9") .setTargetSystemName("mips64el-linux-android") .setTargetCpu("mips64") @@ -62,9 +59,9 @@ class MipsCrosstools { // mips64 toolchain doesn't have the dwp tool. CppConfiguration.Tool.DWP)) - .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips64"))); + .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips64")); - toolchainsListBuilder.add(createBaseMipsClangToolchain("mips64el") + CToolchain.Builder mips64Clang = createBaseMipsClangToolchain("mips64el") .setToolchainIdentifier("mips64el-linux-android-clang3.8") .setTargetSystemName("mips64el-linux-android") .setTargetCpu("mips64") @@ -75,11 +72,11 @@ class MipsCrosstools { null, CppConfiguration.Tool.DWP)) - .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips64"))); + .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips64")); - List toolchains = toolchainsListBuilder.build(); - ndkPaths.addToolchainIncludePaths( - toolchains, "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9"); + List toolchains = ImmutableList.of(mips64Gcc, mips64Clang); + ndkPaths.addGccToolchainIncludePaths( + mips64Gcc, "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9"); stlImpl.addStlImpl(toolchains, "4.9"); return toolchains; } @@ -96,20 +93,20 @@ class MipsCrosstools { .setToolchainIdentifier("mipsel-linux-android-clang3.8") .setTargetSystemName("mipsel-linux-android") .setTargetCpu("mips") - + .addAllToolPath(ndkPaths.createClangToolpaths( "mipsel-linux-android-4.9", "mipsel-linux-android", null, CppConfiguration.Tool.DWP, CppConfiguration.Tool.GCOVTOOL)) - + .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips")); - ndkPaths.addToolchainIncludePaths( + ndkPaths.addGccToolchainIncludePaths( mipsClang, "mipsel-linux-android-4.9", "mipsel-linux-android", "4.9"); stlImpl.addStlImpl(mipsClang, "4.9"); toolchainsListBuilder.add(mipsClang); - + return toolchainsListBuilder.build(); } @@ -120,19 +117,19 @@ class MipsCrosstools { .setTargetSystemName("mipsel-linux-android") .setTargetCpu("mips") .setCompiler("gcc-4.9") - + .addAllToolPath(ndkPaths.createToolpaths( "mipsel-linux-android-4.9", "mipsel-linux-android", CppConfiguration.Tool.DWP)) - + .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips")); - ndkPaths.addToolchainIncludePaths( + ndkPaths.addGccToolchainIncludePaths( toolchain, "mipsel-linux-android-4.9", "mipsel-linux-android", "4.9"); stlImpl.addStlImpl(toolchain, "4.9"); return toolchain; } - + private CToolchain.Builder createBaseMipsToolchain() { return CToolchain.newBuilder() // Compiler flags @@ -148,10 +145,10 @@ class MipsCrosstools { .addCompilerFlag("-frename-registers") .addCompilerFlag("-no-canonical-prefixes") .addCompilerFlag("-fno-canonical-system-headers") - + // Linker flags .addLinkerFlag("-no-canonical-prefixes") - + // Additional release flags .addCompilationModeFlags(CompilationModeFlags.newBuilder() .setMode(CompilationMode.OPT) @@ -161,7 +158,7 @@ class MipsCrosstools { .addCompilerFlag("-fomit-frame-pointer") .addCompilerFlag("-funswitch-loops") .addCompilerFlag("-finline-limit=300")) - + // Additional debug flags .addCompilationModeFlags(CompilationModeFlags.newBuilder() .setMode(CompilationMode.DBG) @@ -174,12 +171,16 @@ class MipsCrosstools { String gccToolchain = ndkPaths.createGccToolchainPath( String.format("%s-linux-android-4.9", mipsArch)); - + String llvmTriple = mipsArch + "-none-linux-android"; - + return CToolchain.newBuilder() .setCompiler("clang3.8") + .addCxxBuiltinIncludeDirectory( + ndkPaths.createClangToolchainBuiltinIncludeDirectory( + AndroidNdkCrosstoolsR11.CLANG_VERSION)) + // Compiler flags .addCompilerFlag("-gcc-toolchain") .addCompilerFlag(gccToolchain) @@ -194,14 +195,14 @@ class MipsCrosstools { .addCompilerFlag("-Wno-invalid-command-line-argument") .addCompilerFlag("-Wno-unused-command-line-argument") .addCompilerFlag("-no-canonical-prefixes") - + // Linker flags .addLinkerFlag("-gcc-toolchain") .addLinkerFlag(gccToolchain) .addLinkerFlag("-target") .addLinkerFlag(llvmTriple) .addLinkerFlag("-no-canonical-prefixes") - + // Additional release flags .addCompilationModeFlags(CompilationModeFlags.newBuilder() .setMode(CompilationMode.OPT) @@ -209,7 +210,7 @@ class MipsCrosstools { .addCompilerFlag("-g") .addCompilerFlag("-DNDEBUG") .addCompilerFlag("-fomit-frame-pointer")) - + // Additional debug flags .addCompilationModeFlags(CompilationModeFlags.newBuilder() .setMode(CompilationMode.DBG) diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/X86Crosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/X86Crosstools.java index 570496dfc6..7efa4ad636 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/X86Crosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/X86Crosstools.java @@ -58,7 +58,6 @@ class X86Crosstools { .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86")); - ndkPaths.addToolchainIncludePaths(x86Clang, "x86-4.9", "i686-linux-android", "4.9"); stlImpl.addStlImpl(x86Clang, "4.9"); toolchains.add(x86Clang); @@ -78,7 +77,7 @@ class X86Crosstools { .addCompilerFlag("-fstack-protector-strong"); - ndkPaths.addToolchainIncludePaths(x8664, "x86_64-4.9", "x86_64-linux-android", "4.9"); + ndkPaths.addGccToolchainIncludePaths(x8664, "x86_64-4.9", "x86_64-linux-android", "4.9"); stlImpl.addStlImpl(x8664, "4.9"); toolchains.add(x8664); @@ -86,13 +85,12 @@ class X86Crosstools { createBaseX86ClangToolchain("x86_64", "x86_64") .setToolchainIdentifier("x86_64-clang3.8") .setTargetCpu("x86_64") - + .addAllToolPath(ndkPaths.createClangToolpaths( "x86_64-4.9", "x86_64-linux-android", null)) - + .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86_64")); - ndkPaths.addToolchainIncludePaths(x8664Clang, "x86_64-4.9", "x86_64-linux-android", "4.9"); stlImpl.addStlImpl(x8664Clang, "4.9"); toolchains.add(x8664Clang); @@ -112,19 +110,19 @@ class X86Crosstools { .setToolchainIdentifier("x86-4.9") .setTargetCpu("x86") .setCompiler("gcc-4.9") - + .addAllToolPath(ndkPaths.createToolpaths("x86-4.9", "i686-linux-android")) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86")) - + .addCompilerFlag("-fstack-protector-strong"); - ndkPaths.addToolchainIncludePaths( + ndkPaths.addGccToolchainIncludePaths( toolchain, "x86-4.9", "i686-linux-android", "4.9"); stlImpl.addStlImpl(toolchain, "4.9"); return toolchain; } - + private CToolchain.Builder createBaseX86Toolchain() { return CToolchain.newBuilder() // Compiler flags @@ -167,6 +165,10 @@ class X86Crosstools { return CToolchain.newBuilder() .setCompiler("clang3.8") + .addCxxBuiltinIncludeDirectory( + ndkPaths.createClangToolchainBuiltinIncludeDirectory( + AndroidNdkCrosstoolsR11.CLANG_VERSION)) + // Compiler flags .addCompilerFlag("-gcc-toolchain") .addCompilerFlag(gccToolchain) diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/AndroidNdkCrosstoolsR12.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/AndroidNdkCrosstoolsR12.java index 91a0614de2..3ae852125f 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/AndroidNdkCrosstoolsR12.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/AndroidNdkCrosstoolsR12.java @@ -27,6 +27,9 @@ import java.util.Map.Entry; /** Generates a CrosstoolRelease proto for the Android NDK. */ final class AndroidNdkCrosstoolsR12 { + /** {@code ./ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --version} */ + static final String CLANG_VERSION = "3.8.256229"; + private AndroidNdkCrosstoolsR12() {} /** * Creates a CrosstoolRelease proto for the Android NDK, given the API level to use and the diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/ArmCrosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/ArmCrosstools.java index 011bc50052..7bf795a171 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/ArmCrosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/ArmCrosstools.java @@ -87,7 +87,7 @@ class ArmCrosstools { .addCompilerFlag("-O0") .addCompilerFlag("-UNDEBUG")); - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9.x"); + ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9.x"); stlImpl.addStlImpl(toolchain, "4.9"); return toolchain; } @@ -142,7 +142,6 @@ class ArmCrosstools { .addCompilerFlag("-O0") .addCompilerFlag("-UNDEBUG")); - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9.x"); stlImpl.addStlImpl(toolchain, "4.9"); return toolchain; } @@ -207,7 +206,7 @@ class ArmCrosstools { .addCompilerFlag("-O0") .addCompilerFlag("-UNDEBUG")); - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9.x"); + ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9.x"); return toolchain; } @@ -250,6 +249,9 @@ class ArmCrosstools { .setTargetSystemName("arm-linux-androideabi") .setCompiler("clang3.8") .addAllToolPath(ndkPaths.createClangToolpaths(toolchainName, targetPlatform, null)) + .addCxxBuiltinIncludeDirectory( + ndkPaths.createClangToolchainBuiltinIncludeDirectory( + AndroidNdkCrosstoolsR12.CLANG_VERSION)) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm")) // Compiler flags @@ -283,7 +285,6 @@ class ArmCrosstools { .addCompilerFlag("-fno-strict-aliasing") .addCompilerFlag("-O0") .addCompilerFlag("-UNDEBUG")); - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9.x"); return toolchain; } } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/MipsCrosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/MipsCrosstools.java index dcb98086b7..d04bfbfcb2 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/MipsCrosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/MipsCrosstools.java @@ -48,10 +48,7 @@ class MipsCrosstools { } private List createMips64Toolchains() { - - ImmutableList.Builder toolchainsListBuilder = ImmutableList.builder(); - - toolchainsListBuilder.add( + CToolchain.Builder mips64Gcc = createBaseMipsToolchain() .setToolchainIdentifier("mips64el-linux-android-4.9") .setTargetSystemName("mips64el-linux-android") @@ -63,9 +60,9 @@ class MipsCrosstools { "mips64el-linux-android", // mips64 toolchain doesn't have the dwp tool. CppConfiguration.Tool.DWP)) - .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips64"))); + .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips64")); - toolchainsListBuilder.add( + CToolchain.Builder mips64Clang = createBaseMipsClangToolchain("mips64el") .setToolchainIdentifier("mips64el-linux-android-clang3.8") .setTargetSystemName("mips64el-linux-android") @@ -76,11 +73,11 @@ class MipsCrosstools { "mips64el-linux-android", null, CppConfiguration.Tool.DWP)) - .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips64"))); + .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips64")); - List toolchains = toolchainsListBuilder.build(); - ndkPaths.addToolchainIncludePaths( - toolchains, "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9.x"); + List toolchains = ImmutableList.of(mips64Gcc, mips64Clang); + ndkPaths.addGccToolchainIncludePaths( + mips64Gcc, "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9.x"); stlImpl.addStlImpl(toolchains, "4.9"); return toolchains; } @@ -107,7 +104,7 @@ class MipsCrosstools { CppConfiguration.Tool.GCOVTOOL)) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips")); - ndkPaths.addToolchainIncludePaths( + ndkPaths.addGccToolchainIncludePaths( mipsClang, "mipsel-linux-android-4.9", "mipsel-linux-android", "4.9.x"); stlImpl.addStlImpl(mipsClang, "4.9"); toolchainsListBuilder.add(mipsClang); @@ -128,7 +125,7 @@ class MipsCrosstools { "mipsel-linux-android-4.9", "mipsel-linux-android", CppConfiguration.Tool.DWP)) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips")); - ndkPaths.addToolchainIncludePaths( + ndkPaths.addGccToolchainIncludePaths( toolchain, "mipsel-linux-android-4.9", "mipsel-linux-android", "4.9.x"); stlImpl.addStlImpl(toolchain, "4.9"); return toolchain; @@ -178,6 +175,10 @@ class MipsCrosstools { return CToolchain.newBuilder() .setCompiler("clang3.8") + .addCxxBuiltinIncludeDirectory( + ndkPaths.createClangToolchainBuiltinIncludeDirectory( + AndroidNdkCrosstoolsR12.CLANG_VERSION)) + // Compiler flags .addCompilerFlag("-gcc-toolchain") .addCompilerFlag(gccToolchain) diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/X86Crosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/X86Crosstools.java index 23ab77a50d..190ee56b50 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/X86Crosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/X86Crosstools.java @@ -53,7 +53,6 @@ class X86Crosstools { .addAllToolPath(ndkPaths.createClangToolpaths("x86-4.9", "i686-linux-android", null)) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86")); - ndkPaths.addToolchainIncludePaths(x86Clang, "x86-4.9", "i686-linux-android", "4.9.x"); stlImpl.addStlImpl(x86Clang, "4.9"); toolchains.add(x86Clang); @@ -67,7 +66,7 @@ class X86Crosstools { .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86_64")) .addCompilerFlag("-fstack-protector-strong"); - ndkPaths.addToolchainIncludePaths(x8664, "x86_64-4.9", "x86_64-linux-android", "4.9.x"); + ndkPaths.addGccToolchainIncludePaths(x8664, "x86_64-4.9", "x86_64-linux-android", "4.9.x"); stlImpl.addStlImpl(x8664, "4.9"); toolchains.add(x8664); @@ -79,7 +78,6 @@ class X86Crosstools { ndkPaths.createClangToolpaths("x86_64-4.9", "x86_64-linux-android", null)) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86_64")); - ndkPaths.addToolchainIncludePaths(x8664Clang, "x86_64-4.9", "x86_64-linux-android", "4.9.x"); stlImpl.addStlImpl(x8664Clang, "4.9"); toolchains.add(x8664Clang); @@ -104,7 +102,7 @@ class X86Crosstools { .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86")) .addCompilerFlag("-fstack-protector-strong"); - ndkPaths.addToolchainIncludePaths(toolchain, "x86-4.9", "i686-linux-android", "4.9.x"); + ndkPaths.addGccToolchainIncludePaths(toolchain, "x86-4.9", "i686-linux-android", "4.9.x"); stlImpl.addStlImpl(toolchain, "4.9"); return toolchain; } @@ -145,6 +143,10 @@ class X86Crosstools { return CToolchain.newBuilder() .setCompiler("clang3.8") + .addCxxBuiltinIncludeDirectory( + ndkPaths.createClangToolchainBuiltinIncludeDirectory( + AndroidNdkCrosstoolsR12.CLANG_VERSION)) + // Compiler flags .addCompilerFlag("-gcc-toolchain") .addCompilerFlag(gccToolchain) 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 6ba2ee1b71..08d2d8ed9d 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,6 +27,9 @@ 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 * release revision. The crosstools are generated through code rather than checked in as a flat 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 e8dcc37fdb..a9782b4294 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 @@ -55,6 +55,9 @@ final class ArmCrosstools { .setTargetCpu("arm64-v8a") .setCompiler("clang3.8") .addAllToolPath(ndkPaths.createClangToolpaths(toolchainName, targetPlatform, null)) + .addCxxBuiltinIncludeDirectory( + ndkPaths.createClangToolchainBuiltinIncludeDirectory( + AndroidNdkCrosstoolsR13.CLANG_VERSION)) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm64")) // Compiler flags @@ -92,7 +95,6 @@ final class ArmCrosstools { .addCompilerFlag("-O0") .addCompilerFlag("-UNDEBUG")); - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9.x"); stlImpl.addStlImpl(toolchain, "4.9"); return toolchain; } @@ -136,6 +138,9 @@ final class ArmCrosstools { .setTargetSystemName("arm-linux-androideabi") .setCompiler("clang3.8") .addAllToolPath(ndkPaths.createClangToolpaths(toolchainName, targetPlatform, null)) + .addCxxBuiltinIncludeDirectory( + ndkPaths.createClangToolchainBuiltinIncludeDirectory( + AndroidNdkCrosstoolsR13.CLANG_VERSION)) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm")) // Compiler flags @@ -169,7 +174,6 @@ final class ArmCrosstools { .addCompilerFlag("-fno-strict-aliasing") .addCompilerFlag("-O0") .addCompilerFlag("-UNDEBUG")); - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9.x"); return toolchain; } } 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 363649861f..e3c387ebf6 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 @@ -53,9 +53,6 @@ final class MipsCrosstools { CppConfiguration.Tool.DWP)) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips64")); - //List toolchains = toolchainsListBuilder.build(); - ndkPaths.addToolchainIncludePaths( - mips64Clang, "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9.x"); stlImpl.addStlImpl(mips64Clang, "4.9"); return mips64Clang; } @@ -76,8 +73,6 @@ final class MipsCrosstools { CppConfiguration.Tool.GCOVTOOL)) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips")); - ndkPaths.addToolchainIncludePaths( - mipsClang, "mipsel-linux-android-4.9", "mipsel-linux-android", "4.9.x"); stlImpl.addStlImpl(mipsClang, "4.9"); return mipsClang; @@ -91,6 +86,9 @@ final class MipsCrosstools { return CToolchain.newBuilder() .setCompiler("clang3.8") + .addCxxBuiltinIncludeDirectory( + ndkPaths.createClangToolchainBuiltinIncludeDirectory( + AndroidNdkCrosstoolsR13.CLANG_VERSION)) // Compiler flags .addCompilerFlag("-gcc-toolchain") 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 b7b863f01a..6fb1d8fb6a 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 @@ -46,7 +46,6 @@ final class X86Crosstools { .addAllToolPath(ndkPaths.createClangToolpaths("x86-4.9", "i686-linux-android", null)) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86")); - ndkPaths.addToolchainIncludePaths(x86Clang, "x86-4.9", "i686-linux-android", "4.9.x"); stlImpl.addStlImpl(x86Clang, "4.9"); /** x86_64 */ @@ -58,7 +57,6 @@ final class X86Crosstools { ndkPaths.createClangToolpaths("x86_64-4.9", "x86_64-linux-android", null)) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86_64")); - ndkPaths.addToolchainIncludePaths(x8664Clang, "x86_64-4.9", "x86_64-linux-android", "4.9.x"); stlImpl.addStlImpl(x8664Clang, "4.9"); return ImmutableList.of(x86Clang, x8664Clang); @@ -71,6 +69,10 @@ final class X86Crosstools { return CToolchain.newBuilder() .setCompiler("clang3.8") + .addCxxBuiltinIncludeDirectory( + ndkPaths.createClangToolchainBuiltinIncludeDirectory( + AndroidNdkCrosstoolsR13.CLANG_VERSION)) + // Compiler flags .addCompilerFlag("-gcc-toolchain") .addCompilerFlag(gccToolchain) -- cgit v1.2.3