From b90fced3e1fa2a5850c991a14126875f29440434 Mon Sep 17 00:00:00 2001 From: Siva Chandra Reddy Date: Fri, 8 Sep 2023 11:19:01 -0700 Subject: [PATCH 1/2] [libc] Generate configure.rst from the JSON config information. --- libc/CMakeLists.txt | 1 + libc/cmake/modules/LibcConfig.cmake | 82 +++++++++++++++++++++++++++++ libc/docs/configure.rst | 31 +++++++++++ libc/docs/index.rst | 1 + 4 files changed, 115 insertions(+) create mode 100644 libc/docs/configure.rst diff --git a/libc/CMakeLists.txt b/libc/CMakeLists.txt index 0665cf0f7a1d9..12fff25c197e2 100644 --- a/libc/CMakeLists.txt +++ b/libc/CMakeLists.txt @@ -143,6 +143,7 @@ foreach(opt IN LISTS global_config) message(STATUS "${opt_name}: ${opt_value}") set(${opt_name} ${opt_value}) 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}/${LIBC_TARGET_ARCHITECTURE}/config.json ${cmd_line_conf}) diff --git a/libc/cmake/modules/LibcConfig.cmake b/libc/cmake/modules/LibcConfig.cmake index a9c69de8a310a..000e471704bf7 100644 --- a/libc/cmake/modules/LibcConfig.cmake +++ b/libc/cmake/modules/LibcConfig.cmake @@ -135,3 +135,85 @@ function(load_libc_config config_file) set(${opt_name} ${opt_value} PARENT_SCOPE) endforeach() 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") + return() + 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 -D=