.. _configure_options:

=================================
Adding new libc configure options
=================================

`There are a number of configure options <../configure.html>`_ which can be used
to configure the libc build. The config system is driven by a set of
hierarchical JSON files. At the top of the hierarchy is a JSON file by name
``config.json`` in the ``config`` directory. This JSON file lists the libc
options which affect all platforms. The default value for the option and a short
description about it listed against each option. For example:

.. code-block:: json

   {
     "printf": {
       "LIBC_CONF_PRINTF_DISABLE_FLOAT": {
         "value": false,
         "doc": "Disable printing floating point values in printf and friends."
       }
     }
   }

The above config indicates that the option ``LIBC_CONF_PRINTF_DISABLE_FLOAT``
has a value of ``false``. A platform, say the baremetal platform, can choose
to override this value in its ``config.json`` file in the ``config/baremetal``
directory with the following contents:

.. code-block:: json

   {
     "printf": {
       "LIBC_CONF_PRINTF_DISABLE_FLOAT": {
         "value": true
       }
     }
   }

Here, the config for the baremetal platform overrides the common ``false``
value of the ``LIBC_CONF_PRINTF_DISABLE_FLOAT`` with the ``true`` value.

Config JSON format
==================

Named tags
----------

As can be noted from the above examples, ``config.json`` files contains a
top-level dictionary. The keys of this dictionary are the names of
*grouping-tags*. A grouping-tag is nothing but a named tag to refer to a related
group of libc options. In the above example, a tag named ``printf`` is used to
group all libc options which affect the behavior of ``printf`` and friends.

Tag values
----------

The value corresponding to each grouping tag is also a dictionary called the
*option-dictionary*. The keys of the option-dictionary are the names of the libc
options belonging to that grouping tag. For the ``printf`` tag in the above
example, the option-dictionary is:

.. code-block:: json

   {
     "LIBC_CONF_PRINTF_DISABLE_FLOAT": {
       "value": false,
       "doc":
     }
   }

The value corresponding to an option key in the option-dictionary is another
dictionary with two keys: ``"value"`` and ``"doc"``. The ``"value"`` key has
the value of the option listed against it, and the ``"doc"`` key has a short
description of the option listed against it. Note that only the main config
file ``config/config.json`` includes the ``"doc"`` key. Options which are of
``ON``/``OFF`` kind take boolean values ``true``/``false``. Other types of
options can take an integral or string value as suitable for that option. In
the above option-dictionary, the option-key ``LIBC_CONF_PRINTF_DISABLE_FLOAT``
is of boolean type with value ``true``.

Option name format
------------------

The option names, or the keys of a option-dictionary, have the following format:

.. code-block:: none

   LIBC_CONF_<UPPER_CASE_TAG_NAME>_<ACTION_INDICATING_THE_INTENDED_SEMANTICS>

The option name used in the above examples, ``LIBC_CONF_PRINTF_DISABLE_FLOAT``
to disable printing of floating point numbers, follows this format: It has the
prefix ``LIBC_CONF_``, followed by the grouping-tag name ``PRINTF`` in upper
case, followed by the action to disable floating point number printing
``LIBC_CONF_PRINTF_DISABLE_FLOAT``.

Mechanics of config application
===============================

Config reading
--------------

At libc config time, three different ``config.json`` files are read in the
following order:

1. ``config/config.json``
2. ``config/<platform or OS>/config.json`` if present.
3. ``config/<platform or OS>/<target arch>/config.json`` if present.

Each successive ``config.json`` file overrides the option values set by
previously read ``config.json`` files. Likewise, a similarly named command line
option to the cmake command will override the option values specified in all or
any of these ``config.json`` files. That is, users will be able to override the
config options from the command line.

Config application
------------------

Local to the directory where an option group is relevant, suitable build logic
should convert the CMake config options to appropriate compiler and/or linker
flags. Those compile/link flags can be used in listing the affected targets as
follows:

.. code-block:: cmake

   add_object_library(
    ...
    COMPILE_OPTIONS
      ${common_printf_compile_options}
      ... # Other compile options affecting this target irrespective of the
          # libc config options
   )

Note that the above scheme is only an example and not a prescription.
Developers should employ a scheme appropriate to the option being added.

Automatic doc update
====================

The CMake configure step automatically generates the user document
``doc/configure.rst``, which contains user information about the libc configure
options, using the information in the main ``config/config.json`` file.
An update to ``config/config.json`` will trigger reconfiguration by CMake, which
in turn will regenerate the documentation in ``doc/configure.rst``.
