• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===- Target.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_SUPPORT_TARGET_H
10 #define MCLD_SUPPORT_TARGET_H
11 #include <string>
12 #include <list>
13 
14 namespace llvm {
15 class Target;
16 class Triple;
17 class TargetMachine;
18 } // namespace of llvm
19 
20 namespace mcld {
21 
22 class MCLDTargetMachine;
23 class TargetRegistry;
24 class MCLinker;
25 class LinkerScript;
26 class LinkerConfig;
27 class Module;
28 class FileHandle;
29 class DiagnosticLineInfo;
30 class TargetLDBackend;
31 
32 /** \class Target
33  *  \brief Target collects target specific information
34  */
35 class Target
36 {
37   friend class mcld::MCLDTargetMachine;
38   friend class mcld::TargetRegistry;
39 
40 public:
41   typedef unsigned int (*TripleMatchQualityFnTy)(const llvm::Triple& pTriple);
42 
43   typedef MCLDTargetMachine *(*TargetMachineCtorTy)(const llvm::Target &,
44                                                     const mcld::Target &,
45                                                     llvm::TargetMachine &,
46                                                     const std::string&);
47 
48   typedef MCLinker *(*MCLinkerCtorTy)(const std::string& pTriple,
49                                       LinkerConfig&,
50                                       Module&,
51                                       FileHandle& pFileHandle);
52 
53   typedef bool (*EmulationFnTy)(LinkerScript&, LinkerConfig&);
54 
55   typedef TargetLDBackend  *(*TargetLDBackendCtorTy)(const LinkerConfig&);
56 
57   typedef DiagnosticLineInfo *(*DiagnosticLineInfoCtorTy)(const mcld::Target&,
58                                                           const std::string&);
59 
60 public:
61   Target();
62 
63   /// getName - get the target name
name()64   const char* name() const { return Name; }
65 
66   unsigned int getTripleQuality(const llvm::Triple& pTriple) const;
67 
68   /// createTargetMachine - create target-specific TargetMachine
69   MCLDTargetMachine* createTargetMachine(const std::string& pTriple,
70                                          const llvm::Target& pTarget,
71                                          llvm::TargetMachine& pTM) const;
72 
73   /// createMCLinker - create target-specific MCLinker
74   MCLinker *createMCLinker(const std::string &pTriple,
75                            LinkerConfig& pConfig,
76                            Module& pModule,
77                            FileHandle& pFileHandle) const;
78 
79   /// emulate - given MCLinker default values for the other aspects of the
80   /// target system.
81   bool emulate(LinkerScript& pScript, LinkerConfig& pConfig) const;
82 
83   /// createLDBackend - create target-specific LDBackend
84   TargetLDBackend* createLDBackend(const LinkerConfig& pConfig) const;
85 
86   /// createDiagnosticLineInfo - create target-specific DiagnosticLineInfo
87   DiagnosticLineInfo* createDiagnosticLineInfo(const mcld::Target& pTarget,
88                                                const std::string& pTriple) const;
89 
90 private:
91   /// Name - The target name
92   const char* Name;
93 
94   TripleMatchQualityFnTy TripleMatchQualityFn;
95   TargetMachineCtorTy TargetMachineCtorFn;
96   MCLinkerCtorTy MCLinkerCtorFn;
97   EmulationFnTy EmulationFn;
98   TargetLDBackendCtorTy TargetLDBackendCtorFn;
99   DiagnosticLineInfoCtorTy DiagnosticLineInfoCtorFn;
100 };
101 
102 } //end namespace mcld
103 
104 #endif
105 
106