aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/NdkPaths.java96
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/ArmCrosstools.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/MipsCrosstools.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r10e/X86Crosstools.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/ArmCrosstools.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/MipsCrosstools.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/X86Crosstools.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/ArmCrosstools.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/MipsCrosstools.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r12/X86Crosstools.java8
-rw-r--r--src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstoolsTest.java20
11 files changed, 105 insertions, 111 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 c5f58b3378..c59be8216c 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
@@ -14,10 +14,11 @@
package com.google.devtools.build.lib.bazel.rules.android.ndkcrosstools;
+import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
-import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain;
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath;
import java.util.Arrays;
import java.util.List;
@@ -36,7 +37,8 @@ public class NdkPaths {
return path.split("/", 3)[2];
}
- private final String repositoryName, hostPlatform;
+ private final String repositoryName;
+ private final String hostPlatform;
private final ApiLevel apiLevel;
public NdkPaths(String repositoryName, String hostPlatform, ApiLevel apiLevel) {
@@ -116,48 +118,12 @@ public class NdkPaths {
}
/**
- * 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) {
- addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, gccVersion);
- }
- }
-
- public void addGccToolchainIncludePaths(
- CToolchain.Builder toolchain,
- String toolchainName,
- String targetPlatform,
- String gccVersion) {
-
- List<String> includePaths =
- this.createToolchainIncludePaths(toolchainName, targetPlatform, gccVersion);
-
- for (String includePath : includePaths) {
- toolchain.addCxxBuiltinIncludeDirectory(includePath);
- toolchain.addUnfilteredCxxFlag("-isystem");
- 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}.
+ * {@code clang -E -x c++ - -v < /dev/null}.
*/
public String createClangToolchainBuiltinIncludeDirectory(String clangVersion) {
String clangBuiltinIncludeDirectoryPathTemplate =
@@ -168,34 +134,34 @@ public class NdkPaths {
.replace("%hostPlatform%", hostPlatform)
.replace("%clangVersion%", clangVersion);
}
-
- private ImmutableList<String> createToolchainIncludePaths(
- String toolchainName, String targetPlatform, String gccVersion) {
-
- ImmutableList.Builder<String> includePaths = ImmutableList.builder();
-
- includePaths.add(createToolchainIncludePath(
- toolchainName, targetPlatform, gccVersion, "include"));
- includePaths.add(createToolchainIncludePath(
- toolchainName, targetPlatform, gccVersion, "include-fixed"));
-
- return includePaths.build();
- }
-
- private String createToolchainIncludePath(
- String toolchainName, String targetPlatform, String gccVersion, String includeFolderName) {
- String toolchainIncludePathTemplate =
+ /**
+ * Gets the gcc 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 gcc -E -x c++ - -v < /dev/null}.
+ */
+ public List<String> createGccToolchainBuiltinIncludeDirectories(
+ final String toolchainName, final String targetPlatform, final String gccVersion) {
+ final String toolchainIncludePathTemplate =
"external/%repositoryName%/ndk/toolchains/%toolchainName%/prebuilt/%hostPlatform%"
- + "/lib/gcc/%targetPlatform%/%gccVersion%/%includeFolderName%";
-
- return toolchainIncludePathTemplate
- .replace("%repositoryName%", repositoryName)
- .replace("%toolchainName%", toolchainName)
- .replace("%hostPlatform%", hostPlatform)
- .replace("%targetPlatform%", targetPlatform)
- .replace("%gccVersion%", gccVersion)
- .replace("%includeFolderName%", includeFolderName);
+ + "/lib/gcc/%targetPlatform%/%gccVersion%/%includeFolderName%";
+ return Lists.transform(
+ ImmutableList.of("include", "include-fixed"),
+ new Function<String, String>() {
+ @Override
+ public String apply(String includeFolderName) {
+ return toolchainIncludePathTemplate
+ .replace("%repositoryName%", repositoryName)
+ .replace("%toolchainName%", toolchainName)
+ .replace("%hostPlatform%", hostPlatform)
+ .replace("%targetPlatform%", targetPlatform)
+ .replace("%gccVersion%", gccVersion)
+ .replace("%includeFolderName%", includeFolderName);
+ }
+ });
}
public String createBuiltinSysroot(String targetCpu) {
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 80662e0220..b2a7c4a826 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
@@ -93,7 +93,9 @@ class ArmCrosstools {
.setCompiler("gcc-4.9")
.addAllToolPath(ndkPaths.createToolpaths(toolchainName, targetPlatform))
-
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ toolchainName, targetPlatform, "4.9"))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm64"))
// Compiler flags
@@ -126,7 +128,6 @@ class ArmCrosstools {
.addCompilerFlag("-fno-omit-frame-pointer")
.addCompilerFlag("-fno-strict-aliasing"));
- ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9");
stlImpl.addStlImpl(toolchain, "4.9");
return toolchain;
}
@@ -186,7 +187,6 @@ class ArmCrosstools {
.addCompilerFlag("-fno-omit-frame-pointer")
.addCompilerFlag("-fno-strict-aliasing"));
- ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9");
stlImpl.addStlImpl(toolchain, "4.9");
return toolchain;
}
@@ -253,6 +253,9 @@ class ArmCrosstools {
.setCompiler("gcc-" + gccVersion)
.addAllToolPath(ndkPaths.createToolpaths(toolchainName, targetPlatform, excludedTools))
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ toolchainName, targetPlatform, gccVersion))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm"))
.addCompilerFlag(stackProtectorFlag)
@@ -309,7 +312,6 @@ class ArmCrosstools {
.addCompilerFlag("-fno-strict-aliasing"));
}
- ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, gccVersion);
return toolchain;
}
@@ -442,7 +444,6 @@ class ArmCrosstools {
.addCompilerFlag("-fno-strict-aliasing"));
}
- 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 798b5ca41e..214aff17f1 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
@@ -61,7 +61,9 @@ class MipsCrosstools {
"mips64el-linux-android-4.9", "mips64el-linux-android",
// mips64 toolchain doesn't have the dwp tool.
CppConfiguration.Tool.DWP))
-
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9"))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips64")));
// The flags for mips64 clang 3.5 and 3.6 are the same, they differ only in the LLVM version
@@ -81,8 +83,6 @@ class MipsCrosstools {
}
List<CToolchain.Builder> toolchains = toolchainsListBuilder.build();
- ndkPaths.addGccToolchainIncludePaths(
- toolchains, "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9");
stlImpl.addStlImpl(toolchains, "4.9");
return toolchains;
}
@@ -114,8 +114,6 @@ class MipsCrosstools {
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips"));
- ndkPaths.addGccToolchainIncludePaths(
- mipsClang, "mipsel-linux-android-4.8", "mipsel-linux-android", "4.8");
stlImpl.addStlImpl(mipsClang, "4.8");
toolchainsListBuilder.add(mipsClang);
}
@@ -135,11 +133,11 @@ class MipsCrosstools {
.addAllToolPath(ndkPaths.createToolpaths(
"mipsel-linux-android-" + gccVersion, "mipsel-linux-android",
excludedTools))
-
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ "mipsel-linux-android-" + gccVersion, "mipsel-linux-android", gccVersion))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips"));
- 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 3e94da74f8..3df07ec58d 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,6 @@ class X86Crosstools {
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86"));
- ndkPaths.addGccToolchainIncludePaths(x86Clang, "x86-4.8", "i686-linux-android", "4.8");
stlImpl.addStlImpl(x86Clang, "4.8");
toolchains.add(x86Clang);
}
@@ -80,12 +79,13 @@ class X86Crosstools {
.addAllToolPath(ndkPaths.createToolpaths(
"x86_64-4.9", "x86_64-linux-android"))
-
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ "x86_64-4.9", "x86_64-linux-android", "4.9"))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86_64"))
.addCompilerFlag("-fstack-protector-strong");
- ndkPaths.addGccToolchainIncludePaths(x8664, "x86_64-4.9", "x86_64-linux-android", "4.9");
stlImpl.addStlImpl(x8664, "4.9");
toolchains.add(x8664);
@@ -102,7 +102,6 @@ class X86Crosstools {
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86_64"));
- ndkPaths.addGccToolchainIncludePaths(x8664Clang, "x86_64-4.9", "x86_64-linux-android", "4.9");
stlImpl.addStlImpl(x8664Clang, "4.9");
toolchains.add(x8664Clang);
}
@@ -127,13 +126,13 @@ class X86Crosstools {
.addAllToolPath(ndkPaths.createToolpaths(
"x86-" + gccVersion, "i686-linux-android", excludedTools))
-
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ "x86-" + gccVersion, "i686-linux-android", gccVersion))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86"))
.addCompilerFlag(stackProtrectorFlag);
- 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/ArmCrosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r11/ArmCrosstools.java
index cfbf2254eb..75e452909b 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
@@ -77,7 +77,9 @@ class ArmCrosstools {
.setCompiler("gcc-4.9")
.addAllToolPath(ndkPaths.createToolpaths(toolchainName, targetPlatform))
-
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ toolchainName, targetPlatform, "4.9"))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm64"))
// Compiler flags
@@ -110,7 +112,6 @@ class ArmCrosstools {
.addCompilerFlag("-fno-omit-frame-pointer")
.addCompilerFlag("-fno-strict-aliasing"));
- ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9");
stlImpl.addStlImpl(toolchain, "4.9");
return toolchain;
}
@@ -231,6 +232,9 @@ class ArmCrosstools {
.setCompiler("gcc-4.9")
.addAllToolPath(ndkPaths.createToolpaths(toolchainName, targetPlatform, excludedTools))
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ toolchainName, targetPlatform, "4.9"))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm"))
// Compiler flags
@@ -286,7 +290,6 @@ class ArmCrosstools {
.addCompilerFlag("-fno-strict-aliasing"));
}
- ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9");
return toolchain;
}
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 29e969dc96..cdce0cf256 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
@@ -58,7 +58,9 @@ class MipsCrosstools {
"mips64el-linux-android-4.9", "mips64el-linux-android",
// mips64 toolchain doesn't have the dwp tool.
CppConfiguration.Tool.DWP))
-
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9"))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips64"));
CToolchain.Builder mips64Clang = createBaseMipsClangToolchain("mips64el")
@@ -75,8 +77,6 @@ class MipsCrosstools {
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips64"));
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;
}
@@ -102,8 +102,6 @@ class MipsCrosstools {
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips"));
- ndkPaths.addGccToolchainIncludePaths(
- mipsClang, "mipsel-linux-android-4.9", "mipsel-linux-android", "4.9");
stlImpl.addStlImpl(mipsClang, "4.9");
toolchainsListBuilder.add(mipsClang);
@@ -121,11 +119,11 @@ class MipsCrosstools {
.addAllToolPath(ndkPaths.createToolpaths(
"mipsel-linux-android-4.9", "mipsel-linux-android",
CppConfiguration.Tool.DWP))
-
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ "mipsel-linux-android-4.9", "mipsel-linux-android", "4.9"))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips"));
- ndkPaths.addGccToolchainIncludePaths(
- toolchain, "mipsel-linux-android-4.9", "mipsel-linux-android", "4.9");
stlImpl.addStlImpl(toolchain, "4.9");
return toolchain;
}
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 7efa4ad636..58bfe57bf1 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
@@ -72,12 +72,13 @@ class X86Crosstools {
.addAllToolPath(ndkPaths.createToolpaths(
"x86_64-4.9", "x86_64-linux-android"))
-
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ "x86_64-4.9", "x86_64-linux-android", "4.9"))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86_64"))
.addCompilerFlag("-fstack-protector-strong");
- ndkPaths.addGccToolchainIncludePaths(x8664, "x86_64-4.9", "x86_64-linux-android", "4.9");
stlImpl.addStlImpl(x8664, "4.9");
toolchains.add(x8664);
@@ -112,13 +113,13 @@ class X86Crosstools {
.setCompiler("gcc-4.9")
.addAllToolPath(ndkPaths.createToolpaths("x86-4.9", "i686-linux-android"))
-
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ "x86-4.9", "i686-linux-android", "4.9"))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86"))
.addCompilerFlag("-fstack-protector-strong");
- ndkPaths.addGccToolchainIncludePaths(
- toolchain, "x86-4.9", "i686-linux-android", "4.9");
stlImpl.addStlImpl(toolchain, "4.9");
return toolchain;
}
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 7bf795a171..e4c0480076 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
@@ -59,6 +59,9 @@ class ArmCrosstools {
.setTargetCpu("arm64-v8a")
.setCompiler("gcc-4.9")
.addAllToolPath(ndkPaths.createToolpaths(toolchainName, targetPlatform))
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ toolchainName, targetPlatform, "4.9.x"))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm64"))
// Compiler flags
@@ -87,7 +90,6 @@ class ArmCrosstools {
.addCompilerFlag("-O0")
.addCompilerFlag("-UNDEBUG"));
- ndkPaths.addGccToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9.x");
stlImpl.addStlImpl(toolchain, "4.9");
return toolchain;
}
@@ -177,6 +179,9 @@ class ArmCrosstools {
.setTargetSystemName(targetPlatform)
.setCompiler("gcc-4.9")
.addAllToolPath(ndkPaths.createToolpaths(toolchainName, targetPlatform))
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ toolchainName, targetPlatform, "4.9.x"))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm"))
// Compiler flags
@@ -206,7 +211,6 @@ class ArmCrosstools {
.addCompilerFlag("-O0")
.addCompilerFlag("-UNDEBUG"));
- ndkPaths.addGccToolchainIncludePaths(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 d04bfbfcb2..919244fe8c 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
@@ -60,6 +60,9 @@ class MipsCrosstools {
"mips64el-linux-android",
// mips64 toolchain doesn't have the dwp tool.
CppConfiguration.Tool.DWP))
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9.x"))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips64"));
CToolchain.Builder mips64Clang =
@@ -76,8 +79,6 @@ class MipsCrosstools {
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips64"));
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;
}
@@ -104,8 +105,6 @@ class MipsCrosstools {
CppConfiguration.Tool.GCOVTOOL))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips"));
- ndkPaths.addGccToolchainIncludePaths(
- mipsClang, "mipsel-linux-android-4.9", "mipsel-linux-android", "4.9.x");
stlImpl.addStlImpl(mipsClang, "4.9");
toolchainsListBuilder.add(mipsClang);
@@ -123,10 +122,11 @@ class MipsCrosstools {
.addAllToolPath(
ndkPaths.createToolpaths(
"mipsel-linux-android-4.9", "mipsel-linux-android", CppConfiguration.Tool.DWP))
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ "mipsel-linux-android-4.9", "mipsel-linux-android", "4.9.x"))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips"));
- ndkPaths.addGccToolchainIncludePaths(
- toolchain, "mipsel-linux-android-4.9", "mipsel-linux-android", "4.9.x");
stlImpl.addStlImpl(toolchain, "4.9");
return toolchain;
}
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 190ee56b50..650d66ac81 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
@@ -63,10 +63,12 @@ class X86Crosstools {
.setTargetCpu("x86_64")
.setCompiler("gcc-4.9")
.addAllToolPath(ndkPaths.createToolpaths("x86_64-4.9", "x86_64-linux-android"))
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ "x86_64-4.9", "x86_64-linux-android", "4.9.x"))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86_64"))
.addCompilerFlag("-fstack-protector-strong");
- ndkPaths.addGccToolchainIncludePaths(x8664, "x86_64-4.9", "x86_64-linux-android", "4.9.x");
stlImpl.addStlImpl(x8664, "4.9");
toolchains.add(x8664);
@@ -99,10 +101,12 @@ class X86Crosstools {
.setTargetCpu("x86")
.setCompiler("gcc-4.9")
.addAllToolPath(ndkPaths.createToolpaths("x86-4.9", "i686-linux-android"))
+ .addAllCxxBuiltinIncludeDirectory(
+ ndkPaths.createGccToolchainBuiltinIncludeDirectories(
+ "x86-4.9", "i686-linux-android", "4.9.x"))
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86"))
.addCompilerFlag("-fstack-protector-strong");
- ndkPaths.addGccToolchainIncludePaths(toolchain, "x86-4.9", "i686-linux-android", "4.9.x");
stlImpl.addStlImpl(toolchain, "4.9");
return toolchain;
}
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstoolsTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstoolsTest.java
index c2d85ff144..80f5bdc238 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstoolsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstoolsTest.java
@@ -186,6 +186,26 @@ public class AndroidNdkCrosstoolsTest {
}
}
+ // Regression test for b/36091573
+ @Test
+ public void testBuiltinIncludesDirectories() {
+ for (CrosstoolRelease crosstool : crosstoolReleases) {
+ for (CToolchain toolchain : crosstool.getToolchainList()) {
+ // Each toolchain has at least one built-in include directory
+ assertThat(toolchain.getCxxBuiltinIncludeDirectoryList()).isNotEmpty();
+
+ for (String flag : toolchain.getUnfilteredCxxFlagList()) {
+ // This list only contains "-isystem" and the values after "-isystem".
+ if (!flag.equals("-isystem")) {
+ // We should NOT be setting -isystem for the builtin includes directories. They are
+ // already on the search list and adding the -isystem flag just changes their priority.
+ assertThat(toolchain.getCxxBuiltinIncludeDirectoryList()).doesNotContain(flag);
+ }
+ }
+ }
+ }
+ }
+
@Test
public void testStlFilegroupPathsExist() throws Exception {