namespace clang {
namespace driver {
class ArgList;
+ class Driver;
class ToolChain;
/// HostInfo - Config information about a particular host which may
/// being run from. For testing purposes, the HostInfo used by the
/// driver may differ from the actual host.
class HostInfo {
+ const Driver &TheDriver;
std::string Arch, Platform, OS;
protected:
- HostInfo(const char *Arch, const char *Platform, const char *OS);
+ HostInfo(const Driver &D, const char *Arch,
+ const char *Platform, const char *OS);
public:
virtual ~HostInfo();
+ const Driver &getDriver() const { return TheDriver; }
const std::string &getArchName() const { return Arch; }
const std::string &getPlatformName() const { return Platform; }
const std::string &getOSName() const { return OS; }
const char *ArchName=0) const = 0;
};
-const HostInfo *createDarwinHostInfo(const char *Arch, const char *Platform,
- const char *OS);
-const HostInfo *createUnknownHostInfo(const char *Arch, const char *Platform,
- const char *OS);
+const HostInfo *createDarwinHostInfo(const Driver &D, const char *Arch,
+ const char *Platform, const char *OS);
+const HostInfo *createUnknownHostInfo(const Driver &D, const char *Arch,
+ const char *Platform, const char *OS);
} // end namespace driver
} // end namespace clang
ArgList *Args = ParseArgStrings(Start, End);
- Host = Driver::GetHostInfo(HostTriple);
+ Host = GetHostInfo(HostTriple);
DefaultToolChain = Host->getToolChain(*Args);
// FIXME: This behavior shouldn't be here.
return llvm::sys::Path(Name);
}
-const HostInfo *Driver::GetHostInfo(const char *Triple) {
+const HostInfo *Driver::GetHostInfo(const char *Triple) const {
// Dice into arch, platform, and OS. This matches
// arch,platform,os = '(.*?)-(.*?)-(.*?)'
// and missing fields are left empty.
Arch = "x86_64";
if (memcmp(&OS[0], "darwin", 6) == 0)
- return createDarwinHostInfo(Arch.c_str(), Platform.c_str(), OS.c_str());
+ return createDarwinHostInfo(*this, Arch.c_str(), Platform.c_str(),
+ OS.c_str());
- return createUnknownHostInfo(Arch.c_str(), Platform.c_str(), OS.c_str());
+ return createUnknownHostInfo(*this, Arch.c_str(), Platform.c_str(),
+ OS.c_str());
}
using namespace clang::driver;
-HostInfo::HostInfo(const char *_Arch, const char *_Platform,
+HostInfo::HostInfo(const Driver &D, const char *_Arch, const char *_Platform,
const char *_OS)
- : Arch(_Arch), Platform(_Platform), OS(_OS)
+ : TheDriver(D), Arch(_Arch), Platform(_Platform), OS(_OS)
{
}
mutable llvm::StringMap<ToolChain*> ToolChains;
public:
- DarwinHostInfo(const char *Arch, const char *Platform, const char *OS);
+ DarwinHostInfo(const Driver &D, const char *Arch,
+ const char *Platform, const char *OS);
virtual bool useDriverDriver() const;
const char *ArchName) const;
};
-DarwinHostInfo::DarwinHostInfo(const char *_Arch, const char *_Platform,
- const char *_OS)
- : HostInfo(_Arch, _Platform, _OS) {
+DarwinHostInfo::DarwinHostInfo(const Driver &D, const char *_Arch,
+ const char *_Platform, const char *_OS)
+ : HostInfo(D, _Arch, _Platform, _OS) {
assert((getArchName() == "i386" || getArchName() == "x86_64" ||
getArchName() == "ppc" || getArchName() == "ppc64") &&
mutable llvm::StringMap<ToolChain*> ToolChains;
public:
- UnknownHostInfo(const char *Arch, const char *Platform, const char *OS);
+ UnknownHostInfo(const Driver &D, const char *Arch,
+ const char *Platform, const char *OS);
virtual bool useDriverDriver() const;
const char *ArchName) const;
};
-UnknownHostInfo::UnknownHostInfo(const char *Arch, const char *Platform,
- const char *OS)
- : HostInfo(Arch, Platform, OS) {
+UnknownHostInfo::UnknownHostInfo(const Driver &D, const char *Arch,
+ const char *Platform, const char *OS)
+ : HostInfo(D, Arch, Platform, OS) {
}
bool UnknownHostInfo::useDriverDriver() const {
}
-const HostInfo *clang::driver::createDarwinHostInfo(const char *Arch,
+const HostInfo *clang::driver::createDarwinHostInfo(const Driver &D,
+ const char *Arch,
const char *Platform,
const char *OS) {
- return new DarwinHostInfo(Arch, Platform, OS);
+ return new DarwinHostInfo(D, Arch, Platform, OS);
}
-const HostInfo *clang::driver::createUnknownHostInfo(const char *Arch,
+const HostInfo *clang::driver::createUnknownHostInfo(const Driver &D,
+ const char *Arch,
const char *Platform,
const char *OS) {
- return new UnknownHostInfo(Arch, Platform, OS);
+ return new UnknownHostInfo(D, Arch, Platform, OS);
}