index.html revision 42ef22bfbf5f8ef00013b02f66ebae61d2b17440
1d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 2d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant "http://www.w3.org/TR/html4/strict.dtd"> 3d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ --> 4d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant<html> 5d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant<head> 6d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 7d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <title>"libc++abi" C++ Standard Library Support</title> 8d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <link type="text/css" rel="stylesheet" href="menu.css"> 9d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <link type="text/css" rel="stylesheet" href="content.css"> 10d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant</head> 11d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 12d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant<body> 13d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant<div id="menu"> 14d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <div> 15d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <a href="http://llvm.org/">LLVM Home</a> 16d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant </div> 17d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 18d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <div class="submenu"> 19d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <label>libc++abi Info</label> 20d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <a href="/index.html">About</a> 21d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant </div> 22d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 23d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <div class="submenu"> 24d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <label>Quick Links</label> 25d8093df5ebe5d755c810980d403af20b32deea5fTanya Lattner <a href="http://lists.llvm.org/mailman/listinfo/cfe-dev">cfe-dev</a> 26d8093df5ebe5d755c810980d403af20b32deea5fTanya Lattner <a href="http://lists.llvm.org/mailman/listinfo/cfe-commits">cfe-commits</a> 27d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <a href="http://llvm.org/bugs/">Bug Reports</a> 28d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <a href="http://llvm.org/svn/llvm-project/libcxxabi/trunk/">Browse SVN</a> 29d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <a href="http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/">Browse ViewVC</a> 30d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant </div> 31d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant</div> 32d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 33d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant<div id="content"> 34d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--*********************************************************************--> 35d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <h1>"libc++abi" C++ Standard Library Support</h1> 36d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--*********************************************************************--> 37d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 38d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <p>libc++abi is a new implementation of low level support for a standard 39d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant C++ library.</p> 40d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 41d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <p>All of the code in libc++abi is <a 42d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant href="http://llvm.org/docs/DeveloperPolicy.html#license">dual licensed</a> 43d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant under the MIT license and the UIUC License (a BSD-like license).</p> 44d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 45d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 46d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <h2 id="goals">Features and Goals</h2> 47d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 48d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 49d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <ul> 50d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <li>Correctness as defined by the C++11 standard.</li> 51f59526da20aa9e8606881a6dc064a3981e91ff37Sylvestre Ledru <li>Provide a portable sublayer to ease the porting of <a href="http://libcxx.llvm.org/">libc++</a></li> 52628bfc461df5d87a8fbf7d10cce7325245fd7d7eHoward Hinnant <li>On Mac OS X, be ABI compatible with the existing low-level support.</li> 53d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant </ul> 54d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 55d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 56d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <h2 id="requirements">Platform Support</h2> 57d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 58d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 59d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <p>libc++abi is known to work on the following platforms, using clang.</p> 60d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 61d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <ul> 62de2b1090d44a81c97ff3f1c21fac6088a1e28465Howard Hinnant <li>Darwin</li> 63d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant </ul> 64d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 65d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 66d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <h2 id="dir-structure">Current Status</h2> 67d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 68d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 69de2b1090d44a81c97ff3f1c21fac6088a1e28465Howard Hinnant <p>libc++abi is complete. <a href="spec.html">Here</a> is a 70de2b1090d44a81c97ff3f1c21fac6088a1e28465Howard Hinnant list of functionality.</p> 71d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 72d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 73d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <h2>Get it and get involved!</h2> 74d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 75d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 76d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <p>To check out the code, use:</p> 77d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 78d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <ul> 79d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <li><code>svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi</code></li> 80d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant </ul> 81d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 82e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert <p>To build:</p> 83e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert <ul> 84e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert <li>Check out libcxxabi into <code>llvm/projects</code></li> 85e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert <li><code>cd llvm</code></li> 86e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert <li><code>mkdir build && cd build</code></li> 87e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert <li><code>cmake .. # on linux you may need to prefix with CC=clang CXX=clang++</code></li> 88e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert <li><code>make</code></li> 89e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert </ul> 90e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert 91e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert <p>To do a standalone build:</p> 92e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert <ul> 939a9e93916519f8a27ea79e079ecbe22f24c6b880Eric Fiselier <li> 949a9e93916519f8a27ea79e079ecbe22f24c6b880Eric Fiselier Check out the <a href="http://libcxx.llvm.org">libcxx source</a> tree. 959a9e93916519f8a27ea79e079ecbe22f24c6b880Eric Fiselier </li> 96e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert <li><code>cd libcxxabi</code></li> 97e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert <li><code>mkdir build && cd build</code></li> 989a9e93916519f8a27ea79e079ecbe22f24c6b880Eric Fiselier <li><code>cmake -DLIBCXXABI_LIBCXX_PATH=path/to/libcxx .. # on 99fd961bd8cdb57b57e8e34779a2b44db40cf4fb30Dan Albert linux you may need -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++</code></li> 100e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert <li><code>make</code></li> 101e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert </ul> 102ffe1ba2da2bd30e5e4bc723fc2368c28a687df02Eric Fiselier <p> By default CMake uses <code>llvm-config</code> to locate the required 103ffe1ba2da2bd30e5e4bc723fc2368c28a687df02Eric Fiselier LLVM sources. If CMake cannot find <code>llvm-config</code> then you must 104ffe1ba2da2bd30e5e4bc723fc2368c28a687df02Eric Fiselier configure CMake using either of the following options. 105ffe1ba2da2bd30e5e4bc723fc2368c28a687df02Eric Fiselier </p> 106ffe1ba2da2bd30e5e4bc723fc2368c28a687df02Eric Fiselier <ul> 10742ef22bfbf5f8ef00013b02f66ebae61d2b17440Eric Fiselier <li><code>-DLLVM_CONFIG_PATH=path/to/llvm-config</code></li> 108ffe1ba2da2bd30e5e4bc723fc2368c28a687df02Eric Fiselier <li><code>-DLLVM_PATH=path/to/llvm-source-root</code></li> 109ffe1ba2da2bd30e5e4bc723fc2368c28a687df02Eric Fiselier </ul> 110ffe1ba2da2bd30e5e4bc723fc2368c28a687df02Eric Fiselier 111ffe1ba2da2bd30e5e4bc723fc2368c28a687df02Eric Fiselier </p> 112e11c1a7accabb346cbb6df59681675fe3f8d8ccbDan Albert 113fd961bd8cdb57b57e8e34779a2b44db40cf4fb30Dan Albert <p>To run the tests:</p> 114fd961bd8cdb57b57e8e34779a2b44db40cf4fb30Dan Albert <ul> 115fd961bd8cdb57b57e8e34779a2b44db40cf4fb30Dan Albert <li><code>make check-libcxxabi</code></li> 116fd961bd8cdb57b57e8e34779a2b44db40cf4fb30Dan Albert </ul> 117fd961bd8cdb57b57e8e34779a2b44db40cf4fb30Dan Albert <p>Note: in a standalone build, the system's libc++ will be used for tests. If 118fd961bd8cdb57b57e8e34779a2b44db40cf4fb30Dan Albert the system's libc++ was statically linked against libc++abi (or linked against 119fd961bd8cdb57b57e8e34779a2b44db40cf4fb30Dan Albert a different ABI library), this may interfere with test results.</p> 120fd961bd8cdb57b57e8e34779a2b44db40cf4fb30Dan Albert 121d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <p>Send discussions to the 122d8093df5ebe5d755c810980d403af20b32deea5fTanya Lattner (<a href="http://lists.llvm.org/mailman/listinfo/cfe-dev">clang mailing list</a>).</p> 123d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 124c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow <!--=====================================================================--> 125c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow <h2>Frequently asked questions</h2> 126c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow <!--=====================================================================--> 127c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow 128c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow <p>Q: Why are the destructors for the standard exception classes defined in libc++abi? 129c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow They're just empty, can't they be defined inline?</p> 130c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow <p>A: The destructors for them live in libc++abi because they are "key" functions. 131c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow The Itanium ABI describes a "key" function as the first virtual declared. 132c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow And wherever the key function is defined, that is where the <code>type_info</code> gets defined. 133c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow And in libc++ types are the same type if and only if they have the same <code>type_info</code> 134c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow (as in there must be only one type info per type in the entire application). 135c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow And on OS X, libstdc++ and libc++ share these exception types. 136c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow So to be able to throw in one dylib and catch in another (a <code>std::exception</code> for example), 137c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow there must be only one <code>std::exception type_info</code> in the entire app. 138c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow That typeinfo gets laid down beside <code>~exception()</code> in libc++abi (for both libstdc++ and libc++).</p> 139c9d6b42449f23729acc37ad183e65d6146755a24Marshall Clow <p>--Howard Hinnant</p> 140d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 141d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant</div> 142d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant</body> 143d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant</html> 144