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