From e504952bc89f79fc9ff54d5641ab30bb07ec435e Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Tue, 17 Mar 2009 20:45:45 +0000 Subject: [PATCH] Driver: Pass Driver reference down into Host info, which will need it to pass to ToolChains, which may need Driver specific information (for example, to form search paths). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67102 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Driver/Driver.h | 2 +- include/clang/Driver/HostInfo.h | 14 +++++++++----- lib/Driver/Driver.cpp | 10 ++++++---- lib/Driver/HostInfo.cpp | 32 ++++++++++++++++++-------------- 4 files changed, 34 insertions(+), 24 deletions(-) diff --git a/include/clang/Driver/Driver.h b/include/clang/Driver/Driver.h index bf95325757..b0e6976ea7 100644 --- a/include/clang/Driver/Driver.h +++ b/include/clang/Driver/Driver.h @@ -220,7 +220,7 @@ public: /// GetHostInfo - Construct a new host info object for the given /// host triple. - static const HostInfo *GetHostInfo(const char *HostTriple); + const HostInfo *GetHostInfo(const char *HostTriple) const; /// @} }; diff --git a/include/clang/Driver/HostInfo.h b/include/clang/Driver/HostInfo.h index dfa3f75f89..10ad2f9fe9 100644 --- a/include/clang/Driver/HostInfo.h +++ b/include/clang/Driver/HostInfo.h @@ -15,6 +15,7 @@ namespace clang { namespace driver { class ArgList; + class Driver; class ToolChain; /// HostInfo - Config information about a particular host which may @@ -25,14 +26,17 @@ namespace driver { /// 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; } @@ -56,10 +60,10 @@ public: 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 diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index 0da441f152..e809487466 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -154,7 +154,7 @@ Compilation *Driver::BuildCompilation(int argc, const char **argv) { ArgList *Args = ParseArgStrings(Start, End); - Host = Driver::GetHostInfo(HostTriple); + Host = GetHostInfo(HostTriple); DefaultToolChain = Host->getToolChain(*Args); // FIXME: This behavior shouldn't be here. @@ -816,7 +816,7 @@ llvm::sys::Path Driver::GetProgramPath(const char *Name, 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. @@ -842,7 +842,9 @@ const HostInfo *Driver::GetHostInfo(const char *Triple) { 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()); } diff --git a/lib/Driver/HostInfo.cpp b/lib/Driver/HostInfo.cpp index 5069bda3ed..9e8213876c 100644 --- a/lib/Driver/HostInfo.cpp +++ b/lib/Driver/HostInfo.cpp @@ -21,9 +21,9 @@ 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) { } @@ -47,7 +47,8 @@ class DarwinHostInfo : public HostInfo { mutable llvm::StringMap 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; @@ -55,9 +56,9 @@ public: 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") && @@ -118,7 +119,8 @@ class UnknownHostInfo : public HostInfo { mutable llvm::StringMap 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; @@ -126,9 +128,9 @@ public: 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 { @@ -161,14 +163,16 @@ ToolChain *UnknownHostInfo::getToolChain(const ArgList &Args, } -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); } -- 2.40.0