[flang] Fix length handling in character kind implicit conversion (#74586)
[llvm-project.git] / libc / docs / contributing.rst
blob50151348f8805728ae5d5d112959433c4a2f7186
1 .. _contributing:
3 ================================
4 Contributing to the libc Project
5 ================================
7 LLVM's libc is being developed as part of the LLVM project so contributions
8 to the libc project should also follow the general LLVM
9 `contribution guidelines <https://llvm.org/docs/Contributing.html>`_. Below is
10 a list of open projects that one can start with:
12 #. **Cleanup code-style** - The libc project follows the general
13    `LLVM style <https://llvm.org/docs/CodingStandards.html>`_ but differs in a
14    few aspects: We use ``snake_case`` for non-constant variable and function
15    names,``CamelCase`` for internal type names (those which are not defined in a
16    public header), and ``CAPITALIZED_SNAKE_CASE`` for constants. When we started
17    working on the project, we started using the general LLVM style for
18    everything. However, for a short period, we switched to the style that is
19    currently followed by the `LLD project <https://github.com/llvm/llvm-project/tree/main/lld>`_.
20    But, considering that we implement a lot of functions and types whose names
21    are prescribed by the standards, we have settled on the style described above.
22    However, we have not switched over to this style in all parts of the ``libc``
23    directory. So, a simple but mechanical project would be to move the parts
24    following the old styles to the new style.
26 #. **Integrating with the rest of the LLVM project** - There are two parts to
27    this project:
29    #. One is about adding CMake facilities to optionally link the libc's overlay
30       static archive (see :ref:`overlay_mode`) with other LLVM tools/executables.
31    #. The other is about putting plumbing in place to release the overlay static
32       archive (see :ref:`overlay_mode`) as part of the LLVM binary releases. 
34 #. **Implement Linux syscall wrappers** - A large portion of the POSIX API can
35    be implemented as syscall wrappers on Linux. A good number have already been
36    implemented but many more are yet to be implemented. So, a project of medium
37    complexity would be to implement syscall wrappers which have not yet been
38    implemented.
40 #. **Add a better random number generator** - The current random number
41    generator has a very small range. This has to be improved or switched over
42    to a fast random number generator with a large range.
44 #. **Update the clang-tidy lint rules and use them in the build and/or CI** -
45    Currently, the :ref:`clang_tidy_checks` have gone stale and are mostly unused
46    by the developers and on the CI builders. This project is about updating
47    them and reintegrating them back with the build and running them on the
48    CI builders.
50 #. **double and higher precision math functions** - These are under active
51    development but you can take a shot at those not yet implemented. See
52    :ref:`math` for more information.
54 #. **Contribute a new OS/Architecture port** - You can contribute a new
55    operating system or target architecture port. See :ref:`porting` for more
56    information.