| (implementing_a_function)= |
| |
| # Implementing a New Function |
| |
| This guide provides a step-by-step walkthrough for adding a new function to LLVM-libc. |
| |
| ## Overview |
| |
| Adding a new function involves several steps, from updating the public specification to implementing and testing the code. Below is the standard checklist for contributors. |
| |
| ## Step-by-Step Checklist |
| |
| ### 1. Header Entry |
| |
| Update the standard YAML file that describes the public header to ensure the function is included in the generated public header. |
| |
| - **File**: `libc/include/<header>.yaml` (or `libc/include/sys/<header>.yaml` for system headers) |
| - Add the new function to the `functions` list. |
| - Specify its name, return type, and arguments. |
| - List the standards it complies with (e.g., `stdc`, `POSIX`). |
| |
| ### 2. Header Declaration |
| |
| Declare the function in the internal implementation header file. This file is used by other internal code. |
| |
| - **File**: `libc/src/<header>/<func>.h` |
| - Follow the structure defined in {ref}`implementation_standard`. |
| - Ensure the declaration is inside the `LIBC_NAMESPACE_DECL` namespace. |
| |
| ### 3. Implementation |
| |
| Write the actual code for the function. |
| |
| - **File**: `libc/src/<header>/<func>.cpp` (or `libc/src/<header>/<os>/<func>.cpp` for platform-specific implementations) |
| - Use the `LLVM_LIBC_FUNCTION` macro. |
| - Refer to {ref}`code_style` for naming and layout conventions. |
| |
| ### 4. CMake Rule |
| |
| Add a CMake target for the new function so it can be compiled. |
| |
| - **File**: `libc/src/<header>/CMakeLists.txt` |
| - Add an `add_entrypoint_object` rule for the new file. |
| - List all internal dependencies correctly to ensure proper build order. |
| |
| ### 5. Platform Registration |
| |
| Register the new entrypoint for the target platforms to include it in the build. |
| |
| - **File**: `libc/config/<os>/<arch>/entrypoints.txt` |
| - Add the new function to the list of active entrypoints. |
| |
| ### 6. Testing |
| |
| Create tests to verify the implementation. |
| |
| - **File**: `libc/test/src/<header>/<func>_test.cpp` |
| - Add corresponding tests using the internal testing framework. |
| - Update the `CMakeLists.txt` in the test directory (`libc/test/src/<header>/CMakeLists.txt`) to include the new test target. |