diff options
Diffstat (limited to 'kernel/CMakeLists.txt')
| -rw-r--r-- | kernel/CMakeLists.txt | 231 |
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() |
