Evgeniy Stepanov | da2ff7e | 2015-10-13 23:48:28 +0000 | [diff] [blame] | 1 | |
| 2 | ==================== |
| 3 | Libc++ ABI stability |
| 4 | ==================== |
| 5 | |
| 6 | Libc++ aims to preserve stable ABI to avoid subtle bugs when code built to the old ABI |
| 7 | is linked with the code build to the new ABI. At the same time, libc++ allows ABI-breaking |
| 8 | improvements and bugfixes for the scenarios when ABI change is not a issue. |
| 9 | |
| 10 | To support both cases, libc++ allows specifying the ABI version at the |
| 11 | build time. The version is defined with a cmake option |
| 12 | LIBCXX_ABI_VERSION. Another option LIBCXX_ABI_UNSTABLE can be used to |
| 13 | include all present ABI breaking features. These options translate |
| 14 | into C++ macro definitions _LIBCPP_ABI_VERSION, _LIBCPP_ABI_UNSTABLE. |
| 15 | |
| 16 | Any ABI-changing feature is placed under it's own macro, _LIBCPP_ABI_XXX, which is enabled |
| 17 | based on the value of _LIBCPP_ABI_VERSION. _LIBCPP_ABI_UNSTABLE, if set, enables all features at once. |