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 12using namespace mcld; 13 14//===----------------------------------------------------------------------===// 15// Target 16//===----------------------------------------------------------------------===// 17Target::Target() 18 : Name(NULL), 19 TripleMatchQualityFn(NULL), 20 TargetMachineCtorFn(NULL), 21 MCLinkerCtorFn(NULL), 22 TargetLDBackendCtorFn(NULL), 23 DiagnosticLineInfoCtorFn(NULL) { 24} 25 26unsigned int Target::getTripleQuality(const llvm::Triple& pTriple) const 27{ 28 if (NULL == TripleMatchQualityFn) 29 return 0; 30 return TripleMatchQualityFn(pTriple); 31} 32 33MCLDTargetMachine* 34Target::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 44MCLinker* 45Target::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. 57bool 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 65TargetLDBackend* 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 73DiagnosticLineInfo* 74Target::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