diff options
author | 2015-10-28 15:35:04 +0000 | |
---|---|---|
committer | 2015-10-28 16:05:45 +0000 | |
commit | de332aeb49802b66a9bd855c864a25ee84394c96 (patch) | |
tree | 1f6b3af2f61b0c888ceb6a5f7ffe424c58170449 | |
parent | 7a833f4db68dc85c9efb7c9126a3ecb3a614fd74 (diff) |
Adds include paths through -isystem to get Android native compiling working again on OS X.
--
MOS_MIGRATED_REVID=106498988
4 files changed, 59 insertions, 61 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ArmCrosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ArmCrosstools.java index 161d8c9b40..49391d4af9 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ArmCrosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ArmCrosstools.java @@ -19,7 +19,6 @@ import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain; import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationMode; import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags; -import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath; import java.util.List; @@ -94,9 +93,6 @@ class ArmCrosstools { .addAllToolPath(ndkPaths.createToolpaths(toolchainName, targetPlatform)) - .addAllCxxBuiltinIncludeDirectory(ndkPaths.createToolchainIncludePaths( - toolchainName, targetPlatform, "4.9")) - .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm64")) // Compiler flags @@ -128,6 +124,7 @@ 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; } @@ -147,9 +144,6 @@ class ArmCrosstools { .addAllToolPath(ndkPaths.createClangToolpaths(toolchainName, targetPlatform, clangVersion)) - .addAllCxxBuiltinIncludeDirectory(ndkPaths.createToolchainIncludePaths( - toolchainName, targetPlatform, "4.9")) - .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm64")) // Compiler flags @@ -189,6 +183,7 @@ 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; } @@ -250,22 +245,11 @@ class ArmCrosstools { String toolchainName = "arm-linux-androideabi-" + gccVersion; String targetPlatform = "arm-linux-androideabi"; - ImmutableList<ToolPath> toolPaths = ndkPaths.createToolpaths( - toolchainName, - targetPlatform, - excludedTools); - - ImmutableList<String> toolchainIncludes = ndkPaths.createToolchainIncludePaths( - toolchainName, - targetPlatform, - gccVersion); - - CToolchain.Builder builder = CToolchain.newBuilder() + CToolchain.Builder toolchain = CToolchain.newBuilder() .setTargetSystemName(targetPlatform) .setCompiler("gcc-" + gccVersion) - .addAllToolPath(toolPaths) - .addAllCxxBuiltinIncludeDirectory(toolchainIncludes) + .addAllToolPath(ndkPaths.createToolpaths(toolchainName, targetPlatform, excludedTools)) .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm")) .addCompilerFlag(stackProtectorFlag) @@ -280,7 +264,7 @@ class ArmCrosstools { .addLinkerFlag("-no-canonical-prefixes"); if (thumb) { - builder.addCompilationModeFlags(CompilationModeFlags.newBuilder() + toolchain.addCompilationModeFlags(CompilationModeFlags.newBuilder() .setMode(CompilationMode.OPT) .addCompilerFlag("-mthumb") .addCompilerFlag("-Os") @@ -290,7 +274,7 @@ class ArmCrosstools { .addCompilerFlag("-fno-strict-aliasing") .addCompilerFlag("-finline-limit=64")); - builder.addCompilationModeFlags(CompilationModeFlags.newBuilder() + toolchain.addCompilationModeFlags(CompilationModeFlags.newBuilder() .setMode(CompilationMode.DBG) .addCompilerFlag("-g") .addCompilerFlag("-fno-strict-aliasing") @@ -300,7 +284,7 @@ class ArmCrosstools { .addCompilerFlag("-marm") .addCompilerFlag("-fno-omit-frame-pointer")); } else { - builder.addCompilationModeFlags(CompilationModeFlags.newBuilder() + toolchain.addCompilationModeFlags(CompilationModeFlags.newBuilder() .setMode(CompilationMode.OPT) .addCompilerFlag("-O2") .addCompilerFlag("-g") @@ -310,7 +294,7 @@ class ArmCrosstools { .addCompilerFlag("-funswitch-loops") .addCompilerFlag("-finline-limit=300")); - builder.addCompilationModeFlags(CompilationModeFlags.newBuilder() + toolchain.addCompilationModeFlags(CompilationModeFlags.newBuilder() .setMode(CompilationMode.DBG) .addCompilerFlag("-g") .addCompilerFlag("-funswitch-loops") @@ -321,7 +305,8 @@ class ArmCrosstools { .addCompilerFlag("-fno-strict-aliasing")); } - return builder; + ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, gccVersion); + return toolchain; } private List<CToolchain.Builder> createArmeabiClangToolchain(String clangVersion, boolean thumb) { @@ -386,7 +371,7 @@ class ArmCrosstools { String targetPlatform = "arm-linux-androideabi"; String gccToolchain = ndkPaths.createGccToolchainPath("arm-linux-androideabi-4.8"); - CToolchain.Builder builder = CToolchain.newBuilder() + CToolchain.Builder toolchain = CToolchain.newBuilder() .setTargetSystemName("arm-linux-androideabi") .setCompiler("clang" + clangVersion) @@ -397,9 +382,6 @@ class ArmCrosstools { // gcc-4.8 arm doesn't have gcov-tool CppConfiguration.Tool.GCOVTOOL)) - .addAllCxxBuiltinIncludeDirectory(ndkPaths.createToolchainIncludePaths( - toolchainName, targetPlatform, "4.8")) - .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("arm")) // Compiler flags @@ -420,7 +402,7 @@ class ArmCrosstools { .addLinkerFlag("-no-canonical-prefixes"); if (thumb) { - builder.addCompilationModeFlags(CompilationModeFlags.newBuilder() + toolchain.addCompilationModeFlags(CompilationModeFlags.newBuilder() .setMode(CompilationMode.OPT) .addCompilerFlag("-mthumb") .addCompilerFlag("-Os") @@ -429,7 +411,7 @@ class ArmCrosstools { .addCompilerFlag("-fomit-frame-pointer") .addCompilerFlag("-fno-strict-aliasing")); - builder.addCompilationModeFlags(CompilationModeFlags.newBuilder() + toolchain.addCompilationModeFlags(CompilationModeFlags.newBuilder() .setMode(CompilationMode.DBG) .addCompilerFlag("-g") .addCompilerFlag("-fno-strict-aliasing") @@ -438,7 +420,7 @@ class ArmCrosstools { .addCompilerFlag("-marm") .addCompilerFlag("-fno-omit-frame-pointer")); } else { - builder.addCompilationModeFlags(CompilationModeFlags.newBuilder() + toolchain.addCompilationModeFlags(CompilationModeFlags.newBuilder() .setMode(CompilationMode.OPT) .addCompilerFlag("-O2") .addCompilerFlag("-g") @@ -446,7 +428,7 @@ class ArmCrosstools { .addCompilerFlag("-fomit-frame-pointer") .addCompilerFlag("-fstrict-aliasing")); - builder.addCompilationModeFlags(CompilationModeFlags.newBuilder() + toolchain.addCompilationModeFlags(CompilationModeFlags.newBuilder() .setMode(CompilationMode.DBG) .addCompilerFlag("-g") .addCompilerFlag("-O0") @@ -454,8 +436,9 @@ class ArmCrosstools { .addCompilerFlag("-fno-omit-frame-pointer") .addCompilerFlag("-fno-strict-aliasing")); } - - return builder; + + ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.8"); + return toolchain; } private static String createArmeabiName(String base, String gccVersion, boolean thumb) { diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/MipsCrosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/MipsCrosstools.java index 0692e76eb0..e133ec3333 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/MipsCrosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/MipsCrosstools.java @@ -61,9 +61,6 @@ class MipsCrosstools { // mips64 toolchain doesn't have the dwp tool. CppConfiguration.Tool.DWP)) - .addAllCxxBuiltinIncludeDirectory(ndkPaths.createToolchainIncludePaths( - "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 @@ -79,13 +76,12 @@ class MipsCrosstools { "mips64el-linux-android-4.9", "mips64el-linux-android", clangVersion, CppConfiguration.Tool.DWP)) - .addAllCxxBuiltinIncludeDirectory(ndkPaths.createToolchainIncludePaths( - "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9")) - .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips64"))); } List<CToolchain.Builder> toolchains = toolchainsListBuilder.build(); + ndkPaths.addToolchainIncludePaths( + toolchains, "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9"); stlImpl.addStlImpl(toolchains, "4.9"); return toolchains; } @@ -115,11 +111,10 @@ class MipsCrosstools { "mipsel-linux-android-4.8", "mipsel-linux-android", clangVersion, CppConfiguration.Tool.DWP, CppConfiguration.Tool.GCOVTOOL)) - .addAllCxxBuiltinIncludeDirectory(ndkPaths.createToolchainIncludePaths( - "mipsel-linux-android-4.8", "mipsel-linux-android", "4.8")) - .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips")); + ndkPaths.addToolchainIncludePaths( + mipsClang, "mipsel-linux-android-4.8", "mipsel-linux-android", "4.8"); stlImpl.addStlImpl(mipsClang, "4.8"); toolchainsListBuilder.add(mipsClang); } @@ -140,11 +135,10 @@ class MipsCrosstools { "mipsel-linux-android-" + gccVersion, "mipsel-linux-android", excludedTools)) - .addAllCxxBuiltinIncludeDirectory(ndkPaths.createToolchainIncludePaths( - "mipsel-linux-android-" + gccVersion, "mipsel-linux-android", gccVersion)) - .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips")); + ndkPaths.addToolchainIncludePaths( + 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/NdkPaths.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/NdkPaths.java index 6166ccdc8f..3e43dde1a5 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 @@ -17,6 +17,7 @@ package com.google.devtools.build.lib.bazel.rules.android.ndkcrosstools; import com.google.common.collect.ImmutableList; 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; @@ -116,7 +117,34 @@ public class NdkPaths { .replace("%hostPlatform%", hostPlatform); } - ImmutableList<String> createToolchainIncludePaths( + void addToolchainIncludePaths( + List<CToolchain.Builder> toolchains, + String toolchainName, + String targetPlatform, + String gccVersion) { + + for (CToolchain.Builder toolchain : toolchains) { + addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, gccVersion); + } + } + + void addToolchainIncludePaths( + 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); + } + } + + private ImmutableList<String> createToolchainIncludePaths( String toolchainName, String targetPlatform, String gccVersion) { ImmutableList.Builder<String> includePaths = ImmutableList.builder(); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/X86Crosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/X86Crosstools.java index 6920d32b96..96807f3264 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/X86Crosstools.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/X86Crosstools.java @@ -60,11 +60,9 @@ class X86Crosstools { // gcc-4.8 x86 toolchain doesn't have gcov-tool. CppConfiguration.Tool.GCOVTOOL)) - .addAllCxxBuiltinIncludeDirectory(ndkPaths.createToolchainIncludePaths( - "x86-4.8", "i686-linux-android", "4.8")) - .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86")); + ndkPaths.addToolchainIncludePaths(x86Clang, "x86-4.8", "i686-linux-android", "4.8"); stlImpl.addStlImpl(x86Clang, "4.8"); toolchains.add(x86Clang); } @@ -81,13 +79,11 @@ class X86Crosstools { .addAllToolPath(ndkPaths.createToolpaths( "x86_64-4.9", "x86_64-linux-android")) - .addAllCxxBuiltinIncludeDirectory(ndkPaths.createToolchainIncludePaths( - "x86_64-4.9", "x86_64-linux-android", "4.9")) - .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86_64")) .addCompilerFlag("-fstack-protector-strong"); + ndkPaths.addToolchainIncludePaths(x8664, "x86_64-4.9", "x86_64-linux-android", "4.9"); stlImpl.addStlImpl(x8664, "4.9"); toolchains.add(x8664); @@ -102,11 +98,9 @@ class X86Crosstools { .addAllToolPath(ndkPaths.createClangToolpaths( "x86_64-4.9", "x86_64-linux-android", clangVersion)) - .addAllCxxBuiltinIncludeDirectory(ndkPaths.createToolchainIncludePaths( - "x86_64-4.9", "x86_64-linux-android", "4.9")) - .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); } @@ -131,14 +125,13 @@ class X86Crosstools { .addAllToolPath(ndkPaths.createToolpaths( "x86-" + gccVersion, "i686-linux-android", excludedTools)) - - .addAllCxxBuiltinIncludeDirectory(ndkPaths.createToolchainIncludePaths( - "x86-" + gccVersion, "i686-linux-android", gccVersion)) - + .setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86")) .addCompilerFlag(stackProtrectorFlag); + ndkPaths.addToolchainIncludePaths( + toolchain, "x86-" + gccVersion, "i686-linux-android", gccVersion); stlImpl.addStlImpl(toolchain, gccVersion); return toolchain; } |