Home | History | Annotate | Download | only in mcld
      1 //===- TargetOptions.h ----------------------------------------------------===//
      2 //
      3 //                     The MCLinker Project
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 #ifndef MCLD_TARGET_OPTIONS_H
     10 #define MCLD_TARGET_OPTIONS_H
     11 #ifdef ENABLE_UNITTEST
     12 #include <gtest.h>
     13 #endif
     14 
     15 #include <llvm/ADT/Triple.h>
     16 
     17 #include <string>
     18 
     19 namespace mcld {
     20 
     21 /** \class TargetOptions
     22  *  \brief TargetOptions collects the options that dependent on a target
     23  *  backend.
     24  */
     25 class TargetOptions
     26 {
     27 public:
     28   enum Endian {
     29     Little,
     30     Big,
     31     Unknown
     32   };
     33 
     34 public:
     35   TargetOptions();
     36 
     37   TargetOptions(const std::string& pTriple);
     38 
     39   ~TargetOptions();
     40 
     41   const llvm::Triple& triple() const { return m_Triple; }
     42 
     43   void setTriple(const std::string& pTriple);
     44 
     45   void setTriple(const llvm::Triple& pTriple);
     46 
     47   const std::string& getTargetCPU() const { return m_TargetCPU; }
     48 
     49   void setTargetCPU(const std::string& pCPU);
     50 
     51   const std::string& getTargetFeatureString() const { return m_TargetFS; }
     52 
     53   void setTargetFeatureString(const std::string& pFS);
     54 
     55   Endian endian() const { return m_Endian; }
     56 
     57   void setEndian(Endian pEndian) { m_Endian = pEndian; }
     58 
     59   bool isLittleEndian() const { return (Little == m_Endian); }
     60   bool isBigEndian   () const { return (Big    == m_Endian); }
     61 
     62   unsigned int bitclass() const { return m_BitClass; }
     63 
     64   void setBitClass(unsigned int pBitClass) { m_BitClass = pBitClass; }
     65 
     66   bool is32Bits() const { return (32 == m_BitClass); }
     67   bool is64Bits() const { return (64 == m_BitClass); }
     68 
     69 private:
     70   llvm::Triple m_Triple;
     71   std::string m_TargetCPU;
     72   std::string m_TargetFS;
     73   Endian m_Endian;
     74   unsigned int m_BitClass;
     75 
     76 };
     77 
     78 } // namespace of mcld
     79 
     80 #endif
     81 
     82