diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/Driver/Tools.h')
-rw-r--r-- | contrib/llvm/tools/clang/lib/Driver/Tools.h | 188 |
1 files changed, 128 insertions, 60 deletions
diff --git a/contrib/llvm/tools/clang/lib/Driver/Tools.h b/contrib/llvm/tools/clang/lib/Driver/Tools.h index d647171..d5b2848 100644 --- a/contrib/llvm/tools/clang/lib/Driver/Tools.h +++ b/contrib/llvm/tools/clang/lib/Driver/Tools.h @@ -14,12 +14,14 @@ #include "clang/Driver/Types.h" #include "clang/Driver/Util.h" #include "llvm/ADT/Triple.h" +#include "llvm/Option/Option.h" #include "llvm/Support/Compiler.h" namespace clang { class ObjCRuntime; namespace driver { + class Command; class Driver; namespace toolchains { @@ -27,40 +29,53 @@ namespace toolchains { } namespace tools { +using llvm::opt::ArgStringList; /// \brief Clang compiler tool. class LLVM_LIBRARY_VISIBILITY Clang : public Tool { public: - static const char *getBaseInputName(const ArgList &Args, + static const char *getBaseInputName(const llvm::opt::ArgList &Args, const InputInfoList &Inputs); - static const char *getBaseInputStem(const ArgList &Args, + static const char *getBaseInputStem(const llvm::opt::ArgList &Args, const InputInfoList &Inputs); - static const char *getDependencyFileName(const ArgList &Args, + static const char *getDependencyFileName(const llvm::opt::ArgList &Args, const InputInfoList &Inputs); private: - void AddPreprocessingOptions(Compilation &C, - const JobAction &JA, + void AddPreprocessingOptions(Compilation &C, const JobAction &JA, const Driver &D, - const ArgList &Args, - ArgStringList &CmdArgs, + const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs, const InputInfo &Output, const InputInfoList &Inputs) const; - void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs, + void AddAArch64TargetArgs(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs) const; + void AddARMTargetArgs(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs, bool KernelOrKext) const; - void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; - void AddPPCTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; - void AddR600TargetArgs(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; + void AddMIPSTargetArgs(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs) const; + void AddR600TargetArgs(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs) const; + void AddSparcTargetArgs(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs) const; + void AddSystemZTargetArgs(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs) const; + void AddX86TargetArgs(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs) const; + void AddHexagonTargetArgs(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs) const; enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile }; - ObjCRuntime AddObjCRuntimeArgs(const ArgList &args, ArgStringList &cmdArgs, + ObjCRuntime AddObjCRuntimeArgs(const llvm::opt::ArgList &args, + llvm::opt::ArgStringList &cmdArgs, RewriteKind rewrite) const; + void AddClangCLArgs(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs) const; + public: Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {} @@ -71,14 +86,12 @@ namespace tools { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; /// \brief Clang integrated assembler tool. class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool { - void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; - void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; public: ClangAs(const ToolChain &TC) : Tool("clang::as", "clang integrated assembler", TC) {} @@ -90,7 +103,7 @@ namespace tools { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; @@ -104,16 +117,16 @@ namespace gcc { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; /// RenderExtraToolArgs - Render any arguments necessary to force /// the particular tool mode. - virtual void RenderExtraToolArgs(const JobAction &JA, - ArgStringList &CmdArgs) const = 0; + virtual void + RenderExtraToolArgs(const JobAction &JA, + llvm::opt::ArgStringList &CmdArgs) const = 0; }; - class LLVM_LIBRARY_VISIBILITY Preprocess : public Common { public: Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", @@ -123,7 +136,7 @@ namespace gcc { virtual bool hasIntegratedCPP() const { return false; } virtual void RenderExtraToolArgs(const JobAction &JA, - ArgStringList &CmdArgs) const; + llvm::opt::ArgStringList &CmdArgs) const; }; class LLVM_LIBRARY_VISIBILITY Precompile : public Common { @@ -135,7 +148,7 @@ namespace gcc { virtual bool hasIntegratedCPP() const { return true; } virtual void RenderExtraToolArgs(const JobAction &JA, - ArgStringList &CmdArgs) const; + llvm::opt::ArgStringList &CmdArgs) const; }; class LLVM_LIBRARY_VISIBILITY Compile : public Common { @@ -147,7 +160,7 @@ namespace gcc { virtual bool hasIntegratedCPP() const { return true; } virtual void RenderExtraToolArgs(const JobAction &JA, - ArgStringList &CmdArgs) const; + llvm::opt::ArgStringList &CmdArgs) const; }; class LLVM_LIBRARY_VISIBILITY Assemble : public Common { @@ -158,7 +171,7 @@ namespace gcc { virtual bool hasIntegratedCPP() const { return false; } virtual void RenderExtraToolArgs(const JobAction &JA, - ArgStringList &CmdArgs) const; + llvm::opt::ArgStringList &CmdArgs) const; }; class LLVM_LIBRARY_VISIBILITY Link : public Common { @@ -170,7 +183,7 @@ namespace gcc { virtual bool isLinkJob() const { return true; } virtual void RenderExtraToolArgs(const JobAction &JA, - ArgStringList &CmdArgs) const; + llvm::opt::ArgStringList &CmdArgs) const; }; } // end namespace gcc @@ -185,11 +198,11 @@ namespace hexagon { virtual bool hasIntegratedCPP() const { return false; } virtual void RenderExtraToolArgs(const JobAction &JA, - ArgStringList &CmdArgs) const; + llvm::opt::ArgStringList &CmdArgs) const; virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; @@ -202,11 +215,11 @@ namespace hexagon { virtual bool isLinkJob() const { return true; } virtual void RenderExtraToolArgs(const JobAction &JA, - ArgStringList &CmdArgs) const; + llvm::opt::ArgStringList &CmdArgs) const; virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; } // end namespace hexagon. @@ -218,7 +231,8 @@ namespace darwin { class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool { virtual void anchor(); protected: - void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const; + void AddDarwinArch(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs) const; const toolchains::Darwin &getDarwinToolChain() const { return reinterpret_cast<const toolchains::Darwin&>(getToolChain()); @@ -239,14 +253,15 @@ namespace darwin { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool { bool NeedsTempPath(const InputInfoList &Inputs) const; - void AddLinkArgs(Compilation &C, const ArgList &Args, - ArgStringList &CmdArgs, const InputInfoList &Inputs) const; + void AddLinkArgs(Compilation &C, const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs, + const InputInfoList &Inputs) const; public: Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {} @@ -257,7 +272,7 @@ namespace darwin { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; @@ -270,7 +285,7 @@ namespace darwin { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; @@ -285,7 +300,7 @@ namespace darwin { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; @@ -299,7 +314,7 @@ namespace darwin { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; @@ -317,7 +332,7 @@ namespace openbsd { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; class LLVM_LIBRARY_VISIBILITY Link : public Tool { @@ -330,7 +345,7 @@ namespace openbsd { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; } // end namespace openbsd @@ -347,7 +362,7 @@ namespace bitrig { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; class LLVM_LIBRARY_VISIBILITY Link : public Tool { @@ -360,7 +375,7 @@ namespace bitrig { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; } // end namespace bitrig @@ -377,7 +392,7 @@ namespace freebsd { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; class LLVM_LIBRARY_VISIBILITY Link : public Tool { @@ -390,7 +405,7 @@ namespace freebsd { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; } // end namespace freebsd @@ -408,7 +423,7 @@ namespace netbsd { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; class LLVM_LIBRARY_VISIBILITY Link : public Tool { @@ -423,7 +438,7 @@ namespace netbsd { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; } // end namespace netbsd @@ -439,7 +454,7 @@ namespace gnutools { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; class LLVM_LIBRARY_VISIBILITY Link : public Tool { @@ -452,7 +467,7 @@ namespace gnutools { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; } @@ -468,7 +483,7 @@ namespace minix { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; class LLVM_LIBRARY_VISIBILITY Link : public Tool { @@ -481,7 +496,7 @@ namespace minix { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; } // end namespace minix @@ -498,7 +513,7 @@ namespace solaris { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; class LLVM_LIBRARY_VISIBILITY Link : public Tool { @@ -511,7 +526,7 @@ namespace solaris { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; } // end namespace solaris @@ -528,7 +543,7 @@ namespace auroraux { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; class LLVM_LIBRARY_VISIBILITY Link : public Tool { @@ -541,7 +556,7 @@ namespace auroraux { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; } // end namespace auroraux @@ -558,7 +573,7 @@ namespace dragonfly { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; class LLVM_LIBRARY_VISIBILITY Link : public Tool { @@ -571,14 +586,14 @@ namespace dragonfly { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; }; } // end namespace dragonfly /// Visual studio tools. namespace visualstudio { - class LLVM_LIBRARY_VISIBILITY Link : public Tool { + class LLVM_LIBRARY_VISIBILITY Link : public Tool { public: Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {} @@ -588,11 +603,64 @@ namespace visualstudio { virtual void ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, - const ArgList &TCArgs, + const llvm::opt::ArgList &TCArgs, + const char *LinkingOutput) const; + }; + + class LLVM_LIBRARY_VISIBILITY Compile : public Tool { + public: + Compile(const ToolChain &TC) : Tool("visualstudio::Compile", "compiler", TC) {} + + virtual bool hasIntegratedAssembler() const { return true; } + virtual bool hasIntegratedCPP() const { return true; } + virtual bool isLinkJob() const { return false; } + + virtual void ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const; + + Command *GetCommand(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const llvm::opt::ArgList &TCArgs, + const char *LinkingOutput) const; }; } // end namespace visualstudio +namespace XCore { + // For XCore, 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("XCore::Assemble", + "XCore-as", TC) {} + + virtual bool hasIntegratedCPP() const { return false; } + virtual void ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const llvm::opt::ArgList &TCArgs, + const char *LinkingOutput) const; + }; + + class LLVM_LIBRARY_VISIBILITY Link : public Tool { + public: + Link(const ToolChain &TC) : Tool("XCore::Link", + "XCore-ld", 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 llvm::opt::ArgList &TCArgs, + const char *LinkingOutput) const; + }; +} // end namespace XCore. + + } // end namespace toolchains } // end namespace driver } // end namespace clang |