| //===- Target.cpp ---------------------------------------------------------===// |
| // |
| // The MCLinker Project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| #include "mcld/Support/Target.h" |
| |
| #include <llvm/ADT/Triple.h> |
| |
| 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 (TripleMatchQualityFn == NULL) |
| return 0; |
| return TripleMatchQualityFn(pTriple); |
| } |
| |
| MCLDTargetMachine* Target::createTargetMachine(const std::string& pTriple, |
| const llvm::Target& pTarget, |
| llvm::TargetMachine& pTM) const { |
| if (TargetMachineCtorFn == NULL) |
| 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 (MCLinkerCtorFn == NULL) |
| 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 (EmulationFn == NULL) |
| return false; |
| return EmulationFn(pScript, pConfig); |
| } |
| |
| /// createLDBackend - create target-specific LDBackend |
| TargetLDBackend* Target::createLDBackend(const LinkerConfig& pConfig) const { |
| if (TargetLDBackendCtorFn == NULL) |
| return NULL; |
| return TargetLDBackendCtorFn(pConfig); |
| } |
| |
| /// createDiagnosticLineInfo - create target-specific DiagnosticLineInfo |
| DiagnosticLineInfo* Target::createDiagnosticLineInfo( |
| const mcld::Target& pTarget, |
| const std::string& pTriple) const { |
| if (DiagnosticLineInfoCtorFn == NULL) |
| return NULL; |
| return DiagnosticLineInfoCtorFn(pTarget, pTriple); |
| } |
| |
| } // namespace mcld |