aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2021-02-21 18:11:26 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2021-02-21 18:11:26 +0200
commitb1322ac720b4a04175dae0e60e627e81e19f1cb9 (patch)
tree57be1038c2a5e9a5fdc9d16064408b52c0ef8d33
parentCall global constructors (diff)
downloadkernel.cpp-b1322ac720b4a04175dae0e60e627e81e19f1cb9.tar.xz
Kconfig
-rw-r--r--.config30
-rw-r--r--.gitignore3
-rw-r--r--Kconfig9
-rw-r--r--drivers/Kconfig42
-rw-r--r--drivers/makefile18
-rw-r--r--makefile11
-rw-r--r--src/kernel.cc7
7 files changed, 113 insertions, 7 deletions
diff --git a/.config b/.config
new file mode 100644
index 0000000..1cfccc9
--- /dev/null
+++ b/.config
@@ -0,0 +1,30 @@
+
+#
+# Build
+#
+CONFIG_EXTRA_CXX_FLAGS=""
+CONFIG_OBJ_DIR="build"
+# end of Build
+
+#
+# Drivers
+#
+
+#
+# Video
+#
+CONFIG_video0_enable=y
+CONFIG_video0_driver_cga=y
+# CONFIG_video0_driver_vga is not set
+CONFIG_VIDEO0_CLASS="CGA"
+CONFIG_VIDEO0_CONSOLE=y
+# end of Video
+
+#
+# Serial ports
+#
+CONFIG_serial0_enable=y
+CONFIG_SERIAL0_CLASS="SerialPort"
+CONFIG_SERIAL0_CONSOLE=y
+# end of Serial ports
+# end of Drivers
diff --git a/.gitignore b/.gitignore
index bd048b4..5ef19a0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,4 +3,7 @@ glitch.iso
build/
isodir/
+drivers/hardware.h
+.config.old
+
*.tar*
diff --git a/Kconfig b/Kconfig
new file mode 100644
index 0000000..9b05045
--- /dev/null
+++ b/Kconfig
@@ -0,0 +1,9 @@
+menu "Build"
+ config EXTRA_CXX_FLAGS
+ string "Additional cxx flags"
+ config OBJ_DIR
+ string "Build location"
+ default "build"
+endmenu
+
+source 'drivers/Kconfig'
diff --git a/drivers/Kconfig b/drivers/Kconfig
new file mode 100644
index 0000000..5f33772
--- /dev/null
+++ b/drivers/Kconfig
@@ -0,0 +1,42 @@
+menu "Drivers"
+
+ menu "Video"
+ config video0_enable
+ bool "Enable video0"
+ default y
+
+ choice video0_driver
+ prompt "video0 driver"
+ depends on video0_enable
+ config video0_driver_cga
+ bool "CGA"
+ config video0_driver_vga
+ bool "VGA"
+ endchoice
+
+ config VIDEO0_CLASS
+ string "video0 class"
+ default "CGA" if video0_driver_cga
+ default "VGA" if video0_driver_vga
+ depends on video0_enable
+ config VIDEO0_CONSOLE
+ bool "use video0 for debug output"
+ default y
+ depends on video0_enable
+ endmenu
+
+ menu "Serial ports"
+ config serial0_enable
+ bool "Enable serial0"
+ default y
+
+ config SERIAL0_CLASS
+ string "serial0 class"
+ default "SerialPort"
+ depends on serial0_enable
+ config SERIAL0_CONSOLE
+ bool "Use serial0 for debug output"
+ default y
+ depends on serial0_enable
+ endmenu
+endmenu
diff --git a/drivers/makefile b/drivers/makefile
index 0d9071a..ad255c4 100644
--- a/drivers/makefile
+++ b/drivers/makefile
@@ -1,2 +1,20 @@
CXX_OBJ += drivers/cga.o \
drivers/serial.o
+
+HWH := drivers/hardware.h
+autogen := $(autogen) $(HWH)
+
+$(HWH): .config
+ @echo " GEN $@"
+ @echo \/\* autogenerated hardware description \*\/ > $(HWH)
+ @echo \#pragma once >> $(HWH)
+ifdef CONFIG_video0_enable
+ @echo \#define HAS_VIDEO0 >> $(HWH)
+ @echo $(CONFIG_VIDEO0_CLASS) video0\; >> $(HWH)
+ @echo constexpr bool video0_console = true\; >> $(HWH)
+endif
+ifdef CONFIG_serial0_enable
+ @echo \#define HAS_SERIAL0 >> $(HWH)
+ @echo $(CONFIG_SERIAL0_CLASS) serial0\; >> $(HWH)
+ @echo constexpr bool serial0_console = true\; >> $(HWH)
+endif
diff --git a/makefile b/makefile
index 2d9460d..bbd42a4 100644
--- a/makefile
+++ b/makefile
@@ -1,5 +1,9 @@
include toolchain.makefile
-OBJ_DIR := build
+include .config
+OBJ_DIR != echo $(CONFIG_OBJ_DIR)
+
+.PHONY: default clean test check-grub run
+default: glitch.elf
include libk/makefile
include src/makefile
@@ -12,10 +16,7 @@ CXX_TEST_OBJ := $(addprefix $(OBJ_DIR)/, $(CXX_TEST_OBJ))
CXX_INCLUDE := $(addprefix -I, $(CXX_INCLUDE))
CXX_SYSTEM_INCLUDE := $(addprefix -isystem, $(CXX_SYSTEM_INCLUDE))
-.PHONY: default clean test check-grub run
-default: glitch.elf
-
-glitch.elf: $(AS_OBJ) $(CXX_OBJ)
+glitch.elf: $(autogen) $(AS_OBJ) $(CXX_OBJ)
@echo " LD $@"
@$(LD) $(LD_FLAGS) -o $@ $(AS_OBJ) $(CXX_OBJ)
diff --git a/src/kernel.cc b/src/kernel.cc
index 37773e1..ff95d16 100644
--- a/src/kernel.cc
+++ b/src/kernel.cc
@@ -15,8 +15,7 @@
#include "idt.h"
#include "serial.h"
-SerialPort serial0;
-CGA video0;
+#include "hardware.h"
typedef void (*constructor)();
@@ -32,9 +31,13 @@ void dump_multiboot(uint32_t mb_magic, uint32_t mb_addr);
void dump_gdt();
void kernel_main([[maybe_unused]] uint32_t mb_magic, [[maybe_unused]] uint32_t mb_addr) {
+#ifdef HAS_SERIAL0
if (serial0.self_check()) Console::set(&serial0);
+#endif
+#ifdef HAS_VIDEO0
Console::set(&video0);
+#endif
printk("Hello, kernel World!\n");