#[============================================================================[ # 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" # Kernel-defined KSTD Implementation "kstd/os.cpp" "kstd/print.cpp" # ACPI Subsystem "kernel/acpi/manager.cpp" # Memory Subsystem "kernel/memory/bitmap_allocator.cpp" "kernel/memory/block_list_allocator.cpp" "kernel/memory/mmio_allocator.cpp" "kernel/memory.cpp" # Device Subsystem "kernel/devices/block_device.cpp" "kernel/devices/block_device_utils.cpp" "kernel/devices/root_bus.cpp" # Storage Device Subsystem "kernel/devices/storage/controller.cpp" "kernel/devices/storage/management.cpp" "kernel/devices/storage/ram_disk/controller.cpp" "kernel/devices/storage/ram_disk/device.cpp" # Filesystem Subsystem "kernel/filesystem/dentry.cpp" "kernel/filesystem/device_inode.cpp" "kernel/filesystem/filesystem.cpp" "kernel/filesystem/inode.cpp" "kernel/filesystem/mount_table.cpp" "kernel/filesystem/mount.cpp" "kernel/filesystem/open_file_descriptor.cpp" "kernel/filesystem/open_file_table.cpp" "kernel/filesystem/type_registry.cpp" "kernel/filesystem/vfs.cpp" # DevFS Filesystem "kernel/filesystem/devfs/filesystem.cpp" "kernel/filesystem/devfs/inode.cpp" # ext2 Filesystem "kernel/filesystem/ext2/filesystem.cpp" "kernel/filesystem/ext2/inode.cpp" # Rootfs Filesystem "kernel/filesystem/rootfs/filesystem.cpp" "kernel/filesystem/rootfs/inode.cpp" ) file(GLOB_RECURSE KERNEL_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS "kernel/**.hpp" ) target_sources("kernel_lib" PUBLIC FILE_SET HEADERS BASE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}" FILES ${KERNEL_HEADERS} ) target_include_directories("kernel_lib" PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" ) target_link_libraries("kernel_lib" PUBLIC "kapi::lib" "kstd::lib" "acpi::lib" ) 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 "kernel/main.cpp" "kernel/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 "kernel/test_support/kapi/cpu.cpp" "kernel/test_support/kapi/cio.cpp" "kernel/test_support/kapi/interrupts.cpp" "kernel/test_support/kapi/memory.cpp" # Device Subsystem Support "kernel/test_support/devices/block_device.cpp" "kernel/test_support/devices/character_device.cpp" # Filesystem Subsystem Support "kernel/test_support/filesystem/inode.cpp" "kernel/test_support/filesystem/filesystem.cpp" "kernel/test_support/filesystem/ext2.cpp" "kernel/test_support/filesystem/storage_boot_module_fixture.cpp" "kernel/test_support/filesystem/storage_boot_module_vfs_fixture.cpp" # I/O Support "kernel/test_support/log_buffer.cpp" "kernel/test_support/output_device.cpp" # Memory Support "kernel/test_support/page_mapper.cpp" "kernel/test_support/simulated_memory.cpp" # Support System Listener "kernel/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 "kernel/memory/bitmap_allocator.tests.cpp" "kernel/memory/block_list_allocator.tests.cpp" # Filesystem Subsystem Tests "kernel/filesystem/devfs/filesystem.tests.cpp" "kernel/filesystem/devfs/inode.tests.cpp" "kernel/filesystem/ext2/filesystem.tests.cpp" "kernel/filesystem/ext2/inode.tests.cpp" "kernel/filesystem/path.tests.cpp" "kernel/filesystem/rootfs/filesystem.tests.cpp" "kernel/filesystem/rootfs/inode.tests.cpp" "kernel/filesystem/dentry.tests.cpp" "kernel/filesystem/device_inode.tests.cpp" "kernel/filesystem/mount_table.tests.cpp" "kernel/filesystem/mount.tests.cpp" "kernel/filesystem/open_file_descriptor.tests.cpp" "kernel/filesystem/open_file_table.tests.cpp" "kernel/filesystem/type_registry.tests.cpp" "kernel/filesystem/vfs.tests.cpp" # Storage Subsystem Tests "kernel/devices/block_device_utils.tests.cpp" "kernel/devices/block_device.tests.cpp" "kernel/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}/kernel/test_support/filesystem/test_assets" ) set_target_properties("kernel_tests" PROPERTIES C_CLANG_TIDY "" CXX_CLANG_TIDY "" ) enable_coverage("kernel_tests") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bht_results") catch_discover_tests("kernel::tests" REPORTER junit OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/bht_results" OUTPUT_SUFFIX ".xml" ) endif()