From b6ea0d33d3ab72922c8fb3ec1ff0e437af09584d Mon Sep 17 00:00:00 2001 From: Adam Michael Date: Fri, 10 Mar 2017 02:40:21 +0000 Subject: [PATCH] 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 ++++++++++-- .../ndkcrosstools/r10e/ArmCrosstools.java | 8 +-- .../ndkcrosstools/r10e/MipsCrosstools.java | 6 +-- .../ndkcrosstools/r10e/X86Crosstools.java | 8 +-- .../r11/AndroidNdkCrosstoolsR11.java | 3 ++ .../ndkcrosstools/r11/ArmCrosstools.java | 40 +++++++------- .../ndkcrosstools/r11/MipsCrosstools.java | 53 ++++++++++--------- .../ndkcrosstools/r11/X86Crosstools.java | 20 +++---- .../r12/AndroidNdkCrosstoolsR12.java | 3 ++ .../ndkcrosstools/r12/ArmCrosstools.java | 9 ++-- .../ndkcrosstools/r12/MipsCrosstools.java | 25 ++++----- .../ndkcrosstools/r12/X86Crosstools.java | 10 ++-- .../r13/AndroidNdkCrosstoolsR13.java | 3 ++ .../ndkcrosstools/r13/ArmCrosstools.java | 8 ++- .../ndkcrosstools/r13/MipsCrosstools.java | 8 ++- .../ndkcrosstools/r13/X86Crosstools.java | 6 ++- .../bazel/android/android_integration_test.sh | 39 +++++++++++++- 17 files changed, 182 insertions(+), 100 deletions(-) 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 9b40e85c5a0860..c5f58b337874dd 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 String createGccToolchainPath(String toolchainName) { .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 void addToolchainIncludePaths( 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 386fd5adb79c0d..80662e02209368 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 @@ private CToolchain.Builder createAarch64Toolchain() { .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 @@ private CToolchain.Builder createAarch64ClangToolchain(String clangVersion) { .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 @@ private CToolchain.Builder createBaseArmeabiToolchain( .addCompilerFlag("-fno-strict-aliasing")); } - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, gccVersion); + ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, gccVersion); return toolchain; } @@ -442,7 +442,7 @@ private CToolchain.Builder createBaseArmeabiClangToolchain(String clangVersion, .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 d3efc9a6a125cb..798b5ca41ef9bd 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 @@ private List createMips64Toolchains() { } 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 @@ private List createMipsToolchains() { .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 @@ private CToolchain.Builder createMipsToolchain( .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 dd77ac82648499..3e94da74f860e2 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 @@ ImmutableList createCrosstools() { .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 @@ ImmutableList createCrosstools() { .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 @@ ImmutableList createCrosstools() { .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 @@ private CToolchain.Builder createX86Toolchain( .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 5efc26d504edf2..65ec516aacd2a8 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 @@ * 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 28f727a2a72426..cfbf2254eb0b6c 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 @@ private CToolchain.Builder createAarch64Toolchain() { .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 @@ private CToolchain.Builder createAarch64ClangToolchain() { .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 @@ private List createArmeabiToolchains(boolean thumb, .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 @@ private List createArmeabiToolchains(boolean thumb, .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 @@ private CToolchain.Builder createBaseArmeabiToolchain( .addCompilerFlag("-fno-strict-aliasing")); } - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9"); + ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9"); return toolchain; } @@ -297,13 +296,13 @@ private List createArmeabiClangToolchain(boolean thumb) { 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 @@ private List createArmeabiClangToolchain(boolean thumb) { 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 @@ private CToolchain.Builder createBaseArmeabiClangToolchain(boolean thumb) { .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 @@ private CToolchain.Builder createBaseArmeabiClangToolchain(boolean thumb) { .addCompilerFlag("-fno-strict-aliasing")); } - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.8"); return toolchain; } @@ -422,4 +422,4 @@ private static String createArmeabiName(String base, boolean thumb) { 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 8b00c0b499545e..29e969dc96c360 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 @@ ImmutableList createCrosstools() { } 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 @@ private List createMips64Toolchains() { // 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 @@ private List createMips64Toolchains() { 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 @@ private List createMipsToolchains() { .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 @@ private CToolchain.Builder createMipsToolchain() { .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 @@ private CToolchain.Builder createBaseMipsToolchain() { .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 @@ private CToolchain.Builder createBaseMipsToolchain() { .addCompilerFlag("-fomit-frame-pointer") .addCompilerFlag("-funswitch-loops") .addCompilerFlag("-finline-limit=300")) - + // Additional debug flags .addCompilationModeFlags(CompilationModeFlags.newBuilder() .setMode(CompilationMode.DBG) @@ -174,12 +171,16 @@ private CToolchain.Builder createBaseMipsClangToolchain(String mipsArch) { 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 @@ private CToolchain.Builder createBaseMipsClangToolchain(String mipsArch) { .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 @@ private CToolchain.Builder createBaseMipsClangToolchain(String mipsArch) { .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 570496dfc68863..7efa4ad6364fdd 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 @@ ImmutableList createCrosstools() { .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 @@ ImmutableList createCrosstools() { .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 @@ ImmutableList createCrosstools() { 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 @@ private CToolchain.Builder createX86Toolchain() { .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 @@ private CToolchain.Builder createBaseX86ClangToolchain(String x86Arch, String ll 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 91a0614de20107..3ae852125f1752 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 @@ /** 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 011bc50052b9c8..7bf795a1713b2c 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 @@ private CToolchain.Builder createAarch64Toolchain() { .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 @@ private CToolchain.Builder createAarch64ClangToolchain() { .addCompilerFlag("-O0") .addCompilerFlag("-UNDEBUG")); - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9.x"); stlImpl.addStlImpl(toolchain, "4.9"); return toolchain; } @@ -207,7 +206,7 @@ private CToolchain.Builder createBaseArmeabiToolchain() { .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 @@ private CToolchain.Builder createBaseArmeabiClangToolchain() { .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 @@ private CToolchain.Builder createBaseArmeabiClangToolchain() { .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 dcb98086b713b4..d04bfbfcb20f5c 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 @@ ImmutableList createCrosstools() { } 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 @@ private List createMips64Toolchains() { "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 @@ private List createMips64Toolchains() { "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 @@ private List createMipsToolchains() { 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 @@ private CToolchain.Builder createMipsToolchain() { "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 @@ private CToolchain.Builder createBaseMipsClangToolchain(String mipsArch) { 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 23ab77a50d68d0..190ee56b50ec2e 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 @@ ImmutableList createCrosstools() { .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 @@ ImmutableList createCrosstools() { .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 @@ ImmutableList createCrosstools() { 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 @@ private CToolchain.Builder createX86Toolchain() { .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 @@ private CToolchain.Builder createBaseX86ClangToolchain(String x86Arch, String ll 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 6ba2ee1b715b0c..08d2d8ed9d1dbd 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 @@ /** 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 e8dcc37fdb016b..a9782b42946c3a 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 @@ private CToolchain.Builder createAarch64ClangToolchain() { .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 @@ private CToolchain.Builder createAarch64ClangToolchain() { .addCompilerFlag("-O0") .addCompilerFlag("-UNDEBUG")); - ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9.x"); stlImpl.addStlImpl(toolchain, "4.9"); return toolchain; } @@ -136,6 +138,9 @@ private CToolchain.Builder createBaseArmeabiClangToolchain() { .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 @@ private CToolchain.Builder createBaseArmeabiClangToolchain() { .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 363649861fb208..e3c387ebf63665 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 @@ private CToolchain.Builder createMips64Toolchain() { 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 @@ private CToolchain.Builder createMipsToolchain() { 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 @@ private CToolchain.Builder createBaseMipsClangToolchain(String mipsArch) { 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 b7b863f01a7ab0..6fb1d8fb6a8f6e 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 @@ ImmutableList createCrosstools() { .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 @@ ImmutableList createCrosstools() { 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 @@ private CToolchain.Builder createBaseX86ClangToolchain(String x86Arch, String ll return CToolchain.newBuilder() .setCompiler("clang3.8") + .addCxxBuiltinIncludeDirectory( + ndkPaths.createClangToolchainBuiltinIncludeDirectory( + AndroidNdkCrosstoolsR13.CLANG_VERSION)) + // Compiler flags .addCompilerFlag("-gcc-toolchain") .addCompilerFlag(gccToolchain) diff --git a/src/test/shell/bazel/android/android_integration_test.sh b/src/test/shell/bazel/android/android_integration_test.sh index 323d24566d922a..35e9280874c9a7 100755 --- a/src/test/shell/bazel/android/android_integration_test.sh +++ b/src/test/shell/bazel/android/android_integration_test.sh @@ -215,10 +215,18 @@ function test_android_binary() { check_soname } +is_ndk_10() { + if [[ -r "${BAZEL_RUNFILES}/external/androidndk/ndk/source.properties" ]]; then + return 1 + else + return 0 + fi +} + function test_android_binary_clang() { # clang3.8 is only available on NDK r11 - # TODO(ahumesky): This is only distinguishing between r10 and r11+. - if [[ ! -r "${BAZEL_RUNFILES}/external/androidndk/ndk/source.properties" ]]; then + if is_ndk_10; then + echo "Not running test_android_binary_clang because it requires NDK11 or later" return fi create_new_workspace @@ -236,6 +244,33 @@ function test_android_binary_clang() { check_soname } +# Regression test for https://github.com/bazelbuild/bazel/issues/2601. +function test_clang_include_paths() { + if is_ndk_10; then + echo "Not running test_clang_include_paths because it requires NDK11 or later" + return + fi + create_new_workspace + setup_android_ndk_support + cat > BUILD < foo.cc < +int main() { return 0; } +EOF + bazel build //:foo \ + --compiler=clang3.8 \ + --cpu=armeabi-v7a \ + --crosstool_top=//external:android/crosstool \ + --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \ + || fail "build failed" +} + # Regression test for https://github.com/bazelbuild/bazel/issues/1928. function test_empty_tree_artifact_action_inputs_mount_empty_directories() { create_new_workspace