[llvm-commits] CVS: llvm/include/llvm/Support/IncludeFile.h

Reid Spencer reid at x10sys.com
Wed Jun 7 13:00:35 PDT 2006



Changes in directory llvm/include/llvm/Support:

IncludeFile.h added (r1.1)
---
Log message:

For PR780: http://llvm.cs.uiuc.edu/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: http://llvm.cs.uiuc.edu/PR800 .
More to follow on this.


---
Diffs of the changes:  (+40 -0)

 IncludeFile.h |   40 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 40 insertions(+)


Index: llvm/include/llvm/Support/IncludeFile.h
diff -c /dev/null llvm/include/llvm/Support/IncludeFile.h:1.1
*** /dev/null	Wed Jun  7 15:00:29 2006
--- llvm/include/llvm/Support/IncludeFile.h	Wed Jun  7 15:00:19 2006
***************
*** 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:<br/>
+ /// <tt>extern int LinkMyCodeStub;</tt><br/>
+ /// <tt>static IncludeFile LinkMyModule(&LinkMyCodeStub);</tt><br/>
+ /// @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






More information about the llvm-commits mailing list