diff --git a/libc/docs/code_style.rst b/libc/docs/code_style.rst --- a/libc/docs/code_style.rst +++ b/libc/docs/code_style.rst @@ -24,6 +24,27 @@ #. **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 ========================================