blob: 703dc82f956c8c448590b18d9314d223b3445d8f [file] [log] [blame]
Stephen Hinesf33f6de2014-02-14 18:00:16 -08001//===- 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//===----------------------------------------------------------------------===//
Stephen Hines37b74a32014-11-26 18:48:20 -08009#ifndef MCLD_SUPPORT_TARGET_H_
10#define MCLD_SUPPORT_TARGET_H_
Stephen Hinesf33f6de2014-02-14 18:00:16 -080011#include <string>
Stephen Hinesf33f6de2014-02-14 18:00:16 -080012
13namespace llvm {
14class Target;
15class Triple;
16class TargetMachine;
Stephen Hines37b74a32014-11-26 18:48:20 -080017} // namespace llvm
Stephen Hinesf33f6de2014-02-14 18:00:16 -080018
19namespace mcld {
20
21class MCLDTargetMachine;
22class TargetRegistry;
23class MCLinker;
24class LinkerScript;
25class LinkerConfig;
26class Module;
27class FileHandle;
28class DiagnosticLineInfo;
29class TargetLDBackend;
30
31/** \class Target
32 * \brief Target collects target specific information
33 */
Stephen Hines37b74a32014-11-26 18:48:20 -080034class Target {
Stephen Hinesf33f6de2014-02-14 18:00:16 -080035 friend class mcld::MCLDTargetMachine;
36 friend class mcld::TargetRegistry;
37
Stephen Hines37b74a32014-11-26 18:48:20 -080038 public:
Stephen Hinesf33f6de2014-02-14 18:00:16 -080039 typedef unsigned int (*TripleMatchQualityFnTy)(const llvm::Triple& pTriple);
40
Stephen Hines37b74a32014-11-26 18:48:20 -080041 typedef MCLDTargetMachine* (*TargetMachineCtorTy)(const llvm::Target&,
42 const mcld::Target&,
43 llvm::TargetMachine&,
Stephen Hinesf33f6de2014-02-14 18:00:16 -080044 const std::string&);
45
Stephen Hines37b74a32014-11-26 18:48:20 -080046 typedef MCLinker* (*MCLinkerCtorTy)(const std::string& pTriple,
Stephen Hinesf33f6de2014-02-14 18:00:16 -080047 LinkerConfig&,
48 Module&,
49 FileHandle& pFileHandle);
50
51 typedef bool (*EmulationFnTy)(LinkerScript&, LinkerConfig&);
52
Stephen Hines37b74a32014-11-26 18:48:20 -080053 typedef TargetLDBackend* (*TargetLDBackendCtorTy)(const LinkerConfig&);
Stephen Hinesf33f6de2014-02-14 18:00:16 -080054
Stephen Hines37b74a32014-11-26 18:48:20 -080055 typedef DiagnosticLineInfo* (*DiagnosticLineInfoCtorTy)(const mcld::Target&,
Stephen Hinesf33f6de2014-02-14 18:00:16 -080056 const std::string&);
57
Stephen Hines37b74a32014-11-26 18:48:20 -080058 public:
Stephen Hinesf33f6de2014-02-14 18:00:16 -080059 Target();
60
61 /// getName - get the target name
62 const char* name() const { return Name; }
63
64 unsigned int getTripleQuality(const llvm::Triple& pTriple) const;
65
66 /// createTargetMachine - create target-specific TargetMachine
67 MCLDTargetMachine* createTargetMachine(const std::string& pTriple,
68 const llvm::Target& pTarget,
69 llvm::TargetMachine& pTM) const;
70
71 /// createMCLinker - create target-specific MCLinker
Stephen Hines37b74a32014-11-26 18:48:20 -080072 MCLinker* createMCLinker(const std::string& pTriple,
Stephen Hinesf33f6de2014-02-14 18:00:16 -080073 LinkerConfig& pConfig,
74 Module& pModule,
75 FileHandle& pFileHandle) const;
76
77 /// emulate - given MCLinker default values for the other aspects of the
78 /// target system.
79 bool emulate(LinkerScript& pScript, LinkerConfig& pConfig) const;
80
81 /// createLDBackend - create target-specific LDBackend
82 TargetLDBackend* createLDBackend(const LinkerConfig& pConfig) const;
83
84 /// createDiagnosticLineInfo - create target-specific DiagnosticLineInfo
Stephen Hines37b74a32014-11-26 18:48:20 -080085 DiagnosticLineInfo* createDiagnosticLineInfo(
86 const mcld::Target& pTarget,
87 const std::string& pTriple) const;
Stephen Hinesf33f6de2014-02-14 18:00:16 -080088
Stephen Hines37b74a32014-11-26 18:48:20 -080089 private:
Stephen Hinesf33f6de2014-02-14 18:00:16 -080090 /// Name - The target name
91 const char* Name;
92
93 TripleMatchQualityFnTy TripleMatchQualityFn;
94 TargetMachineCtorTy TargetMachineCtorFn;
95 MCLinkerCtorTy MCLinkerCtorFn;
96 EmulationFnTy EmulationFn;
97 TargetLDBackendCtorTy TargetLDBackendCtorFn;
98 DiagnosticLineInfoCtorTy DiagnosticLineInfoCtorFn;
99};
100
Stephen Hines37b74a32014-11-26 18:48:20 -0800101} // namespace mcld
Stephen Hinesf33f6de2014-02-14 18:00:16 -0800102
Stephen Hines37b74a32014-11-26 18:48:20 -0800103#endif // MCLD_SUPPORT_TARGET_H_