//===- Target.cpp ---------------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include #include using namespace mcld; //===----------------------------------------------------------------------===// // Target //===----------------------------------------------------------------------===// Target::Target() : Name(NULL), TripleMatchQualityFn(NULL), TargetMachineCtorFn(NULL), MCLinkerCtorFn(NULL), TargetLDBackendCtorFn(NULL), DiagnosticLineInfoCtorFn(NULL) { } unsigned int Target::getTripleQuality(const llvm::Triple& pTriple) const { if (NULL == TripleMatchQualityFn) return 0; return TripleMatchQualityFn(pTriple); } MCLDTargetMachine* Target::createTargetMachine(const std::string& pTriple, const llvm::Target& pTarget, llvm::TargetMachine& pTM) const { if (NULL == TargetMachineCtorFn) return NULL; return TargetMachineCtorFn(pTarget, *this, pTM, pTriple); } /// createMCLinker - create target-specific MCLinker MCLinker* Target::createMCLinker(const std::string &pTriple, LinkerConfig& pConfig, Module& pModule, FileHandle& pFileHandle) const { if (NULL == MCLinkerCtorFn) return NULL; return MCLinkerCtorFn(pTriple, pConfig, pModule, pFileHandle); } /// emulate - given MCLinker default values for the other aspects of the /// target system. bool Target::emulate(LinkerScript& pScript, LinkerConfig& pConfig) const { if (NULL == EmulationFn) return false; return EmulationFn(pScript, pConfig); } /// createLDBackend - create target-specific LDBackend TargetLDBackend* Target::createLDBackend(const LinkerConfig& pConfig) const { if (NULL == TargetLDBackendCtorFn) return NULL; return TargetLDBackendCtorFn(pConfig); } /// createDiagnosticLineInfo - create target-specific DiagnosticLineInfo DiagnosticLineInfo* Target::createDiagnosticLineInfo(const mcld::Target& pTarget, const std::string& pTriple) const { if (NULL == DiagnosticLineInfoCtorFn) return NULL; return DiagnosticLineInfoCtorFn(pTarget, pTriple); }