aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Adam Michael <ajmichael@google.com>2017-03-10 02:40:21 +0000
committerGravatar Vladimir Moskva <vladmos@google.com>2017-03-10 10:28:28 +0000
commitb6ea0d33d3ab72922c8fb3ec1ff0e437af09584d (patch)
tree080e65d675791d17d8d761bc70b81b7878c62879
parent48e1d5b86c5c32e8b9023518254ac9023c26082f (diff)
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
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/NdkPaths.java33
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/ArmCrosstools.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/MipsCrosstools.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/X86Crosstools.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/AndroidNdkCrosstoolsR11.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/ArmCrosstools.java40
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/MipsCrosstools.java53
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/X86Crosstools.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/AndroidNdkCrosstoolsR12.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/ArmCrosstools.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/MipsCrosstools.java25
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/X86Crosstools.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/AndroidNdkCrosstoolsR13.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/ArmCrosstools.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/MipsCrosstools.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r13/X86Crosstools.java6
-rwxr-xr-xsrc/test/shell/bazel/android/android_integration_test.sh39
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 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).
+ *
+ * <p>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<CToolchain.Builder> 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.
+ *
+ * <p>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<String> 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<CToolchain.Builder> 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<CToolchain.Builder> createMips64Toolchains() {
-
- ImmutableList.Builder<CToolchain.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<CToolchain.Builder> toolchains = toolchainsListBuilder.build();
- ndkPaths.addToolchainIncludePaths(
- toolchains, "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9");
+ List<CToolchain.Builder> 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<CToolchain.Builder> createMips64Toolchains() {
-
- ImmutableList.Builder<CToolchain.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<CToolchain.Builder> toolchains = toolchainsListBuilder.build();
- ndkPaths.addToolchainIncludePaths(
- toolchains, "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9.x");
+ List<CToolchain.Builder> 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<CToolchain.Builder> 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)
diff --git a/src/test/shell/bazel/android/android_integration_test.sh b/src/test/shell/bazel/android/android_integration_test.sh
index 323d24566d..35e9280874 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 <<EOF
+cc_binary(
+ name = "foo",
+ srcs = ["foo.cc"],
+ copts = ["-mfpu=neon"],
+)
+EOF
+ cat > foo.cc <<EOF
+#include <arm_neon.h>
+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