1*ccec91a1Sjoerglibcxxabi 2*ccec91a1Sjoerg========= 3*ccec91a1Sjoerg 4*ccec91a1SjoergThis library implements the Code Sourcery C++ ABI, as documented here: 5*ccec91a1Sjoerg 6*ccec91a1Sjoerghttp://www.codesourcery.com/public/cxx-abi/abi.html 7*ccec91a1Sjoerg 8*ccec91a1SjoergIt is intended to sit below an STL implementation, and provide features required by the compiler for implementation of the C++ language. 9*ccec91a1Sjoerg 10*ccec91a1SjoergCurrent Status 11*ccec91a1Sjoerg-------------- 12*ccec91a1Sjoerg 13*ccec91a1SjoergAt present, the library implements the following parts of the ABI specification: 14*ccec91a1Sjoerg 15*ccec91a1Sjoerg- RTTI classes and support for the dynamic_cast<> operator. 16*ccec91a1Sjoerg- Exception handling. 17*ccec91a1Sjoerg- Thread-safe initializers. 18*ccec91a1Sjoerg 19*ccec91a1SjoergException handling requires the assistance of a stack-unwinding library 20*ccec91a1Sjoergimplementing the low-level parts of the ABI. Either libgcc_s or libunwind 21*ccec91a1Sjoergshould work for this purpose. 22*ccec91a1Sjoerg 23*ccec91a1SjoergThe library depends on various libc features, but does not depend on any C++ 24*ccec91a1Sjoergfeatures not implemented purely in the compiler or in the library itself. 25*ccec91a1Sjoerg 26*ccec91a1SjoergSupported Platforms 27*ccec91a1Sjoerg------------------- 28*ccec91a1Sjoerg 29*ccec91a1SjoergThis code was initially developed on FreeBSD/x86, and has also been tested on FreeBSD/x86-64. It should work on other platforms that use the Code Sourcery ABI, for example Itanium, however this is untested. 30*ccec91a1Sjoerg 31*ccec91a1SjoergThis library also supports the ARM EH ABI. 32*ccec91a1Sjoerg 33*ccec91a1SjoergInstallation 34*ccec91a1Sjoerg------------ 35*ccec91a1Sjoerg 36*ccec91a1SjoergThe default build system does not perform any installation. It is expected that this will be done by at a higher level. The exact installation steps depend on how you plan on deploying libcxxrt. 37*ccec91a1Sjoerg 38*ccec91a1SjoergThere are three files that you may consider installing: 39*ccec91a1Sjoerg 40*ccec91a1Sjoerg- cxxabi.h (and unwind.h and either unwind-arm.h or unwind-itanium.h) 41*ccec91a1Sjoerg- libcxxrt.a 42*ccec91a1Sjoerg- libcxxrt.so 43*ccec91a1Sjoerg 44*ccec91a1SjoergThe first describes the contract between this library and the compiler / STL implementation (lib[std]{cxx,c++}). Its contents should be considered semi-private, as it is probably not a good idea to encourage any code above the STL implementation to depend on it. Doing so will introduce portability issues. You may install this file but I recommend simply copying or linking it into your STL implementation's build directory. 45*ccec91a1Sjoerg 46*ccec91a1SjoergIn general, I recommend against installing both the .a and the .so file. For static linking, the .a file should be linked against the static and dynamic versions of your STL implementation. Statically linking libcxxrt into your STL implementation means that users who dynamically link against the STL implementation can have libcxxrt upgraded automatically when you ship a new version of your STL implementation. 47*ccec91a1Sjoerg 48*ccec91a1SjoergThe other option, installing the .so, is recommended for situations where you have two or more STL implementations and wish to be able to link against both (e.g. where an application links one library using libstdc++ and another using libc++). To support this case, you should link both STL implementations against libcxxrt.so. 49*ccec91a1Sjoerg 50*ccec91a1SjoergSupporting all of these options in the CMake build system is not practical - the amount of effort required to select the one that you want would be more than the effort required to perform the installation from an external script or build system. 51