From 6df60a9effe4d20a48cfd9d105c0ab3c5dc3e690 Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Wed, 7 Jun 2006 20:00:19 +0000 Subject: For PR780: Break the "IncludeFile" mechanism into its own header file and adjust other files accordingly. Use this facility for the IntrinsicInst problem which was the subject of PR800. More to follow on this. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28709 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/IncludeFile.h | 40 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 include/llvm/Support/IncludeFile.h (limited to 'include/llvm/Support/IncludeFile.h') diff --git a/include/llvm/Support/IncludeFile.h b/include/llvm/Support/IncludeFile.h new file mode 100644 index 0000000000..2e4f12dbbf --- /dev/null +++ b/include/llvm/Support/IncludeFile.h @@ -0,0 +1,40 @@ +//===- llvm/Support/IncludeFile.h - Ensure Linking Of Library ---*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by Reid Spencer and is distributed under the +// University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the IncludeFile class. +// +//===----------------------------------------------------------------------===// + +/// This class is used as a facility to make sure that the implementation of a +/// header file is included into a tool that uses the header. This is solely +/// to overcome problems linking .a files and not getting the implementation +/// of compilation units we need. This is commonly an issue with the various +/// Passes but also occurs elsewhere in LLVM. We like to use .a files because +/// they link faster and provide the smallest executables. However, sometimes +/// those executables are too small, if the program doesn't reference something +/// that might be needed, especially by a loaded share object. This little class +/// helps to resolve that problem. The basic strategy is to use this class in +/// a header file and pass the address of a variable to the constructor. If the +/// variable is defined in the header file's corresponding .cpp file then all +/// tools/libraries that #include the header file will require the .cpp as well. +/// For example:
+/// extern int LinkMyCodeStub;
+/// static IncludeFile LinkMyModule(&LinkMyCodeStub);
+/// @brief Class to ensure linking of corresponding object file. + +#ifndef LLVM_SUPPORT_INCLUDEFILE_H +#define LLVM_SUPPORT_INCLUDEFILE_H + +namespace llvm { +struct IncludeFile { + IncludeFile(void *); +}; +} + +#endif -- cgit v1.2.3-18-g5258