forked from OSchip/llvm-project
Driver: Give SelectTool access to the action inputs.
llvm-svn: 127902
This commit is contained in:
parent
5b778b2e60
commit
1e1c3ca51c
|
@ -88,8 +88,10 @@ public:
|
|||
return 0;
|
||||
}
|
||||
|
||||
/// SelectTool - Choose a tool to use to handle the action \arg JA.
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const = 0;
|
||||
/// SelectTool - Choose a tool to use to handle the action \arg JA with the
|
||||
/// given \arg Inputs.
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const = 0;
|
||||
|
||||
// Helper methods
|
||||
|
||||
|
|
|
@ -1088,7 +1088,8 @@ static const Tool &SelectToolForJob(Compilation &C, const ToolChain *TC,
|
|||
!C.getArgs().hasArg(options::OPT_save_temps) &&
|
||||
isa<AssembleJobAction>(JA) &&
|
||||
Inputs->size() == 1 && isa<CompileJobAction>(*Inputs->begin())) {
|
||||
const Tool &Compiler = TC->SelectTool(C,cast<JobAction>(**Inputs->begin()));
|
||||
const Tool &Compiler = TC->SelectTool(
|
||||
C, cast<JobAction>(**Inputs->begin()), (*Inputs)[0]->getInputs());
|
||||
if (Compiler.hasIntegratedAssembler()) {
|
||||
Inputs = &(*Inputs)[0]->getInputs();
|
||||
ToolForJob = &Compiler;
|
||||
|
@ -1097,7 +1098,7 @@ static const Tool &SelectToolForJob(Compilation &C, const ToolChain *TC,
|
|||
|
||||
// Otherwise use the tool for the current job.
|
||||
if (!ToolForJob)
|
||||
ToolForJob = &TC->SelectTool(C, *JA);
|
||||
ToolForJob = &TC->SelectTool(C, *JA, *Inputs);
|
||||
|
||||
// See if we should use an integrated preprocessor. We do so when we have
|
||||
// exactly one input, since this is the only use case we care about
|
||||
|
|
|
@ -169,7 +169,8 @@ std::string Darwin::ComputeEffectiveClangTriple(const ArgList &Args) const {
|
|||
return Triple.getTriple();
|
||||
}
|
||||
|
||||
Tool &Darwin::SelectTool(const Compilation &C, const JobAction &JA) const {
|
||||
Tool &Darwin::SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const {
|
||||
Action::ActionClass Key;
|
||||
if (getDriver().ShouldUseClangCompiler(C, JA, getTriple()))
|
||||
Key = Action::AnalyzeJobClass;
|
||||
|
@ -798,7 +799,8 @@ Generic_GCC::~Generic_GCC() {
|
|||
}
|
||||
|
||||
Tool &Generic_GCC::SelectTool(const Compilation &C,
|
||||
const JobAction &JA) const {
|
||||
const JobAction &JA,
|
||||
const ActionList &Inputs) const {
|
||||
Action::ActionClass Key;
|
||||
if (getDriver().ShouldUseClangCompiler(C, JA, getTriple()))
|
||||
Key = Action::AnalyzeJobClass;
|
||||
|
@ -886,7 +888,8 @@ const char *TCEToolChain::GetForcedPicModel() const {
|
|||
}
|
||||
|
||||
Tool &TCEToolChain::SelectTool(const Compilation &C,
|
||||
const JobAction &JA) const {
|
||||
const JobAction &JA,
|
||||
const ActionList &Inputs) const {
|
||||
Action::ActionClass Key;
|
||||
Key = Action::AnalyzeJobClass;
|
||||
|
||||
|
@ -912,7 +915,8 @@ OpenBSD::OpenBSD(const HostInfo &Host, const llvm::Triple& Triple)
|
|||
getFilePaths().push_back("/usr/lib");
|
||||
}
|
||||
|
||||
Tool &OpenBSD::SelectTool(const Compilation &C, const JobAction &JA) const {
|
||||
Tool &OpenBSD::SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const {
|
||||
Action::ActionClass Key;
|
||||
if (getDriver().ShouldUseClangCompiler(C, JA, getTriple()))
|
||||
Key = Action::AnalyzeJobClass;
|
||||
|
@ -936,7 +940,7 @@ Tool &OpenBSD::SelectTool(const Compilation &C, const JobAction &JA) const {
|
|||
case Action::LinkJobClass:
|
||||
T = new tools::openbsd::Link(*this); break;
|
||||
default:
|
||||
T = &Generic_GCC::SelectTool(C, JA);
|
||||
T = &Generic_GCC::SelectTool(C, JA, Inputs);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -962,7 +966,8 @@ FreeBSD::FreeBSD(const HostInfo &Host, const llvm::Triple& Triple)
|
|||
}
|
||||
}
|
||||
|
||||
Tool &FreeBSD::SelectTool(const Compilation &C, const JobAction &JA) const {
|
||||
Tool &FreeBSD::SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const {
|
||||
Action::ActionClass Key;
|
||||
if (getDriver().ShouldUseClangCompiler(C, JA, getTriple()))
|
||||
Key = Action::AnalyzeJobClass;
|
||||
|
@ -985,7 +990,7 @@ Tool &FreeBSD::SelectTool(const Compilation &C, const JobAction &JA) const {
|
|||
case Action::LinkJobClass:
|
||||
T = new tools::freebsd::Link(*this); break;
|
||||
default:
|
||||
T = &Generic_GCC::SelectTool(C, JA);
|
||||
T = &Generic_GCC::SelectTool(C, JA, Inputs);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1013,7 +1018,8 @@ NetBSD::NetBSD(const HostInfo &Host, const llvm::Triple& Triple)
|
|||
}
|
||||
}
|
||||
|
||||
Tool &NetBSD::SelectTool(const Compilation &C, const JobAction &JA) const {
|
||||
Tool &NetBSD::SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const {
|
||||
Action::ActionClass Key;
|
||||
if (getDriver().ShouldUseClangCompiler(C, JA, getTriple()))
|
||||
Key = Action::AnalyzeJobClass;
|
||||
|
@ -1036,7 +1042,7 @@ Tool &NetBSD::SelectTool(const Compilation &C, const JobAction &JA) const {
|
|||
case Action::LinkJobClass:
|
||||
T = new tools::netbsd::Link(*this); break;
|
||||
default:
|
||||
T = &Generic_GCC::SelectTool(C, JA);
|
||||
T = &Generic_GCC::SelectTool(C, JA, Inputs);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1053,7 +1059,8 @@ Minix::Minix(const HostInfo &Host, const llvm::Triple& Triple)
|
|||
getFilePaths().push_back("/usr/gnu/lib/gcc/i686-pc-minix/4.4.3");
|
||||
}
|
||||
|
||||
Tool &Minix::SelectTool(const Compilation &C, const JobAction &JA) const {
|
||||
Tool &Minix::SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const {
|
||||
Action::ActionClass Key;
|
||||
if (getDriver().ShouldUseClangCompiler(C, JA, getTriple()))
|
||||
Key = Action::AnalyzeJobClass;
|
||||
|
@ -1068,7 +1075,7 @@ Tool &Minix::SelectTool(const Compilation &C, const JobAction &JA) const {
|
|||
case Action::LinkJobClass:
|
||||
T = new tools::minix::Link(*this); break;
|
||||
default:
|
||||
T = &Generic_GCC::SelectTool(C, JA);
|
||||
T = &Generic_GCC::SelectTool(C, JA, Inputs);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1092,7 +1099,8 @@ AuroraUX::AuroraUX(const HostInfo &Host, const llvm::Triple& Triple)
|
|||
|
||||
}
|
||||
|
||||
Tool &AuroraUX::SelectTool(const Compilation &C, const JobAction &JA) const {
|
||||
Tool &AuroraUX::SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const {
|
||||
Action::ActionClass Key;
|
||||
if (getDriver().ShouldUseClangCompiler(C, JA, getTriple()))
|
||||
Key = Action::AnalyzeJobClass;
|
||||
|
@ -1107,7 +1115,7 @@ Tool &AuroraUX::SelectTool(const Compilation &C, const JobAction &JA) const {
|
|||
case Action::LinkJobClass:
|
||||
T = new tools::auroraux::Link(*this); break;
|
||||
default:
|
||||
T = &Generic_GCC::SelectTool(C, JA);
|
||||
T = &Generic_GCC::SelectTool(C, JA, Inputs);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1382,7 +1390,8 @@ bool Linux::HasNativeLLVMSupport() const {
|
|||
return true;
|
||||
}
|
||||
|
||||
Tool &Linux::SelectTool(const Compilation &C, const JobAction &JA) const {
|
||||
Tool &Linux::SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const {
|
||||
Action::ActionClass Key;
|
||||
if (getDriver().ShouldUseClangCompiler(C, JA, getTriple()))
|
||||
Key = Action::AnalyzeJobClass;
|
||||
|
@ -1405,7 +1414,7 @@ Tool &Linux::SelectTool(const Compilation &C, const JobAction &JA) const {
|
|||
case Action::LinkJobClass:
|
||||
T = new tools::linuxtools::Link(*this); break;
|
||||
default:
|
||||
T = &Generic_GCC::SelectTool(C, JA);
|
||||
T = &Generic_GCC::SelectTool(C, JA, Inputs);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1427,7 +1436,8 @@ DragonFly::DragonFly(const HostInfo &Host, const llvm::Triple& Triple)
|
|||
getFilePaths().push_back("/usr/lib/gcc41");
|
||||
}
|
||||
|
||||
Tool &DragonFly::SelectTool(const Compilation &C, const JobAction &JA) const {
|
||||
Tool &DragonFly::SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const {
|
||||
Action::ActionClass Key;
|
||||
if (getDriver().ShouldUseClangCompiler(C, JA, getTriple()))
|
||||
Key = Action::AnalyzeJobClass;
|
||||
|
@ -1442,7 +1452,7 @@ Tool &DragonFly::SelectTool(const Compilation &C, const JobAction &JA) const {
|
|||
case Action::LinkJobClass:
|
||||
T = new tools::dragonfly::Link(*this); break;
|
||||
default:
|
||||
T = &Generic_GCC::SelectTool(C, JA);
|
||||
T = &Generic_GCC::SelectTool(C, JA, Inputs);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1453,7 +1463,8 @@ Windows::Windows(const HostInfo &Host, const llvm::Triple& Triple)
|
|||
: ToolChain(Host, Triple) {
|
||||
}
|
||||
|
||||
Tool &Windows::SelectTool(const Compilation &C, const JobAction &JA) const {
|
||||
Tool &Windows::SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const {
|
||||
Action::ActionClass Key;
|
||||
if (getDriver().ShouldUseClangCompiler(C, JA, getTriple()))
|
||||
Key = Action::AnalyzeJobClass;
|
||||
|
|
|
@ -33,7 +33,8 @@ public:
|
|||
Generic_GCC(const HostInfo &Host, const llvm::Triple& Triple);
|
||||
~Generic_GCC();
|
||||
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const;
|
||||
|
||||
virtual bool IsUnwindTablesDefault() const;
|
||||
virtual const char *GetDefaultRelocationModel() const;
|
||||
|
@ -160,7 +161,8 @@ public:
|
|||
virtual DerivedArgList *TranslateArgs(const DerivedArgList &Args,
|
||||
const char *BoundArch) const;
|
||||
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const;
|
||||
|
||||
virtual bool IsBlocksDefault() const {
|
||||
// Always allow blocks on Darwin; users interested in versioning are
|
||||
|
@ -273,42 +275,48 @@ class LLVM_LIBRARY_VISIBILITY AuroraUX : public Generic_GCC {
|
|||
public:
|
||||
AuroraUX(const HostInfo &Host, const llvm::Triple& Triple);
|
||||
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const;
|
||||
};
|
||||
|
||||
class LLVM_LIBRARY_VISIBILITY OpenBSD : public Generic_ELF {
|
||||
public:
|
||||
OpenBSD(const HostInfo &Host, const llvm::Triple& Triple);
|
||||
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const;
|
||||
};
|
||||
|
||||
class LLVM_LIBRARY_VISIBILITY FreeBSD : public Generic_ELF {
|
||||
public:
|
||||
FreeBSD(const HostInfo &Host, const llvm::Triple& Triple);
|
||||
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const;
|
||||
};
|
||||
|
||||
class LLVM_LIBRARY_VISIBILITY NetBSD : public Generic_ELF {
|
||||
public:
|
||||
NetBSD(const HostInfo &Host, const llvm::Triple& Triple);
|
||||
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const;
|
||||
};
|
||||
|
||||
class LLVM_LIBRARY_VISIBILITY Minix : public Generic_GCC {
|
||||
public:
|
||||
Minix(const HostInfo &Host, const llvm::Triple& Triple);
|
||||
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const;
|
||||
};
|
||||
|
||||
class LLVM_LIBRARY_VISIBILITY DragonFly : public Generic_ELF {
|
||||
public:
|
||||
DragonFly(const HostInfo &Host, const llvm::Triple& Triple);
|
||||
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const;
|
||||
};
|
||||
|
||||
class LLVM_LIBRARY_VISIBILITY Linux : public Generic_ELF {
|
||||
|
@ -317,7 +325,8 @@ public:
|
|||
|
||||
virtual bool HasNativeLLVMSupport() const;
|
||||
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const;
|
||||
|
||||
std::string Linker;
|
||||
std::vector<std::string> ExtraOpts;
|
||||
|
@ -331,7 +340,8 @@ public:
|
|||
TCEToolChain(const HostInfo &Host, const llvm::Triple& Triple);
|
||||
~TCEToolChain();
|
||||
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const;
|
||||
bool IsMathErrnoDefault() const;
|
||||
bool IsUnwindTablesDefault() const;
|
||||
const char* GetDefaultRelocationModel() const;
|
||||
|
@ -348,7 +358,8 @@ class LLVM_LIBRARY_VISIBILITY Windows : public ToolChain {
|
|||
public:
|
||||
Windows(const HostInfo &Host, const llvm::Triple& Triple);
|
||||
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA,
|
||||
const ActionList &Inputs) const;
|
||||
|
||||
virtual bool IsIntegratedAssemblerDefault() const;
|
||||
virtual bool IsUnwindTablesDefault() const;
|
||||
|
|
Loading…
Reference in New Issue