Contributing.rst revision 1.1.1.1 1 1.1 joerg .. _ContributingToLibcxx:
2 1.1 joerg
3 1.1 joerg ======================
4 1.1 joerg Contributing to libc++
5 1.1 joerg ======================
6 1.1 joerg
7 1.1 joerg .. contents::
8 1.1 joerg :local:
9 1.1 joerg
10 1.1 joerg Please read `this document <https://www.llvm.org/docs/Contributing.html>`__ on general rules to contribute to LLVM projects.
11 1.1 joerg
12 1.1 joerg Tasks and processes
13 1.1 joerg ===================
14 1.1 joerg
15 1.1 joerg This file contains notes about various tasks and processes specific to libc++.
16 1.1 joerg
17 1.1 joerg Looking for pre-existing reviews
18 1.1 joerg ================================
19 1.1 joerg
20 1.1 joerg Before you start working on any feature, please take a look at the open reviews
21 1.1 joerg to avoid duplicating someone else's work. You can do that by going to the website
22 1.1 joerg where code reviews are held, `Differential <https://reviews.llvm.org/differential>`__,
23 1.1 joerg and clicking on ``Libc++ Open Reviews`` in the sidebar to the left. If you see
24 1.1 joerg that your feature is already being worked on, please consider chiming in instead
25 1.1 joerg of duplicating work!
26 1.1 joerg
27 1.1 joerg Post-Release TODO
28 1.1 joerg =================
29 1.1 joerg
30 1.1 joerg After branching for an LLVM release:
31 1.1 joerg
32 1.1 joerg 1. Update ``_LIBCPP_VERSION`` in ``include/__config``
33 1.1 joerg 2. Update the ``include/__libcpp_version`` file
34 1.1 joerg 3. Update the version number in ``docs/conf.py``
35 1.1 joerg
36 1.1 joerg Modifying feature-test macros
37 1.1 joerg =============================
38 1.1 joerg
39 1.1 joerg When adding or updating feature-test macros, you should update the corresponding tests.
40 1.1 joerg To do that, modify ``feature_test_macros`` table in the script
41 1.1 joerg ``utils/generate_feature_test_macro_components.py``, run it, and commit updated
42 1.1 joerg files. Running ``utils/generate_feature_test_macro_components.py`` should never
43 1.1 joerg generate diffs in a clean checkout; feel free to run it in your local checkout
44 1.1 joerg any time you want.
45 1.1 joerg
46 1.1 joerg
47 1.1 joerg Adding a new header TODO
48 1.1 joerg ========================
49 1.1 joerg
50 1.1 joerg When adding a new header to libc++:
51 1.1 joerg
52 1.1 joerg 1. Add a test under ``test/libcxx`` that the new header defines ``_LIBCPP_VERSION``. See ``test/libcxx/algorithms/version.pass.cpp`` for an example.
53 1.1 joerg 2. Run ``python utils/generate_header_tests.py``; verify and commit the changes.
54 1.1 joerg 3. Modify ``python utils/generate_header_inclusion_tests.py``; run it; verify and commit the changes.
55 1.1 joerg 4. Create a submodule in ``include/module.modulemap`` for the new header.
56 1.1 joerg 5. Update the ``include/CMakeLists.txt`` file to include the new header.
57 1.1 joerg
58 1.1 joerg Exporting new symbols from the library
59 1.1 joerg ======================================
60 1.1 joerg
61 1.1 joerg When exporting new symbols from libc++, you must update the ABI lists located in ``lib/abi``.
62 1.1 joerg To test whether the lists are up-to-date, please run the target ``check-cxx-abilist``.
63 1.1 joerg To regenerate the lists, use the target ``generate-cxx-abilist``.
64 1.1 joerg The ABI lists must be updated for all supported platforms; currently Linux and
65 1.1 joerg Apple. If you don't have access to one of these platforms, you can download an
66 1.1 joerg updated list from the failed build at
67 1.1 joerg `Buildkite <https://buildkite.com/llvm-project/libcxx-ci>`__.
68 1.1 joerg Look for the failed build and select the ``artifacts`` tab. There, download the
69 1.1 joerg abilist for the platform, e.g.:
70 1.1 joerg
71 1.1 joerg * C++20 for the Linux platform.
72 1.1 joerg * MacOS C++20 for the Apple platform.
73