1//===- TargetLinkerConfig.h -----------------------------------------------===//
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
10#ifndef ALONE_SUPPORT_TARGET_LINKER_CONFIGS_H
11#define ALONE_SUPPORT_TARGET_LINKER_CONFIGS_H
12
13#include <string>
14
15#include "alone/Config/Config.h"
16#include "alone/Support/LinkerConfig.h"
17
18namespace alone {
19
20//===----------------------------------------------------------------------===//
21// ARM
22//===----------------------------------------------------------------------===//
23#if defined(PROVIDE_ARM_CODEGEN)
24class ARMLinkerConfig : public LinkerConfig {
25public:
26  ARMLinkerConfig();
27};
28#endif // defined(PROVIDE_ARM_CODEGEN)
29
30//===----------------------------------------------------------------------===//
31// MIPS
32//===----------------------------------------------------------------------===//
33#if defined(PROVIDE_MIPS_CODEGEN)
34class MipsLinkerConfig : public LinkerConfig {
35public:
36  MipsLinkerConfig();
37};
38#endif // defined(PROVIDE_MIPS_CODEGEN)
39
40//===----------------------------------------------------------------------===//
41// X86 and X86_64
42//===----------------------------------------------------------------------===//
43#if defined(PROVIDE_X86_CODEGEN)
44class X86FamilyLinkerConfigBase : public LinkerConfig {
45public:
46  X86FamilyLinkerConfigBase(const std::string& pTriple);
47};
48
49class X86_32LinkerConfig : public X86FamilyLinkerConfigBase {
50public:
51  X86_32LinkerConfig();
52};
53
54class X86_64LinkerConfig : public X86FamilyLinkerConfigBase {
55public:
56  X86_64LinkerConfig();
57};
58#endif // defined(PROVIDE_X86_CODEGEN)
59
60//===----------------------------------------------------------------------===//
61// Default target
62//===----------------------------------------------------------------------===//
63class DefaultLinkerConfig : public
64#if defined (DEFAULT_ARM_CODEGEN)
65  ARMLinkerConfig
66#elif defined (DEFAULT_MIPS_CODEGEN)
67  MipsLinkerConfig
68#elif defined (DEFAULT_X86_CODEGEN)
69  X86_32LinkerConfig
70#elif defined (DEFAULT_X86_64_CODEGEN)
71  X86_64LinkerConfig
72#else
73#  error "Unsupported Default Target!"
74#endif
75{ };
76
77#if !defined(TARGET_BUILD)
78//===----------------------------------------------------------------------===//
79// General target
80//===----------------------------------------------------------------------===//
81class GeneralLinkerConfig : public LinkerConfig {
82public:
83  GeneralLinkerConfig(const std::string& pTriple);
84};
85#endif // !defined(TARGET_BUILD)
86
87} // end namespace alone
88
89#endif // ALONE_SUPPORT_LINKER_CONFIG_H
90