2020-12-02 15:52:35 +08:00
.. _ContributingToLibcxx:
======================
Contributing to libc++
======================
2021-07-15 22:19:39 +08:00
This file contains notes about various tasks and processes specific to contributing
to libc++. If this is your first time contributing, please also read `this document
<https://www.llvm.org/docs/Contributing.html> `__ on general rules for contributing to LLVM.
2020-12-02 15:52:35 +08:00
2021-07-15 22:19:39 +08:00
For libc++, please make sure you follow `these instructions <https://www.llvm.org/docs/Phabricator.html#requesting-a-review-via-the-command-line> `_
for submitting a code review from the command-line using `` arc `` , since we have some
automation (e.g. CI) that depends on the review being submitted that way.
2020-12-02 15:52:35 +08:00
2021-01-09 06:23:16 +08:00
Looking for pre-existing reviews
================================
Before you start working on any feature, please take a look at the open reviews
to avoid duplicating someone else's work. You can do that by going to the website
where code reviews are held, `Differential <https://reviews.llvm.org/differential> `__ ,
and clicking on `` Libc++ Open Reviews `` in the sidebar to the left. If you see
that your feature is already being worked on, please consider chiming in instead
of duplicating work!
2021-07-15 22:19:39 +08:00
Pre-commit check list
=====================
2020-12-02 15:52:35 +08:00
2021-07-15 22:19:39 +08:00
Before committing or creating a review, please go through this check-list to make
sure you don't forget anything:
2020-12-02 15:52:35 +08:00
2021-07-15 22:19:39 +08:00
- Do you have tests for every public class and/or function you're adding or modifying?
- Did you update the synopsis of the relevant headers?
- Did you update the relevant files to track implementation status (in `` docs/Status/ `` )?
2021-07-20 00:34:56 +08:00
- Did you mark all functions and type declarations with the :ref: `proper visibility macro <visibility-macros>` ?
2021-07-15 22:19:39 +08:00
- If you added a header:
2020-12-02 15:52:35 +08:00
2021-07-15 22:19:39 +08:00
- Did you add it to `` include/module.modulemap `` ?
- Did you add it to `` include/CMakeLists.txt `` ?
- If it's a public header, did you add a test under `` test/libcxx `` that the new header defines `` _LIBCPP_VERSION `` ? See `` test/libcxx/algorithms/version.pass.cpp `` for an example. NOTE: This should be automated.
- If it's a public header, did you update `` utils/generate_header_inclusion_tests.py `` ?
2020-12-10 15:37:21 +08:00
2021-07-15 22:19:39 +08:00
- Did you add the relevant feature test macro(s) for your feature? Did you update the `` generate_feature_test_macro_components.py `` script with it?
- Did you run the `` libcxx-generate-files `` target and verify its output?
2021-03-25 02:54:40 +08:00
2021-07-15 22:19:39 +08:00
Post-release check list
=======================
2020-12-10 15:37:21 +08:00
2021-07-15 22:19:39 +08:00
After branching for an LLVM release:
2020-12-02 15:52:35 +08:00
2021-07-15 22:19:39 +08:00
1. Update `` _LIBCPP_VERSION `` in `` include/__config ``
2. Update the `` include/__libcpp_version `` file
3. Update the version number in `` docs/conf.py ``
2020-12-02 15:52:35 +08:00
Exporting new symbols from the library
======================================
2021-03-25 02:54:40 +08:00
When exporting new symbols from libc++, you must update the ABI lists located in `` lib/abi `` .
2020-12-02 15:52:35 +08:00
To test whether the lists are up-to-date, please run the target `` check-cxx-abilist `` .
To regenerate the lists, use the target `` generate-cxx-abilist `` .
2021-03-25 02:54:40 +08:00
The ABI lists must be updated for all supported platforms; currently Linux and
Apple. If you don't have access to one of these platforms, you can download an
updated list from the failed build at
`Buildkite <https://buildkite.com/llvm-project/libcxx-ci> `__ .
Look for the failed build and select the `` artifacts `` tab. There, download the
abilist for the platform, e.g.:
* C++20 for the Linux platform.
* MacOS C++20 for the Apple platform.