//===--- ForceLinkage.h - The LLVM Compiler Driver --------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open // Source License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // A bit of preprocessor magic to force references to static libraries. Needed // because plugin initialization is done via static variables. // //===----------------------------------------------------------------------===// #ifndef LLVM_INCLUDE_COMPILER_DRIVER_FORCE_LINKAGE_H #define LLVM_INCLUDE_COMPILER_DRIVER_FORCE_LINKAGE_H #include "llvm/CompilerDriver/ForceLinkageMacros.h" namespace llvmc { // Declare all ForceLinkage$(PluginName) functions. #ifdef LLVMC_BUILTIN_PLUGIN_1 LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_1); #endif #ifdef LLVMC_BUILTIN_PLUGIN_2 LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_2); #endif #ifdef LLVMC_BUILTIN_PLUGIN_3 LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_3); #endif #ifdef LLVMC_BUILTIN_PLUGIN_4 LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_4); #endif #ifdef LLVMC_BUILTIN_PLUGIN_5 LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_5); #endif #ifdef LLVMC_BUILTIN_PLUGIN_6 LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_6); #endif #ifdef LLVMC_BUILTIN_PLUGIN_7 LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_7); #endif #ifdef LLVMC_BUILTIN_PLUGIN_8 LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_8); #endif #ifdef LLVMC_BUILTIN_PLUGIN_9 LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_9); #endif #ifdef LLVMC_BUILTIN_PLUGIN_10 LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_10); #endif namespace force_linkage { struct LinkageForcer { LinkageForcer() { // Call all ForceLinkage$(PluginName) functions. #ifdef LLVMC_BUILTIN_PLUGIN_1 LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_1); #endif #ifdef LLVMC_BUILTIN_PLUGIN_2 LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_2); #endif #ifdef LLVMC_BUILTIN_PLUGIN_3 LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_3); #endif #ifdef LLVMC_BUILTIN_PLUGIN_4 LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_4); #endif #ifdef LLVMC_BUILTIN_PLUGIN_5 LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_5); #endif #ifdef LLVMC_BUILTIN_PLUGIN_6 LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_6); #endif #ifdef LLVMC_BUILTIN_PLUGIN_7 LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_7); #endif #ifdef LLVMC_BUILTIN_PLUGIN_8 LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_8); #endif #ifdef LLVMC_BUILTIN_PLUGIN_9 LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_9); #endif #ifdef LLVMC_BUILTIN_PLUGIN_10 LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_10); #endif } }; } // End namespace force_linkage. // The only externally used bit. void ForceLinkage() { force_linkage::LinkageForcer dummy; } } // End namespace llvmc. #endif // LLVM_INCLUDE_COMPILER_DRIVER_FORCE_LINKAGE_H