70 lines
2.3 KiB
ReStructuredText
70 lines
2.3 KiB
ReStructuredText
.. _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.
|