summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--CMakeLists.txt18
-rw-r--r--Kconfig26
-rw-r--r--cmake/Kconfig.cmake31
-rw-r--r--cmake/TC-clang.cmake7
-rw-r--r--configs/example_config3
-rw-r--r--source/test.c8
-rwxr-xr-xtools/make-cmake-config3
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)
+
diff --git a/Kconfig b/Kconfig
new file mode 100644
index 0000000..2c34b88
--- /dev/null
+++ b/Kconfig
@@ -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"