Sketch support for target specific assembly parser.
[oota-llvm.git] / include / llvm / CompilerDriver / ForceLinkage.h
1 //===--- ForceLinkage.h - The LLVM Compiler Driver --------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open
6 // Source License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 //  A bit of preprocessor magic to force references to static libraries. Needed
11 //  because plugin initialization is done via static variables.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef LLVM_INCLUDE_COMPILER_DRIVER_FORCE_LINKAGE_H
16 #define LLVM_INCLUDE_COMPILER_DRIVER_FORCE_LINKAGE_H
17
18 #include "llvm/CompilerDriver/ForceLinkageMacros.h"
19
20 namespace llvmc {
21
22 // Declare all ForceLinkage$(PluginName) functions.
23
24 #ifdef LLVMC_BUILTIN_PLUGIN_1
25       LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_1);
26 #endif
27
28 #ifdef LLVMC_BUILTIN_PLUGIN_2
29       LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_2);
30 #endif
31
32 #ifdef LLVMC_BUILTIN_PLUGIN_3
33       LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_3);
34 #endif
35
36 #ifdef LLVMC_BUILTIN_PLUGIN_4
37       LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_4);
38 #endif
39
40 #ifdef LLVMC_BUILTIN_PLUGIN_5
41       LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_5);
42 #endif
43
44 namespace force_linkage {
45
46   struct LinkageForcer {
47
48     LinkageForcer() {
49
50 // Call all ForceLinkage$(PluginName) functions.
51 #ifdef LLVMC_BUILTIN_PLUGIN_1
52       LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_1);
53 #endif
54
55 #ifdef LLVMC_BUILTIN_PLUGIN_2
56       LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_2);
57 #endif
58
59 #ifdef LLVMC_BUILTIN_PLUGIN_3
60       LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_3);
61 #endif
62
63 #ifdef LLVMC_BUILTIN_PLUGIN_4
64       LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_4);
65 #endif
66
67 #ifdef LLVMC_BUILTIN_PLUGIN_5
68       LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_5);
69 #endif
70
71     }
72   };
73 } // End namespace force_linkage.
74
75 // The only externally used bit.
76 void ForceLinkage() {
77   force_linkage::LinkageForcer dummy;
78 }
79
80 } // End namespace llvmc.
81
82 #endif // LLVM_INCLUDE_COMPILER_DRIVER_FORCE_LINKAGE_H