.. _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/
.yaml`` (or ``libc/include/sys/
.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/
/.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/
/.cpp`` (or ``libc/src/
//.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/
/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///entrypoints.txt`` * Add the new function to the list of active entrypoints. 6. Testing ---------- Create tests to verify the implementation. * **File**: ``libc/test/src/
/_test.cpp`` * Add corresponding tests using the internal testing framework. * Update the ``CMakeLists.txt`` in the test directory (``libc/test/src/
/CMakeLists.txt``) to include the new test target.