TargetOptions.h revision f7ac0f19a1c8d0ad14bcf6456ce368b830fea886
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
19namespace mcld {
20
21/** \class TargetOptions
22 *  \brief TargetOptions collects the options that dependent on a target
23 *  backend.
24 */
25class TargetOptions
26{
27public:
28  enum Endian {
29    Little,
30    Big,
31    Unknown
32  };
33
34public:
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
69private:
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