Move ToolChain::ShouldUseClangCompiler to

Driver::ShouldUseClangCompiler.
 - No functionality change.

llvm-svn: 67639
This commit is contained in:
Daniel Dunbar 2009-03-24 18:57:02 +00:00
parent 306813cbbb
commit 8fa879d39f
5 changed files with 35 additions and 34 deletions

View File

@ -77,6 +77,7 @@ public:
/// Only print tool bindings, don't build any jobs.
bool CCCPrintBindings : 1;
private:
/// Don't use clang for any tasks.
bool CCCNoClang : 1;
@ -227,6 +228,11 @@ public:
/// host triple.
const HostInfo *GetHostInfo(const char *HostTriple) const;
/// ShouldUseClangCompilar - Should the clang compiler be used to
/// handle this action.
bool ShouldUseClangCompiler(const Compilation &C, const JobAction &JA,
const std::string &ArchName) const;
/// @}
};

View File

@ -76,10 +76,6 @@ public:
llvm::sys::Path GetFilePath(const Compilation &C, const char *Name) const;
llvm::sys::Path GetProgramPath(const Compilation &C, const char *Name) const;
/// ShouldUseClangCompilar - Should the clang compiler be used to
/// handle this action.
bool ShouldUseClangCompiler(const Compilation &C, const JobAction &JA) const;
// Platform defaults information
/// IsMathErrnoDefault - Does this tool chain set -fmath-errno by

View File

@ -981,3 +981,30 @@ const HostInfo *Driver::GetHostInfo(const char *Triple) const {
return createUnknownHostInfo(*this, Arch.c_str(), Platform.c_str(),
OS.c_str());
}
bool Driver::ShouldUseClangCompiler(const Compilation &C, const JobAction &JA,
const std::string &ArchName) const {
// Check if user requested no clang, or clang doesn't understand
// this type (we only handle single inputs for now).
if (CCCNoClang || JA.size() != 1 ||
!types::isAcceptedByClang((*JA.begin())->getType()))
return false;
// Otherwise make sure this is an action clang undertands.
if (isa<PreprocessJobAction>(JA)) {
if (CCCNoClangCPP)
return false;
} else if (!isa<PrecompileJobAction>(JA) && !isa<CompileJobAction>(JA))
return false;
// Avoid CXX if the user requested.
if (CCCNoClangCXX && types::isCXX((*JA.begin())->getType()))
return false;
// Finally, don't use clang if this isn't one of the user specified
// archs to build.
if (!CCCClangArchs.empty() && !CCCClangArchs.count(ArchName))
return false;
return true;
}

View File

@ -33,31 +33,3 @@ llvm::sys::Path ToolChain::GetProgramPath(const Compilation &C,
const char *Name) const {
return Host.getDriver().GetProgramPath(Name, *this);
}
bool ToolChain::ShouldUseClangCompiler(const Compilation &C,
const JobAction &JA) const {
// Check if user requested no clang, or clang doesn't understand
// this type (we only handle single inputs for now).
if (Host.getDriver().CCCNoClang || JA.size() != 1 ||
!types::isAcceptedByClang((*JA.begin())->getType()))
return false;
// Otherwise make sure this is an action clang undertands.
if (isa<PreprocessJobAction>(JA)) {
if (Host.getDriver().CCCNoClangCPP)
return false;
} else if (!isa<PrecompileJobAction>(JA) && !isa<CompileJobAction>(JA))
return false;
// Avoid CXX if the user requested.
if (Host.getDriver().CCCNoClangCXX && types::isCXX((*JA.begin())->getType()))
return false;
// Finally, don't use clang if this isn't one of the user specified
// archs to build.
if (!Host.getDriver().CCCClangArchs.empty() &&
!Host.getDriver().CCCClangArchs.count(getArchName()))
return false;
return true;
}

View File

@ -91,7 +91,7 @@ Darwin_X86::~Darwin_X86() {
Tool &Darwin_X86::SelectTool(const Compilation &C,
const JobAction &JA) const {
Action::ActionClass Key;
if (ShouldUseClangCompiler(C, JA))
if (getHost().getDriver().ShouldUseClangCompiler(C, JA, getArchName()))
Key = Action::AnalyzeJobClass;
else
Key = JA.getKind();
@ -172,7 +172,7 @@ Generic_GCC::~Generic_GCC() {
Tool &Generic_GCC::SelectTool(const Compilation &C,
const JobAction &JA) const {
Action::ActionClass Key;
if (ShouldUseClangCompiler(C, JA))
if (getHost().getDriver().ShouldUseClangCompiler(C, JA, getArchName()))
Key = Action::AnalyzeJobClass;
else
Key = JA.getKind();