.. _contributing:
================================ Contributing to the libc Project
LLVM's libc is being developed as part of the LLVM project so contributions to the libc project should also follow the general LLVM contribution guidelines. Below is a list of open projects that one can start with:
#. Beginner Bugs - Help us tackle good first issues. These bugs have been tagged with the github labels "libc" and "good first issue" by the team as potentially easier places to get started. Please do first check if the bug has an assignee; if so please find another unless there's been no movement on the issue from the assignee, in which place do ask if you can help take over.
#. Cleanup code-style - The libc project follows the general
LLVM style but differs in a
few aspects: We use snake_case for non-constant variable and function
names,CamelCase for internal type names (those which are not defined in a
public header), and CAPITALIZED_SNAKE_CASE for constants. When we started
working on the project, we started using the general LLVM style for
everything. However, for a short period, we switched to the style that is
currently followed by the LLD project.
But, considering that we implement a lot of functions and types whose names
are prescribed by the standards, we have settled on the style described above.
However, we have not switched over to this style in all parts of the libc
directory. So, a simple but mechanical project would be to move the parts
following the old styles to the new style.
#. Integrating with the rest of the LLVM project - There are two parts to this project:
#. One is about adding CMake facilities to optionally link the libc's overlay
static archive (see :ref:overlay_mode) with other LLVM tools/executables.
#. The other is about putting plumbing in place to release the overlay static
archive (see :ref:overlay_mode) as part of the LLVM binary releases.
#. Implement Linux syscall wrappers - A large portion of the POSIX API can be implemented as syscall wrappers on Linux. A good number have already been implemented but many more are yet to be implemented. So, a project of medium complexity would be to implement syscall wrappers which have not yet been implemented.
#. Add a better random number generator - The current random number generator has a very small range. This has to be improved or switched over to a fast random number generator with a large range.
#. Update the clang-tidy lint rules and use them in the build and/or CI -
Currently, the :ref:clang_tidy_checks have gone stale and are mostly unused
by the developers and on the CI builders. This project is about updating
them and reintegrating them back with the build and running them on the
CI builders.
#. double and higher precision math functions - These are under active
development but you can take a shot at those not yet implemented. See
:ref:math for more information.
#. Contribute a new OS/Architecture port - You can contribute a new
operating system or target architecture port. See :ref:porting for more
information.