[libc-commits] [libc] c1832e9 - [libc][doc] Add macros guidelines

Guillaume Chatelet via libc-commits libc-commits at lists.llvm.org
Tue Feb 7 01:29:54 PST 2023


Author: Guillaume Chatelet
Date: 2023-02-07T09:29:36Z
New Revision: c1832e903e000165a8ca808aa9204220bd22143c

URL: https://github.com/llvm/llvm-project/commit/c1832e903e000165a8ca808aa9204220bd22143c
DIFF: https://github.com/llvm/llvm-project/commit/c1832e903e000165a8ca808aa9204220bd22143c.diff

LOG: [libc][doc] Add macros guidelines

This is a first follow up on the libc tuning RFC
https://discourse.llvm.org/t/rfc-llvm-libc-tuning/67980

Once we agree on the format. I'll land a couple of patches to match the guidelines.

Differential Revision: https://reviews.llvm.org/D143413

Added: 
    

Modified: 
    libc/docs/code_style.rst

Removed: 
    


################################################################################
diff  --git a/libc/docs/code_style.rst b/libc/docs/code_style.rst
index f7852291c5303..b9c71a62b4565 100644
--- a/libc/docs/code_style.rst
+++ b/libc/docs/code_style.rst
@@ -24,6 +24,27 @@ 
diff erences are as follows:
 #. **Public names** - These are the names as prescribed by the standards and
    will follow the style as prescribed by the standards.
 
+Macro style
+===========
+
+We define two kinds of macros: **code defined** and **build defined** macros.
+
+#. **Build defined** macros are generated by `CMake` or `Bazel` and are passed
+   down to the compiler with the ``-D`` command line flag. They start with the
+   ``LIBC_COPT_`` prefix. They are used to tune the behavior of the libc.
+   They either denote an action or define a constant.
+
+#. **Code defined** macros are defined within the ``src/__support/macros``
+   folder. They all start with the ``LIBC_`` prefix. They are of two kinds
+
+   * **Properties** - Build related properties like used compiler, target
+     architecture or enabled CPU features defined by introspecting compiler
+     defined preprocessor defininitions. e.g., ``LIBC_TARGET_IS_ARM``,
+     ``LIBC_TARGET_HAS_AVX2``, ``LIBC_COMPILER_IS_CLANG``, ...
+   * **Attributes** - Compiler agnostic attributes or functions to handle
+     specific operations. e.g., ``LIBC_INLINE``, ``LIBC_NO_LOOP_UNROLL``,
+     ``LIBC_LIKELY``, ``LIBC_INLINE_ASM``.
+
 Inline functions defined in header files
 ========================================
 


        


More information about the libc-commits mailing list