aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-04-21 13:06:35 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-04-21 13:06:35 +0200
commit9b4cbc6ba3f8059278a20a4893780717851ce8e4 (patch)
treebb089d306639e1c3ef27c9b8f3fc90e8742f4117 /kernel
parent3441e7e164d8e5e8413a1eb47e3e9f3c824ed2d0 (diff)
downloadteachos-9b4cbc6ba3f8059278a20a4893780717851ce8e4.tar.xz
teachos-9b4cbc6ba3f8059278a20a4893780717851ce8e4.zip
build: clean up configuration
Diffstat (limited to 'kernel')
-rw-r--r--kernel/CMakeLists.txt147
1 files changed, 97 insertions, 50 deletions
diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt
index e83e529..d4484cd 100644
--- a/kernel/CMakeLists.txt
+++ b/kernel/CMakeLists.txt
@@ -1,5 +1,12 @@
-add_library("kernel_objs" OBJECT
- # Platform-independent KAPI implementation
+#[============================================================================[
+# Library
+#]============================================================================]
+
+add_library("kernel_lib" OBJECT)
+add_library("kernel::lib" ALIAS "kernel_lib")
+
+target_sources("kernel_lib" PRIVATE
+ # Kernel-defined KAPI Implementation
"kapi/acpi.cpp"
"kapi/boot_modules.cpp"
"kapi/cio.cpp"
@@ -13,27 +20,31 @@ add_library("kernel_objs" OBJECT
"kapi/memory.cpp"
"kapi/system.cpp"
- # KSTD OS Implementation
+ # Kernel-defined KSTD Implementation
"kstd/os.cpp"
"kstd/print.cpp"
- # Kernel Implementation
+ # ACPI Subsystem
"src/acpi/manager.cpp"
+
+ # Memory Subsystem
"src/memory/bitmap_allocator.cpp"
"src/memory/block_list_allocator.cpp"
"src/memory/mmio_allocator.cpp"
"src/memory.cpp"
+
+ # Device Subsystem
"src/devices/block_device.cpp"
"src/devices/block_device_utils.cpp"
"src/devices/root_bus.cpp"
+
+ # Storage Device Subsystem
"src/devices/storage/controller.cpp"
"src/devices/storage/management.cpp"
"src/devices/storage/ram_disk/controller.cpp"
"src/devices/storage/ram_disk/device.cpp"
- "src/filesystem/devfs/filesystem.cpp"
- "src/filesystem/devfs/inode.cpp"
- "src/filesystem/ext2/filesystem.cpp"
- "src/filesystem/ext2/inode.cpp"
+
+ # Filesystem Subsystem
"src/filesystem/dentry.cpp"
"src/filesystem/device_inode.cpp"
"src/filesystem/file_descriptor_table.cpp"
@@ -42,86 +53,124 @@ add_library("kernel_objs" OBJECT
"src/filesystem/mount_table.cpp"
"src/filesystem/mount.cpp"
"src/filesystem/open_file_description.cpp"
- "src/filesystem/rootfs/filesystem.cpp"
- "src/filesystem/rootfs/inode.cpp"
"src/filesystem/vfs.cpp"
-)
-target_include_directories("kernel_objs" PUBLIC
- "include"
-)
+ # DevFS Filesystem
+ "src/filesystem/devfs/filesystem.cpp"
+ "src/filesystem/devfs/inode.cpp"
-target_link_libraries("kernel_objs" PUBLIC
- "os::kapi"
+ # ext2 Filesystem
+ "src/filesystem/ext2/filesystem.cpp"
+ "src/filesystem/ext2/inode.cpp"
+
+ # Rootfs Filesystem
+ "src/filesystem/rootfs/filesystem.cpp"
+ "src/filesystem/rootfs/inode.cpp"
)
-file(GLOB_RECURSE KERNEL_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "include/**.hpp")
+file(GLOB_RECURSE KERNEL_HEADERS
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ CONFIGURE_DEPENDS
+ "include/**.hpp"
+)
-target_sources("kernel_objs" PUBLIC
+target_sources("kernel_lib" PUBLIC
FILE_SET HEADERS
BASE_DIRS "include"
FILES
${KERNEL_HEADERS}
)
-add_library("os::kernel" ALIAS "kernel_objs")
+target_include_directories("kernel_lib" PUBLIC
+ "include"
+)
+
+target_link_libraries("kernel_lib" PUBLIC
+ "kapi::lib"
+ "kstd::lib"
+ "acpi::lib"
+)
+
+set_target_properties("kernel_lib" PROPERTIES
+ VERIFY_INTERFACE_HEADER_SETS YES
+)
-if(CMAKE_CROSSCOMPILING)
- add_executable("kernel"
+#[============================================================================[
+# Executable
+#]============================================================================]
+
+if(NOT BUILD_TESTING)
+ add_executable("kernel")
+ add_executable(kernel::exe ALIAS "kernel")
+
+ target_sources("kernel" PRIVATE
"src/main.cpp"
"src/memory/operators.cpp"
)
- target_link_libraries("kernel" PRIVATE
- "os::arch"
- "os::kernel"
+ target_link_libraries("kernel" PRIVATE
+ "kernel::lib"
+ "arch::lib"
)
- target_link_options("kernel" PRIVATE
+ target_link_options("kernel" PRIVATE
"-T${KERNEL_LINKER_SCRIPT}"
"-no-pie"
"-nostdlib"
)
- set_property(TARGET "kernel"
+ set_property(TARGET "kernel"
APPEND
PROPERTY LINK_DEPENDS
"${KERNEL_LINKER_SCRIPT}"
)
- target_disassemble("kernel")
- target_extract_debug_symbols("kernel")
- target_strip("kernel")
+ target_disassemble("kernel")
+ target_extract_debug_symbols("kernel")
+ target_strip("kernel")
+
+ target_generate_bootable_iso("kernel")
+endif()
+
+#[============================================================================[
+# Tests
+#]============================================================================]
+
+if(BUILD_TESTING)
+ enable_coverage("kernel_lib")
- target_generate_bootable_iso("kernel")
-else()
- enable_coverage("kernel_objs")
+ add_executable("kernel_tests")
+ add_executable("kernel::tests" ALIAS "kernel_tests")
- add_library("kernel_test_support" OBJECT
+ target_sources("kernel_tests" PRIVATE
+ # Platform-defined KAPI
"src/test_support/kapi/cpu.cpp"
"src/test_support/kapi/cio.cpp"
"src/test_support/kapi/interrupts.cpp"
"src/test_support/kapi/memory.cpp"
+
+ # Device Subsystem Support
"src/test_support/devices/block_device.cpp"
"src/test_support/devices/character_device.cpp"
+
+ # Filesystem Subsystem Support
"src/test_support/filesystem/inode.cpp"
"src/test_support/filesystem/filesystem.cpp"
"src/test_support/filesystem/ext2.cpp"
"src/test_support/filesystem/storage_boot_module_fixture.cpp"
- "src/test_support/filesystem/storage_boot_module_vfs_fixture.cpp" "src/test_support/log_buffer.cpp"
+ "src/test_support/filesystem/storage_boot_module_vfs_fixture.cpp"
+
+ # I/O Support
+ "src/test_support/log_buffer.cpp"
"src/test_support/output_device.cpp"
+
+ # Memory Support
"src/test_support/page_mapper.cpp"
"src/test_support/simulated_memory.cpp"
- "src/test_support/state_reset_listener.cpp"
- )
- add_library("os::kernel_test_support" ALIAS "kernel_test_support")
- target_link_libraries("kernel_test_support" PUBLIC
- "os::kernel"
- "Catch2::Catch2WithMain"
- )
+ # Support System Listener
+ "src/test_support/state_reset_listener.cpp"
- add_executable("kernel_tests"
# KAPI Shim Tests
"kapi/cpu.tests.cpp"
"kapi/system.tests.cpp"
@@ -154,23 +203,21 @@ else()
"src/devices/block_device.tests.cpp"
"src/devices/storage/ram_disk/device.tests.cpp"
)
- add_executable("os::kernel_tests" ALIAS "kernel_tests")
- target_link_libraries("kernel_tests" PRIVATE
- "os::kernel"
- "os::kernel_test_support"
+ target_link_libraries("kernel_tests" PRIVATE
+ "kernel::lib"
+ "Catch2::Catch2WithMain"
)
target_compile_definitions("kernel_tests" PRIVATE
KERNEL_TEST_ASSETS_DIR="${CMAKE_CURRENT_SOURCE_DIR}/src/test_support/filesystem/test_assets"
)
- set_target_properties("kernel_tests" PROPERTIES
+ set_target_properties("kernel_tests" PROPERTIES
C_CLANG_TIDY ""
CXX_CLANG_TIDY ""
)
- enable_coverage("kernel_tests")
- catch_discover_tests("os::kernel_tests")
+ enable_coverage("kernel_tests")
+ catch_discover_tests("kernel_tests")
endif()
-