cmake: kconfig: allow for Kconfig CONFIG namespace
This commit allows for specifying a dedicated Kconfig namespace, for example: <namespace>_CONFIG This namespace will then be used for handling loading of configuration files into CMake configure scope, as well as handling of CMake cache variables when set using `-D<namespace>_CONFIG_<var>=<value>`. This allows greater flexibility when re-using the cmake/kconfig.cmake in other projects. Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
This commit is contained in:
parent
a3a0112e03
commit
796474e366
1 changed files with 12 additions and 9 deletions
|
@ -17,6 +17,8 @@ set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${AUTOCONF_H})
|
|||
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/kconfig/include/generated)
|
||||
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/kconfig/include/config)
|
||||
|
||||
set_ifndef(KCONFIG_NAMESPACE "CONFIG")
|
||||
|
||||
# Support multiple SOC_ROOT, remove ZEPHYR_BASE as that is always sourced.
|
||||
set(kconfig_soc_root ${SOC_ROOT})
|
||||
list(REMOVE_ITEM kconfig_soc_root ${ZEPHYR_BASE})
|
||||
|
@ -109,6 +111,7 @@ set(COMMON_KCONFIG_ENV_SETTINGS
|
|||
PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
|
||||
srctree=${ZEPHYR_BASE}
|
||||
KERNELVERSION=${KERNELVERSION}
|
||||
CONFIG_=${KCONFIG_NAMESPACE}_
|
||||
KCONFIG_CONFIG=${DOTCONFIG}
|
||||
# Set environment variables so that Kconfig can prune Kconfig source
|
||||
# files for other architectures
|
||||
|
@ -170,15 +173,15 @@ foreach(kconfig_target
|
|||
endforeach()
|
||||
|
||||
# Support assigning Kconfig symbols on the command-line with CMake
|
||||
# cache variables prefixed with 'CONFIG_'. This feature is
|
||||
# experimental and undocumented until it has undergone more
|
||||
# cache variables prefixed according to the Kconfig namespace.
|
||||
# This feature is experimental and undocumented until it has undergone more
|
||||
# user-testing.
|
||||
unset(EXTRA_KCONFIG_OPTIONS)
|
||||
get_cmake_property(cache_variable_names CACHE_VARIABLES)
|
||||
foreach (name ${cache_variable_names})
|
||||
if("${name}" MATCHES "^CONFIG_")
|
||||
# When a cache variable starts with 'CONFIG_', it is assumed to be
|
||||
# a Kconfig symbol assignment from the CMake command line.
|
||||
if("${name}" MATCHES "^${KCONFIG_NAMESPACE}_")
|
||||
# When a cache variable starts with the 'KCONFIG_NAMESPACE' value, it is
|
||||
# assumed to be a Kconfig symbol assignment from the CMake command line.
|
||||
set(EXTRA_KCONFIG_OPTIONS
|
||||
"${EXTRA_KCONFIG_OPTIONS}\n${name}=${${name}}"
|
||||
)
|
||||
|
@ -316,18 +319,18 @@ add_custom_target(config-twister DEPENDS ${DOTCONFIG})
|
|||
# CMakeCache.txt. If the symbols end up in DOTCONFIG they will be
|
||||
# re-introduced to the namespace through 'import_kconfig'.
|
||||
foreach (name ${cache_variable_names})
|
||||
if("${name}" MATCHES "^CONFIG_")
|
||||
if("${name}" MATCHES "^${KCONFIG_NAMESPACE}_")
|
||||
unset(${name})
|
||||
unset(${name} CACHE)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Parse the lines prefixed with CONFIG_ in the .config file from Kconfig
|
||||
import_kconfig(CONFIG_ ${DOTCONFIG})
|
||||
# Import the .config file and make all settings available in CMake processing.
|
||||
import_kconfig(${KCONFIG_NAMESPACE} ${DOTCONFIG})
|
||||
|
||||
# Re-introduce the CLI Kconfig symbols that survived
|
||||
foreach (name ${cache_variable_names})
|
||||
if("${name}" MATCHES "^CONFIG_")
|
||||
if("${name}" MATCHES "^${KCONFIG_NAMESPACE}_")
|
||||
if(DEFINED ${name})
|
||||
set(${name} ${${name}} CACHE STRING "")
|
||||
endif()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue