Home | History | Annotate | Download | only in Support
      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