zcov: / include/clang/Driver/ToolChain.h


Files: 1 Branches Taken: 0.0% 0 / 0
Generated: 2010-02-10 01:31 Branches Executed: 0.0% 0 / 0
Line Coverage: 93.3% 14 / 15


Programs: 10 Runs 15090


       1                 : //===--- ToolChain.h - Collections of tools for one platform ----*- C++ -*-===//
       2                 : //
       3                 : //                     The LLVM Compiler Infrastructure
       4                 : //
       5                 : // This file is distributed under the University of Illinois Open Source
       6                 : // License. See LICENSE.TXT for details.
       7                 : //
       8                 : //===----------------------------------------------------------------------===//
       9                 : 
      10                 : #ifndef CLANG_DRIVER_TOOLCHAIN_H_
      11                 : #define CLANG_DRIVER_TOOLCHAIN_H_
      12                 : 
      13                 : #include "llvm/ADT/SmallVector.h"
      14                 : #include "llvm/ADT/Triple.h"
      15                 : #include "llvm/System/Path.h"
      16                 : #include <string>
      17                 : 
      18                 : namespace clang {
      19                 : namespace driver {
      20                 :   class Compilation;
      21                 :   class DerivedArgList;
      22                 :   class Driver;
      23                 :   class HostInfo;
      24                 :   class InputArgList;
      25                 :   class JobAction;
      26                 :   class Tool;
      27                 : 
      28                 : /// ToolChain - Access to tools for a single platform.
      29                 : class ToolChain {
      30                 : public:
      31                 :   typedef llvm::SmallVector<std::string, 4> path_list;
      32                 : 
      33                 : private:
      34                 :   const HostInfo &Host;
      35                 :   const llvm::Triple Triple;
      36                 : 
      37                 :   /// The list of toolchain specific path prefixes to search for
      38                 :   /// files.
      39                 :   path_list FilePaths;
      40                 : 
      41                 :   /// The list of toolchain specific path prefixes to search for
      42                 :   /// programs.
      43                 :   path_list ProgramPaths;
      44                 : 
      45                 : protected:
      46                 :   ToolChain(const HostInfo &Host, const llvm::Triple &_Triple);
      47                 : 
      48                 : public:
      49                 :   virtual ~ToolChain();
      50                 : 
      51                 :   // Accessors
      52                 : 
      53                 :   const Driver &getDriver() const;
      54             1614:   const llvm::Triple &getTriple() const { return Triple; }
      55                 : 
      56              672:   llvm::StringRef getArchName() const { return Triple.getArchName(); }
      57                 :   llvm::StringRef getPlatform() const { return Triple.getVendorName(); }
      58              177:   llvm::StringRef getOS() const { return Triple.getOSName(); }
      59                 : 
      60              266:   std::string getTripleString() const {
      61              266:     return Triple.getTriple();
      62                 :   }
      63                 : 
      64             1175:   path_list &getFilePaths() { return FilePaths; }
      65               22:   const path_list &getFilePaths() const { return FilePaths; }
      66                 : 
      67              339:   path_list &getProgramPaths() { return ProgramPaths; }
      68              240:   const path_list &getProgramPaths() const { return ProgramPaths; }
      69                 : 
      70                 :   // Tool access.
      71                 : 
      72                 :   /// TranslateArgs - Create a new derived argument list for any argument
      73                 :   /// translations this ToolChain may wish to perform.
      74                 :   ///
      75                 :   /// \param BoundArch - The bound architecture name, or 0.
      76                 :   virtual DerivedArgList *TranslateArgs(InputArgList &Args,
      77                 :                                         const char *BoundArch) const = 0;
      78                 : 
      79                 :   /// SelectTool - Choose a tool to use to handle the action \arg JA.
      80                 :   virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const = 0;
      81                 : 
      82                 :   // Helper methods
      83                 : 
      84                 :   std::string GetFilePath(const Compilation &C, const char *Name) const;
      85                 :   std::string GetProgramPath(const Compilation &C, const char *Name,
      86                 :                              bool WantFile = false) const;
      87                 : 
      88                 :   // Platform defaults information
      89                 : 
      90                 :   /// IsBlocksDefault - Does this tool chain enable -fblocks by default.
      91              154:   virtual bool IsBlocksDefault() const { return false; }
      92                 : 
      93                 :   /// IsIntegratedAssemblerDefault - Does this tool chain enable -integrated-as
      94                 :   /// by default.
      95              263:   virtual bool IsIntegratedAssemblerDefault() const { return false; }
      96                 : 
      97                 :   /// IsObjCNonFragileABIDefault - Does this tool chain set
      98                 :   /// -fobjc-nonfragile-abi by default.
      99               51:   virtual bool IsObjCNonFragileABIDefault() const { return false; }
     100                 : 
     101                 :   /// IsObjCLegacyDispatchDefault - Does this tool chain set
     102                 :   /// -fobjc-legacy-dispatch by default (this is only used with the non-fragile
     103                 :   /// ABI).
     104                0:   virtual bool IsObjCLegacyDispatchDefault() const { return false; }
     105                 : 
     106                 :   /// GetDefaultStackProtectorLevel - Get the default stack protector level for
     107                 :   /// this tool chain (0=off, 1=on, 2=all).
     108              154:   virtual unsigned GetDefaultStackProtectorLevel() const { return 0; }
     109                 : 
     110                 :   /// IsUnwindTablesDefault - Does this tool chain use -funwind-tables
     111                 :   /// by default.
     112                 :   virtual bool IsUnwindTablesDefault() const = 0;
     113                 : 
     114                 :   /// GetDefaultRelocationModel - Return the LLVM name of the default
     115                 :   /// relocation model for this tool chain.
     116                 :   virtual const char *GetDefaultRelocationModel() const = 0;
     117                 : 
     118                 :   /// GetForcedPicModel - Return the LLVM name of the forced PIC model
     119                 :   /// for this tool chain, or 0 if this tool chain does not force a
     120                 :   /// particular PIC mode.
     121                 :   virtual const char *GetForcedPicModel() const = 0;
     122                 : 
     123                 :   /// UseDwarfDebugFlags - Embed the compile options to clang into the Dwarf
     124                 :   /// compile unit information.
     125              154:   virtual bool UseDwarfDebugFlags() const { return false; }
     126                 : };
     127                 : 
     128                 : } // end namespace driver
     129                 : } // end namespace clang
     130                 : 
     131                 : #endif

Generated: 2010-02-10 01:31 by zcov