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   Endian endian() const { return m_Endian; }
     48 
     49   void setEndian(Endian pEndian) { m_Endian = pEndian; }
     50 
     51   bool isLittleEndian() const { return (Little == m_Endian); }
     52   bool isBigEndian   () const { return (Big    == m_Endian); }
     53 
     54   unsigned int bitclass() const { return m_BitClass; }
     55 
     56   void setBitClass(unsigned int pBitClass) { m_BitClass = pBitClass; }
     57 
     58   bool is32Bits() const { return (32 == m_BitClass); }
     59   bool is64Bits() const { return (64 == m_BitClass); }
     60 
     61 private:
     62   llvm::Triple m_Triple;
     63   Endian m_Endian;
     64   unsigned int m_BitClass;
     65 
     66 };
     67 
     68 } // namespace of mcld
     69 
     70 #endif
     71 
     72