From 2995e97cd489abeeedf90ac60b4b98499661ce7e Mon Sep 17 00:00:00 2001 From: Jacob McDonnell Date: Sat, 7 Mar 2026 15:08:04 -0500 Subject: feat: Kconfig support added Initial support for Kconfiglib has been added. This includes menuconfig, savedefconfig, defconfig, and config.h generation. --- .gitignore | 5 +++++ .gitmodules | 3 +++ example/.config | 1 + example/Kconfig | 8 ++++++++ example/Makefile | 7 +++++-- example/config.h | 1 + example/configs/8_defconfig | 1 + example/libfib/Makefile | 2 +- example/libfib/fib.o | Bin 0 -> 640 bytes example/libfib/libfib.a | Bin 0 -> 824 bytes example/libfib/libfib.so.1.1 | Bin 0 -> 16784 bytes example/test/Makefile | 3 ++- example/test/main | Bin 0 -> 33464 bytes example/test/main.c | 3 ++- example/test/main.o | Bin 0 -> 800 bytes example/tools | 1 - example/tools/Kconfiglib | 1 + example/tools/mk | 1 + mk/mcd.Kconfig.mk | 21 +++++++++++++++++++++ 19 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 example/.config create mode 100644 example/Kconfig create mode 100644 example/config.h create mode 100644 example/configs/8_defconfig create mode 100644 example/libfib/fib.o create mode 100644 example/libfib/libfib.a create mode 100755 example/libfib/libfib.so.1.1 create mode 100755 example/test/main create mode 100644 example/test/main.o delete mode 120000 example/tools create mode 160000 example/tools/Kconfiglib create mode 120000 example/tools/mk create mode 100644 mk/mcd.Kconfig.mk diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9872f40 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +example/config.h +example/.config* +example/libfib/fib.o +example/libfib/libfib.* +example/test/main.o diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..8c76d59 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "example/tools/Kconfiglib"] + path = example/tools/Kconfiglib + url = https://codeberg.org/JacobMcDonnell/Kconfiglib.git diff --git a/example/.config b/example/.config new file mode 100644 index 0000000..5140cd9 --- /dev/null +++ b/example/.config @@ -0,0 +1 @@ +CONFIG_FIB_NUMBER=8 diff --git a/example/Kconfig b/example/Kconfig new file mode 100644 index 0000000..11c2de0 --- /dev/null +++ b/example/Kconfig @@ -0,0 +1,8 @@ +mainmenu "Example Program Configuration" + +config FIB_NUMBER + int "Fibonacci Number" + default 9 + help + Which Fibonacci number you would like. + diff --git a/example/Makefile b/example/Makefile index b0e81b3..3b69ed1 100644 --- a/example/Makefile +++ b/example/Makefile @@ -3,7 +3,10 @@ # # SPDX-License-Identifier: BSD-2-Clause # -SUBDIRS = libfib test +SUBDIRS = libfib test +KCONFIGLIB_DIR = tools/Kconfiglib +GENERATED_HEADER = config.h -include tools/mcd.subdir.mk +include tools/mk/mcd.subdir.mk +include tools/mk/mcd.Kconfig.mk diff --git a/example/config.h b/example/config.h new file mode 100644 index 0000000..3efc17a --- /dev/null +++ b/example/config.h @@ -0,0 +1 @@ +#define CONFIG_FIB_NUMBER 8 diff --git a/example/configs/8_defconfig b/example/configs/8_defconfig new file mode 100644 index 0000000..5140cd9 --- /dev/null +++ b/example/configs/8_defconfig @@ -0,0 +1 @@ +CONFIG_FIB_NUMBER=8 diff --git a/example/libfib/Makefile b/example/libfib/Makefile index 4df5255..fae976f 100644 --- a/example/libfib/Makefile +++ b/example/libfib/Makefile @@ -13,5 +13,5 @@ CFLAGS = -Wall \ -std=c17 SRCS = fib.c -include ../tools/mcd.lib.mk +include ../tools/mk/mcd.lib.mk diff --git a/example/libfib/fib.o b/example/libfib/fib.o new file mode 100644 index 0000000..9380b6f Binary files /dev/null and b/example/libfib/fib.o differ diff --git a/example/libfib/libfib.a b/example/libfib/libfib.a new file mode 100644 index 0000000..6c7c483 Binary files /dev/null and b/example/libfib/libfib.a differ diff --git a/example/libfib/libfib.so.1.1 b/example/libfib/libfib.so.1.1 new file mode 100755 index 0000000..2ed114c Binary files /dev/null and b/example/libfib/libfib.so.1.1 differ diff --git a/example/test/Makefile b/example/test/Makefile index 041722b..7bdeca0 100644 --- a/example/test/Makefile +++ b/example/test/Makefile @@ -10,9 +10,10 @@ CFLAGS = -Wall \ -Wextra \ -Wpedantic \ -I../libfib \ + -I.. \ -std=c17 LDFLAGS = -L../libfib \ -lfib -include ../tools/mcd.prog.mk +include ../tools/mk/mcd.prog.mk diff --git a/example/test/main b/example/test/main new file mode 100755 index 0000000..50681f9 Binary files /dev/null and b/example/test/main differ diff --git a/example/test/main.c b/example/test/main.c index b5a75b1..92e3b29 100644 --- a/example/test/main.c +++ b/example/test/main.c @@ -5,9 +5,10 @@ // #include #include "fib.h" +#include "config.h" int main(void) { - printf("fib(9) = %llu\n", fib(9)); + printf("fib(%u) = %llu\n", CONFIG_FIB_NUMBER, fib(CONFIG_FIB_NUMBER)); return 0; } diff --git a/example/test/main.o b/example/test/main.o new file mode 100644 index 0000000..62fd238 Binary files /dev/null and b/example/test/main.o differ diff --git a/example/tools b/example/tools deleted file mode 120000 index add5f73..0000000 --- a/example/tools +++ /dev/null @@ -1 +0,0 @@ -../mk \ No newline at end of file diff --git a/example/tools/Kconfiglib b/example/tools/Kconfiglib new file mode 160000 index 0000000..a74dfcf --- /dev/null +++ b/example/tools/Kconfiglib @@ -0,0 +1 @@ +Subproject commit a74dfcfaf14ea8a22866df725e757d7c901255dd diff --git a/example/tools/mk b/example/tools/mk new file mode 120000 index 0000000..fdcfb78 --- /dev/null +++ b/example/tools/mk @@ -0,0 +1 @@ +../../mk \ No newline at end of file diff --git a/mk/mcd.Kconfig.mk b/mk/mcd.Kconfig.mk new file mode 100644 index 0000000..7861fb4 --- /dev/null +++ b/mk/mcd.Kconfig.mk @@ -0,0 +1,21 @@ +ifeq ($(KCONFIGLIB_DIR),) +$(warning "KCONFIGLIB_DIR needs to be defined") +endif + +all: $(GENERATED_HEADER) + +menuconfig: + $(KCONFIGLIB_DIR)/menuconfig.py + +savedefconfig: + $(KCONFIGLIB_DIR)/savedefconfig.py + +%_defconfig: configs/%_defconfig + $(KCONFIGLIB_DIR)/defconfig.py $< + +$(GENERATED_HEADER): $(wildcard .config) + $(KCONFIGLIB_DIR)/genconfig.py --header-path $@ + +-include .config +.PHONY: all menuconfig savedefconfig + -- cgit v1.2.3