diff options
| author | Dan Albert <danalbert@google.com> | 2018-04-04 21:28:34 +0000 |
|---|---|---|
| committer | Dan Albert <danalbert@google.com> | 2018-04-04 21:28:34 +0000 |
| commit | e00799ea04406d69195cf6592abcb348b7ee3ae0 (patch) | |
| tree | bfcdbb0a8c1a4de0947b19143ba58cf903f6ef3c /clang/lib | |
| parent | 5a9529f4a2991c3b1cd8c9a4d248cd0fbfdbdbec (diff) | |
| download | bcm5719-llvm-e00799ea04406d69195cf6592abcb348b7ee3ae0.tar.gz bcm5719-llvm-e00799ea04406d69195cf6592abcb348b7ee3ae0.zip | |
[Driver] Include the Android multiarch includes.
Summary:
Most Android headers live in a single directory, but a small handful
live in multiarch directories.
Reviewers: srhines
Reviewed By: srhines
Subscribers: javed.absar, cfe-commits
Differential Revision: https://reviews.llvm.org/D44995
llvm-svn: 329234
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Driver/ToolChains/Linux.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp index aa9fefc5c75..ca90b3dbd5b 100644 --- a/clang/lib/Driver/ToolChains/Linux.cpp +++ b/clang/lib/Driver/ToolChains/Linux.cpp @@ -42,6 +42,7 @@ static std::string getMultiarchTriple(const Driver &D, StringRef SysRoot) { llvm::Triple::EnvironmentType TargetEnvironment = TargetTriple.getEnvironment(); + bool IsAndroid = TargetTriple.isAndroid(); // For most architectures, just use whatever we have rather than trying to be // clever. @@ -55,7 +56,9 @@ static std::string getMultiarchTriple(const Driver &D, // regardless of what the actual target triple is. case llvm::Triple::arm: case llvm::Triple::thumb: - if (TargetEnvironment == llvm::Triple::GNUEABIHF) { + if (IsAndroid) { + return "arm-linux-androideabi"; + } else if (TargetEnvironment == llvm::Triple::GNUEABIHF) { if (D.getVFS().exists(SysRoot + "/lib/arm-linux-gnueabihf")) return "arm-linux-gnueabihf"; } else { @@ -74,16 +77,22 @@ static std::string getMultiarchTriple(const Driver &D, } break; case llvm::Triple::x86: + if (IsAndroid) + return "i686-linux-android"; if (D.getVFS().exists(SysRoot + "/lib/i386-linux-gnu")) return "i386-linux-gnu"; break; case llvm::Triple::x86_64: + if (IsAndroid) + return "x86_64-linux-android"; // We don't want this for x32, otherwise it will match x86_64 libs if (TargetEnvironment != llvm::Triple::GNUX32 && D.getVFS().exists(SysRoot + "/lib/x86_64-linux-gnu")) return "x86_64-linux-gnu"; break; case llvm::Triple::aarch64: + if (IsAndroid) + return "aarch64-linux-android"; if (D.getVFS().exists(SysRoot + "/lib/aarch64-linux-gnu")) return "aarch64-linux-gnu"; break; @@ -96,6 +105,8 @@ static std::string getMultiarchTriple(const Driver &D, return "mips-linux-gnu"; break; case llvm::Triple::mipsel: + if (IsAndroid) + return "mipsel-linux-android"; if (D.getVFS().exists(SysRoot + "/lib/mipsel-linux-gnu")) return "mipsel-linux-gnu"; break; @@ -106,6 +117,8 @@ static std::string getMultiarchTriple(const Driver &D, return "mips64-linux-gnuabi64"; break; case llvm::Triple::mips64el: + if (IsAndroid) + return "mips64el-linux-android"; if (D.getVFS().exists(SysRoot + "/lib/mips64el-linux-gnu")) return "mips64el-linux-gnu"; if (D.getVFS().exists(SysRoot + "/lib/mips64el-linux-gnuabi64")) @@ -717,6 +730,14 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs, default: break; } + + const std::string AndroidMultiarchIncludeDir = + std::string("/usr/include/") + + getMultiarchTriple(D, getTriple(), SysRoot); + const StringRef AndroidMultiarchIncludeDirs[] = {AndroidMultiarchIncludeDir}; + if (getTriple().isAndroid()) + MultiarchIncludeDirs = AndroidMultiarchIncludeDirs; + for (StringRef Dir : MultiarchIncludeDirs) { if (D.getVFS().exists(SysRoot + Dir)) { addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + Dir); |

