1
//===--- ForceLinkage.h - The LLVM Compiler Driver --------------*- C++ -*-===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open
6
// Source License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// A bit of preprocessor magic to force references to static libraries. Needed
11
// because plugin initialization is done via static variables.
13
//===----------------------------------------------------------------------===//
15
#ifndef LLVM_INCLUDE_COMPILER_DRIVER_FORCE_LINKAGE_H
16
#define LLVM_INCLUDE_COMPILER_DRIVER_FORCE_LINKAGE_H
18
#include "llvm/CompilerDriver/ForceLinkageMacros.h"
22
// Declare all ForceLinkage$(PluginName) functions.
24
#ifdef LLVMC_BUILTIN_PLUGIN_1
25
LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_1);
28
#ifdef LLVMC_BUILTIN_PLUGIN_2
29
LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_2);
32
#ifdef LLVMC_BUILTIN_PLUGIN_3
33
LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_3);
36
#ifdef LLVMC_BUILTIN_PLUGIN_4
37
LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_4);
40
#ifdef LLVMC_BUILTIN_PLUGIN_5
41
LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_5);
44
#ifdef LLVMC_BUILTIN_PLUGIN_6
45
LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_6);
48
#ifdef LLVMC_BUILTIN_PLUGIN_7
49
LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_7);
52
#ifdef LLVMC_BUILTIN_PLUGIN_8
53
LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_8);
56
#ifdef LLVMC_BUILTIN_PLUGIN_9
57
LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_9);
60
#ifdef LLVMC_BUILTIN_PLUGIN_10
61
LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_10);
64
namespace force_linkage {
66
struct LinkageForcer {
70
// Call all ForceLinkage$(PluginName) functions.
71
#ifdef LLVMC_BUILTIN_PLUGIN_1
72
LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_1);
75
#ifdef LLVMC_BUILTIN_PLUGIN_2
76
LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_2);
79
#ifdef LLVMC_BUILTIN_PLUGIN_3
80
LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_3);
83
#ifdef LLVMC_BUILTIN_PLUGIN_4
84
LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_4);
87
#ifdef LLVMC_BUILTIN_PLUGIN_5
88
LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_5);
91
#ifdef LLVMC_BUILTIN_PLUGIN_6
92
LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_6);
95
#ifdef LLVMC_BUILTIN_PLUGIN_7
96
LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_7);
99
#ifdef LLVMC_BUILTIN_PLUGIN_8
100
LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_8);
103
#ifdef LLVMC_BUILTIN_PLUGIN_9
104
LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_9);
107
#ifdef LLVMC_BUILTIN_PLUGIN_10
108
LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_10);
113
} // End namespace force_linkage.
115
// The only externally used bit.
116
void ForceLinkage() {
117
force_linkage::LinkageForcer dummy;
120
} // End namespace llvmc.
122
#endif // LLVM_INCLUDE_COMPILER_DRIVER_FORCE_LINKAGE_H