diff options
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 { |