Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===--- Tool.h - Compilation Tools -----------------------------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8.  
  9. #ifndef LLVM_CLANG_DRIVER_TOOL_H
  10. #define LLVM_CLANG_DRIVER_TOOL_H
  11.  
  12. #include "clang/Basic/LLVM.h"
  13.  
  14. namespace llvm {
  15. namespace opt {
  16.   class ArgList;
  17. }
  18. }
  19.  
  20. namespace clang {
  21. namespace driver {
  22.  
  23.   class Compilation;
  24.   class InputInfo;
  25.   class Job;
  26.   class JobAction;
  27.   class ToolChain;
  28.  
  29.   typedef SmallVector<InputInfo, 4> InputInfoList;
  30.  
  31. /// Tool - Information on a specific compilation tool.
  32. class Tool {
  33.   /// The tool name (for debugging).
  34.   const char *Name;
  35.  
  36.   /// The human readable name for the tool, for use in diagnostics.
  37.   const char *ShortName;
  38.  
  39.   /// The tool chain this tool is a part of.
  40.   const ToolChain &TheToolChain;
  41.  
  42. public:
  43.   Tool(const char *Name, const char *ShortName, const ToolChain &TC);
  44.  
  45. public:
  46.   virtual ~Tool();
  47.  
  48.   const char *getName() const { return Name; }
  49.  
  50.   const char *getShortName() const { return ShortName; }
  51.  
  52.   const ToolChain &getToolChain() const { return TheToolChain; }
  53.  
  54.   virtual bool hasIntegratedAssembler() const { return false; }
  55.   virtual bool hasIntegratedBackend() const { return true; }
  56.   virtual bool canEmitIR() const { return false; }
  57.   virtual bool hasIntegratedCPP() const = 0;
  58.   virtual bool isLinkJob() const { return false; }
  59.   virtual bool isDsymutilJob() const { return false; }
  60.  
  61.   /// Does this tool have "good" standardized diagnostics, or should the
  62.   /// driver add an additional "command failed" diagnostic on failures.
  63.   virtual bool hasGoodDiagnostics() const { return false; }
  64.  
  65.   /// ConstructJob - Construct jobs to perform the action \p JA,
  66.   /// writing to \p Output and with \p Inputs, and add the jobs to
  67.   /// \p C.
  68.   ///
  69.   /// \param TCArgs - The argument list for this toolchain, with any
  70.   /// tool chain specific translations applied.
  71.   /// \param LinkingOutput - If this output will eventually feed the
  72.   /// linker, then this is the final output name of the linked image.
  73.   virtual void ConstructJob(Compilation &C, const JobAction &JA,
  74.                             const InputInfo &Output,
  75.                             const InputInfoList &Inputs,
  76.                             const llvm::opt::ArgList &TCArgs,
  77.                             const char *LinkingOutput) const = 0;
  78.   /// Construct jobs to perform the action \p JA, writing to the \p Outputs and
  79.   /// with \p Inputs, and add the jobs to \p C. The default implementation
  80.   /// assumes a single output and is expected to be overloaded for the tools
  81.   /// that support multiple inputs.
  82.   ///
  83.   /// \param TCArgs The argument list for this toolchain, with any
  84.   /// tool chain specific translations applied.
  85.   /// \param LinkingOutput If this output will eventually feed the
  86.   /// linker, then this is the final output name of the linked image.
  87.   virtual void ConstructJobMultipleOutputs(Compilation &C, const JobAction &JA,
  88.                                            const InputInfoList &Outputs,
  89.                                            const InputInfoList &Inputs,
  90.                                            const llvm::opt::ArgList &TCArgs,
  91.                                            const char *LinkingOutput) const;
  92. };
  93.  
  94. } // end namespace driver
  95. } // end namespace clang
  96.  
  97. #endif
  98.