[Driver] Infer Android sysroot location.
authorDan Albert <danalbert@google.com>
Wed, 2 May 2018 19:38:37 +0000 (19:38 +0000)
committerDan Albert <danalbert@google.com>
Wed, 2 May 2018 19:38:37 +0000 (19:38 +0000)
Summary:
Android toolchains include their headers and libraries in a
self-contained directory within the toolchain.

Reviewers: srhines

Reviewed By: srhines

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D45291

llvm-svn: 331390

clang/lib/Driver/ToolChains/Linux.cpp

index 5dca5ff..8fb595e 100644 (file)
@@ -429,6 +429,15 @@ std::string Linux::computeSysRoot() const {
   if (!getDriver().SysRoot.empty())
     return getDriver().SysRoot;
 
+  if (getTriple().isAndroid()) {
+    // Android toolchains typically include a sysroot at ../sysroot relative to
+    // the clang binary.
+    const StringRef ClangDir = getDriver().getInstalledDir();
+    std::string AndroidSysRootPath = (ClangDir + "/../sysroot").str();
+    if (getVFS().exists(AndroidSysRootPath))
+      return AndroidSysRootPath;
+  }
+
   if (!GCCInstallation.isValid() || !tools::isMipsArch(getTriple().getArch()))
     return std::string();