blob: 1f81af0b7ff09d0f31a5274d3e6d2611db7ea862 [file] [log] [blame]
From 916572e1243633ddf913c8f32771a3a7f70fd853 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
Date: Fri, 5 Sep 2014 16:49:35 +0200
Subject: [PATCH] Support obtaining active toolchain from gcc-config.
---
tools/clang/lib/Driver/ToolChains.cpp | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/tools/clang/lib/Driver/ToolChains.cpp b/tools/clang/lib/Driver/ToolChains.cpp
index b46f69d..2d4374d 100644
--- a/tools/clang/lib/Driver/ToolChains.cpp
+++ b/tools/clang/lib/Driver/ToolChains.cpp
@@ -1253,6 +1253,25 @@ Generic_GCC::GCCInstallationDetector::init(
Prefixes.push_back("/usr");
}
+ for (unsigned k = 0, ke = CandidateTripleAliases.size(); k < ke; ++k) {
+ llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> File =
+ llvm::MemoryBuffer::getFile(D.SysRoot + "/etc/env.d/gcc/config-" + CandidateTripleAliases[k].str());
+ if (File)
+ {
+ const std::string VersionText = File.get()->getBuffer().rsplit('-').second.substr(0,5).str();
+ const std::string GentooPath = D.SysRoot + "/usr/lib/gcc/" + CandidateTripleAliases[k].str() + "/" + VersionText;
+ if (llvm::sys::fs::exists(GentooPath + "/crtbegin.o"))
+ {
+ Version = GCCVersion::Parse(VersionText);
+ GCCInstallPath = GentooPath;
+ GCCParentLibPath = GCCInstallPath + "/../../..";
+ GCCTriple.setTriple(CandidateTripleAliases[k]);
+ IsValid = true;
+ return;
+ }
+ }
+ }
+
// Loop over the various components which exist and select the best GCC
// installation available. GCC installs are ranked by version number.
Version = GCCVersion::Parse("0.0.0");
--
2.1.0