/// Only print tool bindings, don't build any jobs.
bool CCCPrintBindings : 1;
+private:
/// Don't use clang for any tasks.
bool CCCNoClang : 1;
/// 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;
+
/// @}
};
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
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;
+}
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;
-}
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();
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();