aboutsummaryrefslogtreecommitdiff
path: root/kernel/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/CMakeLists.txt')
-rw-r--r--kernel/CMakeLists.txt231
1 files changed, 208 insertions, 23 deletions
diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt
index 02e517c..2388370 100644
--- a/kernel/CMakeLists.txt
+++ b/kernel/CMakeLists.txt
@@ -1,44 +1,229 @@
-add_executable("kernel"
- # 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"
+ "kapi/cpu.cpp"
+ "kapi/devices.cpp"
+ "kapi/devices/bus.cpp"
+ "kapi/devices/cpu.cpp"
+ "kapi/devices/device.cpp"
+ "kapi/filesystem.cpp"
+ "kapi/interrupts.cpp"
"kapi/memory.cpp"
"kapi/system.cpp"
- # KSTD OS Implementation
+ # Kernel-defined KSTD Implementation
"kstd/os.cpp"
"kstd/print.cpp"
- # Kernel Implementation
- "src/main.cpp"
+ # ACPI Subsystem
+ "src/acpi/manager.cpp"
+
+ # Memory Subsystem
"src/memory/bitmap_allocator.cpp"
"src/memory/block_list_allocator.cpp"
- "src/memory/operators.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"
+
+ # Filesystem Subsystem
+ "src/filesystem/dentry.cpp"
+ "src/filesystem/device_inode.cpp"
+ "src/filesystem/filesystem.cpp"
+ "src/filesystem/inode.cpp"
+ "src/filesystem/mount_table.cpp"
+ "src/filesystem/mount.cpp"
+ "src/filesystem/open_file_descriptor.cpp"
+ "src/filesystem/open_file_table.cpp"
+ "src/filesystem/type_registry.cpp"
+ "src/filesystem/vfs.cpp"
+
+ # DevFS Filesystem
+ "src/filesystem/devfs/filesystem.cpp"
+ "src/filesystem/devfs/inode.cpp"
+
+ # ext2 Filesystem
+ "src/filesystem/ext2/filesystem.cpp"
+ "src/filesystem/ext2/inode.cpp"
+
+ # Rootfs Filesystem
+ "src/filesystem/rootfs/filesystem.cpp"
+ "src/filesystem/rootfs/inode.cpp"
)
-target_include_directories("kernel" PRIVATE
- "include"
+file(GLOB_RECURSE KERNEL_HEADERS
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ CONFIGURE_DEPENDS
+ "include/**.hpp"
)
-target_link_libraries("kernel" PRIVATE
- "os::arch"
- "os::kapi"
+target_sources("kernel_lib" PUBLIC
+ FILE_SET HEADERS
+ BASE_DIRS "include"
+ FILES
+ ${KERNEL_HEADERS}
)
-target_link_options("kernel" PRIVATE
- "-T${KERNEL_LINKER_SCRIPT}"
- "-no-pie"
- "-nostdlib"
+target_include_directories("kernel_lib" PUBLIC
+ "include"
)
-set_property(TARGET "kernel"
- APPEND
- PROPERTY LINK_DEPENDS
- "${KERNEL_LINKER_SCRIPT}"
+target_link_libraries("kernel_lib" PUBLIC
+ "kapi::lib"
+ "kstd::lib"
+ "acpi::lib"
)
-target_disassemble("kernel")
-target_extract_debug_symbols("kernel")
-target_strip("kernel")
+set_target_properties("kernel_lib" PROPERTIES
+ VERIFY_INTERFACE_HEADER_SETS YES
+)
+
+#[============================================================================[
+# 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
+ "kernel::lib"
+ "arch::lib"
+ )
+
+ target_link_options("kernel" PRIVATE
+ "-T${KERNEL_LINKER_SCRIPT}"
+ "-no-pie"
+ "-nostdlib"
+ )
+
+ set_property(TARGET "kernel"
+ APPEND
+ PROPERTY LINK_DEPENDS
+ "${KERNEL_LINKER_SCRIPT}"
+ )
+
+ target_disassemble("kernel")
+ target_extract_debug_symbols("kernel")
+ target_strip("kernel")
+
+ target_generate_bootable_iso("kernel")
+endif()
+
+#[============================================================================[
+# Tests
+#]============================================================================]
+
+if(BUILD_TESTING)
+ find_package("Catch2")
+ include("Catch")
+
+ enable_coverage("kernel_lib")
+
+ add_executable("kernel_tests")
+ add_executable("kernel::tests" ALIAS "kernel_tests")
+
+ 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"
+
+ # 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"
+
+ # Support System Listener
+ "src/test_support/state_reset_listener.cpp"
+
+ # KAPI Shim Tests
+ "kapi/cpu.tests.cpp"
+ "kapi/system.tests.cpp"
+ "kapi/filesystem.tests.cpp"
+
+ # KSTD Shim Tests
+ "kstd/print.tests.cpp"
+
+ # Memory Subsystem Tests
+ "src/memory/bitmap_allocator.tests.cpp"
+ "src/memory/block_list_allocator.tests.cpp"
+
+ # Filesystem Subsystem Tests
+ "src/filesystem/devfs/filesystem.tests.cpp"
+ "src/filesystem/devfs/inode.tests.cpp"
+ "src/filesystem/ext2/filesystem.tests.cpp"
+ "src/filesystem/ext2/inode.tests.cpp"
+ "src/filesystem/path.tests.cpp"
+ "src/filesystem/rootfs/filesystem.tests.cpp"
+ "src/filesystem/rootfs/inode.tests.cpp"
+ "src/filesystem/dentry.tests.cpp"
+ "src/filesystem/device_inode.tests.cpp"
+ "src/filesystem/mount_table.tests.cpp"
+ "src/filesystem/mount.tests.cpp"
+ "src/filesystem/open_file_descriptor.tests.cpp"
+ "src/filesystem/open_file_table.tests.cpp"
+ "src/filesystem/type_registry.tests.cpp"
+ "src/filesystem/vfs.tests.cpp"
+
+ # Storage Subsystem Tests
+ "src/devices/block_device_utils.tests.cpp"
+ "src/devices/block_device.tests.cpp"
+ "src/devices/storage/ram_disk/device.tests.cpp"
+ )
+
+ 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
+ C_CLANG_TIDY ""
+ CXX_CLANG_TIDY ""
+ )
-target_generate_bootable_iso("kernel")
+ enable_coverage("kernel_tests")
+ catch_discover_tests("kernel_tests" ${CATCH_TEST_ARGS})
+endif()