diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/Driver/Tools.h')
-rw-r--r-- | contrib/llvm/tools/clang/lib/Driver/Tools.h | 97 |
1 files changed, 88 insertions, 9 deletions
diff --git a/contrib/llvm/tools/clang/lib/Driver/Tools.h b/contrib/llvm/tools/clang/lib/Driver/Tools.h index a4f732e..651a8f2 100644 --- a/contrib/llvm/tools/clang/lib/Driver/Tools.h +++ b/contrib/llvm/tools/clang/lib/Driver/Tools.h @@ -29,7 +29,8 @@ namespace tools { /// \brief Clang compiler tool. class LLVM_LIBRARY_VISIBILITY Clang : public Tool { - void AddPreprocessingOptions(const Driver &D, + void AddPreprocessingOptions(Compilation &C, + const Driver &D, const ArgList &Args, ArgStringList &CmdArgs, const InputInfo &Output, @@ -40,6 +41,7 @@ namespace tools { void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; + void AddHexagonTargetArgs (const ArgList &Args, ArgStringList &CmdArgs) const; public: Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {} @@ -57,6 +59,7 @@ namespace tools { /// \brief Clang integrated assembler tool. class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool { + void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; public: ClangAs(const ToolChain &TC) : Tool("clang::as", "clang integrated assembler", TC) {} @@ -145,14 +148,54 @@ namespace gcc { "linker (via gcc)", TC) {} virtual bool hasIntegratedCPP() const { return false; } + virtual bool isLinkJob() const { return true; } virtual void RenderExtraToolArgs(const JobAction &JA, ArgStringList &CmdArgs) const; }; } // end namespace gcc +namespace hexagon { + // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile. + // We simply use "clang -cc1" for those actions. + class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { + public: + Assemble(const ToolChain &TC) : Tool("hexagon::Assemble", + "hexagon-as", TC) {} + + virtual bool hasIntegratedCPP() const { return false; } + + virtual void RenderExtraToolArgs(const JobAction &JA, + ArgStringList &CmdArgs) const; + virtual void ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &TCArgs, + const char *LinkingOutput) const; + }; + + class LLVM_LIBRARY_VISIBILITY Link : public Tool { + public: + Link(const ToolChain &TC) : Tool("hexagon::Link", + "hexagon-ld", TC) {} + + virtual bool hasIntegratedCPP() const { return false; } + virtual bool isLinkJob() const { return true; } + + virtual void RenderExtraToolArgs(const JobAction &JA, + ArgStringList &CmdArgs) const; + virtual void ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &TCArgs, + const char *LinkingOutput) const; + }; +} // end namespace hexagon. + + namespace darwin { class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool { + virtual void anchor(); protected: void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const; @@ -166,6 +209,7 @@ namespace darwin { }; class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool { + virtual void anchor(); public: static const char *getBaseInputName(const ArgList &Args, const InputInfoList &Input); @@ -243,6 +287,7 @@ namespace darwin { Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {} virtual bool hasIntegratedCPP() const { return false; } + virtual bool isLinkJob() const { return true; } virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, @@ -314,6 +359,7 @@ namespace openbsd { Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {} virtual bool hasIntegratedCPP() const { return false; } + virtual bool isLinkJob() const { return true; } virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, @@ -343,6 +389,7 @@ namespace freebsd { Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {} virtual bool hasIntegratedCPP() const { return false; } + virtual bool isLinkJob() const { return true; } virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, @@ -355,12 +402,10 @@ namespace freebsd { /// netbsd -- Directly call GNU Binutils assembler and linker namespace netbsd { class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { - private: - const llvm::Triple ToolTriple; public: - Assemble(const ToolChain &TC, const llvm::Triple &ToolTriple) - : Tool("netbsd::Assemble", "assembler", TC), ToolTriple(ToolTriple) {} + Assemble(const ToolChain &TC) + : Tool("netbsd::Assemble", "assembler", TC) {} virtual bool hasIntegratedCPP() const { return false; } @@ -371,14 +416,13 @@ namespace netbsd { const char *LinkingOutput) const; }; class LLVM_LIBRARY_VISIBILITY Link : public Tool { - private: - const llvm::Triple ToolTriple; public: - Link(const ToolChain &TC, const llvm::Triple &ToolTriple) - : Tool("netbsd::Link", "linker", TC), ToolTriple(ToolTriple) {} + Link(const ToolChain &TC) + : Tool("netbsd::Link", "linker", TC) {} virtual bool hasIntegratedCPP() const { return false; } + virtual bool isLinkJob() const { return true; } virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, @@ -408,6 +452,7 @@ namespace linuxtools { Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {} virtual bool hasIntegratedCPP() const { return false; } + virtual bool isLinkJob() const { return true; } virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, @@ -436,6 +481,7 @@ namespace minix { Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {} virtual bool hasIntegratedCPP() const { return false; } + virtual bool isLinkJob() const { return true; } virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, @@ -445,6 +491,36 @@ namespace minix { }; } // end namespace minix + /// solaris -- Directly call Solaris assembler and linker +namespace solaris { + class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { + public: + Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler", + TC) {} + + virtual bool hasIntegratedCPP() const { return false; } + + virtual void ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &TCArgs, + const char *LinkingOutput) const; + }; + class LLVM_LIBRARY_VISIBILITY Link : public Tool { + public: + Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {} + + virtual bool hasIntegratedCPP() const { return false; } + virtual bool isLinkJob() const { return true; } + + virtual void ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &TCArgs, + const char *LinkingOutput) const; + }; +} // end namespace solaris + /// auroraux -- Directly call GNU Binutils assembler and linker namespace auroraux { class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { @@ -465,6 +541,7 @@ namespace auroraux { Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {} virtual bool hasIntegratedCPP() const { return false; } + virtual bool isLinkJob() const { return true; } virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, @@ -494,6 +571,7 @@ namespace dragonfly { Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {} virtual bool hasIntegratedCPP() const { return false; } + virtual bool isLinkJob() const { return true; } virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, @@ -510,6 +588,7 @@ namespace visualstudio { Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {} virtual bool hasIntegratedCPP() const { return false; } + virtual bool isLinkJob() const { return true; } virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, |