144 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			HTML
		
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			HTML
		
	
	
	
| <!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 libraries</h1>
 | |
|   <!--*********************************************************************-->
 | |
|   
 | |
|   <p>The compiler-rt project consists of:
 | |
|   <ul>
 | |
|   <li>
 | |
|     <p><b>builtins</b> - 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 builtins library provides
 | |
|     optimized implementations of this and other low-level routines, either in
 | |
|     target-independent C form, or as a heavily-optimized assembly.</p>
 | |
|     <p>builtins provides full support for the libgcc interfaces on supported
 | |
|     targets and high performance hand tuned implementations of commonly used
 | |
|     functions like __floatundidf in assembly that are dramatically faster than
 | |
|     the libgcc implementations. It should be very easy to bring builtins to
 | |
|     support a new target by adding the new routines needed by that target.</p>
 | |
|   </li>
 | |
|   <li>
 | |
|     <b>sanitizer runtimes</b> - runtime libraries that are required to run
 | |
|     the code with sanitizer instrumentation. This includes runtimes for:
 | |
|     <ul>
 | |
|     <li><a href="http://clang.llvm.org/docs/AddressSanitizer.html">AddressSanitizer</a></li>
 | |
|     <li><a href="http://clang.llvm.org/docs/ThreadSanitizer.html">ThreadSanitizer</a></li>
 | |
|     <li><a href="http://clang.llvm.org/docs/UsersManual.html#opt-fsanitize-undefined">UndefinedBehaviorSanitizer</a></li>
 | |
|     <li><a href="http://clang.llvm.org/docs/MemorySanitizer.html">MemorySanitizer</a></li>
 | |
|     <li><a href="http://clang.llvm.org/docs/LeakSanitizer.html">LeakSanitizer</a></li>
 | |
|     <li><a href="http://clang.llvm.org/docs/DataFlowSanitizer.html">DataFlowSanitizer</a></li>
 | |
|     </ul>
 | |
|   </li>
 | |
|   <li>
 | |
|     <b>profile</b> - library which is used to collect coverage information.
 | |
|   </li>
 | |
|   <li>
 | |
|     <b>BlocksRuntime</b> - a target-independent implementation of Apple "Blocks"
 | |
|     runtime interfaces.
 | |
|   </li>
 | |
|   </ul>
 | |
|   </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. 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="requirements">Platform Support</h2>
 | |
|   <!--=====================================================================-->
 | |
| 
 | |
|    <p><b>builtins</b> is known to work on the following platforms:</p>
 | |
|    <ul>
 | |
|    <li>Machine Architectures: i386, X86-64, SPARC64, ARM, PowerPC, PowerPC 64.</li>
 | |
|    <li>OS: AuroraUX, DragonFlyBSD, FreeBSD, NetBSD, Linux, Darwin.</li>
 | |
|    </ul>
 | |
| 
 | |
|    <p>Most sanitizer runtimes are supported only on Linux x86-64. See tool-specific
 | |
|    pages in <a href="http://clang.llvm.org/docs/index.html">Clang docs</a> for more
 | |
|    details.</p>
 | |
| 
 | |
|   <!--=====================================================================-->
 | |
|   <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> include/ contains headers that can be included in user programs (for example,
 | |
|          users may directly call certain function from sanitizer runtimes).</li>
 | |
|     <li> lib/ contains libraries implementations. </li>
 | |
|     <li> lib/builtins is a generic portable implementation of <b>builtins</b> routines.</li>
 | |
|     <li> lib/builtins/(arch) has optimized versions of some routines
 | |
|          for the supported architectures.</li>
 | |
|     <li> test/ contains test suites for compiler-rt runtimes.</li>
 | |
|    </ul>
 | |
|     
 | |
|   <!--=====================================================================-->
 | |
|   <h2>Get it and get involved!</h2>
 | |
|   <!--=====================================================================-->
 | |
|   
 | |
|   <p>Generally, you need to build LLVM/Clang in order to build compiler-rt. You can
 | |
|   either follow the Clang's
 | |
|   <a href="http://clang.llvm.org/get_started.html">Getting Started</a> page, or
 | |
|   <a href="http://llvm.org/docs/CMake.html#quick-start">build LLVM</a>
 | |
|   separately to get llvm-config binary, and then run:
 | |
| 
 | |
|   <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 -DLLVM_CONFIG_PATH=/path/to/llvm-config</li>
 | |
|   <li>make</li>
 | |
|   </ul>
 | |
| 
 | |
|   <p>Tests for sanitizer runtimes are ported to
 | |
|   <a href="http://llvm.org/docs/CommandGuide/lit.html">llvm-lit</a> and are
 | |
|   run by <b>make check-all</b> command in LLVM/Clang/compiler-rt build tree.</p>
 | |
| 
 | |
|   <p>compiler-rt libraries are installed to the system with <b>make install</b>
 | |
|   command in either LLVM/Clang/compiler-rt or standalone
 | |
|   compiler-rt build tree.</p>
 | |
| 
 | |
|   <p>compiler-rt doesn't have its own mailing list, if you have questions please
 | |
|      email the <a
 | |
|     href="http://lists.llvm.org/mailman/listinfo/llvm-dev">llvm-dev</a> mailing
 | |
|     list.  Commits to the compiler-rt SVN module are automatically sent to the
 | |
|     <a 
 | |
|   href="http://lists.llvm.org/mailman/listinfo/llvm-commits">llvm-commits</a>
 | |
|     mailing list.</p>
 | |
| </div>
 | |
| </body>
 | |
| </html>
 |