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