mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-10-07 10:54:01 +00:00
[libc] Generate configure.rst from the JSON config information. (#65791)
This commit is contained in:
parent
37b538819b
commit
ca2a4e76ea
@ -143,6 +143,7 @@ foreach(opt IN LISTS global_config)
|
|||||||
message(STATUS "${opt_name}: ${opt_value}")
|
message(STATUS "${opt_name}: ${opt_value}")
|
||||||
set(${opt_name} ${opt_value})
|
set(${opt_name} ${opt_value})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
generate_config_doc(${main_config_file} ${LIBC_SOURCE_DIR}/docs/configure.rst)
|
||||||
load_libc_config(${LIBC_SOURCE_DIR}/config/${LIBC_TARGET_OS}/config.json ${cmd_line_conf})
|
load_libc_config(${LIBC_SOURCE_DIR}/config/${LIBC_TARGET_OS}/config.json ${cmd_line_conf})
|
||||||
load_libc_config(${LIBC_SOURCE_DIR}/config/${LIBC_TARGET_OS}/${LIBC_TARGET_ARCHITECTURE}/config.json ${cmd_line_conf})
|
load_libc_config(${LIBC_SOURCE_DIR}/config/${LIBC_TARGET_OS}/${LIBC_TARGET_ARCHITECTURE}/config.json ${cmd_line_conf})
|
||||||
|
|
||||||
|
@ -47,7 +47,6 @@ function(read_libc_config config_file opt_list)
|
|||||||
# to load. If there are no config options, it is better to remove that
|
# to load. If there are no config options, it is better to remove that
|
||||||
# config.json file instead of including an empty file.
|
# config.json file instead of including an empty file.
|
||||||
message(FATAL_ERROR "${config_file}: Does not contain any config option groups")
|
message(FATAL_ERROR "${config_file}: Does not contain any config option groups")
|
||||||
return()
|
|
||||||
endif()
|
endif()
|
||||||
math(EXPR group_count_1 "${group_count} - 1")
|
math(EXPR group_count_1 "${group_count} - 1")
|
||||||
|
|
||||||
@ -135,3 +134,84 @@ function(load_libc_config config_file)
|
|||||||
set(${opt_name} ${opt_value} PARENT_SCOPE)
|
set(${opt_name} ${opt_value} PARENT_SCOPE)
|
||||||
endforeach()
|
endforeach()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
function(generate_config_doc config_file doc_file)
|
||||||
|
if(NOT EXISTS ${config_file})
|
||||||
|
message(FATAL_ERROR "${config_file} does not exist")
|
||||||
|
endif()
|
||||||
|
file(READ ${config_file} json_config)
|
||||||
|
string(JSON group_count ERROR_VARIABLE json_error LENGTH ${json_config})
|
||||||
|
if(json_error)
|
||||||
|
message(FATAL_ERROR "${config_file}: ${json_error}")
|
||||||
|
endif()
|
||||||
|
if(${group_count} EQUAL 0)
|
||||||
|
message(FATAL_ERROR "${config_file}: Does not contain any config option groups")
|
||||||
|
endif()
|
||||||
|
math(EXPR group_count_1 "${group_count} - 1")
|
||||||
|
|
||||||
|
set(doc_string ".. _configure:\n"
|
||||||
|
"..\n"
|
||||||
|
" Do not edit this file directly. CMake will auto generate it.\n"
|
||||||
|
" If the changes are intended, add this file to your commit.\n"
|
||||||
|
"\n"
|
||||||
|
"==========================\n"
|
||||||
|
"Configure Options\n"
|
||||||
|
"==========================\n"
|
||||||
|
"\n"
|
||||||
|
"Below is the full set of options one can use to configure the libc build.\n"
|
||||||
|
"An option can be given an explicit value on the CMake command line using\n"
|
||||||
|
"the following syntax:\n"
|
||||||
|
"\n"
|
||||||
|
".. code-block:: sh\n"
|
||||||
|
"\n"
|
||||||
|
" $> cmake <other build options> -D<libc config option name>=<option value> <more options>\n"
|
||||||
|
"\n"
|
||||||
|
"For example:\n"
|
||||||
|
"\n"
|
||||||
|
".. code-block:: sh\n"
|
||||||
|
"\n"
|
||||||
|
" $> cmake <other build options> -DLIBC_CONF_PRINTF_DISABLE_FLOAT=ON <more options>\n"
|
||||||
|
"\n"
|
||||||
|
"See the main ``config/config.json``, and the platform and architecture specific\n"
|
||||||
|
"overrides in ``config/<platform>/config.json`` and ``config/<platform>/<arch>/config.json,``\n"
|
||||||
|
"to learn about the defaults for your platform and target.\n"
|
||||||
|
"\n")
|
||||||
|
|
||||||
|
foreach(group_num RANGE ${group_count_1})
|
||||||
|
string(JSON group_name ERROR_VARIABLE json_error MEMBER ${json_config} ${group_num})
|
||||||
|
if(json_error)
|
||||||
|
message(FATAL_ERROR "${config_file}: ${json_error}")
|
||||||
|
endif()
|
||||||
|
string(APPEND doc_string "* **\"${group_name}\" options**\n")
|
||||||
|
string(JSON option_map ERROR_VARIABLE json_error GET ${json_config} ${group_name})
|
||||||
|
if(json_error)
|
||||||
|
message(FATAL_ERROR ${json_error})
|
||||||
|
endif()
|
||||||
|
string(JSON option_count ERROR_VARIABLE jsor_error LENGTH ${option_map})
|
||||||
|
if(json_error)
|
||||||
|
message(FATAL_ERROR ${json_error})
|
||||||
|
endif()
|
||||||
|
if(${option_count} EQUAL 0)
|
||||||
|
message(FATAL_ERROR "${config_file}: No options listed against the config option group '${group_name}'")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
math(EXPR option_count_1 "${option_count} - 1")
|
||||||
|
foreach(opt_num RANGE ${option_count_1})
|
||||||
|
string(JSON option_name ERROR_VARIABLE json_error MEMBER ${option_map} ${opt_num})
|
||||||
|
if(json_error)
|
||||||
|
message(FATAL_ERROR ${json_error})
|
||||||
|
endif()
|
||||||
|
string(JSON opt_object ERROR_VARIABLE json_error GET ${option_map} ${option_name})
|
||||||
|
if(json_error)
|
||||||
|
message(FATAL_ERROR "Error generating ${doc_file}: ${json_error}\n${opt_object}")
|
||||||
|
endif()
|
||||||
|
string(JSON opt_doc ERROR_VARIABLE json_error GET ${opt_object} "doc")
|
||||||
|
if(json_error)
|
||||||
|
message(FATAL_ERROR "Error generating ${doc_file}: ${json_error}")
|
||||||
|
endif()
|
||||||
|
string(APPEND doc_string " - ``${option_name}``: ${opt_doc}\n")
|
||||||
|
endforeach()
|
||||||
|
endforeach()
|
||||||
|
message(STATUS "Writing config doc to ${doc_file}")
|
||||||
|
file(WRITE ${doc_file} ${doc_string})
|
||||||
|
endfunction()
|
||||||
|
31
libc/docs/configure.rst
Normal file
31
libc/docs/configure.rst
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
.. _configure:
|
||||||
|
..
|
||||||
|
Do not edit this file directly. CMake will auto generate it.
|
||||||
|
If the changes are intended, add this file to your commit.
|
||||||
|
|
||||||
|
==========================
|
||||||
|
Configure Options
|
||||||
|
==========================
|
||||||
|
|
||||||
|
Below is the full set of options one can use to configure the libc build.
|
||||||
|
An option can be given an explicit value on the CMake command line using
|
||||||
|
the following syntax:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
$> cmake <other build options> -D<libc config option name>=<option value> <more options>
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
$> cmake <other build options> -DLIBC_CONF_PRINTF_DISABLE_FLOAT=ON <more options>
|
||||||
|
|
||||||
|
See the main ``config/config.json``, and the platform and architecture specific
|
||||||
|
overrides in ``config/<platform>/config.json`` and ``config/<platform>/<arch>/config.json,``
|
||||||
|
to learn about the defaults for your platform and target.
|
||||||
|
|
||||||
|
* **"printf" options**
|
||||||
|
- ``LIBC_CONF_PRINTF_DISABLE_FLOAT``: Disable printing floating point values in printf and friends.
|
||||||
|
- ``LIBC_CONF_PRINTF_DISABLE_INDEX_MODE``: Disable index mode in the printf format string.
|
||||||
|
- ``LIBC_CONF_PRINTF_DISABLE_WRITE_INT``: Disable handling of %n in printf format string.
|
@ -52,6 +52,7 @@ stages there is no ABI stability in any form.
|
|||||||
usage_modes
|
usage_modes
|
||||||
overlay_mode
|
overlay_mode
|
||||||
fullbuild_mode
|
fullbuild_mode
|
||||||
|
configure
|
||||||
gpu/index.rst
|
gpu/index.rst
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
|
Loading…
Reference in New Issue
Block a user