blob: 2c7d9734054a33c38891be5dd1f7fb77882942a7 [file] [log] [blame]
Shih-wei Liaod0fbbb22013-01-03 06:23:31 -08001//===- 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//===----------------------------------------------------------------------===//
Stephen Hines37b74a32014-11-26 18:48:20 -08009#ifndef MCLD_TARGETOPTIONS_H_
10#define MCLD_TARGETOPTIONS_H_
Shih-wei Liaod0fbbb22013-01-03 06:23:31 -080011
12#include <llvm/ADT/Triple.h>
13
14#include <string>
15
16namespace mcld {
17
18/** \class TargetOptions
19 * \brief TargetOptions collects the options that dependent on a target
20 * backend.
21 */
Stephen Hines37b74a32014-11-26 18:48:20 -080022class TargetOptions {
23 public:
24 enum Endian { Little, Big, Unknown };
Shih-wei Liaod0fbbb22013-01-03 06:23:31 -080025
Stephen Hines37b74a32014-11-26 18:48:20 -080026 public:
Shih-wei Liaod0fbbb22013-01-03 06:23:31 -080027 TargetOptions();
28
Stephen Hines37b74a32014-11-26 18:48:20 -080029 explicit TargetOptions(const std::string& pTriple);
Shih-wei Liaod0fbbb22013-01-03 06:23:31 -080030
31 ~TargetOptions();
32
33 const llvm::Triple& triple() const { return m_Triple; }
34
35 void setTriple(const std::string& pTriple);
36
37 void setTriple(const llvm::Triple& pTriple);
38
Stephen Hines87f34652014-02-14 18:00:16 -080039 const std::string& getArch() const { return m_ArchName; }
40
41 void setArch(const std::string& pArchName);
42
Stephen Hinesf7ac0f12013-05-03 19:09:24 -070043 const std::string& getTargetCPU() const { return m_TargetCPU; }
44
45 void setTargetCPU(const std::string& pCPU);
46
Shih-wei Liaod0fbbb22013-01-03 06:23:31 -080047 Endian endian() const { return m_Endian; }
48
49 void setEndian(Endian pEndian) { m_Endian = pEndian; }
50
51 bool isLittleEndian() const { return (Little == m_Endian); }
Stephen Hines37b74a32014-11-26 18:48:20 -080052 bool isBigEndian() const { return (Big == m_Endian); }
Shih-wei Liaod0fbbb22013-01-03 06:23:31 -080053
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
Stephen Hinesb0d0eb22016-03-08 00:18:09 -080061 // -G, max GP size option
62 void setGPSize(unsigned pGPSize) { m_GPSize = pGPSize; }
63
64 unsigned getGPSize() const { return m_GPSize; }
65
66 void setStubGroupSize(unsigned pSize) { m_StubGroupSize = pSize; }
67
68 unsigned getStubGroupSize() const { return m_StubGroupSize; }
69
70 void setFixCA53Erratum835769(bool pEnable = true) {
71 m_FixCA53Erratum835769 = pEnable;
72 }
73
74 bool fixCA53Erratum835769() const { return m_FixCA53Erratum835769; }
75
76 void setFixCA53Erratum843419(bool pEnable = true) {
77 m_FixCA53Erratum843419 = pEnable;
78 }
79
80 bool fixCA53Erratum843419() const { return m_FixCA53Erratum843419; }
81
Stephen Hines37b74a32014-11-26 18:48:20 -080082 private:
Shih-wei Liaod0fbbb22013-01-03 06:23:31 -080083 llvm::Triple m_Triple;
Stephen Hines87f34652014-02-14 18:00:16 -080084 std::string m_ArchName;
Stephen Hinesf7ac0f12013-05-03 19:09:24 -070085 std::string m_TargetCPU;
Shih-wei Liaod0fbbb22013-01-03 06:23:31 -080086 Endian m_Endian;
87 unsigned int m_BitClass;
Stephen Hinesb0d0eb22016-03-08 00:18:09 -080088 unsigned m_GPSize; // -G, --gpsize
89 unsigned m_StubGroupSize;
90 bool m_FixCA53Erratum835769 : 1;
91 bool m_FixCA53Erratum843419 : 1;
Shih-wei Liaod0fbbb22013-01-03 06:23:31 -080092};
93
Stephen Hines37b74a32014-11-26 18:48:20 -080094} // namespace mcld
Shih-wei Liaod0fbbb22013-01-03 06:23:31 -080095
Stephen Hines37b74a32014-11-26 18:48:20 -080096#endif // MCLD_TARGETOPTIONS_H_