summaryrefslogtreecommitdiff
path: root/www/index.html
blob: 85e5a83463d5d5eb8ba02678c544a2fbab2de15b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
          "http://www.w3.org/TR/html4/strict.dtd">
<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
<html>
<head>
  <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  <title>"compiler-rt" Runtime Library</title>
  <link type="text/css" rel="stylesheet" href="menu.css">
  <link type="text/css" rel="stylesheet" href="content.css">
</head>

<body>
<!--#include virtual="menu.html.incl"-->
<div id="content">
  <!--*********************************************************************-->
  <h1>"compiler-rt" Runtime Library</h1>
  <!--*********************************************************************-->
  
  <p>The compiler-rt project is a simple library that provides an implementation
     of the low-level target-specific hooks required by code generation and
     other runtime components.  For example, when compiling for a 32-bit target,
    converting a double to a 64-bit unsigned integer is compiling into a runtime
    call to the "__fixunsdfdi" function.  The compiler-rt library provides
    optimized implementations of this and other low-level routines.</p>

  <p>All of the code in the compiler-rt project is <a 
     href="http://llvm.org/docs/DeveloperPolicy.html#license">dual licensed</a>
     under the MIT license and the UIUC License (a BSD-like license).</p>

  <!--=====================================================================-->
  <h2 id="users">Clients</h2>
  <!--=====================================================================-->

  <p>Currently compiler-rt is primarily used by
    the <a href="http://clang.llvm.org">Clang</a>
    and <a href="http://llvm.org">LLVM</a> projects as the implementation for
    the runtime compiler support libraries. The library currently provides both
    the low-level target-specific hooks required by code generation, as well as
    additional modules for supporting the runtime requirements of features like
    code coverage, profiling, or address sanitizer (ASAN) instrumentation.</p>

  <p>For more information on using compiler-rt with Clang, please see the Clang
    <a href="http://clang.llvm.org/get_started.html">Getting Started</a>
    page.</p>
  
  <!--=====================================================================-->
  <h2 id="goals">Goals</h2>
  <!--=====================================================================-->
  
  <p>Different targets require different routines.  The compiler-rt project aims
     to implement these routines in both target-independent C form as well as
     providing heavily optimized assembly versions of the routines in some
     cases.  It should be very easy to bring compiler-rt to support a new
     target by adding the new routines needed by that target.</p>
     
  <p>Where it make sense, the compiler-rt project aims to implement interfaces
     that are drop-in compatible with the libgcc interfaces.</p>

  <!--=====================================================================-->
  <h2 id="features">Features</h2>
  <!--=====================================================================-->

   <p>The current feature set of compiler-rt is:</p>

   <ul>
    <li>Full support for the libgcc interfaces on supported targets.</li>
    <li>High performance hand tuned implementations of commonly used functions
        like __floatundidf in assembly that are dramatically faster than the
        libgcc implementations.</li>
    <li>A target-independent implementation of the Apple "Blocks" runtime
        interfaces.</li>
   </ul>

  <!--=====================================================================-->
  <h2 id="requirements">Platform Support</h2>
  <!--=====================================================================-->

   <p>Compiler-RT is known to work on the following platforms:</p>

   <li>Machine Architectures:
    <ul>
     <li>i386</li>
     <li>X86-64</li>
     <li>SPARC64</li>
     <li>ARM</li>
     <li>PowerPC</li>
     <li>PowerPC 64</li>
    </ul></li>

   <table cellpadding="3" summary="Known Compiler-RT platforms">
   <tr>
     <th>OS</th>
     <th>Arch</th>
   </tr>
   <tr>
     <td>AuroraUX</td>
     <td>All<sup>
   </tr>
   <tr>
     <td>DragonFlyBSD</td>
     <td>All<sup>
   </tr>
   <tr>
     <td>FreeBSD</td>
     <td>All<sup>
   </tr>
   <tr>
     <td>NetBSD</td>
     <td>All<sup>
   </tr>
   <tr>
     <td>Linux</td>
     <td>All<sup>
   </tr>
   <tr>
     <td>Darwin</td>
     <td>All<sup>
   </tr>
   </table>

  <!--=====================================================================-->
  <h2 id="dir-structure">Source Structure</h2>
  <!--=====================================================================-->

   <p>A short explanation of the directory structure of compiler-rt:</p>

   <p>For testing it is possible to build a generic library and an optimized library.
       The optimized library is formed by overlaying the optimized versions onto the generic library.
       Of course, some architectures have additional functions,
       so the optimized library may have functions not found in the generic version.</p>

   <ul>   
    <li> lib/ Is a generic portable implementations.</li>
    <li> lib/(arch) has optimized version for the supported architectures.</li>
   </ul>
    
  <!--=====================================================================-->
  <h2>Get it and get involved!</h2>
  <!--=====================================================================-->
  
  <p>To check out the code, use:</p>
  
  <ul>
  <li>svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt</li>
  <li>mkdir build</li>
  <li>cd build</li>
  <li>cmake ../compiler-rt</li>
  <li>make</li>
  </ul>

  <p>To run the Compiler-RT Test Suit (recommended):</p>

  <ul>
  <li>ctest</li>
  </ul>

  <p>To Install:</p>

  <ul>
  <li>make install</li>
  </ul>
  
  <p>compiler-rt doesn't have its own mailing list, if you have questions please
     email the <a
    href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">llvmdev</a> mailing
    list.  Commits to the compiler-rt SVN module are automatically sent to the
    <a 
  href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">llvm-commits</a>
    mailing list.</p>
</div>
</body>
</html>