diff options
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | CMakeLists.txt | 18 | ||||
| -rw-r--r-- | Kconfig | 26 | ||||
| -rw-r--r-- | cmake/Kconfig.cmake | 31 | ||||
| -rw-r--r-- | cmake/TC-clang.cmake | 7 | ||||
| -rw-r--r-- | configs/example_config | 3 | ||||
| -rw-r--r-- | source/test.c | 8 | ||||
| -rwxr-xr-x | tools/make-cmake-config | 3 |
8 files changed, 98 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..772f2de --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.config* +build diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..2a13540 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,18 @@ +######################################################################################################################## +# General Configuration +######################################################################################################################## +cmake_minimum_required(VERSION 3.22) +project(KconfigCmake VERSION 0.0.1 LANGUAGES C) + +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) + +include(Kconfig) + +if(CONFIG_USE_TOOLCHAIN_FILE) + include(${CONFIG_CMAKE_TOOLCHAIN_FILE}) +endif() + +include_directories(${CMAKE_BINARY_DIR}) + +add_executable(test ${CMAKE_CURRENT_SOURCE_DIR}/source/test.c) + @@ -0,0 +1,26 @@ +mainmenu "Example Configuration" + +config USE_TOOLCHAIN_FILE + bool "Use Toolchain File" + default n + help + Enable toolchain file option. + +config CMAKE_TOOLCHAIN_FILE + string "Toolchain File Path" + default "TC-clang.cmake" + depends on USE_TOOLCHAIN_FILE + help + Path to toolchain file from CMake Current Source Dir. + +config AGE + int "Age" + default 18 + help + Example Int Config + +config NAME + string "Name" + default "John" + help + Example String Config diff --git a/cmake/Kconfig.cmake b/cmake/Kconfig.cmake new file mode 100644 index 0000000..e19a539 --- /dev/null +++ b/cmake/Kconfig.cmake @@ -0,0 +1,31 @@ +set(TOOL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tools) +set(KCONFIG_DIR ${TOOL_DIR}/Kconfiglib) +set(LOCAL_CONFIG ${CMAKE_CURRENT_SOURCE_DIR}/.config) + +function(parse_dot_config) +endfunction() + +if(DEFCONFIG) + execute_process(COMMAND ${KCONFIG_DIR}/defconfig.py ${CMAKE_CURRENT_SOURCE_DIR}/configs/${DEFCONFIG}) +else() + message(FATAL_ERROR "DEFCONFIG not set.") +endif() + +#if(EXISTS ${LOCAL_CONFIG}) +#endif() + +add_custom_target(menuconfig + COMMAND ${KCONFIG_DIR}/menuconfig.py + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +add_custom_target(genconfig + COMMAND ${KCONFIG_DIR}/genconfig.py --header-path ${CMAKE_BINARY_DIR}/generated.h --config-out ${CMAKE_BINARY_DIR}/config.make + COMMAND ${TOOL_DIR}/make-cmake-config ${CMAKE_BINARY_DIR}/config.make + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +if(EXISTS ${CMAKE_BINARY_DIR}/config.cmake) + include(${CMAKE_BINARY_DIR}/config.cmake) +endif() + diff --git a/cmake/TC-clang.cmake b/cmake/TC-clang.cmake new file mode 100644 index 0000000..992011f --- /dev/null +++ b/cmake/TC-clang.cmake @@ -0,0 +1,7 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR amd64) + +set(tools /usr/lib/llvm/21/) +set(CMAKE_C_COMPILER ${tools}/bin/clang) +set(CMAKE_CXX_COMPILER ${tools}/bin/clang++) +add_compile_options(-g) diff --git a/configs/example_config b/configs/example_config new file mode 100644 index 0000000..0c34f1e --- /dev/null +++ b/configs/example_config @@ -0,0 +1,3 @@ +CONFIG_USE_TOOLCHAIN_FILE=y +CONFIG_AGE=22 +CONFIG_NAME="John Smith" diff --git a/source/test.c b/source/test.c new file mode 100644 index 0000000..eac9f91 --- /dev/null +++ b/source/test.c @@ -0,0 +1,8 @@ +#include <stdio.h> +#include "generated.h" + +int main(void) { + printf("CONFIG_AGE: %d\n", CONFIG_AGE); + printf("CONFIG_NAME: %s\n", CONFIG_NAME); +} + diff --git a/tools/make-cmake-config b/tools/make-cmake-config new file mode 100755 index 0000000..6fa7ba4 --- /dev/null +++ b/tools/make-cmake-config @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +cat $1 | awk '{print gensub(/(.*)=(.*)/, "set(\\1 \\2)", 1)}' > "$(dirname $1)/$(basename -s .make $1).cmake" |
