1 //===- Target.cpp ---------------------------------------------------------===//
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 #include "mcld/Support/Target.h"
10
11 #include <llvm/ADT/Triple.h>
12
13 namespace mcld {
14
15 //===----------------------------------------------------------------------===//
16 // Target
17 //===----------------------------------------------------------------------===//
Target()18 Target::Target()
19 : Name(NULL),
20 TripleMatchQualityFn(NULL),
21 TargetMachineCtorFn(NULL),
22 MCLinkerCtorFn(NULL),
23 TargetLDBackendCtorFn(NULL),
24 DiagnosticLineInfoCtorFn(NULL) {
25 }
26
getTripleQuality(const llvm::Triple & pTriple) const27 unsigned int Target::getTripleQuality(const llvm::Triple& pTriple) const {
28 if (TripleMatchQualityFn == NULL)
29 return 0;
30 return TripleMatchQualityFn(pTriple);
31 }
32
createTargetMachine(const std::string & pTriple,const llvm::Target & pTarget,llvm::TargetMachine & pTM) const33 MCLDTargetMachine* Target::createTargetMachine(const std::string& pTriple,
34 const llvm::Target& pTarget,
35 llvm::TargetMachine& pTM) const {
36 if (TargetMachineCtorFn == NULL)
37 return NULL;
38 return TargetMachineCtorFn(pTarget, *this, pTM, pTriple);
39 }
40
41 /// createMCLinker - create target-specific MCLinker
createMCLinker(const std::string & pTriple,LinkerConfig & pConfig,Module & pModule,FileHandle & pFileHandle) const42 MCLinker* Target::createMCLinker(const std::string& pTriple,
43 LinkerConfig& pConfig,
44 Module& pModule,
45 FileHandle& pFileHandle) const {
46 if (MCLinkerCtorFn == NULL)
47 return NULL;
48 return MCLinkerCtorFn(pTriple, pConfig, pModule, pFileHandle);
49 }
50
51 /// emulate - given MCLinker default values for the other aspects of the
52 /// target system.
emulate(LinkerScript & pScript,LinkerConfig & pConfig) const53 bool Target::emulate(LinkerScript& pScript, LinkerConfig& pConfig) const {
54 if (EmulationFn == NULL)
55 return false;
56 return EmulationFn(pScript, pConfig);
57 }
58
59 /// createLDBackend - create target-specific LDBackend
createLDBackend(const LinkerConfig & pConfig) const60 TargetLDBackend* Target::createLDBackend(const LinkerConfig& pConfig) const {
61 if (TargetLDBackendCtorFn == NULL)
62 return NULL;
63 return TargetLDBackendCtorFn(pConfig);
64 }
65
66 /// createDiagnosticLineInfo - create target-specific DiagnosticLineInfo
createDiagnosticLineInfo(const mcld::Target & pTarget,const std::string & pTriple) const67 DiagnosticLineInfo* Target::createDiagnosticLineInfo(
68 const mcld::Target& pTarget,
69 const std::string& pTriple) const {
70 if (DiagnosticLineInfoCtorFn == NULL)
71 return NULL;
72 return DiagnosticLineInfoCtorFn(pTarget, pTriple);
73 }
74
75 } // namespace mcld
76